GitHub Actionsを使って、自分用にカスタムしたArch LinuxのISOイメージを作る
GitHub ActionsでArch LinuxのDockerイメージを使って、archisoをインストールし、mkarchiso
してArtifactとしてアップロードしてみた記事です。
手順
リポジトリはセットアップ済みで、カレントディレクトリはリポジトリの場所ということにして進めていきます。
カスタムプロファイルを用意する
Arch Linux wikiによると公式が用意しているものでbaselineとrelengがあると書かれています。
好きな方を選択するといいでしょう。
archisoがマシンに入っている場合
/usr/share/archiso/configs
にプロファイルが存在しているので、コピーしてくるだけです。
cp -r /usr/share/archiso/configs/releng/ ./my-profile
archisoがマシンにない場合
公式のGitLabから自分の手元にgit clone
するかダウンロードして、configs/releng
をコピーしましょう。
GitHub ActionsでArch Linuxを使う
archisoを使うためにはArch Linuxを使う必要がありますが、runs-on
で指定できるOSにはUbuntu, macOS, Windowsしか指定できません。
ですが、GitHub Actionsにはjobs.<job_id>.containerというものがあり、archlinux:base
を指定するとArch LinuxのDockerイメージを使ってコンテナ内で処理を実行することが可能になります。
しかも@actions/checkout
などもちゃんと動くようです。これはありがたい!
name: ISO
on:
push:
jobs:
build:
runs-on: ubuntu-latest
container:
image: archlinux:base
options: --privileged # mkarchisoの為に特権モードを有効化
pacmanを使って、archisoをインストールする
pacman -Syyu --noconfirm archiso
を実行するだけです。
さらに@actions/cache
を使って/var/cache/pacman/pkg
をキャッシュしておけば次回のビルド時にちょっとだけインストール時間が短くなります。
name: ISO
on:
push:
jobs:
build:
runs-on: ubuntu-latest
container:
image: archlinux:base
options: --privileged # mkarchisoの為に特権モードを有効化
+ steps:
+ - name: Restore pacman cache
+ uses: actions/cache@v4
+ with:
+ path: /var/cache/pacman/pkg
+ key: pacman-cache-${{ github.workflow }}-build
+
+ - name: Install packages
+ run: pacman -Syyu --noconfirm archiso
archisoを使ってISOイメージを作成する
もうarchisoは入ってしまっているので、用意したプロファイルをmkarchiso
コマンドを使用するだけです。
name: ISO
on:
push:
jobs:
build:
runs-on: ubuntu-latest
container:
image: archlinux:base
options: --privileged # mkarchisoの為に特権モードを有効化
steps:
- name: Restore pacman cache
uses: actions/cache@v4
with:
path: /var/cache/pacman/pkg
key: pacman-cache-${{ github.workflow }}-build
- name: Install packages
run: pacman -Syyu --noconfirm archiso
+
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Build ISO
+ run: mkarchiso -v -o ./out ./my-config
上記の例であればビルドが正常に完了すると、./out
フォルダの中にISOイメージが出力されます。
出来上がったISOイメージをArtifactとしてアップロードする
ビルドしたISOイメージをダウンロードするために、ArtifactとしてISOイメージをアップロードしましょう。
name: ISO
on:
push:
jobs:
build:
runs-on: ubuntu-latest
container:
image: archlinux:base
options: --privileged # mkarchisoの為に特権モードを有効化
steps:
- name: Restore pacman cache
uses: actions/cache@v4
with:
path: /var/cache/pacman/pkg
key: pacman-cache-${{ github.workflow }}-build
- name: Install packages
run: pacman -Syyu --noconfirm archiso
- name: Checkout
uses: actions/checkout@v4
- name: Build ISO
run: mkarchiso -v -o ./out ./my-config
+
+ - name: Upload ISO
+ uses: actions/upload-artifact@v4
+ with:
+ name: iso-files
+ path: ./out/*.iso
実行
完成したWorkflowファイルをプッシュして、GitHub Actionsで動かして正常に完了するとちゃんとArtifactとしてアップロードされていることが確認できるかと思います。
おわり
GitHub上にリポジトリを作ったので、リンク置いときます。
ちなみに私は初めてArch LinuxをノートPCに入れたときに、爆音ビープ音を夜中の部屋に撒き散らすという大失態をもうしたくないのでarchiso使いました。
Discussion