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

投稿

5月, 2025の投稿を表示しています

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...

ソフトウェア TPM を有効にして KVM ゲストを UEFI セキュアブートでインストール

表題の通りですが、Debian でソフトウェア TPM を有効にして KVM ゲストを UEFI セキュアブートでインストールできたので備忘録として挙げておくことにしました。 パッケージの追加は以下の通りです。 apt-get install ovmf swtpm swtpm-tools 次にファイルパーミッションの設定をします。Debian の場合、こうしておかないとTPMを有効にしたKVMのセキュアブートができませんでした。 sudo chown -R tss:root /var/lib/swtpm-localca 2025/05/19追記:非ルートユーザでインストールする場合、これに加えて実行するユーザが YourUserName とすると、以下のようにして作業を続けてください。 su - YourUserName 続いてkvmゲストのインストールを行います。以下、Debian12 ゲストの場合です。 2025/05/28追記:tpm を設定する行(--tpm emulator,model=tpm-crb,version=2.0)が抜けていましたので追記しました。 virt-install \ --virt-type kvm \ --name kvm92c \ --vcpus=8 \ --memory 4096 \ --disk /srv/images/kvm92c.img,size=64 \ --graphics none \ --network=bridge:virbr0 \ --arch=x86_64 --os-variant debian11 \ --location https://deb.debian.org/debian/dists/bookworm/main/installer-amd64/ \ --boot loader=/usr/share/OVMF/OVMF_CODE.secboot.fd,loader_ro=yes,loader_type=pflash,nvram_template=/usr/share/OVMF/OVMF_VARS.ms.fd \ --tpm emulator,model=tpm-crb,version=2.0 \ --console pty,target_type=serial \ --extra...

kvm で almalinux 9.5 をリモートレポジトリからインストール

明示的に location で リモートレポジトリの url を指定すると、virt-install 及びインストーラ側でレポジトリを自動で設定し、ローカルにインストールメディアを用意する必要がなくなるので、備忘録として挙げて置くことにしました。 virt-install \ --name=kvm87a \ --vcpus=4 \ --memory=4096 \ --disk /srv/kvm87a.img,size=64 \ --network=bridge:virbr0 \ --graphics none \ --console pty,target_type=serial \ --arch=x86_64 \ --os-variant almalinux9 \ --location https://ftp.riken.jp/Linux/almalinux/9.5/BaseOS/x86_64/os/ \ --extra-args 'console=ttyS0,115200n1' 今回の要所は --os-variant と --location です。この指定さえ合っていれば、前述の通り、ローカルにインストールメディアを用意しなくてもOKです。今回は almalinux を指定しましたが、例えば rocky 9.5 をインストールしたい場合は、以下の様にして、variant 名を確認し、locationと共に指定します。 osinfo-query os | grep -i rocky rocky-unknown | Rocky Linux Unknown | unknown | http://rockylinux.org/rocky/unknown rocky8 | Rocky Linux 8 | 8 | http://rockylinux.org/rocky/8 rocky8-unknown | Rocky Li...

dnf / rpm / rpmbuild コマンドのメモ -- インストール直後から、パッケージのビルドをするまで

久しぶりに redhat 系に触れているのですが、インストール直後から、パッケージのビルドをするまでを簡単に纏めておきました。 # 現在指定しているレポジトリの一覧を表示 dnf repolist # 現在指定されていない無効なレポジトリの一覧 dnf repolist --disabled # レポジトリの有効化1 dnf config-manager --enable appstream-source baseos-source extras-common-source # レポジトリの有効化2 (centosで rhel の codeready-builderに該当するcrbレポジトリの有効化) dnf config-manager --enable crb crb-source # レポジトリの追加 dnf config-manager --add-repo   # rpm-build パッケージのインストール dnf install rpm-build # rpmbuild に必要なビルドユーザ(mock/mockbuild)の追加 useradd -s /sbin/nologin mock useradd -s /sbin/nologin mockbuild # ソース、スペックファイルなどの展開先の確認 rpm --showrc | grep _topdir -13: _builddir %{_topdir}/BUILD -13: _buildrootdir %{_topdir}/BUILDROOT -13: _rpmdir %{_topdir}/RPMS -13: _sourcedir %{_topdir}/SOURCES -13: _specdir %{_topdir}/SPECS -13: _srcrpmdir %{_topdir}/SRPMS -13: _topdir %{getenv:HOME}/rpmbuild # 指定したファイルを含むパッケージ名のサーチ dnf provides tog-pegasus # 対象となるrpmパッケージのソース類のダウンロード dnf download --source tog-pegasus # 指定したパッケージのビルドに必要なパッケージのインストール(apt-get...

nmcliを使った ipv4 設定の基本

nmcliを使ったipv4の設定は探せばでてくるのですが、アドレスだけではなくgatewayやdnsサーチまで含めているものは意外とありませんので、備忘録として挙げておくことにしました。 2025/05/17:追記: Debian で インターフェースの管理を ifupdown から NetworkManager へ切り替える方法を追記しました。 apt-get install network-manager # /etc/network/interfacesを編集し、lo および その他のインターフェスに関する設定をすべてコメント化 # NetworkManager で管理したいデバイスを先に登録 nmcli con add type ethernet con-name enp1s0 ifname enp1s0 # アドレスを設定 nmcli conn mod enp1s0 ipv4.address 10.1.82.10/24 # 手動設定に変更 nmcli conn mod enp1s0 ipv4.method manual # ゲートウェイを設定 nmcli conn mod enp1s0 ipv4.gateway 10.1.82.1 # 使用するDNSサーバをスペース区切りで設定 nmcli conn mod enp1s0 ipv4.dns "10.1.1.64 10.1.1.65" # ドメインサーチを設定 nmcli conn mod enp1s0 ipv4.dns-search example.com # ホスト名の設定 nmcli general hostname MyHostName # 再起動 reboot 短いですが今回は以上です。それでは。