Обновление мажорного релиза FreeBSD, что может быть более захватывающим и интригующим? И сегодня я поделюсь с вами, дорогие читатели сим увлекательным процессом. Присаживайтесь поудобнее, запасайтесь чашечкой чая, кофе, бутылочкой кока-колы, и возможно даже попкорном и мы начинаем.
Понятное дело, что сам по себе процесс довольно заурядный. На сегодняшний момент есть работающих как-то утилиты из стоковой, штатной поставки freebsd, которые позволяют произвести это обновление. Но везде есть свои "но" и них-то и пойдёт речь в нашем сегодняшнем опусе.
Итак, процесс описан в руководстве
У меня как раз выдался свободный момент времени и я решил посвятить его обновлению с релиза 13.4 на релиз 14.1, на тот момент ещё не успел выйти релиз 14.2, а вышел он через пару дней после всех моих манипуляций.
Нулевая команда (про которую не говорят в руководстве)
pkg install tmux
или
pkg install screen
И дальнейшие процедуры имеет смысл проводить внутри tmux или screen, что более привычно.
Первая команда
# freebsd-update fetch
прошла без сучка и без задоринки (даже несмотря на то, что у рута default shell - это bash, ибо идёте нахер с вашим встратым дефолтным шеллом по-умолчанию).
Вторая команда
# freebsd-update -r 14.1-RELEASE upgrade
согласно мануалу завершилась вопросом про согласие на обновление компонентов системы, в которых freebsd-update нашла обновления, согласно скачанным данным про обновление. Тут остаётся только пожать плечами и согласиться ехать дальше. Потому что если мы не согласны, то поменять что-то мы не можем, по крайней мере формально.
И вот тут хочется сделать некоторое замечание, если в системе кастомное ядро, то тут мы приехали, потому что обновлятор рассчитан на стоковое, по сути в руководстве написано +/- это, но другими словами.
Хотя, конечно, я драматизирую - если система кое-как способна загрузиться на стоковм ядре, то у нас будет задачка на подумать - собрать кастомный модуль или кастомное ядро после обновления.
А здесь у нас editor's note, которого нет в мануале freebsd: Дальнейшее обновление должно производиться из командной строки. Потому что есть неиллюзорный шанс спецэффектов. Мало того, крайне настоятельно рекомендуется отключить всё дополнительное, что стартует из rc.conf. То есть после ребута должна запускать как можно более скромная оболочка, приближённая к стоковой. Также должна быть доступна командная строка от рута, то есть чтобы можно было залогиниться рутом с паролем (или удалённо рутом с сертификатом).
Дальше, нам предлагают ребутнуться старомодным способом через shutdown -r now
, но интуитивно-понятную команду reboot
никто не отменял и я был приятно удивлён, что она таки сработала.
После загрузки, продолжаем опупею - мы пока что обдновили только ведро и нам предстоит много всякого интересного. Итак:
# freebsd-update install
(повторение, мать его, ученье) И тут нам заявляют, что возможно будет несколько стадий обновления, в зависимости от количества установленных пакетов.
И здесь-то начинается тот самый mileage varies, который и побудил меня написать эту заметку.
У меня freebsd установлена в виртуалке - она какбы игрушечная и нужна ровно для того, чтобы проверять работоспособность некоторых моих поделок не только на линупсе, но и во freebsd, потому что всплывают порой интересные баги в зависимости используемой системы. Ради интереса на ней есть клиенты psi, telegram и браузер firefox. Это всё графические приложения и у меня в системе есть i3-wm, и соответственно x.org, чтобы работала вся эта красотень.
И вот... несколько приложений из состава иксов заявили, что они не могут обновиться до более старых версий (а всё потому что в 13-ю ветку попали более свежие версии приложений, чем в 14-ю!) и в итоге у меня не смогли поставиться почти все сторонние приложения с графическим стэком, а сам стэк после обновления остался в неработающем, полуразвороченном состоянии.
Третий шаг
Здесь мануал нас отсылает к другой странице.
У меня простой кейс, я ничего из портов не ставил, т.к. современный набор pkg помимо того, что относительно свеж, ещё и предоставляет то, что мне в этой игрушечной системе нужно было в достаточном объёме, собранное с reasonable набором фич и флагов (в отличие от маразма, творящегося в archlinux-е).
Достаточно болтовни, запускаем:
# pkg-static upgrade -f
Эта команда переустановит и заапгрейдит всё, что есть в системе из репозитория pkg. Она не починит того, что было сломано, но всё же.
Далее можно/нужно произвести куищще, то есть reboot.
Четвёртый шаг
Здесь нам предстоит поставить то, что не смогло обновиться в предыдущих шагах и было удалено. С помощью утилиты pkg:
# pkg install telegram-desktop psi xorg profanity firefox slim i3
Пятый шаг
Немного тавтологии не повредит в таком важном процессе как обновление freebsd:
# freebsd-update install
После чего можно влезать в rc.conf и включать всё что должно стартовать автоматом после ребута
Шестой шаг
Последний reboot, загрузка в обновлённую систему. Если у вас были какие-то сервисы, с обновлением которых приехали изменения в конфигах, то придётся их чинить. Но это уже другая история.
Как говорится, your mileage may vary. Но мой путь был таким. С другой стороны, конкретно к freebsd у меня всегда было отношение несколько скептическое - были времена, когда она в каким-то роде сияла, была на передовой и занимала лидирующие позиции в статистике используемых систем для предоставления хостинга и построения веб-сервисов, но это время прошло.
В моём зоопарке систем freebsd находится на правах freak of nature, но в какой-то мене заслуживающего внимания.
Небольшой "бонус"
В качестве "бонуса" текстовый "скриншот", как любят фанаты /unixporn:
[root@pebble ~]# fastfetch
``` ` root@pebble
` `.....---.......--.``` -/ -----------
+o .--` /y:` +. Host: VirtualBox (1.2)
yo`:. :o `+- Kernel: FreeBSD 14.2-RELEASE
y/ -/` -o/ Uptime: 2 days, 11 hours, 42 mins
.- ::/sy+:. Packages: 643 (pkg)
/ `-- / Shell: bash 5.2.37
`: :` Terminal: tmux 3.5a
`: :` CPU: 12th Gen Intel(R) Core(TM) i5-12400T (4) @ 1.80 GHz
/ / GPU: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter
.- -. Memory: 546.88 MiB / 989.55 MiB (55%)
-- -. Swap: 324.16 MiB / 2.43 GiB (13%)
`:` `:` Disk (/): 17.38 GiB / 44.54 GiB (39%) - ufs
.-- `--. Locale: en_US.UTF-8
.---.....----.
[root@pebble ~]#