Saturday, December 22, 2012

Apache2基本設定

 ubuntuやraspbianでのApache2の基本的な設定。
$ sudo nano /etc/apache2/conf.d/security 

 あまり気にしなくても良さそうだけど、公開する情報は最低限に抑える。
ServerTokens Prod
ServerSignature Off
TraceEnable Off
それから、
$ sudo nano /etc/apache2/mods-available/mime.conf
 AddHandler cgi-script .cgi .rb .py .pl
$ sudo nano /etc/apache2/mods-available/dir.conf
 DirectoryIndex index.html index.rb index.cgi index.pl index.php index.xhtml index.htm
できればCGIはどこででも使いたいので、
sudo nano /etc/apache2/sites-available/default
       
                Options ExecCGI FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
       
あとはApache2の再起動。
$ sudo service apache2 restart
これで最低限の設定はできた。
バーチャルホストやmod_rewriteの黒魔術はまたそのうち。

Tuesday, December 18, 2012

Raspbian設定

 Raspbianはほとんど普通のUbuntuかDebianなので、Raspberry PiをPCとして使う分には特に悩むようなことはなさそう。
 Raspberry PiにLANケーブルを繋いだら、まずは初期ユーザのpiでログインして、
$ sudo apt-get update
$ sudo apt-get upgrade
 それからユーザの追加。
$ sudo useradd -m -s /bin/bash ユーザ名
$ sudo passwd ユーザ名
 サーバにしたいので、IPを固定。
$ sudo nano /etc/network/interfaces
 ネットワークに合わせて適当に設定したりコメントアウトしたり、
auto lo

iface lo inet loopback
#iface eth0 inet dhcp

#allow-hotplug wlan0
#iface wlan0 inet manual
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp

auto eth0
iface eth0 inet static
address 192.168.*.*
netmask 255.255.255.0
gateway 192.168.*.*
 作成したユーザにsudo権限を与える。
$ sudo visudo
 一番最後の行に追加。
#includedir /etc/sudoers.d
pi ALL=(ALL) NOPASSWD: ALL
ユーザ名 ALL=(ALL) ALL
 それから新しいユーザでログインしなおして、piのsudo権限をコメントアウト。
#pi ALL=(ALL) NOPASSWD: ALL
 あとは通常のセットアップ手順通り。
$ sudo apt-get install ruby1.9.3
 piユーザを削除してしまうなら、
$ sudo userdel -r pi
 ただの格安低消費電力サーバとして考えても優秀だし、しかも直接いじれるIOまである。
 もう一台くらいあってもいいかな。

Raspberry Pi届いた

 先週ModMyPiに注文したRaspberry Piが到着した。
 一週間程度で届くし、ケース込みで3500円くらいなので、RSで待ち続けるよりずっと良い。

 まずは公式サイトから2012-12-16-wheezy-raspbian.zipをダウンロード。
 SDカードは4G以上。今回は余っていた16GのSDカードで。
 作業はUbuntu上で進める。
 SDカードをUbuntu機に差し込んで、
$ unzip 2012-12-16-wheezy-raspbian.zip
$ sudo dd bs=1M if=2012-12-16-wheezy-raspbian.img of=/dev/sdX
 /dev/sdXのXは環境による。
 書き込みは数分程度。

 Raspberry Piに書き込み済みのSDカードを差し込んで、HDMIケーブルとUSBキーボード、最後にUSB充電アダプタからmicro USBで電源供給。
 すぐに起動メッセージが流れ始める。
 少し待つとRaspi-configという設定ツール画面になる。

 設定する必要があるのは次の項目。
・expand_rootfs:これをしないとSDカードの容量がちゃんと使えない。
・change_pass:念のためパスワード変更。
・config_keyboard:Generic 105-key (Intl)PC -> Other -> Japanese -> Japaneseと設定。その後は基本的にデフォルトのまま設定。モディファイアとかコンポーズとか使わないし、Ctrl+Alt+BackspaceでXを強制終了は、一応Yesを選択。
・change_timezone:Tokyoを選択。
・ssh:enableを選択。
 Finishを選択して再起動。rootfsの拡張にしばらく時間がかかるので、のんびり待つこと。
 loginプロンプトが出たら、piでログイン。

 設定画面をもう一度表示したい時は、
$ sudo raspi-config
 で表示されるみたい。

Sunday, December 9, 2012

ffserverのjpeg切り出し

 ffserverでjpegを配信するように設定すると、なぜか延々とつながったjpeg画像が送られてしまう。
 そういうのが欲しければmjpegもあるので、jpegは1枚目だけあれば後ろは要らないんだけど…と言うワケで、こういうときはスクリプトで分割して先頭画像だけ切り出し。
 軽くjpegのフォーマットを調べてみると、ファイルの終端はFFD9になっているらしい。
 とりあえずなにも考えずに先頭からFFD9まで読み込むcgiスクリプトを作成。データ途中にFFD9が出てくる可能性は気にしないでおく。


#!/usr/bin/ruby
require 'net/http'
# continuous jpeg cutting script.
# made for ffserver.
print "Content-type: image/jpeg\n\n"
flag = false
Net::HTTP.version_1_2
Net::HTTP.start('localhost', 8090) {|http|
  http.request_get('******.jpg'){|response|
    response.read_body{|str|
str.each_byte do |ch|
putc ch
if flag && (ch == 0xd9)
exit()
end
if ch == 0xff
flag = true
else
flag = false
end
end
    }
  }
}



フラグ使ってるのはちょっとどうかと思うけど、まあこんなものかな。
一応動く。