■yumリポジトリ設定

(1)概要
/etc/yum.confで設定する。
必須の [main] セクションが 1 つある。
1 つ以上の [repository] セクションを含むこともでき、リポジトリ固有のオプションを設定できる。ただし、/etc/yum.repos.d/ ディレクトリ内にある、新規または既存の .repo ファイルで個々のリポジトリを定義することが推奨されている。

(2)主な設定
①GPGによるパッケージの署名確認
[main]セクションまたは、[repository]セクションにて
gpgcheck=1 ※デフォルトは1で、0にするとgpgによるパッケージ署名確認を行わない ②[repository] セクションの設定 
[repository] セクションには、最低限下記の二つのディレクティブが必要
name=repository_name
baseurl=repository_url

※repository_url は、リポジトリの repodata ディレクトリがあるディレクトリへの URL 。
リポジトリが HTTP にある場合は、http://path/to/repo を使用。
リポジトリが FTP にある場合は、ftp://path/to/repo を使用。
リポジトリがマシンのローカルにある場合は、file:///path/to/local/repo を使用。
※リポジトリがベーシック認証してる場合は、
baseurl=http://user:password@www.example.com/repo/
※リポジトリがSSLサーバの場合は、例えば下記のようにSSLクライアント設定を書く
sslverify = 1
sslcacert = /etc/rhsm/ca/redhat-uep.pem
sslclientkey = /etc/pki/entitlement/key.pem
sslclientcert = /etc/pki/entitlement/11300387955690106.pem
※epelリポジトリ追加
# yum install epel-release
→/etc/yum.repos.d配下に、epel-testing.repoと、epel.repoという2つのファイルが作成される。
yumコマンドの実行時にEPELのリポジトリは、自動的に使用されるようにする場合は、
[epel]
・・・

enabled=1
※enabled=0にするとyumコマンドの実行時にEPELのリポジトリは使用されない。
③kernelのバージョンを固定
exclude=kernel*
→ABI改変を含むパッケージすべてをアップデートから除外する場合は?
例えば、glibcなどのシステムライブラリなど

④/etc/yum.repos.d/redhat.repo ファイル内のリポジトリを管理
・Red Hat Network へのシステムの登録
・Red Hat サブスクリプションマネージャ ツールを使用して/redhat.repoリポジトリを管理
→Red Hat Networkにシステム登録したサーバと、別のホスト(たとえばWindows機)でRHELのrpmファイルをダウンロードして保存し、IISなどのWebサーバに配置した後、インターネットと接続していないRHEL機(システム登録済)でIISのWebサーバをリポジトリ登録してyumを使ったインストールやアップデートを行う際、rpmイメージ内の証明書の認証やサブスクリプション上必要な処置は他に必要ないのか?
https://access.redhat.com/documentation/ja-JP/Red_Hat_Subscription_Management/1.0/html/Subscription_Management_Guide/registering-machine-ui.html

(3)Yumレポジトリの作成
①createrepo パッケージをインストール
# yum install createrepo
②リポジトリーに配置するパッケージすべてを、/mnt/local_repo/ などの一つのディレクトリーにコピー
③このディレクトリーに移動して、以下のコマンドを実行
# createrepo --database /mnt/local_repo
※createrepoが無しでもローカルディレクトリに配置したrpmパッケージをyum install、yum infoできた。→createrepoは必須でない???
いずれにせよ、ローカルディレクトリをリポジトリにする場合は、下記の内容で
/etc/yum.repos.d/peropero.repoファイルを作成する。
[hoge]
name=fuga
baseurl=file:///mnt/local_repo
enabled=1
gpgcheck=0                  ←「1」にすると「署名されてません」でエラーになった。

