まもなくopenSUSE Leap 16.0がリリースされますが、サーバをLeap 15.6からLeap 16.0 RCに先にアップデートして色々はまったので、記録しておきます。
PPPoEの接続ができなくなった
パッケージがアップデートされて、ppp 2.5.2になったときに、rp-pppoe.soがなくなったみたいです。
そのため、/etc/sysconfig/network/ifcfg-ppp0
で設定をしてpppoe.service
をsystemdで使用すると、サービスが起動しなくなりました。
色々試してみたんですが、結局rp-pppoeが何なのかがよくわからなかったので、pppdを直接叩くようにしました。
まずは/etc/ppp/peers/isp
みたいに/etc/ppp/peers/
の下に以下のようなファイルを作ります。
plugin pppoe.so
eth0
name "hoge@example.com"
usepeerdns
persist
defaultroute
hide-password
noauth
二行目の”eth0″はPPPoEに使用するネットワークデバイス名です。
“name”はPPPoEのユーザ名です。パスワードは/etc/ppp/chap-secrets
なり、/etc/ppp/pap-secrets
に書いてください。
MTUなどは/etc/ppp/options
で設定します。
この状態で、sudo pppd call isp
という風にpppdを叩くとppp0が作成されているはずです。これで、PPPoEを介して通信ができます。
後はpppdが起動時に動くようにsystemdのサービスファイルを作成します。
[Unit]
Description=PPPoE
After=network.target
[Service]
Group=dialout
Type=simple
ExecStart=/usr/sbin/pppd call isp
Restart=always
[Install]
WantedBy=multi-user.target
上のファイルを/etc/systemd/system/pppoe-isp.service
とでも保存し、sudo systemctl enable --now pppoe-isp
とすれば完了です。
rp-pppoeはsudo zypper rm -u rp-pppoe
で削除しました。
systemd-bootとSecure Boot
openSUSE Leap 16.0からはブートローダとしてsystemd-bootが使えるようになりました。(Tumbleweedでは前からできてました。)
基本的にはhttps://en.opensuse.org/Systemd-bootを見てやれば環境は整います。
まずはGRUB2を全てアンインストールして/boot/
以下を全て吹き飛ばします(いいんか?)。
以下のコマンドでおそらく起動に必要なファイルは整うはずです。
sudo zypper in sdbootutil-kernel-install sdbootutil-enroll sdbootutil-rpm-scriptlets
sudo bootctl --make-machine-id-directory=yes install --esp-path=/boot/efi
sudo sdbootutil install
sudo sdbootutil add-all-kernels
ところが、この状態ではセキュアブートができません。
shimをいれる必要があるのですが、Leapのリポジトリには無いので以下のようにしてTumblweed向けのrpmを突っ込みます。バージョンは上がってるかもしれません。
sudo wget https://download.opensuse.org/repositories/openSUSE:/Factory/standard/x86_64/shim-15.8-4.1.x86_64.rpm
sudo rpm -i shim-15.8-4.1.x86_64.rpm
次にshim.efi
などを/boot/efi/EFI/systemd/
以下に持ってきます。また、shimはペイロードとしてgrub.efi
しか認識しないようなので、systemd-bootx64.efi
をコピーします。
この操作はsystemd-bootのパッケージがアップデートされる度に必要かもしれません。また、ブートマネージャにshim.efi
を登録します。
sudo cp /usr/share/efi/x86_64/* /boot/efi/EFI/systemd/
sudo cp /boot/efi/EFI/systemd/systemd-bootx64.efi /boot/efi/EFI/systemd/grub.efi
sudo efibootmgr -c -L "Secure Boot" -l "\EFI\systemd\shim.efi"
これで起動すると良いんですが、残念ながら署名検証に失敗して固まります。ここですごく詰まりました。
TumblweedのMokManagerはTumblweedのKernelの署名は入っているんですが、LeapのKernelの署名は持っていません。
そのためインポートする必要があります。LeapのKernelはSUSEの鍵で署名されているのでこれを登録します。
https://www.suse.com/ja-jp/support/security/keysの”SUSE Secure Boot Signing Certificate Authority (2048 bit RSA)”以下のPEMをコピーして、kernel.pem
などとして保存します。また、このままではMokManagerが認識できないのでDER形式に変換します。
これをMokManagerに登録します。パスワードが聞かれますが再起動時にMokManagerで照合するためのものなので、何でも良いですが覚えておいてください。
念のためにEFIパーティションの中に証明書をコピーしておきます。
vim kernel.pem # Paste the key
openssl x509 -outform der -in kernel.pem -out kernel.crt
sudo mokutil --import kernel.crt
sudo cp kernel.crt /boot/efi/loader/keys/
これで再起動すると、MokManagerが起動し”Enroll MOK”という選択肢があるはずなので選択し、先程入力したパスワードを設定します。
これでセキュアブートで起動できるようになっているはずです。