FreeBSD/arm 13.2: OSのソースレベルメンテナンス

Tier2 プラットフォームの FreeBSD、もし、OSにセキュリティー脆弱性が見つかった時、freebsd-update コマンドでソースをアップデートした後、OSをソースからビルドし直して更新と思っていたのですが違うみたい!

64bit Arm7+ が Tier1 に昇格し、AMD64同様バイナリーメンテナンス対象となりました。 逆に 32bit Intel CPU i386 や Arm6, 7(32bit) が FreeBSD13.x 以降、Tier2に後退。OSのバイナリーアップデートが終了。セキュリティレポートに脆弱性が含まれている時、/usr/src 下でカーネルをビルドし直し、インストールすればいいだけだと思っていました。FreeBSD 1.x ~ 4.x では、よくやっていた作業なので、特に気にならない。

今年に入って、私が管理していた 32bit FreeBSD が次々と引退し、一部はクラウドに移行、一部は引っ越してサーバー撤去と、ホストが減るのは残念ですが管理は楽になりました。

残りは 64bit FreeBSD なので、freebsd-update コマンドでメンテナンス可能。ではなぜソースメンテナンスしなくちゃいけないか?というと、すべてMySQL5.7が終了することに端を発している。

MySQL8.0.33 が FreeBSD/aarch64 で動かない。しかし、FreeBSD/arm 32bit では動く。FreeBSD/arm を使いたいなら、ソースメンテナンスしないといけない。運用するかどうかは別として、今後 32bit FreeBSD を使うとどういうことが必要なのかは試して知っておきたい。

私は、freebsd-update コマンドで、ソースだけメンテナンスして、あとは /usr/src 下で make を使ったビルドをすればいいだけだと思っていました。

ところが、、、、

root@rpi2:/usr/src # freebsd-update fetch
Looking up update.FreeBSD.org mirrors... 2 mirrors found.
Fetching public key from update2.freebsd.org... failed.
Fetching public key from update1.freebsd.org... failed.
No mirrors remaining, giving up.

This may be because upgrading from this platform (arm)
or release (13.2-RELEASE) is unsupported by freebsd-update. Only
platforms with Tier 1 support can be upgraded by freebsd-update.
See https://www.freebsd.org/platforms/ for more info.

If unsupported, FreeBSD must be upgraded by source.

freebsd-update では、ソースさえダウンロードできない。差分メンテナンスできない!ソース自体は、freebsd.org ftp ミラーサイトからダウンロードして展開できるんだけど、ここからビルドして、セキュリティ更新したとして、次の脆弱性が見つかった時どうすればソースコードを更新出来るの?ソースをインストールして /usr/src/Makefile のコメント文を読んでみてもわからない。

ソースベースのOS管理って、今はどうなってんの?
困った時は本家のドキュメントを見るのが一番。

第16章 FreeBSD のアップデートとアップグレード」に書かれていることをよく読めばできそう。ってことがわかり、やってみました。

ソース管理は、freebsd-update コマンドじゃなくて、 git を使えってことのようです。git コマンドはデフォルトでは入っていないので、pkg コマンドでインストール。あとは、git clone でソースをダウンロードという風に書かれています。

  1. “pkg install git” で git 関連のパッケージをダウンロードする。
  2. cd /usr/src
    git clone --branch releng/13.2 https://git.freebsd.org/src.git /usr/src

    で、ソースをダウンロードする。ちなみに、–branch オプションに続くパラメータを変更する事で、current や stable 版のソースに切り替えられる。私の場合は releng/13.2 となりました。

ここまでは、ただソースを取ってきただけ。この後で、タイムリーにソースをアップデートしていかないといけません。そのためにはどうすればいい?説明ページには、 git pull って紹介されていますけど、やってみたらエラー。しかも fatal。なんだよ~。

root@rpi2:/usr/src # git pull
fatal: not a git repository (or any of the parent directories): .git

オンラインヘルプを見てみたら、init というオプションがある。(上記URLのページには書かれていない)

start a working area (see also: git help tutorial)
  clone Clone a repository into a new directory
  init Create an empty Git repository or reinitialize an existing one

試してみたところ、これ以降、git コマンドが結果を返してくれるようになりました。

root@rpi2:/usr/src # git init
Reinitialized existing Git repository in /usr/src/.git/
root@rpi2:/usr/src # git remote --v
origin https://git.freebsd.org/src.git (fetch)
origin https://git.freebsd.org/src.git (push)

git init すれば使えるのようになるんだったら、freebsd の ftp サイトからダウンロードしたディレクトリーでもいいじゃない?と/usr/src を戻して試してみたところ、こっちはダメみたい。

oot@rpi2:/usr/src # git init
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint:   git config --global init.defaultBranch 
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint:   git branch -m 
Initialized empty Git repository in /usr/src/.git/

まあ、src ディレクトリのファイルサイズも全然違うから、素直に git からダウンロードしたコンテンツを使うことにします。

ソースのアップデートは、pull オプションのようです。

root@rpi2:/usr/src # git pull
Already up to date.

作業直後に行ってもソースは最新なので、何も起きませんでしたけどね。

ということで、タイトルの「どうやってOSソースメンテナンスするの?」の答えは、「ports から “git” をインストールして使う。」のようです。

次の課題は、OSのマイナーバージョンアップとメジャーバージョンアップ。パッチレベルじゃなくて、バイナリーが供給されるバージョンアップの時どうすればいいのか?この時、freebsd-update が動くならいいのだけど、バイナリーがあるのにソースからビルドしないと、更新されたファイルを残したままアップデートできないとなると厳しい。特に /etc や /var。素の FreeBSD 13.3や13.4 をインストールした後、コンテンツをチマチマ手動コピーするなんて考えたくない。

コメントを残す