彷徨えるフジワラ

年がら年中さまよってます

Mac mini の環境整備

Mercurial の日本語対応に関して、文字大小を認識しないファイルシステム上での不具合を修正するために投げた僕のパッチに、cp932 (いわゆる SJIS ね) なファイル名を使用するテストが含まれていたのだが、どうやら非日本語環境な Windows では期待通りに動作しないことが判明。

ところが、同じ条件でも、Mac OS X ではテストが通ってしまうとのこと。

この問題に関しては、とりあえずテスト側での確認事項が不十分だったことが判明したのだが、Mac OS Xファイルシステム (HFS+) は、文字大小の判別が出来ない上に、どうも挙動が独特っぽい。

# ちなみに、件のテストは Matt によって hg remove されました ... orz

先日の SCMBootCamp in Tokyo 2 でも、多くの参加者が GUI を使っていて、演習のアシスタントとして参加するには、GUI ツールに関しても有る程度習熟する必要を感じたのだが、TortoiseHg は普段使いの Windows 環境で何とかなるけれど、Mac 上の GUI ツールに関しては、そもそも Mac OS 環境が無いと話にならない。

元々、DTrace の挙動確認用に Mac OS 環境が欲しいなぁ、と思っていたものの、流石に DTrace のためだけに Mac ってのもなぁ、と購入を躊躇していたのだが、どうやらこれで大義名分が立ったかな?っていうか、自分への言い訳完了ですか?(笑)

そーゆーわけで、Mercurial のパッチをヒーコラ言いながら作る脇で、早速購入手続きを。
基本的には、SSH でリモートログイン主体な使用を想定しているので、book ではなく mini を購入。値段も安いしね。

同じ mini でも 2.5GHz モデルとかサーバーモデルとかの選択肢があるけれど:

  • データ処理用途で酷使するわけではないので、CPU は 2.3GHz で十分
  • グラフィック用途で酷使するわけではないので、GPU は CPU 内臓型で十分
  • メモリ増設はバルク品を購入したほうが絶対に安い
    (DDR3 1333MHz SO-DIMM 4GB x 2 で 3,500 円前後)

ということで、最安値の 2.3GHz モデル (mid 2011) を素のまま購入。

購入後に Mac での開発歴の長い友人に聞いたところ、mini 内臓の低速 HDD は想像以上に遅いので SSD の方が良いとのこと。

2GB メモリ時点で Mercurial のテストセットを流したところ、同等クロックの Phenom II x4 で稼動する VirtualBox@Windows 上の debian の2〜3倍ほど時間が掛かっていたのは、それが原因か?!

VM 上の debian は、メモリ 2GB + 3.5inch HDD 上の仮想ディスク 8GB

とはいえ、Apple Store での SSD 換装は 2.5GHz モデル限定らしいし、寄る年波のせいなのか、メモリ交換程度なら兎も角、ちまちま筐体を開けて HDD 換装 (+ システム移行作業) をする気にもなれないので、SSD 換装に関しては見送りと言う事で。

購入で付いたポイントを使って、メモリを 8GB に増設したから、スワップが必要になる事態も減るでしょう、多分。

※ 8GB にメモリ増設した後に確認してみたら、対 debian@VM 比で、所要時間 1.5 倍程度にまで改善された (もうちょっと頑張って欲しかったけど....) > Mercurial テストセット実行

ネット経由でヨドバシから購入したところ、翌日には早々に到着。はえーなー、おい! > yodobashi.com

で、以下は環境設定に関する備忘録。

ネットワーク設定

トラブル時の原因調査で、余計な確認項目を増やしたくないので、WiFi 接続は無効にして、有線 LAN での接続に。

それから、主な使用形態が SSH でのリモートアクセスになるので、「IPv4 の構成」を「DHCP を使用(IP アドレスは手入力)」にすることで、アドレスを固定しつつ、DNS/ルータ情報の設定はDHCP 経由で取得できるように設定。

それから、分類上は「ネットワーク」ではないけれど、「セキュリティとプライバシー」⇒「ファイアウォール」において、ファイアウォールの有効化も忘れずに。

SSH 設定

SSH サーバ自体は、「システム環境設定」⇒「共有」において、「リモートログイン」サービスを有効にすれば立ち上がるとのこと。

