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

Gentoo Linux 2008.0 released

ちょっと目を離してた隙に、Gentoo Linux 2008.0がリリースされてた。早速アップデートしてみる。といってもmake.profileのシンボリックリンクを張り替えるだけなんだけど。

http://www.gentoo.org/doc/en/gentoo-upgrading.xml

によると、eselectっていうmake.profileを管理する便利なコマンドがあるらしい。lnコマンドで直接リンク先を変更しちゃってもいいんだけど、利用可能なmake.profileの一覧表示とかもできるみたいだし、せっかくなので、eselectを使ってみる。基本的に空気読まないぼくだけど、Linuxを使うときは、そのディストリビューションの流儀に合わせるのがポリシーだ。

% eselect profile list
Available profile symlink targets:
  [1]   default-linux/x86/2006.1
  [2]   default-linux/x86/2006.1/desktop
  [3]   default-linux/x86/2007.0 *
  [4]   default-linux/x86/2007.0/desktop
  [5]   hardened/x86/2.6
  [6]   selinux/2007.0/x86
  [7]   selinux/2007.0/x86/hardened
  [8]   default/linux/x86/2008.0
  [9]   default/linux/x86/2008.0/desktop
  [10]  default/linux/x86/2008.0/developer
  [11]  default/linux/x86/2008.0/no-nptl
  [12]  default/linux/x86/2008.0/server
  [13]  hardened/linux/x86
% sudo eselect profile set 8

これで終わり。簡単だ。あとは、

% sudo emerge -DNu world

って感じでシステム全体をアップデートすればいい。まあ、こまめにアップデートしてたおかげで何も更新がないわけだが。悔しいので、いっそunstableまっしぐらと思ったけど、一応、外部公開してるサーバなので思いとどまる。でも、そのうちやっちまいそうだから困る。

そもそも、Gentooにとってディストリビューションのバージョンなんか意味をなさないんだよね。portageパッケージ管理システムを使って、システムを常に最新の状態に保つっていう思想なんだと思う。インストールCDのイメージをつくるために便宜上バージョンアップしてるだけなんじゃなかろうか。確かバージョン番号を管理するのが面倒だから、年号ベースにしたんじゃなかったけ?2008.0は2008年度の最初のリリースって意味。

ところで、AMD64版のLiveCDのイメージが700MBのCDに収まらないという、ちょっとお茶目なバグレポートが報告されてた。

http://bugs.gentoo.org/show_bug.cgi?id=231024

最初についたレスが、

Why don't you buy 800mb cd instead? :)

笑った。800MBのCD-Rとかあるのは知ってるけど、一般市場に出回ってるの?そもそも普通のCD-Rドライブじゃ焼けないだろ。DVD-Rを持ち出さないところがネタなのかもしれないけど、外人のノリは意味不明で面白い。

Gentooはメタディストリビューション

メタディストリビューション!!! カッコイイぞ。これは流行る。

Portage という技術のおかげで Gentoo を理想的な程、安全なサーバや開発用ワークステーション、プロフェッショナルデスクトップ、ゲーム専用機、組み込み型ソリューション等 -- あなたの必要なもの全て -- にすることができます。 殆んど究極に近い順応性のおかげで、Gentoo は「メタディストリビューション」と呼ばれています。

About Gentoo - Gentoo Linux

"メタ"ってキーワードに過剰に反応したわけだけど、Gentoo Prefixとか確かにメタっぽい。なんか、Windows向けのプロファイルなんかもあるみたいだけど、誰かチャレンジしてみたりしないかな。

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時間半くらいかかったので、寝る前にでもどうぞ。

なくて愕然としたコマンドといえば

むかし Gentoo を使ったとき、標準で cron が入ってなかったときの痺れるような衝撃を忘れることはできない。 Gentoo は cron のパッケージだけで数種類はあるので自分が好きなものを入れることになる。ぼくは vixie-cron を入れたのだが、「cron すら自分で使いたいものを決めさせる」という思想にビビったことであるよ。さすがにそんなところは選ばせなくていい。

なくて愕然としたコマンドといえば - val it : α → α = fun

Gentooはsyslogも標準で入ってない。インストールマニュアルの手順を1ステップ飛ばしただけで、破滅に近づけるナイスなディストリビューション。

そういうぼくは、はじめてGentooを使ったときviが標準で入ってないことに驚愕した。viはUNIX標準テキストエディタというルールをぶち破る暴挙。

vimのつもりでviを起動したら実はnviのエイリアスでしょんぼり、なんて経験がある人も少なくないと思うし(*BSDとか昔のOSXはnviだったと思う)、逆に、オリジナルのviしか認めんぞっていう猛者もいるだろうから、自分が使いたいviクローンを決めろってことなのだろうと自分に言い聞かせて冷静さを取り戻す。

だけど、冷静に考えてみたら、やっぱりviくらいデフォルトで使えてもいいような気がしてきた。syslogとかcronは排他的で、他の同機能のプログラムを同時に走らすことはできないから、どれか一つに決めざるを得ないけど。

« Older Entries