【archiso】ArchLinuxベースのOSを自作しよう ー開発の前編ー

Shell Script

こんにちは、山田ハヤオです。

前回はAlter LinuxをベースにOSを開発するメリットを怪しいステマサイト風に説明しました。

今回は実際に開発を行う方法を解説します。

スポンサーリンク

チャンネルを利用する

Alter Linuxは簡単に派生OSを作成できます。開発者はAlter Linux本体のソースコードをフォークする必要はありません。

Alter Linuxをベースに開発をするには「チャンネル」と呼ばれる仕組みを用いて開発を行います。

チャンネルはイメージファイルに含めるパッケージやファイル、設定などをプロファイルで簡単に切り替えられる仕組みです。

本家ArchISOのようにスクリプトごと変更する必要はありません。

これにより派生OSの開発者は自分のOSの変更部分にのみ開発に専念することができます。(ビルドスクリプトなどはAlter Linuxにまかせておけば大丈夫)

AlterLinuxでは、Xfce版とPlasma版をチャンネルを指定することによって切り替えています。

relengチャンネルを利用すればArchLinuxをビルドできます。

チャンネルについてもっと詳しく

チャンネルの本当のメリットは「共通のスクリプトを使用して様々な派生OSを作成できる」という点です。

AlterLinuxは公式ではXfceとPlasmaしかありませんが、実は非公式のチャンネルも開発していました。(これらは公式に入れる前にボツになったチャンネルです。)

それらのソースコードは全てこちらにあります。

ソースを見るとわかるのですが、スクリプトは最低限しかありません。

deepin.addをAlterLinuxのソースコードに配置すればDeepin版Alter Linuxが、madeleine.addを配置すればMadeleineOS1ハヤオが個人的にAlterLinuxの前身として開発していたOSをビルドすることができます。

このように「上書きするファイル」「設定を書いたファイル」「パッケージを書いたファイル」を用意することでどんなOSでもビルドできてしまうのがAlterLinuxのチャンネルです。

少しのカスタマイズなら「AlterLinuxの別バージョン」、高度にカスタマイズすれば「全く別のOS」を作成することができます。

チャンネルの雛形をダウンロードする

チャンネルを一から構築するのは大変なので、まずはチャンネルの雛形をソースコードから取り出しましょう。

作業ディレクトリを作成します。

mkdir myarch
cd myarch

これからはこのディレクトリで作業を行っていきます。

