筆者について
FreeBSDを通じてOSSにささかな貢献を。
- 日本xrdpユーザ会発起人
- xrdp developer
- FreeBSD developer
OSS活動をご支援いただける方を募集しています
2011-03-01 FreeBSDでFlashを使う
■ FreeBSD 8.2-RELEASEでFlash10を使う
上の記事を執筆時点の情報に合わせて直しただけのものです。FreeBSDのLinuxエミュレーション機能を利用してLinux版のFlashを動かします。
Linuxエミュレータの用意
Linuxエミュレーション機能を使用するので、カーネルモジュールをロードしておく必要があります。
# kldload linux
起動時に自動的にロードにさせるには、/etc/rc.conf に以下のように記述します。
linux_enable="YES"
Linuxのベースシステムをインストールします。portmasterでもportinstallでもmakeでも好きな方法で。
# cd /usr/ports/emulators/linux_base-f10; make install
flashplugin, nspluginwrapper のインストール
好きな方法でportsからインストール。
# cd /usr/ports/www/linux-f10-flashplugin; make install # cd /usr/ports/www/nspluginwrapper-devel; make install
プラグインをFirefoxに組み込む
$ nspluginwrapper -v -a -i
これでダメな場合は
$ nspluginwrapper -i /usr/local/lib/npapi/linux-f10-flashplugin/libflashplayer.so
とします。
2011-02-11 vimユーザー養成ギプス
■ vimユーザ養成ギプス
vi/vim でカーソルキーを使っちゃうようなニワカはこうだ!
$HOME/.vimrc に以下のように記述しましょう。
noremap <unique> <Up> :<C-U>qall!<CR> noremap! <unique> <Up> <Esc>:qall!<CR> noremap <unique> <Down> :<C-U>qall!<CR> noremap! <unique> <Down> <Esc>:qall!<CR> noremap <unique> <Left> :<C-U>qall!<CR> noremap! <unique> <Left> <Esc>:qall!<CR> noremap <unique> <Right> :<C-U>qall!<CR> noremap! <unique> <Right> <Esc>:qall!<CR>
本当はUNIXカテゴリにしたかったんだけど、FreeBSDとLinuxとUNIXカテゴリがあると使いわけに困るのでまあこれで。
2011-02-08 TwitterDM同報ぼっと
■ TwitterDM同報ぼっと: metadcaster
TwitterのDMを同報送信するスクリプトを作りました。実行にはRuby1.9系が必要です。ダウンロードはこちら。
仲間内での連絡用アカウント(鍵つき)を用意してDMを送る用途を想定しています。
連絡用アカウント (@search) -- @retweets -- @home -- @lists -- @about -- @privacy
連絡用のアカウント @search にDMを送ると、@search をフォローしている @retweets, @home, @lists, @about, @privacy の5人にDMが同報されます。 @search のフォロワー全員にDMが同報されるので @search は鍵つきにしておくことをお薦めします。
使用方法はREADMEに書いています。
初期設定: 以下の2つのファイルを用意してください。
・$HOME/.metabotrc
・./config.rb
初回起動時だけ環境変数 DRY_RUN をセットして実行してください。
受信済みのDMを同報しないように記憶します。
例: $ DRY_RUN=yes ruby19 ./metadcaster.rb
実際の使用の際にはcronなどで定期実行するようにして使用します。
*/5 * * * * /usr/bin/env ruby19 /path/to/metadcaster.rb
== $HOME/.metabotrc: めたぼっとフレームワークの設定ファイル
# OAuth 関連のキーを取得して設定してください。
CONSUMER_KEY = ''
CONSUMER_SECRET = ''
ACCESS_TOKEN = ''
ACCESS_TOKEN_SECRET = ''
== config.rb: 設定ファイル
MY_SCREEN_NAME #=> 自分(同報DMの送信元になるアカウント)の
# スクリーンネームを設定してください。
# MY_SCREEN_NAME = "privacy"
#
EXCLUDE_RECIPIENTS #=> metadcasterはフォロワー全員に同報DMを送信します。
# 同報DMを送信したくないアカウントのスクリーンネームを
# 設定してください。
# EXCLUDE_RECIPIENTS = ["null", "privacy"]
== twstore.yaml: 処理済みDMを記憶しておくファイル
# 存在しなければ自動的に生成されます。
CONSUMER_KEYやACCESS_TOKENの取得方法は以下のページなどを参照してください。
--
追記: ライセンスはGPLv3にします。著作権表示はそのうち差し替えます。
Tue Feb 8 22:41:39 JST 2011
2010-12-20 PortForwarding for radiko.jp
■ radiko.jp を地域外で聴くためのトンネリング (2010年12月のリニューアル rev.2)
12月4日の日記で2010年12月1日に行われたradikoのリニューアルに対応しましたが、対応が不完全でしたので訂正します。
12月1日にリニューアルが行われ、この記事を書いている現在ではradikowを聴くために必要なサーバは以下の2つのようです。前者が主にWebページを配信し、後者が音声ストリームを配信するサーバです。再生中の通信を監視したところ、転送すべきポートは以下のようでした。
- 219.103.34.226 (radiko.jp)
- 80/tcp
- 443/tcp
- 8935/tcp
- 8936/tcp
- 8937/tcp
- 219.103.34.224 (radiko.smartstream.ne.jp)
- 80/tcp
- 1935/tcp
Webブラウザ、radiko_player_air、radikker、ラジ朗など、聴取に利用するアプリによって必要なポートが異なる(全てのポートを転送しなくても聴ける)ようですが、ひとまずこれだけ転送しておけばどの環境でも聴けるようです。
SSH用のシェルスクリプトとipfw用のルールは気が向いたら更新します。
■ radiko SSHポート転送用シェルスクリプト & ipfw 用ルール
いずれも一例です。
SSH用シェルスクリプト
#!/usr/local/bin/bash
if [ `ps xwww|grep radiko_autologin|wc -l` -eq 0 ]; then
echo "Making Radiko Tunnel..."
ssh chiba.example.jp -l user -N -f \
-L10080:219.103.34.226:80 \
-L10443:219.103.34.226:443 \
-L18935:219.103.34.226:8935 \
-L18936:219.103.34.226:8936 \
-L18937:219.103.34.226:8937 \
-L10081:219.103.34.224:80 \
-L21935:219.103.34.224:1935 \
-i /path/to/.ssh/radiko_autologin
else
echo "Radiko Tunnel is alive."
fi
ipfw 用フォワーディングルール
40000 fwd 127.0.0.1,10080 tcp from ${inet}:${imask} to 219.103.34.226 dst-port 80
40000 fwd 127.0.0.1,10443 tcp from ${inet}:${imask} to 219.103.34.226 dst-port 443
40000 fwd 127.0.0.1,18935 tcp from ${inet}:${imask} to 219.103.34.226 dst-port 8935
40000 fwd 127.0.0.1,18936 tcp from ${inet}:${imask} to 219.103.34.226 dst-port 8936
40000 fwd 127.0.0.1,18937 tcp from ${inet}:${imask} to 219.103.34.226 dst-port 8937
40000 fwd 127.0.0.1,10081 tcp from ${inet}:${imask} to 219.103.34.224 dst-port 80
40000 fwd 127.0.0.1,21935 tcp from ${inet}:${imask} to 219.103.34.224 dst-port 1935
2010-12-10 ruby19-iconv
■ lang/ruby19 と converters/ruby-iconv の関係
FreeBSDでTwiProwlなどのruby1.9を必要とするソフトウェアを実行しようとすると、以下のようなエラーが出る場合があります。
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load --
iconv (LoadError)
from <internal:lib/rubygems/custom_require>:29:in `require'
from /usr/local/lib/ruby/1.9/json/common.rb:2:in `<top (required)>'
from <internal:lib/rubygems/custom_require>:29:in `require'
from <internal:lib/rubygems/custom_require>:29:in `require'
from /usr/local/lib/ruby/1.9/json.rb:1:in `<top (required)>'
from <internal:lib/rubygems/custom_require>:29:in `require'
from <internal:lib/rubygems/custom_require>:29:in `require'
from twiprowl:16:in `<main>'
見ての通りiconvのロードに失敗しているだけなので、本来はportsからconverters/ruby-iconvをインストールすればOKなはずです。しかし、単に
cd /usr/ports/converters/ruby-iconv && make install
としたのでは下記のようにruby1.8用のものがインストールされてしまいます。
$ sudo make install ===> License check disabled, port has not defined LICENSE ===> Extracting for ruby18-iconv-1.8.7.302,1 ===> ruby18-iconv-1.8.7.302,1 depends on file: /usr/local/bin/ruby18 - found /bin/mkdir -p /usr/ports/converters/ruby-iconv/work /bin/ln -sf /usr/ports/lang/ruby18/work/iconv /usr/ports/converters/ruby-iconv/work/ ===> Patching for ruby18-iconv-1.8.7.302,1
直接extconfなどを実行してruby1.9用のiconvをインストールしている記事もありますが、これは正攻法ではありません。RUBY_DEFAULT_VER環境変数をセットして以下のようにビルドするのが正解です。
cd /usr/ports/converters/ruby-iconv && make RUBY_DEFAULT_VER=1.9 install
とするとruby1.8用のiconvとruby1.9用のiconvを別々のパッケージとして共存させてインストールすることが可能です。
$ pkg_info| grep iconv | grep ruby ruby18-iconv-1.8.7.302,1 An iconv wrapper class for Ruby ruby19-iconv-1.9.2.0,1 An iconv wrapper class for Ruby
どうしてこうなるのかの秘密は、ruby-iconvのMakefileと8-12行目あたりと、/usr/ports/Mk/bsd.ruby.mkの139-142行目にあります。
これは他の多くの ruby-* というportに対しても有効です。
2010-12-04 PortForwarding for radiko.jp
■ radiko.jp を地域外で聴くためのトンネリング (12月1日のリニューアルに対応)
2010年12月1日のradikoのリニューアルで、フォワーディングの設定変更が必要になりました。
radiko.jp のAレコードが変更になったためです。以前は3つのIPアドレスがDNSラウンドロビンで運用されていました。
;; ANSWER SECTION: radiko.jp. 264 IN A 210.172.41.85 radiko.jp. 264 IN A 210.172.41.88 radiko.jp. 264 IN A 210.172.41.91
12月1日より下記のように変更されています。
;; ANSWER SECTION: radiko.jp. 194 IN A 219.103.34.226
変更点は 210.172.41.80/28 に転送していたパケットの転送先が 219.103.3.226 になった点だけのようです。
これをふまえて、SSHポートフォワーディングのスクリプトは以下のように変更になりました。
--- radiko.sh 2010-12-04 03:37:13.000000000 +0900
+++ radiko.sh.old 2010-12-04 03:32:43.000000000 +0900
@@ -2,9 +2,9 @@
if [ `ps xwww|grep radiko_tunnnel|wc -l` -eq 0 ]; then
echo -n 'Making Radiko Tunnel...'
ssh chiba.example.jp -N -f \
- -L10080:219.103.34.226:80 \
+ -L10080:210.172.41.88:80 \
-L11935:219.103.32.110:1935 \
- -L18935:219.103.34.226:8935 \
+ -L18935:210.172.41.88:8935 \
-i /path/to/.ssh/radiko_tunnel \
&& echo 'OK!'
else
ipfwによるIPフォワーディングの設定例は下記のようになります。
ipfw add 40000 fwd 127.0.0.1,11935 tcp from any to 219.103.32.110 dst-port 1935 ipfw add 40000 fwd 127.0.0.1,10080 tcp from any to 219.103.34.226 dst-port 80 ipfw add 40000 fwd 127.0.0.1,18935 tcp from any to 219.103.34.226 dst-port 8935
以前の radiko.jp 地域外聴取についての記事はこちらです。
2010-10-24 シンクライアント
■ FreeBSDでRDPシンクライアントの作成
FreeBSDでRDPシンクライアントを作成したときのまとめです。
FreeBSDを最小構成でインストール後、X11サーバが使用できる状態にしておきます。
今回はログインマネージャにSLiMを使用します。また、サーバにはRDPで接続するのでrdesktopもインストールします。
# pkg_add -r slim rdesktop
/etc/ttys を下記のように編集します。SLiMの起動方法については/usr/local/etc/rc.d/slim にも解説があります。
-ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure +ttyv8 "/usr/local/bin/slim" xterm on secure
SLiMは大変シンプルなログインマネージャなので $HOME/.xinitrc 以外を参照することはほとんどありません。シンクライアントとして動作させるためには、SLiMからログインしたセッションでrdesktopを自動起動させる必要があります。
rdesktopを起動させるために $HOME/.xinitrc の代わりとなるスクリプトを作成します。下記のファイルを適当な場所に保存します。今回は /usr/local/bin/startrdesktop としました。作成したら実行権を付けておくのを忘れずに。
#!/bin/sh # rdesktop を英字配列、フルスクリーンで起動する。 exec rdesktop -k en-us -f rdp.example.jp
次に /usr/local/etc/slim.conf を変更して、SLiMでログインしたらこのスクリプトが実行されるように変更します。
-login_cmd exec /bin/sh -login ~/.xinitrc %session +login_cmd exec /bin/sh - /usr/local/bin/startrdesktop %session
以上で完成です。init(8)にSIGHUPを送ればSLiMが起動してログイン画面が現れます。SLiMでログインするとRDPクライアントがフルスクリーンで起動しているので、そこからさらにログインすればシンクライアントとして使用することができます。
補足
この設定ではシンクライアントとして使う端末にユーザアカウントが必要です。 rdesktopの起動をrc.localに書くことでユーザアカウントは不要となりますが、サーバやrdesktopをユーザ権限で動かすためにこのような方法を採っています。
実際に運用している環境では、シンクライアント端末のSLiMによる認証をリモートデスクトップ先のアカウントと統合しているので、同じアカウントでSLiMとリモートデスクトップの2回認証することでログイン可能にしています。
SLiMでPAM認証を行うためには /etc/pam.d/slim を適切に設定する必要があります。
2010-10-09 Update port: net/xrdp
■ Update port: net/xrdp (current cvs version)
オープンソースのリモートデスクトップサーバnet/xrdpのportをアップデートしました。 前回のsend-prで0.4系から0.5系へのアップデートをしてもらいましたが、当時のCVSスナップショットから1年を経て0.6系が登場しています。
今回は自ら最新CVS版のportの作成を行い、パッチを提出する形でアップデートを提出しました。現在コミット待ちです。
2010-09-30 P3:PeraPeraPrv
■ P3:PeraPeraPrvのFreeBSD向けport作成
TwitterクライアントのP3:PeraPeraPrvをFreeBSDでも簡単に使用するためにportを作成しました。
公式に配布されているjar版のアーカイブにはファイル名(P3_Jar.zip)にバージョン情報が含まれていないため、ファイル名を含めた形で再配布しています。 再配布にあたり作者の方の許可を頂いたため、FreeBSD Ports Collection に収録するための手続きを進めており、現在コミット待ちの状態です。
コミットされるまでは以下のアーカイブを展開して make install することでインストールできるのでお試し下さい。通常は /usr/local/bin/peraperaprv あたりにインストールされるでしょう。
- http://www.club.kyutech.ac.jp/~meta/freebsd/peraperaprv_4_291.tar
- http://www.club.kyutech.ac.jp/~meta/freebsd/peraperaprv_4_291.shar
GNOMEのショートカットも同時にインストールされます。[アプリケーション]->[ネットワーク]->[P3:PeraPeraPrv]あたりから起動可能でしょう。
勿論、パッケージとしてインストールされるのでアンインストールもパッケージとして行うことができます。
$ pkg_info | grep PeraPeraPrv PeraPeraPrv-4.291 A pure java twitter client
PeraPeraPrvがFreeBSD上で動作している様子はこちらです。
2010-09-21 PortForwarding for radiko.jp
■ radiko.jp を地域外で聴くためのトンネリング(改)
この記事は最新でない情報を含んでいます。最新の情報は2010年12月4日の記事を参照してください。
radiko.jpを地域外で聴取するためのトンネリングについては4月5日のエントリで紹介しましたが、度重なる仕様変更で新たにトンネリングすべきポートが現れました。 PCのブラウザでFlashを使用して聴取する分には問題ありませんが、iPhoneアプリの「ラジ朗」で聴取する際には8935番ポートもフォワードしなければいけないようです。
これをふまえてポートフォワーディングの設定を見直すと、
$ ssh chiba.example.jp -N -f \ -L 10080:210.172.41.88:80 \ -L 11935:219.103.32.110:1935 \ -L 18935:210.172.41.88:8935
SSHのポートフォワーディングの設定は上記のように、ipfwのIPフォワーディングの設定は、
ipfw add 40000 fwd 127.0.0.1,11935 tcp from any to 219.103.32.110 dst-port 1935 ipfw add 40000 fwd 127.0.0.1,10080 tcp from any to 210.172.41.80/28 dst-port 80 ipfw add 40000 fwd 127.0.0.1,18935 tcp from any to 210.172.41.80/28 dst-port 8935
上記のようになります。ルール番号はそれぞれの環境にあわせて修正してください。
また、トンネリングの為のSSH接続が切れた際に再接続するために以下のようなシェルスクリプトを作成しました。使用するにはパスワード入力なしでログインするためにパスフレーズなしの鍵でログインするように準備しておく必要があります。この例の場合は radiko_tunnel,radiko_tunnel.pub という鍵ペアを使用しています。
radiko.sh:
#!/usr/local/bin/bash
if [ `ps xwww|grep radiko_tunnnel|wc -l` -eq 0 ]; then
echo -n 'Making Radiko Tunnel...'
ssh chiba.example.jp -N -f \
-L10080:210.172.41.88:80 \
-L11935:219.103.32.110:1935 \
-L18935:210.172.41.88:8935 \
-i /path/to/.ssh/radiko_tunnel \
&& echo 'OK!'
else
echo "Radiko Tunnel is alive."
fi
そしてこのスクリプトを5分毎に実行するようにcrontabに
*/5 * * * * /path/to/radiko.sh
とでも書いておけば5分毎にSSH接続を監視し、切れていれば再接続してくれます。
Σ Noppi [Emacs の 鬼軍曹.el みたいなものですか。]
Σ meta [ほう。そういうのがあるんですね。Emacs使いではないので知りませんでした。]