RancherOSをEFI,raid,lvm上にインストールするためのメモ
- 参考記事
- 本稿で作成したスクリプトのリポジトリ
- まず、RancherOSのisoにEFIを載せる。UbuntuのisoからEFIを流用する。
# wget https://releases.rancher.com/os/v1.5.8/rancheros.iso
# wget https://releases.ubuntu.com/jammy/ubuntu-22.04.1-live-server-amd64.iso
# mkdir tmpubuntu tmprancheros tmprancheros_dest
# mount ubuntuserverlive.iso tmpubuntu
# mount rancheros.iso tmprancheros
# fallocate -l 250M rancheros.img
# gdisk rancheros.img
o,y,n,enter,enter,ef00,w,Y
# losetup --partscan --show --find rancheros.img
# mkfs.fat /dev/loop2p1
# mount /dev/loop2p1 rancheros_dest
# cp -ar tmprancheros/* tmprancheros_dest/
# cp -ar tmpubuntu/boot/grub tmprancheros_dest/boot/
# cp -ar tmpubuntu/EFI tmprancheros_dest/
# vi tmprancheros_dest/boot/grub/grub.cfg
set timeout=30
set default=1
loadfont unicode
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
menuentry "Install Rancher" {
linux /boot/vmlinuz-$KERNEL_VER-rancher nomodeset vga=775 video=1280x1024 rancher.autologin=tty1 rancher.autologin=ttyS0 rancher.autologin=ttyS1 console=tty1 console=ttyS0 console=ttyS1 printk.devkmsg=on panic=10 ---
initrd /boot/initrd-$RANCHEROS_VER
}
grub_platform
if [ "$grub_platform" = "efi" ]; then
menuentry 'Boot from next volume' {
exit 1
}
menuentry 'UEFI Firmware Settings' {
fwsetup
}
else
menuentry 'Test memory' {
linux16 /boot/memtest86+.bin
}
# mkisofs -r -V "rancheros" -cache-inodes -J -l -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o rancheros.efi.iso tmprancheros_dest
# umount tmprancheros_dest
# losetup -d /dev/loop2
# umount tmpubuntu tmprancheros
# cp rancheros.efi.iso /mnt/c/Users/.../Downloads (WSLの場合)
- rancheros.efi.isoをWindowsのRufusなどでUSBメモリに焼く。
- このUSBメモリでサーバーを起動する。
- 自動ログインするので、コンソールに以下を打ち込む。
$ sudo ros console switch ubuntu -f
$ sudo passwd rancher
rancher↵
rancher↵
- あとは適当なリモート端末からログインして作業(DHCPで取得したIPを記録しておく)
$ ssh x.x.x.x -l rancher
Password: rancher↵
$ sudo bash
# apt-get update; apt-get install -y gdisk lvm2 dosfstools mdadm
# gdisk /dev/sda
x↵ l↵ 1↵ m↵ (コマンド入力、アライメントの変更)
n↵ 1↵ ↵ 2047↵ ef02↵ (MBR領域, /dev/sda1)
x↵ l↵ 2048↵ m↵ (アライメントを元に戻す)
n↵ 2↵ ↵ +256M↵ ef00↵ (EFI領域, /dev/sda2)
n↵ 3↵ ↵ +8G↵ 8200↵ (swap領域, /dev/sda3)
n↵ 4↵ ↵ +1G↵ fd00↵ (boot領域, /dev/sda4)
n↵ 5↵ ↵ +1280G↵ fd00↵ (root領域, /dev/sda5)
n↵ 6↵ ↵ ↵ fd00↵ (データ用, /dev/sda6)
w↵ y↵
- raid1をまず1個だけで構成する(後でドライブを追加すればいい)。
# mdadm --create /dev/md125 --level=1 --metadata=1.0 --raid-devices=2 /dev/sda4 missing
# mdadm --create /dev/md126 --level=1 --metadata=1.2 --raid-devices=2 /dev/sda5 missing
# mdadm --create /dev/md127 --level=1 --metadata=1.2 --raid-devices=2 /dev/sda6 missing - フォーマットとLVMの構成
# mkfs.ext4 -L RANCHER_BOOT /dev/md125
# mkswap -L RANCHER_SWAP /dev/sda3
# mkfs.vfat -F32 -n EFI /dev/sda2 - udevを立ち上げてにシェルに入ってlvmの作業をする
# system-docker exec -it udev bash
# vgcreate vg0 /dev/md126
# lvcreate -n lv0 --size=1T vg0(サイズは全体の8割程度,snap領域を残す)
# exit (udevを抜ける) - この後、/dev/vg0/lv0の実体としての/dev/mapper/vg0-lv0と/dev/dm-0が同じデバイス番号であることを確認しておく
# ls -l /dev/mapper/vg0-lv0
brw-rw---- 1 root disk 252, 0 Jan 16 05:11 /dev/mapper/vg0-lv0
# ls -l /dev/dm-0
brw-rw---- 1 root disk 252, 0 Jan 16 05:00 /dev/dm-0 - 公開鍵の登録
# echo -n -e "#cloud-config\nssh_authorized_keys:\n - " > cloud-config.yml
# echo "[公開鍵]" >> cloud-config.yml - インストール(終了時にrebootするか聞かれるので、noを入力)
# ros install -t gptsyslinux -c cloud-config.yml -a rancher.state.mdadm_scan -a rancher.state.lvm_scan -d /dev/sda -p /dev/dm-0 (/dev/vg0/lv0を指定するとエラーが出る)
Installing from rancher/os:v1.5.8
Continue [y/N]: y↵
...
Continue with reboot [y/N]: n↵ - インストール先に作成されたbootディレクトリをboot領域にコピー
# mount /dev/dm-0 /opt
# mount /dev/md125 /mnt
# cp -ra /opt/boot/* /mnt
# mkdir /mnt/efi
# umount /opt
# umount /mnt - EFIのコピーとgrubメニューの追加(インストーラUSBがsdbの場合)
# mkdir /mnt/efipart && mount /dev/sda2 /mnt/efipart
# mkdir /mnt/installer && mount /dev/sdb1 /mnt/installer
# cp -r /mnt/installer/EFI /mnt/efipart
# vi /mnt/efipart/EFI/BOOT/grub.cfg
set timeout=1
set gfxmode=1280x1024x16
set gfxpayload=keep
menuentry "Rancher from GPT" {
search --no-floppy --set=root --label RANCHER_BOOT
linux /vmlinuz-4.14.138-rancher nomodeset vga=775 video=1280x1024 printk.devkmsg=on rancher.state.mdadm_scan rancher.state.lvm_scan rancher.state.dev=LABEL=RANCHER_STATE rancher.state.wait panic=10 console=tty1 console=ttyS0
initrd /initrd-v1.5.8
}
# reboot
-
rancherOSをインストールした/dev/sdaから起動する
-
ログイン後fstabに/bootと/boot/efiを登録する
# ros config set mounts '[["/dev/md125","/boot","ext4",""],["/dev/sda2","/boot/efi","vfat",""]]' -
失敗したら、USBインストーラーで立ち上げて、ディスク先頭をゼロクリアしてやりなおす
$ sudo bash
# dd if=/dev/zero of=/dev/sda bs=1G count=10 &
[1] xxxx(プロセス番号)
# kill -s SIGUSR1 xxxx (SIGUSR1で実行経過を表示)
# reboot -
gdiskのところで、"Found invalid MBR and corrupt GPT. What do you want to do?"と聞かれたら、2を選択する(Create blank GPT)
-
lvmのsnapshot機能を使うには、以下のコマンドを実行する
# system-docker exec -it udev bash
# ros service enable kernel-extras
# ros service up kernel-extras
# modprobe dm-snapshot
# lvcreate -s -L 100G -n snap /dev/mapper/vg0-lv0
# exit (udevを抜ける)
# mount /dev/vg0/snap /mnt -
snapshotを削除する
# umount /mnt
# system-docker exec -it udev bash
# lvremove /dev/vg0/snap
# exit