📦

CentOS7でyumから古いパッケージをインストールする

2021/10/18に公開

おはこんばんにちわ

本日ご紹介するのはタイトルの通り普通の人ならまず遭遇しないであろう誰得な内容なのですが
自分が必要になったので備忘録として残します

なぜこんなかったるい事しないといけなくなったかと言うと

まぁよくあるソースだけあって開発してた人も居なけりゃ開発環境なんて手順書すら無い見たいな案件を押し付けられたからです

仕方なく今商用で動いているので商用機の情報を調べたところ
動作環境がCentOS7.5でJavaのバージョンが1.8.0_191で動いてる事が分かりました

そこでCentOS7のDockerコンテナ上に同一のJavaを入れてVSCodeのRemote-Containerを使って開発することにしようと思ったのですが

その際にJavaのバージョンを合わせるのに手間取ったので備忘録として記事にしました

実働してるモジュールを見た所
Java1.5の時代に作ったソースが1.8でコンパイルされて動いていました
互換性って素敵ですね

まぁ環境作ってソース開いたら画面真っ黄色になるくらい警告出されてキレかけたけど。。。。

ではやっていきます

とりあえずDockerでCent7を動かしてみます

$ docker run -it --rm centos:7 bash
[root@03114e332997 /]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)

7.9ですね入れたいのはOpenJDK1.8の191になるので
まずは存在するか確認します
yum search時に--showduplicatesを付けるとバージョン違いのパッケージも表示できます

[root@03114e332997 /]# yum search --showduplicates java-1.8.0-openjdk-devel
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
=========================================================================== N/S matched: java-1.8.0-openjdk-devel ============================================================================
1:java-1.8.0-openjdk-devel-1.8.0.262.b10-1.el7.i686 : OpenJDK Development Environment 8
1:java-1.8.0-openjdk-devel-1.8.0.262.b10-1.el7.x86_64 : OpenJDK Development Environment 8
1:java-1.8.0-openjdk-devel-1.8.0.272.b10-1.el7_9.i686 : OpenJDK Development Environment 8
1:java-1.8.0-openjdk-devel-1.8.0.272.b10-1.el7_9.x86_64 : OpenJDK Development Environment 8
1:java-1.8.0-openjdk-devel-1.8.0.275.b01-0.el7_9.i686 : OpenJDK Development Environment 8
1:java-1.8.0-openjdk-devel-1.8.0.275.b01-0.el7_9.x86_64 : OpenJDK Development Environment 8
1:java-1.8.0-openjdk-devel-1.8.0.282.b08-1.el7_9.i686 : OpenJDK 8 Development Environment
1:java-1.8.0-openjdk-devel-1.8.0.282.b08-1.el7_9.x86_64 : OpenJDK 8 Development Environment
1:java-1.8.0-openjdk-devel-1.8.0.292.b10-1.el7_9.i686 : OpenJDK 8 Development Environment
1:java-1.8.0-openjdk-devel-1.8.0.292.b10-1.el7_9.x86_64 : OpenJDK 8 Development Environment
1:java-1.8.0-openjdk-devel-1.8.0.302.b08-0.el7_9.i686 : OpenJDK 8 Development Environment
1:java-1.8.0-openjdk-devel-1.8.0.302.b08-0.el7_9.x86_64 : OpenJDK 8 Development Environment

  Name and summary matches only, use "search all" for everything.

262〜302までしかないようです

Centではデフォルトでは無効になっている過去のリポジトリが使えます
商用機のバージョンがCent7.5なので対象のリポジトリを有効にして検索し直します
yum update -y centos-releaseでリポジトリの情報を最新化してから
--enablerepo="C7.5*"で7.5のリポジトリを検索対象に指定して検索します

ちなみに他の使えるリポジトリの一覧はyum repolist allで確認できます

[root@9d02e1345676 /]# yum update -y centos-release
[root@9d02e1345676 /]# yum --enablerepo="C7.5*" search --showduplicates java-1.8.0-openjdk-devel
〜略〜

はちゃめちゃに増えたので省略しましたw
欲しいのは191なのでフルパッケージ名を取得するためにgrepします

# yum --enablerepo="C7.5*" search --showduplicates java-1.8.0-openjdk-devel | grep 191
1:java-1.8.0-openjdk-devel-1.8.0.191.b12-0.el7_5.i686 : OpenJDK Development
1:java-1.8.0-openjdk-devel-1.8.0.191.b12-0.el7_5.x86_64 : OpenJDK Development
1:java-1.8.0-openjdk-devel-debug-1.8.0.191.b12-0.el7_5.i686 : OpenJDK
1:java-1.8.0-openjdk-devel-debug-1.8.0.191.b12-0.el7_5.x86_64 : OpenJDK

java-1.8.0-openjdk-devel-1.8.0.191.b12-0.el7_5.x86_64

これこれ、コイツが欲しかったんです
早速インストールします

[root@9d02e1345676 /]# yum --enablerepo="C7.5*" install -y java-1.8.0-openjdk-devel-1.8.0.191.b12-0.el7_5.x86_64

行けたっぽいですね
バージョンを確認してみましょう

[root@9d02e1345676 /]# java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

入りました!
しかし、このままではyumのUpdate時に勝手にバージョンが上がってしまうので止めましょう

[root@9d02e1345676 /]# echo exclude=java-1.8.0-openjdk* >> /etc/yum.conf 
[root@9d02e1345676 /]# tail -n1 /etc/yum.conf
exclude=java-1.8.0-openjdk*

これでjava-1.8.0-openjdk系のパッケージは更新されなくなったので
updateして確認します

[root@9d02e1345676 /]# yum update -y
[root@9d02e1345676 /]# java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

はい、OK

というわけでCentで何故か古いバージョンが必要になった時の為の対応方法でした

とっぴんぱらりのぷう

P.S.

最近TIOBEのランキングでPythonが1位になったみたいですね
CとJavaが首位転落みたいなタイトルの記事が多いので

これからはCやJavaの代わりにPythonだ!

みたいな感じの誤解をミーハーなのに技術についていけなくて顧客側に回ったり管理職になったりした人たちに与えそうなのでやめてほしいです

Cの代わりにっていうとRustはLinuxカーネル開発にも受け入れられつつあるから将来性を感じますね

ソース見たことさえ無いけど。。。

とはいえLinusさんはRustはドライバとかファイルシステム扱うに良さそうみたいな感じで特定箇所で使うならという前提で話をしてたのでまだまだCの時代は続くとは思いますが。。。

Discussion