Вопрос или проблема
Запуск apt dist-upgrade перед do-release-upgrade (с 20.04.6 до 22.04.5) вызывает сбой виртуальной машины Digital Ocean.
Я пытаюсь обновить виртуальную машину Ubuntu на Digital Ocean с 20.04.6 до 22.04.5, используя do-release-upgrade. Я подключен через SSH.
К сожалению, это не прямой путь, и мне предлагают установить все доступные обновления перед обновлением.
Перед началом я создал снимок, чтобы быстро восстановиться в случае, если что-то пойдет не так.
Следуя инструкциям с этого форума, мне предложили выполнить sudo apt full-upgrade
. После его выполнения и перезагрузки машина отказывается подключаться (что означает, что она не загружается). Она не подключается даже из консоли Digital Ocean в их контрольной панели, не говоря уже о SSH.
После восстановления снимка я попытался следовать инструкциям в этом посте. После выполнения sudo apt-get dist-upgrade
у меня возникла та же проблема после перезагрузки.
Попытка запустить sudo do-release-upgrade
без перезагрузки загружала и устанавливала обновления, но в любом случае машина становилась не загрузочной в конце.
Так что же я здесь упускаю? Есть какие-то подсказки?
[ОБНОВЛЕНИЕ]
Мне удалось установить все необходимые обновления, выполнив sudo apt list --upgradable
и установив каждое вручную с помощью sudo apt-get install
, применяя autoremove
, когда это необходимо. Теперь моя система полностью обновлена. Но при запуске sudo do-release-upgrade
после завершения долгого процесса обновления система оказалась не загрузочной. Я даже попробовал выключить дроплет и снова включить его, но не удалось вернуть его в онлайн. Я восстановлю снимок и попробую расследовать дальше.
После многих часов исследований я наконец нашел виновного и решение. Проблема в обновлении заключается в том, что 22.04 использует netplan, но дроплеты 20.04 не имеют конфигурационных файлов netplan (по крайней мере, у меня нет). Поэтому после перезагрузки машину нельзя достучаться, потому что ее сетевые настройки пропали.
Чтобы решить эту проблему, после выполнения sudo do-release-upgrade
после завершения, ответьте НЕТ, когда вас спросят о перезагрузке. Затем получите свою сетевую информацию, выполнив:
ip a
для получения адресов- Ожидаемый вывод должен выглядеть примерно так:
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether aa:aa:aa:aa:aa:aa brd ff:ff:ff:ff:ff:ff inet xxx.xxx.xxx.xxx/xx brd ***.***.***.*** scope global eth0 valid_lft forever preferred_lft forever inet yyy.yyy.yyy.yyy/yy brd ***.***.***.*** scope global eth0 valid_lft forever preferred_lft forever inet6 zzzz:zzzz:zzzz:zzzz:zzzz:zzzz:zzzz/zz scope global valid_lft forever preferred_lft forever inet6 aaaa:bbbb:cccc:dddd:eeee:ffff/af scope link valid_lft forever preferred_lft forever
ip r
для получения маршрутов- Ожидаемый вывод должен выглядеть примерно так:
default via ccc.ccc.ccc.ccc dev eth0 proto static ddd.ddd.ddd.ddd/dd dev eth0 proto kernel scope link src yyy.yyy.yyy.yyy eee.eee.eee.eee/ee dev eth0 proto kernel scope link src xxx.xxx.xxx.xxx
cat /etc/resolv.conf
для получения конфигурации nameserver.nameserver nnn.nnn.nnn.nnn options edns0 trust-ad search .
Запомните эти выводы и создайте конфигурационный файл netplan, выполнив sudo nano /etc/netplan/config.yaml
и написав следующее содержимое, заменяя соответствующие записи на те, что вы записали ранее (чтобы упростить задачу, я изменил значения вывода на буквы, чтобы вы могли увидеть, куда какая запись должна идти):
network: version: 2 ethernets: eth0: addresses: - xxx.xxx.xxx.xxx/xx - zzzz:zzzz:zzzz:zzzz:zzzz:zzzz:zzzz/zz - yyy.yyy.yyy.yyy/yy routes: - to: default via: ccc.ccc.ccc.ccc - to: default via: zzzz:zzzz:zzzz:zzzz:zzzz:zzzz:zzzz match: macaddress: aa:aa:aa:aa:aa:aa nameservers: addresses: - nnn.nnn.nnn.nnn - 2001:4860:4860::8844 - 2001:4860:4860::8888 - 8.8.8.8 set-name: eth0
Также обратите внимание, что отступы в содержимом yaml должны совпадать точно, как выше, иначе вы получите ошибку.
Измените разрешения для вновь созданного файла с помощью sudo chmod 600 /etc/netplan/config.yaml
.
Теперь выполните sudo netplan --debug generate
. Если вы получите сообщение с чем-то вроде WARNING:root:Cannot call Open vSwitch: ovsdb-server.service is not running., вы можете решить это, выполнив sudo apt-get install openvswitch-switch-dpdk
, но я думаю, что вы можете проигнорировать это сообщение. Я не проигнорировал, только на всякий случай.
В конце концов, выполните sudo netplan apply
и перезагрузите. Обратите внимание, что если у вас есть какие-либо ключи SSH, вам нужно будет их перенастроить, так как подпись изменится.
Обратите внимание, что если вы зайдете в папку /etc/netplan/, вы заметите, что там уже есть файл с именем 50-cloud-init.yaml. Не делайте, как я, и не редактируйте этот файл с приведенными выше содержимым, потому что содержимое этого файла не сохраняется после перезагрузки и генерируется автоматически, и я выяснил это, когда заблокировался в дроплете и мне пришлось получить доступ к нему через консоль восстановления контрольной панели Digital Ocean, чтобы создать config.yaml и т.д.
Я надеюсь, что это поможет любому, кто застрял на этом, и, надеюсь, это избавит вас от часов исследований и головной боли.
Ответ или решение
Проблема с обновлением Ubuntu на облачном VM Digital Ocean
Введение
При обновлении виртуальной машины (VM) на Digital Ocean с Ubuntu 20.04.6 до 22.04.5 с использованием команды do-release-upgrade
возникли проблемы с доступом к системе после перезагрузки. Эта проблема заключается в том, что версия 22.04 использует Netplan для управления сетевыми настройками, в то время как версия 20.04, вероятно, настроена по-другому.
Проблема
После выполнения команды sudo apt full-upgrade
или sudo apt-get dist-upgrade
и последующей перезагрузки, система не загружалась, и доступ к ней через SSH был невозможен. Во время процесса обновления система не создает конфигурацию Netplan, что приводит к потере сетевых настроек.
Решение проблемы
Чтобы внести необходимые настройки и восстановить доступ к системе, следуйте указанным ниже шагам:
-
Отклоните перезагрузку:
После завершенияdo-release-upgrade
вам будет предложено перезагрузить систему. Выберите Нет (NO), чтобы предотвратить автоматическую перезагрузку. -
Получите информацию о сетевых настройках:
Выполните следующие команды для получения информации о текущих IP-адресах, маршрутах и конфигурации DNS:ip a
для получения IP-адресов.ip r
для получения маршрутов.cat /etc/resolv.conf
для получения конфигурации DNS.
-
Создайте файл конфигурации Netplan:
Запустите командуsudo nano /etc/netplan/config.yaml
для создания нового файла конфигурации. Вставьте в него следующую структуру, заменив обозначения на полученные данные:network: version: 2 ethernets: eth0: addresses: - xxx.xxx.xxx.xxx/xx - zzzz:zzzz:zzzz:zzzz:zzzz:zzzz:zzzz/zz - yyy.yyy.yyy.yyy/yy routes: - to: default via: ccc.ccc.ccc.ccc match: macaddress: aa:aa:aa:aa:aa:aa nameservers: addresses: - nnn.nnn.nnn.nnn - 2001:4860:4860::8844 - 2001:4860:4860::8888 - 8.8.8.8 set-name: eth0
Обратите внимание на правильную индентацию YAML.
-
Установите права доступа к файлу:
Запустите командуsudo chmod 600 /etc/netplan/config.yaml
, чтобы установить правильные права доступа для конфигурационного файла. -
Сгенерируйте и примените конфигурацию:
Выполните командуsudo netplan --debug generate
. Если вы видите сообщение о проблемах с Open vSwitch, это может быть проигнорировано, но его можно устранить, установив пакетopenvswitch-switch-dpdk
при необходимости. Затем выполните командуsudo netplan apply
. - Перезагрузите систему:
После выполнения предыдущих шагов выполните командуsudo reboot
. После перезагрузки вы должны получить доступ к системе через SSH.
Заключение
После выполнения перечисленных выше шагов ваша виртуальная машина должна успешно загружаться и быть доступной, а все сетевые настройки будут правильно настроены. Если после применения всех изменений вы все еще не можете подключиться, проверьте конфигурацию сети на наличие возможных ошибок или прослушайте консоль Digital Ocean для получения дополнительных сведений.