CircleCI で Arch Linux の dotfiles をテストする

memo, dotfiles, archlinux, circleci, docker

February 16, 2021

最近 dotfiles の再構築を始めました。その過程で、以前からしたかった dotfiles のテストも設定しました。テスト、なんて偉そうな書き方してますけど要は『インストール用スクリプトが正しく動くか、実際に動かして確認する作業』です。手動でやるのも面倒なので CircleCI で自動で行うようにしました。

nan1sa/dotfiles: for Arch Linux

要約

  • GitHub Actions が Arch Linux に対応してないので CircleCI を使った
  • pacman がライブラリ回りのエラーを吐くので対策が面倒だった
  • makepkg が root で動かせないので別のユーザーを作って動かした

GitHub Actions が Arch Linux に対応してないので CircleCI を使った

本当は今後のために練習も兼ねて GitHub Actions を使ってテストを動かそうとしました。GitHub Actions 向けに提供されているマシンに Arch Linux が無いので諦めました。別に自分で Action を作っても良かったのですが、ちょっと動作確認するためにそこまでするのも面倒なのでやめました。

代わりに CircleCI でテストを動かしました。CircleCI は Docker イメージであれば基本的になんでもいいので Arch Linux も普通に動いて便利です。実際、簡単に動かすことはできました。

pacman がライブラリ回りのエラーを吐くので対策が面倒だった

CircleCI で動かそうと決めて適当に pacman -Syu してから必要なパッケージを入れて dotfiles 用のスクリプトを実行するコードを書きました。するとこんな感じのエラーを吐きました。

error: failed to initialize alpm library
(could not find or read directory: /var/lib/pacman/)

調べたところ glibc のバグだということが分かりました。そのため、バグが無いバージョンの glibc を入れる処理を qutebrowser のコードから借りて再度実行したところ、正しく動作することが確認できました。

makepkg が root で動かせないので別のユーザーを作って動かした

pacman のエラーも解消して大量の凡ミスも解決していたのですが、微妙に面倒な問題が出ました。makepkg が root による動作に対応していないことを忘れていました。Docker のコマンドは常に root で動いていますが、makepkg はこれを危険と判断するため動かすことができません。そこで、インストールスクリプトを実行するためのユーザーを作成して、そのユーザーから実行することで解決しました。

実行時には sudo のパスワード入力で CI を止めないように NOPASSWD を設定しました。通常のマシンだと危険ですが、テストで一度限りのイメージなので問題無いと判断しました。ちなみに sudoer 回りの設定をする時は /etc/sudoer を直接編集すると危険なので /etc/sudo.d/ 次に設定ファイルを作って設定しましょう。また、作成した設定ファイルは visudo -cf ファイル名 で文法の確認ができます。必要に応じて使いましょう。

まとめ

とりあえずテストを動かすことができたので、必要な設定をどんどんしていくつもりです。ちなみに、正しく動かすまで17回は CircleCI に怒られたのでメンタルがズタズタになりました。おしまい。

参考にしたサイト