Archiso

提供: ArchWiki
移動先: 案内検索

Archiso は Arch Linux をベースとしたライブ CD 及びライブ USB イメージを構築するための bash スクリプトの小さなセットです。公式の CD/USB イメージを生成するのに使われているツールですが、とても汎用的なツールなので、レスキューシステムやインストールディスクから、特殊なライブ CD/DVD/USB システムまで、あらゆるものを作成することができます。要するに、Arch に関係していることなら、何だって出来ちゃいます。Archiso の中心は mkarchiso です。mkarchiso のオプションは全てドキュメント化されているので、ここでは使用方法を直接説明することはありません。代わりに、この wiki 記事ではライブメディアをすぐに作り出すためのガイドを提供します。

設定

ノート:
  • Archiso を使う場合 x86_64 環境で動作させる必要があります [1]
  • 以下の作業は全て root で行うことを推奨します。そうしないと、後でパーミッションの問題が発生するでしょう。

初めに、公式リポジトリから archisoインストールする必要があります。もしくは、AURarchiso-gitAUR を使うこともできます。

作業用のディレクトリを作成します。ライブイメージへの変更はすべてこのディレクトリで行います: ~/archlive で問題ないでしょう。

$ mkdir ~/archlive

ホストシステムにインストール先に archiso スクリプトを新しく作成した作業ディレクトリにコピーしてください。

Archiso には2つの"プロファイル"があります: relengbaseline

  • インストール済みのお気に入りのプログラムや設定を使って、Arch Linux のフルカスタマイズライブ版を作りたい場合は、releng を使います。
  • インストール済みのパッケージは使わずに、最小設定を使って、ベーシックなライブメディアを作りたい場合は、baseline を使います。

必要に応じて、以下を実行してください ('PROFILE' は relengbaseline のどちらかに置き換えてください)。

# cp -r /usr/share/archiso/configs/profile/* ~/archlive
  • releng プロファイルを使って完全にカスタマイズしたイメージを作成する場合は、#ライブメディアの設定 に進んで下さい。
  • baseline プロファイルを使って最低限のイメージを作成する場合は、カスタマイズをする必要がないので、#ISO の作成 に進んで下さい。

ライブメディアの設定

このセクションでは作成するイメージの設定について説明します。ライブイメージに含めたいパッケージや設定を定義することができます。

~/archlive ディレクトリには多数のファイルとディレクトリが存在しますが、ここでは以下のファイルとディレクトリにだけ触れます:

  • packages.* - インストールしたいパッケージを一行ごとに記述したリストです。
  • airootfs ディレクトリ - このディレクトリはオーバーレイとして機能し、カスタマイズを行うことができます。

基本的に、パッケージのインストール以外のシステム設定は全て ~/archlive/airootfs/root/customize_airootfs.sh でスクリプト化することができます。新しい環境から実行されるということを想定してスクリプトを書いてください。スクリプト内では / が作成されるライブ ISO のルートディレクトリになります。

パッケージをインストール

ライブ CD 環境にインストールしたいパッケージのリストを作成してください。1行毎にパッケージの名前を記述したファイルになります。特定の用途用のライブ CD を作りたい場合に有用です。packages.both に追加したいパッケージを指定してください。32ビットあるいは64ビット環境でのみインストールしたいソフトウェアの場合は packages.i686packages.x86_64 ファイルを使います。

ノート: ライブ CD でウィンドウマネージャを使いたい場合、必要なビデオドライバーを追加する必要があります。追加しておかないとロード時に WM がフリーズします。

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

カスタムパッケージや AUR/ABS からパッケージを準備するためにカスタムローカルリポジトリを作成することもできます。両方のアーキテクチャでパッケージを用意する場合、問題が起きないように特定のディレクトリの順番を守るようにしてください。

例えば:

  • ~/customrepo
    • ~/customrepo/x86_64
      • ~/customrepo/x86_64/foo-x86_64.pkg.tar.xz
      • ~/customrepo/x86_64/customrepo.db.tar.gz
      • ~/customrepo/x86_64/customrepo.db (repo-add によって作成されるシンボリックリンク)
    • ~/customrepo/i686
      • ~/customrepo/i686/foo-i686.pkg.tar.xz
      • ~/customrepo/i686/customrepo.db.tar.gz
      • ~/customrepo/i686/customrepo.db (repo-add によって作成されるシンボリックリンク)

それから ~/archlive/pacman.conf に以下のように記述することでリポジトリを追加できます (他のリポジトリエントリよりも上に記述してください):

# custom repository
[customrepo]
SigLevel = Optional TrustAll
Server = file:///home/user/customrepo/$arch

これでビルドスクリプトは適切なパッケージを見つけに行くようになります。

