今回はsystemd-nspawnとpbuilderを組み合わせ、
筆者流ビルド環境の整え方
FlatpakやSnapパッケージの普及により自分でパッケージをビルドして最新版のアプリケーションを使用するという機会は確実に減っています。どうしてもパッケージをビルドする必要ができた時も、
ビルド環境は維持するのか逐次作成するのかも悩みどころですが、
ローカルでビルドする場合はいかようにもすればいいのですが、
ソースパッケージをビルドするだけであれば、
というわけで、
pbuilderで事前にビルドしたパッケージを依存関係で使用している、
長くなりましたが、
例としてUbuntu 20.
必要なパッケージ
必要なパッケージをインストールします。次のコマンドを実行してください。
$ sudo apt install systemd-container debootstrap
コンテナを作成する
systemd-nspawnの使い方は第491回に準じるのですが、
まずはコンテナーを作成するフォルダーを作成し、
$ sudo mkdir -p /var/nspawn/hirsute $ sudo debootstrap hirsute /var/nspawn/hirsute
“Base system installed successfully.”
作成したコンテナーにはユーザーがないため、
$ sudo systemd-nspawn -D /var/nspawn/hirsute
コンテナーにログインできたので、
# useradd ikuya -G sudo -m # passwd ikuya
同じパスワードを2回入力し、
# exit
いよいよコンテナを起動します。次のコマンドを実行してください。
$ sudo systemd-nspawn -b -D /var/nspawn/hirsute
以後はログインしたコンテナ内での作業となります。
コンテナの設定
コンテナにログインしたら、
$ sudo chsh -s /bin/bash ikuya
一度ログアウトして再ログインすると、
リポジトリの情報を変更します。/etc/
deb http://jp.archive.ubuntu.com/ubuntu hirsute main universe
deb-src http://jp.archive.ubuntu.com/ubuntu hirsute main universe
deb http://jp.archive.ubuntu.com/ubuntu/ hirsute-updates main universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu/ hirsute-updates main universe multiverse
次のコマンドを実行し、
$ sudo apt update
エラーが出ていないことを確認してください。
最低限エディターを変更し、
$ sudo apt install vim bash-completion
一度ログアウトして再ログインするとbash-completionが有効になります。
コンテナであることをわかりやすくするため、
$ sudo hostnamectl set-hostname nspawn-hirsute
/etc/
やはり一度ログアウトして再ログインするとホスト名が変わっています。
コンテナの設定はキリがないのでこのぐらいにしておきます。
pbuilder環境を構築する
pbuilderももちろんコンテナー内に作成します。まずは必要なパッケージをインストールします。次のコマンドを実行してください。
$ sudo apt install ubuntu-dev-tools pbuilder --no-install-recommends
pbuilder内部で使用するコンテナ
$ pbuilder-dist hirsute create
debootstrapと同じく、
"pbuilder/(コードネーム)_result/
#!/bin/bash
(cd /home/ikuya/pbuilder/hirsute_result/; apt-ftparchive packages . > Packages && gzip -c Packages >Packages.gz)
apt update
パッケージが作成されたフォルダーをリポジトリとするために必要な情報を作成し、
$ chmod 755 pbuilder/hirsute_result/D05deps
pbuilderの情報は~/.pbuilderに設定します。次の内容にしてください。ただしユーザー名は適宜変更してください。
$ cat ~/.pbuilderrc # this is your configuration file for pbuilder. # the file in /usr/share/pbuilder/pbuilderrc is the default template. # /etc/pbuilderrc is the one meant for overwriting defaults in # the default template # # read pbuilderrc.5 document for notes on specific options. MIRRORSITE=http://jp.archive.ubuntu.com/ubuntu UBUNTUTOOLS_UBUNTU_MIRROR=http://jp.archive.ubuntu.com/ubuntu/ APTCACHEHARDLINK=no COMPONENTS="main restricted multiverse universe" #for internal repo OTHERMIRROR="deb [trusted=yes] file:///home/ikuya/pbuilder/hirsute_result ./" BINDMOUNTS="/home/ikuya/pbuilder/hirsute_result/" HOOKDIR="/home/ikuya/pbuilder/hirsute_result/" EXTRAPACKAGES="apt-utils"
リポジトリとして機能するようにしておきます。次のコマンドを実行してください。
$ cd pbuilder/hirsute_result $ apt-ftparchive packages . > Packages && gzip -c Packages >Packages.gz $ cd -
pbuilderの情報を更新します。次のコマンドを実行してください。
$ pbuilder-dist hirsute update --override-config $ pbuilder-dist hirsute update --override-config --othermirror "deb [trusted=yes] file:///home/ikuya/pbuilder/hirsute_result /|deb http://jp.archive.ubuntu.com/ubuntu/ hirsute-updates main universe restricted" --mirror http://jp.archive.ubuntu.com/ubuntu/ --components "main restricted universe multiverse"
奇妙な感じですが、
試しにMozcをビルドしてみましょう。次のコマンドを実行してください。
$ pull-lp-source mozc hirsute $ pbuilder-dist hirsute build mozc_(バージョン).dsc
1行目のコマンドでUbuntu 21.
dpkg-buildpackageコマンドでもパッケージをビルドしてみましょう。次のコマンドを実行してください。
$ cd mozc_(バージョン) $ sudo apt build-dep mozc $ dpkg-buildpackage -r -uc -b
コンテナを終了する
コンテナを終了する場合は次のコマンドを実行してください。
$ sudo poweroff
ホストで実行しないように注意してください。ホスト名が変更されているため、