Contents

phoenix-power前は、他のOSをカスタマイズしたUSBを使っていたのですが、ArchLinuxをカスタマイズしたやつを使うようにしました。

カスタムUSBを持ち運ぶ際は、どのマシンに挿しても起動できるように、または、キーボードその他の設定も切り替えられるようにシステムを構築していきたいですね。

ということで、まずは、ブートシステムからなわけですが、これは非常に面倒くさいのです。なぜなら、ほとんどの人は、grub-installの自動判断に任せて、マシンにブートローダーをインストールしているからです。これを、1つずつ--targetを使用して、ファイルシステムを作成していくことになります。

ただし、私の場合は、既にMacBook用に作ってありましたので(x86_64-efi)、それをコピーし、USBにArchLinuxをインストールする際は、--target=i386-pcにしました。

1
$ grub-install --target=i386-pc --recheck --debug --force /dev/sdb1
1
2
3
4
5
6
7
8
9
10
# USB2:/mnt/sdb2
$ mkdir -p  /mnt/sdb2
$ mount /dev/sdb2 /mnt/sdb2

# HDD2:/mnt/sda2
$ mkdir -p /mnt/sda2
$ mount /dev/sda2 /mnt/sda2

# x86_64-efi:HDD2 → USB2
$ cp -r /mnt/sda2/boot/grub/x86_64-efi /mnt/sdb2/boot/grub/

sdb2:USB2は、こんな感じの構成になります。

/boot/grub/
  x86_64-efi
  i386-pc

ついでに、前回で解説したMac用の起動時間短縮設定もコピーしておきましょう。

1
2
3
4
5
6
7
8
9
10
# HDD1:/mnt/efi
$ mkdir -p /mnt/efi
$ mount /dev/sda1 /mnt/efi

# USB1:/mnt/efi-usb
$ mkdir -p /mnt/efi-usb
$ mount /dev/sdb1 /mnt/efi-usb

# System:HDD → USB
$ cp -r /mnt/efi/System /mnt/efi-usb

sdb1:USB1は、こんな感じになります。

/System/Library/CoreServices/Boot.efi

簡単に説明すると、これは、中身がsda1にあるefi/EFI/arch/grubx64.efiなので、それを使ってもよいです。

1
2
3
$ mkdir -p /mnt/efi-usb/System/Library/CoreServices/

$ cp -r /mnt/efi/efi/EFI/arch/grubx64.efi /mnt/efi-usb/System/Library/CoreServices/Boot.efi

説明していて思ったのですが、かなりややこしいですね。

ブートできるようになったら、マシンを使って、ArchLinuxをカスタマイズしていけばよいです。もちろん、既存のものを丸ごとコピーしてきても良いですが、その場合は、権限に注意しなければなりません。(全体コピーなら大丈夫なのかな…その辺りは分かりません)

1
2
# すべてのユーザーに読み,書き,実行権限を与え、グループの実行権限を除き、その他のユーザーの書き,実行権限を除く(ディレクトリ再帰)
$ chmod -R a+rwx,g-x,o-wx /home/user/

ここで、結果は-rwxrw-r--になります。

追記

以下のスクリプトを見ていただければ大体の手順がわかります。これは、Mac用のブートシステムを/dev/sdb1にインストールするやり方です。実行すれば、Mac PCでLinux USBを起動できます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
su
# usb-efi-boot
mkdir -p /boot/efi
mount -t vfat /dev/sdb1 /boot/efi
if [ ! -d /boot/efi/EFI ];then
    pacman -S efibootmgr
    grub-install --force --recheck --target=x86_64-efi --efi-directory=/boot/efi
    grub-mkconfig -o /boot/grub/grub.cfg
    cp /home/dotfiles/icon/arch-dark.volumeicon.icns /boot/efi/.volumeicon.icns
    mkdir -p /boot/efi/System/Library/CoreServices
    cp /boot/efi/EFI/arch/grubx64.efi /boot/efi/System/Library/CoreServices/Boot.efi
    echo 'HOOKS="base udev block autodetect modconf filesystems keyboard fsck"' >> /etc/mkinitcpio.conf
    mkinitcpio -p linux
fi