zaki work log

作業ログやら生活ログやらなんやら

(CentOS7)プライベート環境に必要なパッケージのみ提供するyumリポジトリサーバを構築する

プライベート環境で用意されているyumリポジトリサーバではインストールできないパッケージを、rpmファイル配布してインストールでなく、ローカルにyumリポジトリサーバを構築し、そのリポジトリからパッケージインストールする。

例としてjq用のyumリポジトリサーバの構築について。

リポジトリサーバ

httpサーバ

パッケージ配布にwebサーバが必要なので、なんか適当にインストールする。ここではApache(httpd)

# yum install httpd
# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --reload

作業ディレクト

# cd /var/www/html/
# mkdir -p yum-repo/Packages
# cd /var/www/html/yum-repo/Packages/

rpmファイル配置

だいたいこの辺からrpmファイルをダウンロードする。
jq-1.6-1.el7.x86_64 RPM

# curl -LO https://rpmfind.net/linux/epel/7/x86_64/Packages/j/jq-1.6-1.el7.x86_64.rpm
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  166k  100  166k    0     0  66471      0  0:00:02  0:00:02 --:--:-- 66476
# file jq-1.6-1.el7.x86_64.rpm
jq-1.6-1.el7.x86_64.rpm: RPM v3.0 bin i386/x86_64 jq-1.6-1.el7

ファイル構成

# find /var/www/html/yum-repo/
/var/www/html/yum-repo/
/var/www/html/yum-repo/Packages
/var/www/html/yum-repo/Packages/jq-1.6-1.el7.x86_64.rpm

リモートからrpmファイルにGET確認

$ curl -I http://192.168.0.21/yum-repo/Packages/
HTTP/1.1 200 OK
Date: Sun, 08 Mar 2020 12:42:37 GMT
Server: Apache/2.4.6 (CentOS)
Content-Type: text/html;charset=ISO-8859-1

firewallなどで遮断されてないか確認しておく。

リポジトリ作成

配置したrpmファイルに対し、リモートからのyumに応答するためのメタデータを生成する。
コマンドはcreaterepoを使用するので、入っていなければyumインストールする。

# yum install createrepo

リポジトリデータの作成

# createrepo /var/www/html/yum-repo/
Spawning worker 0 with 1 pkgs
Spawning worker 1 with 0 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
# ls -l /var/www/html/yum-repo/
合計 4
drwxr-xr-x. 2 root root   37  3月  8 21:41 Packages
drwxr-xr-x. 2 root root 4096  3月  8 21:43 repodata

クライアント設定

yumコマンドを実行してパッケージインストールする側の設定。

before

# yum install jq
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ty1.mirror.newmediaexpress.com
 * extras: ty1.mirror.newmediaexpress.com
 * updates: ty1.mirror.newmediaexpress.com
パッケージ jq は利用できません。
エラー: 何もしません

jqをインストールするためのリポジトリは設定されていない。

リポジトリ追加

この辺は普通の処理。
…のはず。この辺を作成するコマンドってないのかな。

# vi /etc/yum.repos.d/my-repository.repo
[my-repository]
name=my repository
baseurl=http://192.168.0.21/yum-repo/
gpgcheck=0
enabled=1

リポジトリの設定を追加したら

# yum repolist
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
リポジトリー ID                     リポジトリー名                        状態
base/7/x86_64                       CentOS-7 - Base                       10,097
extras/7/x86_64                     CentOS-7 - Extras                        335
my-repository                       my repository                              1
updates/7/x86_64                    CentOS-7 - Updates                     1,487
repolist: 11,920

この通り、my-repositoryが追加され、パッケージが1つあることが確認できる。

# yum search jq
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ty1.mirror.newmediaexpress.com
 * extras: ty1.mirror.newmediaexpress.com
 * updates: ty1.mirror.newmediaexpress.com
=============================== N/S matched: jq ================================
jq.x86_64 : Command-line JSON processor

  Name and summary matches only, use "search all" for everything.

searchもヒットする。

パッケージインストール

では、いよいよインストール。

# yum install jq
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ty1.mirror.newmediaexpress.com
 * extras: ty1.mirror.newmediaexpress.com
 * updates: ty1.mirror.newmediaexpress.com
my-repository                                            | 2.9 kB     00:00     
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ jq.x86_64 0:1.6-1.el7 を インストール
--> 依存性の処理をしています: libonig.so.2()(64bit) のパッケージ: jq-1.6-1.el7.x86_64
--> 依存性解決を終了しました。
エラー: パッケージ: jq-1.6-1.el7.x86_64 (my-repository)
             要求: libonig.so.2()(64bit)
 問題を回避するために --skip-broken を用いることができます。
 これらを試行できます: rpm -Va --nofiles --nodigest

