Vyattaの設定をシェルスクリプトで行う。

Vyattaは通常configureコマンドで設定モードに入り、setコマンドを使って設定します。

$ configure
# set service ssh
# commit
# save

さて、同じような設定を複数設定する場合には、あとあと楽したいのでシェルスクリプトを書いておいてそれを実行するだけにしたいですよね。例えば、いくつかのVLANインタフェースに複数IPアドレスを設定したい場合、

#!/bin/sh

configure
for VLAN in $(seq 100 110)
do
    for IP in $(seq 100 150)
    do
        set interfaces ethernet eth0 vif $VLAN address 192.168.0.${IP}/24
    done
done
commit

というようにして、設定しようと思うわけです。でも、これはコケます。正解は Unofficial Vyatta Wikicli-shell-apiのドキュメントのModifying configuration にあります。上記のスクリプトは次のように書きなおします。

#!/bin/vbash

for VLAN in $(seq 100 110)
do
    for IP in $(seq 100 150)
    do
        ${vyatta_sbindir}/my_set interfaces ethernet eth0 vif $VLAN address 192.168.0.${IP}/24
    done
done
${vyatta_sbindir}/my_commit

ポイントは、

  1. shebangは/bin/shや/bin/bashではなくVyatta専用の/bin/vbashにしておく

  2. configureで設定モードに入るのはスクリプト外でやる

  3. setコマンドやcommitコマンドはではなく、 ${vyatta_sbindir}/my_set${vyatta_sbindir}/my_set コマンドを使う

の3点です。このスクリプトは、configureコマンドで設定モードに入ってから実行します。

$ configure
# ./setup-if.sh

VLANインタフェースの数が多いと設定に時間がかかりますが、無事設定できると思います。

設定が多すぎるとコケる件。

ちなみに、Static NAT, Destination NATを双方向に1対1で500ルール、Destination NAT用にVLANインタフェースに仮想IPアドレスを500程度設定しようとした際、setコマンドでの設定自体はさらに数倍に増えますが、これは300ルール程度設定しようとしたところで”Set failed”でコケてしまう、という問題にも遭遇しました。ちなみにその問題は、そもそも1対1に双方向NATさせるために1IPアドレスずつ設定するのではなく、同じネットマスクのネットワークアドレスを指定することことで解決しました。 1

1

Vyatta.comでレジストするとダウンロードできるPDFのドキュメントに書いていました…。orz

pythonでBTSの情報をゴニョゴニョする。

Debian/Ubuntu JP Advent Calendar 2011 がどうやら三日坊主にすらならない状態だったので、日付変わってしまいましたが急遽参加してみることにしました。Python関連のパッケージのメンテナンスをし始めたこともあるので、3日目のネタとしては、PythonでDebian’s Bug Tracking System(BTS)を扱う方法について紹介します。

通常、Debian’s BTSの情報を扱う場合、 Web サイトで行うか、RESTfulインタフェースを利用して検索、閲覧を行うか、 メールで情報を収集するかバグ情報を報告する か、メールインタフェースのラッパーとしてreportbugコマンドを使うのが一般的だと思います。 先日のemacsでのBTS用 の文面を生成するのもメールインタフェースを介してのバグ報告です。

今回のPythonのDebian BTSインタフェースは、Debian’s BTSのSOAPインタフェースを介してBTS情報をクエリすることができます。

インストール

利用するには、python-debianbtsパッケージをまずインストールしましょう。

$ sudo apt-get install python-debianbts

使用方法

使用するには、debianbtsパッケージをインポートします。

>>> import debianbts

試しに、 先日報告された、python-funcparserlibのバグ情報 をリスト形式で取得してみましょう。

