« Debian MultiArch Supportに関する諸々 | Home | このblogは移動しました。 »

July 6, 2012

Debianサーバ無限ポチポチのお作法

 大統一で発表したネタの準備に、kvmで色々実験した。その際パラメータや手順を変えて実験するのだが、毎回真っ新なインストール状態に戻す必要がある。この作業は面倒でさらに試行の度に行うので大変である。さらに今回はアーキティクチャーを変えなければならないので、debootstrapでベースシステムをダウンロードしてイメージとしてとっておき、必要になったら展開してchrootというやり方は使えない。そこで、以前第0回福岡Debian勉強会のときに、山田さんが発表されていた、Debianサーバ量産工場 - 無限ポチポチ on Debianという発表を思い出して、それに紹介されていた手法の一つを試してみた。

 基本的なアイデアは、Read OnlyなベースシステムとRead Writeな変更部分を分離しておき、これらをaufsでまとめて、kvmのvirtfsを使うというものだ。

 まず、debootstrapで適当なディレクトリに、ベースシステムを展開して、

# debootstrap --arch i386 sid ./sys http://ftp.jp.debian.org/debian

ベースシステムにカーネルをインストールし、initrdに必要なモジュールを追加する。もしも最初から入れておく必要があるパッケージがあれば、chrootしているうちにインストールしておこう。あとrootパスワードの設定はお忘れなく。

# 必要な設定をするために、ベースシステムにchrootする
# mount -t proc proc sys/proc
# chroot ./sys

# カーネルをインストール
# apt-get update
# apt-get install linux-image-i686

# initrdに、virtioと9pのモジュールを追加
# echo virtio_pci >> /etc/initramfs-tools/modules
# echo 9p >> /etc/initramfs-tools/modules
# echo 9pnet_virtio >> /etc/initramfs-tools/modules
# update-initramfs -u

# root passwordの変更
# passwd

# chrootを抜ける
# exit
# umount sys/proc

 次にroot ファイルシステムを作ろう。変更部分のディレクトリを作り、さきほどのベースシステムのディレクトリとaufsで束ねる。

# mkdir -p rootfs/rw
# ln -s ../sys rootfs/
# mount -t aufs -o br:rootfs/rw:rootfs/sys=ro none rootfs

 最後に、kvmを起動する。

# kvm -virtfs local,path=./rootfs,mount_tag=FOO,security_model=none\
 -kernel ./rootfs/vmlinuz -initrd rootfs/boot/initrd-.... \
 -append "rootfstype=9p rootflags=trans=virtio root=FOO" ....

mount_tagと、-appendオプション中のrootパラメータを一致させることがポイント。 また、これは実験を目的としているので、セキュリティのことは考慮されていない。

 あとはRead Writeなディレクトリを自動で作って、rootfsを自動でマウントして、kvmを立ち上げてくれるスクリプトを書けば幸せになれます。

Have Fun!

No TrackBacks

TrackBack URL: http://www.argv.org/~chome/blog/mt-tb.cgi/252

About this Entry

This page contains a single entry by chomy published on July 6, 2012 3:58 PM.

Debian MultiArch Supportに関する諸々 was the previous entry in this blog.

このblogは移動しました。 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.