Linux
メモ
X のキーボードがおかしい
x11-base/xorg-server-1.4.2 と sys-apps/hal-0.5.11-r1 の組み合わせで キーボードがおかしなことになる。
hal が返すキーボード情報が何かおかしいっぽい。
以下のファイルを作ったら直った。
/etc/hal/fdi/policy/10-my-keymap.fdi:
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- -->
<deviceinfo version="0.2">
<device>
<match key="info.capabilities" contains="input.keyboard">
<append key="info.callouts.add" type="strlist">hal-setup-keymap</append>
</match>
<match key="info.capabilities" contains="input.keys">
<merge key="input.x11_driver" type="string">xkb</merge>
<merge key="input.xkb.rules" type="string">xorg</merge>
<!-- If we're using Linux, we use evdev by default (falling back to
keyboard otherwise). -->
<merge key="input.xkb.model" type="string">jp106</merge>
<merge key="input.xkb.layout" type="string">jp</merge>
<merge key="input.xkb.variant" type="string" />
</match>
</device>
</deviceinfo>
cdda2wav
先日gripでCDをエンコードしようとしたら、切り出しが全く進まなくなっていた。
少し前にcdda2wavの入っているcdrtoolのバージョンが上がっていたようなので、何か変わったのかなぁと思いつつ、適当にオプションをいじっていたところ、
-I cooked_ioctl
を追加したら動くようになった。
chumby で radiko を聴く
http://www.dcc-jpl.com/diary/2010/03/15/radiko_meets_foltia/
http://d.hatena.ne.jp/nazodane/20100315/1268646192
を参考に。
chumby は AAC の再生ができないっぽいので、 ffmpeg/ffserver で MP3 にしてストリーミングし直す。
ffserver の起動
設定ファイルはこんな感じ。
ffserver.conf:
# Port on which the server is listening. Port 8090 # Address on which the server is bound. BindAddress 0.0.0.0 # Number of simultaneous HTTP connections that can be handled. MaxHTTPConnections 20 # Number of simultaneous requests that can be handled. MaxClients 10 # This the maximum amount of kbit/sec that you are prepared to # consume when streaming to clients. MaxBandwidth 1000 # Access log file (uses standard Apache log file format) # '-' is the standard output. CustomLog - # Suppress that if you want to launch ffserver as a daemon. NoDaemon ################################################################## # Definition of the live feeds <Feed radiko.ffm> # ffserver can also do time shifting. It means that it can stream any # previously recorded live stream. The request should contain: # "http://xxxx?date=[YYYY-MM-DDT][[HH:]MM:]SS[.m...]".You must specify # a path where the feed is stored on disk. You also specify the # maximum size of the feed, where zero means unlimited. Default: # File=/tmp/feed_name.ffm FileMaxSize=5M File /tmp/radiko.ffm FileMaxSize 200K # Only allow connections from localhost to the feed. ACL allow 127.0.0.1 </Feed> ################################################################## # Streams # MP3 audio <Stream radiko.mp3> Feed radiko.ffm Format mp2 AudioCodec libmp3lame AudioBitRate 128 AudioChannels 2 AudioSampleRate 48000 NoVideo </Stream> ################################################################## # Special streams # Server status <Stream stat.html> Format status # Only allow local people to get the status ACL allow localhost ACL allow 192.168.0.0 192.168.255.255 #FaviconURL http://pond1.gladstonefamily.net:8080/favicon.ico </Stream> # Redirect index.html to the appropriate site <Redirect index.html> URL http://www.ffmpeg.org/ </Redirect>
ffserver -f ffserver.conf で ffserver を起動しておく。
ffserver に radiko を入力として与える
以下のスクリプトを実行する。 TUNE は聴きたい局に合わせて設定すること。
feed-radiko.sh:
#!/bin/sh
# TBS -> TBS ラジオ
# QRR -> 文化放送
# LFR -> ニッポン放送
# NSB -> ラジオ NIKKEI
# INT -> INTER FM
# FMT -> TOKYO FM
# FMJ -> J-WAVE
TUNE="INT"
rtmpdump -y "simul-stream" \
-n "radiko.smartstream.ne.jp" \
-c 1935 -s "http://radiko.jp/player/player_0.0.9.swf" \
-p "http://radiko.jp/player/player.html#${TUNE}" \
-a "${TUNE}/_defInst_" -f "WIN 10,0,45,2" -v -o - \
| ffmpeg -i - http://localhost:8090/radiko.ffm
chumby で聴く
Music -> My Streams -> NEW
URL は http://<ffserver を起動させた PC の IP アドレス>:8090/radiko.mp3 、 Type は MP3 を指定する。
chumby で radiko を聴く その2
chumby で radiko を聴く でやった手法は、 radiko を聴いていないときでもダウンロード & 変換が走りつづけるという サーバーに優しくない感じだったので、以下のような CGI を動かす手法に変更。
radiko.cgi:
#!/bin/sh
# TBS -> TBS ラジオ
# QRR -> 文化放送
# LFR -> ニッポン放送
# NSB -> ラジオ NIKKEI
# INT -> INTER FM
# FMT -> TOKYO FM
# FMJ -> J-WAVE
TUNE="${QUERY_STRING}"
if [ -z "${TUNE}" ]; then
TUNE="INT"
fi
echo -e 'HTTP/1.0 200 OK\r'
echo -e 'Pragma: no-cache\r'
echo -e 'Content-Type: audio/x-mpeg\r'
echo -e '\r'
(/usr/local/bin/rtmpdump -y "simul-stream" \
-n "radiko.smartstream.ne.jp" \
-c 1935 -s "http://radiko.jp/player/player_0.0.9.swf" \
-p "http://radiko.jp/player/player.html#${TUNE}" \
-a "${TUNE}/_defInst_" -f "WIN 10,0,45,2" -v -o - \
| /usr/local/bin/ffmpeg -i - -vn -f mp3 -acodec libmp3lame -) 2> /dev/null
複数の端末で再生するんなら ffserver 使った方が良さそうだけど、 そういったこともないしね。
chumby で radiko を聴く その3
radiko の仕様が変わったとか言う話なので、スクリプトを更新。
radiko.cgi:
#!/bin/sh
# TBS -> TBS ラジオ
# QRR -> 文化放送
# LFR -> ニッポン放送
# NSB -> ラジオ NIKKEI
# INT -> INTER FM
# FMT -> TOKYO FM
# FMJ -> J-WAVE
TUNE="${QUERY_STRING}"
if [ -z "${TUNE}" ]; then
TUNE="INT"
fi
echo -e 'HTTP/1.0 200 OK\r'
echo -e 'Pragma: no-cache\r'
echo -e 'Content-Type: audio/x-mpeg\r'
echo -e '\r'
(/usr/local/bin/rtmpdump -y "simul-stream" \
-l 3 \
-n "radiko.smartstream.ne.jp" \
-c 1935 -s "http://radiko-dl.ssdl1.smartstream.ne.jp/radiko-dl/player/player_0.1.2.swf" \
-p "http://radiko.jp/player/player.html#${TUNE}" \
-a "${TUNE}/_defInst_" -f "WIN 10,0,45,2" -v -o - \
| /usr/local/bin/ffmpeg -i - -vn -f mp3 -acodec libmp3lame -) 2> /dev/null
compiz-fusionが起動しない
GLX_EXT_texture_from_pixmap is not supported とか言われて compiz が起動しない。
LIBGL_ALWAYS_INDIRECT=TRUE compiz としたら起動した。
cron.hourly が二度走る
/var/log/messages 見てたら cron.hourly が0分と10分の二度走ってるのに気づいた。
んで、調べてみたらどうも cron.hourly で実行していた ntpdate が原因っぽい。
run-crons 起動
run-crons が日時チェック用のファイルに touch
ntpdate で時間がまき戻る
run-crons が日時チェック用のファイルを再チェック
日時が未来のファイルはおかしいと判定し、削除
run-crons 終了
run-crons 起動 2
日時チェック用のファイルが存在しないので、スクリプトを実行。
ということで、 cron.hourly で ntpdate を実行するのは止めて ntpd を動かすことにした。
dd で sparse ファイルを作る
$ dd if=/dev/zero of=testfile bs=1024M seek=30 count=0 $ ls -lh testfile $ du -h testfile
dm-cryptで暗号化ファイルシステム
kernel 2.6.4以上で以下のオプションを有効にする
Device Drivers->Multi-device support (RAID and LVM)-> [*] Multiple devices driver support (RAID and LVM) <*> Device mapper support <*> Crypt target support
Device Drivers->Block-devices-> <*> Loopback device support
Cryptographic options-> <*> AES cipher algorithms
loopback fileを(必要なら)用意する
dd if=/dev/urandom of=/home/sekrit bs=1M count=100
losetup /dev/loop0 /home/sekrit
パーティションをまるごと暗号化するなら/dev/loop0を/dev/hda3とかに読みかえる。
cryptsetup-luksのインストール:
emerge cryptsetup-luks
フォーマット:
cryptsetup -y lukuFormat /dev/loop0
YESって打った後パスワード入れる(2回)
んで、/dev/mapperエントリの作成:
cryptsetup lukdOpen /dev/loop0 hoge
ファイルシステムの作成とか:
mkreiserfs /dev/mapper/hoge mount /dev/mapper/hoge /where/to/mount
後始末:
umount /where/to/mount cryptsetup luksClose hoge losetup -d /dev/loop0 (うろ覚え)
参考
esmtp
esmtp を使ったローカル・外部宛メール配送設定
ローカル配送
esmtp の他に procmail 等の setuid された MDA が必要。
/etc/esmtprc:
# メール配送に procmail を使う mda = "/usr/bin/procmail -d %T"
/etc/procmailrc:
# 配送先に Maildir を指定 MAILDIR=$HOME/Maildir/ DEFAULT=$MAILDIR # sendmail コマンドとして esmtp を使う SENDMAIL=/usr/bin/esmtp # 配送先ユーザーの権限で動作 DROPPRIVS=yes # Date ヘッダが無ければ付加する :0fw * ! ^Date: | formail -a "Date: `date -R`"
esmtp は alias の設定ができないので、 root 宛のメールを一般ユーザーに転送したい場合は procmail 側で行う。
/root/.procmailrc:
:0 ! username
外部配送
~/.esmtprc:
mda = "/usr/bin/procmail -d %T" # 送信元メールアドレスごとの設定 identity = user@domain1.com hostname = mail.domain1.com:25 identity = user@domain2.org hostname = mx.domain2.org:587 username = "user" password = "secret"