projects:linux:manual_backup_scripts:pi_compatibility
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
projects:linux:manual_backup_scripts:pi_compatibility [2025/04/08 00:37] – | projects:linux:manual_backup_scripts:pi_compatibility [2025/04/11 17:43] (текущий) – | ||
---|---|---|---|
Строка 2: | Строка 2: | ||
// | // | ||
+ | |||
+ | <code bash pi_compatibility.sh> | ||
+ | #!/bin/bash | ||
+ | export LANG=en_US.UTF-8 | ||
+ | export LC_ALL=en_US.UTF-8 | ||
+ | # ==DIS/ | ||
+ | # === 🧪 Pi Compatibility === | ||
+ | # 10_pi_compatibility.sh — Проверка совместимости с Raspberry Pi 3/4/5 | ||
+ | # | ||
+ | |||
+ | set -euo pipefail | ||
+ | |||
+ | # Все функции | ||
+ | |||
+ | do_check() { | ||
+ | local root_dev=" | ||
+ | local boot_dir=" | ||
+ | local live=" | ||
+ | |||
+ | echo | ||
+ | echo "📁 Анализ загрузочного каталога: | ||
+ | echo " | ||
+ | |||
+ | declare -A MODELS | ||
+ | MODELS[" | ||
+ | MODELS[" | ||
+ | MODELS[" | ||
+ | |||
+ | declare -A MISSING | ||
+ | |||
+ | for MODEL in " | ||
+ | echo "🧩 Проверка файлов для $MODEL:" | ||
+ | MISSING[$MODEL]="" | ||
+ | for file in ${MODELS[$MODEL]}; | ||
+ | if [[ -f " | ||
+ | echo " | ||
+ | else | ||
+ | if [[ " | ||
+ | echo " | ||
+ | MISSING[$MODEL]+=" | ||
+ | fi | ||
+ | fi | ||
+ | done | ||
+ | done | ||
+ | |||
+ | echo " | ||
+ | if [[ " | ||
+ | MODEL_RAW=$(tr -d ' | ||
+ | else | ||
+ | MODEL_RAW=" | ||
+ | fi | ||
+ | echo " | ||
+ | |||
+ | ARCH=$(uname -m) | ||
+ | echo "🧠 Архитектура: | ||
+ | [[ " | ||
+ | |||
+ | KERNEL=$(uname -r) | ||
+ | echo | ||
+ | echo "🧬 Ядро: $KERNEL" | ||
+ | if dpkg --compare-versions " | ||
+ | echo " | ||
+ | else | ||
+ | echo " | ||
+ | fi | ||
+ | |||
+ | echo | ||
+ | echo "📦 Прошивка GPU:" | ||
+ | if [[ " | ||
+ | vcgencmd version | sed ' | ||
+ | else | ||
+ | FW_FILE=" | ||
+ | [[ -f " | ||
+ | FW_DATE=$(strings " | ||
+ | echo " | ||
+ | fi | ||
+ | |||
+ | if [[ " | ||
+ | echo | ||
+ | echo "🧰 EEPROM bootloader:" | ||
+ | sudo rpi-eeprom-update | sed ' | ||
+ | fi | ||
+ | |||
+ | echo | ||
+ | echo "🧾 config.txt:" | ||
+ | CONFIG=" | ||
+ | if [[ -f " | ||
+ | grep -E ' | ||
+ | echo " | ||
+ | [[ " | ||
+ | [[ " | ||
+ | done | ||
+ | else | ||
+ | echo " | ||
+ | fi | ||
+ | |||
+ | echo | ||
+ | echo "📋 Совместимость:" | ||
+ | for MODEL in Pi3 Pi4 Pi5; do | ||
+ | if [[ -z " | ||
+ | echo "✅ $MODEL: потенциально совместим" | ||
+ | else | ||
+ | echo -e "❌ $MODEL: отсутствуют файлы → ${MISSING[$MODEL]}" | ||
+ | fi | ||
+ | done | ||
+ | } | ||
+ | |||
+ | check_img() { | ||
+ | local img_path=" | ||
+ | if [[ ! -f " | ||
+ | echo "❌ Файл не найден: | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | LOOPDEV=$(sudo losetup --show -Pf " | ||
+ | BOOT_PART=" | ||
+ | TMPDIR=$(mktemp -d) | ||
+ | sudo mount " | ||
+ | |||
+ | echo | ||
+ | echo "🔍 Проверка образа: | ||
+ | do_check " | ||
+ | |||
+ | sudo umount " | ||
+ | sudo losetup -d " | ||
+ | rmdir " | ||
+ | } | ||
+ | |||
+ | select_img_and_check() { | ||
+ | NAS_PATH="/ | ||
+ | if mountpoint -q " | ||
+ | mapfile -t DEVICES < <(lsblk -nrpo NAME, | ||
+ | DEVICES+=(" | ||
+ | else | ||
+ | mapfile -t DEVICES < <(lsblk -nrpo NAME, | ||
+ | fi | ||
+ | |||
+ | if [[ ${# | ||
+ | echo "❌ Нет доступных устройств." | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | echo "💾 Выберите диск с .img-файлами:" | ||
+ | i=1 | ||
+ | for dev in " | ||
+ | IFS=":" | ||
+ | label="" | ||
+ | [[ " | ||
+ | [[ -z " | ||
+ | echo "$i - $name $size $mnt $label" | ||
+ | ((i++)) | ||
+ | done | ||
+ | |||
+ | echo "0 - Отмена" | ||
+ | read -rp "👉 Ваш выбор: " choice | ||
+ | [[ " | ||
+ | (( choice < 1 || choice > ${# | ||
+ | |||
+ | SEL_DEV=" | ||
+ | IFS=":" | ||
+ | |||
+ | TEMP_MOUNTED=false | ||
+ | if [[ " | ||
+ | TARGET_DIR=" | ||
+ | echo "📁 Используем NAS каталог: | ||
+ | else | ||
+ | MOUNTED_PATH=$(lsblk -nrpo NAME, | ||
+ | if [[ -n " | ||
+ | echo "✅ Используем: | ||
+ | TARGET_DIR=" | ||
+ | else | ||
+ | i=0 | ||
+ | while true; do | ||
+ | MNT_PATH="/ | ||
+ | if ! mountpoint -q " | ||
+ | break | ||
+ | fi | ||
+ | ((i++)) | ||
+ | done | ||
+ | sudo mkdir -p " | ||
+ | if sudo mount " | ||
+ | echo "✅ Устройство примонтировано: | ||
+ | TARGET_DIR=" | ||
+ | TEMP_MOUNTED=true | ||
+ | else | ||
+ | echo "❌ Не удалось примонтировать." | ||
+ | exit 1 | ||
+ | fi | ||
+ | fi | ||
+ | fi | ||
+ | |||
+ | mapfile -t IMG_LIST < <(find " | ||
+ | if [[ ${# | ||
+ | echo "❌ Не найдено .img файлов в $TARGET_DIR" | ||
+ | $TEMP_MOUNTED && sudo umount " | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | echo " | ||
+ | i=1 | ||
+ | for img in " | ||
+ | echo "$i - $img" | ||
+ | ((i++)) | ||
+ | done | ||
+ | |||
+ | echo "0 - Отмена" | ||
+ | read -rp "👉 Выберите образ для проверки: | ||
+ | [[ " | ||
+ | (( img_choice < 1 || img_choice > ${# | ||
+ | |||
+ | IMGFILE=" | ||
+ | echo "📦 Выбран образ: $IMGFILE" | ||
+ | check_img " | ||
+ | $TEMP_MOUNTED && sudo umount " | ||
+ | } | ||
+ | |||
+ | check_live_system() { | ||
+ | echo | ||
+ | echo "🔍 Проверка текущей системы..." | ||
+ | BOOT_DIR="/ | ||
+ | [[ -d "/ | ||
+ | do_check "/" | ||
+ | } | ||
+ | |||
+ | print_menu() { | ||
+ | echo "🧪 Проверка совместимости Raspberry Pi" | ||
+ | echo " | ||
+ | echo " | ||
+ | echo " | ||
+ | echo " | ||
+ | read -rp "👉 Ваш выбор: " choice | ||
+ | case " | ||
+ | 1) check_live_system ;; | ||
+ | 2) select_img_and_check ;; | ||
+ | 0) echo "🚪 Выход."; | ||
+ | *) echo "❌ Неверный выбор."; | ||
+ | esac | ||
+ | } | ||
+ | |||
+ | print_menu | ||
+ | |||
+ | </ | ||
+ | ===== ******* ===== | ||
+ | [[https:// |
projects/linux/manual_backup_scripts/pi_compatibility.1744061854.txt.gz · Последнее изменение: 2025/04/08 00:37 —