超簡単! FreeBSD STABLE を RELEASE に アップグレードする方法
カテゴリー: General
2021-02-26
超簡単! FreeBSD STABLE を RELEASE に アップグレードする方法
開発環境のFreeBSD を久しぶりに起動して更新すると
何やら変なメッセージが表示されました。
調べるとどうやら、開発ブランチと知らずに、SATBLEのisoファイルからOSをインストールしていたようです。
ググるとアップグレードするには、/srcからbuildしないといけないとかアホなこと書いているのが多かったので、
アップグレードプログラムの検証部分を書き換えれば更新できるでしょう!!
ということで
とりあえず freebsd-updateを開くと、テキスト(スクリプト)ファイルではありませんか(⌒∇⌒)
問題の部分は unameで検証しているだけでした。 結論から言うと 「uname偽装」だけで解決します。
細かいことを書くととても長くなるで 機械的な手順だけまとめておきます
このアップグレード作業には数時間かかります。
アップグレードの途中で、/etcなどの設定ファイルの手動マージのお願い(数十個)が表示されるためです。
まとめ
手順をみていきましょう
(1)unameの名称変更をしましょう
名称変更したオリジナルが動作するか確認します
(2)/usr/bin/uname を置き換えます
※ アップグレード完了後に/usr/bin/unameは新しいバイナリファイルに置き換わっていましたので、あまり気にする必要はないです。
保存ファイル名 /usr/bin/uname
編集コマンド例 sudo nano /usr/bin/uname
適当なエディタで開いて下記の内容を記入してください
実行権限を付与します。
偽装できているか確認します。結果にRELEASE がない場合は失敗しています。
偽装前
$ uname -a
FreeBSD freebsd.localdomain 11.2-STABLE FreeBSD 11.2-STABLE #0 r346333: ...
偽装後
$ uname -a
FreeBSD freebsd.localdomain 11.2-RELEASE FreeBSD 11.2-RELEASE #0 r346333: ...
これで、正常にアップグレードする準備は整いました。
(3)FreeBSDアップグレードを実行する(その1)
Fetching 9510 files... で 途中止まったように見えます。
途中で手動マージを要求してくるのでリターンして編集にはいります。
The following file could not be merged automatically: /etc/crontab
Press Enter to edit this file in vi and resolve the conflicts
manually...
以下のように表示されている部分を探し、不要な行を削除してください
viという使い勝手の悪いエディタが開くので
(1)<<<<を検索 (2) 不要な行を削除 (3) <<< を検索し、なければ、保存 (4) 変更を保存
の流れ作業です。
viのコマンド
例:編集前
<<<<<<< current version
# $FreeBSD: stable/11/etc/crontab 342103 2018-12-14 21:30:34Z imp $
=======
# $FreeBSD: releng/11.4/etc/crontab 342103 2018-12-14 21:30:34Z imp $
>>>>>>> 11.4-RELEASE
例:編集後
# $FreeBSD: releng/11.4/etc/crontab 342103 2018-12-14 21:30:34Z imp $
カーネルの更新
再起動する
(4)FreeBSDアップグレードを実行する(その2)
(5)FreeBSDアップグレードを実行する(その3)
パスワードファイルの更新(その1)
パスワードファイルの更新(その2)
パスワードファイルの更新(その3)
* エラー: login_getclass unknown class グループ名
の場合は、/etc/login.conf にグループのルールがないためエラーになっている。
標準でよければ、追加して上記 cap_mkdb を実行すれば解決する
(6)再起動して新しいシステムを立ち上げる
(7)pkgを更新する
必ず、-f オプションを入れて強制アップデートすること
(8)ソフトウェアを最新の状態に更新する
(9)キャッシュをクリアして、アップグレード完了です。
お疲れ様でした🐶
最後に
うまくいかない場合は、時間がもったいないので、別マシンを用意して OSを新規インストールして、グループ、ユーザー、データを そのまま移行したほうが時間的に早いかもしれない。日ごろから移行を意識したデータ配置が重要。
参考サイト
How to FreeBSD STABLE UPGRADE
FreeBSD STABLE UPGRADE 11.2 to 11.4
執筆:2021.02.26
編集:2021.02.26
編集:2021.02.26
開発環境のFreeBSD を久しぶりに起動して更新すると
何やら変なメッセージが表示されました。
#freebsd-update upgrade -r 11.4-RELEASE
src component not installed, skipped
freebsd-update: Cannot upgrade from a version that is not a release
(including alpha, beta and release candidates)
using freebsd-update. Instead, FreeBSD can be directly
upgraded by source or upgraded to a RELEASE/RELENG version
prior to running freebsd-update.
src component not installed, skipped
freebsd-update: Cannot upgrade from a version that is not a release
(including alpha, beta and release candidates)
using freebsd-update. Instead, FreeBSD can be directly
upgraded by source or upgraded to a RELEASE/RELENG version
prior to running freebsd-update.
調べるとどうやら、開発ブランチと知らずに、SATBLEのisoファイルからOSをインストールしていたようです。
$ uname -a
FreeBSD freebsd.localdomain 11.2-STABLE FreeBSD 11.2-STABLE #0 r346333: Thu Apr 18 02:35:43 UTC 2019 root@releng2.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64
FreeBSD freebsd.localdomain 11.2-STABLE FreeBSD 11.2-STABLE #0 r346333: Thu Apr 18 02:35:43 UTC 2019 root@releng2.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64
ググるとアップグレードするには、/srcからbuildしないといけないとかアホなこと書いているのが多かったので、
アップグレードプログラムの検証部分を書き換えれば更新できるでしょう!!
ということで
とりあえず freebsd-updateを開くと、テキスト(スクリプト)ファイルではありませんか(⌒∇⌒)
問題の部分は unameで検証しているだけでした。 結論から言うと 「uname偽装」だけで解決します。
細かいことを書くととても長くなるで 機械的な手順だけまとめておきます
このアップグレード作業には数時間かかります。
アップグレードの途中で、/etcなどの設定ファイルの手動マージのお願い(数十個)が表示されるためです。
まとめ
手順をみていきましょう
(1)unameの名称変更をしましょう
sudo mv /usr/bin/uname /usr/bin/uname.original
名称変更したオリジナルが動作するか確認します
/usr/bin/uname.original -a
(2)/usr/bin/uname を置き換えます
※ アップグレード完了後に/usr/bin/unameは新しいバイナリファイルに置き換わっていましたので、あまり気にする必要はないです。
保存ファイル名 /usr/bin/uname
編集コマンド例 sudo nano /usr/bin/uname
適当なエディタで開いて下記の内容を記入してください
#!/bin/sh
/usr/bin/uname.original $* | sed 's/STABLE/RELEASE/g'
/usr/bin/uname.original $* | sed 's/STABLE/RELEASE/g'
実行権限を付与します。
$ sudo chmod +x /usr/bin/uname
偽装できているか確認します。結果にRELEASE がない場合は失敗しています。
$ /usr/bin/uname -a
偽装前
$ uname -a
FreeBSD freebsd.localdomain 11.2-STABLE FreeBSD 11.2-STABLE #0 r346333: ...
偽装後
$ uname -a
FreeBSD freebsd.localdomain 11.2-RELEASE FreeBSD 11.2-RELEASE #0 r346333: ...
これで、正常にアップグレードする準備は整いました。
ここから先は時間がかかります。
また進行が表示されないため、途中で止まったように見えますので気長に待つ必要があります
また進行が表示されないため、途中で止まったように見えますので気長に待つ必要があります
数十分~1時間 「対話あり」 |
freebsd-update -r 11.4-RELEASE upgrade |
数時間「対話あり」 | freebsd-update install |
数十分~1時間 | その他の作業 |
(3)FreeBSDアップグレードを実行する(その1)
Fetching 9510 files... で 途中止まったように見えます。
# sudo freebsd-update -r 11.4-RELEASE upgrade
途中で手動マージを要求してくるのでリターンして編集にはいります。
The following file could not be merged automatically: /etc/crontab
Press Enter to edit this file in vi and resolve the conflicts
manually...
以下のように表示されている部分を探し、不要な行を削除してください
削除 | <<<<<<< current version |
削除 | 変更前の内容 |
削除 | ======= |
残す内容 | 変更後の内容 |
削除 | >>>>>>> 11.4-RELEASE |
viという使い勝手の悪いエディタが開くので
(1)<<<<を検索 (2) 不要な行を削除 (3) <<< を検索し、なければ、保存 (4) 変更を保存
の流れ作業です。
viのコマンド
検索 | /<<<< |
カーソル行削除 | dd |
変更を保存 | :wq |
キーボード設定が106になっていない場合は 文字 : は Shiftキー + [+;れ] キー です |
例:編集前
<<<<<<< current version
# $FreeBSD: stable/11/etc/crontab 342103 2018-12-14 21:30:34Z imp $
=======
# $FreeBSD: releng/11.4/etc/crontab 342103 2018-12-14 21:30:34Z imp $
>>>>>>> 11.4-RELEASE
例:編集後
# $FreeBSD: releng/11.4/etc/crontab 342103 2018-12-14 21:30:34Z imp $
カーネルの更新
# nextboot -k GENERIC
再起動する
# shutdown -r now
(4)FreeBSDアップグレードを実行する(その2)
# /usr/sbin/freebsd-update install
(5)FreeBSDアップグレードを実行する(その3)
パスワードファイルの更新(その1)
# pwd_mkdb /etc/master.passwd
パスワードファイルの更新(その2)
# pwd_mkdb -p /etc/master.passwd
パスワードファイルの更新(その3)
# cap_mkdb /etc/login.conf
* エラー: login_getclass unknown class グループ名
の場合は、/etc/login.conf にグループのルールがないためエラーになっている。
標準でよければ、追加して上記 cap_mkdb を実行すれば解決する
グループ名:\
:tc=default:
:tc=default:
(6)再起動して新しいシステムを立ち上げる
# reboot
(7)pkgを更新する
必ず、-f オプションを入れて強制アップデートすること
$ sudo pkg update -f
(8)ソフトウェアを最新の状態に更新する
$ sudo pkg-static upgrade -fy
$ sudo pkg upgrade
(9)キャッシュをクリアして、アップグレード完了です。
$ sudo pkg clean
お疲れ様でした🐶
最後に
うまくいかない場合は、時間がもったいないので、別マシンを用意して OSを新規インストールして、グループ、ユーザー、データを そのまま移行したほうが時間的に早いかもしれない。日ごろから移行を意識したデータ配置が重要。
参考サイト
- 第17章 FreeBSD のアップデートとアップグレード
17.2. FreeBSD Update
How to FreeBSD STABLE UPGRADE
FreeBSD STABLE UPGRADE 11.2 to 11.4