💿

Arch Linuxのインストールメディアと同じ環境をインストールする方法

2024/06/19に公開

更新履歴

  • 2024-06-19: Hayao0819さんの指摘を受けて、cp -rを使用した方法から、unsquashfsを使用した手法に変更

はじめに

初投稿です。(二個書こうとして完成させていない記事があるがどうしようか…)

archlinuxjpのslackを見て、

  • Arch Linuxのインストールメディアと同じ環境をインストールできれば検証など何かに使えそう
  • 他人に説明するのに記事という形にするのが良さそう

と思い、出来そうではあったけれど、実際にやってみたら本当にできたので記事にしてみました。

前提

今回は検証目的なので、インストールメディアからの変更点は最小限に留めるようにしています。
また、継続的に使用することは考えておらず、起動できればOKとしています。

インストール環境

インストールには、Proxmox VEの仮想マシンを使用しました。
通常Proxmox VEで使用するインストールメディアは、仮想マシンに対して直接isoをマウントして使用することが多いと思われます。
しかし今回はノートパソコンと近い環境で検証したいと考えたため、ddコマンドを使用してArch LinuxのisoファイルをUSBメモリーに書き込み、ホストに接続し、そのUSBメモリーを仮想マシンにパススルーさせることによって仮想マシンに認識させました。

当たり前だと思われますが注意点として、UEFIのセキュアブートの設定をoffにすることを忘れないようにしてください。(良く分からないエラーが出てしまって時間を溶かした…)

難易度

archinstallを使わずにインストールできるぐらいの人ならば、手数はそれよりも少なく、ArchWikiのインストールガイドの内容を応用できるので簡単にできると思います。
ただ、マウント周りに読み替えが必要になることが少し面倒かもしれません。

インストール方法

インストーラー、インストールマニュアルが無いLinuxのlive環境からインストールする手順とそこまで変わらないと思います。
特殊なのは、mkinitcpio周りです。

インストール準備

基本的にはArchWikiのInstallation guideに従って準備をします。

  • Arch Linuxのインストールメディアを焼いたUSBメモリーから起動
  • loadkeys jp106でコンソールのキーボードレイアウトの指定
  • fdiskなどでFAT32のEFIパーティション/dev/sda1とext4のインストール先パーティション/dev/sda2を作成

メディアのマウント

USBメモリーをマウントした後、インストール先もマウントしておきます。

mount --mkdir /dev/sdb1 /mnt/usb
mount --mkdir /dev/sda2 /mnt/ext4

インストール

rootfsの中身をunsquashfsで展開します。
いつものインストールより簡単です。

unsquashfs -d /mnt/ext4 /mnt/usb/arch/x86_64/airootfs.sfs

/boot の準備

rootfsを展開したことによって空のbootディレクトリが作成されるはずなので、EFIパーティションをマウントしておきます。
正しいのかどうかは分かりませんが、インストールメディアからの変更点を少なくするために、インストールメディアで使用されているlinuxカーネルをコピーしておきます。

mount /dev/sda1 /mnt/ext4/boot
cp /mnt/usb/arch/boot/x86_64/vmlinuz-linux /mnt/ext4/boot

fstabの作成

chroot環境で作業する前の最低限の準備として、fstabを作成しておきます。
ArchWikiのインストールガイド通りです。

genfstab -U /mnt/ext4 >> /mnt/ext4/etc/fstab

initramfsの作成

インストールメディア内のinitramfsをそのまま流用した場合、メディアの内容をメモリーにコピーする処理中に、メディアが存在しないという内容のエラーが発生します。(エラーのスクショ忘れてた…)
インストールメディアのmkinitcpioの設定ファイルをインストール後も起動できるように改変しても良いのですが、デフォルトのmkinitcpioの設定を使用してinitramfsを作成して、そこから起動するのが一番簡単なので、そのようにします。

まずは、いつも通りchroot環境内に入ります。

arch-chroot /mnt/ext4

Arch Linuxのインストールメディアには、インストールメディア用のinitramfsを生成する設定が含まれているので、使用しないように移動しておきます。削除しても大丈夫です。

mv /etc/mkinitcpio.d/linux.preset /etc/mkinitcpio.d/linux.preset.bak
mv /etc/mkinitcpio.conf.d/archiso.conf /etc/mkinitcpio.conf.d/archiso.conf.bak

デフォルトのmkinitcpioの設定ファイルを取得するために、pacmanの初期設定をした後にmkinitcpioを再インストールします。

pacman-key --init
pacman-key --populate archlinux
pacman -Sy mkinitcpio

取得した設定ファイルを使用して、initramfsを生成します。

mkinitcpio -P

ブートローダーのインストール

ArchWikiのインストールガイド通りにブートローダーをインストールしてください。
私はgrubをインストールしました。(grub.cfgを生成し忘れて1敗)

再起動

chroot環境から抜けて再起動してください。
USBメモリー無しでも、インストールメディアと同等であり、ファイル書き込みをして再起動してもファイルが残り続ける環境が手に入ると思います。

おわりに

出来そうなことは分かっていたけれども、実際に今までしたことが無かったので、きっかけを与えてくれたArch Linux JP ProjectのSlackワークスペースに感謝しています。(なんかCSS壊れてる???)
自分ひとりで普通にArch Linuxを使用していても、このようなことをしようと思いつかなかったと思っています。

Discussion