OpenStackのCentOSミラーを作成する方法


UbuntuとFedoraには公式のシステムミラーがありますが、CentOSに限ってはありません.ネット上ではあまり頼りにならないものが見つかります.また、私たちのプロジェクトには自分でカスタマイズする必要があるものがあるので、自分でミラーを作るのが適切です.OpenStackのCentOSシステムミラーリングを作成するには、virt-installまたはkvmを使用して仮想マシンを作成した後、vncを介してシステムをインストールし、システムパラメータを構成し、最後にOpenStackにアップロードする方法が公式のオンラインドキュメントおよびネット上の多くの資料に示されています.参考:http://docs.openstack.org/grizzly/openstack-image/content/centos-image.html[1] http://www.vpsee.com/2012/02/create-centos-kvm-image-for-openstack-nova/[2]システムパラメータ構成の参考:http://docs.openstack.org/grizzly/openstack-image/content/ch_openstack_images.html[3] http://www.linuxidc.com/Linux/2012-09/71175p2.htm[4]しかし、このような方法はミラーリングを作成する環境に一定の要求がある.例えば、ハードウェアはVT技術をサポートしなければならない.ソフトウェアをインストールし、仮想ネットワークカードを配置するなど、準備ができていても、ディスクやネットワーク、vncなど、初心者には手がつけられない問題に遭遇することは避けられない.以下はOpenStack用にCentOSミラーを作成する別の方法です.参考:https://github.com/globocom/references/wiki/Building-a-CentOS-6.2-image-for-openstack[5]【引用は出典を明記してください:http://blog.csdn.net/bhq2010/article/details/9319289】
作成プロセス:
1.ローカルネットワークのソフトウェアソースを作成する
このようなミラーリングの作成方法はCentOSソフトウェアソースからシステムのカーネルと必要なソフトウェアをインストールする必要があり、[5]米国の共通CentOSソフトウェアソースからインストールする必要があり、天朝のネットワーク速度で半日もミラーリングができず、ローカルでソースを作ることができ、ミラーリングだけでなく、後でソフトウェアをインストールし、更新しても使用することができる.作成方法参考:http://blog.csdn.net/bhq2010/article/details/9237727 http://blog.csdn.net/bhq2010/article/details/9318269 本明細書のローカルbaseおよびupdatesソフトウェアソースのアドレスは、それぞれ次のとおりです.http://10.77.50.9/yum/centos-6.4およびhttp://10.77.50.9/yum/centos-6.4-updates.
2.ミラーの作成
その後のすべての操作はrootユーザーの下で行われます.まず、空のブロックファイルを作成し、ファイルにext 4ファイルシステムを作成します.これがミラーファイルです.bsとcountの乗算はファイルサイズで、必要に応じて自分で設定します.ここは2.5 GBです.最小システムだけをインストールすれば、1 GBは余裕があります.
mkdir ~/centos-image
dd if=/dev/zero of=~/centos-image/centos.img bs=8192 count=327680
mkfs.ext4 ~/centos-image/centos.img
ブロックファイルを/mnt/centos-imageディレクトリにマウントし、rpmデータベースを初期化します.
mkdir /mnt/centos-image
mount -o loop ~/centos-image/centos.img /mnt/centos-image
mkdir -p /mnt/centos-image/var/lib/rpm
rpm --rebuilddb --root=/mnt/centos-image
rpm -i --root=/mnt/centos-image --nodeps http://10.77.50.9/yum/centos-6.4/Packages/centos-release-6-4.el6.centos.10.x86_64.rpm