正しく設定しなかった場合、以下のようなエラーメッセージが表示されます:

error: failed to prepare transaction (package architecture is not valid)
:: package foo-i686 does not have a valid architecture

base グループに含まれているパッケージのインストールを避ける

By, default /usr/bin/mkarchiso, a script which is used by ~/archlive/build.sh, calls one of the arch-install-scripts named pacstrap without the -i flag, which causes Pacman to not wait for user input during the installation process.

When blacklisting base group packages by adding them to the IgnorePkg line in ~/archlive/pacman.conf, Pacman asks if they still should be installed, which means they will when user input is bypassed. To get rid of these packages there are several options:

  • Dirty: Add the -i flag to each line calling pacstrap in /usr/bin/mkarchiso.
  • Clean: Create a copy of /usr/bin/mkarchiso in which you add the flag and adapt ~/archlive/build.sh so that it calls the modified version of the mkarchiso script.
  • Advanced: Create a function for ~/archlive/build.sh which explicitly removes the packages after the base installation. This would leave you the comfort of not having to type enter so much during the installation process.

ユーザーを追加

ユーザー管理は通常のインストール方法と同じ方法で行うことができます。ただしコマンドは ~/archlive/releng/airootfs/root/customize_airootfs.sh に記述してください。ユーザー管理に関する情報はユーザー管理を見て下さい。

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

ノート: You must be root to do this, do not change the ownership of any of the files you copy over, everything within the airootfs directory must be root owned. Proper ownerships will be sorted out shortly.

The airootfs directory acts as an overlay, think of it as root directory '/' on your current system, so any files you place within this directory will be copied over on boot-up.

So if you have a set of iptables scripts on your current system you want to be used on you live image, copy them over as such:

# cp -r /etc/iptables ~/archlive/airootfs/etc

Placing files in the users home directory is a little different. Do not place them within airootfs/home, but instead create a skel directory within airootfs/ and place them there. We will then add the relevant commands to the customize_airootfs.sh which we are going to use to copy them over on boot and sort out the permissions.

First, create the skel directory:

# mkdir ~/archlive/airootfs/etc/skel

Now copy the 'home' files to the skel directory, e.g for .bashrc:

# cp ~/.bashrc ~/archlive/airootfs/etc/skel/

~/archlive/airootfs/root/customize_airootfs.sh が実行され新しいユーザーが作成されると、skel ディレクトリからファイルが自動的に新しいホームディレクトリにコピーされ、パーミッションが適切に設定されます。

Similarly, some care is required for special configuration files that reside somewhere down the hierarchy. As an example the /etc/X11/xinit/xinitrc configuration file resides on a path that might be overwritten by installing a package. To place the configuration file one should put the custom xinitrc in ~/archlive/airootfs/etc/skel/ and then modify customize_airootfs.sh to move it appropriately.

ブートローダー

デフォルトのファイルで大抵は動作するので、触れる必要はほとんどありません。

Due to the modular nature of isolinux, you are able to use lots of addons since all *.c32 files are copied and available to you. Take a look at the official syslinux site and the archiso git repo. Using said addons, it is possible to make visually attractive and complex menus. See here.

ログインマネージャ

ブート時に X を起動させるのはログインマネージャの systemd サービスを有効化すれば出来ます。どの .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 が有効になります。

もしくは airootfs/root/customize_airootfs.sh で他のサービスと同じようにサービスを有効化することもできます。

起動時に自動的にグラフィカル環境が実行されるようにしたい場合 airootfs/root/customize_airootfs.sh を編集して以下の行を:

systemctl set-default multi-user.target

次のように置き換えてください:

systemctl set-default graphical.target

自動ログインの変更

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

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

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

もしくは上記の設定を削除することで自動ログインを無効化することも可能です。

ISO の作成

以上で .iso を作成する準備ができました。

まず out/ ディレクトリを作成してください:

# mkdir ~/archlive/out/

そして ~/archlive の中で、以下のコマンドを実行:

# ./build.sh -v

