archiso

提供: ArchWiki
2024年7月28日 (日) 19:59時点におけるAshMyzk (トーク | 投稿記録)による版 (同期)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

関連記事

Archiso は Arch Linux のライブ CD/USB ISO イメージを構築するための 高度にカスタマイズ可能なツールです。公式のイメージは archiso でビルドされています。レスキューシステム、Linux インストーラー、そして他のシステム用のベースとして使用できます。この Wiki 記事では、archiso のインストールの仕方と、成果物の ISO イメージに含まれるパッケージやファイルなどを設定する方法について説明します。技術的な要求とビルドの手順は プロジェクトの公式ドキュメントを参照してください。Archiso はいくつもの Bash スクリプトで実装されており、mkarchiso コマンドがその中心です。このコマンドのオプションは mkarchiso -h で文書化されているので、ここでは説明しません。

インストール

archiso パッケージか archiso-gitAUR パッケージをインストールしてください。

カスタムプロファイルを準備する

Archiso には2つのプロファイルが付属しています。relengbaseline です。

  • releng は毎月リリースされる公式インストール ISO を作成するために使われます。カスタマイズ ISO イメージを作成するためのベースとしても使用できます。
  • baseline は最小限の構成であり、メディアからライブ環境を起動するために必要な最小限のパッケージのみが含まれています。

未変更のプロファイルをビルドする場合は、#ISO をビルドする までスキップしてください。archiso に同梱されているプロファイルのうちどれかをカスタマイズしたい場合は、ディレクトリ /usr/share/archiso/configs/profile-name/ を、自由な名前の書き込み可能なディレクトリへコピーしてください。例えば:

$ cp -r /usr/share/archiso/configs/releng/ archlive

カスタムプロファイルをカスタマイズ、ビルドするには以下のセクションに進んでください。

プロファイルの構造

Archiso プロファイルは、生成される ISO イメージの内容を定義する設定ファイルが含まれています。プロファイルの構造は /usr/share/doc/archiso/README.profile.rst[1] で文書化されています。

パッケージを選択する

packages.x86_64 を編集して、ライブシステムイメージにどのパッケージをインストールするかを選択してください。1行で1つのパッケージが定義されます。

カスタムのローカルリポジトリ

標準の Arch リポジトリに存在しないパッケージ (AUR のパッケージや、ABS でカスタマイズされたパッケージなど) を追加するには, カスタムローカルリポジトリを設定し、そこにパッケージを追加してください。その後、pacman.conf にリポジトリを以下のように追加してください:

archlive/pacman.conf
...
[customrepo]
SigLevel = Optional TrustAll
Server = file:///path/to/customrepo
...
ノート:
  • pacman.conf 内での順番は重要です。カスタムリポジトリを最優先させるには、他のリポジトリエントリよりも上にそのリポジトリを配置してください。
  • この pacman.conf はイメージのビルドのためだけに使用されます。Live 環境内で使用されるものではありません。Live 環境内で使用されるようにするには、#イメージにリポジトリを追加する を見てください。

multilib のパッケージ

multilib リポジトリからパッケージをインストールする場合は、pacman.conf 内にある multilib リポジトリをアンコメントしてください。

イメージにファイルを追加する

airootfs ディレクトリはライブシステムの root ディレクトリ (/) の起点として使用されます。このディレクトリの全てのファイルがパッケージがインストールされる前に作業ディレクトリにコピーされます。

カスタムのファイルやディレクトリを airootfs/ 下の好きな場所に配置してください。例えば、現在のシステム上の iptables スクリプトのセットをライブイメージで使用したい場合、それらを以下のようにコピーします:

$ cp -r /etc/iptables archlive/airootfs/etc

同様に、この階層の下のどこかに存在する特別な設定ファイルにも注意が必要です。ディレクトリ構造のかけている部分は mkdir(1) で作成できます。

ヒント: インストールユーザーのホームディレクトリにファイルを追加する場合、 archlive/airootfs/root/ にファイルを設置してください。全てのユーザーのホームディレクトリに設置したい場合、それらを archlive/airootfs/etc/skel/.

