新しいConoHaにGentooを入れてみる

この記事はConoHa Advent Calendar 2016 - Qiitaの9日目の記事です。
中盤辺りなのでネタ記事をどうぞ(最初と最後にはできないこと)

ConoHaのAPIを使うことでisoを挿入し、isoからOSをインストールすることができます。
この機能を使ってGentoo LinuxというOSを入れてみようと思います。ちなみにGentooの記事ではないので、Gentooがらみの細かいとこは割愛します。

OSを入れ替えるための汎用的な作業

VPSの用意

VPSを用意します。既にあるVPSを使っても良いですが、SSDに載ってるデータが全て消えます。今回は512MBプランを使ってみます。OSは入れ替えるのでどれでも良いです。と、思ってましたがどうやらGPTだったりMBRだったりするので、選択肢によっては最後のほうでコケます。ubuntuを選んでおけば問題ないはずです。

isoの挿入

CLIツールで簡単にISOイメージをマウントする|VPSならConoHa に書いてあるconoha-isoをうことで、すぐにisoを挿入することができました。
isoの挿入対象のVPSがactiveだとエラーになるようなので気をつけてください。
今回使ったisoはhttp://distfiles.gentoo.org/releases/amd64/autobuilds/20161124/install-amd64-minimal-20161124.isoです。

起動とインストール

ConoHaのWeb UIからisoを挿入したVPSを起動し、15秒以内にコンソールを開いて何かキーを押します。起動後15秒以内に何か操作しないとSSDから起動してしまいます。他のOSでもisoを挿入してるはずなのにSSDから起動している時には、同じような機能が働いていることをうたがってみてください。

そしておもむろに以下の塊をコピペして実行していくとgentooがインストールされます。
parted -s -a optimal /dev/vda -- mklabel msdos mkpart primary ext4 1 -1 &&
yes|mkfs.ext4 /dev/vda1 &&
mount /dev/vda1 /mnt/gentoo &&
cd /mnt/gentoo &&
wget http://ftp.jaist.ac.jp/pub/Linux/Gentoo/releases/amd64/autobuilds/20161201/stage3-amd64-20161201.tar.bz2 &&
tar xvjpf stage3-amd64-20161201.tar.bz2 --xattrs &&
cp -L /etc/resolv.conf /mnt/gentoo/etc/ &&
mount -t proc proc /mnt/gentoo/proc &&
mount --rbind /sys /mnt/gentoo/sys &&
mount --make-rslave /mnt/gentoo/sys && 
mount --rbind /dev /mnt/gentoo/dev &&
mount --make-rslave /mnt/gentoo/dev &&
chroot /mnt/gentoo /bin/bash 

source /etc/profile &&
emerge --sync &&
echo "Asia/Tokyo" > /etc/timezone &&
emerge --config sys-libs/timezone-data &&
sed -i -e 's/#ja_JP.UTF-8/ja_JP.UTF-8/g' -e 's/#en_US.UTF-8/en_US.UTF-8/g' /etc/locale.gen &&
locale-gen &&
eselect locale set en_US.utf8 &&
env-update && source /etc/profile && export PS1="(chroot) $PS1" &&
emerge sys-kernel/gentoo-sources

で、多分ここでコケます。
なぜか以下の操作なら通るのでとりあえず、続きとして以下の塊をどうぞ。

rm /usr/src/linux* -r ;\
rm /var/tmp/portage/sys-kernel/* -r ;\
cd /usr/portage/sys-kernel/gentoo-sources/ &&
ebuild gentoo-sources-4.4.26.ebuild clean && 
ebuild gentoo-sources-4.4.26.ebuild fetch &&
ebuild gentoo-sources-4.4.26.ebuild unpack &&
ebuild gentoo-sources-4.4.26.ebuild compile &&
ebuild gentoo-sources-4.4.26.ebuild install &&
ebuild gentoo-sources-4.4.26.ebuild qmerge


cd /usr/src/linux-4.4.26-gentoo &&
make localyesconfig

ここでいろいろ聞かれますが、全部Enterで良いです。

make -j2&&
make install &&
make modules_install &&
sed -i -e 's\/dev/BOOT\#/dev/BOOT\g' -e 's\/dev/ROOT\/dev/vda1\g' -e 's\/dev/SWAP\#/dev/SWAP\g' -e 's\/dev/fd0\#/dev/fd0\g' -e 's/ext3/ext4/g' /etc/fstab &&
sed -i -e 's/localhost/nannka/g' /etc/conf.d/hostname &&
echo 'config_eth0="dhcp"' > /etc/conf.d/net &&
cd /etc/init.d &&
ln -s net.lo net.eth0 &&
rc-update add net.eth0 default &&
rc-update add sshd default &&
emerge sys-boot/grub &&
grub-install /dev/vda &&
grub-mkconfig -o /boot/grub/grub.cfg &&
passwd

最後にrootのpasswordを聞いてくるので何か設定しましょう。
そして再起動して15秒以上放置すればGentooが起動します。rootユーザーでログインしてbashが使えるはずです。
sshサーバーは走っていますが公開鍵認証のみなのでコンソールから公開鍵をコピペするなりギフハフから引っ張ってくると良いかと思います。

感想とか

  • 昔のConoHaにはGentooを入れたことがあったのですが、新しいConoHaに入れたのは初めて、というよりこの記事のために新しいConoHaのアカウントを作りました。メモリ500MBの環境なのでもっと苦労するかと思ったのですがたいしたことはなかったです。kernelのソースの展開周りでコケたのはメモリのせいかと睨んではいますが、逆にいうと怪しいのは一箇所です。
  • 昔のConoHaではisoのアップロードが結構めんどくさかったのですが、コマンドで直接isoを習得させて挿入することができるようになったのはとてもうれしいです。昔のConoHaではwebから秘密鍵ダウンロードしてsftp経由で手元のisoを上げる必要がありました。
  • 上記のスクリプト(?)が1時間程度で終わるので、1coreにしては早いのかなぁ、とおもいました。
  • 公開がぎりぎりの時間になってしまってゴメンナサイ(emerge sys-kernel/gentoo-sourcesでコケたことの解決のために4回ほどインストールし直していたら時間かかっちゃいました)
  • 実は上のスクリプトはテストされてませんので誤字があるかもしれません(泣)。この記事を公開したら新しいVPS建てて投げ込みます。テストしたらやっぱりバグってたので書き換えました

履歴

2016/12/10 00:13に追加 スクリプトの最初の二行を追加。
2016/12/10 00:21に訂正 yesをパイプする必要があるものに追加
2016/12/10 00:22に追加 三行目
2016/12/10 00:41に追加 "パーティションの削除と作成" fdisk使わずに設定ファイルを出力させて編集してって手順でやる方法が合った気もするけどとりあえずfdisk
2016/12/10 00:47に修正 wgetするstage3のアドレスが間違っていた
2016/12/10 02:52 スクリプトの全体的な訂正。赤字の追加、"パーティションの削除と作成"の削除(多分動く)