日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
2024年11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

超簡単! FreeBSD STABLE を RELEASE に アップグレードする方法

カテゴリー: General
2021-02-26
超簡単! FreeBSD STABLE を RELEASE に アップグレードする方法

執筆: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.

調べるとどうやら、開発ブランチと知らずに、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

ググるとアップグレードするには、/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'

実行権限を付与します。
$ 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:

(6)再起動して新しいシステムを立ち上げる
# reboot

(7)pkgを更新する

必ず、-f オプションを入れて強制アップデートすること
$ sudo pkg update -f

(8)ソフトウェアを最新の状態に更新する
$ sudo pkg-static upgrade -fy

$ sudo pkg upgrade

(9)キャッシュをクリアして、アップグレード完了です。
$ sudo pkg clean


お疲れ様でした🐶


最後に

うまくいかない場合は、時間がもったいないので、別マシンを用意して OSを新規インストールして、グループ、ユーザー、データを そのまま移行したほうが時間的に早いかもしれない。日ごろから移行を意識したデータ配置が重要。

参考サイト

How to FreeBSD STABLE UPGRADE
FreeBSD STABLE UPGRADE 11.2 to 11.4


PR

[PR]