hasciiの日記

多分プログラミング関係

ローカルyumサーバを立ててそこを参照して RDO で OpenStack をセットアップ

目標

  • インターネットに接続できないサーバに RDO (packstack) を使用して OpenStack を構築できるようにする。
  • 上記サーバが接続可能な yum サーバはローカルに構築する
  • yum サーバ構築時はインターネットに接続可能とする。
  • 各サーバの初期状態は CentOS の 6.5 を minimal インストール (+ zsh, screen, git を yum で入れた状態)

やること

  • ローカルの yum サーバを作成
  • インターネット上にある yum リポジトリとの sync
  • RDO で OpenStack 構築

構成

以下みたいな特殊なネットワーク環境

 +--------------------------+
 |         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 ファイルが追加される:

  • /etc/yum.repos.d/foreman.repo
  • /etc/yum.repos.d/puppetlabs.repo
  • /etc/yum.repos.d/rdo-release.repo

それぞれの GPG-KEY はそれぞれ以下:

これらのリポジトリから 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 をダウンロードさせる