Finally, The Installer has come back to Gentoo Linux !!!

ついに、インストーラ様がGentoo Linuxに帰ってきたぞ!!!

うそです。まだ帰ってきていませんでした。GSoC 2011のプロジェクトとして、Wicotr W. Brodlo氏がAnacondaベースのインストーラを作成しており、どうやら「取り敢えず起動可能なGentoo Linuxがインストールできる」段階までは完成したそうなので、試してみました。

Anaconda入りLiveDVDの作成。

Anaconda InstallerはLiveDVD上でemergeして使うこともできますが、いくつか修正しなければ動かないところがありましたので、今回はAnaconda Installer導入済みのLiveDVDを作ることにしました。

まずGentoo LiveDVD 11.2のISOイメージをマウントして、更にそこに含まれるSquashFSもマウントします。そしてマウントしたSquashFSを丸ごとどこかにコピーします。

# mount -o loop /path/to/livedvd.iso /mnt/cdrom
# mount -o loop /mnt/cdrom/image.squashfs /mnt/image
# cp -a /mnt/image /path/to/squashfs.image

これはLiveDVD環境のルートファイルシステムで、完全なGentoo環境です。よってchrootできます。

# mount -t proc proc /path/to/squashfs.image/proc
# mount --rbind /dev /path/to/squashfs.image/dev
# mount --rbind /sys /path/to/squashfs.image/sys
# cp /etc/resolv.conf /path/to/squashfs.image/etc
# chroot /path/to/squashfs.image
# PS1="(CHROOT)${PS1}"

Anaconda Installerは途中でsetlocaleするので、インストールに使う予定のLocale dataが存在する必要があります。

(CHROOT)# nano -w /etc/locale.gen
(CHROOT)# locale-gen
(CHROOT)# eselect locale set en_US.utf8

anaconda-overlayを修正する。

anaconda-overlayのツリーをcloneします。

(CHROOT)# cd / &&  git clone git://git.overlays.gentoo.org/proj/anaconda-overlay.git

このままでは動かないので、幾つか修正しなければなりません。取り敢えず動けばよかろうの姿勢で、ごく適当に。

sys-boot/grub/grub-1.99.ebuild
DEPENDにsys-devel/bisonを追加する。
dev-python/python-ethtool/python-ethtool-0.3.ebuildpython-ethtool-0.7.ebuild にrenameし、SRC_URIを以下のように変更。
SRC_URI="http://dsommers.fedorapeople.org/python-ethtool/${P}.tar.bz2"
app-admin/anaconda/anaconda-9999.ebuild はLSELINUX_VER="2.0.94" に変更。更に以下のようなパッチを作成して適用させる。

--- gentoo/utils.py.orig        2011-09-02 16:46:40.113706669 +0900
+++ gentoo/utils.py     2011-09-02 16:50:05.040144791 +0900
@@ -826,10 +826,14 @@
         self._progress.set_fraction(0.0)
         self._progress.set_text(_("Installing configuration helpers"))
         os.environ["USE"] = "multislot policykit -gtk -X -gpm -truetype"
-        os.mkdir(self._root+"/etc/portage")
+        if not os.path.exists(self._root+"/etc/portage"):
+            os.mkdir(self._root+"/etc/portage")
         keywordsf = open(self._root+"/etc/portage/package.keywords", "w")
         keywordsf.write("dev-python/rhpl ~amd64 ~x86\nsys-boot/grub **\nsys-boot/os-prober ~amd64 ~x86")
         keywordsf.close()
+        unmaskf = open(self._root+"/etc/portage/package.unmask", "w")
+        unmaskf.write("sys-boot/grub")
+        unmaskf.close()
         self._progress.set_fraction(0.3)
         self.install_package("-1 =grub-1.99")
         self._progress.set_fraction(0.6)

それぞれmanifestを再作成し、anaconda-overlayの修正は完了です。

anacondaをemergeする。

(CHROOT)# nano -w /etc/make.conf
PORTDIR_OVERLAY="/anaconda-overlay"
(CHROOT)# emerge --verbose --autounmask-write anaconda
(CHROOT)# dispatch-conf
(CHROOT)# emerge --verbose --keep-going anaconda

また、dev-python/pypartedも入れ直さないと動きません。

(CHROOT)# emerge dev-python/pyparted

これで全て通ったかどうかはっきりとは覚えていないので、何かトラブっていたらエラーメッセージを見てどうにかしたりしてください。

LiveDVDのカーネルを作りなおす。

Gentoo LiveDVD 11.2のKernelは、なんとCONFIG_RTC_CLASS is not setというびっくり設定でビルドされています。この結果、hwclockコマンドが動きません。ということでカーネルも作り直します。色々いじるとinitramfsも造り直さなければならなくなって面倒なので、該当部分だけ修正します。

(CHROOT)# cd /usr/src/linux
(CHROOT)# make menuconfig
 Device Drivers  --->
     <*> Real Time Clock  ---> 
         (rtc0)  RTC used to set the system time
         [*]   /sys/class/rtc/rtcN (sysfs)
         [*]   /proc/driver/rtc (procfs for rtc0)
         [*]   /dev/rtcN (character devices)
         <*>   PC-style 'CMOS'
(CHROOT)# make
(CHROOT)# exit

