LoginSignup
0
0

More than 1 year has passed since last update.

RancherOSをEFI,raid,lvm上にインストールするためのメモ

Last updated at Posted at 2023-01-11

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0