freebsd-update - 12.3 RELEASE → 13.1 RELEASE - 仮想環境で実験

クラウディア 
1. 概要
2. パッチをあてる
3. GENERIC boot を用意しておく
4. バージョンアップ
5. 再起動後

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...

・・・	略	・・・

 Spaceq で進めていきます。  アップデート。

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」を選択します。
「VirtualBox」-「デバイス」→「光学ドライブ」→「ディスクファイルを選択」

 ここから、「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」するべきでした。  もう一回、やってみるか。
ハイスピードプランStar Naming GiftそれがだいじWi-Fiメンズミレット健康サポート特集【usus ウズウズ】