ということで久しぶりの新規ページですよ。。。
各種アプリケーションをソースからコンパイルしてうんちゃらっていうのもいいんですが、
やっぱりパッケージにしておくとサーバー再構築するときとか便利なんですよね。
てなわけで自前でyum用のレポジトリを立ててほとんどのものはyum上で管理するってことにしました。
deltarpmとかいろいろあるみたいですが、とりあえずはyumでインストールとアップデートができる環境を整えます。

fedora 21からyumのほかにdnfというツールでもパッケージ管理を行うようになり、
fedora 22になるとyumはdeprecatedでdnf使えやゴルァになりました。
それに伴い、mock側でもそのままで実行するとその時点でエラーとなり実行できなくなるので
コマンドオプションでmock --dnf xxx.rpmを指定するか、/etc/mock/site-defaults.cfgのconfig_opts['dnf_command'] = '/usr/bin/dnf'
のコメントを外しておきましょう。

事前準備

まずはApacheでアクセス可能な環境を整えておきましょう。
例としてyum.example.comドメインで且つSSL対応でやってみます。

また、環境はDocrootを/var/www/yumにして
主要部分のみ抜粋しています。
SSLの鍵の作成方法とかは適宜追加するかも。。

Listen 443 https
SSLStrictSNIVHostCheck off # vhostでSSLが使えるようになるおまじない(一部ブラウザでは使えない。。。)

Serveradmin hostmaster@yum.example.com
DocumentRoot /var/www/yum
ServerName yum.example.com
CustomLog logs/yum_ssl_access_log combined
ErrorLog logs/yum_ssl_error_log

SSLEngine on
SSLCertificateFile "/etc/pki/tls/certs/yum.crt"
SSLCertificateKeyFile "/etc/pki/tls/certs/yum.key"
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLCACertificatePath "/etc/pki/CA"
SSLCACertificateFile "/etc/pki/CA/cacert.pem"

SSLOptions +StdEnvVars

BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0

AddDefaultCharset UTF-8
AllowOverride All
Require all granted
Options Indexes FollowSymLinks
ContentDigest on
IndexOptions FancyIndexing ScanHTMLTitles IconsAreLinks FoldersFirst Charset=UTF-8 VersionSort XHTML

# yum -y install createrepo repoview rpmdevtools mock

次にGPG鍵を用意しますが、ついでに後述のmockで
利用するためのアカウントなども追加しておきます。

# groupadd -g 6000 mock
# useradd -g mock -u 60000 -d /var/lib/mock -c "RPM build user" mockbuild
# yum -y install mock
# chown -R mockbuild. /var/lib/mock
# su - mockbuild
$ gpg --gen-key
--snip--
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
要求された鍵長は2048ビット
鍵の有効期限を指定してください。
0 = 鍵は無期限
= 鍵は n 日間で満了
w = 鍵は n 週間で満了
m = 鍵は n か月間で満了
y = 鍵は n 年間で満了
鍵の有効期間は? (0)
Key does not expire at all
これで正しいですか? (y/N) y

あなたの鍵を同定するためにユーザーIDが必要です。
このソフトは本名、コメント、電子メール・アドレスから
次の書式でユーザーIDを構成します:
"Heinrich Heine (Der Dichter) "

本名: Mock Build
電子メール・アドレス: mockbuild@yum.example.com
コメント: mockbuild
次のユーザーIDを選択しました:
“Mock Build (mockbuild) ”

名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O
秘密鍵を保護するためにパスフレーズがいります。

パスフレーズを入力:
パスフレーズを再入力:

今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
--snip--
gpg: /var/lib/mock/.gnupg/trustdb.gpg: 信用データベースができました
gpg: 鍵XXXXXXXXを絶対的に信用するよう記録しました
公開鍵と秘密鍵を作成し、署名しました。
$ gpg -o RPM-GPG-KEY-mockbuild -a --export XXXXXXXX
$ vi /var/lib/mock/.rpmmacros
--------------cut here---------------------
# for other rhel/fedora key
%_gpg_name 0xXXXXXXXX
%_gpg_path /var/lib/mock/.gnupg
%_gpgbin /usr/bin/gpg
%_signature gpg
%_topdir %(echo $HOME)/rpmbuild
--------------cut here---------------------
$ mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

rootでGPG鍵を読み込んで、yum用のrepoファイルの設定を追加しておく

# mv RPM-GPG-KEY-mockbuild /etc/pki/rpm-gpg/
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-mockbuild
# vi /etc/yum.repos.d/myrepo.repo

[myrepo]
name=myrepo $releasever - $basearch
failovermethod=priority
baseurl=https://yum.example.com/fedora/$releasever/$basearch/
enabled=0
metadata_expire=7d
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mockbuild
sslverify=0
#sslcacert=/etc/pki/CA/myrepo.pem

[myrepo-debuginfo]
name=momo-i.org $releasever - $basearch - Debug
failovermethod=priority
baseurl=https://yum.example.com/fedora/$releasever/$basearch/debug/
enabled=0
metadata_expire=7d
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mockbuild
sslverify=0
#sslcacert=/etc/pki/CA/myrepo.pem

