実際のファイルシステムがマウントされる前のブート時に環境変数を保存するにはどうすればよいですか?
あるのはわかっています/etc/environment
が、initramfs 内ではそのファイルはまだアクセスできません。値を保存するファイルを書き込むことも考えましたが、そのファイルがシステム上に存在すると、実際のファイルシステムがマウントされた後に上書きされます。
Ps: 起動時に読み取るのではなく、後で変数を保存したいだけです
回答後に編集
約 :
- カーネルモジュールを作成する(ヘルプを参照)ここそしてそこには)命名翻訳:
- 起動時にモジュールが使用可能であることを確認します(initramfs-tools を使用してカーネル イメージ内に含めるか、ファイルシステム内で見つけることにより)。
- スクリプトに次の行を追加します
カーネルイメージにモジュールが含まれていない場合
insmod /path/to/mod.ko
それ以外の場合は直接
echo "env_var=value" > /proc/name_of_your_process
name_of_your_process
モジュールの内で指定された名前はどこにありますか__init
( を実行する場合entry = proc_create("name_of_your_process",0777,NULL,&my_fops);
)
その後、スクリプトの起動プロセス中に
cat /proc/name_of_your_process
>> env_var=value
rmmod mod.ko
答え1
まあ、通常の環境継承(単にエクスポートするだけ...)は理論的には機能しますが...問題は、インストールの起動時に、おそらく環境が意図的にクリーンアップされます。これは通常、異常が発生していないことを確認するために行われます。環境変数をチェックしないままにしておくと、セキュリティ上の危険が生じる可能性があります。
あることはわかっています
/etc/environment
が、initramfs 内ではそのファイルにはまだアクセスできません。
楽しいのはインストール好きなことを何でもできるということです。唯一の制限はあなたの想像力です。
ファイルをアクセス可能にすることができます。マウント、変更、アンマウント。または、チェックサムのない従来のファイルシステムを使用している場合は、変更することもできます。それなし何もマウントしません (少なくとも読み取り/書き込みモードではマウントしません)。GRUB が に使用するのと同じトリックですgrubenv
。
ファイルシステムや物理ストレージ全般をいじりたくない場合は、RAM ディスク、tmpfs、ループ デバイスなどを設定できます。initramfs が何かを残す方法は無数にあります (通常はクリーンアップする必要があります)。
答え2
initramfsがすべてのファイルをクリーンアップすると、スイッチルートこれにより、/proc、/dev、/sys、および /run フォルダーを除くすべてのファイルが削除されます。これらのフォルダーのいずれかに特別なファイルを作成することは可能ですが、これにはトリックが関係しています。
見る:/proc/sys 内にディレクトリとファイルを作成することは可能ですか?
もちろん、最も簡単なオプションは、ルートファイルシステムがロードされた後、init が実行される前に、変数をファイルシステムに書き込むスクリプトを追加することです。これは、"ローカルボトム「」フォルダに保存します。これができない理由はありますか?
答え3
簡単です。fstab を見てください。次に、ルート デバイスをマウントし、マウントされたルート デバイス上のファイルに変数を書き込みます。これは kdump から学びました。