※createrepoパッケージが依存する他のパッケージ
deltarpm、libxml2-python、python-deltarpm
※パッケージの中身
# rpm -ql createrepo
/etc/bash_completion.d
/etc/bash_completion.d/createrepo.bash
/usr/bin/createrepo
/usr/bin/mergerepo
/usr/bin/modifyrepo
/usr/lib/python2.6/site-packages/createrepo
/usr/lib/python2.6/site-packages/createrepo/__init__.py
/usr/lib/python2.6/site-packages/createrepo/__init__.pyc
/usr/lib/python2.6/site-packages/createrepo/__init__.pyo
/usr/lib/python2.6/site-packages/createrepo/deltarpms.py
/usr/lib/python2.6/site-packages/createrepo/deltarpms.pyc
/usr/lib/python2.6/site-packages/createrepo/deltarpms.pyo
/usr/lib/python2.6/site-packages/createrepo/merge.py
/usr/lib/python2.6/site-packages/createrepo/merge.pyc
/usr/lib/python2.6/site-packages/createrepo/merge.pyo
/usr/lib/python2.6/site-packages/createrepo/readMetadata.py
/usr/lib/python2.6/site-packages/createrepo/readMetadata.pyc
/usr/lib/python2.6/site-packages/createrepo/readMetadata.pyo
/usr/lib/python2.6/site-packages/createrepo/utils.py
/usr/lib/python2.6/site-packages/createrepo/utils.pyc
/usr/lib/python2.6/site-packages/createrepo/utils.pyo
/usr/lib/python2.6/site-packages/createrepo/yumbased.py
/usr/lib/python2.6/site-packages/createrepo/yumbased.pyc
/usr/lib/python2.6/site-packages/createrepo/yumbased.pyo
/usr/share/createrepo
/usr/share/createrepo/genpkgmetadata.py
/usr/share/createrepo/genpkgmetadata.pyc
/usr/share/createrepo/genpkgmetadata.pyo
/usr/share/createrepo/mergerepo.py
/usr/share/createrepo/mergerepo.pyc
/usr/share/createrepo/mergerepo.pyo
/usr/share/createrepo/modifyrepo.py
/usr/share/createrepo/modifyrepo.pyc
/usr/share/createrepo/modifyrepo.pyo
/usr/share/createrepo/worker.py
/usr/share/createrepo/worker.pyc
/usr/share/createrepo/worker.pyo
・・・省略・・・
→ほとんどpythonスクリプト
# rpm -ql deltarpm
/usr/bin/applydeltarpm
/usr/bin/combinedeltarpm
/usr/bin/makedeltarpm
/usr/bin/rpmdumpheader
/usr/share/doc/deltarpm-3.5
/usr/share/doc/deltarpm-3.5/LICENSE.BSD
/usr/share/doc/deltarpm-3.5/README
/usr/share/man/man8/applydeltarpm.8.gz
/usr/share/man/man8/combinedeltarpm.8.gz
/usr/share/man/man8/makedeltarpm.8.gz

# pwd 
/mnt/local_repo
# createrepo --database /mnt/local_repo
Spawning worker 0 with 2 pkgs
Workers Finished
Gathering worker results
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
→/mnt/local_repoに、repodataというディレクトリが作られて、
/mnt/local_repoに配置済みのrpmパッケージの情報がxmlとsqliteの2種類のファイルで作成された。
repodataディレクトリとrpmパッケージ情報が記載されたxmlやsqliteファイルが無くて、rpmファイルだけがローカルリポジトリにある状態だけで、yum infoコマンドはrpmファイル内の情報を出力した。 もしかしたら、repodataディレクトリとrpmパッケージ情報ファイルは処理を高速化するためのおまけ的なものかもしれない。それと同時に、リポジトリの役割は、ローカルであっても、ネット上であっても、基本はrpmファイルを単に配置しておくだけでいいのかもしれない。

※RHEL5インストールisoをマウントしてこれをリポジトリとして登録する方法は、
①RHEL5インストールisoの入ったcdromをマウント
②/mnt/cdromにマウントしていた場合には、/mnt/cdrom/.discinfoファイルの1行目に記載されている、メディアIDを記録する。
③/etc/yum.repos.d/base.repoファイルを下記の内容で作成
[base]
name=適当な名前
mediaid=メディアID
baseurl=file:///mnt/cdrom/Server
enabled=1
gpgcheck=0
[VT]
name=適当な名前
mediaid=メディアID
baseurl=file:///mnt/cdrom/VT
enabled=1
gpgcheck=0
[Cluster]
name=適当な名前
mediaid=メディアID
baseurl=file:///mnt/cdrom/Cluster
enabled=1
gpgcheck=0
[ClusterStrage]
name=適当な名前
mediaid=メディアID
baseurl=file:///mnt/cdrom/ClusterStrage
enabled=1
gpgcheck=0
【参照】「プロのためのLinuxシステム構築・運用技術 P.27」

