プライベート環境で用意されているyumリポジトリサーバではインストールできないパッケージを、rpmファイル配布してインストールでなく、ローカルに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
このファイルをリポジトリに追加しよう。
パッケージファイルを追加
ファイルを追加
# 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
使い方はこちら
この辺とコンボしてね