NFS root Ubuntu

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へのフォワーディングは追って設定する必要がある。

お試しネットワーク環境を作る - いますぐ実践! Linuxシステム管理 / Vol.065