に設置してください。

ノート: カスタムファイルがパッケージによって提供されているファイルと衝突する場合、バックアップファイル に指定されていない限り上書きされます。

デフォルトでは、ファイルのパーミッション644、ディレクトリのパーミッションは 755 に設定されており、全て root ユーザーによって所有されています。特定のファイルやフォルダーに別のパーミッションや所有者を設定するには、 file_permissions 連想配列を profiledef.sh で設定してください. 詳細は README.profile.rst を確認してください。

イメージにリポジトリを追加する

Live 環境内で使用できるリポジトリを追加するには、適切に変更された pacman.conf を作成し、archlive/airootfs/etc/ に配置してください。

(追加した) リポジトリがキーを使用する場合、archlive/airootfs/usr/share/pacman/keyrings/ にそのキーを配置してください。キーファイル名は .gpg で終わらなければなりません。さらに、キーは信頼されていなければなりません。これは、GnuPG でエクスポートされた信頼ファイルを同じディレクトリ内に作成することにより可能です。信頼ファイル名は -trusted で終わらなければなりません。最初のフィールドはキーのフィンガープリント、2つめのフィールドは信頼です。/usr/share/pacman/keyrings/archlinux-trusted を例にすることができます。

archzfs 例

この例でのファイルは以下の通りです:

airootfs
├── etc
│   ├── pacman.conf
│   └── pacman.d
│       └── archzfs_mirrorlist
└── usr
    └── share
        └── pacman
            └── keyrings
                ├── archzfs.gpg
                └── archzfs-trusted
airootfs/etc/pacman.conf
...
[archzfs]
Include = /etc/pacman.d/archzfs_mirrorlist
...
airootfs/etc/pacman.d/archzfs_mirrorlist
Server = https://archzfs.com/$repo/$arch
Server = https://mirror.sum7.eu/archlinux/archzfs/$repo/$arch
Server = https://mirror.biocrafting.net/archlinux/archzfs/$repo/$arch
Server = https://mirror.in.themindsmaze.com/archzfs/$repo/$arch
Server = https://zxcvfdsa.com/archzfs/$repo/$arch
airootfs/usr/share/pacman/keyrings/archzfs-trusted
DDF7DB817396A49B2A2723F7403BD972F75D9D76:4:

archzfs.gpg 自体は https://archzfs.com/archzfs.gpg のリポジトリサイトから直接入手できます。

カーネル

archiso に含まれている両プロファイルには linux しかありませんが、ISO には他のカーネル、さらに言えば複数のカーネルをも含ませることができます。

まず、packages.x86_64 を編集して、お好みのカーネルパッケージ名を記入します。mkarchiso を実行すると、すべての work_dir/airootfs/boot/vmlinuz-*work_dir/boot/initramfs-*.img (加えて、UEFI 起動に使われる FAT イメージ) が ISO に入ります。

デフォルトでは、mkinitcpio プリセットはフォールバックの initramfs イメージもビルドします。ISO の場合、メインの initramfs イメージには autodetect フックが含まれないので、追加のフォールバックイメージは不要になります。(スペースの節約やビルドプロセスの高速化のために) フォールバック initramfs イメージを作成しないようにするには、archlive/airootfs/etc/mkinitcpio.d/pkgbase.preset 内にカスタムのプリセットを配置してください。例えば、linux-lts の場合:

archlive/airootfs/etc/mkinitcpio.d/linux-lts.preset
PRESETS=('archiso')

ALL_kver='/boot/vmlinuz-linux-lts'
ALL_config='/etc/mkinitcpio.conf'

archiso_image="/boot/initramfs-linux-lts.img"

最後に、ブートローダーの設定ファイルを生成して、カーネルを起動可能にしてください。

ブートローダー

Archiso では、BIOS ブート用に syslinux、UEFI ブート用に GRUBsystemd-boot をサポートしています。設定ファイルの構文に関する情報はそれぞれのブートローダーの記事を参照してください。

