まず、/proc/cmdline
次のスクリプトで解析を試みました。
#!/bin/bash
for i in $(cat /proc/cmdline)
do
export $i
done
体系的なサービスを作ろう
[Unit]
Description=Parse cmdline
[Service]
Type=simple
ExecStart=/bin/bash -c "source /opt/cmdline_parser.sh"
[Install]
WantedBy=default.target
サービスの起動は手動で機能しますが、変数は私のシェルにエクスポートされません。ログインを開始したりスクリプトを起動したりするオプションがある場合は、この作業を早く行う必要があります。したがって、最初のスクリプトを置くことは/etc/profile.d
不可能です。
テストするカーネルパラメータは「deploy package = testxz_9e full bittorrent」です。
nfsrootでクライアントをPXE起動していて、$ deployが設定されている場合は展開スクリプトを起動しようとしています。スクリプトは、配布するアーカイブを知るために$ packageが必要で、$ fullはすべてのパーティションを復元してmkfsすることを意味し、$ bittorrentはbittorentを使用して配布するように指示します。
この変数をsystemdで使用するシェルにエクスポートしたいと思います。 "var=value" 構文のない var の場合 bash "if [[ -v $var ]]" でテストしたいので値がなくても問題にならないと思います。
PXEブートファイルは次のとおりです。
DEFAULT tool
label tool
KERNEL tool_nfs/vmlinuz
APPEND ro initrd=tool_nfs/initrd.img root=/dev/nfs ip=dhcp nfsroot=xxx.xxx.xxx.xxx:/srv/nfsroot web_srv=xxx.xxx.xxx.xxx deploy package=testxz_9e full=y bittorrent