git clone https://github.com/fascodenet/alterlinux.git
mv ./alterlinux/channels/* ./
rm -rf alterlinux plasma

これでAlterLinuxのチャンネルがダウンロードできました。

最終的にsharexfcerelengというディレクトリが残れば成功です。

ディレクトリの解説

先程ダウンロードしたsharexfcerelengの解説を行います。

実際のカスタマイズするのはrelengです。

shareは開発をする際に考慮する必要のあるファイルで、xfceはチャンネル開発の見本です。

ディレクトリの構造

2つのディレクトリの中は基本的には同じ構造をしています。

中にはairootfspackagesのディレクトリがあります。

airootfs

このディレクトリの中にはイメージファイルを作成する直前に/を上書きするファイルが含まれています。ファイルの権限等は維持されてコピーされます。

/root/customize_airootfs.sh/root/customize_airootfs_<channel name>.shといったスクリプトはairootfsのコピー後に実行されるスクリプトです。

ここでタイムゾーンやインストーラなどの設定が行われています。

packages

このディレクトリは主にテキストファイルのみで構成されています。

ファイル名が.x86_64で終わるコードにはインストールされるパッケージの一覧が書かれています。

excluideというテキストファイルはインストールしないパッケージが書かれています。(このファイルを使用する方法は後ほど解説します。)

#で始まる文は全てコメントとして扱われ、それ以外は1行につき1つのパッケージとして扱われます。

その他のファイル

xfceにはその他のファイルが含まれているかもしれません。

また、packagesやairootfsにも更に細かな仕様があります。

それらは全て公式ドキュメントで解説されています。

(一部のカスタマイズ方法はこの下で説明しています。)

share

shareチャンネルは全てのチャンネルで共通で使用されるものが記述されています。

ここに記述されているパッケージはそれぞれのチャンネルで書く必要はありません。

ここに書かれているパッケージをどうしてもインストールしたくない場合はそれぞれのチャンネルでexcludeを設定して下さい。

xfce

実際のチャンネルです。このディレクトリのディレクトリ名がチャンネル名になります。

Alter Linux派生のOSを開発する場合、このディレクトリのみをGitで管理することになります。

そしてビルドする際はAlterLinuxのchannelsディレクトリ内にチャンネルデータを追加してビルドを行います。

チャンネル名は必ず公式チャンネルと被らないようにし、AlterLinuxのGitの管理から除外するためにディレクトリ名の最後に.addを付けて下さい。(ビルドする際のチャンネル名に.addは含まれません。)

releng

archisoのrelengプロファイルを移植しました。ブートスプラッシュや日本語は利用できませんがチャンネルを開発するベースにすることができます。

実際にカスタマイズを行う

実際にディレクトリを改造してオリジナルのチャンネルを作成していきましょう。

チャンネルの名前を考えよう

ビルドを行う際、チャンネルを以下のように指定します。

./build.sh hoge

この際の名前を決めましょう。

既に使用されている名前や予約後としてxfceplasmasharerebuildrelengがあります。

これらの名前と被らないようにしてください。

ディレクトリ名を変更しよう

先程ダウンロードしたrelengチャンネルを改造していきます。

先程決めたチャンネル名にrelengディレクトリの名前を変更します。

ディレクトリ名は「<チャンネル名>.add」にしてください。

今回はチャンネル名をcustomalterにするのでディレクトリ名をcustomalter.addにします。

制限を解除しよう

configファイル内で純粋なArchをビルドするために設定を固定しています。

その設定を無効化しましょう。以下の行を削除して下さい。

これらは-bオプションや-k-cをなど無効化します。

# Set to true to enable plymouth.(-b)
boot_splash=false

# See the `mksquashfs` help for details on these items.
sfs_comp="xz"
sfs_comp_opt=""

# Set the kernel that live session use.
# Please don't set anything if you want to use normal kernel.
# As of February 23, 2020, the available kernels are lts, zen, ck, , rt and lqx.
kernel=core

# Set the Japanese mode.
# When this is enabled, the packages in the japanese package list will be installed.
# A file for Japanese input is added.
japanese=false

設定を変更しよう

configで上の行を削除してもまだ項目が残っています。

これはOS名やラベルなどの設定です。これは自由に変更できます。

設定しなかった場合、自動でAlterLinuxになります。

os_name

様々な部分に使用されるOS名です。今回はAlter Linux customにします。

どんな名前でも大丈夫ですがあまり長すぎると見にくいかもしれません。

iso_name

イメージファイルの名前に付けられるOS名です。上のos_nameと違い空白文字は入れられません。

チャンネル名はファイル名に含まれるのでここでは入れないほうが良いでしょう。

今回はalterlinuxにしました。

iso_label

イメージファイルのラベル名です。

$(date +%Y%m)は日付が入ります。

ARCH_$(date +%Y%m)と設定されている場合、2020年4月にビルドした場合、「ARCH_202004」になります。

あ、32文字以上は設定できなくてエラーになるので注意して下さい。

今回はALTER_$(date +%Y%m)にしました。

iso_publisher

イメージファイルの作成者です。名前の後にメールアドレスかサイトのURLを入れましょう。

今回はYamada Hayao <https://fascode.net>にしました。

iso_application

イメージファイルの表示名です。特に制限はないと思います。

Alter Linux Live/Rescue CDと設定しました。

iso_version

イメージファイルのバージョンです。デフォルトでフルの日付になっていますがそのままで良いでしょう。

install_dir

イメージファイルでファイルを配置するディレクトリの名前です。今回はalterにしました。

usershell

デフォルトのユーザーのシェルです。シェルをフルパスで記述して下さい。

今回は/bin/bashにしました。

最終的に以下のようになれば設定の変更は完了です。

#!/usr/bin/env bash
#
# Yamada Hayao
# Twitter: @Hayao0819
# Email  : hayao@fascode.net
#
# (c) 2019-2020 Fascode Network.
#
# config
#
# Overwrites the first to read and set the build script
# This configuration file follows the bash syntax.
#

# OS name used for startup screen, etc.
os_name="Alter Linux custom"

# OS name used for the name of the image file.
iso_name=alterlinux

# Image file label
iso_label="ALTER_$(date +%Y%m)"

# Image file creator information
iso_publisher="Yamada Hayao <https://fascode.net>"

# Image file name (not file name)
iso_application="Alter Linux Live/Rescue CD"

# Image file version
iso_version=$(date +%Y.%m.%d)

# Directory name used for installation
install_dir=alch

# Set the user's default shell.
usershell="/bin/bash"

ライブ起動時の背景画像を変更する

splash.pngを変更すると背景の画像を変えられます。

640×480のpng画像を利用できます。

これはAlterLinuxのデフォルトの背景です。

チャンネルの説明を設定する

description.txtを変更します。一行で説明を英語で簡潔に書いて下さい。

Alter Linux channel customized by Hayao.と設定しました。

ここまで前編

前半はここまでです。続き(中編か後編)はまた今度。

次回はairootfs(/を上書きするファイル)やpackages(パッケージリスト)のカスタマイズを行います。

コメント

タイトルとURLをコピーしました