🚀

GitHub Actionsを使って、自分用にカスタムしたArch LinuxのISOイメージを作る

2024/02/02に公開

GitHub ActionsでArch LinuxのDockerイメージを使って、archisoをインストールし、mkarchisoしてArtifactとしてアップロードしてみた記事です。

手順

リポジトリはセットアップ済みで、カレントディレクトリはリポジトリの場所ということにして進めていきます。

カスタムプロファイルを用意する

Arch Linux wikiによると公式が用意しているものでbaselinerelengがあると書かれています。

https://wiki.archlinux.jp/index.php/Archiso#.E3.82.AB.E3.82.B9.E3.82.BF.E3.83.A0.E3.83.97.E3.83.AD.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.82.92.E6.BA.96.E5.82.99.E3.81.99.E3.82.8B

好きな方を選択するといいでしょう。

archisoがマシンに入っている場合

/usr/share/archiso/configsにプロファイルが存在しているので、コピーしてくるだけです。

cp -r /usr/share/archiso/configs/releng/ ./my-profile

archisoがマシンにない場合

公式のGitLabから自分の手元にgit cloneするかダウンロードして、configs/relengをコピーしましょう。

https://gitlab.archlinux.org/archlinux/archiso

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などもちゃんと動くようです。これはありがたい!

.github/workflows/iso.yml
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をキャッシュしておけば次回のビルド時にちょっとだけインストール時間が短くなります。

.github/workflows/iso.yml
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コマンドを使用するだけです。

.github/workflows/iso.yml
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イメージをアップロードしましょう。

.github/workflows/iso.yml
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上にリポジトリを作ったので、リンク置いときます。

https://github.com/InkoHX/archiso

ちなみに私は初めてArch LinuxをノートPCに入れたときに、爆音ビープ音を夜中の部屋に撒き散らすという大失態をもうしたくないのでarchiso使いました。

Discussion