DockerでRPMを作る – オレオレアドベントカレンダー3日目

Dockerでrpm imageを作りたい

RPM作るの面倒ですよね。環境揃えたり。でも、Dokerなら簡単にできるのでおすすめです。

Docker環境の準備

Ubuntuでも何でも良いので、Docker入れてdocker run hello-world できるようにしときましょう。で、以下のディレクトリを作っておきます

$ mkdir RPMS SRPMS BUILD BUILDROOT SPECS

Dockerfileの準備

以下のDockerfileを用意します。
必要なyumリポジトリがあれば、追加しておきましょう。

FROM centos:7
RUN \
    yum install -y epel-release && \
    yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm && \
    yum update -y && \
    yum install -y gcc gcc-c++ \
                   libtool libtool-ltdl \
                   make cmake \
                   git \
                   pkgconfig \
                   sudo \
                   automake autoconf \
                   yum-utils rpm-build rpmdevtools && \
    yum clean all && \
    useradd builder -u 1000 -m -G users,wheel && \
    echo "builder ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers && \
    echo "# macros"   >  /home/builder/.rpmmacros && \
    echo "%_topdir    /rpmbuild" >> /home/builder/.rpmmacros && \
    echo "%_buidroot  /rpmbuild/BUILDROOT" >> /home/builder/.rpmmacros && \
    mkdir -p /rpmbuild/SPECS && \
    mkdir -p /rpmbuild/RPMS && \
    mkdir -p /rpmbuild/SRPMS && \
    mkdir -p /rpmbuild/BUILD && \
    mkdir -p /rpmbuild/BUILDROOT && \
    chown -R builder /home/builder && \
    chown -R builder /rpmbuild
USER builder
ENV RPMNAME=rpm

ENV FLAVOR=rpmbuild OS=centos DIST=el7
CMD spectool -g -R /rpmbuild/SPECS/${RPMNAME}.spec && \
    sudo yum-builddep -y --enablerepo=remi \ 
    /rpmbuild/SPECS/${RPMNAME}.spec && \
    rpmbuild -ba /rpmbuild/SPECS/${RPMNAME}.spec

このDockerfileで、rpmbuild というdocker imageをビルドしましょう。

$ docker build ./ -t rpmbuild

RPMを作る

SPECディレクトリにspecファイルを、SOURCESに、独自のファイルが有れば配置しましょう。specファイルのすべてのソースがネット経由で取得する設定であれば、SOURSESに何も配置する必要はありませんし、BuildRequireにあるパッケージは自動的にインストールされます。
あとは、以下のようにコマンドを打つだけです。

$ docker run -r --rm -v ./:/rpmbuild -e RPMNAME=RPM名 rpmbuild:latest

これで、RPMS以下にrpmファイルが、SRPM以下にsrpmファイルが作成されるはずです。標準出力にログが残るので、teeなどでファイルにとっておくことをお勧めします。

ね、簡単でしょ?

このように、RPMは簡単にできます。みなさんも自分のRPMくらいは自分で作りましょう。エンジニアなら、自分のパッケージレポジトリの1つや2つ持っているものですよね?

Follow me!

Leave a Reply