Linuxローカル環境用に最小限のyumリポジトリを作成する方法
環境的にyum
が使えない(例えばインターネット接続がない、OSメディアをマウントできない)Linuxマシンにyum
でパッケージを追加インストールするための、最小のローカルリポジトリとインストーラを別のPC上で作成する方法。
概略
yum
が使えないRed Hat Enterprise LinuxもしくはCentOSマシンを target と呼ぶ。
- target と同じバージョンの Linux 仮想マシンを最小インストールで新規作成する。これを source と呼ぶ。
source はインターネットもしくはOSメディアなどを利用して
yum
が利用できる環境とする。 仮想マシンを作成する方法は割愛。 - source 上でローカル環境向けのリポジトリを作成する。これを repo と呼ぶ。
- target に repo をコピーして
yum
で repo 内のパッケージを target にインストールする。
repo の作成
#!/bin/bash
#
# makelocalrepo.sh - Make local minimal yum repository
#
set -eu
[[ $# > 1 ]] || {
echo "$(basename $0) dest package..."
echo " dest: Name of local repository to create. dest.tar.gz is created."
echo " package: Name of yum package to include into dest."
exit 1
}
dest=${1%.tar.gz}
[[ ! -e "$dest" ]] || {
echo "$dest should not exist."
exit 1
}
shift
packages=$*
repo="$dest/repo"
rpm -q --quiet yum-utils || yum install -y yum-utils
mkdir -p $repo
yumdownloader --resolve --destdir=$repo $packages
rpm -q --quiet createrepo || yum install -y createrepo
createrepo $repo
cat > "$dest/install.sh" <<EOS
#!/bin/bash
set -eu
cat > /etc/yum.repos.d/localrepo.repo <<EOF
[localrepo]
name=localrepo
baseurl=file://\$(readlink -f \$(dirname "\$0"))/repo
enabled=0
gpgcheck=0
EOF
yum --disablerepo=* --enablerepo=localrepo -y install $packages
EOS
chmod +x "$dest/install.sh"
tar czf "$dest.tar.gz" "$dest"
というシェルスクリプトを準備して後はインストールしたいパッケージを指定して実行する。
例えば nodejs
と ruby
をインストールしたければ
sudo makelocalrepo.sh localrepo nodejs ruby
とするとカレントディレクトリに localrepo というディレクトリと localrepo.tar.gz というファイルが作成される。 localrepo.tar.gz にインストーラとリポジトリが含まれる。
ちなみに
yum
の downloadonly プラグインは非推奨となっておりyumdownloader
が今後(CentOS 6,RHEL 6以降)の推奨になっている。yumdownloader
の resolve オプションで依存関係も全て解決される。ありがたい。
target へ repo をインストール
出来上がったファイル(上の例では localrepo.tar.gz )を target へコピーして以下を target 上で実行する。
sudo tar xzf localrepo.tar.gz
sudo cd localrepo && ./install.sh