[myrepo-source]
name=myrepo $releasever - Source
failovermethod=priority
baseurl=https://yum.example.com/fedora/$releasever/SRPMS/
enabled=0
metadata_expire=7d
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mockbuild
sslverify=0
#sslcacert=/etc/pki/CA/myrepo.pem

yumでインストールするときに鍵(XXXXXXXX)で署名されていないと
デフォルトではインストールができない(yumのオプションで回避可能)ので
忘れずに作成とエクスポートしておきましょう。

なお、Proxyを使わないと外に行けない場合は
/etc/mock/site-defaults.cfgを修正することで
mockがProxyを使うようになります

開いて最下部に以下を追記

config_opts['http_proxy'] = 'http://proxy.server.example.com:3128'

さて、これで準備は整いましたので、実際にmockで遊んでみましょう。

# su - mockbuild
$ cd rpmbuild/SPECS
$ cp /etc/rpmdevtools/spectemplate-minimal.spec myapp.spec
$ vi myapp.spec

specファイルのGroupの命名規則とかは/usr/share/doc/rpm*/GROUPSに載ってます。
以下は例なので、実際にコピペしても無駄です。。。
やりたい方は適当なソースRPMを拾ってきて編集してください。。。
ここでは、Fedora20のx86_64で作っています。

Name: myapp
Version: 1.0
Release: 1%{?dist}
Summary: my example apps

Group: Applications/Internet
License: MIT
URL: http://yum.example.com
Source0: http://yum.example.com/src/%{name}-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

BuildRequires: myapp-build-req
Requires: myapp-req

%description
This is my app!

%prep
%setup -q

%build
%configure
make %{?_smp_mflags}

%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root,-)
%doc README
%{_bindir}/myapp
%{_mandir}/man1/myapp.1*

%changelog
* Fri Jan 01 1971 mockbuild - 1.0-1
- Initial rpm release.

こんな感じで作ったらソースRPMを作りましょう。

$ rpmbuild -bs --clean myapp.spec --nodeps
$ cd /var/lib/mock/rpmbuild/SRPMS
$ mock -v myapp-1.0-1.fc20.src.rpm
......snip.....

他のOS用のものを作りたい場合は/etc/mock/*.cfgファイルの.cfgを抜いたものをコマンドラインに使用します。

$ mock -v -r epel-6-x86_64 myapp-1.0-1.fc20.src.rpm

ERROR:とかで異常終了していなければ次のステップ
rpmへの署名を行います。

$ cd /var/lib/mock/fedora-20-x86_64/result
$ ls
myapp-1.0-1.fc20.x86_64.rpm myapp-1.0-1.fc20.src.rpm myapp-debuginfo-1.0-1.fc20.x86_64.rpm
$ rpm --resign *.rpm
パスフレーズの入力:
パスフレーズは正常です。
~~

これが終わったらmockbuildをexitしてこのファイルを↑のmyrepo.repoで記載した通りのフォルダに放り込んでおきます。

# mkdir -p /var/www/yum/fedora/20/{SRPMS,x86_64,i386}
# mkdir -p /var/www/yum/fedora/20/x86_64/debug
# mkdir -p /var/www/yum/fedora/20/i386/debug
# cp myapp-1.0-1.fc20.x86_64.rpm /var/www/yum/fedora/20/x86_64/
# cp myapp-1.0-1.fc20.src.rpm /var/www/yum/fedora/20/SRPMS/
# cp myapp-debuginfo-1.0-1.fc20.x86_64.rpm /var/www/yum/fedora/20/x86_64/debug/

最後にレポジトリを作成するためのコマンドを実行しておきます。

# createrepo -d --excludes=*debug* /var/www/yum/fedora/20/SRPMS
# repoview --title="My repository" --url="https://yum.example.com/fedora/20/SRPMS" /var/www/yum/fedora/20/SRPMS
# createrepo -d --excludes=*debug* /var/www/yum/fedora/20/x86_64
# repoview --title="My repository" --url="https://yum.example.com/fedora/20/x86_64" /var/www/yum/fedora/20/x86_64
# createrepo -d /var/www/yum/fedora/20/x86_64/debug
# repoview --title="My repository" --url="https://yum.example.com/fedora/20/x86_64/debug" /var/www/yum/fedora/20/x86_64/debug

これで作業は完了です。
あとはyumコマンドで実際にインストール可能かを試してみましょう

# yum --enablerepo=myrepo install myapp

Proxyサーバー経由でしかmock使えねえよゴルァという人は/etc/mock/site-defaults.cfgの
以下の行を修正することで使えるようになるらしいです

# Proxy settings (https_proxy, ftp_proxy, and no_proxy can also be set)
# config_opts['http_proxy'] = 'http://localhost:3128'

# Proxy settings (https_proxy, ftp_proxy, and no_proxy can also be set)
config_opts['http_proxy'] = 'http://proxyserver:8080'
config_opts['https_proxy'] = 'http://proxyserver:8080'
config_opts['ftp_proxy'] = 'http://proxyserver:8080'
config_opts['no_proxy'] = '*example.com'

コメントを追加

制限付き HTML

  • 使用できるHTMLタグ: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
半角で
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。
ももーい に投稿