2012年4月7日土曜日

進学、そして引越し

研究生生活も終盤の2月に、これが最後のチャンスのつもりで受験した院試に合格。 これまで二十数年住み続けた山形県酒田市を離れ、神奈川県川崎市にお引越し。

今までは「文系大学生」から「文系研究生」だった訳だが、いつの間にか「情報系大学院生」に。 大学入学した時はまさかこんなことになるとは思ってもみなかった。

いろいろと不安が無いわけでもないが、せっかくの機会、無駄にしないよう頑張っていきたい。

2012年3月3日土曜日

Arch Linuxの野良リポジトリを作る

Arch Linuxはパッケージ更新が早くて新しもの好きには嬉しいディストリなのだが、 公式リポジトリにあるものでは少々物足りない場合がよくある。 AURも含めればかなりパッケージ量は増える のだが、EeePC等でパッケージビルド作業を行うのは少々辛い。

そこで、一度他のマシンで作製したパッケージを他のマシンでも利用できるように、 自前のリポジトリを構築してみようと思う。

HTTPサーバを用意

とりあえず公開用のHTTPサーバとディレクトリを用意する。 わざわざApacheやらnginxを準備するのは面倒くさいので、rubyでパッと作ってしまう。

miku@hatsune% ruby -r webrick -e "WEBrick::HTTPServer.new(:Port=>3939,:DocumentRoot=> '/var/repo').start"

終了する時はpkill -kill rubyで。

4/15追記: ruby1.9なら、以下のようにするとCtrl-cで終了できるようになるので楽。

miku@hatsune% ruby -r webrick -e "WEBrick::HTTPServer.new(:Port=>3939,:DocumentRoot=> '/var/repo').tap{|sv| trap(:INT){sv.stop}}.start"

パッケージを作成

AURのパッケージのビルド&インストールには、 yaourtを 普段利用している。yaourtでは、ほとんどpacmanと同様の操作感でAURのパッケージを 扱うことができる。 以下の例は、通常のリポジトリとAURのリポジトリを更新し、 mozcをインストールするものである。

miku@hatsune% yaourt -Syua
refresh & upgrade...
miku@hatsune% yaourt -S mozc
build & install...

この操作でmozcがビルド&インストールされ、/tmp/yaourt-tmp-miku/aur-mozc以下にパッケージ (ibus-mozc-1.3.975.102-2-x86_64.pkg.tar.xz, mozc-1.3.975.102-2-x86_64.pkg.tar.xz)ができている。 このパッケージをインストールする前に公開するリポジトリのディレクトリ(ここでは/var/repo)にコピーしておく。

4/15追記: /etc/yaoutrcを以下のように設定しておくとパッケージがPKGDESTで指定したディレクトリに追加される模様。

EXPORT=1
PKGDEST=/var/repo

リポジトリに追加

Archのリポジトリの管理には、repo-addコマンドを用いる。操作はいたって簡単。リポジトリのDBへのパスと リポジトリに追加するパッケージへのパスを引数に与え実行するだけ。

miku@hatsune% repo-add /var/repo/hachune.db /var/repo/mozc-1.3.975.102-2-x86_64.pkg.tar.xz

DBがまだ存在しない場合は自動的に作成される。これだけで、Arch Linuxのリポジトリとして機能するようになる。

リポジトリを利用

リポジトリが作成できたので、今度は別ホストからこのリポジトリを利用する。 これも単純で、/etc/pacman.confに以下を追加すればよい。

[hatsune]
Server = http://10.39.39.39:3939/

いつも通りpacman -Ss mozcすると…

miku@hachune% pacman -Ss mozc
hatsune/ibus-mozc 1.3.975.102-2 (mozc-im)
    IBus engine module for Mozc
hatsune/mozc 1.3.975.102-2 (mozc-im)
    A Japanese Input Method for Chromium OS, Windows, Mac and Linux (the Open
    Source Edition of Google Japanese Input)

mozcをリポジトリ上のパッケージとして利用することができるようになった。

もしかしたらもっと便利な方法があるのかもしれないが、 とりあえずこれでもそれなりに楽なのでよしとしておくことにする。 またパッケージの署名も可能なようだが、今は気にしない。

2012年1月30日月曜日

NetBSDでぷららのIPv6を利用する

昨年IPv4アドレスが枯渇すると同時にふつうのプロバイダでもじわじわと対応が始まった ネイティブIPv6接続機能。我が家でサブ回線として利用していた plalaでも提供されていたが、 ようやく自宅側の環境が整いつつあるので今になって試してみた。

「IPv6にはIPv6対応トンネルアダプタが 必要!」なんて書いてあるが、そんなもんいらねぇんじゃねーの?、ということの確認も兼ねて。

dhcp6cを用意

