в шапке теперь финальная версия улучшеный работающий без ошибок скрипт
---------------------------------------------------------------------------------------------------------------
вот следующая итерация моего иследования на тему создания менеджера монтирования модулей используя символические ссылки.
--------
Внимание скрипт может быть опасен, подключаемые модули нужно тестировать в виртуалке.
У меня например sb модуль c libreoffice собраный в minios стабильно ложит систему (распаковал appimage и перепаковал его в sb ,естествено работает понимаю что масло масляное , но хотел понять виноват скрипт или то что положено в модуль )
Зависимости peco, мог использовать fzy, но так как скрипт изначально писал с peco сконцентрировался на самом принципе, позже если нужно будет, можно будет переделать с fzy
-------
что умеет
Ищет в /usr /var /etc битые ссылки и удаляет их.
--
при выборе опции Активировать)
--
монтирует модуль в /mnt/module_name
--
оттуда прокидывает в систему ссылки с помощью sudo cp -rs --no-clobber
--
также записывает полный путь всех сим_ссылок в спек_файл_имя_модуля в ~/.config для последующей их дезактивации то есть убираем все ссылки одним махом, и модуль дезактивирован
--
при выборе опции Дезактивировать)
удаляет все символические ссылки прописаные в спек файл модуля
код:
#!/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"/* /
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
# Удаляем файл спецификации
rm -f "$HOME/.config/special_file_${selected_module%.*}.txt"
# Отмонтируем каталог
sudo umount "$TARGET_DIR"
sudo rm -rf ~/.cache/menus/
sudo update-desktop-database
lxpanelctl restart
echo "Модуль ДЕАКТИВИРОВАН!"
sleep 3
;;
esac
echo "Готово"
done
требует максимальной осторожности в использовании
но на нескольких модулях работает попробую его в паре с скриптом repo2app , посмотрю как себя поведёт
из недостатков десктоп файл символическую ссылку на картинку картинкой не воспринимает почему-то, но это мелочи , со временем можно пофиксить, тут главное отловить все возможные странные поведения системы, а они есть так что еще раз повторюсь тестировать скрипт в виртуалке или на отдельной как например у меня отведенной для тестов системе. Буду рад выслушать замечания , критику , и идеи, братцы идеи нужны...