はじめに
環境
・Windows10 Professional バージョン1903 OSビルド18362.295
・Asianux7 SP3(試用版)※CentOS7.6相当
・VirtualBox 6.0.10
・Vagrant 2.2.5
この記事の目的
rbenv(Rubyバージョン管理システム)を導入するためにopenssl-develをインストールする必要があったのですが、依存性関連で苦労したので備忘録として残すために書きました。(ほぼ自分用)
通常のCentOSを使っている限りは遭遇しないトラブルです。
経緯的なもの
rbenvに必要なパッケージ
rbenvインストール時に必要なパッケージの一つがopenssl-devel
です。
※rbenvインストールについては別途記事を起こしたいと思います。
依存性エラー
普通にyum install
でopenssl-develを入れようとしましたが、バージョンが合わないみたいです。
# yum -y install openssl-devel
(中略)
エラー: パッケージ: 1:openssl-devel-1.0.2k-16.el7_6.1.x86_64 (updates)
要求: openssl-libs(x86-64) = 1:1.0.2k-16.el7_6.1
インストール: 1:openssl-libs-1.0.2k-16.0.1.el7.AXS7.x86_64 (@anaconda/7)
openssl-libs(x86-64) = 1:1.0.2k-16.0.1.el7.AXS7
利用可能: 1:openssl-libs-1.0.2k-16.el7.x86_64 (base)
openssl-libs(x86-64) = 1:1.0.2k-16.el7
利用可能: 1:openssl-libs-1.0.2k-16.el7_6.1.x86_64 (updates)
openssl-libs(x86-64) = 1:1.0.2k-16.el7_6.1
問題を回避するために --skip-broken を用いることができます。
これらを試行できます: rpm -Va --nofiles --nodigest
openssl関係で入っているrpmパッケージを確認するとAsianux用に特別にパッケージングされているバージョンの様です。
openssl-libsが重要なライブラリなのですが、このバージョンが合わないとopenssl-develが入れられないみたいです。
同じ1.0.2kなのに・・・
# rpm -qa | grep openssl
openssl-1.0.2k-16.0.1.el7.AXS7.x86_64
openssl-libs-1.0.2k-16.0.1.el7.AXS7.x86_64
失敗例
openssl-libsを削除したら大変なことに
openssl-develをAsianux7sp3専用リポジトリからインストールすれば全く問題ないはずなのですが、試用版なので製品登録していません。
CentOS7用のリポジトリ―からインストールするために一旦opensslとopenssl-libsを削除すれば良いと考えました。
しかしこれは浅はかな考えでした。
良い子はマネをしてはいけません。
yumで削除してみよーん
# yum remove openssl
(あっけなく削除できる)
# yum remove openssl-libs
(他のパッケージが依存しているので「保護される」旨のメッセージが出て削除できない)
openssl-libsはいろいろなパッケージから参照されているみたいです。
例えばyumコマンドもそうです。yumも依存しているという事は・・・
rpmコマンドで削除してみよーん
今考えると恐ろしい行為です。
普通にrpm -e
しても依存性チェックではねられるので、--nodeps
という禁断のオプションを付けてopenssl-libsを強制的に削除してみました。
あっさり削除できました・・・
# rpm -e --nodeps openssl-libs-1.0.2k-16.0.1.el7.AXS7.x86_64
何が起こるか
yumコマンド、curlコマンド、wgetコマンド、sshコマンドなどssl通信を行うコマンドが軒並み利用不能になりました。
rpmパッケージがダウンロードできません。
scpも使えないのでこのシステムにファイル転送する手段が思い当たりません(素のftpコマンドだったらいけるかも)
リカバリ
とりあえず、vagrant環境の作り直しです。
個人的なテスト環境なので誰にも迷惑をかけなかったことは不幸中の幸いでした。
vagrantなら下の2行でもとどおり初期状態に復活します。
> vagrant destroy
> vagrant up
成功例
うまく行ったやりかたです。
openssl-libsはアップデートで
openssl-libsを削除すると大変なことになることを身に染みてわかったので、アップデートで行きます。
opensslの削除
これは失敗例と同じでyum remove openssl
でOKです。
フォースのちから
openssl-libsのrpmファイルはターゲットのバージョンを適宜ダウンロードします。
そしてopenssl-libsを強制的にアップデートします。
「ルーク、フォースの力を信じるんだ!」
# curl -O http://ftp.riken.jp/Linux/cern/centos/7/updates/x86_64/Packages/openssl-libs-1.0.2k-16.el7_6.1.x86_64.rpm
# rpm -Uvh --force openssl-libs-1.0.2k-16.el7_6.1.x86_64.rpm
opensslとopenssl-develをインストール
# yum -y install openssl openssl-devel
インストールしたパッケージの確認
無事にopenssl-develをインストールできました。
# rpm -qa | grep openssl
openssl-devel-1.0.2k-16.el7_6.1.x86_64
openssl-libs-1.0.2k-16.el7_6.1.x86_64
openssl-1.0.2k-16.el7_6.1.x86_64
おわりに
rpmコマンドの--forceオプションについて学ぶことができました。
また下手にパッケージを消すと大変なことが起こることを身をもって体験できたのはよかったです。
冒険は個人的なテスト環境でやるようにしましょう。