Добавить скрипты первичной инициализации, очистки и автозапуска (BBox)

This commit is contained in:
NW
2026-08-07 14:58:14 +01:00
parent 79f6c425e5
commit 5606fb0563
5 changed files with 553 additions and 0 deletions

194
cleanup_system.sh Executable file
View File

@@ -0,0 +1,194 @@
#!/bin/bash
# ============================================================================
# cleanup_system.sh — очистка и оптимизация системы (BBox / OpenDoor base)
# ----------------------------------------------------------------------------
# Безопасная очистка от мусора и подготовка устройства к клонированию образа:
# * apt-кэш и списки пакетов
# * логи (journald, /var/log, /var/log.hdd)
# * tmp-директории и кэши пользователей
# * orphaned-пакеты (autoremove)
# * тестовые Docker-образы/контейнеры
# * удаление следов Matrix/coturn/nginx (если были установлены)
# * освобождение места в /boot
# ============================================================================
set -uo pipefail
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
DRY_RUN=0
LOG_FILE="/var/log/bbox-cleanup.log"
log() { echo -e "${GREEN}[cleanup]${NC} $*" | tee -a "$LOG_FILE"; }
warn() { echo -e "${YELLOW}[cleanup][warn]${NC} $*" | tee -a "$LOG_FILE"; }
fail() { echo -e "${RED}[cleanup][error]${NC} $*" | tee -a "$LOG_FILE"; exit 1; }
usage() {
cat <<EOF
Использование: $0 [--dry-run] [--full]
--dry-run только показать, что будет очищено (ничего не удалять)
--full полная очистка (включая удаление Matrix/nginx, сброс идентификаторов)
-h, --help показать справку
EOF
}
# ---------------------------------------------------------------------------
# Сбор данных о занимаемом месте
# ---------------------------------------------------------------------------
size_of() {
du -sh "$1" 2>/dev/null | awk '{print $1}' || echo "0"
}
report() {
echo
echo "=== Текущее состояние ==="
echo " Диск: $(df -h / | tail -1 | awk '{print $3" занято из "$2", свободно "$4}')"
echo " apt-кэш: $(size_of /var/cache/apt)"
echo " apt-lists: $(size_of /var/lib/apt/lists)"
echo " /var/log: $(size_of /var/log)"
echo " journald: $(journalctl --disk-usage 2>/dev/null | tail -1)"
echo " /tmp: $(size_of /tmp)"
}
# ---------------------------------------------------------------------------
# 1. Apt-кэш и списки
# ---------------------------------------------------------------------------
clean_apt() {
log "Очистка apt-кэша..."
[ $DRY_RUN -eq 1 ] && { warn "dry-run: apt-get clean/autoclean"; return; }
apt-get clean
apt-get autoclean -y
log "Удаление кэшей индексов apt (пересоздадутся автоматически)..."
rm -f /var/cache/apt/pkgcache.bin /var/cache/apt/srcpkgcache.bin
rm -rf /var/lib/apt/lists/*
}
# ---------------------------------------------------------------------------
# 2. Логи
# ---------------------------------------------------------------------------
clean_logs() {
log "Очистка journald (ограничение до 20M)..."
[ $DRY_RUN -eq 1 ] && { warn "dry-run: journalctl --vacuum-size"; return; }
journalctl --vacuum-size=20M 2>/dev/null || warn "journalctl недоступен"
log "Удаление старых ротированных логов..."
[ $DRY_RUN -eq 1 ] && { warn "dry-run: удаление *.gz/*.old/*.1 в /var/log"; return; }
find /var/log -type f \( -name "*.gz" -o -name "*.1" -o -name "*.old" \) -delete 2>/dev/null
find /var/log.hdd -type f \( -name "*.gz" -o -name "*.1" -o -name "*.old" \) -delete 2>/dev/null
# Логи sysstat (если пакет удалён — остаются файлы)
rm -rf /var/log/sysstat /var/log.hdd/sysstat
}
# ---------------------------------------------------------------------------
# 3. TMP и кэши
# ---------------------------------------------------------------------------
clean_tmp() {
log "Очистка временных директорий и кэшей..."
[ $DRY_RUN -eq 1 ] && { warn "dry-run: очистка /tmp, /var/tmp, /root/.cache"; return; }
rm -rf /tmp/* /var/tmp/* 2>/dev/null
find /root/.cache /root/.npm /root/.cargo /root/.local/share/Trash -mindepth 1 -delete 2>/dev/null
find /home -maxdepth 3 -type d -name ".cache" -exec rm -rf {} + 2>/dev/null
}
# ---------------------------------------------------------------------------
# 4. Orphaned-пакеты
# ---------------------------------------------------------------------------
clean_autoremove() {
log "Удаление неиспользуемых (orphaned) пакетов..."
[ $DRY_RUN -eq 1 ] && { warn "dry-run: apt-get autoremove"; return; }
apt-get autoremove -y --purge 2>/dev/null || warn "autoremove завершился с ошибкой"
}
# ---------------------------------------------------------------------------
# 5. Docker-мусор (образы/контейнеры/тома, не используемые)
# ---------------------------------------------------------------------------
clean_docker() {
if ! command -v docker &> /dev/null; then
log "Docker не установлен, пропуск."
return
fi
log "Очистка Docker (dangling-образы, остановленные контейнеры, неиспользуемые сети)..."
[ $DRY_RUN -eq 1 ] && { warn "dry-run: docker system prune -f"; return; }
docker system prune -f 2>/dev/null || warn "docker prune завершился с ошибкой"
}
# ---------------------------------------------------------------------------
# 6. Удаление следов Matrix/coturn/nginx (для чистого образа)
# ---------------------------------------------------------------------------
clean_matrix() {
local pkgs=()
for p in coturn nginx nginx-core nginx-common certbot; do
if dpkg -l "$p" &>/dev/null; then pkgs+=("$p"); fi
done
if [ ${#pkgs[@]} -eq 0 ]; then
log "Следов Matrix/coturn/nginx нет, пропуск."
return
fi
log "Удаление пакетов Matrix/nginx: ${pkgs[*]}..."
[ $DRY_RUN -eq 1 ] && { warn "dry-run: удаление ${pkgs[*]} и их конфигов"; return; }
DEBIAN_FRONTEND=noninteractive apt-get purge -y "${pkgs[@]}"
rm -rf /etc/nginx /etc/letsencrypt /etc/turnserver.conf /etc/coturn /var/www 2>/dev/null
rm -f /etc/cron.d/certbot 2>/dev/null
log "Следы Matrix/nginx удалены."
}
# ---------------------------------------------------------------------------
# 7. Сброс уникальных идентификаторов (перед клонированием)
# ---------------------------------------------------------------------------
reset_ids() {
log "Сброс machine-id и SSH host keys..."
[ $DRY_RUN -eq 1 ] && { warn "dry-run: сброс machine-id/ssh keys"; return; }
rm -f /etc/machine-id /var/lib/dbus/machine-id
systemd-machine-id-setup 2>/dev/null || warn "machine-id не пересоздан"
rm -f /etc/ssh/ssh_host_*
# Примечание: после этого нужно перезапустить ssh или перезагрузиться,
# чтобы sshd сгенерировал новые ключи.
}
# ---------------------------------------------------------------------------
# MAIN
# ---------------------------------------------------------------------------
main() {
while [ $# -gt 0 ]; do
case "$1" in
--dry-run) DRY_RUN=1 ;;
--full) FULL=1 ;;
-h|--help) usage; exit 0 ;;
*) fail "Неизвестный аргумент: $1" ;;
esac
shift
done
if [ "$(id -u)" -ne 0 ]; then
fail "Запустите скрипт от root: sudo ./cleanup_system.sh"
fi
touch "$LOG_FILE"
log "=== Очистка системы начата $(date) ==="
report
clean_apt
clean_logs
clean_tmp
clean_autoremove
clean_docker
if [ "${FULL:-0}" -eq 1 ]; then
clean_matrix
reset_ids
fi
echo
report
log "Очистка завершена. Журнал: $LOG_FILE"
if [ $DRY_RUN -eq 1 ]; then
warn "Это был dry-run — ничего не удалено. Запустите без --dry-run для применения."
fi
}
main "$@"