Ubuntu16.04でrpmビルド用にmockとcopr-cliをセットアップ

はじめに

Ubuntu 16.04で mock でローカルでrpmをビルドするための環境構築の手順メモです。

Copr Build Service でrpmをビルドする際に、ビルドが通ることを事前に確認するために mock を使ってローカルでrpmをビルドするようにしています。

mockはchrootを使っているのですがLXDでcentos7コンテナを作ってそこでmockを実行するとエラーでうまく動かなかったので、以前はdockerでcentos7のコンテナを作ってそこでmockを実行していました。

その後、ubuntuにもmockコマンドのパッケージがあることを知り、そちらを使うようになりました。で、今回別のサーバで再度環境を構築する必要が出てきたので、この機会にメモしておきます。

また Copr Build Service で rpm をビルドするときに copr-cli を使っていたので、こちらのセットアップ手順も合わせて書いておきます。

mockのセットアップ

以下のコマンドで mock をインストールします。

sudo apt install mock

hnakamur/my-mock-configs-for-building-rpm-on-ubuntu にあるchroot環境の設定ファイルを /etc/mock/ にコピーします。

git clone https://github.com/hnakamur/my-mock-configs-for-building-rpm-on-ubuntu
sudo cp ./my-mock-configs-for-building-rpm-on-ubuntu/*.cfg /etc/mock/

(参考) mockのchroot設定にレポジトリ追加

脱線してmockのchroot設定にレポジトリ追加する方法を説明しておきます。 例えば /etc/mock/epel-7-x86_64-with-luajit.cfg/etc/mock/epel-7-x86_64.cfg をコピーして以下のようにレポジトリ設定を追加しています。

$ diff -u /etc/mock/epel-7-x86_64{,-with-luajit}.cfg
--- /etc/mock/epel-7-x86_64.cfg 2018-04-20 21:05:09.303104170 +0900
+++ /etc/mock/epel-7-x86_64-with-luajit.cfg     2018-04-20 20:50:33.082617365 +0900
@@ -68,4 +68,11 @@
 mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-debug-7&arch=x86_64
 failovermethod=priority
 enabled=0
+
+[hnakamur-luajit]
+name=Copr repo for luajit owned by hnakamur
+baseurl=https://copr-be.cloud.fedoraproject.org/results/hnakamur/luajit/epel-7-$basearch/
+enabled=1
+gpgcheck=0
+
 """

CentOS 7とEPEL 7のgpg鍵ファイルインストール

ウェブから鍵を取得する場合は以下の場所を参照します。

  • CentOS GPG Keys のCentOS 7 Signing Key

    • /usr/share/distribution-gpg-keys/centos/RPM-GPG-KEY-CentOS-7 に設置。
  • Package Signing Keys のEPEL 7

    • /usr/share/distribution-gpg-keys/epel/RPM-GPG-KEY-EPEL-7 に設置。
sudo mkdir -p /usr/share/distribution-gpg-keys/{centos,epel}
sudo curl -L -o /usr/share/distribution-gpg-keys/centos/RPM-GPG-KEY-CentOS-7 \
  https://www.centos.org/keys/RPM-GPG-KEY-CentOS-7
sudo curl -L -o /usr/share/distribution-gpg-keys/epel/RPM-GPG-KEY-EPEL-7 \
  https://getfedora.org/static/352C64E5.txt

と書きましたが、実際はLXDのCentOS7コンテナからコピーしたファイルを設置しました。 How to list, import and remove archive signing keys on CentOS 7 - LinuxConfig.org で説明されていますが /etc/pki/rpm-gpg/ に鍵ファイルがありました。

# ls /etc/pki/rpm-gpg/
RPM-GPG-KEY-CentOS-7  RPM-GPG-KEY-CentOS-Debug-7  RPM-GPG-KEY-CentOS-Testing-7

mockグループを作成し自ユーザをmockグループに追加

ubuntuのmockパッケージをインストールしてもmockグループは作られないので手動で作る必要がありました。

sudo groupadd -r mock

その後、自ユーザをmockグループに追加します。

sudo usermod -a -G mock $USER

copr-cliのセットアップ

copr-cli は自作のパッケージをPPAに置いてあるので、そこからインストールします。

sudo add-apt-repository ppa:hnakamur/copr-cli
sudo apt update
sudo apt install python3-copr-cli

ブラウザで API for Copr を開き fedora coprアカウントでログインするとAPIトークンのファイルの内容が表示されますので、 それを ~/.config/copr というファイルに保存します。