研究生生活も終盤の2月に、これが最後のチャンスのつもりで受験した院試に合格。 これまで二十数年住み続けた山形県酒田市を離れ、神奈川県川崎市にお引越し。
今までは「文系大学生」から「文系研究生」だった訳だが、いつの間にか「情報系大学院生」に。 大学入学した時はまさかこんなことになるとは思ってもみなかった。
いろいろと不安が無いわけでもないが、せっかくの機会、無駄にしないよう頑張っていきたい。
研究生生活も終盤の2月に、これが最後のチャンスのつもりで受験した院試に合格。 これまで二十数年住み続けた山形県酒田市を離れ、神奈川県川崎市にお引越し。
今までは「文系大学生」から「文系研究生」だった訳だが、いつの間にか「情報系大学院生」に。 大学入学した時はまさかこんなことになるとは思ってもみなかった。
いろいろと不安が無いわけでもないが、せっかくの機会、無駄にしないよう頑張っていきたい。
Arch Linuxはパッケージ更新が早くて新しもの好きには嬉しいディストリなのだが、 公式リポジトリにあるものでは少々物足りない場合がよくある。 AURも含めればかなりパッケージ量は増える のだが、EeePC等でパッケージビルド作業を行うのは少々辛い。
そこで、一度他のマシンで作製したパッケージを他のマシンでも利用できるように、 自前のリポジトリを構築してみようと思う。
とりあえず公開用の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をリポジトリ上のパッケージとして利用することができるようになった。
もしかしたらもっと便利な方法があるのかもしれないが、 とりあえずこれでもそれなりに楽なのでよしとしておくことにする。 またパッケージの署名も可能なようだが、今は気にしない。
昨年IPv4アドレスが枯渇すると同時にふつうのプロバイダでもじわじわと対応が始まった ネイティブIPv6接続機能。我が家でサブ回線として利用していた plalaでも提供されていたが、 ようやく自宅側の環境が整いつつあるので今になって試してみた。
「IPv6にはIPv6対応トンネルアダプタが 必要!」なんて書いてあるが、そんなもんいらねぇんじゃねーの?、ということの確認も兼ねて。
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接続の設定は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
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
リンクローカル・マルチキャストな送信とリンクローカルなユニキャストへの送受信について、 許可が必要な感じ…だろうか。
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同様 お高いプランになるのだろうか…。対応しているルータさえあれば実は要らなかったトンネルアダプタ といい、こういうところがあざといなぁと思わざるを得ない。
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)の時はやたら苦労したのに、 今回はすんなり通ってしまいあっさり終わってしまった。