これまで4~5年くらい、LOOX T-W70というノートPCを使っていました。CPUがCore Duo(Core2Duoでない)と非力なのですが、SSDに換装したりしてそれなりに使えていました。しかし、これまでに2回ほどキーボードの故障で修理に出しています。2度目の修理でさすがに限界を感じ、新しいノートPCを購入することにしました。 実は一度目の修理のときに、一時的な代替機としてhp Miniというネットブックの中古を1万5千円ぐらいで購入したのですが、CPUがVIA C7と非常に非力であまり役に立ちませんでした。メインメモリ2GBと1280×768ディスプレイという、ネットブックらしからぬポイントに目を奪われてしまったのが敗因です。 その後知人のyaegashiさんがThinkPad Edge E130を安く購入したというので、私も同じものを買いました。私も彼と同じく256MB mSATA SSDと8GB SODIMMx2を追加購入して使っていますが、値段を考えるとかなり満足しています。 大方の使用感についてはyaegashiさんのブログを見ていただければよいので、私が気になった点をいくつか書いてみます。 FnキーとCtrlキーが入れ替えられる 最初、キーボードの配置をみて絶望しました。一番左寄りにFnキーがあり、その隣にCtrlキーが配置されています。過去なんどかこれらの位置が入れ替わったノートPCを使ったことはありますが、自分の経験では左端にCtrlがある方が多かったです。これに慣れるのがいやだなあ、と思っていたらBIOSにこれらの入れ替え項目が用意されていることに気付き大歓喜でかえました。BIOSレベルでの変更なので、OSに関係なく入れ替えが効いています。 標準ではファンクションキーはFnキーと同時押しが必要 これも結構衝撃でした。画面の輝度調整、ボリューム調整などがFnキー不要で可能ではあるのですが、日本人ならF7キーなどはよく利用すると思います。ただ、これもBIOSで変更できるので安心です。 Insertを含むいくつかの特殊キーがない これはちょっと困りました。本当に「ない」のです。Fnとの組み合わせも見当たりませんでした。自分はペーストをよくShift+Insertで行うのでかなり痛いです。もしInsertを出力させる方法をご存じの方がいらっしゃったらコメントください。 ただ、ドラスティックに利用頻度の低いキーを排除したおかげで、Home/End/PageUp/PageDownといったよく使うキーがFnなしに入力できるようになっています。 SDカードスロットはカードがはみ出す これまで使っていたLOOX-T W80はSDカードがすっぽりおさまる形状だったのですが、E130はそうではありません。刺しっぱなしにして持ち歩くにはちょっと不安があります。まあでも我慢できないレベルではないです。 LEDインジケータがほとんどない 多分これが一番困るところです。あるのはThinkPadのロゴのiの点部分にある赤色LEDのみ。稼働中か、スリープ中か、電源OFFかということぐらいしかわかりません。HDDのアクセスランプもなく、バッテリー残量表示もありません。ソフトウェアで代用するしかないです。 VT-x対応 CeleronとはいえVT-xに対応しているので、VMwareやVirtualBoxを動かすには良いマシンです。 いろいろと利点欠点はありますが、全体的にコストパフォーマンスの良いマシンだと思います。これであと数年は戦っていこうと思います。 追記 (2015/1/8) 「ThinkPad X121eにはInsertキーがない!」こちらのブログによるとFn+Iで入力できるそうです。E220のマニュアルにも記載があるとのことでした。
NAT(masquerade)のログをとる
最近の社会情勢を鑑みて、知らないうちにマシンや回線が乗っ取られて悪事に使われた時の対策として、NATのログをとるようにしてみました。 自分はDebianマシンをルーターにしているので、iptablesでルールを一つ追加するだけで済みます。 FORWARDチェインにstateがNEWなもののみ記録をします。わかりやすいようにprefixを付けています。 しかしこれで十分かというとそうでもないですね。利用しているマシンの裏で悪さされたら通常利用と区別がつかないわけで…ルーター自体が乗っ取られてもアウトです。もうちょっといい方法がないか考えたいところです。
Software Freedom Day 2012
Software Freedom Day 2012にFSIJとして参加しました。 私はその中で「自由なデータ」について話をしました。しかし、「データ」というのは枠が広すぎて、十分にまとめきれなかったのが残念です。発表資料をsfd2012freedata.odpとして公開しておきます(slideshareにも置きました)。 発表のときは日本語コンピューティングを軸にした内容にしてみましたが、言語に依存しないけどドメスティックなもの、例えば地図などもあります。OpenStreetMapの活動には頭が下がります。 個人的にはスペルチェッカ、文法チェッカをどうにかしたいと昔から思っているのですが、自然言語処理の知識を体系的に学んでいないと難しそうです。
不安定なマシンを無理やり動かす(watchdog, memtest)
実家に設置してあるサーバがここのところ妙に挙動があやしく、いろいろ調べてみた結果どうもメモリがあやしい、という結論に至りました。しかしそのためだけに新幹線で名古屋まで帰ることも出来ず、しかも今ちょっと入院中なので、リモートで出来る限りのことをしてみました。 まずはsoftware watchdogの導入です。これは/dev/watchdogというデバイスをつくり、定期的に書き込みがあるかチェックして、一定時間(デフォルトは60秒)書き込みがなかったら再起動するというものです。チェックをするためのソフトウェアがDebianにはwatchdogという名前のパッケージであります。インストール時にdebconfでいくつか質問されます。私の設定は以下になります。 moduleは利用するwatchdogドライバのモジュール名で、software watchdogはsoftdogを指定します。watchdogデーモンが起動するときにこれがinsmodされます。runは自動起動するかどうかの設定、restartはアップグレード時に再起動をさせるかさせないかを指定します。下手に再起動させると、kernelがwatchdogがとまったと誤認識することがあるので、falseのほうが安全です。 次に/etc/watchdog.confを編集します。デフォルトではコメントアウトされているwatchdog-deviceの行を有効にします。 これで何かあってシステムがハングすると、再起動するようになります。ただし、ソフトウェア実装なので確実ではありません。 しかしそもそも不安定な原因がメモリにあるので、そこをなんとかしたいところです。昔はbadramというパッチがあって、問題のあるメモリ領域を手動で指定して使わないようにさせる、という方法があったのですが、今はもっといい方法があります。 Linux 2.6.26から導入されたkernel組み込みmemtestです。起動パラメータにmemtest=試行回数を指定することで、メモリのエラーをチェックしエラー領域を使わないよう動作します。 残念ながら、Debianデフォルトのカーネルでは有効になっていないので、 CONFIG_MEMTEST=yを.configに追加して自分でカーネルの再構築をする必要があります(make-kpkgを利用) 自作したカーネルパッケージをインストールしたら、カーネルパラメータを追加してやる必要があります。/etc/default/grubを編集します。 GRUB_CMDLINE_LINUXにmemtest=数値を指定して、テスト回数を指定してやります。この例では32回テストします。テストを増やせばエラーを発見する確立が高まりますが、当然起動には時間がかかります。手持ちのノートPCで試しに255を指定したところ、数分待っても終わる様子がないので完走させる前に止めてしまいました。 最後にupdate-grubを実行して、このパラメータをgrub.cfgに反映させてから再起動します。カーネルがエラーを発見すれば、dmesgに以下のような出力が出ます。 これで今のところ問題は起きていません。しかしこんな状態で利用し続けるのも問題なので、可能であればECCメモリーにでも乗せかえたいところです。
VirtualBoxと実マシンとでディスクI/Oの違いを確認
Windows上のVirtualBoxのLinuxが起動だけやたら遅いのはどうもBIOS経由のdisk I/Oが遅いんじゃなかろうか、と思って起動後の状態でベンチマークをとってみました。使ったのは、dbenchです。dbench 5で5並列でのアクセスをさせてみています。対象はraw diskを使ったVirtualBox環境とリアルブート環境です。 結果:VirtualBox Operation Count AvgLat MaxLat —————————————- NTCreateX 240151 0.576 482.564 Close 176257 0.051 28.976 Rename 10162 1.454 295.741 Unlink 48614 4.451 3611.593 Qpathinfo 217765 0.222 413.916 Qfileinfo 37911 0.055 32.303 Qfsinfo 39954 2.234 60.401 Sfileinfo 19542 0.550 388.175 Find 84199 0.672 1678.476 WriteX 118530 3.479 3651.417 ReadX 376109 0.185 1692.655 LockX… Continue reading VirtualBoxと実マシンとでディスクI/Oの違いを確認
Windons7のVirtualBoxでデュアルブート用のraw partitionにあるLinuxを起動させる
修理に出していたノートPCが帰ってきたので、せっかくだからと今までデュアルブートにしていたWinodws7/Linuxのうち、Linux側をWindows7のVirtualBoxからも起動できるようにしようと思い立ち、やってみました。 まず、raw diskを認識させるためのvmdkファイルを作成します。具体的な方法はVirtualBoxのマニュアルに記載されています。VMBoxManageコマンドを使い、サブコマンドinternalcommands createrawvmdkを発行します。ディスクに直接アクセスするため、管理者権限が必要です。スタートメニューのアクセサリからコマンドプロンプトを右クリックして、管理者として実行を選択して、コマンドプロンプトを開きます。 VirtualBoxの各種コマンドには通常パスが通っていません。そこをカレントディレクトリとし、下記のコマンドを実行します。 C:\Program Files\Oracle\VirtualBox>VBoxManage.exe internalcommands createrawvmdk ^ -filename C:\VBox\rawdisk.vmdk -rawdisk \\.\PhysicalDrive0 ^ -partitions 3 -filenameには、vmdkファイルのパスを指定します。すでにファイルが存在しているとエラーになるので注意してください。-rawdiskには、Windows形式のデバイス指定を実行します。\\.は自分のコンピュータを意味し、PhysicalDrive0は0番目に接続されたディスクを意味します。どのディスクが何番目にあるかはdiskpart.exeで確認できます。必要なら、Linuxの入っているパーティション番号も確認します。-partitionsオプションを指定すると、そのパーティション以外にはアクセスできなくなるvmdkが生成されるので安心です。 C:\>diskpart Microsoft DiskPart バージョン 6.1.7601 Copyright (C) 1999-2008 Microsoft Corporation. コンピューター: KARL DISKPART> list disk ディスク 状態 サイズ 空き ダイナ GPT ### ミック ———— ————- ——- ——- — — ディスク 0 オンライン 112 GB 0 B ディスク… Continue reading Windons7のVirtualBoxでデュアルブート用のraw partitionにあるLinuxを起動させる
OpenPGPの鍵でOpenSSHと接続する(GnuPG2利用)
OpenPGPの鍵は、GnuPG2に付属のgpg-agantと組み合わせると、sshの鍵としても利用が可能です。しかし、これに関する日本語の情報がどうもなさそうなので、ちょっとまとめてみます。GnuPG 2.0系を対象とします。2.1系はもっと扱いが楽そうなのですが、そちらはまだ開発版なので使っていません。 まず、自分自身のOpenPGPの鍵を用意します。普段からGnuPGを使っているなら、その鍵を利用できます。ない場合は新規に作成しましょう。もちろん、すでにGnuPG 2.0がインストールされていることが前提です。また、.gnupg/gpg.confにuse-agentを追加しておきましょう。 GnuPG – The GNU Privacy Guard Version 1.2 README GnuPG 鍵の作り方 – keysignparty-ja 次に、monkeysphereをインストールします。Debian stableならパッケージがあるのでaptで入れましょう。そして、ssh用のsubkeyを次のコマンドで生成します。 # 鍵長2048bitのRSA鍵を生成 $ monkeysphere gen-subkey -l 2048 subkeyの生成には時間とエントロピーが必要です。バックグラウンドで何か複雑な処理やdisk IOなどを発生させましょう。私の場合は、2GBぐらいのVorbis/Theoraファイルを適当にgrepさせていました。 今度はgpg-agentを起動します。gpg-agentはGnuPG2の一部ですが、Debianだとgpg-agentパッケージとして分離されていますので、これもaptで入れましょう。また、pinentryという、途中でパスフレーズを入力させるためのプログラムも必要です。tty向けのpinentry-curses, gtk2向けのpinentry-gtk2, qt/4向けのpinentry-qt/qt4パッケージがあります。環境に合わせて必要な方をいれましょう。 gpg-agentの引数は設定ファイル~/.gnupg/gpg-agent.confに書くことができます。以下は設定例です。 1行目はpinentry用のプログラムの指定です。環境に合わせて適切なものを選んでください。5行目は、GnuPG2が参照するための環境変数をファイルにも出力させるための設定です。6行目の設定は必須で、これを指定することでgpg-agentがssh-agentと同じ機能を提供してくれます。 ここまで設定したら、以下のコマンドを実行します(bash, zshの場合)。 $ eval `gpg-agent –daemon` これでgpg-agentがdaemonとして起動します。次に鍵の登録をします。これは普通にssh-addを実行すればよいです。OpenSSHの鍵があれば、普通にそれについてのパスフレーズも聞いてきます。この段階でOpenPGPの鍵も登録されます。登録されていることは、ssh-add -lで確認できます。 ハイライトされた部分がGnuPGの鍵です。パスフレーズは、必要になるときまで聞かれません。 ssh-add -Lを実行して、公開鍵を確認しましょう。 コメント部分にOpenPGPのidが書かれているのが公開鍵です。これをリモートホストの.ssh/authorized_keysに追記します。 あとは対象のサイトにsshで接続すると、pinentryプログラムが起動し、パスフレーズを要求してきますので、入力してログインしましょう。 DebianのGNOME2環境では、デフォルトでgpg-agentとは異なるagentが走っています。Programmierecke.NET – The Source of Programming Informationを参考にgnome-keyringを止めてください。 参考サイト SSH… Continue reading OpenPGPの鍵でOpenSSHと接続する(GnuPG2利用)
Android 2.x向けにL2TP/IPSecサーバ(openswan+xl2tpd)を設定する
前々から設定しかけてはうまくいかなかった、Android向けL2TP/IPSecがようやく動くようになったので、どんな設定をしたかをまとめてみます。対象はDebian squeezeです。 パッケージとして必要になるのは、openswanとxl2tpdです。これらをapt-get installします。 まずopenswanの設定をします。これはIPSecの実装の一つです。もともとFreeS/Wanというプロジェクトがあったのですが、その開発が止まったためforkしてできたのがOpenswanです。ほかにStrongswanという実装もあるようですが、ここでは触れません。 /etc/ipsec.confというファイルが存在しているので、それを編集します。冗長なコメントは消しています。 次に、L2TP向けの設定ファイル/etc/ipsec.d/l2tp-psk.confを新規に作成します。 次に、/etc/ipsec.secretsを編集します。ハイライトされた行を追加します。your-passwordを自分が設定したいパスワードにしてください。このパスワードがIPSec事前共有鍵になります。 次に、sysctl関連の設定をします。/etc/sysctl.d/for-ipsec.confファイルを作成し、以下のように設定します。自分はすべてのインターフェースに{accept,send}_redirectsを設定しています。各自のインターフェース名に合わせて設定してください。 ファイルを作成したら、sysctl -p /etc/sysctl.d/for-ipsec.confを実行してこのsysctl設定を有効化します。リブート時には/etc/init.d/procpsの中でこのファイルが自動的に読まれます。 ここで、一度ipsecを起動してみます。/etc/init.d/ipsec startして、ipsec verifyを実行してみてください。問題なければ以下のような出力が出ます。[NG]という出力があれば、何か設定に失敗していることになります。 ipsecはデフォルトでは自動起動になっていないので、insserv ipsecを実行して自動起動するようにしてください。 最後は、xl2tpdの設定です。/etc/xl2tp.confを以下のように設定します。 2行目で、ppp認証用のユーザー、パスワードを記述したファイル名を指定します。10,11行目でVPNに振るアドレスを指定します。各自にあったIPアドレスレンジを使ってください。16行目では、xl2tpdが起動するpppdの設定ファイル名を指定しています。うまく動かないときは、各種デバッグオプションを有効にしてみてください。 /etc/xl2tpd/l2tp-secretsは以下のように書きます。user, passwdは適切なものにしてください。 /etc/ppp/options.l2tpd.lnsの設定例は以下になります。 最初、MTU/MRUのサイズを指定しないで動かしていたら外部との通信がうまくいかなかったので、かなり小さめ(1280)にしています。16行目のネームサーバは適切なものに変更してください。 あとは/etc/init.d/xl2tpd restartを実行して、Android側の設定をしてゆきます。VPNのタイプはL2TP/IPSec PSK、VPNサーバ名とIPSec事前共有鍵(ipsec.secretsの値)を設定します。L2TPセキュリティ保護は無効にします。 あとは接続を実行し、l2tp-secretsに書いたユーザー名、パスワードを入力すれば接続できるはずです。設定がおかしいと、一瞬pppセッションが確立したあとすぐ切られる、というような状況が起きることがあるので気を付けてください。 知人から、これらに関していくつか助言をいただいています。 [blackbirdpie id=”237744346173153281″] ICSとOpenswanの組み合わせでは動かないことがあるようです。 [blackbirdpie id=”237735014954070016″] 新しいkernelにはopenl2tpというin-kernel l2tpモジュールがあるそうです。ただし、まだuserlandはDebianパッケージが(sidにも)ありません。 参考: AndroidスマートフォンからLinuxサーバにVPN接続する – いろいろwiki@princo.org 追記(2012/8/24): MS-CHAP-v2の脆弱性と攻撃ツールの流通が報告されていますが、pppの設定を見ての通り、L2TP/IPSecでもMS-CHAP-v2を使っています。暗号化されたトンネルの下でpppを確立するため、直ちに危険というわけではありませんが、PSK共有鍵方式だと安全とはいえないようです。 セキュリティ アドバイザリ 2743314 カプセル化されていない MS-CHAP v2 認証により、情報漏えいが起こる を公開 【注意喚起】MS-CHAPv2プロトコルの破綻 証明書ベースの接続(CRT VPN)の設定を今後は調べてみようと思います。
川崎でSoftware Freedom Day 2012イベント
来る9/15に川崎の専修大学 サテライトキャンパスにてSoftware Freedom Day連動イベントをやります。概要はFSIJの案内ページをご覧ください。 私は「自由なデータ」について、議論できればと思っています。以前から自由に使えるデータに関しては自分も関心があり、Flashでプレゼンテーション資料を作るという試みもしていました。その時に、自由に流用できるパーツ的なものがないことを残念に思い、せめて自分が作ったパーツぐらいは、と公開しています。まあでも、Flash自体がこのまま入滅しそうな情勢になってしまいましたね。 Flashで資料を作っていた当時はまだOpenOffice.orgもなく、Unix系技術者のプレゼンテーションはたいていMagic Pointが使われていました。Magic Point自体はそんなに悪いソフトウェアでもないのですが、利用感覚としてはLaTeXに近く、サクサクとテキストベースでソースをかける反面、凝ったレイアウトを作るのはちょっと大変でした。 OpenOffice.org以降はImpressを使えばよいので楽になりましたが、商用ソフトにあるような豊富なクリップアート、ステンシルなどがないのが残念です。 最近はプレゼンテーションを作るのにGoogle Presentationを使うことが増えています。しかしWebアプリは自由ソフトウェアでないのが難点です。SFDでは、アウトラインだけGoogle Presentationで書いています。あとでLibreOffice Impressにて整形することになりそうです。
私立プログラミングキャンプ参加 #upcamp
帰省する直前に、私立プログラミングキャンプに参加しました。もともと私は2008年の公式なプログラミングキャンプ講師をやっていたのですが、その後都合により参加できず、今年はとうとうプログラミングキャンプ自体がなくなってしまいました(それまではセキュリティキャンプと同時開催、というか名称が「セキュリティ&プログラミングキャンプ)。 Webにもあるように、過去のセキュリティ(&プログラミング)キャンプの参加者が主催されています。会場の確保等ファシリティの用意が大変だったと思いますが、ありがとうございます。 しかし、参加人数が多すぎたので会場のキャパシティが厳しく、私はLTで軽く話しただけで、夜にはかえってしまいました。なので、実質何もできていません。申し訳ないとは思いつつ、場を若い人に任せた方がいいかななと思っての処置です。 LTの発表資料は公開しています。実際に喋ったのは7ページ目まででした。