plalaのIPv6ではPPPoE接続しDHCPv6でアドレスブロックを取得する。 そこで、DHCPv6クライアントをpkgsrcからビルドする。

# cd /usr/pkgsrc/net/wide-dhcpv6
# make install clean
# megurine$ dhcp6c    
usage: dhcp6c [-c configfile] [-dDfi] [-p pid-file] interface [interfaces...]

あっさりと終了。

PPPoEを設定

PPPoE接続の設定はIPv4と同じだが、plalaのIPv6ではIPv4とは異なるログイン IDが必要になる。(詳細: http://www.plala.or.jp/ipv6/access/flow/) パスワードはIPv4と同じでよいらしい。 我が家の場合は光ホームなのでユーザID + @v6h.plala.or.jpとなる。 今回設定した/etc/ifconfig.pppoe1は以下の通り。

create
! /sbin/ifconfig re0 up
! /sbin/pppoectl -e re0 pppoe1
! /sbin/pppoectl pppoe1 myauthproto=chap \
  myauthname=ユーザID@v6h.plala.or.jp \
  myauthsecret=パスワード max-auth-failure=0
up

pppoecfg pppoe1コマンドを実行してphaseがnetworkになっていれば、 接続が確立されている。

megurine$ sudo pppoectl pppoe1
Password:
pppoe1: phase=network
        myauthproto=chap myauthname="ユーザID@v6h.plala.or.jp"
        lcp timeout: 1.000 s
        idle timeout = disabled
        max-auth-failure = 0
        max-noreceive = 15 seconds
        max-alive-missed = 3 unanswered echo requests

pf.confの編集

IPv6でもパケットフィルタは必要、ということでpf.confをIPv6用に設定し直す 必要がある。アドレスの取得にはDHCPv6を用いるので、以下のポートについて検討する 必要があるようだ。

dhcpv6-client   546/tcp    # DHCPv6 Client
dhcpv6-client   546/udp    # DHCPv6 Client
dhcpv6-server   547/tcp    # DHCPv6 Server
dhcpv6-server   547/udp    # DHCPv6 Server

細かいルールは環境や管理者のポリシーによって異なるので、dhcp6cを実行しつつtcpdumpで様子を 見ながら設定を変更すればいいんじゃないかなぁ、と思う(ぇ

21:34:20.077819 PPPoE  [ses 0x3a6f] IP6 fe80::21b:21ff:fec6:d3bc.546 > ff02::1:2.547: dhcp6 solicit
21:34:20.099950 PPPoE  [ses 0x3a6f] IP6 fe80::90:1a00:41a3:dd40.547 > fe80::21b:21ff:fec6:d3bc.546: dhcp6 advertise
21:34:21.088076 PPPoE  [ses 0x3a6f] IP6 fe80::21b:21ff:fec6:d3bc.546 > ff02::1:2.547: dhcp6 request
21:34:21.111510 PPPoE  [ses 0x3a6f] IP6 fe80::90:1a00:41a3:dd40.547 > fe80::21b:21ff:fec6:d3bc.546: dhcp6 reply

リンクローカル・マルチキャストな送信とリンクローカルなユニキャストへの送受信について、 許可が必要な感じ…だろうか。

dhcp6c.confの編集

DHCPv6クライアントは設定が必須のようなので、/usr/pkg/share/examples/wide-dhcpv6/dhcp6c.conf やgoogle先生を参考に/usr/pkg/etc/dhcp6c.confを作成する。IPv4のPPPoE接続ではpppoeデバイス自体に アドレスが割り当てられていたが、DHCPv6ではprefixを割り当てるデバイスを指定する模様。ここではwm0 とした。

interface pppoe1 {
        send ia-pd 0;
};

id-assoc pd {
        prefix-interface wm0 {
                sla-id 1;
                sla-len 0;
        };
};

設定ファイルの作成が終わりPPPoE接続が確立されているなら、 # dhcp6c pppoe1のようにDHCPv6クライアントを起動する。

ルートの設定

DHCPv6でアドレスをwm0に割り当てることができたのだが、dhcp6c.confの書き方が悪いのかルートも resolv.confも設定されなかった。仕方が無いのでpppoe1へデフォルトルートを手動で割り当てる。

sudo route add -inet6 default -iface fe80::21b:21ff:fec6:d3%pppoe1

とりあえず通信をテスト。

megurine$ ping6 -c 3 ipv6.google.com 
PING6(56=40+8+8 bytes) 2400:7800:4000:d00:21b:21ff:fec6:d3bc --> 2404:6800:4004:805::1012
16 bytes from 2404:6800:4004:805::1012, icmp_seq=0 hlim=55 time=44.717 ms
16 bytes from 2404:6800:4004:805::1012, icmp_seq=1 hlim=55 time=44.804 ms
16 bytes from 2404:6800:4004:805::1012, icmp_seq=2 hlim=55 time=44.897 ms

--- ipv6.l.google.com ping6 statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 44.717/44.806/44.897/0.090 ms

比較用に、月1000円固定IPv4アドレスの某プロバイダのほうもテスト。

megurine$ ping -c 3 www.google.com   
PING www.l.google.com (74.125.235.144): 56 data bytes
64 bytes from 74.125.235.144: icmp_seq=0 ttl=54 time=19.173 ms
64 bytes from 74.125.235.144: icmp_seq=1 ttl=54 time=19.139 ms
64 bytes from 74.125.235.144: icmp_seq=2 ttl=54 time=19.429 ms

----www.l.google.com PING Statistics----
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 19.139/19.247/19.429/0.159 ms

サーバが違うのかv6のほうが応答速度が圧倒的に遅くなってしまった。

IPv6といえばkame.net。kame.netに打ってみる。

megurine$ ping6 -c 3 orange.kame.net
PING6(56=40+8+8 bytes) 2400:7800:4000:d00:21b:21ff:fec6:d3bc --> 2001:200:dff:fff1:216:3eff:feb1:44d7
16 bytes from 2001:200:dff:fff1:216:3eff:feb1:44d7, icmp_seq=0 hlim=54 time=33.162 ms
16 bytes from 2001:200:dff:fff1:216:3eff:feb1:44d7, icmp_seq=1 hlim=54 time=36.307 ms
16 bytes from 2001:200:dff:fff1:216:3eff:feb1:44d7, icmp_seq=2 hlim=54 time=33.538 ms

--- orange.kame.net ping6 statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 33.162/34.336/36.307/1.718 ms
megurine$ ping -c 3 orange.kame.net  
PING orange.kame.net (203.178.141.194): 56 data bytes
64 bytes from 203.178.141.194: icmp_seq=0 ttl=48 time=32.123 ms
64 bytes from 203.178.141.194: icmp_seq=1 ttl=48 time=31.671 ms
64 bytes from 203.178.141.194: icmp_seq=2 ttl=48 time=31.441 ms

----orange.kame.net PING Statistics----
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 31.441/31.745/32.123/0.347 ms

ついでにipv6.2ch.netにも打ってみる。

megurine$ ping6 -c 3 ipv6.2ch.net
PING6(56=40+8+8 bytes) 2400:7800:4000:d00:21b:21ff:fec6:d3bc --> 2407:3000:6:175::12
16 bytes from 2407:3000:6:175::12, icmp_seq=0 hlim=55 time=22.456 ms
16 bytes from 2407:3000:6:175::12, icmp_seq=1 hlim=55 time=22.704 ms
16 bytes from 2407:3000:6:175::12, icmp_seq=2 hlim=55 time=22.587 ms

--- ipv6.2ch.net ping6 statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 22.456/22.582/22.704/0.124 ms
megurine$ ping -c 3 ipv6.2ch.net  
PING ipv6.2ch.net (125.6.175.12): 56 data bytes
64 bytes from 125.6.175.12: icmp_seq=0 ttl=54 time=19.327 ms
64 bytes from 125.6.175.12: icmp_seq=1 ttl=54 time=19.542 ms
64 bytes from 125.6.175.12: icmp_seq=2 ttl=54 time=19.863 ms

----ipv6.2ch.net PING Statistics----
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 19.327/19.577/19.863/0.270 ms

v4もv6もほぼ変わらない値に。6to4などに比べればやはりかなり速くなった。難点は固定IPv6アドレスではないってことだけなのだが…また固定オプションはv4同様 お高いプランになるのだろうか…。対応しているルータさえあれば実は要らなかったトンネルアダプタ といい、こういうところがあざといなぁと思わざるを得ない。

2011年12月24日土曜日

Solaris 11でmikutter用ruby環境を構築する

pkgsrcがうまくいかずぐぬぬしていたので、気をとり直してmikutterを動かしてみることにした。 ただ、ホストがXServerを動かせるような環境では無いので、sshでXをforwardして起動する。 また、リポジトリにはruby1.8.7しか無いため、ruby1.9.3はソースからビルドする。

pkg install gcc
pkg install system/header
pkg install library/desktop/gtk2
pkg install x11/session/xauth
pkg install system/font/truetype/ipafont
wget ftp://ftp.ruby-lang.org/pub/ruby/ruby-1.9.3-p0.tar.gz
tar xzf ruby-1.9.3-p0 && cd ruby-1.9.3-p0
./configure --prefix=/usr/ruby && make && make install
/usr/ruby/bin/gem install gtk2

だいたいこんな感じでmikutterを実行できるruby環境が出来上がる。 あとはいつも通りmikutterをcheckoutして実行すればよい。

Solaris 10(SPARC)の時はやたら苦労したのに、 今回はすんなり通ってしまいあっさり終わってしまった。