0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CentOS8でrpm実行時に「依存性の欠如」のエラーが起きた場合の対処

Last updated at Posted at 2020-12-10

| ../ |

VPSサーバー(CentOS8.2)にTomcat9とMySQL8.0をインストールしている。Tomcat9で受け付けたリクエストはJava11で処理し、データはMySQL8.0で永続化したい。MySQLへのアクセスには、JDBC(mysql-connector-java)を使用する。mysql-connector-javaをインストールする際に、若干ハマったのでメモしておく。その際に、yum updateを行ったら、CentOS8.3に上がっていた。

現象:java-headless依存性の欠如のエラー

mysql-connector-java-8.0.22-1.el8.noarch.rpm のインストール時に、以下のような「依存性の欠如」のエラーが出た。


$ rpm -ivh mysql-connector-java-8.0.22-1.el8.noarch.rpm
警告: mysql-connector-java-8.0.22-1.el8.noarch.rpm: 
ヘッダー V3 DSA/SHA1 Signature、鍵 ID xxx: NOKEY
エラー: 依存性の欠如:
java-headless >= 1:1.8.0 は mysql-connector-java-1:8.0.22-1.el8.noarch 
に必要とされています

ちなみに、上段の警告は、--nosignatureオプションを添えれば、問題ない。その次の「エラー: 依存性の欠如」が問題である。java-headlessをインストールしていなかったこと、またyumリポジトリからkarnel* grub2*を除外していたため、おそらく適切なupdateができていなかったことが原因と思われる。

単純にjava-headlessを追加でインストールしても、エラーは残ったままになる。

$ yum install java-headless
$ rpm -ivh --nosignature mysql-connector-java-8.0.22-1.el8.noarch.rpm
エラー: 依存性の欠如:
java-headless >= 1:1.8.0 は mysql-connector-java-1:8.0.22-1.el8.noarch に必要とされています

解決手順:karnelのupdate後に再実行

yumリポジトリからkarnel* grub2*を除外していたため、それ以降のいくつかのインストールやアップデートで依存性の問題が生じていたようだ。karnel* grub2*を除外しないようにしてから、yum updateを実行し、その後でrpmを実行すれば、依存性の欠如のエラーは出なくなった。

$ vi /etc/yum.conf
# exclude=kernel* grub2*      # 一旦、コメントアウトして除外しないようにする

$ yum update				  # kernelを含めていくつかのパッケージが更新された
$ cat /etc/redhat-release	  # またまた、CentOS8.3に上がった!
CentOS Linux release 8.3.2011

$ rpm -ivh --nosignature mysql-connector-java-8.0.22-1.el8.noarch.rpm
$ find  -name mysql-connector-java
./usr/share/java/mysql-connector-java.jar
./usr/share/doc/mysql-connector-java

$ cp /usr/share/java/mysql-connector-java.jar ${CATALINA_HOME}/webapps/xxx/WEB-INF/lib/

インストールは成功し、mysql-connector-java.jarは、/usr/share/java/ に配置されていた。私の環境では、このjarファイルを適宜、所定の場所にコピーして利用する。

grub.cfgの回復

yum updateを実行したら、/boot/grub2/grub.cfg が更新されていないかチェックすること。私の場合、またしてもgrub.cfgが更新されていた。この状態でOSを再起動すると立ち上がらなくなる可能性がある。バックアップしておいたgrub.cfg.original(または grub.cfg.prmsave)で置換してrebootすること。この辺りの手順は、yum update後に起動できなくなる現象の回避策を参照のこと。
※実際には、私は、yum update直後に再起動してみたのだが、案の定、立ち上がらなくなった。リカバリモードでOSを再起動して、grub.cfgを修復した。そうならないように、grub.cfgの更新の有無をチェックして、必要ならバックアップで置換しておこう。

$ cd /boot/grub2/
$ ls -l
-rw-r--r-- 1 root root  6355 2020-12-09 18:23 grub.cfg
-rw-r--r-- 1 root root  4293 2020-11-20 15:14 grub.cfg.original
-rw------- 1 root root  1024 2020-12-10 10:02 grubegrub.cfgnv
-rw------- 1 root root  1024 2020-11-21 10:34 grubenv.original
$ mv grub.cfg grub.cfg.1209
$ cp -p grub.cfg.original grub.cfg
$ reboot

再起動できたら、改めてgrub2-mkconfigを実行して、grub.cfgを再作成し、再度、再起動する。yumリポジトリも忘れないうちに元に戻しておくこと。

$ grub2-mkconfig -o /boot/grub2/grub.cfg

$ vi /etc/yum.conf
exclude=kernel* grub2*
$ reboot

Javaバージョンの切り替え

新たな問題として、yum update を実行したら、なぜか java -version が 1.8.0 に戻っていた。特に明示的な操作は記憶にないので、yum update 中に行われたと思われる。以下のエラーで気づいた。

java.lang.UnsupportedClassVersionError: 
xxx has been compiled by a more recent version of the Java Runtime (class file version 55.0), 
this version of the Java Runtime only recognizes class file versions up to 52.0 (クラス[xxx]をロードできません)

これはJava11でコンパイルしたものを、Java1.8のJRE環境で実行しようとしている。Java11に回復しておく必要がある。手作業でリンクを変更するのかと思ったが、alternatives --config java で切り替えられるそうだ。

$ java -version
openjdk version "1.8.0_272"
OpenJDK Runtime Environment (build 1.8.0_272-b10)
OpenJDK 64-Bit Server VM (build 25.272-b10, mixed mode)

$ alternatives --config java
2 プログラムがあり 'java' を提供します。
  選択       コマンド
-----------------------------------------------
   1           java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.9.11-2.el8_3.x86_64/bin/java)
*+ 2           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-3.el8_3.x86_64/jre/bin/java)
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します: 1

$ java -version
openjdk version "11.0.9" 2020-10-20 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.9+11-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.9+11-LTS, mixed mode, sharing)

$ ls -l /usr/lib/jvm/
lrwxrwxrwx 1 root root   29 2020-12-10 15:09 java -> /etc/alternatives/java_sdk_11
lrwxrwxrwx 1 root root   37 2020-12-10 15:12 java-openjdk -> /etc/alternatives/java_sdk_11_openjdk
lrwxrwxrwx 1 root root   21 2020-12-10 15:16 jre -> /etc/alternatives/jre

以上

| ../ |

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?