====== rPi Seal ====== rPi Seal - создание образа с работающей системы в img файл\\ с возможностью уменьшения размера образа до физического объема данных и архивации\\ ===== Комплекты в архивах ===== *.sh с архивом внутри\\ прописывает в aliases команду rpi_seal\\ спрашивает куда распаковать, но по умолчанию ''rpi_seal''\\ {{ :projects:linux:rpi_seal_full_installer.tar.gz |}} просто упакованные скрипты\\ {{ :projects:linux:rpi_seal.tar.gz |}} Исправленный pshrink.sh\\ Должен лежать в той же папке что и остальные скрипты из rpi_seal\\ Или скрипт скачает его сам\\ {{ :projects:linux:pishrink_limited.tar.gz |}} ===== Установка ===== Можно установить с помощью\\ curl -fsSL "https://takraztak-wiki.ru/_media/projects:linux:rpi_seal_full_installer.tar.gz" -o rpi_seal_full_installer.tar.gz && tar -xzf rpi_seal_full_installer.tar.gz && chmod +x rpi_seal_full_installer.sh && ./rpi_seal_full_installer.sh && rm -f rpi_seal_full_installer.tar.gz rpi_seal_full_installer.sh или ++++install_rpi_seal.sh| #!/bin/bash export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8 # ==DIS/AUTOEXEC== # === rpi_seal_installer.sh === # Самораспаковывающийся установщик для rpi_seal # Устанавливает в выбранный каталог (по умолчанию: ~/rpi_seal) и создаёт alias # set -e # 🔧 Запрос пользовательского каталога read -rp "📁 Введите путь установки [по умолчанию: $HOME/rpi_seal]: " input_dir INSTALL_DIR="${input_dir:-$HOME/rpi_seal}" ARCHIVE_START_LINE=$(awk '/^__ARCHIVE_BELOW__/ {print NR + 1; exit 0; }' "$0") TARGET_ALIAS="bash $INSTALL_DIR/qq.sh" ALIAS_LINE="alias rpi_seal=\"$TARGET_ALIAS\"" echo "[*] Установка rpi_seal в: $INSTALL_DIR" # 📦 Проверка, установлен ли уже if [[ -d "$INSTALL_DIR" ]]; then echo "⚠️ Каталог уже существует: $INSTALL_DIR" read -rp "🔁 Перезаписать? [y/N] " confirm if [[ ! "$confirm" =~ ^[Yy]$ ]]; then echo "❎ Отменено пользователем." exit 1 fi rm -rf "$INSTALL_DIR" fi # 📂 Распаковка архива mkdir -p "$INSTALL_DIR" tail -n +$ARCHIVE_START_LINE "$0" | tar -xz -C "$INSTALL_DIR" chmod +x "$INSTALL_DIR"/*.sh # 🐚 Определение оболочки и alias-файла case "$SHELL" in */zsh) ALIAS_FILE="$HOME/.zshrc" SHELL_TYPE="zsh" ;; */bash) if grep -qF ".bash_aliases" "$HOME/.bashrc"; then ALIAS_FILE="$HOME/.bash_aliases" else ALIAS_FILE="$HOME/.bashrc" fi SHELL_TYPE="bash" ;; *) echo "⚠️ Неизвестная оболочка: $SHELL" ALIAS_FILE="" SHELL_TYPE="unknown" ;; esac echo "[*] Обнаружена оболочка: $SHELL_TYPE" [[ -n "$ALIAS_FILE" ]] && echo "[*] Alias будет добавлен в: $ALIAS_FILE" # 💡 Функция добавления/обновления alias add_or_replace_alias() { local alias_file="$1" [[ -z "$alias_file" ]] && return # ⏎ Убедимся, что файл заканчивается переводом строки if [[ -s "$alias_file" && $(tail -c1 "$alias_file") != "" ]]; then echo "" >> "$alias_file" fi # 🔍 Поиск существующего alias local existing_line existing_line=$(grep -E "^alias rpi_seal=" "$alias_file" 2>/dev/null || true) if [[ -n "$existing_line" ]]; then # 🧼 Очистка кавычек вокруг значения alias local current_value current_value=$(echo "$existing_line" | sed -E 's/^alias rpi_seal="(.*)"$/\1/') # 🔄 Сравнение текущего значения с требуемым if [[ "$current_value" == "$TARGET_ALIAS" ]]; then echo "✅ Alias уже настроен правильно: rpi_seal → $TARGET_ALIAS" return else echo "⚠️ Существующий alias отличается:" echo " Найдено: $current_value" echo " Требуется: $TARGET_ALIAS" read -rp "🔁 Перезаписать alias? [Y/n/другое_имя]: " choice case "$choice" in [Yy]*|"") sed -i '/^alias rpi_seal=/d' "$alias_file" echo "$ALIAS_LINE" >> "$alias_file" echo "✅ Alias rpi_seal обновлён." ;; [Nn]*) echo "⏭️ Alias не был изменён." ;; *) echo "➕ Добавление alias с именем '$choice'" echo "alias $choice=\"$TARGET_ALIAS\"" >> "$alias_file" echo "✅ Alias $choice добавлен." ;; esac fi else # ➕ Новый alias echo "$ALIAS_LINE" >> "$alias_file" echo "✅ Alias rpi_seal добавлен в $alias_file" fi } add_or_replace_alias "$ALIAS_FILE" echo "✅ Установка завершена. Используй команду: rpi_seal" [[ "$SHELL_TYPE" == "zsh" ]] && echo "🔄 Чтобы alias заработал: source ~/.zshrc или перезапусти терминал" [[ "$SHELL_TYPE" == "bash" ]] && echo "🔄 Чтобы alias заработал: source ~/.bashrc или перезапусти терминал" exit 0 __ARCHIVE_BELOW__ ++++ ===== Описание ===== Этот набор скриптов позволяет:\\ - Монтировать USB диски\\ - Монтировать сетевой каталог (должен быть предварительно расшарен на целевом устройстве)\\ - Очищать систему от мусора на живой системе и забивать пустое пространства нулями (работает как на живой системе так и в img файле)\\ - Создавать образы текущей системы Raspberry Pi на примонтированные ресурсы\\ - Применять shrink (одинарный или двойной, кто не знает это обрезка неиспользуемой части образа)\\ - Применять shrink но с ограничением на минимальный размер итогового img (делалось для тестов, но оставлен)\\ - Архивировать `.img` в `.gz` или `.zst`\\ - Проверять размер диска, до или после восстановления\\ - Проверить разными утилитами свободное/занятое место\\ - Проверить совместимость текущей системы с Pi3/4/5\\ - Сборка утилит в архив и внедрение архива в скрипт установщика\\ - Упаковка скрипта установщика в архив\\ - Упаковать скачанный pishrink модуль в архив\\ - Внедрение rpi_seal в img файл (на случай если после создания образа вносились изменения в скрипты)\\ Все скрипты полностью автономны и запускаются отдельно или через главный лаунчер `qq.sh`.\\ ===== ReadMe ===== ++++ReadMe.md| # 🛠️ RPi Seal — Модульная система создания и подготовки образов Raspberry Pi ## 📦 Назначение - Монтировать USB диски\\ - Монтировать сетевой каталог (должен быть предварительно расшарен на целевом устройстве)\\ - Очищать систему от мусора на живой системе и забивать пустое пространства нулями (работает как на живой системе так и в img файле)\\ - Создавать образы текущей системы Raspberry Pi на примонтированные ресурсы\\ - Применять shrink (одинарный или двойной, кто не знает это обрезка неиспользуемой части образа)\\ - Применять shrink но с ограничением на минимальный размер итогового img (делалось для тестов, но оставлен)\\ - Архивировать `.img` в `.gz` или `.zst`\\ - Проверять размер диска, до или после восстановления\\ - Проверить разными утилитами свободное/занятое место\\ - Проверить совместимость текущей системы с Pi3/4/5\\ - Сборка утилит в архив и внедрение архива в скрипт установщика\\ - Упаковка скрипта установщика в архив\\ - Упаковать скачанный pishrink модуль в архив\\ - Внедрение rpi_seal в img файл (на случай если после создания образа вносились изменения в скрипты)\\ Все скрипты полностью автономны и запускаются отдельно или через главный лаунчер `qq.sh`. --- ## 📜 Список скриптов и режимов запуска ### `01_mount_device.sh` Выбор и монтирование устройства с образами или для сохранения: ``` bash 01_mount_device.sh ``` _Автоматически выбирает `/mnt/rpi_targetX` для монтирования._ --- ### `02_create_image.sh` Создаёт образ текущей системы: ``` bash 02_create_image.sh ``` 🔧 Останавливает службы и снимает компактный `.img` из `/dev/mmcblk0` --- ### `03_prepare_image.sh` Отключает авторасширение, добавляет `stretch15.sh`, настраивает `systemd`: ``` bash 03_prepare_image.sh ``` _Спрашивает образ из списка .img/.gz, монтирует, модифицирует, отмонтирует._ --- ### `04_shrink_image.sh` Применяет `pishrink.sh` к образу: ``` bash 04_shrink_image.sh ``` 🔹 Одинарный или двойной режим по выбору. --- ### `05_compress_image.sh` Сжимает `.img` в `.gz` или `.zst`: ``` bash 05_compress_image.sh ``` _Показывает прогресс через `pv`. Спрашивает формат и подтверждение при перезаписи._ --- ### `qq.sh` Главный лаунчер. Отображает меню и запускает нужный модуль: ``` bash qq.sh ``` --- ## 🧩 Дополнительно - Скрипты используют `sudo`, `lsblk`, `fdisk`, `pv`, `gzip`, `zstd`, `losetup`, `mount` — убедитесь, что все зависимости установлены. - `pishrink.sh` скачивается автоматически при первом запуске `04_shrink_image.sh`. --- ## 🛡️ Советы - Рекомендуется запускать на той же системе, с которой создаётся образ. - Для массового клонирования: создайте один раз, подготовьте и применяйте shrink. - Все пути и переменные внутри скриптов можно менять вручную. --- **Проект RPi Seal — лёгкий способ делать надёжные, компактные и самодостаточные образы Raspberry Pi.** ++++ ---- ===== Скрипты из набора ===== - **[[projects:linux:manual_backup_scripts:mount_usb|Mount USB]]**\\ - **[[projects:linux:manual_backup_scripts:mount_nas|Mount NAS]]**\\ - **[[projects:linux:manual_backup_scripts:clean|SD Safe Cleaner]]**\\ - **[[projects:linux:manual_backup_scripts:create_img|Create Image Live]]**\\ - **[[projects:linux:manual_backup_scripts:create_img_sd_usb|Create Image sd/USB]]**\\ - **[[projects:linux:manual_backup_scripts:shrink_img|Shrink Image]]**\\ - **[[projects:linux:manual_backup_scripts:shrink_limit_img|Limited Shrink]]**\\ - **[[projects:linux:manual_backup_scripts:compress_image|Compress Image]]**\\ - **[[projects:linux:manual_backup_scripts:oss_check|OSS Check]]**\\ - **[[projects:linux:manual_backup_scripts:diskspace_image|Diskspace Image]]**\\ - **[[projects:linux:manual_backup_scripts:pi_compatibility|Pi Compatibility]]**\\ ---- {{page>common:footer&noeditbutton}}