Arch Linuxのインストールプロセスを自動化するスクリプトを作成していますが、環境の問題が発生しました。インストール順序を含むファイルと、スクリプトの先頭から派生したすべての機能を含むファイルがあります。
実行は、arch-chroot /mnt /bin/bash -c someFunction
そのコード行の前に設定された関数や変数を認識しません。
export -f someFunction
関数を認識しますが、分解someFunction
関数自体である場合は、他の関数を呼び出すだけです。 chroot環境ですべての機能を取得する最もエレガントな方法は何ですか?
また、スクリプトの先頭でユーザーが設定したすべての変数をchroot環境にエクスポートする方法も必要です。 (上記の問題を解決すると、この問題も解決しそうです)
答え1
変数をコピーせずに渡すことができました(スクリプトの外から機密変数をコピーすることはセキュリティ上危険です)。以下は一部です。
cp archsin-functions /mnt/root/;
arch-chroot /mnt /bin/bash -- << EOCHROOT
source \$HOME/archsin-functions;
createSwap;
setLocale "${CITY}";
setHost "${HSTNAME}";
setInitramfs "${REPOAPITOKEN}" "${REPOID}";
setUser "${USRGROUPS}" "${USRNAME}" "${USRPASSWD}" "${REPOAPITOKEN}" "${REPOID}";
systemctl enable NetworkManager.service
EOCHROOT
shred --verbose -u --zero --iterations=3 /mnt/root/archsin-functions;
<< EOCHRROOT
-トレドックchroot環境で作成された実行シェルにラインマーカーをEOCHROOT
配置します。/bin/bash
ファイルを読み取ると変数拡張が行われるため、関数は変数内のデータを正しく提供します。エスケープ文字は、その行が実際に実行されるまで$
拡張をブロックします。$HOME
実行するとchroot環境で実行されるため、関数ファイルを含むchroot環境のフォルダを$HOME
評価します。/root
実行後、トレースを残さずにファイルが削除されます。
答え2
/etc/profile.d
chroot階層とbashのディレクトリにあるファイルに変数と関数を配置します。しなければならない起動時にソース(bashで使用する他の/ etcファイルを設定した場合)