Апгрейд Proxmox на Hetzner

На днях на один из поддерживаемых мной гипервизоров на Proxmox устанавливались обновления, и из-за проблемного драйвера r8169 перестала работать сеть, в логах было что-то типа:

device eth0 entered promiscuous mode

Как выяснилось, это проблемы именно пресловутого реалетковского драйвера, и было решено собирать драйвер r8168, а заодно и переустановить Proxmox, так как апгрейд через пару релизов обещал ещё больший геморрой с разбором получившихся косяков. Поставить стоковый образ через LARA на ZFS было плохой идеей, так как хетцнеровский образ Linux восстановления не умеет в ZFS, а опять общаться с FreeBSD мне было влом. Все команды от рута, проставлять решётки в начале строк мне тоже влом :)

Бэкап

Что нужно забэкапить (используются только KVM-контейнеры):

VPS Part

Конфиг: /var/lib/pve-cluster/config.db

Данные /var/lib/vz/images/*

Linux Part
Конфиг:  /etc/network/interfaces

Скрипты: /root/*.sh

Переустановка ОС

Список дисков

Disk /dev/sda: 3000 GB (=> 2794 GiB)
Disk /dev/sdb: 3000 GB (=> 2794 GiB)
Disk /dev/sdc: 2000 GB (=> 1863 GiB)

Из первых двух собирается RAID1, третий монтируется в /mnt/backup

Оптимальная на мой взгляд разбивка без LVM выглядит так:

Восстановление сети

После установки грузимся в хетцнеровское фирменное Rescue, в котором и будут проводиться все работы.

  1. Восстанавливаем конфиг /etc/network/interfaces
  2. Заходим в chroot и переходим в /tmp:
  3. Качаем исходники драйвера r8168, официальный сайт тут: http://www.realtek.com.tw/Downloads/downloadsView.aspx?Langid=1&PNid=13&PFid=5&Level=5&Conn=4&DownTypeID=3&GetDown=false, после того, как скачали на компьютер, извлекаем ссылку и заливаем на сервер:
  4. Правим скрипты сборки: так как у нас chroot, то uname -r будет возвращать версию хостовой системы. Чтобы всё скомпилировалось, нужно заменить конструкции типа $(shell uname -r) в Makefile’ах и Autorun.sh на явное указание ядра проксмокса (а точнее, версии ядра, под которую будем собирать). Её можно найти в /lib/modules, выглядит как 4.4.16-1-pve, далее именно эту версию я буду указывать в качестве примера.
  5. Ставим пакеты, необходимые для сборки и screen для шага 10
  6. Собираем
  7. Далее я открыл screen и запустил ./autorun.sh, а через какое-то время хардово ребутнул сервер. Да, так делать плохо, нужно было выйти из чрута и руками положить модуль куда надо, распарсив самостоятельно скрипт, но мне очень хотелось спать :) Дальнейшие шаги 8-12 я проделал чтобы убедиться, что всё нормально работает, однако следует рассматривать их как правильное решение при первой установке модуля; а в пункте 7 в этом случае достаточно просто скопировать собранный модуль в
  8. Опять Rescue и шаг 2
  9. Выполняем обновление модулей (везде, где можно, явно указываем версию ядра, у нас chroot, не забыли?)
  10. Блокируем загрузку старого драйвера
  11. Добавляем загрузку нового модуля
  12. Пересобираем Initramfs

    Если всё получилось верно, то при выполнении будет строчка:
  13. Пляски с сетью на этом закончились. Кидаем контейнеры на их место в /var/lib/vz/images, config.db в /var/lib/pve-cluster, правим /etc/network/interfaces, включаем форвардинг командой

    а также возвращаем в /etc/fstab строчку

Эксплуатация

Вообще говоря, пакет r8168-dkms вполне себе существует, но он в ветке sid, и я лучше буду выполнять эту работу руками при обновлении ядра :)

Собственно, после установки обновлений ядра нужно будет повторять шаги 3, 5, 6, 7, убрав оттуда жёсткую привязку к версии ядра и используя стандартные скрипты из поставки драйвера.

Но это всё работает при нахождении за локальной консолью и на обновлённом ядре (после перезагрузки, с лежащей сетью), а на удалённом сервере нужно делать так:

Убеждаемся, что у нас появился актуальный драйвер:

И добавляем его в загрузочный образ (вообще, по идее достаточно update-initramfs -u -k 4.4.44-1-pve, но это так, на всякий случай)

Использовано:

https://forum.proxmox.com/threads/cannot-access-etc-pve-transport-endpoint-not-connected.7528/

https://wiki.hetzner.de/index.php/Installation_des_r8168-Treibers/ru#Proxmox

и многочисленные запросы в гугле вида «r8169 debian»


So, what do you think ?

You must be logged in to post a comment.