Сайт | Скачать | Видео | Wiki

Автор Тема: Универсальный менеджер монтирования модулей без aufs , overlayfs.  (Прочитано 3448 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 885
  • Репутация: +24/-0
  • Автор темы
Представляю финальную версию скрипта менеджера подключения модулей (sb,sfs,squashfs--тип  коректируется в скрипте строка 31 и 61 (строка TARGET_DIR="/mnt/$(basename "$selected_module" .sb )) , 
Скрипт использует монтирование модуля с помощью squashfs в /mnt а далее пробрасывает символические ссылки в / .
скрипт использует для вывода меню консольный peco
Модули ложить в ~/modules (для универсальности использования на разных дистрибутивах) Скрипт позволяет активировать деактивровать модуль. Выбираем модуль потом выбираем действие: Активировать , Деактивировать , используем.
====================================================
Следует скачивать  менеджер модулей в ответе #55
это  финальная верия
тот что ниже без ошибок, но в нём нет важных плюшек
берите из поста  #55
====================================================
mod_man.sh
------------------------------
во вложении так же добавил следующую улучшеную версию
менеджера модулей, улучшены взаимодействие
возможность выбора  активации на постоянной или временной основе
подробнее на моей странице в вк https://vk.com/@36590075-rabota-so-skriptom-dlya-upravleniya-modulyami-v-linux-s-ispo
================
Код
#!/bin/bash
set -x

while true; do
    # Проверки
    command -v peco >/dev/null || { echo "Требуется утилита peco"; exit 1; }

    # Выбор модуля
    selected_module="$(find ~/modules -maxdepth 1 -type f | sed 's|.*/||' | peco)"

    if [ -z "$selected_module" ]; then
        echo "Выход из скрипта."
        break
    fi

    # Путь к файлу спецификации модуля
    spec_file="$HOME/.config/special_file_${selected_module}.txt"
   
   # Ищем и удаляем битые символические ссылки в системе
   echo "Поиск и удаление битых ссылок: ЖДИТЕ"
    sudo find /usr /var /etc -depth -type l ! \( -path /proc -o -path /sys -o -path /dev \) -prune -o -type l ! -exec test -e {} \; -print -delete
    echo "БИТЫЕ ССЫЛКИ УДАЛЕНЫ!"
    # Меню действия
    ACTION=$(echo -e "Активировать\nДеактивировать" | peco --prompt "Выберите действие:")

    case "$ACTION" in

        "Активировать")

            SOURCE_DIR="$HOME/modules/$selected_module"
            TARGET_DIR="/mnt/$(basename "$selected_module" .sb)"

            # Создаем каталог в /mnt с именем выбранного модуля
            sudo mkdir -p "$TARGET_DIR"

            # Монтируем выбранный модуль в /mnt
            sudo mount -t squashfs -o loop "$SOURCE_DIR" "$TARGET_DIR"

            # Создаем файл спецификации с именем модуля
            spec_file="$HOME/.config/special_file_${selected_module%.*}.txt"
            touch "$spec_file"

            # Копируем все файлы и каталоги из модуля в файловую систему
            # и записываем пути символических ссылок в файл спецификации
            #sudo cp -rs --no-clobber "$TARGET_DIR"/* /
            sudo cp -rsPn "$TARGET_DIR"/* /
            find "$TARGET_DIR" -type f -exec echo {} \; | sed "s|$TARGET_DIR||" >> "$spec_file"

            # Продолжаем с остальными действиями, такими как компиляция схем и т.д.
            sudo glib-compile-schemas /usr/share/glib-2.0/schemas/
            sudo ldconfig
            sudo rm -rf ~/.cache/menus/
            sudo update-desktop-database
            lxpanelctl restart

            echo "Модуль АКТИВИРОВАН!"
            sleep 3
            ;;

        "Деактивировать")
            TARGET_DIR="/mnt/$(basename "$selected_module" .sb)"

            # Читаем файл спецификации и удаляем символические ссылки
            #xargs -a "$HOME/.config/special_file_${selected_module%.*}.txt" sudo rm -f
xargs -a "$HOME/.config/special_file_${selected_module%.*}.txt" sh -c 'for file do
  if [ -L "$file" ]; then
    sudo rm -f "$file"
  else
    echo "Skipping real file: $file"
  fi
done'
            # Удаляем файл спецификации
            rm -f "$HOME/.config/special_file_${selected_module%.*}.txt"

            # Отмонтируем каталог
            sudo umount "$TARGET_DIR"
            sudo rm -rf "$TARGET_DIR"
            sudo rm -rf ~/.cache/menus/
            sudo update-desktop-database
            lxpanelctl restart
            echo "Модуль ДЕАКТИВИРОВАН!"
            sleep 3
            ;;
    esac

    echo "Готово"
done




------------------------------------------------------
так как на одно сообщение идет 5000 знаков второй скрипт repo2sb для создания модулей поместил во вложении,
этот скрипт для создания этих модулей, годится только для основаных на Debian  дистрибутивах
подробно про него можно прочитать тут https://vk.com/@36590075-sozdanie-perenosimyh-modulei-prilozhenii-s-pomoschu-repo2sb
сохранить скрипт с именем repo2sb  в ~
использовать так ./repo2sb name_pac , где name_pac имя пакета из репозитория
в результате работы скрипта в каталоге ~/portapps мы получим каталог с ресурсами name_pac.AppDir а также модуль name_pac.AppDir.sb
модуль name_pac.AppDir.sb  переместить потом в ~/modules
« Последнее редактирование: 26 Апрель 2024, 13:03:47 от totiks2012 »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 34003
  • Репутация: +231/-0
    • PuppyRus-A
попробую сваять  на yad
Код
# ntf -l `ls -1 |tr "\n" "|"` "name" "info text"
Модули ложить в ~/modules
Если как в PORTEUS- то тогда уж /optional
Ну и тогда уж такое бы надо
Не увидел в вашем скрипте создание ссылок. Еще надо написать удаление и понять насколько это удобно
Для псевдо подключения

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8636
  • Репутация: +187/-2
  • Старый чайник
Не увидел в вашем скрипте создание ссылок
Из cp --help
-R, -r, --recursive          рекурсивно копировать каталоги
-s, --symbolic-link         создавать символьные ссылки вместо копирования
Теперь видишь?
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 885
  • Репутация: +24/-0
  • Автор темы
Если как в PORTEUS- то тогда уж /optional
у меня будет live-kit сейчас minios , там монструзный путь получится /run/initramfs/memory/data/minios/optional/ потому решил что более универсально для всех ~/modules... но вопрос оставляю открытым для обсуждения.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 34003
  • Репутация: +231/-0
    • PuppyRus-A
-s, --symbolic-link 
Не знал. Удобно
потому решил что более универсально для всех ~/modules
Тогда уж сделать возможность выбирать

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 885
  • Репутация: +24/-0
  • Автор темы
Тогда уж сделать возможность выбирать
да согласен! Можно в yad добавить меню выбора , Путь--Porteus_based =/optional, Путь--Остальные=~/modules. Путь--Porteus_based =/optional должен уточнить ибо забыл, если так устроит , дайте отмашку и сделаю.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 34003
  • Репутация: +231/-0
    • PuppyRus-A
дайте отмашку и сделаю.
Вы бы лучше мой mmod посмотрели. Там уже половина сделана
Лучше сделать вместе один но хороший

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 885
  • Репутация: +24/-0
  • Автор темы
Вы бы лучше мой mmod посмотрели. Там уже половина сделана
Лучше сделать вместе один но хороший
я смотрел у меня заработал (гуй), но многое не работает(потому что aufs ориентированое).
Давайте так я доделаю этот, чтоб была птичка в руках,а потом будем по тихому разбираться с mmod.
« Последнее редактирование: 15 Январь 2024, 15:31:40 от totiks2012 »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 34003
  • Репутация: +231/-0
    • PuppyRus-A
В mmod сделано , что скрипты подключения- отключения отдельно. Т.е. mmod только гуй
Как подключать - a(o)fs или ln -s  - не важно. Это уже в этих скриптах будет

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 885
  • Репутация: +24/-0
  • Автор темы
вот менеджер модулей на yad с выбором пути место-нахождения модулей
Код
#!/bin/bash

#set -x
# Если у вас отличный от sb модуль правим строку 56 на предмет тип модуля
while true; do

  # Проверки
  command -v yad >/dev/null || { echo "Требуется утилита yad"; exit 1; }

  # Выбор модуля
#DIR="$HOME/modules" 
DIR_PORT="/live/optional"
#DIR_PORT="/run/initramfs/memory/data/live/optional/"
DIR_OTHER="$HOME/modules"

options=("Выбрат-Путь--Porteus_based" "Выбрат-Путь--Остальные")

action_raw=$(yad --form --field="Выберите :CB" "Путь--Porteus_based!Путь--Остальные" )
action="${action_raw%\|}"
echo "Результат yad: $action_raw"

case "$action" in
    "Путь--Porteus_based") DIR="$DIR_PORT" ;;
    "Путь--Остальные") DIR="$DIR_OTHER" ;;
    *)
        echo "Неожиданный выбор."
        exit 1
        ;;
esac

if [ -n "$DIR" ]; then
    echo "Выбран путь: $DIR"
else
    echo "Отменено."
fi
 # selected_module="$(find ~/modules -maxdepth 1 -type f | sed 's|.*/||' | yad --list --column=Модуль)"
selected_module="$(find $DIR -maxdepth 1 -type f | sed 's|.*/||' | yad --width=300 --height=600 --list --column=Выберите-МОДУЛЬ)"
selected_module="${selected_module%\|}"
echo "$selected_module"
  if [ "$selected_module" = "" ]; then
    echo "Выход из скрипта."
    break
  fi

  # Меню действия
  #action=$(yad --form --field="Выберите действие:CB" "Активировать!Деактивировать")
action_raw=$(yad --form --field="Выберите действие:CB" "Активировать!Деактивировать")
action="${action_raw%\|}"
 echo "Результат yad: $action_raw"
  # Проверка работы yad
  echo "Результат yad: $action"

  case "$action" in
    "Активировать")
          # Активация модуля 
    SOURCE_DIR="$HOME/modules/$selected_module"
    TARGET_DIR="/mnt/$(basename $selected_module .sb)"
   
    # Создаем каталог в /mnt с именем выбранного модуля
    sudo mkdir -p "$TARGET_DIR"

    # Монтируем выбранный модуль в /mnt
    sudo mount -t squashfs -o loop "$SOURCE_DIR" "$TARGET_DIR"
    sudo cp -rs --no-clobber "$TARGET_DIR"/* /

    #sudo glib-compile-schemas /usr/share/glib-2.0/schemas/
    xfce4-panel -r
   
    echo "Модуль АКТИВИРОВАН!"
    sleep 3
 
      ;;

    "Деактивировать")
    #Деактивация модуля
    echo "$selected_module"
    TARGET_DIR="/mnt/$(basename $selected_module .sb)"
    sudo umount "$TARGET_DIR" 
    xfce4-panel -r
   
    echo "Модуль ДЕАКТИВИРОВАН!"
    sleep 3
     ;;
  esac 

done

echo "Готово"


Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 34003
  • Репутация: +231/-0
    • PuppyRus-A
на yad с выбором пути место-нахождения модулей
Можно было просто ntf -c

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 885
  • Репутация: +24/-0
  • Автор темы
Можно было просто ntf -c
насколько я понимаю это какая-та вами написаная функция или библиотека , вы её часто упоминаете?

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8636
  • Репутация: +187/-2
  • Старый чайник
вами написаная функция или библиотека
Это только для LF, для других увы...
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 885
  • Репутация: +24/-0
  • Автор темы
в шапке теперь финальная версия улучшеный работающий без ошибок скрипт
---------------------------------------------------------------------------------------------------------------
Это только для LF, для других увы...
нее хочется универсально... насчет скрипта выбор пути можно задать кодом ,что не нужно закоментить, чем меньше GUI тем лучще.  Я в скрипте что в шапке чутка позже добавлю закоментированые строки.
      Исправил добавил в  скрипт, что  в шапке тот что на Yad добавил пути выбора каталога с модулями нужный раскоментировать , ненужные закоментировать, смотреть  строки
Код
 # Выбор модуля
#Закоментировать ненужные DIR оставив тот что для вашего дистрибутива
#по умолчанию в DIR=$HOME/modules
DIR="$HOME/modules"
#DIR="/live/optional"
« Последнее редактирование: 14 Апрель 2024, 18:41:13 от totiks2012 »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 34003
  • Репутация: +231/-0
    • PuppyRus-A
Ntf - моя обвязка. Вокруг yad gtkdislog. Работать будет везде. Стандартизирует вид диалогов и упрощает их написание