インストール ISO のリマスタリング

提供: ArchWiki
2017年7月18日 (火) 21:51時点におけるKusakata (トーク | 投稿記録)による版 (同期)
ナビゲーションに移動 検索に移動

関連記事

大抵は公式の Arch Linux の ISO イメージをリマスタリングする必要はありません。しかしながら、場合によってはリマスタリングが望ましいときもあります。

  • ハードウェアを動作させるのに追加のプログラムが必要な場合 (非常に稀です)。
  • インターネットに接続ができないマシンにインストールする場合。
  • 多数のマシンに Arch Linux を入れる必要があり、同じ手順で何度もインストールする場合。

作成した ISO はライブ環境として起動できるので、レスキューディスクとして使ったり、テスト用・デモ用など使い道は他にも色々あります。

Archiso

既存の ISO をリマスタリングするよりも、Archiso を使用した方がインストール ISO の再構築は簡単です。

手動

概要

インストーラー ISO には2つの Arch Linux 環境が同居しています。片方は32ビット (i686) でもう片方は64ビット (x86_64) です。ルートファイルシステムは arch/i686/airootfs.sfsarch/x86_64/airootfs.sfs に保存されています。カーネルと initramfs は arch/boot/i686arch/boot/x86_64 に存在します。ISO を完全にリマスタする場合、32ビット環境と64ビット環境の両方に変更を加える必要があります。

起動時に initramfs はラベル (例: ARCH_201410) によって起動に使われたデバイスを検索して、適切なアーキテクチャのルートファイルシステムをマウントします。

ISO の展開

Arch Linux ISO をリマスタするには、オリジナルの ISO イメージのコピーが必要です。ダウンロードページ からダウンロードしてください。

そして、ISO をマウントするために新しいディレクトリを作成:

# mkdir /mnt/archiso

作成したディレクトリに ISO をマウント (ISO なので当然読み取り専用になります):

# mount -t iso9660 -o loop /path/to/archISO /mnt/archiso

編集できるように他のディレクトリに中身をコピー:

$ cp -a /mnt/archiso ~/customiso
ノート: customiso は存在しないディレクトリである必要があります。既に存在していると customiso の中に archiso という名前のサブディレクトリが作成されます。

カスタマイズ

x86_64 環境の改造

x86_64 環境にディレクトリを移動:

$ cd ~/customiso/arch/x86_64

airootfs.sfs を解凍 (squashfs-root を作成):

$ unsquashfs airootfs.sfs
ノート: 上記のコマンドを実行するには squashfs-tools が必要です。

解凍された squashfs-root の中身に変更を加えます。chroot することでパッケージをインストールしたりできます:

# arch-chroot squashfs-root /bin/bash
ノート:
  • arch-chrootarch-install-scripts パッケージに含まれています。
  • arch-chroot スクリプトが使えない場合 (Arch ベースのディストリを改造する場合など)、api ファイルシステムをマウントして DNS の設定をコピーしてください。詳しくは Chroot#chroot を使うを参照。

パッケージをインストールするには、pacman のキーリングを初期化する必要があります:

(chroot) # pacman-key --init
(chroot) # pacman-key --populate archlinux
ノート: 上記のコマンドは時間がかかります。詳しくは Pacman-Key を参照。

カーネルや initrd を更新する際は、さらに一手間必要です。例えば chroot の中で archiso をインストールして /etc/mkinitcpio.conf の中身を変更して:

(chroot) # pacman -Syu --force archiso linux
(chroot) # nano /etc/mkinitcpio.conf

HOOKS="... という行を以下のようにした場合:

HOOKS="base udev memdisk archiso_shutdown archiso archiso_loop_mnt archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs archiso_kms block pcmcia filesystems keyboard"

まず initramfs を更新します:

(chroot) # mkinitcpio -p linux

インストールしたパッケージのリストを作成して、pacman のキャッシュを消去し chroot を抜けてください:

(chroot) # LANG=C pacman -Sl | awk '/\[installed\]$/ {print $1 "/" $2 "-" $3}' > /pkglist.txt
(chroot) # pacman -Scc
(chroot) # exit

カーネルや initramfs を更新したときは、それらをコピーしてください:

$ cp squashfs-root/boot/vmlinuz-linux ~/customiso/arch/boot/x86_64/vmlinuz
$ cp squashfs-root/boot/initramfs-linux.img ~/customiso/arch/boot/x86_64/archiso.img

パッケージのリストを移動:

$ mv squashfs-root/pkglist.txt ~/customiso/arch/pkglist.x86_64.txt

airootfs.sfs を再作成:

$ rm airootfs.sfs
$ mksquashfs squashfs-root airootfs.sfs

残ったファイルを削除:

# rm -r squashfs-root

airootfs.sfs の MD5 チェックサムを更新:

$ md5sum airootfs.sfs > airootfs.md5

i686 環境の改造

x86_64 環境の場合とおおむね同じですが異なるところもいくつかあります:

  1. コマンドの中で使用する x86_64i686 に置き換えてください。
  2. chroot を実行するとき、以下のコマンドを使ってください:
# setarch i686 arch-chroot squashfs-root /bin/bash
ノート: arch-chroot スクリプトをインストールしていない場合、chroot を実行するときに setarch i686 を前に付けてください。

EFI ブートイメージの改造

