1. 概要
「VirtualBox」上に、「FreeBSD 12.3 RELEASE」のマシンがありますので、これを「FreeBSD 13.1 RELEASE」にアップデートするところからやってみます。
アップデート前のマシンは、いくつかのサーバアプリケーションをインストールしたものです。
2. パッチをあてる
仮想マシンの現在の状況を見てみます。
$ uname -a
FreeBSD ns.vm.sing.ne.jp 12.3-RELEASE FreeBSD 12.3-RELEASE r371126 GENERIC amd64
パッチがあたっていないので、パッチをあてるところから・・・。
freebsd-update fetch
メッセージは長々と出力されるので割愛します。
Looking up update.FreeBSD.org mirrors... 2 mirrors found.
Fetching public key from update1.freebsd.org... done.
Fetching metadata signature for 12.3-RELEASE from update1.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system...
・・・ 略 ・・・
Space と q で進めていきます。
アップデート。
freebsd-update install
メッセージは、これだけ
Creating snapshot of existing boot environment... done.
Installing updates...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 12.3-RELEASE-p5 FreeBSD 12.3-RELEASE-p5 GENERIC amd64
「FreeBSD 12.3-RELEASE」から「FreeBSD 11.2-RELEASE-p5」へ変わっています。
3. GENERIC boot を用意しておく
もし、カーネルを変更しているのであれば、「reboot」時に必要になるので、「GENERIC boot」をあらかじめ用意しておきます。
今回、このマシンは、カーネルを変更していないので、このまま使えますが、変更しているのであれば、下記の手順を実行します。
「.iso」ファイルをダウンロードして、それをマウントするのが手っ取り早い。
カーネルさえあればいいので、「DVD」メディアでなく、「CD」メディアで十分。
ダウンロード。
mkdir -pv /tmp/disk
cd /tmp/disk
curl https://download.freebsd.org/ftp/releases/amd64/amd64/ISO-IMAGES/12.3/FreeBSD-12.3-RELEASE-amd64-disc1.iso --output FreeBSD-12.3-RELEASE-amd64-disc1.iso
マウント。
cd /tmp/disk
mdconfig -a -t vnode -f FreeBSD-12.3-RELEASE-amd64-disc1.iso -u -0
mount -t cd9660 -o ro /dev/md0 /mnt
「GENERIC boot」を抽出。
cd /mnt/usr/freebsd-dist/
tar -C/ -xvf kernel.txz boot/kernel/kernel
アンマウント。
cd
umount /mnt
mdconfig -d -u 0
とまぁ、ここまでは、いつものダウンロードと収集の手順。
今回、「VirtualBox」でやっており、「FreeBSD-12.3-RELEASE-amd64-dvd1.iso」を持っています。
こいつをマウントして使いましょう。
マウントの手順に関しては
「freebsdでのiso(ないしdvd ドライブ)のマウント方法。FuryBSD-12.1-XFCE-2020030701。」
を参考にさせていただきました。
「VirtualBox」の操作で、「デバイス」→「光学ドライブ」→「ディスクファイルを選択」で、対象の「FreeBSD-12.3-RELEASE-amd64-dvd1.iso」を選択します。
ここから、「FreeBSD」上の操作になります。
「root」ユーザ権限で。
camcontrol devlist
こんなんが出力されます。
<VBOX HARDDISK 1.0> at scbus0 target 0 lun 0 (pass0,ada0)
<VBOX CD-ROM 1.0> at scbus1 target 0 lun 0 (cd0,pass1)
マウント。
mount_cd9660 /dev/cd0 /mnt
「GENERIC boot」を抽出。
cd /mnt/usr/freebsd-dist/
tar -C/ -xvf kernel.txz boot/kernel/kernel
アンマウント。
cd
umount /mnt
イジェクトコマンド「eject」がないので、やり方がわからん。
「VirtualBox」の操作で、「仮想ドライブからディスクを除去」します。
4. バージョンアップ
バージョンアップ。
freebsd-update -r 13.1-RELEASE upgrade
Looking up update.FreeBSD.org mirrors... 2 mirrors found.
Fetching metadata signature for 12.3-RELEASE from update2.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/doc
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 で答えます。
以降、メッセージはなるべく省略して、入力が必要な個所のみ記述します。
これは、「/etc/mail/mailer.conf」をカスタマイズしている箇所のようです。
Enter 。
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...
中身が表示されたら、「sendmail」を「qmail」で「wrap」しているものだと分かりました。
更新している方を残しておくように、編集して書き込んで終了します。
「/etc/group」に関して
Does this look reasonable (y/n)?
ちゅうことですが、それは、そうですわな。
yEnter。
The following file will be removed, as it no longer exists in
FreeBSD 13.1-RELEASE: /etc/motd
Does this look reasonable (y/n)?
これは、「FreeBSD 13.0 RELEASE」より前は、「/etc/motd」だったものが「/etc/motd.template」に変わったからですな。
思い切って、nEnter。
と、ここで、終了しました。
n しちゃいけないのね。
本項の先頭からやり直しです。
同じように進んで、ここまできたら、yEnter。
以降、
Does this look reasonable (y/n)?
と聞かれるのが
/etc/rc.d/ntpd
nEnter で答えて、以降は
The following files are affected by updates. No changes have
been downloaded, however, because the files have been modified
locally:
/.cshrc
/root/.cshrc
(END)
「.cshrc」が、変わっちゃってるのね。
q を連打して、進行します。
このまま、下記を表示して終わっちゃいます。
To install the downloaded upgrades, run "/usr/sbin/freebsd-update install".
ってことで、インストール。
/usr/sbin/freebsd-update install
Installing updates...
Kernel updates have been installed. Please reboot and run
"/usr/sbin/freebsd-update install" again to finish installing updates.
再起動。
shutdown -r now
5. 再起動後
再起動後にログインしたときに、今回初めて気づいたのが、ログイン時のメッセージが
Last login: Thu Jun 2 17:52:41 2022
FreeBSD 13.1-RELEASE releng/13.1-n250148-fc952ac2212 GENERIC
となっておる。
なるほど、中途半端な状態にいることがわかります。
再度。
/usr/sbin/freebsd-update install
この下のメッセージの途中は、えらく時間がかかるのです。
また、その間は、どういう仕掛けか、リモートログインできないことがわかりました。
そりゃそうだよね、この状態でリモートログインして、何かファイルを変更されちゃ困りますものね。
Installing updates...Scanning //usr/share/certs/blacklisted 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 11.4 RELEASE」→「FreeBSD 12.2 RELEASE」のときの経験を踏まえて。
git -C /usr/ports pull
portsdb -Fu
pkg version -vl "<"
して、アップグレードが必要なものをまず、個別にアップグレードしていきます。
まぁ、これは、アップグレード前の状態にもよりますが、場合によっては1日では終らないことがることも覚悟しなければならない。
portsdb -Fu
のところで
pkg-static: Warning: Major OS version upgrade detected. Running "pkg bootstrap -f" recommended
Fetching the ports index ... pkg-static: Warning: Major OS version upgrade detected. Running "pkg bootstrap -f" recommended
pkg-static: Warning: Major OS version upgrade detected. Running "pkg bootstrap -f" recommended
ちゅうのがいっぱいでます。
中心のメッセージをはさんで、前後に同じものが複数行あるのです。
まぁ、これがメジャーアップグレード故ということか・・・。
途中で気が付きましたが、最初に
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]:
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:13:amd64/quarterly, please wait...
てなメッセージが、表示されますな。
ここは、もちろん yEnter です。
途中、
autoconf-2.69_3 < needs updating (index has 2.69_4)
をアップグレードするところでは、エラーになりますが、「メンテナンス・トラブルシュート - pkg・ports - その他一般」を参考に更新します。
「ruby30」がインストールエラーになるときは
/usr/ports/lang/ruby30
make reinstall
すると今度は、「portupgrade」自体が動かなくなっちゃって、依存するものから順に。
cd /usr/ports/databases/ruby-bdb
make config
これは、「make」時に「/doc」のディレクトリがないからとエラーになるので「DOCS」のオプションをはずします。
cd /usr/ports/databases/ruby-bdb
make deinstall clean
make
make install
cd /usr/ports/ports-mgmt/portupgrade
make deinstall clean
make
make install
と、ここまでやって気づいた。
「pkg bootstrap -f」さえやっておけば、「/usr/sbin/freebsd-update install」が通るんじゃねぇかな?
やってみるす。
/usr/sbin/freebsd-update install
これで、通ったっぽいのです。
Creating snapshot of existing boot environment... done.
Installing updates... done.
うむ、
$ uname -a
FreeBSD ns.vm.sing.ne.jp 13.1-RELEASE FreeBSD 13.1-RELEASE releng/13.1-n250148-fc952ac2212 GENERIC amd64
どうも、「13.1-RELEASE-p0 FreeBSD 13.1-RELEASE-p0」でなく「FreeBSD 13.1-RELEASE releng/13.1-n250148-fc952ac2212」が正式名のようです。
「FreeBSD 13.1-RELEASE」をクリーンインストールしたものもそういう名称でした。
ちょっと気持ち悪い名前だけど、仕方ないですね。
う~ん、今回、ちょっと手順を失敗したなぁ。
「ports」も一度、全部更新してから「freebsd-update」するべきでした。
もう一回、やってみるか。