これでchroot環境での作業は終わりです。LiveDVDを作り直しましょう。

LiveDVDのSquashFSとKernelを入れ替える。

まずはSquashFSを作ります。

# mksquashfs /path/to/squashfs.image /path/to/image.squashfs

先ほど作ったカーネルも取り出しておきます。

# cp /path/to/squashfs.image/usr/src/linux/arch/x86_64/boot/bzImage /path/to/gentoo

そしてこの2つをそれぞれGentoo LiveDVDのISOイメージファイル内の/image.squashfsと/boot/gentooと入れ替え、新しいISOイメージファイルを作成します。ISOイメージファイルの作成には色々と手段がありますが、app-cdr/isomasterはなかなかいい感じでした。

できあがり!

これでAnaconda Gentoo Installer入りのLiveDVDが完成しました。起動してX上の端末エミュレータにliveinstと打ち込めばインストーラが開始します。実際に動かしてどうだったのかはまた今度。

GentooでRuby-1.9.2でmikutter

やりたいことはいっぱいありますが、何故か最初の記事はmikutterです。mikutterはすばらしいついったークライアントです。Gentooでは公式Portage Treeにebuildが用意されていますので、簡単にインストールできます。ところで、そんなすばらしいmikutterはRuby-1.9以降で動かすといっそう素晴らしいそうです。ということで、私もやってみることにしました。

Ruby-1.9.2の導入。

GentooではRuby-1.9はまだHard Maskされています。その導入方法については既にたくさんの人が適切に説明しているので、ここでは簡単に触れるだけにします。手順としては、>=dev-lang/ruby-1.9.1 をunmaskして、ruby_targets_ruby19 のUSE Maskもunmaskして、RUBY_TARGETSにruby19を追加するだけですね。dev-ruby/*は~archをACCEPTしておくのが良いでしょう。そしてemerge --update --deep --newuse world。

echo 'dev-lang/ruby' >> /etc/portage/package.unmask
echo '-ruby_targets_ruby19' >> /etc/portage/profile/use.mask
echo 'dev-lang/ruby ~amd64' >> /etc/portage/package.accept_keywords/ruby
echo 'dev-ruby/* ~amd64' >> /etc/portage/package.accept_keywords/ruby
echo 'RUBY_TARGETS="$RUBY_TARGETS ruby19"' >> /etc/make.conf
emerge --verbose --update --deep --newuse world
eselect ruby set ruby19

必要なRubyライブラリを揃える。

(2011/06/07) ここから先の内容は著しく古くなっています。今やGentooruby-gtk2はruby19に対応しています。今のmikutterにはsqlite3-rubyは必要ありません。ruby-hmacとjsonもmikutter同梱のもので動作します。つまり、概ね何もせずともGentooRuby-1.9系の環境でmikutterを動かすことができます。もうちょっとすれば一発でemergeできるようになるはずです。Gentoo開発者ってすごいね!! また、rubygems-1.3.7-r5以降は/usr/local以下にgemをインストールしてくれます。

さて、ruby19(Ruby-1.9系をこう称することにします)が入りました。でもdev-ruby/以下の追加パッケージの多くがruby19に対応していません。mikutterを動作させるにはPortage Treeのパッケージだけでは足りないのです。そうそう、Gentooのruby19では元々のソースに同梱されているgemsが削除してありますので、dev-ruby/jsonを忘れずに入れておきましょう。わざわざ書くということは、つまり私はうっかりしたということです。

足りないのはdev-ruby/ruby-gtk2(と関連パッケージ)、dev-ruby/ruby-hmac、dev-ruby/sqlite3-rubyですね。こいつらをどうにかすればmikutterも動いてくれそうです。そして、これらのパッケージ(というか大半のdev-rubyなパッケージ)は、rubygemsに対応しています。

こちらを見ると、野良でgem installしてもemergeしたgemsと競合しないように読めたのですが、実際には普通に/usr/lib/ruby以下にインストールされてしまいます。何か私が勘違いしているのかもしれません。

取り敢えず、今はあまり深く考えずに、一般ユーザとしてgemsをインストールしました。

gem install --user-install ruby-gtk2 ruby-hmac sqlite3
mikutterを動かす。

ライブラリが揃ったようなので、mikutterを動かします。Ruby-1.9.2で動作させるのにはrevision 262以降のmikutterが必要ですので、svnでチェックアウトするか、変更部分をmikutter.rbに適用します。

svn checkout svn://toshia.dip.jp/mikutter/trunk mikutter
ruby mikutter/mikutter.rb

動きました!!

おまけ。

今回はrubygemsを使って野良でgemsをインストールしましたが、Portageにはruby-fakegem.eclassというものがあって、それを使うとgemをインストールするebuildを極めて簡単に書くことができます。
また、dev-ruby/sqlite3-rubyに関してはUSE_RUBY="ruby19"を追加するだけで動くようです(というか、動きました)。

ということで、なんとかなりそうな気がしたので必要パッケージのebuildを書いてLocal Overlayに置いて試そうかと思ったのですが、dev-ruby/rcairo-1.10.0-r2.ebuildを読むと、
# ruby19 → fails, and even crashes Ruby
なんて書いてあって大変そうだったのでやめました。でもそのうちトライしようと思います。gemで入れた分には動いているわけだしね。