{{tag>gentoo linux}} # 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 でも[記事にしてあります](https://manimani.cc/wiki/linux/compile_kernel)。 ### ビルドの準備 まず現行の 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 ```