ローカルyumサーバを立ててそこを参照して RDO で OpenStack をセットアップ
目標
- インターネットに接続できないサーバに RDO (packstack) を使用して OpenStack を構築できるようにする。
- 上記サーバが接続可能な yum サーバはローカルに構築する
- yum サーバ構築時はインターネットに接続可能とする。
- 各サーバの初期状態は CentOS の 6.5 を minimal インストール (+ zsh, screen, git を yum で入れた状態)
やること
構成
以下みたいな特殊なネットワーク環境
+--------------------------+
| Router |
+--------------------------+
|
|
+--------------------------+
| yum server |
| 172.16.1.1 |
+--------------------------+
|
|
+--------------------------+
| OpenStack |
| 172.16.1.2 |
+--------------------------+
手順
yum サーバー設定
yum.repos.d に リポジトリを追加
公開するパッケージをダウンロードしてくるリポジトリを登録する。 OpenStack のバージョンに応じて以下のサイトから rdo-relase をインストールする。
http://repos.fedorapeople.org/repos/openstack
ブラウザで開いてインストールしたいリリースバージョンをリポジトリとして登録する。
例) havana-7 の場合
yum install http://repos.fedorapeople.org/repos/openstack/openstack-havana/rdo-release-havana-7.noarch.rpm
以下、havana-7 をインストールした場合として進める。
(参考)
rpm -ql rdo-release-havana-7 を実行してインストールされたファイルの確認
/etc/yum.repos.d の下に以下の repo ファイルが追加される:
それぞれの GPG-KEY はそれぞれ以下:
- /etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-Havana
- /etc/pki/rpm-gpg/RPM-GPG-KEY-foreman
- /etc/pki/rpm-gpg/RPM-GPG-KEY-puppetlabs
これらのリポジトリから rpm をダウンロードしてローカルに公開すれば良い。
http サーバを準備
http で公開するため、httpd
を入れる。
(http サーバなら何でも良いが簡単なので)
yum install httpd
chkconfig httpd on
service httpd start
apache の設定は省略。 その他、selinux やら iptables やら、hosts.allow やらセキュリティポリシに合わせて設定。 ここでは、ローカルの実験用環境なのでノーガード設定。
chkconfig iptables off
service iptables stop
setenforce 0
sed -i -e 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
yum リポジトリをローカルに sync して公開
yum リポジトリのメタデータを作成するための createrepo
と リポジトリからダウンロードするための yum-utils
を入れる。
yum install createrepo yum-utils
rdo 関係リポジトリ
追加したリポジトリの rpm をローカルに sync する。 コマンドは以下 (sync には時間がかかるので注意) そのまま公開できるように /var/www/html 以下で作業する。
cd /var/www/html
reposync -r openstack-havana -n -t /var/cache/yum
reposync -r puppetlabs-products -n -t /var/cache/yum
reposync -r puppetlabs-deps -n -t /var/cache/yum
createrepo ./openstack-havana
createrepo ./puppetlabs-products
createrepo ./puppetlabs-deps
参考までにファイルサイズ
du -hs ./openstack-havana/
438M ./openstack-havana/
du -hs ./puppetlabs-products/
101M ./puppetlabs-products/
du -hs ./puppetlabs-deps/
61M ./puppetlabs-deps/
(補足情報)
reposync
はリポジトリで公開されている rpm をダウンロードする。- 保存先は
<カレントディレクトリ>/<リポジトリ名>/
の下 -n
をつけると最新のものだけをダウンロードする。 そのリリースバージョンの古いものも欲しかったら指定しない。- 他のオプションは
man reposync
参照
- 保存先は
createrepo
は指定ディレクトリ以下を yum リポジトリとするための metadata を作成する
CentOS の基本リポジトリ
base
, extras
, updates
のパッケージが必要。
reposync
で持ってくる方法と配布されている DVD メディアを使用する方法がある。
reposync する場合
reposync して最新のものを持ってくる。 ただ、ファイルサイズが大きいので回線速度にもよるが結構な時間がかかる。
cd /var/www/html
reposync -r base -n -t /var/cache/yum
reposync -r extras -n -t /var/cache/yum
reposync -r updates -n -t /var/cache/yum
createrepo ./base
createrepo ./extras
createrepo ./updates
参考までにファイルサイズ
du -hs ./base/
5.2G ./base/
du -hs ./extras/
9.2M ./extras/
du -hs ./updates/
1.1G ./updates/
media を使用する場合
配布されている DVD のイメージがあればそれを使用した方が早い。
以下手順。
まず、どうにかしてディスクイメージをホストに持っていく VMware 環境の場合はゲストの仮想ドライブを使用するなり、 ISO の場合はそのままホストにコピーして使用するなり。
マウントして中身コピー
mount /dev/cdrom /mnt
cp -rf /mnt/Packages/ /var/www/html/media
ISO を直接持っていった場合は mount -o loop
とか、
DVD2 に入っているものも使うので、DVD1, DVD2 それぞれで上記を実施。
コピーが終わったら createrepo
で metadata を生成する。
パッケージ数が多いので時間がかかる、、、
cd /var/www/html/
createrepo ./media
EPEL
epel の一部パッケージも使用するのでその準備。 epel のリポジトリ登録 (参考: https://fedoraproject.org/wiki/EPEL)
yum install http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/i386/epel-release-6-8.noarch.rpm
reposync しても良いが、サイズが大きくダウンロードするにも時間がかかるので (大体 10 GB ぐらい) 必要なものだけをダウンロードしてリポジトリ化する。
rpm のダウンロードには yum の downloadonly plugin を使用する。 これを入れて yum install に --downloadonly オプションを指定するとインストールはせずに /var/cache/yum にダウンロードだけしてくれる。
openstack のコンポーネントのパッケージ指定だけして、パッケージのリストアップは yum にまかせる。
yum install --downloadonly openstack-nova openstack-nova-compute openstack-glance openstack-neutron openstack-swift openstack-keystone openstack-cinder openstack-ceilometer-common openstack-heat python-django-compressor openstack-swift-plugin-swift3 mongodb-server openstack-ceilometer-api
yum install --downloadonly nagios-plugins-nrpe nagios-plugins-ping nagios nrpe
上記で大体の構成で必要なものは揃っているはず、、、足りないものがあったら適宜追加。
cd /var/www/html/
mkdir epel
cp /var/cache/yum/x86_64/6/epel/packages/*.rpm ./epel/
OpenStack 側
yum リポジトリ設定
yum server と同様に rdo-realse をインストール。 ただし、今度は先ほど立てた yum サーバから
yum install http://172.16.1.1/openstack-havana/rdo-release-havana-7.noarch.rpm
openstack-havana と puppetlabs の URL を書き換えてローカルに向ける。
sed -i -e 's/repos.fedorapeople.org\/repos\/openstack\/openstack-havana\/epel-6/172.16.1.1\/openstack-havana/' /etc/yum.repos.d/rdo-release.repo
sed -i -e 's/yum.puppetlabs.com\/el\/6\/products\/\$basearch/172.16.1.1\/puppetlabs-products/' /etc/yum.repos.d/puppetlabs.repo
sed -i -e 's/yum.puppetlabs.com\/el\/6\/dependencies\/\$basearch/172.16.1.1\/puppetlabs-deps/' /etc/yum.repos.d/puppetlabs.repo
foreman.repo は使用しないので無効化しておく
sed -i -e 's/enabled=1/enabled=0/' /etc/yum.repos.d/foreman.repo
yum サーバ上のリポジトリを記載する。 ローカルだし面倒なので GPG-KEY はなし。 epel のリポジトリ名は [epel] にすると packstack に enabled=0 されてしまうので適当な名前を付けること
vi /etc/yum.repos.d/local.repo
media か base, extras, updates かはどの手順で作成したかによって enabled を切り替える。
[media]
name=CentOS Media
baseurl=http://172.16.1.1/media
enabled=0
gpgcheck=0
[base]
name=CentOS Media
baseurl=http://172.16.1.1/base
enabled=1
gpgcheck=0
[extras]
name=CentOS Media
baseurl=http://172.16.1.1/extras
enabled=1
gpgcheck=0
[updates]
name=CentOS Media
baseurl=http://172.16.1.1/updates
enabled=1
gpgcheck=0
[epel-part]
name=Part of EPEL
baseurl=http://172.16.1.1/epel
enabled=1
gpgcheck=0
NameServer 設定
nameserver が設定されていないと packstack が実行できないので 設定する、今回は yum サーバと同じ 172.16.1.1 を nameserver とする。
NameServer 側
dnsmasq を入れて、172.16.1.2 の名前を応答するようにしておく。 (172.16.1.2 のホスト名は rdo-havana)
yum install dnsmasq
echo "listen-address=127.0.0.1,172.16.1.1" >> /etc/dnsmasq.conf
echo "172.16.1.2 rdo-havana" >> /etc/hosts
OpenStack サーバ側
name server のアドレスとして 172.16.1.1 を登録
echo "nameserver 172.16.1.1" >> /etc/resolv.conf
packstack によるセットアップ中は自身の IP アドレスの名前解決を何度も行うので /etc/hosts に書いておく。
echo "172.16.1.2 rdo-havana rdo-havana.local" >> /etc/hosts
もちろん DNS サーバ側に問い合わて解決させても良いけど、 自己解決させた方が無駄に通信を行わない。
packstack 実行
OpenStack をインストールするホストで packstack を実行して、OpenStack をセットアップする。
packstack では answer ファイルを用意することで構成を変更することができるが、 ここでは allinone ですべてつっこむ。 (packstack の使い方についてはここでは割愛。公式のドキュメントがわかりやすいので見てください)
そのまま実行すると、RDO が epel リポジトリを yum.repos.d に追加して 接続しようとするためこけるので、--use-epel オプションに n を指定する。
packstack --allinone --use-epel=n
性能によるが、大体 30 分ぐらいでセットアップが終わる。
課題
CirrOS がダウンロードできない。
RDO では本来は最初から使えるイメージとして CirrOS が用意されるはずだが 途中でイメージのダウンロードできないため、CirrOS が無い状態になってしまう。
やらないといけないこと - download.cirros-cloud.net. を名前解決させて 172.16.1.1 に向ける - そこから CirrOS をダウンロードさせる