gentoo の systemd をアップデートする
結論から言うと、systemd をアップデートする前に kernel をアップデートしておきましょう、というお話です。
なにも考えずにアップデートすると
うちの環境だと、こんな感じで 226-r2 から 233-r1 へのアップデートになります。
# emerge -pv systemd These are the packages that would be merged, in order: Calculating dependencies... done! [ebuild U ] sys-libs/libseccomp-2.3.2::gentoo [2.3.0::gentoo] USE="-static-libs" ABI_X86="(64) -32 (-x32)" 0 KiB [ebuild U ] sys-apps/systemd-233-r1:0/2::gentoo [226-r2:0/2::gentoo] USE="acl gcrypt* kmod lz4 pam seccomp ssl (-apparmor) -audit -build -cryptsetup -curl -doc% -elfutils -gnuefi -http -idn -importd -lzma -nat -policykit -qrcode (-selinux) -sysv-utils {-test} -vanilla -xkb (-kdbus%*)" ABI_X86="(64) -32 (-x32)" 0 KiB Total: 2 packages (2 upgrades), Size of downloads: 0 KiB
で、このアップデートをなにも考えずに当てると、こんなポストメッセージが表示されます。
* Messages for package sys-apps/systemd-233-r1: * CONFIG_CRYPTO_USER_API_HASH: is not set when it should be. * Please check to make sure these options are set correctly. * Failure to do so may cause unexpected problems.
kernel のコンフィグ
言われたとおりに kernel のコンフィグいじって make しなおしても良いのですが、このコンフィグどうやら gentoo-sources-4.9.16 だとデフォルトで y
になるようです。
Symbol: CRYPTO_USER_API_HASH [=y] Type : tristate Prompt: User-space interface for hash algorithms Location: (1) -> Cryptographic API (CRYPTO [=y]) Defined at crypto/Kconfig:1671 Depends on: CRYPTO [=y] && NET [=y] Selects: CRYPTO_HASH [=y] && CRYPTO_USER_API [=y] Selected by: GENTOO_LINUX_INIT_SYSTEMD [=y] && GENTOO_LINUX [=y] && GENTOO_LINUX_UDEV [=y]
うちの環境は特にアップデートする必要性も感じなかったので gentoo-sources-4.9.6-r1 のままなんですが……
# eselect kernel list Available kernel symlink targets: [1] linux-4.4.39-gentoo [2] linux-4.9.6-gentoo-r1 * [3] linux-4.9.16-gentoo # uname -r 4.9.6-gentoo-r1.20170205.01
まぁどうせ kernel のビルドするなら、新しいバージョンを使いましょう。
kernel をビルドする
というわけで kernel のビルド自体は gentoo なら日常です。この wiki でも記事にしてあります。
ビルドの準備
まず現行の kernel の .config をコピーします。
# cd /usr/src # cp linux/.config linux-4.9.16-gentoo/
それから /usr/src/linux
の symlink を張り直します。別に rm
と ln
でやっても問題はないんですが、まぁ便利なツール eselect
が用意されているのでそれを使いましょう。
# eselect kernel list Available kernel symlink targets: [1] linux-4.4.39-gentoo [2] linux-4.9.6-gentoo-r1 * [3] linux-4.9.16-gentoo # eselect kernel set 3 # eselect kernel list Available kernel symlink targets: [1] linux-4.4.39-gentoo [2] linux-4.9.6-gentoo-r1 [3] linux-4.9.16-gentoo *
こんな感じで。
# ls -l /usr/src/linux lrwxrwxrwx 1 root root 19 May 7 13:04 /usr/src/linux -> linux-4.9.16-gentoo
ちゃんと symlink が張り直されてます。
コンフィグ
特に変更の必要がなくても、いちど menuconfig
で開いて、新しいバージョンの kernel コンフィグを反映させた上で保存します。
# cd /usr/src/linux # make menuconfig
ちなみに一応確認しておきます。/
で検索モードに切り替えて CRYPTO_USER_API_HASH
を検索します。
Symbol: CRYPTO_USER_API_HASH [=y] Type : tristate Prompt: User-space interface for hash algorithms Location: (1) -> Cryptographic API (CRYPTO [=y]) Defined at crypto/Kconfig:1671 Depends on: CRYPTO [=y] && NET [=y] Selects: CRYPTO_HASH [=y] && CRYPTO_USER_API [=y] Selected by: GENTOO_LINUX_INIT_SYSTEMD [=y] && GENTOO_LINUX [=y] && GENTOO_LINUX_UDEV [=y]
ちゃんと [=y]
になってます。保存して menuconfig
を終了したら、念のため……
# grep 'CRYPTO_USER_API_HASH' ./.config CONFIG_CRYPTO_USER_API_HASH=y
大丈夫ですね。
ビルド
あとはいつもどおりの手順です。
# cd /usr/src/linux # make -j5 && make modules_install # mount /boot # cp /usr/src/linux/arch/x86_64/boot/bzImage /boot/kernel-4.9.16-gentoo-host.20170507.01 # grub-mkconfig -o /boot/grub/grub.cfg # systemctl reboot
無事に再起動が完了したら……
# uname -r 4.9.16-gentoo-host.20170507.01
systemd の emerge
というわけで、systemd のアップデートは下準備として以上のような作業が必要になるようです。もちろん元々 CONFIG_CRYPTO_USER_API_HASH
が [=y]
になっているなら、なにも考えずに emerge
してもおっけーですね。
# emerge -av systemd