MacPortsが許されるのは中学生までだよねー

タイトルは釣り。だって、言ってみたかったんだもん。

まあ、MacPortsにはいろいろ不満があるので、これについてはそのうちエントリ書くかも。

というわけで、Portage最強なわけだけど、流石に導入のハードル高すぎなので、ぼくが七夕の日に願いを込めてビルドしたやつをアップロードしといたので、よかったら使ってみて。

gentoo-prefix-mbp-13-inch-mid-2009-20090707.tar.gz

シンボリックリンクの都合とかあるので、ルート直下に展開する必要があるけど、Core 2 DuoなMacならたぶん使えるはず。

$ cd /
$ tar zxvf ~/Downloads/gentoo-prefix-mbp-13-inch-mid-2009-20090707.tar.gz

使い方は、ドキュメントの項目1.17になんかごにょごにょ書いてるけど、ログインシェルを/Gentoo/bin/bashとかにしちゃうのが一番簡単だと思う。

こんな感じで。

$ sudo echo "/Gentoo/bin/bash" >> /etc/shells
$ chsh
Shell: /Gentoo/bin/bash

ログインシェルの変更は、こことかが詳しい。

UK STUDIO - Macのログインシェルをzshに変更する

ぼくもzsh使ってるし、

$ emerge zsh

しとけばいいと思うよ。

Gentoo Prefix再び

新しくMacBook Pro 13-inchを購入したので、早速Gentoo Prefixを導入した。初の64bitマシンを手に入れたので、64bitでビルドしたぜ。これで、64bit Unix環境が手に入ったわけだ。

今回、セットアップしてると、Pythonの2.5から2.6への切り替えとか、findutils周りでエラー出た。どうも、bootstrap-prefix.shで導入されるPortage Treeが古いみたいで、事前にemerge --syncしてやることで、なんとかなった。

といっても、Gentoo PrefixのACCEPT_KEYWORDSはデフォルトが~x64-macosなので、unstableまっしぐら。タイミングによってはビルドできないんだよな。Gentooへの愛が試されるわけですね。わかります。

セットアップドキュメントの方も更新されてたみたいなので、またセットアップ用のスクリプトを置いとくよ。

#!/bin/bash

# Code Listing 1.1: Export EPREFIX variable
export EPREFIX="/Gentoo"

# Code Listing 1.2: Add Prefix paths to your PATH
export PATH="$EPREFIX/usr/bin:$EPREFIX/bin:$EPREFIX/tmp/usr/bin:$EPREFIX/tmp/bin:$PATH"
export CHOST="x86_64-apple-darwin9"

# Code Listing 1.3: Use the bootstrap script
curl -o /tmp/bootstrap-prefix.sh http://overlays.gentoo.org/proj/alt/browser/trunk/prefix-overlay/scripts/bootstrap-prefix.sh?format=txt
chmod 755 /tmp/bootstrap-prefix.sh
./bootstrap-prefix.sh $EPREFIX tree
./bootstrap-prefix.sh $EPREFIX/tmp make
./bootstrap-prefix.sh $EPREFIX/tmp wget
./bootstrap-prefix.sh $EPREFIX/tmp sed
./bootstrap-prefix.sh $EPREFIX/tmp python
./bootstrap-prefix.sh $EPREFIX/tmp coreutils6
./bootstrap-prefix.sh $EPREFIX/tmp findutils
./bootstrap-prefix.sh $EPREFIX/tmp tar15
./bootstrap-prefix.sh $EPREFIX/tmp patch9
./bootstrap-prefix.sh $EPREFIX/tmp grep
./bootstrap-prefix.sh $EPREFIX/tmp gawk
./bootstrap-prefix.sh $EPREFIX/tmp bash
./bootstrap-prefix.sh $EPREFIX portage

# Code Listing 1.4: Setup ld directions
export LDFLAGS="-Wl,-search_paths_first -L${EPREFIX}/usr/lib -L${EPREFIX}/lib"
export CPPFLAGS="-I${EPREFIX}/usr/include"
export CC="gcc -m64"
export CXX="g++ -m64"
export HOSTCC="gcc -m64"

# Code Listing 1.5: rehash in bash
hash -r

# ----- little hack -----
emerge --oneshot --nodeps rsync
emerge --sync
# -----------------------

