Умови:
Є віртуальна машина з FreeBSD під керуванням Proxmox VE.
Є застосунок 'pleroma' котрий працює на базі erlang.
Причини:
Для підтримання інфраструктури операційна система оновлюється і пакунки
підтримуються в актуальному стані.
Застосунок працює, в пам'яті, все
нормально. Користувачі заносять нові дані...
Дії:
Snapshot VM with RAM
state - 'before_upgrade'.
Сервісне оновлення 'pkg upgrade'
Oct 1 08:51:24 pleroma pkg[25416]: erlang upgraded: 21.3.8.24_1,4 -> 25.3.2.12_1,4 Oct 1 08:52:37 pleroma pkg[25416]: elixir upgraded: 1.11.3 -> 1.16.3
Застосунок працює.
Вночі - сервісний перезапуск системи. Попередньо зроблено знімок віртуальної машини зі станом: Snapshot VM with RAM state - 'before_reboot'.
Проблеми:
І ось після перезапуску системи - вітаннячка: pleroma - не запускається вже під 'erlang -25'.
Error: ==> prometheus_ex Compiling 19 files (.ex) == Compilation error in file lib/prometheus/buckets.ex == ** (UndefinedFunctionError) function Kernel.Utils.defdelegate/2 is undefined or private. Did you mean: * defdelegate_all/3 * defdelegate_each/2 (elixir 1.16.3) Kernel.Utils.defdelegate({:new, [line: 18, column: 12], [{:arg, [line: 18, column: 16], nil}]}, []) lib/prometheus/buckets.ex:18: (module) could not compile dependency :prometheus_ex, "mix compile" failed. Errors may have been logged above. You can recompile this dependency with "mix deps.compile prometheus_ex --force", update it with "mix deps.update prometheus_ex" or clean it with "mix deps.clean prometheus_ex"
Ігри з "prometheus_ex" - не допомагають. Оновити 'pleroma' наразі не можливо, додаткові налаштування краще не чіпати зараз.
Proxmox VE. Disconnect netwok interface. |
Рішення:
- Відновити "erlang-21", але є, але pkg не присутній вже в репозиторії версії "FreeBSD 13.4". В архівах швидко не знайшов пакунків. З ports знайшов архівні знімки, але з них не компілюється успішно. Відкладено.
-
Відновлюю Snapshot VM with RAM state - 'before_reboot'. Допомагає.
Система знову працює. Але працює поки не перезавантажити. Через те, що вона
тільки в пам'яті з запущеним erlang-21/elixir-1.11.. Відновитися до "before_upgrade" не можу, з'явилася нова інформація.
-
Відновлю Snapshot VM with RAM state - 'before_upgrade' у якості нової
віртуальної машини 201. Через:
qm disk-detach 201 scsi0 zfs send storage/vm101-disk-0@before_upgrade | zfs receive -f storage/vm201-disk-0 qm set 201 --scsi0 storage:vm-201-disk-0
- Disconnect netwok interface віртуальної машини 201. Запуск віртуальної машини 201: qm start 201.
- В консолі віртуальної машини 201 змінюю налаштування тимчасової IP адреси, щоб не було дублікатів. Connect netwok interface. Піддуюся SSH консоллю. Тут є ще пакунки: elixir-1.11.3 erlang-21.3.8.24_1,4 erlang-man-21.3_2.
- Створення резервних пакунків erlang-21 та elixir-1.11 з робочої системи:
$ mkdir backup_pkg $ pkg info -r erlang erlang-21.3.8.24_1,4: elixir-1.11.3 $ pkg create -o backup_pkg erlang $ pkg create -o backup_pkg elixir $ pkg create -o backup_pkg erlang-man $ ls -lh backup_pkg/ total 40576 -rw-r--r-- 1 root wheel 5.1M Oct 2 15:58 elixir-1.11.3.pkg -rw-r--r-- 1 root wheel 33M Oct 2 15:58 erlang-21.3.8.24_1,4.pkg -rw-r--r-- 1 root wheel 1.0M Oct 2 15:58 erlang-man-21.3_2.pkg
- Перенесення файлів 'backup_pkg/*.pkg' на робочу віртуальну машину 101 через 'nfs' або через 'scp'.
- В консолі віртуальної машини 101 видаляю версії "erlang-25.3.2.12_1,4", "elixir-1.16.3", та встановлюю щойно завантаженні.
$ pkg install erlang-21.3.8.24_1,4.pkg erlang-man-21.3_2.pkg elixir-1.11.3.pkg
- Перезапуск застосунку і перевірка роботи, все працює.
- Блокування пакунків від майбутнього оновлення до розв'язування питання з оновленням самого застосунку.
$ pkg lock erlang-21.3.8.24_1,4.pkg erlang-man-21.3_2.pkg elixir-1.11.3.pkg
Висновок.
На production це робити - гріх 😀
Рознести дані та застосунок за різним мікросервісам: Postgress database VM. NFS сервер для зображень.
Знімки стану віртуальних машин перед будь-якими важливим діями, має бути правило. Дяка ZFS що робить це дуже швидко.
Немає коментарів:
Дописати коментар