yum でインストールしているパッケージでリポジトリを作成

開発の案件で、本番環境・ステージング環境・みんなで使う共通の開発環境・テスト環境・各自が開発に使用するVM、のように複数の環境を構築することはよくありますが、構築した時期(yum update のタイミングとか)によって微妙にパッケージのバージョンが異なっていたりしたので、社内に yum リポジトリを作ってそこからインストール/アップデート出来るようにしてみました。

インストールした rpm のバックアップにもなるので、ゼロから環境構築するときに同じバージョンをインストール出来るというメリットもあります。

この方法以外に yum リポジトリを丸ごとミラーする方法もありますが、要らないパッケージまでミラーされて容量が無駄なのと、サードパーティリポジトリを使っていると面倒なのでやめました。

参考にしたサイト

yum リポジトリの作成

まずは yum update で最新の状態にしておきます。

sudo yum update

古いカーネルを削除します(別にそのままでも構いません)。

sudo package-cleanup --oldkernels --count=1

yum リポジトリを作成するために createrepo をインストールします。

sudo yum install createrepo

RPM をダウンロードするディレクトリを作成します。

sudo mkdir -p /var/www/html/yum
sudo chown $(whoami). /var/www/html/yum
cd /var/www/html/yum

インストールされているパッケージの RPM を全てダウンロードします。

rpm -qa|grep -v ^gpg-pubkey|sudo xargs -L3 -P5 yumdownloader --cacheonly --

ダウンロード出来たか確認します。全てダウンロード出来ていれば何も表示されません。

comm -13 <(ls -1|sed 's/\.rpm$//'|sort) <(rpm -qa|grep -v ^gpg-pubkey|sort)

yum リポジトリメタデータを作成します。

createrepo ./

公開用に Apache の設定ファイルを修正します。

sudoedit /etc/httpd/conf/httpd.conf

yum リポジトリのディレクトリをエイリアスにします。

Alias /yum /var/www/html/yum
<Directory /var/www/html/yum>
    Options +Indexes
    Order allow,deny
    Allow from all
</Directory>

Apache の設定を反映します。

sudo service httpd reload

yum リポジトリを使う側の設定

yum リポジトリを使う側は /etc/yum.repos.d/ にリポジトリの設定ファイルを作成ます。

リポジトリの名前を local にする場合・・・

sudoedit /etc/yum.repos.d/local.repo

次のような内容で作成します。yum.example.jp は適当読み替えてください。

[local]
name=local
baseurl=http://yum.example.jp/yum/
gpgcheck=0
priority=1

yum update すると、local リポジトリから最新のパッケージがダウンロードされます。

sudo yum check-update
sudo yum update

なお priority=1 を指定することで local リポジトリ最優先 にしています。priority については下記を参照してください。

パッケージを追加するときの作業

新しいパッケージをインストールしたりアップデートしたりする場合も yum リポジトリにパッケージを追加します。

まずはリポジトリのサーバに追加したいパッケージをインストール(アップデート)します。

yum install XXX
yum update

追加されたパッケージをリポジトリのディレクトリにダウンロードします。全てのパッケージを再ダウンロードするのは流石に無駄なので、差分だけをダウンロードします。

cd /var/www/html/yum
comm -13 <(ls -1|sed 's/\.rpm$//'|sort) <(rpm -qa|grep -v ^gpg-pubkey|sort)|sudo xargs yumdownloader --cacheonly --

リポジトリメタデータを再作成します。

createrepo ./

後は、リポジトリを使う側で yum install なり yum update なりします。