プライベート環境で用意されている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
使い方はこちら
この辺とコンボしてね