>>> debianbts.get_bug_log(646645)
[{'body': u"Source: funcparserlib\nVersion: 0.3.5-1\nSeverity: serious\nTags: wheezy sid\nUser: debian-qa@lists.debian.org\nUsertags: qa-ftbfs-20111022 qa-ftbfs\n (snip) Delivered-To: submit@bugs.debian.org'}]

という感じでバグ情報を取得できます。加工するのも簡単ですね。是非いろいろやってみてください。

emacsでreportbug用の文面を生成する。

blockdiagが1.1になって、OrderedDictが使われるようになったようです。この機能を使うためには、pypiに公開されている ordereddict が必要で、実際blockdiagでもこれを使っているので、blockdiagのパッケージの前に、ordereddictをITPする必要が出てきました。 1

で、いつものようにreportbugを使ってITPしようとしたところ、

(snip)
What sort of request is this? (If none of these things mean anything to you, or you are trying to report a bug in an existing package, please press Enter to exit reportbug.)

1 ITP  This is an `Intent To Package'. Please submit a package description along with copyright and URL in such a report.
2 O    The package has been `Orphaned'. It needs a new maintainer as soon as possible.
3 RFA  This is a `Request for Adoption'. Due to lack of time, resources, interest or something similar, the current maintainer is asking for someone else to maintain this package.
       They will maintain it in the meantime, but perhaps not in the best possible way. In short: the package needs a new maintainer.
4 RFH  This is a `Request For Help'. The current maintainer wants to continue to maintain this package, but they needs some help to do this, because their time is limited or the
       package is quite big and needs several maintainers.
5 RFP  This is a `Request For Package'. You have found an interesting piece of software and would like someone else to maintain it for Debian. Please submit a package description
       along with copyright and URL in such a report.

Choose the request type: 1
Please enter the proposed package name: python-ordereddict
Checking status database...
Traceback (most recent call last):
  File "/usr/bin/reportbug", line 2194, in <module>
    main()
  File "/usr/bin/reportbug", line 1077, in main
    return iface.user_interface()
  File "/usr/bin/reportbug", line 1672, in user_interface
    self.options.http_proxy)
  File "/usr/bin/reportbug", line 513, in special_prompts
    return pkgprompts(package, bts, ui, fromaddr, timeout, online, http_proxy)
  File "/usr/lib/pymodules/python2.7/reportbug/debbugs.py", line 575, in handle_wnpp
    package, '0', timeout, http_proxy=http_proxy)):
  File "/usr/lib/pymodules/python2.7/reportbug/checkversions.py", line 197, in check_available
    stuff = get_versions_available(package, timeout, dists, http_proxy, arch)
  File "/usr/lib/pymodules/python2.7/reportbug/checkversions.py", line 126, in get_versions_available
    dist = utils.SUITES2DISTS.get(l[2], '')
IndexError: list index out of range

のようにreportbugがコケてしまいます。困ったねと思って、 ドキュメント を読んでみたら、emacs用にdebian-bugコマンドがあることを知りました。インストールしていなかったので、まずは sudo apt-get install debian-el としてインストール。

んで、emacsを起動して、 M-x debian-bug-wnpp を実行すると、reportbugと同じようにいくつか質問され、下記の文面をsubmit@bugs.debian.orgに送信。

From: Kouhei Maeda <mkouhei@palmtb.net>
To: Debian Bug Tracking System <submit@bugs.debian.org>
Subject: ITP: python-ordereddict -- recipe has big-oh performance
X-Debbugs-CC: Kouhei Maeda <mkouhei@palmtb.net>
Package: wnpp
Owner: Kouhei Maeda <mkouhei@palmtb.net>
Severity: wishlist


* Package name    : python-ordereddict
  Version         : 1.1
  Upstream Author : Raymond Hettinger
* URL or Web page : http://pypi.python.org/pypi/ordereddict
* License         : The MIT License
  Description     : recipe has big-oh performance
 collections.OrderedDict that works in Python 2.4-2.6. Drop-in
 substitute for Py2.7's new collections.OrderedDict. The recipe has
 big-oh performance that matches regular dictionaries (amortized O(1)
 insertion/deletion/lookup and O(n) iteration/repr/copy/equality_testing).
--text follows this line--

を消し忘れて何度か怒られ、なんとか 受け付けられました よ…。でも、上記だとno titleになってしまったので、

retitle 649895 ITP: python-ordereddict -- recipe has big-oh performance

でretitleしました…。 2

1

python2.7同梱のものは使ってないとのご指摘いただきました 。小宮さん、ありがとうございます。

2

retitleするのも宛先間違えてたし…。ダメだ、ワシ…。

KDDI iPhone 4Sに変更し、今月末でWiMAXを途中解約することにしました。

今年の6月にWiMAXに変更しました が、ほぼ6ヶ月経った今月で途中解約することにしました。

変更の理由はWiMAXが不便になってしまったこと。

主な理由は、通勤中にWiMAXがほとんど使えなくなってしまったことです。9月の転職に伴い通勤経路が京王線相模原線~京王本線~大江戸線から、南武線→田園都市線に変わったためです。大江戸線は当然WiMAXは使えませんが、京王線沿線は千歳烏山付近 1 と、笹塚~新宿間の地下以外はつながるので非常に快適でした。

一方、経路変更後は、東京都下ではWiMAXもほぼ大体つながるのですが、神奈川県に入った途端にほとんどつながらなくなります。稲田堤駅~武蔵溝ノ口駅の間でつながるのは数ヶ所程度でつながってもすぐ切れます。武蔵溝ノ口駅もホームに降りるとダメ。溝の口駅との乗り換えではつながるところもありますが、基本的にはほとんどつながらない場所の方が多いです。というか、神奈川県下の南武線でWiMAXがまともにつながるのは、ほぼ武蔵小杉よりもさらに川崎駅よりの数駅くらいです。田園都市線は多摩川越える時にはまったくダメですし、二子玉川駅も多摩川よりの車両に乗っているとほぼダメで、二子玉川を出るとすぐ地下に入ってしまうので、基本的に全滅です。しかも、WiMAXは圏外から復帰するのに、1~2分くらいかかるので、圏外が多い地域で使う、というのがそもそもダメですね。つながりさえすれば速いんですが…。

変更の他の理由。

Android端末、WiMAXルータ、webOS端末、auガラケーに、会社のガラケーと5台持ちとか重すぎますね…。テザリングできなくなるのでAndroidもwebOSも持ち歩く意味がなくなります…。自宅でのハック専用に格下げですね…。

今月までの月単位の通信費の再計算。

ということで、年間パスポート解除料(5,250円)を払ってでも解約した方がいいな、ということで今月末で解約することにしました 2 。WiMAXに変更した時点のエントリでは、

http://d.hatena.ne.jp/mkouhei/20110615/1308125793

  • auの携帯電話料金 967円

  • Wireless Gate + WiMAX 3,800円

  • 事務手数料 2,835円

  • Wireless Gate HotSpot+ 480円(6月のみ)

なので、事務手数料を12分割すると6月中は5,483円、7月以降は5,003円

と書いたので、ちょうど6ヶ月で解約する事になったので、これに年間パスポート解除料5,250円を加算すると、今月までの通信費は実質的に月6,115円になることになります。

解約後、au一本に。

これは選択肢が無く、au一択です。結婚当初にヨメとモメたキャリア問題も、今は昔の話。ヨメ方の親類がauを使っていて、ヨメの昔からの友人もauを使っている以上、ヨメがauから変更することはありえないので、ワシがヨメに合わせることで解決したこの問題を蒸し返すつもりは毛頭ないのでauに。そもそもつながりにくいという問題でWiMAXを解約するのに、つながらないSoftbankとかはありえないし、ワシの実家はDocomo使っているものの、スマホをDocomoでとかは高すぎます。通話も基本的にはヨメとしかしないので同じキャリアにしていないと意味ないですしね。

なぜAndroidではなくiPhoneにしたのか。

キャリアの提供するAndroid端末なんか使う気にならない、というのが最大の理由ですね。

  • 変なカスタマイズがされている(特にKDDIのAndroid端末は)

  • Androidのバージョン自体が古い 3

ということで、そんな変なAndroid使うくらいならiPhoneしかないね、ということでiPhone 4S 16GBモデルにしました。音楽聞かないので、容量そんなに必要ないですしね。ネットしながら通話できないとかいう話とかいくつかあるようですが、そもそもネットしながら通話なんかしたことないですし、メールのpush配信ができない、というのもそもそもキャリアのメールなんか使っていないので、GMailをPush配信できるように設定すれば良いだけなので、特に問題になりませんね 4

月額料金はどうなったか。

  • auの基本料金 980円

    • 明細のペーパーレスによる割引 -13円

  • IS NET(プロバイダ料金) 315円

  • ISフラット(パケット定額料金)

    • ISフラットiPhoneスタートキャンペーンにより4,980円

  • 機種変更による割引-1,750円

なので、2014年11月までは月額4,512円ということで、WiMAX & auガラケーよりも安くなりますね 5 。ノートPCでの通信ができなくなりますが、通勤時間の短縮&通勤電車で座れなくなったことによる電車内ハックができなくなったのでまぁええか、という感じですね。

1

ちなみにこのあたりは、別にWiMAXだけでなくKDDIもDocomoもつながりにくいんですけどね。地形的な問題でしょう。

2

このブログを書くまで、年間パスポート解除料が9,975円かかると思っていたのですが、 契約日が2011年6月16日以前だったので5,250円でした 。(単に自分が勘違いしてただけですが)予想外に安くて助かりましたね。

3

今の端末は2.3.6使っているので、わざわざ古いバージョンの端末に換えるとか無いでしょう。しかもキャリアの端末はAndroidのバージョンアップ自体がされるか分からない上、されたとしてもその計画自体が遅いですしね。

4

ちなみに、GMailのPush配信は、iPhone 4S、Android、webOSの順に通知がありますね。1秒以内の誤差なのでどれでも問題ありませんが。

5

2014年12月以降は6,262円ですがそこ頃はどうせまた買い換えているだろJK

OSC 2011 Tokyo/Fallに行ってきました。

案の定起きたら8時半で朝飯食べて、片付けて、朝風呂入って、急遽頼まれたAPTチートシートを印刷して、とやってたら自宅出たのが11時半。新宿寄ってからくるつもりでしたが、後回しにして先に明星大学で開催されているOSCに行ってきました。

今回のDebian勉強会のブースは、机の半分のスペースしかなく、今までのOSCで最も狭い。一方、隣のUbuntuのブースはまるまる机1つ分。なんでしょうね、この違いは。到着したときには12時半を回っていたので、GPGキーサインパーティ&CACertサイン会も、東京エリアDebian勉強会のセッションも終わっていたので、別段聞きたいセッションも無く、見たいブースも無かったので、任務(APTチートシートの印刷&届ける)完了した後は、学食で昼飯食べて、目的(Git本に岩松さんからサインをもらう)を果たし、オライリーブースで立ち読みしてたら謝辞に J Chris Anderson の名前が載っていたので、もしやと思ってパラパラめくって見たらCouchDBを活用した内容もあったので、これ↓と、

入門 ソーシャルデータ ―データマイニング、分析、可視化のテクニック

同じような分野だけどおもしろそうだったのでこれ↓

ビューティフルビジュアライゼーション

をIYHしました。

OSCにはだんだん行く意味がなくなってるなぁ…。