スキップしてメイン コンテンツに移動

投稿

mokutil, dkms, sign-file コマンド で 3rd party kernel module にサイン

セキュアブートすると当然ながらサインのないカーネルモジュールは読み込まれません。単純にはサインすればいいのですが、dkmsパッケージをつくるまでもないので直接サインできないものかと思い、mokutil と dkms、それと linux-kbuild に含まれる sign-file コマンドを使うと意外とあっさりモジュールにサインできたので、備忘録として挙げておくことにしました。 以下手順です。 sudo su KVER=$(uname -r | cut -d'-' -f1) apt-get install mokutil dkms linux-kbuild-${KVER} dkms generate_mok mokutil --import /var/lib/dkms/mok.pub input password: input password again: # 再起動 reboot enters MOK manager EFI utility: 1. press any key 2. enroll MOK, 3. continue 4. enroll the key(s)?: yes 5. enter password 6. reboot (再起動) mokutil --list-enrolled --snip X509v3 Subject Key Identifier: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:C3:96:14:01 --snip # verify your key is loaded sudo dmesg | grep cert | grep c3961401 [ 1.088300] integrity: Loaded X.509 cert 'DKMS module signing key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc3961401' # モジュールにサイン cd /lib/modules/${KEVER}-amd64/3rdPartyMods /usr/lib/linux-kbuild-${KEVER}/scripts/sign...
最近の投稿

セキュアブート可能な Debian usb removable drive を作成する

USB ドライブにセキュアブート可能なインストールをすることは、通常のローカルドライブにインストールするのと同じ手順で行けるのですが、すくなくとも Debian 12 の場合だと、efiboot のエントリーがインストールしたマシンの NVRAM に登録されますが、リムーバブルのターゲットドライブを他のマシンで使おうとすると、セキュアブートバイオレーションエラーがでて起動できませんし、NVRAM に自動的にエントリが入っていしまいます。 しかし、インストーラの USB ドライブは当然ながらセキュアブートが有効になっているマシンならどれでも起動できる上、NVRAM にはエントリが残らないので、多分行けるだろうと思い、インストーラの EFI ディレクトリをターゲットにコピーし、debian/grub.cfg だけ USB ターゲットドライブのものに差し替えた所、うまく行ったので備忘録として挙げておくことにしました。 以下手順です。 ############ 1. 通常通りターゲットドライブにインストール ############ 2. インストーラをレスキューモードで再起動し、ターゲットの USB Drive に chroot して作業を行う cd /boot/efi/EFI mv debian /root/xx-debian mv BOOT /root/xx-BOOT cd /boot/efi/EFI mkdir debian cp -a /root/xx-debian/grub.cfg debian/ ## インストーラのシェルを切替: press ctrl + a then press 2 mkdir -p /target/boot/efi/EFI/BOOT cp -a /cdrom/EFI/boot/bootx64.efi /target/boot/efi/EFI/BOOT/ cp -a /cdrom/EFI/boot/grubx64.efi /target/boot/efi/EFI/BOOT/ ############ 3. efi ブートエントリーを efibootmgrを使ってクリーンアップ # chrootのシェルに戻る: press ctrl + a then press 1 modprobe -av efivarfs mount ...

GRUB2で gfxterm と serialの両方で色付きの日本語(UTF-8)表示を同時に行う

表題の通りですが、grubのマニュアルをみていると、serial コンソールは色付きで utf-8 が使えるようだったのでトライしてみたところ、同時に gfxterm と serialの両方で Debian にて 日本語(UTF-8)表示ができました。 前提として LANG=ja_JP.UTF-8 となっている環境が必要ですが、通常のインストールの場合、日本語を選択すると大抵は LANG=ja_JP.UTF-8 になっていると思いますのでこの設定方法は割愛します。 まず、はじめに /etc/default/grub の設定です。 GRUB_DEFAULT=0 GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR=`( . /etc/os-release; echo ${NAME:-Debian} ) 2>/dev/null || echo Debian` GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n1" GRUB_TERMINAL="serial gfxterm" GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1" つづいて /etc/grub.d/00_header を編集します。 sudo su apt-get install patch cd ~ cp -a /etc/grub.d/00_header 00_header.orig cp -a /etc/grub.d/00_header 00_header #以下の内容でパッチ(grub.d-00_header-ja.patch)を作成 #----------------------------------------------------------------- --- 00_header.orig 2025-03-15 22:55:29.000000000 +0900 +++ 00_header 2025-06-02 02:51:00.000000000 +0900 @@ -274,6 +274,18 @@ ;; esac +ca...

Debian 12 の cockpit で iSCSI を使う

Debian 12 に cockpit を入れたのですが、ログを見た所 iSCSI 関係のライブラリが無い旨のエラーがでていました。なんだろうと思いつつ、cockpit のストレージセクションを見てみると、たしかに iSCSI ターゲットの追加メニューがどこにもありません。なので、ライブラリを追加すれば行けるだろうとおもって cockpit のソースを見てみると Debian では libiscsi が無い旨の記述を見つけたのですが、libiscsi は Debian にはあるのでどういうことかわかりません。 そこで redhat 系のパッケージをソースから追ったところ、Debian の open-iscsi に該当するパッケージが libiscsi ライブラリをプロバイドしていて、Debianのlibiscsiとopen-iscsi が提供する libiscsiusr とは別物で Debian での open-iscsi にソースを追加したものをベースにしたパッケージだということがわかりました。   なので、rpm のソースを展開しソースを持ってきて、libiscsikrn なる deb パッケージを open-iscsi のパッケージに追加するようにし、また、cockpit は libiscsi を直接つかっているわけではなく、udisks2パッケージを仲介してストレジー関係のサービスを提供しているようだったので、Debian 側のudisks2のソースを見ると deiban/rulesで iSCSI が enable されていないので修正しこちらも udisks2-iscsi なるパッケージを追加しインストールしたところ、結果 cockpit そのものには手を加える必要はなく、無事 iSCSI のメニューが出てきました。 パッチの整理ができていないのですがソースとパッケージは こちら に置いてあります。 cockpitでのiSCSI接続は以下の通りです。まず最初にイニシエータ名を変更します。 cockpitからのiscsi接続は、ポータルの追加ではサーバ名だけを入力します。 ターゲット側で設定が済んでいると以下のようになります。 最後にここでユーザ名とパスワードを入力します。 使ってみた感想ですが、仮想マシンのストレージプールに cockpi...

