これを開始点として使用して、ブラウザーからラズベリーパイベースのデバイスを制御するための非常に小さなhttpサーバーを構築しています:http://paulbuchheit.blogspot.com/2007/04/webserver-in-bash.html
そのコアは次のとおりです。
#!/bin/bash
RESPONSE=/tmp/webresp
[ -p $RESPONSE ] || mkfifo $RESPONSE
while true ; do
( cat $RESPONSE ) | nc -l -p 8080 | (
REQUEST=`while read L && [ " " "<" "$L" ] ; do echo "$L" ; done`
REQ="`echo \"$REQUEST\" | head -n 1`"
echo "[ `date '+%Y-%m-%d %H:%M:%S'` ] $REQ" >>/var/log/http-access.log
if [[ $REQ =~ ^GET\ /a[\ \/\#?] ]]; then
# ...
RESP="<p>You are at A</p><p><a href='/'>Home</a></p>"
elif [[ $REQ =~ ^GET\ /b[\ \/\#?] ]]; then
# ...
RESP="<p>You are at B</p><p><a href='/'>Home</a></p>"
elif [[ $REQ =~ ^GET\ /c[\ \/\#?] ]]; then
# ...
RESP="<p>You are at C</p><p><a href='/'>Home</a></p>"
else
read -r -d '' RESP <<'HTMLDOC'
<h3>Home</h3>
<p><a href='/a'>A</a></p>
<p><a href='/b'>B</a></p>
<p><a href='/c'>C</a></p>
HTMLDOC
fi
cat >$RESPONSE <<EOF
HTTP/1.0 200 OK
Cache-Control: private
Content-Type: text/html
Server: bash/2.0
Connection: Close
Content-Length: ${#RESP}
$RESP
EOF
)
done
ポート80でサーバーを実行する場合を除いて、これはうまく機能します。常に昇格された特権でサーバーを実行することはおそらく悪い考えだと思います。ポート80でリッスンを開始した後、どうすればsudoを解除できますか?リクエストごとにncコマンドが再実行されているように見えます。
はい、「実際の」軽量Webサーバーを実行できることはわかっていますが、メモリフットプリントをできるだけ小さくしたいので、bashはすでに実行されていると思いました。~/.config/autostart/autorun.desktop
また、インストールをいくつかの.shファイルの追加と、ファイルを使用した実行に限定したいと思います。