こんにちは、山田ハヤオです。
前回はチャンネルの設定ファイルや画像などを編集しました。
今回は実際にファイルやパッケージをいじっていこうと思います。
開発で一番苦戦するのがここなので細かな仕様などをしっかりと解説しようと思います。
後編では様々なHowToを紹介する予定です。
(GUIを追加したりBluetoothを追加したり等)
注意
ファイルのパスなどでcustomalter.add/とあるパスはそれぞれのチャンネルパスに置き換えてください。
詳しくは前回の記事を参照して下さい。
例えばチャンネルのディレクトリをhoge.addにした場合は、hoge.add/airootfsやhoge.add/packagesと読み替えて下さい。
また、各チャンネル等の細かな仕様は公式ドキュメントを参照して下さい。
パッケージに関するものをカスタマイズしよう
packagesディレクトリにはテキストファイルが格納されています。
使用できるパッケージは公式のArchLinuxリポジトリのパッケージです。
ただし、チャンネルディレクトリ直下にリポジトリを追記したpacman.confを配置するとそのpacman.confをビルドに使用します。
pacman.conf
pacmanの設定ファイルです。リポジトリなどの設定をここに保存しています。
本家のarchisoではビルドとライブ環境で共通の設定ファイルを使用するようになっていましたが、AlterLinuxではよりカスタマイズしやすいよう、ビルド時とライブ環境で別々の設定ファイルを使用するようになっています。
customalter.add/airootfs/etc/pacman.confがライブ環境での設定ファイルです。
(airootfsについては後述します。)
customalter.add/pacman.confがビルド用の設定ファイルです。
ArchLinuxの公式パッケージのみを利用する場合はこれらのファイルは必要ありませんが、もし独自のリポジトリを利用したい場合はこれらの両方に記述する必要があります。
独自リポジトリを構築する方法は後編で解説します。
packages
customalter.add/packages/というディレクトリにはテキストファイルが格納されています。
このテキストファイルにはインストールするパッケージなどの設定が記述されています。
一部のファイルを除き、ファイル名が.x86_64で終わるファイルにかかれているパッケージがそのままライブ環境にインストールされます。
(このディレクトリは解説の前編でも解説されています)
一行で1つのパッケージになっており、#で始まる行はコメントとして扱われます。
ここのテキストファイルで指定されたパッケージとshare/packages/で指定されたパッケージがインストールされます。
ArchLinuxが最小限動作するのに必要なパッケージはスクリプトとshareによってインストールされるため気にする必要はありません。
特殊なパッケージリスト
jp.x86_64
-jオプションで日本語が有効化された場合にのみインストールされるパッケージです。
fcitxや日本語フォントなどをここに記述すると良いでしょう。
non-jp.x86_64
日本語が有効化されていない場合にインストールされるパッケージです。
英語用のパッケージなどを記述する場所です。
exclude
share内に記述されているパッケージでどうしてもインストールしたくないパッケージをここに記述してください。
shareではCalamaresインストーラもインストールされてしまうため、これをイメージファイルに含めたくない場合はそれをexcludeに記述すると良いでしょう。
shareによってインストールされるパッケージの完全な一覧は実際にshareチャンネル内を確認して下さい。
パッケージリストの書き方
基本的にはテキストファイルに1行ずつ羅列すれば良いのですが、パッケージリストを整理して見やすくすることができます。
以下はその方法の一部です。
用途ごとにファイルを分ける
ディスプレイマネージャやデスクトップ環境、フォントやファイルシステムなどでファイルを分けるとパッケージの管理が楽になります。
コメントを活用する
#から始まる行はすべてコメントとして扱われます。それらを活用してパッケージの役割などを書いておけば後々のメンテナンスなどが楽になります。
例
# X11サーバ
xorg-server
# startxを実行するためのパッケージ
xorg-xinit# LightDM本体
lightdm
#-- Unity Greeter のフォーク版 --#
lightdm-slick-greeter
lightdm-settings
#-- LightDMデフォルトのGreeter --# [Disabled]
#lightdm-gtk-greeter
#lightdm-gtk-greeter-settings
ファイルを追加しよう
customalter.add/airootfsにはイメージファイルに含めたり、既存のファイルを上書きしたりするためのディレクトリです。
customalter.add/airootfsをライブ環境の/になります。
例えばcustomalter.add/airootfs/etc/bash.bashrcというファイルを作成した場合、ライブ環境の/etc/bash.bashrcが上書きされます。
チャンネルの優先順位
もしshareと各チャンネルで上書きするファイルが被ってしまった場合、チャンネルのairootfsが優先されます。
なのでshareのファイルを置き換えたい場合、チャンネルでそのファイルを配置するだけで上書きできます。
これは主に以下のスクリプトで役立ちます。
スクリプト
パッケージをインストール後、コマンドを実行したい場合がよくあります。
例えば言語やタイムゾーンなどの設定、ディスプレイマネージャの有効化などです。
それらのコマンドを記述したスクリプトがあります。
share/airootfs/root/customize_airootfs.shとcustomalter.add/airootfs/root/customize_airootfs_customalter.shです。
注意:正確には<チャンネル名>/airootfs/root/customize_airootfs_<チャンネル名>.shになります
share/airootfs/root/customize_airootfs.shではインストーラの設定やユーザの作成などの基本的なことを行っています。
スクリプトは全てchroot環境で実行されます。それを考慮してパスなどを記述して下さい。
また、スクリプトには実行される際に様々なビルドの設定が変数で引き渡されます。
それらも利用してスクリプトを柔軟に記述できます。
shareのスクリプトを変更したい
先程上で説明したとおり、shareとチャンネルのファイルではチャンネルが優先されます。
そのため、shareのスクリプトを上書きしたい場合、customalter.add/airootfs/root/customize_airootfs.shを作成することでshareのスクリプトを上書きできます。
スクリプトが実行されるタイミングと順番
これらのスクリプトは、全てのパッケージがインストールされ、全てのairootfsがコピーされた後に実行されます。
ホームディレクトリについて
ホームディレクトリのファイルを置き換えたり追加したりしたい場合、直接/home/に置くのではなく/etc/skel/を利用して下さい。
詳しくはこちらのサイトをご覧ください。
チャンネルの見本
これでチャンネルのカスタマイズ方法の解説は終わりです。
あとはインストールするパッケージや上書きする設定ファイルなどの調整を繰り返すだけになります。
言葉だけでは説明が難しい部分も多いため、実際にチャンネルを見てみるといいかもしれません。
最近追加されたばかりのAlter Linux Lxdeのチャンネルが参考になるかもしれません。
最後に
自分でもうまく説明できてる自信がないので、わからないことがあればコメント欄までお願いします。
次回ではAURのパッケージを追加したり、GUIを追加したりなどの方法を紹介したいと思います。



