最新 追記

meta's blog - The Power To Serve

筆者について

FreeBSDを通じてOSSにささかな貢献を。

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カテゴリがあると使いわけに困るのでまあこれで。

本日のツッコミ(全2件) [ツッコミを入れる]

Σ Noppi [Emacs の 鬼軍曹.el みたいなものですか。]

Σ meta [ほう。そういうのがあるんですね。Emacs使いではないので知りませんでした。]


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
本日のツッコミ(全5件) [ツッコミを入れる]

Before...

Σ meta [ありがとうございます。結構見ている方がいるようですので近日中に追加します。]

Σ sara [ありがとう!!]

Σ 北国赤海老 [radikaの接続エラーでのアドレスが不明だったので参考になりました。]


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 地域外聴取についての記事はこちらです。

本日のツッコミ(全1件) [ツッコミを入れる]

Σ ひで [PortForwarderの設定例も書いてください。お願いします。]


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 あたりにインストールされるでしょう。

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接続を監視し、切れていれば再接続してくれます。