2007-11-26

Fedora から Gentoo への移行


Fedora の yum が w3m のために gpm をひっぱってきたりと依存関係がうっとおしいのに愛想がつきて Gentoo にいれかえたいなと思っていると「HOWTO Convert A RedHat Server to Gentoo Remotely- Gentoo Linux Wiki」というページを発見。
swap が小さいので代わりに少し危険だとあるけれど「HOWTO Replace RedHat with Gentoo, Remotely over SSH」の方法をとることにした。

1.必要なドライバをカーネルに組み込む
安全のため、モジュールなしでも起動できるカーネルを作る。
必要なモジュールは lspci-vvv を使えばわかる。

(2.sshd_confg で SSH の PAM 機能をオフにする)
remote からする時は必要だが、私は local で作業したので行っていない。
ちなみに以下のようにするといいらしい。


  1. /etc/ssh/sshd_config の UsePAM を no にする。

  2. netstat -tanp | grep LISTEN | grep sshd で sshd の PID をメモ

  3. kill <PID> で sshd を kill。これを実行しても LISTEN している sshd だけが kill され、すでにログインしているプロセスには影響しない。

  4. ログアウトせずに /usr/sbin/sshd を実行。

  5. 今のログインとは別にマシンに ssh 接続できるか試してみる。



3.最新の stage3 をダウンロード
Gentoo Linux-- Gentoo Linux Mirrorsにミラーサイト一覧があるので適当なところを選んで stage3 の tarball をダウンロード。

4.設定ファイルのバックアップ

  • /etc/resolv.conf

  • /etc/fstab,mtab

  • /etc/passwd,shadow,group

  • /etc/grub.conf,lilo.conf

  • /etc/sysconfig/network

  • /etc/sysconfig/network-scripts/ifcfg-eth*

  • apache の設定

  • sshd の設定


あたりを。そして、 /sbin/lsmod > /tmp/gentoo/modules.txt のようにして読みこまれているモジュールのリストをバックアップ。

5.全てのファイルの更新日時を変更
Gentoo をいれたあとにいらないファイルを識別するために一度全ファイルの更新日時を適当な日時に変更しておきます。


mv /sbin/modprobe /sbin/.modprobe
find / -print0 | xargs -0 touch -d "Feb 1 1978" -m -a
mv /sbin/.modprobe /sbin/modprobe



6.stage3 tarball を展開
私は念のために Fedora のバックアップをとりました。


# cd /
# for x in `tar jtvf /tmp/gentoo/stage3-*.tar.bz2 | awk '{print $6}'`;do
test ! -d $x -a -e $x &amp;&amp; echo $x
done > /tmp/fedora-list
# xargs tar zcvf /tmp/gentoo/fedora.tar.gz < /tmp/fedora-list


stage3 tarball を展開します。


cd / &amp;&amp; tar jxvf /tmp/gentoo/stage3-*.tar.bz2




7.portageツリーを同期


emerge --sync


同期には時間がかかるので、その間に他の作業ができるようにシェルを複数開いておくといいでしょう。

8.stage3 で置換えられたファイルの内容を復元

  • root パスワードの再設定。

  • 自分のアカウントを追加。

  • UID が変化していることがあるのでホームディレクトリ以下のファイルの所有者を再設定。


この時点でログインできるかどうかを確認。

  • バックアップしてある passwd、shadow、groupをもとにユーザ/グループを追加。UID が変化するなら以下のようにして所有者を再設定。




find / -uid $olduid -print0 | xargs -0 chown $newusername



  • バックアップから /etc/fstab を復元。


元の著者は LABEL= の設定を変更しているけれどそれはお好みで。

  • GRUB(または LILO)の設定を復元。

  • /etc/make.conf を編集

  • ネットワークの設定


/etc/conf.d/net を /etc/conf.d/net.example を見ながら編集。

  • その他の設定

    • /etc/conf.d/keymaps で KEYMAP の変更(emacs で US 配列・capslock が ctrl の役割のマップになるらしい)

    • /etc/conf.d/clock で CLOCK を local に変更

    • /etc/rc.conf で EDITOR をお好きなものに変更



  • システムのロケールを変更。日本なら ln -sf /usr/share/zoneinfo/Japan /etc/localtime

  • (一時的に、 /usr/bin/sshd を /etc/conf.d/local.start に追加)

  • /etc/conf.d/hostname でホスト名を設定

  • cd /lib && rm -rf i686 && /sbin/ldconfig で Fedora のシステムライブラリから Gentoo のシステムライブラリに移行!


この時点で Fedora のシステムバイナリ/ライブラリから Gentoo のものへの移行が完了です。再起動していらないファイルを削除する前に基本的なシステムコンポーネントをインストールします。

8.boot に必要なものをインストール

  • システムロガー(sysklogd,syslog-ng,metalog)

  • cron

  • emacs,vi で Backspace が動作するようにtermcap を修正するために libtermcap-compat

  • ブートローダ(GRUBかLILO)

  • openssh (rc-update add sshd default して、/etc/conf.d/local.start から /usr/bin/sshd を削除)

  • お好きなエディタ


私の場合、Fedora が LVM を使っていたので、さらに lvm2 を emerge しました。

これで再起動の準備が整いました。以下のことを確認して再起動してください。


  1. ブートローダがきちんと動くカーネルを起動するように設定されていること。

  2. ネットワークをつなげるためのドライバがカーネルにインストールされていること。

  3. Gentoo のネットワーク設定が正しく、タイプミスがないこと。

  4. fstab が正しく設定されていて boot 時に mount されるようになっていること。

  5. システムにログインし、 root になれること。

  6. openssh がシステム起動時に起動されること。



再起動後はいらない(Fedora 由来の)ファイルを削除します。

9.必要なファイルの保護
以下のように必要なファイルを保護します。


# find /lib/modules /etc/ssh -print0 | xargs -0 touch -m -a
# touch -m -a /etc/resolv.conf


これら以外にも例えば /var/www にウェブコンテンツを置いている場合にはそこも保護するといいでしょう。

10.Fedora のファイルを削除


# touch -d "Feb 2 1978" -m -a /tmp/foo
# find /bin /sbin /etc /lib /usr /var -type f ! -newer /tmp/foo -print0 | xargs -0 rm -v
# find /bin /sbin /etc /lib /usr /var -type d ! -newer /tmp/foo -print0 | xargs -0 rm -vrf



11.Fedora のディレクトリを削除


# cd / &amp;&amp; rm -rf opt misc tftpboot selinux



これで一通り終りです。
私の場合、空き容量800MBほどだったのが3.2GBほどまで増えました。