NFS root Ubuntu
Posted:
Ubuntuのマスターを作成する
NFS-root用のマスターを作る(このマスターのファイルを後でまるごとコピーする)ため,ゲストOSをひとつ作成し、インストールを行う(終了しないこと、initrd.imgを作るため)
この時は最新のアップデートにはしなくて良いと思う。
インストールが終わったら終了しない。
chrootしてinitrdイメージを更新する
vi /etc/initramfs-tools/initramfs.conf
# 下記の2箇所を変更
MODULES=netboot
BOOT=nfs
DEVICE=eth0
DEVICE は initramfs に渡すデバイス名の指定。最近の Ubuntu/Debian は予測可能な IF 名(ensX など)になりやすいので、NFS ルートの IF 指定はカーネル引数 ip=…/BOOTIF を使う方が確実。
ルータをNFSroot化してみた(20090808-154428) « ふがっさむ・WP
initramfs-toolsを使ってinitrd.imgを作る
mkinitramfs -o /root/initrd.img
initramfsコマンドが無かったら下記で更新
update-initramfs -u
/boot配下のinitramfsファイルが更新される
vmlinuzをコピー
cp /boot/vmlinuz-* /root/vmlinuz
scpで他のサーバにコピーしておく。
再起動後、とりあえず使うものをインストール
nfs-common vim lv
マスターイメージからコピーを行う
イメージをマウントする ※ 仮想化ホストでは行わないこと
imgファイルをループバックデバイスとしてマウントする。 開いているループバックデバイスを表示
[root@fs04 qemu]# losetup -f
/dev/loop0
空いているループバックデバイスにimgファイルを紐づける
losetup /dev/loop0 /usr2/vm_image/KVM_Ubuntu_10_10_master.img
fdisk でパーテーションを確認
fdisk -l /dev/loop0
kpartxでデバイスマッパーに登録
kpartx -a /dev/loop0
デバイスマッパーの確認
ls /dev/mapper/
マウントポイント作成
mkdir /mnt/ubuntu_img
マウント ※ここキケン ホストでは行わないこと
mount /dev/mapper/loop0p1 /mnt/ubuntu_img/
マスターイメージのコピー
NFSで公開するためのディレクトリ作成
mkdir -p /usr2/exports/nfs_root/ubuntu_1010_desktop/
システム領域を全部コピー(割と時間かかる)
cp -rp /mnt/ubuntu_img/* /usr2/exports/nfs_root/ubuntu_1010_desktop/
masterはバックアップとした
cp -a ubuntu_1010_desktop ubuntu_1010_fs03
アンマウント(結構、重要)
umount /dev/mapper/loop0p1
initrdイメージ、起動用カーネルをtftpディレクトリにコピー
pxeconfigの設定
LABEL ubuntu_nfs
kernel ubuntu-10.10-i386-nfs-root/casper/vmlinuz
append initrd=ubuntu-10.10-i386-nfs-root/initrd.img-2.6.35-22-generic ip=dhcp root=/dev/nfs rw splash netboot=nfs nfsroot=203.0.113.254:/usr2/exports/nfs_root/ubuntu_1010_fs03
/etc/modprobe.conf (現行は /etc/modprobe.d/*.conf に分割するのが一般的)
alias eth0 r8169
alias eth1 e1000
fstabの設定
NFS-root用ディレクトリ内の/etc/fstabを下記のようにする
proc /proc proc defaults 0 0
/dev/nfs / nfs defaults,noatime,async 0 1
none /tmp tmpfs defaults 0 0
none /var/run tmpfs defaults 0 0
none /var/lock tmpfs defaults 0 0
none /var/tmp tmpfs defaults 0 0
203.0.113.254:/usr2/exports/exampleuser /home/exampleuser nfs async,rw,noatime 0 0
198.51.100.254:/usr2/vm_image /usr2/vm_image nfs rw,async,noatime 0 0
インターフェース設定
/etc/network/interfaces
※ Ubuntu 18.04+ は netplan (/etc/netplan/*.yaml) が標準
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
eth0側を追記する
sshd
# https://www.ponyo.in/hiki/hiki.cgi?cmd=view&p=ssh&key=ssh#l5
PermitUserEnvironment yes
wo tuika ここまで終わったら、PXEブートで起動可能なはず。
fs03ではなく、作業が終わったので、これをマスターとする
[root@fs04 nfs_root]# mv ubuntu_1010_desktop ubuntu_1010_desktop.old
[root@fs04 nfs_root]# mv ubuntu_1010_fs03 ubuntu_1010_master
ここから不確定 ネットワークインターフェース設定
br0とbr1が作りたいのだが、普通にeth0にブリッジしようとすると、nfsrootでeth0を使用しているからか、起動しない(initramfsで使用しているからか?) なのでeth1にbr0、br1をブリッジすることにする。またeth1側には当然203.0.113.0のパケットは通ってこないので静的にIPアドレスを割り当てる必要があり、あとでiptables等でフォワーディングする必要があると思う。 下記は取り急ぎ備忘録でiptablesの設定はまだしていない。
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto eth1
iface eth1 inet static
address 0.0.0.0
auto br1
iface br1 inet dhcp
bridge_ports eth1
bridge_stp off
auto br0
iface br0 inet static
bridge_ports eth1
bridge_stp off
address 203.0.113.198
network 203.0.113.0
netmask 255.255.255.0
broadcast 203.0.113.255
また直接関係がないが、新しいdebianはeth0:1みたいなのが自動的に上がってこないそうだ。そういった場合、下記の設定をeth0に追加することで共づれ的に上がってくる
post-up ifup eth1:1
post-down ifdown eth1:1
上記で作成したbr0からeth0へのフォワーディングは追って設定する必要がある。