Sakura VPS980のCentOSを再起動一回でGentooに変身させる方法
sakuraのVPS980がとっても快適ですばらしい。調子に乗って自宅サーバーを廃止しNASに置き換え、DNS/mailなんかはすべてVPSにした。部屋も静かで涼しくなって、しかもasahi-netの固定IPもろもろを解約したので月コストもだいぶ下がりいい事だらけ。
ただ、標準で入ってるCentOSが会社と同じでなんとなくつまらない。幸いなことにOS変えてる人がちらほら居る&勝手に変えても(多分)怒られないようなので、もう1インスタンス借りて実験的にGentooにしてみた。
調べてみたらgrub2経由でSystemRescueCdを起動してごにょごにょも出来るらしい。ただ、Web上のシリアルコンソール経由でやるのはちょっとしんどいのでSysRescCd経由はあきらめ、CentOSの中身をごそっと全部入れ替えてGentooにする方法を採用してみた。こういう行為をあまり悩まずに気軽に出来るようになったのはGentoo様のおかげですね。さすがドM仕様。
準備
とりあえず、ここから契約して、root passが書いてあるメール(多分2通目?)がくるまでおとなしく待つ。そのあと、管理画面からVPSを起動してSSH接続。このあと、しばらく新規でSSH接続が確立できなくなるので(理由は後述)、Terminalを2つ起動して念のため予備で2つ接続しとくといい。
つないだら、GentooのInstall用にあらかじめmirror一覧から日本のmirrorを選んでamd64のstage3とportageのsnapshotを/tmpに落としておく。ここでやっておかないとCentOS関連ファイル除去後には落とせなくなるので注意。
[root@wwwXXXXu /]# cd /tmp [root@wwwXXXXu tmp]# wget http://ftp.iij.ad.jp/pub/linux/gentoo/releases/amd64/current-stage3/stage3-amd64-20100902.tar.bz2 [root@wwwXXXXu tmp]# wget http://ftp.iij.ad.jp/pub/linux/gentoo/snapshots/portage-latest.tar.bz2
CentOSのシステムを掃除する
とりあえず、初期状態のsakuraVPSのCentOSはこんな感じになってます。
[root@wwwXXXXu ~]# ls -F / bin/ etc/ lib64/ misc/ proc/ selinux/ tmp/ boot/ home/ lost+found/ mnt/ root/ srv/ usr/ dev/ lib/ media/ opt/ sbin/ sys/ var/ [root@wwwXXXXu ~]# mount | grep /dev/hd /dev/hda2 on / type ext3 (rw) /dev/hda1 on /boot type ext3 (rw)
ここから要らないもの(bin, etc, home, lib, lib64 ....など)をまずすべて削除!
・・・と行きたいところだが、いきなり削除するとmvコマンドなんかも使えなくなって詰む。なので、まずbusyboxで現在のCentOSから切り離した形で最低限のコマンド実行が出来るようにする。
busyboxの公式ページから最新版を/tmpなどに落としてstaticでmakeするだけ。busyboxのmenuconfigをするためにncursesのヘッダ類が必要なので、まずそれをyumで入れる。(どうせこの後消えるので細かい事は気にしなくてOK)
[root@wwwXXXXu tmp]# yum install ncurses-devel [root@wwwXXXXu tmp]# wget http://busybox.net/downloads/busybox-1.17.2.tar.bz2 [root@wwwXXXXu tmp]# tar jxf busybox-1.17.2.tar.bz2 [root@wwwXXXXu tmp]# cd busybox-1.17.2 [root@wwwXXXXu busybox-1.17.2]# make menuconfig
busyboxのメニューが出たら、static linkでbuildするようにと、コンパイルエラーが出るのでiplink moduleのbuildをしない設定だけしてexit。
Busybox Settings ---> Build Options ---> [*] Build BusyBox as a static binary (no shared libs) Networking Utilities ---> [ ] Use ip applet (NEW) ←チェックをはずす [ ] ip link ←チェックをはずす
あとは make && make install でめでたくbusyboxを展開したディレクトリ直下の_installにsymlink集が出来上がるので、ここにPATHを通す。
[root@wwwXXXXu /]# export PATH=/tmp/busybox-1.17.2/_install/sbin: /tmp/busybox-1.17.2/_install/bin:/tmp/busybox-1.17.2/_install/usr/sbin: /tmp/busybox-1.17.2/_install/usr/bin:$PATH
これで主要なコマンドはCentOSのものではなく、busyboxが優先されるようになるはず。早速、CentOS除去作業を再開。とりあえずいきなり消すのも怖いので、/oldを作ってそこにすべてmvする。(bootは別partitionなので中身だけ移動する)
[root@wwwXXXXu /]# mkdir /old [root@wwwXXXXu /]# mv bin etc home lib lib64 media misc mnt opt root sbin selinux srv usr var old/ [root@wwwXXXXu /]# mkdir /old/boot [root@wwwXXXXu /]# mv /boot/* /old/boot/ [root@wwwXXXXu /]# ls -F boot/ lost+found/ proc/ tmp/ dev/ old/ sys/
dev, lost+found, proc, sys, tmp(busyboxが入ってる) は除外。これでCentOSの痕跡は今起動してるkernelだけに。これ以降、新規でSSHコネクションは張れないので絶対にSSHを切断しないように注意する。切断しちゃった場合は・・・最初からやり直し。VPSって再インストール楽でほんといいね。
Gentooを入れる
ここから先はinstall-minimalで起動してからやるGentooのインストールとさほど変わらない。
stage3, portage-snapshotを入れる
あらかじめdownloadしておいたのを展開して/に移動する。その後、portage snapshotも展開。
[root@wwwXXXXu /]# mkdir /tmp/gentoo [root@wwwXXXXu /]# cd /tmp/gentoo/ [root@wwwXXXXu gentoo]# tar jxpf ../stage3-amd64-20100902.tar.bz2 [root@wwwXXXXu gentoo]# ls bin dev home lib32 mnt proc sbin tmp var boot etc lib lib64 opt root sys usr [root@wwwXXXXu gentoo]# mv bin etc home lib lib32 lib64 mnt opt root sbin usr var / [root@wwwXXXXu gentoo]# cd /usr [root@wwwXXXXu usr]# tar jxf /tmp/portage-latest.tar.bz2
/devはそのままではCentOSのものがmountされていて書けない。mount -o bindで別のpathにbindしてからdevにコピーする。
[root@wwwXXXXu /]# mkdir /mnt/root [root@wwwXXXXu /]# mount -o bind / /mnt/root [root@wwwXXXXu /]# cp -a /tmp/gentoo/dev/* /mnt/root/dev/ [root@wwwXXXXu /]# umount /mnt/root
一時的に使ってたbusyboxとおさらばする。
[root@wwwXXXXu /]# source /etc/profile [root@wwwXXXXu /]# env-update [root@wwwXXXXu /]# rm -rf /tmp/busybox*
これでほぼ中身がGentooに。
各種設定をする
Gentooユーザーにとってはこの辺はいつもどおり。お約束な感じの設定をする。
### /etc/make.conf (USEフラグとかお好みで) CHOST="x86_64-pc-linux-gnu" CFLAGS="-march=core2 -O2 -pipe" CXXFLAGS="${CFLAGS}" MAKEOPTS="-j3" GENTOO_MIRRORS="http://ftp.iij.ad.jp/pub/linux/gentoo/" SYNC="rsync://rsync.jp.gentoo.org/gentoo-portage" USE="unicode cjk nls userlocales nptl nptlonly bash-completion emacs perl ruby pcre -samba mmx sse sse2 ssl zlib bzip2 jpeg png sqlite -ipv6 -kde -gtk -gnome -qt -qt3 -qt4 -X -xorg" LINGUAS="ja"
ネットワークにつなげるようにするために、resolv.confはCentOSのものをコピる。zoneinfoもコピる。locale.genもいじりたければいじる。ついでに忘れないうちにrootのpasswordも設定しておく。
[root@wwwXXXXu /]# cp /old/etc/resolv.conf /etc/ [root@wwwXXXXu /]# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime cp: overwrite '/etc/localtime'? y [root@wwwXXXXu /]# passwd Changing password for root
で、emerge --syncの後、必要なもの(kernel, genkernel, grub, syslog, cron)あたりを入れる。kernelはとりあえず面倒なのでgenkernelで作る。
[root@wwwXXXXu /]# emerge --sync [root@wwwXXXXu /]# emerge gentoo-sources genkernel grub syslog-ng vixie-cron [root@wwwXXXXu /]# genkernel all ←結構時間がかかる
VPSシリアルコンソールの設定、grubの設定、fstabの編集を行う。やらずに再起動しちゃうとこれまた最初からやり直しに。シリアルコンソールの設定はここのとおりにする。
### /boot/grub/grub.conf default 0 timeout 5 serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 ←これ terminal --timeout=10 serial console ←これ hiddenmenu title Gentoo Linux 2.6.34-r6 root (hd0,0) kernel /kernel-genkernel-x86_64-2.6.34-gentoo-r6 root=/dev/ram0 real_root=/dev/hda2 console=tty0 console=ttyS0,115200n8r ←これ initrd /initramfs-genkernel-x86_64-2.6.34-gentoo-r6 ### /etc/inittab co:12345:respawn:/sbin/agetty -h 115200 ttyS0 vt100 (最下行に追加) ### /etc/fstab /dev/hda1 /boot ext2 noauto,noatime 1 2 /dev/hda2 / ext3 noatime 0 1 /dev/hda3 none swap sw 0 0 shm /dev/shm tmpfs nodev,nosuid,noexec 0 0 ### grubをinstall [root@wwwXXXXu /]# grub-install --no-floppy /dev/hda
ネットワーク設定をCentOSからコピーする。DHCPにすると割り当てられたIPじゃないIPを貰えるが、多分まずいので素直に。CentOSとGentooで設定ファイルと書式が違うので手で変換する。
[root@wwwXXXXu /]# cat /old/etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 IPADDR=59.XXX.YYY.ZZZ NETMASK=255.255.254.0 GATEWAY=59.XXX.YYY.1 ONBOOT=yes ###/etc/conf.d/net config_eth0=( "59.XXX.YYY.ZZZ netmask 255.255.254.0 brd 59.XXX.YYY.255" ) routes_eth0=( "default via 59.XXX.YYY.1" )
udevとsshdとnet.eth0の起動設定をする。
[root@wwwXXXXu /]# rc-update add udev boot * udev added to runlevel boot [root@wwwXXXXu /]# rc-update add net.eth0 boot * net.eth0 added to runlevel boot [root@wwwXXXXu /]# rc-update add sshd default * sshd added to runlevel default
これで再起動する準備が整った・・・はず。勇気を出して再起動する。うまくいけばしばらくするとSSHが起動するはず。あとは/oldを削除すればGentooへの切り替え完了。
CPUが案外速くてかなり安いので、複数契約してdistccとかも楽しそう。