# Code Listing 1.6: emerge sed and pax-utils
emerge --oneshot sed
emerge --oneshot pax-utils

# Code Listing 1.7: emerge bash and wget
emerge --oneshot --nodeps wget
emerge --oneshot bash

# Code Listing 1.8: emerge linker and compiler
emerge --oneshot --nodeps baselayout-prefix
emerge --oneshot --nodeps lzma-utils
emerge --oneshot --nodeps m4
emerge --oneshot --nodeps flex
emerge --oneshot --nodeps bison
emerge --oneshot --nodeps binutils-config
emerge --oneshot --nodeps binutils-apple
emerge --oneshot --nodeps gcc-config
emerge --oneshot --nodeps gcc-apple

# Code Listing 1.9: unset no longer needed environment variables
unseg LDFLAGS CPPFLAGS CHOST CC CXX HOSTCC

# Code Listing 1.10: emerge several tools
emerge --oneshot coreutils
emerge --oneshot findutils
emerge --oneshot tar
emerge --oneshot grep
emerge --oneshot patch
emerge --oneshot gawk
emerge --oneshot make
emerge --oneshot --nodeps file
emerge --oneshot --nodeps eselect

# Code Listing 1.11: emerge portage
env FEATURES="-collision-protect" emerge --oneshot portage

