Запоздалое такое действо. Назрела необходимость и только что одну виртуальную машику я обновил. Wheezy уже пару лет как не поддерживается, но обновляться было страшновато, вдруг что-нибудь отвалится (так и вышло), поэтому начал с самой простой и маленькой системы, там 2 сайта, сервер powerdns и 2 базы данных.
1. Резервная копия
Тут по вкусу, я просто сделал снапшот системы перед всеми последующими действиями. Для восстановления хватило бы сделать mysqldump --all-databases, сохранить /etc и /var/www и унести это всё на внешний носитель.
2. Обновление Wheezy до актуального состояния
Перед началом нужно обновить Wheezy. Репозитории с 2018 переехали в архив, поэтому /etc/apt/sourcel-list надо поправить.
deb http://archive.debian.org/debian/ wheezy main
deb-src http://archive.debian.org/debian/ wheezy main
deb http://archive.debian.org/debian-security wheezy/updates main
Обновляем пакеты
apt-get update
Получаем вот такую ошибку
E: Release file for http://archive.debian.org/debian-security/dists/wheezy/updates/Release is expired (invalid since 337d 14h 7min 18s). Updates for this repository will not be applied.
Устраняем
echo "Acquire::Check-Valid-Until false;" | tee -a /etc/apt/apt.conf.d/10-nocheckvalid
Повторяем
apt-get update
apt-get upgrade
Удостоверимся, что все пакеты установились корректно
dpkg --audit
dpkg --get-selections | grep hold
Эти команды должны выполниться без какого-либо вывода. Пусто — едем дальше.
3. Обновляем до Jessie
Снова правим /etc/apt/sources-list
deb http://ftp.debian.org/debian/ jessie main
deb-src http://ftp.debian.org/debian/ jessie main
deb http://security.debian.org/debian-security jessie/updates main
deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main
#jessie-updates, previously known as 'volatile'
deb http://ftp.debian.org/debian/ jessie-updates main
deb-src http://ftp.debian.org/debian/ jessie-updates main
Попытка обновить данные пакетов дает ошибку
# apt-get update
Get:1 http://ftp.debian.org jessie Release.gpg [1652 B]
Get:2 http://ftp.debian.org jessie-updates Release.gpg [833 B]
Get:3 http://ftp.debian.org jessie Release [77.3 kB]
Get:4 http://security.debian.org jessie/updates Release.gpg [1601 B]
Get:5 http://ftp.debian.org jessie-updates Release [15.4 kB]
Get:6 http://security.debian.org jessie/updates Release.gpg [1601 B]
Get:7 http://ftp.debian.org jessie/main Sources [7063 kB]
Get:8 http://security.debian.org jessie/updates Release [43.3 kB]
Get:9 http://security.debian.org jessie/updates Release [43.3 kB]
Get:10 http://security.debian.org jessie/updates/main amd64 Packages [758 kB]
Get:11 http://ftp.debian.org jessie/main amd64 Packages [6818 kB]
Get:12 http://security.debian.org jessie/updates/main Translation-en [388 kB]
Get:13 http://ftp.debian.org jessie/main Translation-en [4581 kB]
Get:14 http://security.debian.org jessie/updates/main Sources [341 kB]
Get:15 http://security.debian.org jessie/updates/main amd64 Packages [758 kB]
Get:16 http://ftp.debian.org jessie-updates/main Sources [20 B]
Get:17 http://ftp.debian.org jessie-updates/main amd64 Packages [20 B]
Get:18 http://ftp.debian.org jessie-updates/main Translation-en [14 B]
Get:19 http://security.debian.org jessie/updates/main Translation-en [388 kB]
Fetched 21.3 MB in 4s (4317 kB/s)
Reading package lists... Done
W: There is no public key available for the following key IDs:
AA8E81B4331F7F50
W: There is no public key available for the following key IDs:
AA8E81B4331F7F50
Получаем нужный открытый ключ и пробуем снова
# gpg --recv-keys AA8E81B4331F7F50
gpg: requesting key 331F7F50 from hkp server keys.gnupg.net
gpg: key 8AE22BA9: public key "Debian Security Archive Automatic Signing Key (9/stretch) <ftpmaster@debian.org>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
# gpg --export AA8E81B4331F7F50 | apt-key add -
OK
# apt-get update
Hit http://ftp.debian.org jessie Release.gpg
Hit http://ftp.debian.org jessie-updates Release.gpg
Hit http://ftp.debian.org jessie Release
Hit http://ftp.debian.org jessie-updates Release
Hit http://security.debian.org jessie/updates Release.gpg
Hit http://ftp.debian.org jessie/main Sources
Hit http://ftp.debian.org jessie/main amd64 Packages
Hit http://security.debian.org jessie/updates Release.gpg
Hit http://ftp.debian.org jessie/main Translation-en
Hit http://security.debian.org jessie/updates Release
Hit http://ftp.debian.org jessie-updates/main Sources
Hit http://security.debian.org jessie/updates Release
Hit http://ftp.debian.org jessie-updates/main amd64 Packages
Hit http://ftp.debian.org jessie-updates/main Translation-en
Hit http://security.debian.org jessie/updates/main amd64 Packages
Hit http://security.debian.org jessie/updates/main Translation-en
Hit http://security.debian.org jessie/updates/main Sources
Hit http://security.debian.org jessie/updates/main amd64 Packages
Hit http://security.debian.org jessie/updates/main Translation-en
Reading package lists... Done
Дальше обновляем Wheezy до Jessie, опять в два приема
apt-get upgrade
apt-get dist-upgrade
В процессе будет несколько вопросов о том, что делать с имеющимися конфигами, я оставлял старые, с ними проще будет разобраться после.
Перезагружаемся.
reboot
Наблюдаем установленный Debian 8 Jessie
# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
NAME="Debian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=debian
HOME_URL="http://www.debian.org/"
SUPPORT_URL="http://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
Проверяем работоспособность www mysql (mariadb) и что там еще используется. Если сохранять старые файлы настроек, то что-нибудь точно нужно будет править. Или отложить этот процесс до завершения обновления.
Едем дальше.
4. Обновляем до Stretch
Шаги те же, в принципе.
nano /etc/apt/sources.list
deb http://ftp.debian.org/debian/ stretch main
deb-src http://ftp.debian.org/debian/ stretch main
deb http://security.debian.org/debian-security stretch/updates main
deb http://security.debian.org/ stretch/updates main
deb-src http://security.debian.org/ stretch/updates main
# stretch-updates, previously known as 'volatile'
deb http://ftp.debian.org/debian/ stretch-updates main
deb-src http://ftp.debian.org/debian/ stretch-updates main
Скачиваем новые данные apt.
apt-get update
NB: Полезная команда для предварительной оценки того, что будет обновлено. Такой dry-run.
apt-get -u upgrade --assume-no
И еще одна, выводит список того, что можно обновить
apt list --upgradable
Апгрейдим, отступать некуда. Обновляем пакеты, обновляем дистрибутив.
apt-get upgrade
apt-get dist-upgrade
reboot
Если все прошло нормально (нет), то наслаждаемся
# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
VERSION_CODENAME=stretch
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
Но скорее всего нужно будет править конфиги mariadb, php, nginx и что там ещё есть в хозяйстве. Достсточно тривиальные правки, гугл помогает, но в итоге получается не вполне оптимальная конфигурация. Неизбежная плата за скорость и удобство обновления в сравнении с чистой установкой, миграцией и настройкой.
PS: Уже вышел Debian 10, но так далеко мы пока не поедем.