【参照】
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sec-Configuring_Yum_and_Yum_Repositories.html

■rpmパッケージの中身
・SPECファイル
・依存関係の記述

■rpmパッケージ管理データベース
rpmコマンドで、現在インストール済みのパッケージ、インストールされたファイルを含んでいたパッケージ名、依存関係情報などを確認できる

■yum infoコマンド
yum infoコマンドはどのWebサーバに接続してリポジトリで展開中のパッケージ情報をどうやってしらべるのか?

■rpmデータベース
RPMでインストールした情報などを「/usr/lib/rpm」ディレクトリ内に保存しています。
このデータベースを「RPMデータベース」を言います。検索コマンドなどは、このデータベースから情報を収集しています。
パッケージの検索は、「-q」オプションを利用します。
# ls -la /usr/lib/rpm
合計 104
drwxr-xr-x.  3 root root  4096  7月  3 05:24 2016 .
dr-xr-xr-x. 10 root root  4096  7月  3 05:25 2016 ..
-rw-r--r--   1 root root 43450  5月 10 19:49 2016 macros
drwxr-xr-x. 14 root root  4096  5月 10 19:49 2016 platform
-rw-r--r--   1 root root   284  5月 10 19:49 2016 rpm.daily
-rw-r--r--   1 root root    61  5月 10 19:49 2016 rpm.log
-rw-r--r--   1 root root   319  5月 10 19:49 2016 rpm.xinetd
-rwxr-xr-x   1 root root  1255  5月 10 19:49 2016 rpm2cpio.sh
lrwxrwxrwx   1 root root    20  7月  3 05:24 2016 rpmdb_archive -> ../../bin/db_archive
lrwxrwxrwx   1 root root    21  7月  3 05:24 2016 rpmdb_deadlock -> ../../bin/db_deadlock
lrwxrwxrwx   1 root root    17  7月  3 05:24 2016 rpmdb_dump -> ../../bin/db_dump
lrwxrwxrwx   1 root root    17  7月  3 05:24 2016 rpmdb_load -> ../../bin/db_load
-rwxr-xr-x   1 root root  1467  5月 10 19:49 2016 rpmdb_loadcvt
lrwxrwxrwx   1 root root    21  7月  3 05:24 2016 rpmdb_printlog -> ../../bin/db_printlog
lrwxrwxrwx   1 root root    20  7月  3 05:24 2016 rpmdb_recover -> ../../bin/db_recover
lrwxrwxrwx   1 root root    17  7月  3 05:24 2016 rpmdb_stat -> ../../bin/db_stat
lrwxrwxrwx   1 root root    20  7月  3 05:24 2016 rpmdb_upgrade -> ../../bin/db_upgrade
lrwxrwxrwx   1 root root    19  7月  3 05:24 2016 rpmdb_verify -> ../../bin/db_verify
-rw-r--r--   1 root root  7920  5月 10 19:49 2016 rpmpopt-4.8.0
-rw-r--r--   1 root root 13698  5月 10 19:49 2016 rpmrc
-rwxr-xr-x   1 root root   907  5月 10 19:49 2016 tgpg


■ミラーサイト
有力ディストリビューション公式ミラーや理化学研究所ミラーなど由緒正しい公式ミラーサイトが備える条件とは?
・ミラーサイトでパッケージを作成して公開する人(メンテナー)にはどのような素養と技術が必要か?どんなルールを守るべきか?
・epelとかrpm-forgeなどのディストリビューションなどの中立的な組織がリポジトリサイトを立てる際の考慮点と利用する際の注意点は?
・debianのサイトには由緒正しい「Hello」というdebパッケージがあり。これがdebパッケージの標準の流儀を小うるさいほど守って作られている。練習用debパッケージ


■rpmパッケージにはソースコードを含むソースパッケージもある。
ソースパッケージの名前には、
「yum-2.1.11-3.src.rpm」
のように、「src」が入ってる


■yum plugin
yumのいろいろな機能を拡張するプログラムがある


■Yum wiki
Yum wiki の Yum Guides セクションには多くのドキュメントが記載されています。
http://yum.baseurl.org/wiki/Guides

■ダウンロードだけ
yum update --downloadonly --downloaddir=/hoge