mktempを使わずに文字列を変数に代入して操作

とあるrpmパッケージを rhel 9.5/9.6系に入れたのですが、systemd のサービスでスクリプトが呼び出された時に mktempしたファイルに追記しようしている箇所が、permission denied で許可がありません、とのエラーログがでていました。 mktemp で作成された一時ファイルなので、ファイルパーミッションそのものに間違いはなかったのですが、ls -Z で確認したところ、system_u:object_r:tmp_t:s0 /tmp/tmp.GV1sHMTOpY となっていて、 systemd で起動したサービスの /tmp にかかる selinux の設定が影響しているようでした。 何箇所か引っかかるのですが、主要な該当箇所は以下の所でした。 function TurnOnCron(){ # create temporary files with randomized name TmpRoot=$(mktemp) || return Err=$(mktemp) || return crontab -l >$TmpRoot 2>$Err if [ $? -ne 0 ]; then fgrep "no crontab" $Err >/dev/null || { sv_log "Error: Periodical supervision not available." rm -f $TmpRoot $Err return } fi fgrep "xxxxxxxCron" $TmpRoot>/dev/null if [ $? -eq 0 ]; then grep "0,5,10,15,20,25,30,35,40,45,50,55.*xxxxxxxCron.*" $TmpRoot>/dev/null && { # old crontab entry found, modify it sed -i...

efibootmgr を使ってブートエントリーを整理する

テスト用に OS を複数回同じ機材にインストールするとEFIブートエントリーが NVRAM に残ったままになり、どれがどれなのかわかりにくくなってしまいます。そこで不要なエントリーをしらべ整理したいと思ったのですが、意外とまとまった記事がなかったので、備忘録として挙げてみることにしました。 まず最初にエントリーを表示させます。 efibootmgr -v BootOrder: 0000,0015,0014,0012,0006,0007,0009,000A,000B,000C,0011 Boot0000* Debian_01 HD(1,GPT,XXXXXXXX-23f7-4f5e-b436-260e5fd276a7,0x800,0x100000)/File(\EFI\DEBIAN\GRUBX64.EFI) Boot0006* UEFI: PXE IP4 Mellanox Network Adapter - 50:6B:WW:WW:XX:XX PciRoot(0x1)/Pci(0x0,0x0)/Pci(0x0,0x0)/MAC(506bWWWWXXXX,1)/IPv4(0.0.0.00.0.0.0,0,0)..BO Boot0007* UEFI: PXE IP4 Mellanox Network Adapter - 50:6B:WW:WW:XX:XX PciRoot(0x1)/Pci(0x0,0x0)/Pci(0x0,0x1)/MAC(506bWWWWXXXX,1)/IPv4(0.0.0.00.0.0.0,0,0)..BO Boot0009* UEFI: PXE IP4 Intel(R) I350 Gigabit Network Connection PciRoot(0x0)/Pci(0x1c,0x0)/Pci(0x0,0x0)/MAC(901bWWWWXXXX,1)/IPv4(0.0.0.00.0.0.0,0,0)..BO Boot000A* UEFI: PXE IP6 Intel(R) I350 Gigabit Network Connection PciRoot(0x0)/Pci(0x1c,0x0)/Pci(0x0,0x0)/MAC(901bWWWWXXXX,1)/IPv6([::]: [::]:,0,0)....

mkcert をつかって cockpit で ssl 接続を行う

Debian に cockpit を入れてみたのですが、標準のインストールだと ssl をインポートしてもエラーになり、ssl 接続ができませんでした。そこで調べた所 mkcert を使うと証明機関( CA )を含め、自己証明書を発行できるらしいので、やってみた所、かなり簡単にできましたので備忘録として挙げておくことにしました。 以下手順例ですが、今回は、fqdn の証明書を発行するので、クライアント側で /etc/hostname などを使って正引できるようにしておきます。 # /etc/hosts を編集する場合(クライアント側) 10.1.92.11 kvm92b.example.com kvm92b # 以下 cockpit をインストールしている方 # cockpit のインストール sudo apt-get install cockpit-bridge cockpit-networkmanager cockpit-packagekit cockpit-pcp cockpit-storaged cockpit-system cockpit-ws cockpit-machines # mkcert のインストール sudo apt install mkcert # 証明機関(CA)の作成 cd ~/ mkcert --install # 確認 find .local # サーバ証明書の発行 mkcert kvm92b.example.com # 発行した証明書を cockpitが参照するディレクトリに移動 sudo mv *pem /etc/cockpit/ws-certs.d/ sudo su cd /etc/cockpit/ws-certs.d/ chown root:root *.pem # 既存の証明書をバックアップ mkdir bkup mv 0-self-signed.cert 0-self-signed.key bkup # サーバ証明書の拡張子を変更 mv kvm92b.example.com-key.pem 10-kvm92b.example.com.key mv kvm92b.example.com.pem 10-kvm92b.example.com.cert # cockpit の再起動 systemctl res...