2007-03-08 :-|
_ 地味に胸キュン
静かに萌えるろみたん みたいな。
_ [Ruby][/usr/bin/env]#!/usr/bin/env ruby を #!/usr/pkg/bin/ruby にしてしまえというソリューション
動作未確認。
% find . -type f | while read f; do sed -e 's%/usr/bin/env ruby%/usr/pkg/bin/ruby%\g' $f done
_ 帰路ろ
脳内で Over the Sky 「 死闘 」を再生しながらチャリで道路を走っていたら大型車に後ろから煽られました。自動車こわい。
_ [envvars][BSD][継承][Ruby][Linux][httpd][NetBSD][Apache][FreeBSD][環境変数][デーモン][スクリプト]どさにっき - デーモンさんの起こしかた
/usr/bin/env の話題[ 2007-03-03 ]に反応をいただきました。httpd に渡す PATH を制御します。
動作確認のためにこんなスクリプト( printpath.rb )を準備しておきます。環境変数 PATH を表示させます。
#!/usr/pkg/bin/ruby print <<"EOD" Content-type: text/html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> <html> <title>test</title> <body> #{ENV["PATH"]} <br> </body> </html> EOD
これを public_html 以下に置きます。ログインユーザーで sudo /etc/rc.d/apache start した場合の出力はこう。
/usr/local/sbin:/usr/local/bin:/usr/pkg/bin:/usr/pkg/sbin:/bin:/sbin:/usr/sbin:/usr/bin:/home/rin/usr/local/bin
PATH を制御した場合にちゃんと意図どおりに PATH を設定できてるかを確認します。では始めます。
やまやさんのところより。
# env - PATH=/usr/local/bin:/usr/bin:/bin /etc/init.d/hoge start
env の最初の引き数 - ( ハイフン )はなんでしょう。マニュアルを読みます。
The historic - option has been deprecated but is still supported in this implementation.
将来実装しなくなる予定とのことです。でも - の機能が分かりません。BSD ではないけど参考までに Linux のマニュアルを見てみます。
-, -i, --ignore-environment
継承された環境を無視して、空の環境から始める。
- と -i は同じ意味なようです。
もういちど NetBSD のマニュアルを見てみます。
The option `-i' causes env to completely ignore the environment it inherits.
ということでここでは -i を使うことにします。
ログインユーザーが sudo して起動する場合
rc.d ではなくログインユーザーで起動させるときはこう。
% env -i PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/pkg/bin sudo /etc/rc.d/apache start
printpath.rb の出力を確認します。
/bin:/sbin:/usr/bin:/usr/sbin:/usr/pkg/bin
設定したとおりになっていますね。
起動スクリプトを変更する場合
FreeBSD には envvars というのがあるそうです。
NetBSD というか pkgsrc の apachectl にも envvars の記述がありました。
# pick up any necessary environment variables if test -f /usr/pkg/sbin/envvars; then . /usr/pkg/sbin/envvars fi
/usr/pkg/sbin/envvars の正味の内容はこう。
LD_LIBRARY_PATH="/usr/pkg/lib:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH
PATH を追加してこのようにしておきます。/home/rin/usr/local/bin を追加しているのは動作確認のためです。printenv.rb の出力に /home/rin/usr/local/bin があれば起動スクリプトの変更は意図どおりといえるでしょう。
LD_LIBRARY_PATH="/usr/pkg/lib:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/pkg/bin:/usr/pkg/sbin:/home/rin/usr/local/bin"
ではログインユーザーで httpd を起動して、ちゃんとログインユーザーの PATH ではない PATH が設定されているか確認します。
% sudo /etc/rc.d/apache start
printenv.rb の出力はこう。
/bin:/sbin:/usr/bin:/usr/sbin:/usr/pkg/bin:/usr/pkg/sbin:/home/rin/usr/local/bin
この日記冒頭で書いた printenv.rb の出力と異なります。よってこれは envvars で設定した PATH とみなしてよさそうです。
動作確認したので /usr/pkg/sbin/envvars の PATH から /home/rin/usr/local/bin を削除しておきます。
LD_LIBRARY_PATH="/usr/pkg/lib:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/pkg/bin:/usr/pkg/sbin"
まとめ
今回は httpd に環境変数を渡す方法を試しました。環境変数を渡す手段は以下の 2 つあります。
- env -i PATH=... /etc/rc.d/apache start する
- /usr/pkg/sbin/envvars を変更する
どうでもいいけど "NetBSD envvars" を Yahoo! 検索 したら私のところがヒットしました。envvars は apache を入れたときに入るものなんですね。
Σ( ̄□ ̄;
(´ω` )