依存関係の少ないパッケージなら、RPMからインストールする手順でも問題はないが、依存関係が多いパッケージは、一つ一つ依存関係を紐解きながらインストールする必要があり、非常に難儀する。
Perlがまさにそれである。
本記事では、今後、PerlをRPMからインストール際に悩まないように、コマンド一発でインストールできるよう調査した。
環境
今回確認した環境は以下の通りとなる。# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
依存関係の調査
OSイメージを/mnt
にマウントする。# mount /dev/cdrom /mnt/
mount: /dev/sr0 is write-protected, mounting read-only
# cd /mnt/Packages/
とりあえず、Perlをインストールしようとすると、大量の依存関係ではじかれる。
# rpm -ivh perl-5.16.3-293.el7.x86_64.rpm
警告: perl-5.16.3-293.el7.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID f4a80eb5: NOKEY
エラー: 依存性の欠如:
libperl.so()(64bit) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(Carp) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(Cwd) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(Exporter) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(File::Path) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(File::Spec) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(File::Spec::Functions) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(File::Spec::Unix) は perl-4:5.16.3-293.el7.x86_64 に必要とされてい ます
perl(File::Temp) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(Filter::Util::Call) は perl-4:5.16.3-293.el7.x86_64 に必要とされて います
perl(Getopt::Long) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(Pod::Simple::Search) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(Pod::Simple::XHTML) は perl-4:5.16.3-293.el7.x86_64 に必要とされて います
perl(Scalar::Util) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(Scalar::Util) >= 1.10 は perl-4:5.16.3-293.el7.x86_64 に必要とされ ています
perl(Socket) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(Socket) >= 1.3 は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(Storable) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(Time::HiRes) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(Time::Local) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(constant) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(threads) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(threads::shared) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl-libs は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl-libs = 4:5.16.3-293.el7 は perl-4:5.16.3-293.el7.x86_64 に必要とさ れています
perl-macros は perl-4:5.16.3-293.el7.x86_64 に必要とされています
いったん、それっぽいRPMを羅列してインストールを試みる。多少は依存関係が減ったように見えるが、新たな依存関係も生まれている。
# rpm -ivh perl-5.16.3-293.el7.x86_64.rpm \
> perl-Carp-1.26-244.el7.noarch.rpm \
> perl-Exporter-5.68-3.el7.noarch.rpm \
> perl-File-Path-2.09-2.el7.noarch.rpm \
> perl-File-Temp-0.23.01-3.el7.noarch.rpm \
> perl-Filter-1.49-3.el7.x86_64.rpm \
> perl-Getopt-Long-2.40-3.el7.noarch.rpm \
> perl-Pod-Simple-3.28-4.el7.noarch.rpm \
> perl-Scalar-List-Utils-1.27-248.el7.x86_64.rpm \
> perl-Socket-2.010-4.el7.x86_64.rpm \
> perl-Storable-2.45-3.el7.x86_64.rpm \
> perl-Time-HiRes-1.9725-3.el7.x86_64.rpm \
> perl-Time-Local-1.2300-2.el7.noarch.rpm \
> perl-constant-1.27-2.el7.noarch.rpm \
> perl-threads-1.87-4.el7.x86_64.rpm perl-threads-shared-1.43-6.el7.x86_64.rpm \
> perl-libs-5.16.3-293.el7.x86_64.rpm \
> perl-macros-5.16.3-293.el7.x86_64.rpm
警告: perl-5.16.3-293.el7.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID f4a80eb5: NOKEY
エラー: 依存性の欠如:
perl(Cwd) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(File::Spec) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(File::Spec::Functions) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(File::Spec::Unix) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(Cwd) は perl-File-Path-2.09-2.el7.noarch に必要とされています
perl(File::Spec) は perl-File-Path-2.09-2.el7.noarch に必要とされています
perl(Cwd) は perl-File-Temp-0.23.01-3.el7.noarch に必要とされています
perl(File::Spec) >= 0.8 は perl-File-Temp-0.23.01-3.el7.noarch に必要とされています
perl(Pod::Usage) >= 1.14 は perl-Getopt-Long-2.40-3.el7.noarch に必要とされています
perl(Text::ParseWords) は perl-Getopt-Long-2.40-3.el7.noarch に必要とされています
perl(Cwd) は perl-Pod-Simple-1:3.28-4.el7.noarch に必要とされています
perl(Encode) は perl-Pod-Simple-1:3.28-4.el7.noarch に必要とされています
perl(File::Spec) は perl-Pod-Simple-1:3.28-4.el7.noarch に必要とされています
perl(Pod::Escapes) >= 1.04 は perl-Pod-Simple-1:3.28-4.el7.noarch に必要とされています
再度それっぽいRPMを追加してインストールを試みる、という作業を何回か繰り返すと、最終的に以下状況となり、インストールするRPMがファイル名では特定できなくなり、詰んでしまった。
# rpm -ivh perl-5.16.3-293.el7.x86_64.rpm \
> perl-Carp-1.26-244.el7.noarch.rpm \
> perl-Exporter-5.68-3.el7.noarch.rpm \
> perl-File-Path-2.09-2.el7.noarch.rpm \
> perl-File-Temp-0.23.01-3.el7.noarch.rpm \
> perl-Filter-1.49-3.el7.x86_64.rpm \
> perl-Getopt-Long-2.40-3.el7.noarch.rpm \
> perl-Pod-Simple-3.28-4.el7.noarch.rpm \
> perl-Scalar-List-Utils-1.27-248.el7.x86_64.rpm \
> perl-Socket-2.010-4.el7.x86_64.rpm \
> perl-Storable-2.45-3.el7.x86_64.rpm \
> perl-Time-HiRes-1.9725-3.el7.x86_64.rpm \
> perl-Time-Local-1.2300-2.el7.noarch.rpm \
> perl-constant-1.27-2.el7.noarch.rpm \
> perl-threads-1.87-4.el7.x86_64.rpm perl-threads-shared-1.43-6.el7.x86_64.rpm \
> perl-libs-5.16.3-293.el7.x86_64.rpm \
> perl-macros-5.16.3-293.el7.x86_64.rpm \
> perl-Pod-Usage-1.63-3.el7.noarch.rpm \
> perl-Text-ParseWords-3.29-4.el7.noarch.rpm \
> perl-Encode-2.51-7.el7.x86_64.rpm \
> perl-Pod-Escapes-1.04-293.el7.noarch.rpm \
> perl-Pod-Perldoc-3.20-4.el7.noarch.rpm \
> perl-HTTP-Tiny-0.033-3.el7.noarch.rpm \
> perl-parent-0.225-244.el7.noarch.rpm
警告: perl-5.16.3-293.el7.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID f4a80eb5: NOKEY
エラー: 依存性の欠如:
perl(Cwd) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(File::Spec) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(File::Spec::Functions) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(File::Spec::Unix) は perl-4:5.16.3-293.el7.x86_64 に必要とされています
perl(Cwd) は perl-File-Path-2.09-2.el7.noarch に必要とされています
perl(File::Spec) は perl-File-Path-2.09-2.el7.noarch に必要とされています
perl(Cwd) は perl-File-Temp-0.23.01-3.el7.noarch に必要とされています
perl(File::Spec) >= 0.8 は perl-File-Temp-0.23.01-3.el7.noarch に必要とされています
perl(Cwd) は perl-Pod-Simple-1:3.28-4.el7.noarch に必要とされています
perl(File::Spec) は perl-Pod-Simple-1:3.28-4.el7.noarch に必要とされています
perl(File::Spec) >= 0.82 は perl-Pod-Usage-1.63-3.el7.noarch に必要とされています
perl(Pod::Text) >= 3.15 は perl-Pod-Usage-1.63-3.el7.noarch に必要とされています
perl(File::Spec::Functions) は perl-Pod-Perldoc-3.20-4.el7.noarch に必要とされています
perl(Pod::Man) >= 2.18 は perl-Pod-Perldoc-3.20-4.el7.noarch に必要とされています
perl(Pod::Text) は perl-Pod-Perldoc-3.20-4.el7.noarch に必要とされています
perl(Pod::Text::Color) は perl-Pod-Perldoc-3.20-4.el7.noarch に必要とされています
perl(Pod::Text::Termcap) は perl-Pod-Perldoc-3.20-4.el7.noarch に必要とされています
仕方がないので、1つずつ調べてみる。
perl(File::Spec::Functions)
でググると、以下URLよりperl-PathTools
をインストールすればよいことがわかる。同様に
perl(Pod::Man)
でググると以下が見つかる。perl-podlators
をインストールすればよいらしい。三度目の正直で、再度インストールを試みると、ようやく成功!
# rpm -ivh perl-5.16.3-293.el7.x86_64.rpm \
> perl-Carp-1.26-244.el7.noarch.rpm \
> perl-Exporter-5.68-3.el7.noarch.rpm \
> perl-File-Path-2.09-2.el7.noarch.rpm \
> perl-File-Temp-0.23.01-3.el7.noarch.rpm \
> perl-Filter-1.49-3.el7.x86_64.rpm \
> perl-Getopt-Long-2.40-3.el7.noarch.rpm \
> perl-Pod-Simple-3.28-4.el7.noarch.rpm \
> perl-Scalar-List-Utils-1.27-248.el7.x86_64.rpm \
> perl-Socket-2.010-4.el7.x86_64.rpm \
> perl-Storable-2.45-3.el7.x86_64.rpm \
> perl-Time-HiRes-1.9725-3.el7.x86_64.rpm \
> perl-Time-Local-1.2300-2.el7.noarch.rpm \
> perl-constant-1.27-2.el7.noarch.rpm \
> perl-threads-1.87-4.el7.x86_64.rpm perl-threads-shared-1.43-6.el7.x86_64.rpm \
> perl-libs-5.16.3-293.el7.x86_64.rpm \
> perl-macros-5.16.3-293.el7.x86_64.rpm \
> perl-Pod-Usage-1.63-3.el7.noarch.rpm \
> perl-Text-ParseWords-3.29-4.el7.noarch.rpm \
> perl-Encode-2.51-7.el7.x86_64.rpm \
> perl-Pod-Escapes-1.04-293.el7.noarch.rpm \
> perl-Pod-Perldoc-3.20-4.el7.noarch.rpm \
> perl-HTTP-Tiny-0.033-3.el7.noarch.rpm \
> perl-parent-0.225-244.el7.noarch.rpm \
> perl-PathTools-3.40-5.el7.x86_64.rpm \
> perl-podlators-2.5.1-3.el7.noarch.rpm
警告: perl-5.16.3-293.el7.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID f4a80eb5: NOKEY
準備しています... ################################# [100%]
更新中 / インストール中...
1:perl-HTTP-Tiny-0.033-3.el7 ################################# [ 4%]
2:perl-parent-1:0.225-244.el7 ################################# [ 7%]
3:perl-Pod-Perldoc-3.20-4.el7 ################################# [ 11%]
4:perl-podlators-2.5.1-3.el7 ################################# [ 15%]
5:perl-Text-ParseWords-3.29-4.el7 ################################# [ 19%]
6:perl-Pod-Escapes-1:1.04-293.el7 ################################# [ 22%]
7:perl-Encode-2.51-7.el7 ################################# [ 26%]
8:perl-Pod-Usage-1.63-3.el7 ################################# [ 30%]
9:perl-Carp-1.26-244.el7 ################################# [ 33%]
10:perl-Exporter-5.68-3.el7 ################################# [ 37%]
11:perl-Filter-1.49-3.el7 ################################# [ 41%]
12:perl-Scalar-List-Utils-1.27-248.e################################# [ 44%]
13:perl-Socket-2.010-4.el7 ################################# [ 48%]
14:perl-Storable-2.45-3.el7 ################################# [ 52%]
15:perl-Time-HiRes-4:1.9725-3.el7 ################################# [ 56%]
16:perl-Time-Local-1.2300-2.el7 ################################# [ 59%]
17:perl-constant-1.27-2.el7 ################################# [ 63%]
18:perl-threads-1.87-4.el7 ################################# [ 67%]
19:perl-threads-shared-1.43-6.el7 ################################# [ 70%]
20:perl-libs-4:5.16.3-293.el7 ################################# [ 74%]
21:perl-macros-4:5.16.3-293.el7 ################################# [ 78%]
22:perl-File-Path-2.09-2.el7 ################################# [ 81%]
23:perl-File-Temp-0.23.01-3.el7 ################################# [ 85%]
24:perl-PathTools-3.40-5.el7 ################################# [ 89%]
25:perl-Pod-Simple-1:3.28-4.el7 ################################# [ 93%]
26:perl-Getopt-Long-2.40-3.el7 ################################# [ 96%]
27:perl-4:5.16.3-293.el7 ################################# [100%]
コマンドまとめ
上記調査結果をもとに、汎用的に使えるようコマンドを綺麗にすると以下のようになる。rpms=""
rpms="$rpms $(ls | grep -e '^perl-[0-9]\+.*')"
rpms="$rpms $(ls | grep -e 'perl-Carp-[0-9]\+.*')"
rpms="$rpms $(ls perl-Exporter-*)"
rpms="$rpms $(ls perl-File-Path-*)"
rpms="$rpms $(ls perl-File-Temp-*)"
rpms="$rpms $(ls perl-Filter-*)"
rpms="$rpms $(ls perl-Getopt-Long-*)"
rpms="$rpms $(ls perl-Pod-Simple-*)"
rpms="$rpms $(ls perl-Scalar-List-Utils-*)"
rpms="$rpms $(ls perl-Socket-*)"
rpms="$rpms $(ls perl-Storable-*)"
rpms="$rpms $(ls perl-Time-HiRes-*)"
rpms="$rpms $(ls perl-Time-Local-*)"
rpms="$rpms $(ls perl-constant-*)"
rpms="$rpms $(ls perl-threads-*)"
rpms="$rpms $(ls perl-libs-* | grep -v i686)"
rpms="$rpms $(ls perl-macros-*)"
rpms="$rpms $(ls perl-Pod-Usage-*)"
rpms="$rpms $(ls perl-Text-ParseWords-*)"
rpms="$rpms $(ls | grep -e 'perl-Encode-[0-9]\+.*')"
rpms="$rpms $(ls perl-Pod-Escapes-*)"
rpms="$rpms $(ls perl-Pod-Perldoc-*)"
rpms="$rpms $(ls perl-HTTP-Tiny-*)"
rpms="$rpms $(ls perl-parent-*)"
rpms="$rpms $(ls perl-PathTools*)"
rpms="$rpms $(ls perl-podlators-*)"
rpm -ivh $rpms
実行結果は以下の通り。
# rpms=""
# rpms="$rpms $(ls | grep -e '^perl-[0-9]\+.*')"
# rpms="$rpms $(ls | grep -e 'perl-Carp-[0-9]\+.*')"
# rpms="$rpms $(ls perl-Exporter-*)"
# rpms="$rpms $(ls perl-File-Path-*)"
# rpms="$rpms $(ls perl-File-Temp-*)"
# rpms="$rpms $(ls perl-Filter-*)"
# rpms="$rpms $(ls perl-Getopt-Long-*)"
# rpms="$rpms $(ls perl-Pod-Simple-*)"
# rpms="$rpms $(ls perl-Scalar-List-Utils-*)"
# rpms="$rpms $(ls perl-Socket-*)"
# rpms="$rpms $(ls perl-Storable-*)"
# rpms="$rpms $(ls perl-Time-HiRes-*)"
# rpms="$rpms $(ls perl-Time-Local-*)"
# rpms="$rpms $(ls perl-constant-*)"
# rpms="$rpms $(ls perl-threads-*)"
# rpms="$rpms $(ls perl-libs-* | grep -v i686)"
# rpms="$rpms $(ls perl-macros-*)"
# rpms="$rpms $(ls perl-Pod-Usage-*)"
# rpms="$rpms $(ls perl-Text-ParseWords-*)"
# rpms="$rpms $(ls | grep -e 'perl-Encode-[0-9]\+.*')"
# rpms="$rpms $(ls perl-Pod-Escapes-*)"
# rpms="$rpms $(ls perl-Pod-Perldoc-*)"
# rpms="$rpms $(ls perl-HTTP-Tiny-*)"
# rpms="$rpms $(ls perl-parent-*)"
# rpms="$rpms $(ls perl-PathTools*)"
# rpms="$rpms $(ls perl-podlators-*)"
# rpm -ivh $rpms
警告: perl-5.16.3-293.el7.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID f4a80eb5: NOKEY
準備しています... ################################# [100%]
更新中 / インストール中...
1:perl-HTTP-Tiny-0.033-3.el7 ################################# [ 4%]
2:perl-parent-1:0.225-244.el7 ################################# [ 7%]
3:perl-Pod-Perldoc-3.20-4.el7 ################################# [ 11%]
4:perl-podlators-2.5.1-3.el7 ################################# [ 15%]
5:perl-Text-ParseWords-3.29-4.el7 ################################# [ 19%]
6:perl-Pod-Escapes-1:1.04-293.el7 ################################# [ 22%]
7:perl-Encode-2.51-7.el7 ################################# [ 26%]
8:perl-Pod-Usage-1.63-3.el7 ################################# [ 30%]
9:perl-Carp-1.26-244.el7 ################################# [ 33%]
10:perl-Exporter-5.68-3.el7 ################################# [ 37%]
11:perl-Filter-1.49-3.el7 ################################# [ 41%]
12:perl-Scalar-List-Utils-1.27-248.e################################# [ 44%]
13:perl-Socket-2.010-4.el7 ################################# [ 48%]
14:perl-Storable-2.45-3.el7 ################################# [ 52%]
15:perl-Time-HiRes-4:1.9725-3.el7 ################################# [ 56%]
16:perl-Time-Local-1.2300-2.el7 ################################# [ 59%]
17:perl-constant-1.27-2.el7 ################################# [ 63%]
18:perl-threads-1.87-4.el7 ################################# [ 67%]
19:perl-threads-shared-1.43-6.el7 ################################# [ 70%]
20:perl-libs-4:5.16.3-293.el7 ################################# [ 74%]
21:perl-macros-4:5.16.3-293.el7 ################################# [ 78%]
22:perl-File-Path-2.09-2.el7 ################################# [ 81%]
23:perl-File-Temp-0.23.01-3.el7 ################################# [ 85%]
24:perl-PathTools-3.40-5.el7 ################################# [ 89%]
25:perl-Pod-Simple-1:3.28-4.el7 ################################# [ 93%]
26:perl-Getopt-Long-2.40-3.el7 ################################# [ 96%]
27:perl-4:5.16.3-293.el7 ################################# [100%]
0 件のコメント:
コメントを投稿