ヒント:
  • releng プロファイルは、El Torito を使って光学ディスクに焼いた場合や、Isohybrid を使ってハードディスクに書き込んだ場合は、BIOS と UEFI ブートの両方をサポートする ISO をデフォルトでビルドします。
  • isolinux のモジュール性により、.c32 ファイルがすべてコピーされ利用可能なので、多くのアドオンを利用できます。公式の syslinux サイトarchiso git リポジトリ を参照してください。アドオンを使えば、魅力的で複雑なメニューを作ることができます。[2] を見てください。

mkarchiso は、systemd-boot の設定が efiboot ディレクトリ内に、GRUB の設定ファイルが grub ディレクトリ内に、syslinux の設定がディレクトリ syslinux 内に存在することを期待します。

UEFI セキュアブート

UEFI セキュアブートが有効な環境で archiso を起動できるようにしたい場合、署名済みのブートローダーを使わねばなりません。セキュアブート#インストールメディアを起動する の指示に従うことで可能です。

systemd ユニット

ライブ環境で systemd のサービス/ソケット/タイマーを有効化するには、systemctl enable が行うように、シンボリックリンクを手動で作成する必要があります。

例えば、gpm.service (WantedBy=multi-user.target を含んでいます) を有効化するには、以下を実行してください:

$ mkdir -p archlive/airootfs/etc/systemd/system/multi-user.target.wants
$ ln -s /usr/lib/systemd/system/gpm.service archlive/airootfs/etc/systemd/system/multi-user.target.wants/

必要なシンボリックリンクは systemd ユニットを読めば分かります。サービスがインストール済みならば、それを有効化して systemctl の出力を観察することで、必要なシンボリックリンクを知ることができます。

ログインマネージャ

ログインマネージャの systemd サービスを有効化することで、X を起動時に起動します。どの .service を有効化すべきかわからない場合、ISO のシステム上にあるものと同じプログラムを使っていればすぐに確認することができます:

$ ls -l /etc/systemd/system/display-manager.service

そして archlive/airootfs/etc/systemd/system/ に同じソフトリンクを作成してください。LXDM の場合:

$ ln -s /usr/lib/systemd/system/lxdm.service archlive/airootfs/etc/systemd/system/display-manager.service

これでライブ環境でシステムを起動した時に LXDM が有効になります。

自動ログインを変更する

getty の自動ログインの設定は airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf にあります。

このファイルを編集することで自動ログインするユーザーを変更することができます:

