Представляю финальную версию скрипта менеджера подключения модулей (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