スクリプトは work/*/airootfs に指定したパッケージをダウンロードしたりインストールしません。そしてカーネルと init イメージを作成して、あなたのカスタマイズを適用して iso を out/ に保存します。

作成した ISO は CD や USB に焼いて使ってください。

ISO の再作成

修正を加えた後に ISO を再作成することは公式にはサポートされていませんが、2ステップで簡単にできます。まずワークディレクトリのロックファイルを削除してください:

# rm -v work/build.make_*

それから airootfs/root/customize_airootfs.sh スクリプトを編集して、以下のように useradd 行の前に id コマンドを追加してください。このコマンドを追加しないと既に存在するユーザーを追加することになり再作成が停止してしまいます [2]

! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch

/etc/sudoers などの作成済みユーザーのデータやシンボリックリンクも削除してください。

ISO を使う

CD

iso を cd に書き込んでください。光学ディスクドライブ#焼き込みに従ってください。

USB

USB インストールメディアを見て下さい。

GRUB

マルチブート USB ドライブ#Arch_Linux を見て下さい。

grub4dos

Grub4dos はマルチブート USB を作成することができるユーティリティです。同じ USB スティックから複数の Linux ディストリを起動することができます。

grub4dos で USB にインストールされたシステムを起動するには、ISO をループマウントして /arch ディレクトリを USB のルートディレクトリにコピーしてください。それから grub4dos から menu.lst ファイルを編集して以下の行を追加してください:

title Archlinux x86_64
kernel /arch/boot/x86_64/vmlinuz archisolabel=<your usb label>
initrd /arch/boot/x86_64/archiso.img

x86_64 の部分は必要に応じて変更して適当なラベル名を付けてください。

インターネットにアクセスできない環境でのインストール

インターネットに接続できない、パッケージを何度もダウンロードしたくないなどの理由で archiso (例: 公式の月次リリース) をインストールするときは以下を読んでください:

まず、#インターネット接続の確立などのセクションを飛ばして#ベースシステムのインストールまでインストールガイドに従ってください。

新しい root に archiso をインストール

pacstrap でパッケージをインストールする代わりに (リモートのリポジトリからパッケージをダウンロードするわけですが今はインターネット接続がありません)、ライブ環境から新しい chroot に全てをコピーしてください:

# time cp -ax / /mnt
ノート: オプション (-x) を使って、新しい root にコピーしないように複数のディレクトリを除外しています。

次に、新しいシステムの整合性を保つために、ディレクトリを複数作成してカーネルイメージを新しい root にコピーします:

# cp -vaT /run/archiso/bootmnt/arch/boot/$(uname -m)/vmlinuz /mnt/boot/vmlinuz-linux

その後、インストールガイド#fstab に書かれているとおりに fstab を生成してください。

Chroot とベースシステムの設定

次に、新しくインストールしたシステムに chroot します:

# arch-chroot /mnt /bin/bash
ノート: インストールガイド#システムの設定における他の設定 (ロケールやキーマップなど) を行う前に、ライブ環境の跡 (つまり、ライブ環境に適合しない archiso のカスタマイズ) を消す必要があります。

journald の設定の復旧

archiso のカスタマイズ によってシステムのジャーナルはメモリに保存されるようになっており、そのままだと再起動でジャーナルは消えてしまいます:

# sed -i 's/Storage=volatile/#Storage=auto/' /etc/systemd/journald.conf

特殊な udev ルールの削除

この udev ルール は有線ネットワークインターフェイスが存在する場合に自動的に dhcpcd を起動します。

# rm /etc/udev/rules.d/81-dhcpcd.rules

archiso によって作成されたサービスの無効化と削除

ライブ環境用に作成されているサービスファイルがあるので、サービスを無効化してファイルを削除してください (新しい環境では不要であるため):

# systemctl disable pacman-init.service choose-mirror.service
# rm -r /etc/systemd/system/{choose-mirror.service,pacman-init.service,etc-pacman.d-gnupg.mount,getty@tty1.service.d}
# rm /etc/systemd/scripts/choose-mirror

ライブ環境の特殊なスクリプトの削除

ライブ環境には archiso スクリプトによっていくつかスクリプトがインストールされており、これらは新しい環境では必要ありません:

# rm /etc/systemd/system/getty@tty1.service.d/autologin.conf
# rm /root/{.automated_script.sh,.zlogin}
# rm /etc/mkinitcpio-archiso.conf
# rm -r /etc/initcpio

archlinux 鍵のインポート

公式リポジトリを使うには archlinux のマスター鍵をインポートする必要があります (pacman-key#キーリングの初期化)。通常は pacstrap でインポートされますが、以下のコマンドでインポートすることもできます:

# pacman-key --init
# pacman-key --populate archlinux
ノート: エントロピーを生成するにはキーボードやマウスを動かす必要があります。

システムの設定

スキップしたインストールガイド#システムの設定セクションの設定 (ロケールやタイムゾーン、ホストネームなど) を行ってインストールガイド#Initramfs に書いてあるように初期 RAM ディスクを作成してインストールを完了してください。

グラフィカルログインの有効化 (任意)

GDM などのディスプレイマネージャを使用する場合、systemd のデフォルトターゲットを multi-user.target からグラフィカルログインができるターゲットに変更すると良いでしょう:

# systemctl disable multi-user.target
# systemctl enable graphical.target

参照

ドキュメントとチュートリアル

カスタマイズテンプレートのサンプル