NetBSD 7.0
8.0
6.1.5P
で動かしていたPC(i386やamd64など)を
sysupgradeで9.1
へアップデートしたときのメモでしたが、9.3
へアップデートを行う際にダウンロード先など見直しを行いました。
下記はrootでの実行例です。
必要に応じてsudoなどつけて実行してください。
sysupgrade インストール
# cd /usr/pkgsrc/sysutils/sysupgrade/ ; make install
sysupgrade 設定
RELEASEDIR
を下記のような感じで編集するだけで大丈夫です。
i386
の場合はARCHIVE_EXTENSION
をtgz
にする必要があるようです。
# vi /usr/pkg/etc/sysupgrade.conf
RELEASEDIR="https://cdn.NetBSD.org/pub/NetBSD/NetBSD-9.3/$(uname -m)"
以前はftp://ftp.NetBSD.orgを利用していたのですが速度が遅いので変更です。
==> i386の場合は下記の設定も
ARCHIVE_EXTENSION=tgz
sysupgrade で OS をアップデート
sysupgrade auto
にて一発アップデートが可能ですが、
カーネルとユーザランドの更新を同時におこなうため、不具合が起きることがあります。
そのため、modulesとkernelのアップデート後、再起動をおこない、新しいカーネルで
立ち上がることを確認後、ユーザランドを更新する手順でアップデートを行います。
# sysupgrade fetch
sysupgrade: I: Downloading ftp://ftp6.jp.NetBSD.org/pub/NetBSD/NetBSD-9.1/amd64/binary/sets/base.tar.xz into /var/cache/sysupgrade
Trying [2001:240:bb8f:f::10]:21 ...
ftp: Can't connect to `2001:240:bb8f:f::10:21': No route to host
Trying 202.232.140.10:21 ...
Connected to ftp.iij.ad.jp.
....(途中省略)
==> sysupgrade: Command not found. って出ちゃう人は rehash 後にもう一度実行してみてください。
# rehash
# sysupgrade fetch
# sysupgrade modules
sysupgrade: I: Upgrading kernel modules
sysupgrade: I: Extracting modules into /
100% |********************| 8263 KiB 1.11 MiB/s 00:00 ETA
# sysupgrade kernel
sysupgrade: I: Upgrading kernel using GENERIC in /
sysupgrade: I: Backing up 'netbsd' kernel as 'onetbsd'
古いカーネルは/onetbsd
にバックアップが取られる。
# reboot
# sysupgrade sets
sysupgrade: I: Upgrading base system
sysupgrade: I: Extracting base into /
100% |********************| 41264 KiB 1.07 MiB/s 00:00 ETA
sysupgrade: I: Extracting comp into /
100% |********************| 59332 KiB 435.85 KiB/s 00:00 ETA
sysupgrade: I: Extracting games into /
100% |********************| 2488 KiB 863.82 KiB/s 00:00 ETA
sysupgrade: I: Extracting man into /
100% |********************| 7125 KiB 144.02 KiB/s 00:00 ETA
sysupgrade: I: Extracting misc into /
100% |********************| 4133 KiB 786.05 KiB/s 00:00 ETA
sysupgrade: I: Extracting tests into /
100% |********************| 7202 KiB 310.94 KiB/s 00:00 ETA
sysupgrade: I: Extracting text into /
100% |********************| 1865 KiB 344.38 KiB/s 00:00 ETA
# sysupgrade etcupdate
下記のような差分を確認する画面が出るので確認して次の画面に進みます。
--- /boot.cfg 2012-03-29 03:03:36.000000000 +0900
+++ /tmp/temproot/boot.cfg 2022-08-05 00:30:37.000000000 +0900
@@ -1,7 +1,5 @@
-menu=Boot normally:rndseed /var/db/entropy-file;boot netbsd
-menu=Boot single user:rndseed /var/db/entropy-file;boot netbsd -s
-menu=Disable ACPI:rndseed /var/db/entropy-file;boot netbsd -2
-menu=Disable ACPI and SMP:rndseed /var/db/entropy-file;boot netbsd -12
+menu=Boot normally:rndseed /var/db/entropy-file;boot
+menu=Boot single user:rndseed /var/db/entropy-file;boot -s
menu=Drop to boot prompt:prompt
default=1
timeout=5
(END)
差分の確認したら下記のような画面で d 何もしないのか
i 上書きするのか
m マージするのか
(意訳)などなど出るのでいい感じにする。
もう一度、先ほどの差分を見たい場合は v
で確認できます。
File: /boot.cfg (modified)
Please select one of the following operations:
d Don't install the new file (keep your old file)
i Install the new file (overwrites your local modifications!)
m Merge the currently installed and new files
s Show the differences between the currently installed and new files
su Show differences in unified format ("diff -u")
sc Show differences in context format ("diff -c")
ss Show differences side by side ("sdiff -w81")
scommand Show differences using the specified diff-like command
v Show the new file
What do you want to do? [Leave it for later]
全て終わると下記のような感じでtemprootを削除するかどうか聞かれます。
普通はいらないと思います。
Remove /tmp/temproot? (y/[n])
上記の回答が終わると自動でpostinstallが始まります。
*** Running /usr/sbin/postinstall
問題が起きると下記のようになるので対応します。
エラーになった原因の対応が終わったら To fix, run:
に提示してある postinstall
コマンドを実行し、failedがなくなれば完了です。
obsolete check:
Remove obsolete directory /var/lock
postinstall checks passed: bluetooth ddbonpanic defaults dhcpcd dhcpcdrundir envsys fontconfig gid gpio hosts iscsi makedev motd named pam periodic pf pwd_mkdb ssh wscons x11 xkb uid varrwho tcpdumpchroot atf catpages manconf ptyfsoldnodes varshm
postinstall checks failed: mtree rc obsolete
To fix, run:
sh /usr/sbin/postinstall -s /var/cache/sysupgrade/etc.tar.xz -d / fix mtree rc obsolete
Note that this may overwrite local changes.
*** All done
上記の問題の対応例
# rm -fr /var/lock/
# sh /usr/sbin/postinstall -s /var/cache/sysupgrade/etc.tar.xz -d / fix mtree rc obsolete
Note: Creating temporary directory /tmp/_postinstall.7323.0/etc.tgz
Note: Extracting files from /var/cache/sysupgrade/etc.tar.xz
Source directory: /tmp/_postinstall.7323.0/etc.tgz
(extracted from: /var/cache/sysupgrade/etc.tar.xz)
Target directory: /
mtree fix:
Copied /tmp/_postinstall.7323.0/etc.tgz/etc/mtree/special to /etc/mtree/special
rc fix:
Copied /tmp/_postinstall.7323.0/etc.tgz/etc/rc.d/ntpd to /etc/rc.d/ntpd
Copied /tmp/_postinstall.7323.0/etc.tgz/etc/rc.d/ntpdate to /etc/rc.d/ntpdate
Copied /tmp/_postinstall.7323.0/etc.tgz/etc/rc.d/postfix to /etc/rc.d/postfix
Copied /tmp/_postinstall.7323.0/etc.tgz/etc/rc.d/sshd to /etc/rc.d/sshd
(Checking for blacklistd from /tmp/_postinstall.7323.0/etc.tgz/etc/rc.d instead of /tmp/_postinstall.7323.0/etc.tgz/external/bsd/blacklist/etc/rc.d)
obsolete fix:
Removed obsolete directory /var/lock
postinstall fixes passed: mtree rc obsolete
postinstall fixes failed:
最後にアップデートするためにダウンロード(fetch)したkenrelなど一式を削除します。
# sysupgrade clean
sysupgrade: I: Cleaning downloaded files
以上、お疲れさまでした。
Tips
最近のamd64
はパッケージがtar.zx
で圧縮されているのですが
OS付属のbsdtar
が古すぎるとオプションで[J]
がサポートされておらず
sysupgrade
途中でコケることがあります。
そのような場合はpkgsrc
でbsdtar
を入れて/bin/tar
を上書きして回避しています。
# sysupgrade module
sysupgrade: I: Upgrading kernel modules
sysupgrade: I: Extracting modules into /
tar: unknown option -- J
usage: tar [-]{crtux}[-befhjklmopqvwzHOPSXZ014578] [archive] [blocksize]
[-C directory] [-T file] [-s replstr] [file ...]
# cd /usr/pkgsrc/archivers/bsdtar ; make install
# cp -p /usr/pkg/bin/bsdtar /bin/tar