はじめに
UBI7 をベースイメージとしてコンテナを作っている際、ubi リポジトリにないパッケージをインストールしたくなりました。
UBI7 を使う前はcentos:7 を使っており、epelなどはyum install epel-release でいけましたが、UBIだとそうもいかず。
CentOS7 と同じようにyum を使いたかったので、いっそのことbaseやextra など、CentOSなら標準で入っているリポジトリを設定してしまおうと思ったので、残しておきます。
UBI イメージとは
以下の記事がとても分かりやすいです。
RedHat系のディストリビューションで軽量なコンテナイメージを使うなら、UBIを使っておけば間違えないと思います。
CentOS系のイメージはどうしても容量が大きい。。
UBI7イメージの取得方法
RedHat のページで検索すると出てきます。
UBI7であれば
podman pull registry.access.redhat.com/ubi7/ubi
yumを使う上での注意点
そのままyum install <package> とすると、RHELのリポジトリからインストールされる可能性があります。
その場合、ライセンス費用が発生するため、yum plugin のsubscription-manager は切っておくのが無難です。
subscription-manager を切る方法1
上記の参考リンクのどちらにも載っていますが、yumに--disableplugin=subscription-manager オプションを付ければ切れます。
ただ、こちらだと、オプションつけ忘れた際に事故るので、以下の方法の方がいいような?・・・
subscription-manager を切る方法2
/etc/yum/pluginconf.d/subscription-manager.conf のenable を0にする。
echo -e "[main]\nenabled=0" > /etc/yum/pluginconf.d/subscription-manager.conf
UBI7デフォルト状態のyum repolist
もちろん、CentOS系のリポジトリ はありません
yum repolist
repo id repo name
ubi-7/x86_64 Red Hat Universal Base Image 7 Server (RPMs)
ubi-7-rhah/x86_64 Red Hat Universal Base Image Atomic Host (RPMs)
ubi-7-server-extras-rpms/x86_64 Red Hat Universal Base Image 7 Server - Extras (RPMs)
ubi-7-server-optional-rpms/x86_64 Red Hat Universal Base Image 7 Server - Optional (RPMs)
ubi-server-rhscl-7-rpms/x86_64 Red Hat Software Collections RPMs for Red Hat Universal Base Image 7 Server
CentOS-Base.repo を追加する
/etc/yum.repos.d にCentOS-Base.repo を追加する。
# CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os
# baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
# released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=updates
# baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
# additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=extras
# baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
# additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=centosplus
# baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
ポイント
それぞれのmirrorlist に指定しているURLのクエリストリング部分を静的に設定しています。
CentOS7 の場合、デフォルトだと$releaseverや$basearch で指定されています。
UBI7 のデフォルトイメージで上記変数指定だと、環境変数や/etc/yum.conf で設定しても、うまくうごいてくれませんでした。。
(yum がどうやって上記変数を扱っているか調べられていないので、ご存知の方いたら教えてください・・・)
$releasever の部分はCentOS7であれば、7 を指定し、
$basearch の部分は、想定利用環境がx86-64 アーキテクチャの環境なので、x86-64 を指定。
というより、ここ見る限り、x86-64しか存在していないし、固定でも特に問題ない?・・・
$infra は無くても大丈夫なので、なし。
追加後
CentOS-Base.repo 追加後、yum repolistを叩くと、追加されていることがわかります。
yum repolist
repo id repo name
base CentOS-7Server - Base
extras CentOS-7Server - Extras
ubi-7/x86_64 Red Hat Universal Base Image 7 Server (RPMs)
ubi-7-rhah/x86_64 Red Hat Universal Base Image Atomic Host (RPMs)
ubi-7-server-extras-rpms/x86_64 Red Hat Universal Base Image 7 Server - Extras (RPMs)
ubi-7-server-optional-rpms/x86_64 Red Hat Universal Base Image 7 Server - Optional (RPMs)
ubi-server-rhscl-7-rpms/x86_64 Red Hat Software Collections RPMs for Red Hat Universal Base Image 7 Server
updates CentOS-7Server - Updates
これで、deltarpm、epel-release、initscripts なんかもyum install で入ります。