はじめに
Nexus Repository Manager3 の Docker コンテナを HTTPS 化では、自己証明書を使ってイントラネット内に HTTPS 化した Nexus コンテナを立ち上げたが、これを使って CentOS 向けの自己 yum ホストリポジトリや各種 yum リポジトリのミラーを作る。
Nexus の設定の前提
まず Nexus サーバーの設定を行う。サーバーは以下の設定で動いているとする。
- host.example.com (10.20.230.17) で稼動しているとする。
- すでに 8081/tcp で HTTP サービスが、8082/tpc で HTTPS サービスで動作しているとする。
- 管理アカウントは admin/admin123 とする。
yum リポジトリのローカルミラーを使用するのは CentOS 7 を想定している。
yum のミラーリポジトリ
CentOS リポジトリや EPEL、その他大き目のパッケージを配布しているリポジトリ毎にミラーリポジトリを作成すると、同じパッケージを2度ダウンロードする時にミラーの持つキャッシュが効くようになるので大変便利である。複数ホストを運用している場合や、Docker に yum update を掛ける場合などに重宝する。
ローカルミラーリポジトリを作成する
Nexus にアクセスし、ミラーしたい yum リポジトリの数だけ yum proxy リポジトリを作成する。
Nexus に管理カウントでログインし、メニューバーの歯車をアイコンをクリックすると Administratorion 画面に移動する。
左メニューの Repository > Repositories を選択した後に、「Create repository」ボタンを押す。
作成可能なリポジトリの一覧が表示されるので「yum(proxy)」を選択する。
- 「Name」は他のリポジトリと重複しないものを自由につけてよい。
- Remote storage には yum のマスターサーバーの URL を入力する。
自分が使っている設定を記述する。
Name | Remote storage |
---|---|
yum-centos-proxy | http://mirror.centos.org/centos/ |
yum-epel-proxy | http://download.fedoraproject.org/pub/epel/7/ |
yum-gitlab-proxy | https://packages.gitlab.com/gitlab/gitlab-ce/el/7/ |
CentOS のリポジトリは標準では http://mirror.centos.org/centos/ だが、適当なミラーサイトを指定した方がよい。例えば http://ftp.riken.jp/Linux/centos/ など。
CentOS 以外のリポジトリを設定するには多少注意が必要だ。
まず /etc/yum.repo.d/ 以下にすでに追加している yum リポジトリの内容を見ながら確認して設定する。例えば gitlab_gitlab-ce.repo では以下のようになっている。baseurl の最後の $basesearch が CentOS のアーキテクチャー、例えば "x86_64" に替わることになる。
[gitlab_gitlab-ce]
name=gitlab_gitlab-ce
baseurl=https://packages.gitlab.com/gitlab/gitlab-ce/el/7/$basearch
repo_gpgcheck=1
gpgcheck=1
enabled=1
gpgkey=https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey
https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey/gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
この場合、Nexus3 の yum(proxy) に指定する Remote storage と後で /etc/yum.repo.d/ に配置するリポジトリ設定の baseurl にはバリエーションが考えられる。
原因は良く分からないのだが、最後の書き方はたいがいうまくいくが、上の方に行くに従って動作しない可能性が増えてゆく。
そこでとりあえず CentOS 以外のリポジトリは一番下の記述方法で行く。
ローカルミラーリポジトリを使用する
自ホストが yum を実行した時に、どの外部 yum リポジトリを参照するかは /etc/yum.repo.d/ の設定されている。そこでローカルミラー yum リポジトリの設定を追加するが、デフォルトの設定よりもローカルミラーリポジトリの方を優先して使用できるうように優先度を設定する。
このために yum-plugin-priorites をインストールする。
$ sudo yum install yum-plugin-priorites
次に /etc/yum.repos.d/ の下に適当な名前で、例えば /etc/yum.repos.d/nexus3-proxy.repo のようにリポジトリ設定ファイルを書き込む。
[CentOS-Proxy]
name=CentOS-$releasever - Proxy
baseurl=http://admin:admin123@host.example.com:8081/repository/yum-centos-proxy/$releasever/os/$basearch/
enabled=1
gpgcheck=0
priority=1
[gitlab_gitlab-ce-Proxy]
name=gitlab_gitlab-ce - Proxy
baseurl=http://admin:admin123@host.example.com:8081/repository/yum-gitlab-proxy/$basearch
enabled=1
gpgcheck=0
priority=1
[epel-Proxy]
name=Extra Packages for Enterprise Linux 7 - Proxy
baseurl=http://admin:admin123@host.example.com:8081/repository/yum-epel-proxy/$basearch
enabled=1
gpgcheck=0
priority=1
リポジトリ中の priority は優先度をあらわし、小さいほど優先度が高く、省略時には 99 になる。ミラーリポジトリには priority=1 を指定しておく。
最後に yum のキャッシュをクリアしてから使用を開始する。
$ sudo yum clean all
$ sudo yum makecache
yum のホストリポジトリ
自分で作成した RPM パッケージを配布したい場合などに yum のホストリポジトリを使うことができる。
ローカルホストリポジトリを作成する
yum proxy リポジトリの作成と同様に Administratorion 画面の左メニューの Repository > Repositories を選択した後に、「Create repository」ボタンを押す。
作成可能なリポジトリの一覧が表示されるので「yum(hosted)」を選択する。
- 「Name」は他のリポジトリと重複しないものを自由につけてよい。ここでは yum-hosted とする。
- Repodata Depth というパラメータがある。作成された yum リポジトリがベース URL から、実際の RPM パッケージを格納する階層=repodataというDBが存在するディレクトリまで何回階層あるかという「深さ」である。リリースバージョン("6" or "7")やアーキテクチャー("x86_64" or "aarch64")を区別するためには深くする。とりあえずここでは 0 とする。
ローカルホストリポジトリを使用する
/etc/yum.repo.d/ の下に、例えば /etc/yum.repo.d/yum-hosted.repo のようにリポジトリ設定ファイルを追加する。
[my-yum-hosted]
name=my-yum-hosted
baseurl=http://admin:admin123@host.example.com:8081/repository/yum-hosted/
enabled=1
gpgcheck=0
priority=1
ローカルホストリポジトリに登録する
RPMパッケージをローカルホストリポジトリに登録したい場合、curl などを使って以下のように登録する。
yum-hosted リポジトリは Repodata Depth が 0 なので、/repository/yum-hosted/ の直下に置くが、Repodata Depth がそれ以外なら値に応じてディレクトリ階層を作成する。
curl -u admin:admin123 --upload-file foo-1.2.3-1el7.x86_64.rpm http://host.example.com:8081/repository/yum-hosted/foo-1.2.3-1el7.x86_64.rpm