[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin username --noclear %I 38400 linux

もしくは autologin.conf も一緒に削除することで自動ログインを無効化することも可能です。

シリアルコンソールを使用している場合、代わりに以下の内容で airootfs/etc/systemd/system/serial-getty@ttyS0.service.d/autologin.conf を作成してください:

[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -- \\u' --noclear --autologin root --keep-baud 115200,57600,38400,9600 - $TERM

ユーザとパスワード

ライブ環境で利用可能なユーザを作成するには、archlive/airootfs/etc/passwdarchlive/airootfs/etc/shadowarchlive/airootfs/etc/group そして archlive/airootfs/etc/gshadow を手動で編集しなければなりません。

ノート: これらのファイルが存在する場合、それらには root ユーザと root グループが含まれていなければなりません。

例えば、archie ユーザを追加するとします。passwd(5) の文法に従ってそのユーザを archlive/airootfs/etc/passwd に追加してください:

archlive/airootfs/etc/passwd
root:x:0:0:root:/root:/usr/bin/zsh
archie:x:1000:1000::/home/archie:/usr/bin/zsh
ノート: passwd ファイルは改行で終わっていなければなりません。

shadow(5) の構文に従って archlive/airootfs/etc/shadow にユーザーを追加してください。そのユーザーにパスワードを設定したい場合は、openssl passwd -6 でパスワードのハッシュ値を計算し、その値をファイルに追加してください。例えば:

archlive/airootfs/etc/shadow
root::14871::::::
archie:$6$randomsalt$cij4/pJREFQV/NgAgh9YyBIoCRRNq2jp5l8lbnE5aLggJnzIRmNVlogAg8N6hEEecLwXHtMQIl2NX2HlDqhCU1:14871::::::

パスワードの列を空欄にした場合、ユーザーはパスワード無しでログインできます。

group(5) に従って、ユーザのグループと、そのユーザが所属するグループを archlive/airootfs/etc/group に追加してください。例えば:

archlive/airootfs/etc/group
root:x:0:root
adm:x:4:archie
wheel:x:10:archie
uucp:x:14:archie
archie:x:1000:

gshadow(5) に従って、適切な archlive/airootfs/etc/gshadow を作成してください:

archlive/airootfs/etc/gshadow
root:!*::root
archie:!*::

/etc/shadow/etc/gshadow のパーミッションが正しいことを確認してください:

archlive/profiledef.sh
...
file_permissions=(
  ...
  ["/etc/shadow"]="0:0:0400"
  ["/etc/gshadow"]="0:0:0400"
)

パッケージのインストール後、mkarchisoarchlive/airootfs/etc/passwd 内にあるユーザの指定されたホームディレクトリをすべて作成し、work_directory/x86_64/airootfs/etc/skel/* をそれらへコピーします。コピーされたファイルには適切なユーザとグループの所有権が付与されます。

ISO で使用されるディストリビューション名を変更する

まず、/etc/os-release ファイルを rootfs 内の etc/ フォルダにコピーしてください。そして、そのファイルを適宜編集してください。GRUB と syslinux 内部での名前も変更できます。

ISO をビルドする

CD や USB に焼くことのできる ISO を以下のコマンドでビルドしてください:

# mkarchiso -v -w /path/to/work_dir -o /path/to/out_dir /path/to/profile/
  • -w は作業ディレクトリを指定します。このオプションが指定されない場合、カレントディレクトリ内の work をデフォルトとして使用します。
  • -o は、ビルド済み ISO イメージが置かれるディレクトリを指定します。このオプションが指定されない場合、カレントディレクトリ内の out をデフォルトとして使用します。
  • mkarchiso の実行時にはプロファイルファイル profiledef.sh は指定できず、そのファイルまでのパスのみを指定できることに注意してください (訳注: つまり、そのファイルが存在するディレクトリを指定する)。

/path/to/profile/ はカスタムプロファイルへのパスに置き換えてください。未変更のプロファイルをビルドする場合は /usr/share/archiso/configs/releng/ に置き換えてください。

ヒント: メモリ容量が十分ならば、作業ディレクトリを tmpfs 上に置くのが好ましいでしょう。例えば:
# mkarchiso -v -w /tmp/archiso-tmp /path/to/profile/

スクリプトは、指定されたパッケージを work_directory/x86_64/airootfs へダウンロード・インストールし、カーネルと init イメージを作成し、カスタマイズを適用し、最後に ISO をビルドして出力ディレクトリへ保存します。

作業ディレクトリの削除

警告: mkarchiso の実行が中断された場合、作業ディレクトリを削除する前に findmnt(8) を実行して、マウントバインドが存在しないことを確認してください。さもないと、データが消失する場合があります (例えば、/run/media/user/label にマウントされている外部デバイスが、ビルドプロセス中に work/x86_64/airootfs/run/media/user/label へバインドされます)。

一時ファイルが作業ディレクトリにコピーされています。ISO を正常にビルドした後であれば、作業ディレクトリとその内容を削除できます。例えば:

# rm -rf /path/to/work_dir

ISO を使う

選択肢については インストールガイド#インストールメディアの準備 を見てください。

ISO を QEMU でテストする

任意の依存パッケージである qemu-desktopedk2-ovmfインストールしてください。

QEMU を使ってビルド済みイメージを実行するには、run_archiso という便利なスクリプトを使ってください:

$ run_archiso -i /path/to/archlinux-yyyy.mm.dd-x86_64.iso

仮想マシンは UEFI エミュレートを使って実行することもできます:

$ run_archiso -u -i /path/to/archlinux-yyyy.mm.dd-x86_64.iso

ヒントとテクニック

SSH 経由でインストールするための ISO を準備する

ノート: archlinux-2021.02.01-x86_64.iso 以降、cloud-init のサポートが提供されるようになり、sshd.serviceデフォルトで有効化されています

システムと対話せずに SSH から Arch Linux をインストールするには、SSH 公開鍵を authorized_keys 内に記入する必要があります。

SSH 鍵は、手動 (ここで説明します) か、cloud-init によって追加することができます。

鍵を手動で追加するには、まず、書き込み可能なディレクトリに archiso の releng プロファイルをコピーしてください。次の例では archlive を使っています。

$ cp -r /usr/share/archiso/configs/profile/ archlive

ログインに使用されるユーザーのホームディレクトリ内に .ssh ディレクトリを作成してください。以下の例では root ユーザを使用しています。

$ mkdir archlive/airootfs/root/.ssh

(ログインに使用される) SSH 公開鍵を authorized_keys に追加してください:

$ cat ~/.ssh/key1.pub >> archlive/airootfs/root/.ssh/authorized_keys
$ cat ~/.ssh/key2.pub >> archlive/airootfs/root/.ssh/authorized_keys

.ssh ディレクトリと authorized_keys ファイルに正しいパーミッションと所有者を設定してください:

archlive/profiledef.sh
...
file_permissions=(
  ...
  ["/root"]="0:0:0750"
  ["/root/.ssh"]="0:0:0700"
  ["/root/.ssh/authorized_keys"]="0:0:0600"
)

最後に、ISO をビルドしてください。ISO のブート時に OpenSSH が起動し、対応する SSH 秘密鍵を使ってログインできるようになります。

iwd を使って Wi-Fi ネットワークに自動的に接続する

プロファイルの airootfs ディレクトリ内に /var/lib/iwd/ を作成し、正しいパーミッションを設定してください:

$ mkdir -p archlive/airootfs/var/lib/iwd
archlive/profiledef.sh
...
file_permissions=(
  ...
  ["/var/lib/iwd"]="0:0:0700"
)

iwd#ネットワーク設定iwd.network(5) の指示に従って、Wi-Fi ネットワークのためのネットワーク設定ファイルを作成してください。

設定ファイルは archlive/airootfs/var/lib/iwd/ 内に保存してください。

ルートファイルシステムのサイズを調整する

Live 環境内でパッケージをインストールする際 (例えば DKMS モジュールが必要なハードウェア)、ルートファイルシステムのデフォルトサイズでは小さすぎてパッケージのダウンロードとインストールができないかもしれません。

ヒント: このようなサイズが設定されている理由は BBS#210389 を見てください。歴史的な詳細は FS#45618 を見てください。

ISO 環境でファイルをダウンロードしたりパッケージをインストールした際に以下のエラーメッセージが発生することで分かります:

error: partition / too full: 63256 blocks needed, 61450 blocks free
error: not enough free disk space
error: failed to commit transaction (not enough free disk space)
Errors occurred: no packages were upgraded.

サイズを実行中に変更するには:

# mount -o remount,size=SIZE /run/archiso/cowspace

SIZE で利用できるパラメータは tmpfs(5) § size を参照してください。

(e キーや Tab キーを押して) ブートローダーの段階でサイズを設定するには、以下のブートオプションを使用してください:

cow_spacesize=SIZE

イメージのビルド段階でサイズを設定するには、先のブートオプションを以下のファイルに追加してください:

  • efiboot/loader/entries/*.cfg
  • grub/*.cfg
  • syslinux/*.cfg

結果は以下のコマンドで確認できます:

$ df -h

mkinitcpio-archiso のブートパラメータ参照してください。

トラブルシューティング

ウィンドウマネージャがフリーズする

Live CD でウィンドウマネージャを使いたい場合、必要な正しいビデオドライバーを追加しなければなりません。さもないと、ロード中にウィンドウマネージャがフリーズする場合があります。

参照

翻訳ステータス: このページは en:Archiso の翻訳バージョンです。最後の翻訳日は 2024-07-28 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。