あっ…

Linux用jqのバイナリをダウンロードする場合は単体で動作するが、パッケージインストール時は鬼車が依存で必要。

oniguruma-5.9.5-3.el7.x86_64 RPM

このファイルをリポジトリに追加しよう。

パッケージファイルを追加

ファイルを追加して、リポジトリメタデータを更新すればOK

ファイルを追加

# curl -LO https://rpmfind.net/linux/epel/7/x86_64/Packages/o/oniguruma-5.9.5-3.el7.x86_64.rpm
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  128k  100  128k    0     0  51702      0  0:00:02  0:00:02 --:--:-- 51684
# ls -l
合計 300
-rw-r--r--. 1 root root 170978  3月  8 21:28 jq-1.6-1.el7.x86_64.rpm
-rw-r--r--. 1 root root 131744  3月  8 22:02 oniguruma-5.9.5-3.el7.x86_64.rpm

リポジトリデータを更新

# createrepo --update /var/www/html/yum-repo/
Spawning worker 0 with 1 pkgs
Spawning worker 1 with 0 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

クライアント側の更新

# yum repolist 
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ty1.mirror.newmediaexpress.com
 * extras: ty1.mirror.newmediaexpress.com
 * updates: ty1.mirror.newmediaexpress.com
リポジトリー ID                     リポジトリー名                        状態
base/7/x86_64                       CentOS-7 - Base                       10,097
extras/7/x86_64                     CentOS-7 - Extras                        335
my-repository                       my repository                              1
updates/7/x86_64                    CentOS-7 - Updates                     1,487
repolist: 11,920

キャッシュが効いているため、"my repository"の件数が1のまま。

# yum makecache

# yum clean all

を実行。

# yum repolist 
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ty1.mirror.newmediaexpress.com
 * extras: ty1.mirror.newmediaexpress.com
 * updates: ty1.mirror.newmediaexpress.com
リポジトリー ID                     リポジトリー名                        状態
base/7/x86_64                       CentOS-7 - Base                       10,097
extras/7/x86_64                     CentOS-7 - Extras                        335
my-repository                       my repository                              2
updates/7/x86_64                    CentOS-7 - Updates                     1,487
repolist: 11,921

2件に更新された。

jqのインストール

]# yum install jq
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ty1.mirror.newmediaexpress.com
 * extras: ty1.mirror.newmediaexpress.com
 * updates: ty1.mirror.newmediaexpress.com
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ jq.x86_64 0:1.6-1.el7 を インストール
--> 依存性の処理をしています: libonig.so.2()(64bit) のパッケージ: jq-1.6-1.el7.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ oniguruma.x86_64 0:5.9.5-3.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 Package          アーキテクチャー
                                バージョン           リポジトリー          容量
================================================================================
インストール中:
 jq               x86_64        1.6-1.el7            my-repository        167 k
依存性関連でのインストールをします:
 oniguruma        x86_64        5.9.5-3.el7          my-repository        129 k

トランザクションの要約
================================================================================
インストール  1 パッケージ (+1 個の依存関係のパッケージ)

総ダウンロード容量: 296 k
インストール容量: 936 k
Is this ok [y/d/N]: y
Downloading packages:
(1/2): jq-1.6-1.el7.x86_64.rpm                             | 167 kB   00:00     
(2/2): oniguruma-5.9.5-3.el7.x86_64.rpm                    | 129 kB   00:00     
--------------------------------------------------------------------------------
合計                                               5.5 MB/s | 296 kB  00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : oniguruma-5.9.5-3.el7.x86_64                    1/2 
  インストール中          : jq-1.6-1.el7.x86_64                             2/2  
  検証中                 : jq-1.6-1.el7.x86_64                             1/2  
  検証中                 : oniguruma-5.9.5-3.el7.x86_64                    2/2 
インストール:
  jq.x86_64 0:1.6-1.el7

依存性関連をインストールしました:
  oniguruma.x86_64 0:5.9.5-3.el7

完了しました!
$ jq --version
jq-1.6

インストール対象のサーバがインターネットに接続できずに数も多い時や、クライアント用途のLinuxがある場合は、ファイル配布して個別にインストールよりはスマートと思う。


クライアント側のリポジトリ設定は、Ansibleで自動化できる場合はyum_repositoryモジュールを使うのが簡単。

yum_repository – Add or remove YUM repositories — Ansible Documentation

使い方はこちら

zaki-hmkc.hatenablog.com


この辺とコンボしてね

zaki-hmkc.hatenablog.com