数日前に、yumについて真剣に考えてみた。
unknownengineer.hatenablog.com
ソースをrpm2cpioでバラして、specファイルの中身を閲覧してドヤ顔していた所まで。
specファイルの中身を見るだけならこれでも良いが、ビルドするなら、ちゃんと環境作ったほうが良いので、まずは専用の環境を用意する事にした。
build環境の作成
#useradd rpmbuilder #su - rpmbuilder $mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} $ls rpmbuild/ $rpmbuild --showrc |grep topdir $echo "%_topdir $HOME/rpmbuild" > ~/.rpmmacros
これでビルド環境出来ました。尚、rpmdev-setuptree使えば自動で作ってくれます。
qiita.com
rpmbuildを実行
では前回の続きでEPELのソースを取得して展開していきます。
$wget https://dl.fedoraproject.org/pub/epel/6/SRPMS/epel-release-6-8.src.rpm rpm -ivh epel-release-6-8.src.rpm
上記を実行すると、先ほど作成したディレクトリにソースとspecが展開されます。
[rpmbuilder@unknown SPECS]$ ls ../* ../BUILD: ../BUILDROOT: ../RPMS: ../SOURCES: GPL RPM-GPG-KEY-EPEL-6 epel-testing.repo epel.repo macros.ghc-srpm ../SPECS: epel-release.spec ../SRPMS:
ではソースを展開していきます。rpmbuildのオプションで、specファイルのどこまで処理を実行するのか指定出来ます。まずは%prepまで実行するオプションを試してみます。
$ rpmbuild -bp epel-release.spec Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.i5bh32 + umask 022 + cd /home/rpmbuilder/rpmbuild/BUILD + LANG=C + export LANG + unset DISPLAY + cd /home/rpmbuilder/rpmbuild/BUILD + rm -rf epel-release-6 + /bin/mkdir -p epel-release-6 + cd epel-release-6 + /bin/chmod -Rf a+rX,u+w,g-w,o-w . + install -pm 644 /home/rpmbuilder/rpmbuild/SOURCES/RPM-GPG-KEY-EPEL-6 . + install -pm 644 /home/rpmbuilder/rpmbuild/SOURCES/GPL . + exit 0
前回覗いてみた、specファイルの%prepの記述までと見比べてみる。おぉ、確かにその通り動いている(当たり前)。rpmbuilのオプションは以下サイトを参考にしています。なおrpmbuildの-bc,-biがmake,make installと等価である事を今日知りました(震え声
(特にやりたいことは無いんだけど)とりあえずオレオレrpmパッケージを作ります。rpm でEPEL突っ込んだ時に、いつもenabled=1になってて手動で変えていたので、以下SOURCEを変更してからビルドします。
vi ../SOURCES/epel.repo [epel] name=Extra Packages for Enterprise Linux 6 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch failovermethod=priority enabled=1→0に変更 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
この状態でビルドしてみます。
$ rpmbuild -ba epel-release.spec Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.Krc0cd + umask 022 + cd /home/rpmbuilder/rpmbuild/BUILD + LANG=C + export LANG + unset DISPLAY + cd /home/rpmbuilder/rpmbuild/BUILD + rm -rf epel-release-6 + /bin/mkdir -p epel-release-6 + cd epel-release-6 + /bin/chmod -Rf a+rX,u+w,g-w,o-w . + install -pm 644 /home/rpmbuilder/rpmbuild/SOURCES/RPM-GPG-KEY-EPEL-6 . + install -pm 644 /home/rpmbuilder/rpmbuild/SOURCES/GPL . + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.D7K2Iq + umask 022 + cd /home/rpmbuilder/rpmbuild/BUILD + cd epel-release-6 + LANG=C + export LANG + unset DISPLAY + exit 0 Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.oDdZfE + umask 022 + cd /home/rpmbuilder/rpmbuild/BUILD + '[' /home/rpmbuilder/rpmbuild/BUILDROOT/epel-release-6-8.x86_64 '!=' / ']' + rm -rf /home/rpmbuilder/rpmbuild/BUILDROOT/epel-release-6-8.x86_64 ++ dirname /home/rpmbuilder/rpmbuild/BUILDROOT/epel-release-6-8.x86_64 + mkdir -p /home/rpmbuilder/rpmbuild/BUILDROOT + mkdir /home/rpmbuilder/rpmbuild/BUILDROOT/epel-release-6-8.x86_64 + cd epel-release-6 + LANG=C + export LANG + unset DISPLAY + rm -rf /home/rpmbuilder/rpmbuild/BUILDROOT/epel-release-6-8.x86_64 + install -Dpm 644 /home/rpmbuilder/rpmbuild/SOURCES/RPM-GPG-KEY-EPEL-6 /home/rpmbuilder/rpmbuild/BUILDROOT/epel-release-6-8.x86_64/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 + install -dm 755 /home/rpmbuilder/rpmbuild/BUILDROOT/epel-release-6-8.x86_64/etc/yum.repos.d + install -pm 644 /home/rpmbuilder/rpmbuild/SOURCES/epel.repo /home/rpmbuilder/rpmbuild/SOURCES/epel-testing.repo /home/rpmbuilder/rpmbuild/BUILDROOT/epel-release-6-8.x86_64/etc/yum.repos.d + install -Dpm 644 /home/rpmbuilder/rpmbuild/SOURCES/macros.ghc-srpm /home/rpmbuilder/rpmbuild/BUILDROOT/epel-release-6-8.x86_64/etc/rpm/macros.ghc-srpm + /usr/lib/rpm/find-debuginfo.sh --strict-build-id /home/rpmbuilder/rpmbuild/BUILD/epel-release-6 + /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot + /usr/lib/rpm/redhat/brp-compress + /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip + /usr/lib/rpm/redhat/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump + /usr/lib/rpm/brp-python-bytecompile + /usr/lib/rpm/redhat/brp-python-hardlink + /usr/lib/rpm/redhat/brp-java-repack-jars Processing files: epel-release-6-8.noarch Executing(%doc): /bin/sh -e /var/tmp/rpm-tmp.E5TIZR + umask 022 + cd /home/rpmbuilder/rpmbuild/BUILD + cd epel-release-6 + DOCDIR=/home/rpmbuilder/rpmbuild/BUILDROOT/epel-release-6-8.x86_64/usr/share/doc/epel-release-6 + export DOCDIR + rm -rf /home/rpmbuilder/rpmbuild/BUILDROOT/epel-release-6-8.x86_64/usr/share/doc/epel-release-6 + /bin/mkdir -p /home/rpmbuilder/rpmbuild/BUILDROOT/epel-release-6-8.x86_64/usr/share/doc/epel-release-6 + cp -pr GPL /home/rpmbuilder/rpmbuild/BUILDROOT/epel-release-6-8.x86_64/usr/share/doc/epel-release-6 + exit 0 Provides: config(epel-release) = 6-8 Requires(interp): /bin/sh /bin/sh Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Requires(post): /bin/sh Requires(postun): /bin/sh Conflicts: fedora-release Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/rpmbuilder/rpmbuild/BUILDROOT/epel-release-6-8.x86_64 Wrote: /home/rpmbuilder/rpmbuild/SRPMS/epel-release-6-8.src.rpm Wrote: /home/rpmbuilder/rpmbuild/RPMS/noarch/epel-release-6-8.noarch.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.w9WGsx + umask 022 + cd /home/rpmbuilder/rpmbuild/BUILD + cd epel-release-6 + rm -rf /home/rpmbuilder/rpmbuild/BUILDROOT/epel-release-6-8.x86_64 + exit 0
RPMS/noarch以下にepel-release-6-8.noarch.rpmが作成されました。これでepelをインストールします。yumでそのまま突っ込んだ時と違って、ちゃんとenabled=0でした。めでたし!