mirror of
https://github.com/andrey271192/safe-monthly-maintenance.git
synced 2026-09-21 12:01:57 +00:00
Add safe monthly maintenance installer
This commit is contained in:
82
docs/SAFETY.md
Normal file
82
docs/SAFETY.md
Normal file
@@ -0,0 +1,82 @@
|
||||
# Модель безопасности
|
||||
|
||||
Цель проекта — выполнять повторяемое обслуживание Ubuntu/Debian с минимальным
|
||||
риском. «Безопасно» не означает «невозможно сломать»: любое системное обновление
|
||||
может содержать ошибку пакета, несовместимость приложения или service restart.
|
||||
|
||||
## Принципы
|
||||
|
||||
### Без удаления пакетов
|
||||
|
||||
Основное обновление использует `apt-get upgrade --no-remove`.
|
||||
`dist-upgrade` и `full-upgrade` не используются.
|
||||
|
||||
`autoremove` выключен. Причина: пакет, нужный локальному приложению, иногда
|
||||
ошибочно остается помеченным как автоматически установленный.
|
||||
|
||||
### Без автоматического reboot
|
||||
|
||||
Новое ядро устанавливается, но активируется только после решения администратора.
|
||||
Это предотвращает незапланированный разрыв VPN, базы данных, SSH или другого
|
||||
сервиса.
|
||||
|
||||
### Без опасной очистки файлов
|
||||
|
||||
Очистка временных данных делегируется `systemd-tmpfiles`, `logrotate`,
|
||||
`journalctl` и APT. Проект не содержит рекурсивного удаления широких каталогов.
|
||||
|
||||
### Без очистки Docker по умолчанию
|
||||
|
||||
Stopped containers, tagged images, volumes и networks могут содержать нужное
|
||||
состояние. Поэтому Docker cleanup выключен. Опция удаляет только dangling images.
|
||||
|
||||
### Сохранение конфигов
|
||||
|
||||
`Dpkg::Options::=--force-confold` сохраняет установленную локальную конфигурацию.
|
||||
Новая версия файла пакета обычно остается рядом как `.dpkg-dist`; ее нужно
|
||||
сравнить вручную.
|
||||
|
||||
### Проверки до изменения
|
||||
|
||||
APT upgrade не запускается при:
|
||||
|
||||
- поврежденном/незавершенном состоянии `dpkg`;
|
||||
- критически малом свободном месте;
|
||||
- ошибке `apt-get update`.
|
||||
|
||||
### Один процесс
|
||||
|
||||
`flock` предотвращает параллельные maintenance-запуски. APT-lock ожидается до
|
||||
10 минут, что уменьшает конфликт с `apt-daily`.
|
||||
|
||||
## Рекомендуемая эксплуатация
|
||||
|
||||
1. Создайте snapshot VM перед первым запуском.
|
||||
2. Проверьте installer и checksum.
|
||||
3. Запустите на тестовой VM.
|
||||
4. Проверьте journal, failed units и приложение.
|
||||
5. Только потом развертывайте на остальные серверы.
|
||||
6. Перезагружайте сервер в согласованное maintenance window.
|
||||
|
||||
## Что проверить после запуска
|
||||
|
||||
```bash
|
||||
systemctl --failed
|
||||
dpkg --audit
|
||||
apt list --upgradable
|
||||
journalctl -u safe-monthly-maintenance.service -n 200
|
||||
test -e /var/run/reboot-required && echo "reboot required"
|
||||
```
|
||||
|
||||
Для VPN, reverse proxy, базы данных и других сервисов добавьте собственные
|
||||
health checks после системного обслуживания.
|
||||
|
||||
## Rollback
|
||||
|
||||
Проект сохраняет список пакетов, но не создает полноценный rollback.
|
||||
|
||||
Для надежного возврата нужны:
|
||||
|
||||
- snapshot гипервизора/VPS-провайдера;
|
||||
- резервная копия `/etc` и данных приложений;
|
||||
- отдельно проверенная процедура восстановления.
|
||||
85
docs/TROUBLESHOOTING.md
Normal file
85
docs/TROUBLESHOOTING.md
Normal file
@@ -0,0 +1,85 @@
|
||||
# Диагностика
|
||||
|
||||
## Service завершился с ошибкой
|
||||
|
||||
```bash
|
||||
systemctl status safe-monthly-maintenance.service
|
||||
journalctl -u safe-monthly-maintenance.service -n 300 --no-pager
|
||||
```
|
||||
|
||||
Скрипт продолжает независимые безопасные этапы и в конце возвращает ненулевой
|
||||
код, если хотя бы один этап завершился ошибкой.
|
||||
|
||||
## APT занят
|
||||
|
||||
Скрипт ожидает lock до 600 секунд. Найдите владельца lock:
|
||||
|
||||
```bash
|
||||
ps aux | grep -E 'apt|dpkg'
|
||||
systemctl status apt-daily.service apt-daily-upgrade.service
|
||||
```
|
||||
|
||||
Не удаляйте lock-файлы вручную, пока работает APT/DPKG.
|
||||
|
||||
## `dpkg --audit` показывает проблему
|
||||
|
||||
Проверьте вывод:
|
||||
|
||||
```bash
|
||||
sudo dpkg --audit
|
||||
```
|
||||
|
||||
Типовой ремонт:
|
||||
|
||||
```bash
|
||||
sudo dpkg --configure -a
|
||||
sudo apt-get -f install
|
||||
```
|
||||
|
||||
Читайте список изменений перед подтверждением.
|
||||
|
||||
## Недостаточно места
|
||||
|
||||
```bash
|
||||
df -h / /boot
|
||||
du -xhd1 /var | sort -h
|
||||
journalctl --disk-usage
|
||||
```
|
||||
|
||||
Не уменьшайте защитный порог без понимания причины заполнения.
|
||||
|
||||
## Требуется reboot
|
||||
|
||||
```bash
|
||||
uname -r
|
||||
readlink -f /vmlinuz
|
||||
cat /var/run/reboot-required 2>/dev/null
|
||||
```
|
||||
|
||||
Перезагрузите в maintenance window:
|
||||
|
||||
```bash
|
||||
sudo systemctl reboot
|
||||
```
|
||||
|
||||
После reboot:
|
||||
|
||||
```bash
|
||||
uname -r
|
||||
systemctl --failed
|
||||
```
|
||||
|
||||
## Timer не запускается
|
||||
|
||||
```bash
|
||||
systemctl is-enabled safe-monthly-maintenance.timer
|
||||
systemctl is-active safe-monthly-maintenance.timer
|
||||
systemctl list-timers safe-monthly-maintenance.timer --all
|
||||
```
|
||||
|
||||
Восстановить:
|
||||
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable --now safe-monthly-maintenance.timer
|
||||
```
|
||||
Reference in New Issue
Block a user