最後のパッケージ名centos-release-6-4.el 6.centos.10.x 86_64.rpmは現在使用されているcentosシステムバージョン(6.4)と対応しており、他のバージョンのシステムをインストールする際には対応するソフトウェアソースを使用して対応するファイル名に変更する必要があります.
ソフトウェア・ソースを、作成したローカル・ソフトウェア・ソースに変更します.
rm -rf /mnt/centos-image/etc/yum.repos.d/* 
vi /mnt/centos-image/etc/yum.repos.d/CentOS-Base.repo
書き込み内容は次のとおりです.
[base]
name=CentOS-$releasever - Base
baseurl=http://10.77.50.9/yum/centos-6.4
gpgcheck=1
gpgkey=http://10.77.50.9/yum/centos-6.4/RPM-GPG-KEY-CentOS-6

#released updates 
[updates]
name=CentOS-$releasever - Updates
baseurl=http://10.77.50.9/yum/centos-6.4-updates
gpgcheck=0
enabled = 1

ミラーファイルにOS(以下、ミラーシステム)をインストールします.
yum --installroot=/mnt/centos-image install -y rpm-build yum initscripts kernel passwd dhclient openssh-clients openssh-server vim sudo java-1.6.0-openjdk* java-1.7.0-openjdk*
ここでは、最も基本的なシステムカーネルとソフトウェアのほか、vim、sudo、jdk 1.6、jdk 1.7もインストールされています.他のパッケージをインストールする必要がある場合は、後ろに並べてください.
3.ミラーシステムパラメータの構成
まず、ファイルシステムプロファイルを変更します.
vi /mnt/centos-image/etc/fstab
は、次の内容を書き込みます.
/dev/vda       /      ext4   defaults                     0       0
/dev/vdb       /opt   ext4   defaults                     0       2
デフォルトhostnameを変更します.
vi /mnt/centos-image/etc/sysconfig/network
は、次のように書き込まれます.
NETWORKING=yes
HOSTNAME=ruc-xcloud
dnsが必要な場合は、dns構成を追加できます.
vi /mnt/centos-image/etc/resolv.conf
dnsサーバのアドレスを書き込み、googleが提供する無料dnsを例に、複数のdnsの1行1つ:
nameserver 8.8.8.8
eth 0のプロファイルを変更し、UUIDとMACアドレスを削除します.
vi /mnt/centos-image/etc/sysconfig/network-scripts/ifcfg-eth0
構成後の内容は次のとおりです.
DEVICE=eth0
BOOTPROTO=dhcp
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
DNS1=8.8.8.8
以降のDNS 1は、以前に構成されたdnsに対応しており、複数のdnsがある場合はDNS 2、DNS 3の順である…
また、ミラーシステムがOpenStackのメタデータサービスから必要な情報を読み取り、hostnameなどのシステム内のプロファイルを更新できるようにします.そうしないと、新しいインスタンスはインスタンス名に基づいてhostnameを変更しません.これを実現するには、openstackのcloud-inコンポーネントをインストールするか、起動スクリプトを自分で書くことができます.起動スクリプトを例に挙げます.
vi /mnt/centos-image/etc/rc.local
は#!/bin/shとtouch/var/lock/subsys/localの間には、次のスクリプトが追加されます.
if [ ! -d /root/.ssh ]; then
  mkdir -p /root/.ssh
  chmod 700 /root/.ssh
fi

# Fetch hostname using HTTP
ATTEMPTS=30
FAILED=0
while [ ! -f /tmp/metadata-hostname ]; do
    curl -f http://169.254.169.254/latest/meta-data/hostname > /tmp/metadata-hostname 2>/dev/null
    if [ $? -eq 0 ]; then
        TEMP_HOST=`cat /tmp/metadata-hostname | awk -F '.novalocal' '{print $1}'`
        sed -i "s/^HOSTNAME=.*$/HOSTNAME=$TEMP_HOST/g" /etc/sysconfig/network
        /bin/hostname $TEMP_HOST
        echo "Successfully retrieved hostname from instance metadata"
        echo "*****************"
        echo "HOSTNAME CONFIG"
        echo "*****************"
        cat /etc/sysconfig/network
        echo "*****************"
    else
        echo "Failed to retrieve hostname from instance metadata. This is a soft error, so we'll continue"
        FAILED=$(($FAILED + 1))
        if [ $FAILED -ge $ATTEMPTS ]; then
            echo "Failed to retrieve hostname from instance metadata after $FAILED attempts, quitting"
            break
        fi
        echo "Could not retrieve hostname from instance metadata (attempt #$FAILED/$ATTEMPTS), retrying in 5 seconds..."
        rm -f /tmp/metadata-hostname
        sleep 5
    fi
done
rm -f /tmp/metadata-hostname
システムのユーザーを構成します.
chroot /mnt/centos-image/
passwd
adduser xc
passwd xc
chmod u+w /etc/sudoers
vi /etc/sudoers
chmod u-w /etc/sudoers
mkinitrd --with virtio_pci --with virtio_ring --with virtio_blk --with virtio_net --with virtio_balloon --with virtio -f /boot/initramfs-$(ls /lib/modules/).img $(ls /lib/modules/)
exit

4.ミラーのアップロード
ミラーの準備:
cp /mnt/centos-image/boot/initramfs-$(ls /mnt/centos-image/lib/modules/).img ~/centos-image/
cp /mnt/centos-image/boot/vmlinuz* ~/centos-image/
umount /mnt/centos-image
作成したミラーファイル(3つのファイルを含む)をOpenStack Control Nodeにコピーします.
scp -r ~/centos-image  [email protected]:~/centos-image
rm -rf ~/centos-image
rm -rf /mnt/centos-image
OpenStack Controller Nodeにログインし、ミラーをOpenStackにアップロードします.アップロードする前にglanceの環境変数を設定します.ここでは言いません.
glance add name="CentOS 6.4 b52img kernel" is_public=true container_format=aki disk_format=aki < ~/centos-image/vmlinuz-2.6.32-358.11.1.el6.x86_64
glance add name="CentOS 6.4 b52img ramdisk" is_public=true container_format=ari disk_format=ari < ~/centos-image/initramfs-2.6.32-358.11.1.el6.x86_64.img
glance add name="CentOS 6.4 b52img" is_public=true container_format=ami disk_format=ami kernel_id=xxx  ramdisk_id=xxx <  ~/centos-image/centos.img

【引用は出典を明記してください:http://blog.csdn.net/bhq2010/article/details/9319289

このうちxxxは,それぞれ,前の2つの文を実行して得られたkernel idとramdisk idである.
新しいミラーでインスタンスを起動します.正常であれば成功します.