開発の案件で、本番環境・ステージング環境・みんなで使う共通の開発環境・テスト環境・各自が開発に使用する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)
createrepo ./
公開用に Apache の設定ファイルを修正します。
sudoedit /etc/httpd/conf/httpd.conf
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 なりします。