SSH 接続に先立って、サーバ公開鍵のフィンガープリントや、設定状況の確認をしようと思い、ターミナルから /etc/ssh 配下を参照しようとしたら .... は? /etc/ssh ディレクトリが無いの? > Mac OS X

でもウェブ上では sshd_config の設定方法とか載っているのに.... 。/usr/local/etc か?.... 違う。/opt とかは .... 無い。

どうしたものか?と思っていると、"/etc/ssh" でのファイル名補完に対して、見慣れた名前のファイルがずらずらと....。はぁ?! /etc 直下にベタ置きされているのか? > ssh 設定ファイル群

いやーん!サブディレクトリ使って分類しようよ!っていうか、sshd_config 中の鍵ファイルへのパス設定デフォルト値 (コメントアウト形式で記載) は /etc/ssh/ 配下を指してるのに、実際は /etc 直下にベタ置き!?

とりあえず動揺を鎮めて、公開鍵のフィンガープリント確認や、sshd_config 設定に対する以下の項目の明示的な禁止設定などを。

  • パスワード認証(PasswordAuthentication)
  • ルートログイン(PermitRootLogin)

UNIX の慣習に従って、"kill -HUP" で変更後設定を再読み込みさせようと思ったら、ps の出力に sshd っぽいものが無い。

ウェブ上の情報によると、どうやら設定変更の反映は、先述の SSH サーバ有効化で変更した「リモートログイン」設定を一旦 OFF ⇒ 再度 ON で行うらしい。なんか、えらく不恰好だけど、他に方法は無いのかなぁ?

後は、自分のアカウントの $HOME 直下に .ssh/authorized_keys ファイルを作成して、自分の公開鍵を格納すれば設定は完了。

流石にこの年になると、失敗が身に染みているので、.ssh ディレクトリのアクセス権限を 0700 にするといった作業は忘れようが無い。

設定完了後、普段使いの Windows 環境から、SSH 接続が可能であることを無事確認。

やっぱり CUI は良いなぁ(笑)。

開発ツールの導入

当面の用途である Mercurial のテストを実施するためには、Python とか make とか C コンパイラが必要。

Python に関しては、デフォルトでインストールされているけれど、他の奴はどうしたものか?と途方に暮れていると、Mac OS X の最新版利用者は、X Code の最新版を無料で入手できるという話を風の噂で耳にする。

MacPorts とか Fink とか Homebrew とか、諸々のパッケージ管理に関しては、正直どれがどうなのか皆目検討も付かない状態なので、とりあえず X Code で凌げるのなら、そっちの方がありがたい。

で、AppStore アプリを起動して、Apple ID (以前 iPod を直販で購入した際に作成) を登録すると...おぉ!確かに X Code が無料で入手可能だ!

早速購入して ..... 流石にダウンロード時間が長いなぁ ..... 終わった!

じゃぁ、早速 make を.... あれ?起動しない。なんで?

マシンの中を彷徨うこと暫し .... あ、ダウンロードされるのは X Code のインストーラだけなのね?

Launchpad 経由でインストーラを起動して ..... インストールも長いなぁ .... 終わった!

今度こそ糠喜びは勘弁してくれよぉ .... おぉ! make も cc もちゃんとインストールされている!

試しに Mercurial のビルド&テストをしてみたけれど、概ね X Code で事足りているっぽい。まぁ、後の環境整備は識者に相談してから進めよう。

その他

SSH 接続越しに Mercurial のテストを走らせて放置していたら、いつの間にか Mac 側から接続が切られている。

あれ? keep alive のための ServerAliveInterval 記述は SSH の設定ファイルに記述済みだから、仮に明示的な入力/表示の更新が無くても、接続が切られる筈は無いんだけどなぁ?

まぁ、たまたま切れたのかな?と思ったのだが、接続から暫く経過すると、必ず Mac 側から切断されてしまう模様。

どーゆー事!?......そう言えば Mac ってスリープっちゅーかサスペンドするんじゃねぇ?という事に気が付いて、「システム環境設定」⇒「省エネルギー設定」を確認すると、案の定、時限式でスリープする設定が有効に。

スリープ設定を解除してから 改めて SSH 接続し、暫く放置してみたところ、無事に接続が維持されていることを確認。

まぁ単なる切断だけなら、screen コマンドを使えば平気なのだけれど、スリープされたのでは実行中の処理が停止しちゃうから、流石にデフォルト (= 時限式スリープ有効) のまま使うわけにはいかんよなぁ。