リポジトリをOracle LinuxからCentOSに変更するスクリプトを作成してみた

元ネタはここで公開されている centos2ol.sh です。これはCentOS(及びRHEL, Scientific Linux)からOracle Linuxに乗り換えるために、スクリプトでリポジトリ設定を変更してしまうというもので、その強引な手法が面白かったので、ネタとしてその逆を行うスクリプトを作成してみました。

作成したスクリプト ol2centos は、元ネタとは逆に Oracle Linux から CentOSリポジトリへの書き換えを行います。centos2ol.sh は Apache License でしたので、それを改造する形で実現しています。

使い方

rootユーザで下記のコマンドを実行して下さい。

curl -O https://raw.github.com/madogiwa/ol2centos/master/ol2centos.sh
sh ol2centos.sh

なお一応、仮想マシン上で、

CentOS 5.8(i386) ==centos2ol==> Oracle Linux ==ol2centos==> CentOS

の順番に適用して動作を確認しましたが、ネタとして作成したものですので、実用に用いることはお勧めできません。

スクリプトの変更点など

元のスクリプトでは、下記のことを行っています。

  1. インストールされているLinuxの種類とバージョンの確認
  2. リポジトリディレクトリ(yum.repos.d)の確認
  3. リポジトリディレクトリに Oracle Linux 用の設定を追加
  4. リポジトリディレクトリにある既存設定ファイルを無効化
  5. releaseパッケージ(/etc/issueなどが含まれるやつ)の入れ替え

このスクリプトを改造して実現したのですが、少しだけ面倒だったのが 3.のリポジトリ設定を追加するところです。

Oracle Linux では http://public-yum.oracle.com/ からリポジトリ用の設定ファイルを直接ダウンロード可能なのですが、CentOS では直接ダウンロード可能なものが見つからず、そのままのルーチンを流用することができませんでした。そのため、設定が含まれている rpm ファイル(centos-release)をダウンロードして、そこから設定ファイル(CentOS-Base.repoなど)を抜き出す、ということを行っています。ちなみに下記が該当部分です。

echo "Downloading and Extract CentOS yum repository file..."
if ! curl "${yum_url}/${release_pkg}" | rpm2cpio | cpio -id "*.repo"; then

それ以外については、概ねそれぞれ逆方向になるように変更するだけで実現できています。