カーネルや initramfs を上書きした上に EFI 環境で起動する場合、EFI ブートイメージを更新してください。EFI ブートイメージは FAT16 ファイルシステムなので dosfstools が必要になります。

$ mkdir mnt
# mount -t vfat -o loop ~/customiso/EFI/archiso/efiboot.img mnt
# cp ~/customiso/arch/boot/x86_64/vmlinuz mnt/EFI/archiso/vmlinuz.efi
# cp ~/customiso/arch/boot/x86_64/archiso.img mnt/EFI/archiso/archiso.img

No space left on device エラーが表示された場合、efiboot.img のサイズを変更する必要があります。新しい efiboot.img を作成して古いファイルをコピー (50 は適当なサイズに置き換えてください)。

$ dd if=/dev/zero bs=1M count=50 of=efiboot-new.img
$ mkfs.fat -n "ARCHISO_EFI" efiboot-new.img
$ mkdir new
# mount -t fat -o loop efiboot-new.img new
$ cp -r mnt/* new/
# umount new mnt
$ mv efiboot-new.img ~/customiso/EFI/archiso/efiboot.img

上記のコマンドで作成された新しい efiboot.img を使用してください。

新しい ISO の作成

(cdrtools に含まれている) genisoimage で新しい ISO イメージを作成:

$ genisoimage -l -r -J -V "ARCH_201209" -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -c isolinux/boot.cat -o ../arch-custom.iso ./
ノート:
  • ISO ラベルはオリジナルのラベルと同じでなければイメージが起動できません (上の例ならば ARCH_201209)。
  • -b-c オプションで指定するパスは ISO のルートディレクトリからの相対パスになります。

作成された ISO イメージは CD, DVD, BD からのみ起動できます。USB スティックやハードディスクから起動するには、isohybrid 機能が必要になります。syslinux に含まれている isohybrid プログラムを使って ISO に処理を加えてください。ISO の /isolinux/isolinux.bin のバージョンとインストールした SYSLINUX のバージョンは同じでなければなりません。

genisoimage と isohybrid を実行する代わりに mkarchiso の xorriso を使うこともできます:

$ iso_label="ARCH_201209"
$ xorriso -as mkisofs \
       -iso-level 3 \  
       -full-iso9660-filenames \
       -volid "${iso_label}" \
       -eltorito-boot isolinux/isolinux.bin \
       -eltorito-catalog isolinux/boot.cat \
       -no-emul-boot -boot-load-size 4 -boot-info-table \
       -isohybrid-mbr ~/customiso/isolinux/isohdpfx.bin \
       -output arch-custom.iso \ 
       ~/customiso

-isohybrid-mbr オプションでは MBR テンプレートファイルを指定する必要があります。オリジナルの ISO には /isolinux/isohdpfx.bin ファイルが存在し、ISO で使用している SYSLINUX のバージョンと対応しています。コピーした ISO の中身にファイルが存在しない場合、上記の xorriso コマンドを実行する前にオリジナルの ISO イメージファイルから抽出する必要があります:

$ dd if=/path/to/archISO bs=512 count=1 of=~/customiso/isolinux/isohdpfx.bin

オリジナルの ISO が EFI で起動できる場合、上のコマンドの "-isohybrid-mbr ..." と "-output ..." の間に以下のオプションを追加することで新しい ISO でも起動することが可能です:

       -eltorito-alt-boot \
       -e EFI/archiso/efiboot.img \
       -no-emul-boot -isohybrid-gpt-basdat \

/EFI/archiso/efiboot.img ファイルは FAT ファイルシステムのイメージファイルです。オリジナルの ISO に存在しない場合、作成された ISO で EFI はサポートされません。

新しく作成した ISO イメージ arch-custom.iso はホームディレクトリに保存されます。USB インストールメディアに書かれているように ISO イメージを USB スティックに書き込んでください。もしくは適当なソフトウェアを使って CD, DVD, BD に ISO イメージを焼いてください。Arch で焼く方法は 光学ディスクドライブ#ISO イメージを CD, DVD, BD に書き込むを見てください。

larch

larch はよりデスクトップベースの方法を提供していて、Arch Linux をホストにする必要はありません。

ノート:
  • バージョン 2.6.39 から、バニラカーネルは aufs のサポートを止めたので、カスタムカーネルを使う必要があります。
  • linux-aufs_friendlyAUR は arch カーネルの AUFS バージョンであり、larch は i686 のビルド済みバイナリを用意しているので、64ビットにする必要がない場合は何もコンパイルしなくて大丈夫です。

poison-livecd-creator

非常にシンプルなライブ CD クリエイタです。Makefile を使ってライブ CD イメージを生成し、pacman を使って base と追加パッケージをライブ CD にインストールします。ライブ CD に入れるパッケージを選んでビルドできます。さらに、柔軟性を確保するために、ライブ CD の起動に GRUB を使っています。フォーマットする必要なくライブ USB スティックを作れます。USB ドライブに GRUB をインストールして ISO 内のファイルをドライブの root ディレクトリにコピーする必要があります。poison-livecd-creator は Arch Linux 上で動かし pacman を使います: poison-livecd-creatorAUR[リンク切れ: アーカイブ: aur-mirror]

Linux-pf

aufs などをサポートしており、ライブ CD を作成する選択肢となります: linux-pfAUR

ノート: バージョン 2.6.39 から、バニラカーネルは aufs のサポートを止めたので、カスタムカーネルを使う必要があります。

参照