3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Nexus Repository Manager3 を使って yum リポジトリを作る

Posted at

はじめに

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 画面に移動する。

Administration.png

左メニューの 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 にはバリエーションが考えられる。

Repodata Depth Remote storage baseurl
5 https://packages.gitlab.com/ http://admin:admin123@host.example.com:8081/repository/yum-gitlab-proxy/gitlab/gitlab-ce/el/7/$basearch
4 https://packages.gitlab.com/gitlab/ http://admin:admin123@host.example.com:8081/repository/yum-gitlab-proxy/gitlab-ce/el/7/$basearch
3 https://packages.gitlab.com/gitlab/gitlab-ce/ http://admin:admin123@host.example.com:8081/repository/yum-gitlab-proxy/el/7/$basearch
2 https://packages.gitlab.com/gitlab/gitlab-ce/el/ http://admin:admin123@host.example.com:8081/repository/yum-gitlab-proxy/7/$basearch
1 https://packages.gitlab.com/gitlab/gitlab-ce/el/7/ http://admin:admin123@host.example.com:8081/repository/yum-gitlab-proxy/$basearch

原因は良く分からないのだが、最後の書き方はたいがいうまくいくが、上の方に行くに従って動作しない可能性が増えてゆく。
そこでとりあえず 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
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?