rPi Seal
rPi Seal - создание образа с работающей системы в img файл
с возможностью уменьшения размера образа до физического объема данных и архивации
Комплекты в архивах
Установка
Можно установить с помощью
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
- 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
- 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.**
Скрипты из набора