# Code Listing 1.12: remove tmp directory
rm -Rf $EPREFIX/tmp/*
hash -r

# Code Listing 1.13: Updating the tree
emerge --sync

# Code Listing 1.14: emerge system
emerge -u system

# Code Listing 1.15: Customising the Prefix installation - example
echo 'USE="unicode nls"' >> $EPREFIX/etc/make.conf
echo 'CFLAGS="-O2 -pipe -march=nocona"' >> $EPREFIX/etc/make.conf
echo 'CXXFLAGS="${CFLAGS}"' >> $EPREFIX/etc/make.conf
echo 'MAKEOPTS="-j4"' >> $EPREFIX/etc/make.conf

# Code Listing 1.16: doing the final system installation
emerge -e system

Terminalで新しいタブを開いてsshを実行するAppleScript

クライアント側でscreen使ってて、サーバ側でもscreen使ってると自分がどのマシンで作業しているのかわからなくなったりする。

有名な記事だけど、ここで紹介されてる、ssh_screenっていうzshの関数を定義しておくと、sshしたときに新しいウィンドウを開いて、そのウィンドウ名をログイン先のホスト名に設定してくれるから便利。なんだけど、ログイン先でもscreen使ってる場合、混乱が起きる。キーバインドの問題だ。

ネットを調べた感じだと、みんな、サーバ毎にscreenのキーバインドを変えることで対処してるみたい。でもぼくは、キーバインドを変えるってことにすごく抵抗があるわけ。

どうしたもんかと悩んでいたら閃いた。LeopardのTerminal.appはタブ機能があるじゃないかと。そこで、新しいタブを開いて、sshを実行してくれるAppleScriptを書いてみた。

インタプリタ?っぽく書いてるけど、事前にコンパイルとかした方がいいんだろうか?AppleScriptはよくわからん。

使い方は、

alias ssh="~/bin/tabbed-ssh"

とでもエイリアス切って、あとは、いつも通りのsshの使い方でok。

話は変わって、今回、AppleScriptを始めて書いたのだけど、これ難しいな。

do script with command cmd in selected tab of the front window

inとかtoとかofとか。まあ、ぼくの英語の前置詞の知識が乏しいんだけなんだけど。あと、theとか意味わかんねー。ちなみに、このtheは省略しても動作するっぽい。冗長なシンタックスシュガーっていう認識でいいの?こんなの始めて。

自然言語に似せたプログラミング言語ってのは、一般の人には易しいのかも知れないけど、プログラマにとってみたら苦痛だよな。

Terminal.appが固まる件

これは、トンデモだろ。

Terminal.app を軽くする方法 - IT戦記

プラシーボにもならねぇよ。まあ、マシンの個体差とかあるから、ぼくだけの環境の問題かも知れないけど、気休め程度に考えといた方がいいと思う。

ぼくは、screen使ってるし、ターミナルにスクロールバーが出るのは気持ち悪いから、スクロールバッファは0でずっと使ってるけど、普通に固まるぜ。

固まったら、強制終了 -> 再起動 -> screenリアタッチでことなきを得る。

結局、screenすばらしいっていう話だな。

というか、Appleさん改善してよ。256色対応と一緒にお願い。

MacPortsに別れを告げ、Gentoo Prefixに恋をする

ターミナルの中で一日を過ごす人種としては、UNIX環境を整えることは至上命令だ。

OSXのパッケージ管理システムで代表的なのは、MacPortsFinkだろう。ぼくは今までMacPortsを使ってた。MacPortsは実質的に公式なパッケージ管理システムだと思うし、パッケージ数も多い。だけど、定番すぎるので、前から気になってたGentoo for Mac OS Xを導入してみようかと思う。あえて困難な道を行く。ヘラクレスの選択と言えば聞こえはいいが、ようするにマゾなんだろう。

Gentoo for Mac OS Xは昔PowerPC時代にチャレンジして玉砕したまま放置してたんだけど、久しぶりにプロジェクトページ見たら、なんかもう開発止まってるの?

と思ったら、Prefixプロジェクトってのがあるらしい。

Gentoo-Alt TLP に Prefix プロジェクトがあります。GPM/Ports System はアーキテクチャ、カーネル、ライブラリ、ユーザランド、ライセンス、etc. 様々な組み合わせを可能にしますが、Primary Package Manager として構築する必要があります。稼働中の BSD, Mac OSX, Solaris, Fedora Core, Ubuntu, et al. は既に別の Primary Package Manager を所有しています。prefix は root 権限が不要で衝突する事無くメタ・ディストリビューションを可能にする Secondary Package Manager として利用可能にするための実験です。少しややこしいのですが「root が使う Secondary」「user に開放された Primary」に加え「user に開放された Secondary」も含みます。bootstrap と prefix-overlay があります。

prefix - GentooJP

なんかすげー期待できそう。ぼくはサーバをGentoo Linuxで運用してるんだけど、Gentooのパッケージ管理システムのPortageこそ最強だと思う。

Portageについては以下のドキュメントを参照。

http://www.gentoo.org/doc/ja/handbook/handbook-x86.xml?part=2

そして、Gentoo PrefixのMac用のセットアップドキュメントはここ。

http://www.gentoo.org/proj/en/gentoo-alt/prefix/bootstrap-macos.xml

残念ながら日本語のドキュメントは見つからなかったんだけど、コードリストを上から下まで丁寧にコピペしていったらなんか上手くいったみたい。相変わらずGentooのドキュメントのクオリティは高いなぁ。

ちょっとした手違いで2回セットアップする羽目になったのと、新しいMacBook買ったらどうせ同じ作業やらなきゃなので、未来の自分のためにもスクリプト化しておいたので貼っておく。実行するにはXcodeのインストールが必要。

setup-prefix.sh

#!/bin/bash

USE="unicode nls pcre bzip2"
CFLAGS="-O3 -pipe -march=prescott" # CoreDuo
# CFLAGS="-O3 -pipe -march=nocona" # Core2Duo

export EPREFIX="$HOME/Library/Gentoo"
export PATH="$EPREFIX/usr/bin:$EPREFIX/bin:$EPREFIX/tmp/usr/bin:$EPREFIX/tmp/bin:$PATH"

curl -o /tmp/bootstrap-prefix.sh http://overlays.gentoo.org/proj/alt/browser/trunk/prefix-overlay/scripts/bootstrap-prefix.sh?format=txt

chmod 755 /tmp/bootstrap-prefix.sh
/tmp/bootstrap-prefix.sh $EPREFIX tree
/tmp/bootstrap-prefix.sh $EPREFIX/tmp wget
/tmp/bootstrap-prefix.sh $EPREFIX/tmp sed
/tmp/bootstrap-prefix.sh $EPREFIX/tmp python
/tmp/bootstrap-prefix.sh $EPREFIX/tmp coreutils6
/tmp/bootstrap-prefix.sh $EPREFIX/tmp findutils
/tmp/bootstrap-prefix.sh $EPREFIX/tmp tar15
/tmp/bootstrap-prefix.sh $EPREFIX/tmp patch9
/tmp/bootstrap-prefix.sh $EPREFIX/tmp grep
/tmp/bootstrap-prefix.sh $EPREFIX/tmp gawk
/tmp/bootstrap-prefix.sh $EPREFIX/tmp bash
/tmp/bootstrap-prefix.sh $EPREFIX portage

rm -rf /tmp/bootstrap-prefix.sh

export LDFLAGS="-Wl,-search_paths_first -L${EPREFIX}/usr/lib -L${EPREFIX}/lib"
export CPPFLAGS="-I${EPREFIX}/usr/include"

hash -r

emerge --oneshot sed

emerge --oneshot --nodeps wget
emerge --oneshot bash

emerge --oneshot --nodeps baselayout-prefix
emerge --oneshot --nodeps flex
emerge --oneshot --nodeps binutils-config
emerge --oneshot --nodeps odcctools
emerge --oneshot --nodeps gcc-config
emerge --oneshot --nodeps gcc-apple

unset LDFLAGS CPPFLAGS CHOST CC CXX HOSTCC

emerge --oneshot coreutils
emerge --oneshot findutils
emerge --oneshot tar
emerge --oneshot grep
emerge --oneshot gawk
emerge --oneshot patch
emerge --oneshot make

env FEATURES="-collision-protect" emerge --oneshot portage

rm -Rf $EPREFIX/tmp/*
hash -r

emerge --sync

emerge -u system

echo "USE=\"$USE\"" >>$EPREFIX/etc/make.conf
echo "CFLAGS=\"$CFLAGS\"" >>$EPREFIX/etc/make.conf
echo 'CXXFLAGS="${CFLAGS}"' >>$EPREFIX/etc/make.conf
echo 'MAKEOPTS="-j4"' >>$EPREFIX/etc/make.conf

emerge -e system

cd $EPREFIX/usr/portage/scripts
./bootstrap-prefix.sh $EPREFIX startscript

最初の数行にあるUSEフラグとCFLAGSとEPREFIX辺りは適宜調整する必要があると思う。

CPUフラグは、Core2Duoな人は-march=noconaって指定すればいいらしい。良くわからなかったら-march=i686とでもしておけばセーフティかも。EPREFIXはようするにインストール先のことだね。$HOME/Gentooとか$HOME/Library/Gentooが推奨されてるみたいだけど、ホームディレクトリ直下には入れたくない気分だったので、ぼくは$HOME/Library/Gentooを選択した。

MacPortsと同時に使うこともできるし、たぶんこのスクリプト一発で導入できると思うから、気軽に試してみて欲しい。セットアップ終了後、$EPREFIX/startprefixを実行したら、さぁ! Gentooの世界へ飛び出そう!

ちなみに、ぼくのマシンだと3時間半くらいかかったので、寝る前にでもどうぞ。

こんにちは、Leopard

今のメインマシンは、初代MacBookだ。そう、あの不具合だらけの名品だ。ぼくのMacBookも例外なく既に3回修理に出している。電源断、変色、バッテリー不良...初代MacBookユーザにとっちゃ、どれもおなじみだね。先日もパームレストがパッキリ割れたよ。Oh! Yeah!

初代MacBookはCoreDuoが乗ってるんだけど、こいつは32bit CPUなんだ。やっぱりLeopardは64bit CPUで動かしたいよね。せっかく対応したんだし。それに、どうせ買い替えるなら新モデルが発表されてからって決めてた(次のモデルはアルミ筐体になるって噂も)。だけど、今月のWWDCでは発表されなかったし、IntelのCentrino 2のリリースの延期やらで、この様子だと秋くらいまで新モデルはなさそう。そんなこんなで、今更だけどOSをアップデートした。こんにちは、Leopardってわけだ。現行モデルに買い替えないあたりが、自分でもチキンだと思う。

とりあえず、上書きインストールにはいい思い出がないので、クリーンインストールして、一通り設定が終わったところ。なんだかキビキビ動くぞ。Spotlightとか爆速。

やっぱり新しいOSは気持ちいい。Leopardはどんな世界を見せてくれるんだろう。

Mac OS X 10.5.1 Leopard

余談だけど、アップルストアのスタッフはとてもよくしてくれる。でも、ぼくが相談に行ったら、高確率で外国人スタッフをあてがわれる。見た目がヤバいからなのか...