1. 概要
「VirtualBox」上に、「FreeBSD 13.3 RELEASE」のマシンがありますので、これを「FreeBSD 14.1 RELEASE」にアップデートするところからやってみます。
アップデート前のマシンは、いくつかのサーバアプリケーションをインストールしたものです。
2. ports の更新
放置しておいたので、アップデートの発生している、「ports」が山ほどあります。
全部更新しておきます。
なぜか、「bind-tools」が「recursive」エラーになって、「portsupgrade」もインストールもできない。
仕方ないので、アンインストールします。
システムのアップグレード後に余裕があれば、インストールしてみますが、いらないと言えば、いらないんだけどな。
3. パッチをあてる
仮想マシンの現在の状況を見てみます。
$ uname -a
FreeBSD ns.vm.sing.ne.jp 13.3-RELEASE FreeBSD 13.3-RELEASE MYKERNEL amd64
パッチがあたっていないので、パッチをあてるところから・・・。
以下、「root」ユーザ権限で。
freebsd-update fetch
メッセージは長々と出力されるので割愛します。
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching public key from update2.freebsd.org... done.
Fetching metadata signature for 13.3-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 35 patches.....10....20....30.. done.
Applying patches... done.
Fetching 6 files... ... done.
The following files will be updated as part of updating to
13.3-RELEASE-p3:
/bin/freebsd-version
/boot/kernel/if_wg.ko
・・・ 略 ・・・
/rescue/dhclient
/rescue/disklabel
:
Space と q で進めていきます。
アップデート。
freebsd-update install
メッセージは、これだけ。
Creating snapshot of existing boot environment... done.
Installing updates...
Restarting sshd after upgrade
Performing sanity check on sshd configuration.
Stopping sshd.
Waiting for PIDS: 908.
Performing sanity check on sshd configuration.
Starting sshd.
Scanning //usr/share/certs/blacklisted for certificates...
Scanning //usr/share/certs/trusted for certificates...
Scanning //usr/local/share/certs for certificates...
done.
再起動。
shutdown -r now
更新を確認。
uname -a
FreeBSD ns.vm.sing.ne.jp 13.3-RELEASE-p3 FreeBSD 13.3-RELEASE-p3 GENERIC amd64
「FreeBSD 13.3-RELEASE」から「FreeBSD 13.3-RELEASE-p3」へ変わっています。
4. GENERIC boot を用意しておく
メジャーアップデートなので必要になりかもしれないので、あらかじめメディアだけは用意しておきます。
「.iso」ファイルをダウンロードして、それをマウントするのが手っ取り早い。
カーネルさえあればいいので、「DVD」メディアでなく、「CD」メディアで十分。
ダウンロード。
mkdir -pv /tmp/disk
curl https://download.freebsd.org/ftp/releases/amd64/amd64/ISO-IMAGES/13.3/FreeBSD-13.3-RELEASE-amd64-disc1.iso --output /tmp/disk/FreeBSD-13.3-RELEASE-amd64-disc1.iso
5. バージョンアップ
バージョンアップ。
「root」ユーザ権限で。
freebsd-update -r 14.1-RELEASE upgrade
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching metadata signature for 13.3-RELEASE from update1.freebsd.org... done.
Fetching metadata index... done.
Fetching 1 metadata files... done.
Inspecting system... done.
The following components of FreeBSD seem to be installed:
kernel/generic kernel/generic-dbg src/src world/base world/lib32
The following components of FreeBSD do not seem to be installed:
world/base-dbg world/lib32-dbg
Does this look reasonable (y/n)?
yEnter で答えます。
以降、メッセージはなるべく省略して、入力が必要な個所のみ記述します。
基本的に、デフォルトのコンフィグレーションファイルと異なるものは「conflicts」でっせといって下記のように表示されます。
The following file could not be merged automatically: /etc/mail/mailer.conf
Press Enter to edit this file in vi and resolve the conflicts
manually...
Enter を押すと、「vi」が起動して、相違のある部分が表示されますので、残す部分以外は削除していきます。
起動できなくなるような編集をしない限りは、最悪、後でも編集しなおせるので、最低限必要な箇所を編集していきます。
同様に、編集の発生しているコンフィグレーションファイルが、次々に編集対象になります。
あるいは、下記のように。
The following changes, which occurred between FreeBSD 13.3-RELEASE and
FreeBSD 14.1-RELEASE have been merged into /etc/hosts:
--- current version
+++ new version
@@ -14,18 +14,18 @@
#
# Imaginary network.
#10.0.0.2 myname.my.domain myname
#10.0.0.3 myfriend.my.domain myfriend
#
-# According to RFC 1918, you can use the following IP networks for
-# private nets which will never be connected to the Internet:
+# According to RFC 1918, you can use the following IP blocks for
+# private internets:
#
-# 10.0.0.0 - 10.255.255.255
-# 172.16.0.0 - 172.31.255.255
-# 192.168.0.0 - 192.168.255.255
+# 10.0.0.0 - 10.255.255.255 (10/8 prefix)
+# 172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
+# 192.168.0.0 - 192.168.255.255 (192.168/16 prefix)
#
-# In case you want to be able to connect to the Internet, you need
+# In case you want to make addresses available on the Internet, you need
# real official assigned numbers. Do not try to invent your own network
# numbers but instead get one from your network provider (if any) or
# from your regional registry (ARIN, APNIC, LACNIC, RIPE NCC, or AfriNIC.)
#
192.168.100.196 ns.vm.sing.ne.jp
Does this look reasonable (y/n)?
前のバージョンから、減る個所を「-」、今度のバージョンで増える箇所を「+」で表示して。
「どうね?」と、きいてきます。
たいてい、y Enter で問題ないでしょう。
ほかに。
The following file will be removed, as it no longer exists in
FreeBSD 14.1-RELEASE: /etc/portsnap.conf
Does this look reasonable (y/n)?
ちゅうのもあります。
「/etc/portsnap.conf」は、「FreeBSD 14.0 RELEASE」から、なくなったのね。
y Enter ですね。
上記のたぐいが、一通り終わったら、下記のように。
The following files will be removed as part of updating to
14.1-RELEASE-p1:
/boot/kernel/amr.ko
/boot/kernel/amr_cam.ko
・・・ 略 ・・・
/boot/kernel/snd_maestro.ko
/boot/kernel/snd_mss.ko
:
更新するファイルをずらずらと表示してきます。
Space または q で進めていきます。
最終的に、下記を表示して終了します。
To install the downloaded upgrades, run "/usr/sbin/freebsd-update install".
To install the downloaded upgrades, run "/usr/sbin/freebsd-update install".
ってことで、インストール。
/usr/sbin/freebsd-update install
下記のメッセージが表示されます。
Creating snapshot of existing boot environment... done.
Installing updates...
Kernel updates have been installed. Please reboot and run
"/usr/sbin/freebsd-update install" again to finish installing updates.
「カーネルが変わったけん、再起動して、アップデートしなされ」ということですな。
再起動。
shutdown -r now
6. 再起動後
再起動後にログインしたときのログイン時のメッセージが
FreeBSD 14.1-RELEASE releng/14.1-n267679-10e31f0946d8 GENERIC
となっております。
再度、「root」ユーザ権限で。
/usr/sbin/freebsd-update install
この下のメッセージの途中は、時間がかかります。
1~2時間は、覚悟した方がいいかもです。
Creating snapshot of existing boot environment... done.
Installing updates...Removing conflicting directory ///usr/src/sys/contrib/openzfs/cmd/arc_summary
Removing conflicting directory ///usr/src/sys/contrib/openzfs/cmd/zvol_wait
Restarting sshd after upgrade
Performing sanity check on sshd configuration.
Stopping sshd.
Waiting for PIDS: 903.
Performing sanity check on sshd configuration.
Starting sshd.
Scanning /usr/share/certs/untrusted for certificates...
Scanning /usr/share/certs/trusted for certificates...
Scanning /usr/local/share/certs for certificates...
Completing this upgrade requires removing old shared object files.
Please rebuild all installed 3rd party software (e.g., programs
installed from the ports tree) and then run "/usr/sbin/freebsd-update install"
again to finish installing updates.
これを読みますと、サードパーティのソフトウェアをアップデートしたうえで、再度「freebsd-update」せよ、とのことです。
メジャーアップデートのときは、こうなりますな。
実は、ここから下、何度もやり直し、書き直しをしています。
なかなか、問題があって、すくない手順でやるのは、苦労します。
まず。
pkg bootstrap -f
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]:
yEnter で答えます。
Bootstrapping pkg from pkg+https://pkg.FreeBSD.org/FreeBSD:14:amd64/quarterly, please wait...
Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
Installing pkg-1.21.3...
package pkg is already installed, forced install
Extracting pkg-1.21.3: 100%
「ports」更新。
git -C /usr/ports pull
portsdb -Fu
この後、「service」を確認したら、「sa-spamd」の起動が変なので。
cd /usr/ports/mail/spamassassin/
make
make reinstall
sa-update
service sa-spamd status
一応、この時点で、サービスは、全部起動している。
「ports」の更新チェック。
$ portversion -v | grep '<'
[Reading data from pkg(8) ... - 343 packages found - done]
ということで、「ports」の更新はなさそうなので。
/usr/sbin/freebsd-update install
Creating snapshot of existing boot environment... done.
Installing updates...rmdir: ///var/db/portsnap: Directory not empty
rmdir: ///usr/src/sys/contrib/openzfs/cmd/zvol_wait: Not a directory
rmdir: ///usr/src/sys/contrib/openzfs/cmd/arc_summary: Not a directory
done.
「/var/db/portsnap」は、手動で削除せなあかんのかな?
一応、念のため、再起動しようと、ログインしなおして、「sudo」使用とすると。
sudo su
ld-elf.so.1: Shared object "libcrypto.so.111" not found, required by "sudo"
「sudo」は、インストールしなおさな、あかんようです、
「portversion」では、わからないのね。他にもありそうだなぁ。
「sudo」が効かないので、「su」で、「root」ユーザ権限を取得して。
cd /usr/ports/security/sudo
make deinstall clean
make
make reinstall
これで、「sudo」は、回復するものの・・・。
「service」を見てみると、この時点で。
$ service nsd status
ld-elf.so.1: Shared object "libcrypto.so.111" not found, required by "nsd-checkconf"
nsd is not running.
$ service unbound status
ld-elf.so.1: Shared object "libssl.so.111" not found, required by "unbound-checkconf"
unbound is running as pid 677.
「libcrypto.so.111」ちゅうのと「libssl.so.111」ちゅうのが、ないのがわかります。
「sudo」と同じ要領で、インストールしなおします。
ログインしなおして、「sudo」で、「root」ユーザ権限を取得して。
shutdown -r now
7. service
起動後に。
/var/log/messages
をチェックすると。
Jun 26 11:06:47 ns root[1123]: /etc/rc: WARNING: failed to start clamav_clamd
Jun 26 11:06:47 ns root[1176]: /etc/rc: WARNING: failed to start apache24
Jun 26 11:06:47 ns root[1182]: /etc/rc: WARNING: failed to start clamav_freshclam
となっておる。
「service」コマンドで、サービスのチェックを行うと、軒並み死んでおります。
起動しているものの方が、少ないくらいだな。
apache24
clamav_clamd
clamav_freshclam
qmailsmtpd
qmailsmtpd_ssl
qmailpop3d
qmailpop3d_ssl
mysql
postgresql
「ports」を取得しなおそうとすると。
$ git -C /usr/ports pull
ld-elf.so.1: Shared object "libssl.so.111" not found, required by "libcurl.so.4"
この「libssl.so.111」がないちゅうのは、これから悩まされるのだ。
下記をサイトを参考にして。
「FreeBSD の 14.0-RELEASE が出てたので導入」
以下を実行。
pkg-static -v.
pkg-static install -f pkg
pkg upgrade -f
というのが、本式のやり方のはずなのですが。
これだと、その後、「portupgrade」を山ほどやりなおす必要があります。
こすい、裏技として。
「FreeBSD 13.3 RELEASE」のままのシステムがあればよいのです。仮想環境でも構わない。
容易できたら、そのマシンから、必要となるライブラリを持ってきます。
ログインユーザで。
$ sftp -i ~/.ssh/用意したシステムの証明書 用意したシステム
Connected to 用意したシステム
sftp> get /usr/lib/libssl.so.111 libssl.so.111.64
sftp> get /usr/lib32/libssl.so.111 libssl.so.111.32
sftp> get /lib/libcrypto.so.111 libcrypto.so.111.64
sftp> get /usr/lib32/libcrypto.so.111 libcrypto.so.111.32
sftp> bye
「root」ユーザ権限で。
mv libssl.so.111.64 /usr/lib/libssl.so.111
mv libssl.so.111.32 /usr/lib32/libssl.so.111
mv libcrypto.so.111.64 /lib/libcrypto.so.111
mv libcrypto.so.111.32 /usr/lib32/libcrypto.so.111
これで、「git」他、ある程度のものが動作するようになります。
再起動。
shutdown -r now
「service」で動作していないのは、下記のものだけになりました。
clamav_clamd
ということで。
cd /usr/ports/security/clamav
make clean
make
make reinstall
起動。
service clamav-clamd start
これで、このマシン上のサーバプログラムは、すべて正常に起動しているように見えます。
再度、「ports」の更新を確認。
git -C /usr/ports pull
portsdb -Fu
portversion -v | grep '<'
この結果。
[Reading data from pkg(8) ... - 343 packages found - done]
ということで、この時点で、「ports」の更新はない。
これで、このマシンのシステムアップグレードは、完了ということになります。
8. 蛇足
本当は、実機でも、「FreeBSD 13.3 RELEASE」から「FreeBSD 14.1 RELEASE」へのアップグレードを行おうと思っていたのですが・・・。
「libssl.so.111」「libcrypto.so.111」の問題があるため、今回は、実機のアップグレードは、断念しました。
「FreeBSD 13.4 RELEASE」が、2024年9月10日にリリースされる予定で、「FreeBSD 13.4 RELEASE」では、この問題が解決していることを願っております。