USBメモリやUSB接続のディスクにもSlackware

以前から何度もLinuxのインストール先をUSB接続の外付けディスクで試してたけどカーネルパニックで起動できたことがなかったけどまたAIに聞いてSlackwareでできたのでメモ。

まず、USBメモリインストーラを起動はできるのにインストール先が見えない場合は

modprobe xhci-pci
modprobe usb-storage
modprobe uas

認識できたらgdiskでパーティションを作成。(今回は/dev/sda)
/dev/sda1 1MB ef02(MBR)
/dev/sda2 512MB ef00(UEFI)
/dev/sda3 8GB 8200(スワップ)
/dev/sda4 残り 8399(Linuxシステム)
今時のUEFIMBRの古いPCどちらでも起動できるようにするためsda1とsda2が必須。

インストール後の設定でliloやeliloはskip、ネット接続はとりあえずdhcpを選んで最後は再起動ではなくshellに抜けて手動で設定する。
sdaはまだマウントされたままなので
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt
usbのドライブやraid1を認識できるinitrdを作る


mkinitrd -c -k 5.15.19 \<-- (/lib/module/以下で確認できるバージョン) 
  -m xhci-pci:xhci-hcd:usb-storage:uas:raid1:ext4 \
  -f ext4 \
  -r "UUID=1234-abcd-5678" \ <-- (blkidコマンドで確認した/パーティションのUUID)
  -w 10 <-- (10秒ウェイト) 
eliloconfigコマンドで一度デフォルトの環境を作る。

(raid1環境の時も-r /dev/md0とか指定が必要らしい)

 

/boot/efi/EFI/Slackware/elilo.confを修正

image=vmlinuz
  label=Slackware
  initrd=initrd.gz  <-- 追加(mkinitrdで作ったファイル名)
  read-only
  append="root=UUID=ルートパーティションのUUID rootdelay=10"  <-- 待ち時間を追加

mkinitrd で作成した /boot/initrd.gz を、eliloが読み取れる場所にコピー
cp /boot/initrd.gz /boot/efi/EFI/Slackware/

マザーボードが変わった時でも起動できるようフェイルセーフの位置にコピー
cp -pR /boot/efi/EFI/BOOT
mv /boot/efi/EFI/BOOT/elilo.efi  /boot/efi/EFI/BOOT/BOOTX64.EFI

/etc/fstabの"/dev/sdaX"となっている部分を
UUID=各パーティションのUUID
に変更する。(PCが変わってディスクの名前が変わってもいいようにする。)


以下古いMBRのPC用の設定。
/etc/lilo.conf

boot = /dev/sda          # USBメモリのデバイス名(番号は不要)
vga = normal
prompt
timeout = 50

image = /boot/vmlinuz
  root = "UUID=ルートパーティションのUUID"
  label = Slackware
  initrd = /boot/initrd.gz
  read-only
  append = "rootdelay=10"

liloコマンドを実行

 

AIいはくliloコマンドがエラになる場合はgrub2を使うとのこと

grub-install --target=i386-pc /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

 

exitでchrootを抜け

umount -R /mntでマウントを解除して

rebootで再起動。

 

これでUEFIのPCでも古いMBRのPCでも起動できた。

けど有線接続のDHCPIPアドレスが取れない。

起動後に/etc/rc.d/rc.dhcp restartをやり直せばつながったのでタイミングの問題。

 /etc/rc.d/rc.inet1.conf 
DHCP_TIMEOUT="20"  <-- 少し待つようにする
DHCP_IP_ADDR="yes"
これで起動時に線がつながっていればIPアドレスが割り当てられるようになった。

違うPCで起動するとまた繋がらず、restartしてもダメだったけど、これは既に
認識していたNICの情報が残っていることが原因。
/etc/udev/rules.d/70-persistent-net.rules
NICについての行を消すか、ファイル自体を削除して再起動すればその機材の
NICで登録し直して繋がるようになる。

 

これで持ち運べるLinux(Slackware)ができた。

 

slackwareのアップデート手順 - bananagunsoの日記

とかアップデートでカーネルのバージョンが新しくなったときはインストール時と同様に

mkinitrdでinitrd.gzを作り直し

vmlinuzを

/boot/efi/EFI/Slackware/vmlinuz

/boot/efi/EFI/BOOT/vmlinuz

にコピーして

initrd.gzも

/boot/efi/EFI/Slackware/initrd.gz

/boot/efi/EFI/BOOT/initrd.gz

にコピー

書き込みが遅れることがあるようなので一応syncコマンド

liloコマンド

で手動で更新する必要がある。

 

 

関係するファイルは以下のものでvmlinuzとinitrd.gzは

/boot、/boot/efi/EFI/Slackware/、/boot/efi/EFI/BOOT/ですべて同じもの。

違うのはelilo.efiがBOOT/BOOTX64.EFIって名前になるところだけ。

 

# ls -l /boot/vmlinuz /boot/vmlinuz-6.12.63 /boot/initrd.gz
-rw-r--r-- 1 root root 11918000 Jan  5 21:58 /boot/initrd.gz
lrwxrwxrwx 1 root root       15 Jan  5 20:31 /boot/vmlinuz -> vmlinuz-6.12.63
-rw-r--r-- 1 root root 13881856 Dec 19 09:37 /boot/vmlinuz-6.12.63

 

# find /boot/efi/EFI/ -ls
        4      4 drwxr-xr-x   4 root     root         4096 Jan  4 22:43 /boot/efi/EFI/
        7      4 drwxr-xr-x   2 root     root         4096 Jan  5 15:50 /boot/efi/EFI/Slackware
       21      4 -rwxr-xr-x   1 root     root          186 Jan  4 22:47 /boot/efi/EFI/Slackware/elilo.conf
       22    236 -rwxr-xr-x   1 root     root       239734 Aug  5  2022 /boot/efi/EFI/Slackware/elilo.efi
       23  13560 -rwxr-xr-x   1 root     root     13881856 Jan  4 22:48 /boot/efi/EFI/Slackware/vmlinuz
       24  11640 -rwxr-xr-x   1 root     root     11918000 Jan  4 22:48 /boot/efi/EFI/Slackware/initrd.gz
       12      4 drwxr-xr-x   2 root     root         4096 Jan  4 22:43 /boot/efi/EFI/BOOT
       29      4 -rwxr-xr-x   1 root     root          186 Jan  4 22:51 /boot/efi/EFI/BOOT/elilo.conf
       30  13560 -rwxr-xr-x   1 root     root     13881856 Jan  4 22:48 /boot/efi/EFI/BOOT/vmlinuz
       31  11640 -rwxr-xr-x   1 root     root     11918000 Jan  4 22:48 /boot/efi/EFI/BOOT/initrd.gz
       32    236 -rwxr-xr-x   1 root     root       239734 Aug  5  2022 /boot/efi/EFI/BOOT/BOOTX64.EFI

 

アップグレード後カーネルパニックで起動できなくなって、古いPCに繋いでMBR環境だと起動できるって状態に。

ファイル名を間違えてコピーしたことが原因だったのでインストールメディアでUFEI起動してeliloconfigで初期状態に戻し、vmlinuzとinitrd.gzのコピーとelilo.confを修正して復旧できた。