コメント
お忙しい中恐縮です。
archisoで自作のライブイメージを作成する際にブート時(ログイン前)に起動して置きたいサービスの起動はどこで設定すればいいのでしょうか?
いくつかのサイトやYoutubeなどを参考にしたのですが、/airootfs/root/customize_airootfs.shにsystemctl enableで追記しているのを見つけましたが最新のarchisoではこのファイルがなく非推奨とされているようでした。
非推奨ということは空のcustomize_airootfs.shを作成しパーミッションやシェバンを付加すればsystemctlコマンドを記述可能なのでしょうか?
記事の内容がかなり古いバージョンに準拠したものなので最新版だといろいろ異なってると思います…今はprofiledefがあるし…
customize_airootfs.shが非推奨となって際の議論をメーリングリストで見るとわかるのですが、サービスの有効化はコマンドを実行しなくても行うことができます。
systemctl enableは結局はシンボリックリンクを作成しているだけなので、そのシンボリックリンクを手動でairootfsに配置してあげれば良いことになります。
以下はsshdの例です。
sudo systemctl enable sshd
Created symlink /etc/systemd/system/multi-user.target.wants/sshd.service → /usr/lib/systemd/system/sshd.service.
自分のArch Linux環境で実際にサービスを有効化してみて、どこにシンボリックリンクを作成しているのかを確認後、airootfsでも同じシンボリックリンクを用意してあげれば大丈夫です。
もちろんシンボリックリンクの参照先はパッケージによって用意されているのでairootfsに含める必要はありません。
上記の場合、作成されたシンボリックリンクが
/etc/systemd/system/multi-user.target.wants/sshd.serviceで、参照先が/usr/lib/systemd/system/sshd.serviceになっています。Archisoでも同様の手法がとられています。少々わかりにくいですが、該当のコミットへのリンクを貼っておきます。
Enable systemd units with symlinks instead of doing it via systemctl … · archlinux/archiso@3720627
早速の返信ありがとうございます。
シンボリックリンクはairootfs内からシステム内(/usr/lib)へのリンクで良かったんですね、先程リンクを参考にライブUSBを作成して期待通りの動作を確認しました。
貴重な情報を日本語で公開して頂きありがとうございます。
記事公開時と状況は変わっているかも知れませんがこういったニーズ用として貴重な指標となっております。
今後ともよろしくお願いします。