カスタムイメージの作成環境と前提条件
OpenStack向けのカスタム仮想マシンイメージを作成するため、KVM (Kernel-based Virtual Machine) 環境をホストマシンに構築しておく必要があります。本手順ではCentOS 7 Minimal 2003 ISOをベースに、OpenStackインスタンスの起動に適した軽量なイメージを構築します。環境の準備として、次のパッケージをインストールしてください。
# KVM関連のパッケージをインストール
yum groupinstall -y "Virtualization Host"
yum install -y virt-install libvirt-client qemu-kvm
仮想マシン作成とOSインストール
virt-installコマンドを使用して仮想マシンを作成し、ベースOSをインストールします。この例では、メモリ1GB、ディスク形式qcow2の仮想マシンを作成します。
virt-install \
--virt-type kvm \
--name centos7-template \
--memory 1024 \
--disk path=/var/lib/libvirt/images/centos7-template.qcow2,format=qcow2,size=10 \
--cdrom /path/to/CentOS-7-x86_64-Minimal-2003.iso \
--network network=default \
--graphics vnc,listen=0.0.0.0 \
--os-type linux \
--os-variant centos7.0 \
--noautoconsole
仮想マシンが起動するとVNCポートが開設されます。netstatコマンドで5900番ポートがLISTEN状態であることを確認し、VNCクライアントで接続してOSインストールを進めます。
netstat -tulpn | grep :5900
OSインストール時の設定ポイント
VNC接続後、以下の設定を適用しながらインストールを進めます。
- 起動オプション: インストールメニューでTabキーを押し、カーネルパラメータに
net.ifnames=0 biosdevname=0を追加して従来のethX形式のネットワークインターフェース名を使用 - パーティション設定: 全容量をルートパーティション(/)に割り当て、シンプルな構成で作成
- タイムゾーン: Asia/Shanghaiを選択
- 管理者パスワード: rootアカウントのパスワードを設定
インストール後の基本設定
OSインストール完了後、仮想マシン内で以下の基本設定を実施します。
ネットワーク設定とYUMリポジトリの構成
# ネットワークインターフェースの設定
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF
TYPE=Ethernet
BOOTPROTO=dhcp
DEVICE=eth0
ONBOOT=yes
EOF
# リポジトリのバックアップと設定
cd /etc/yum.repos.d/
mkdir backup
mv *.repo backup/
# 基本リポジトリの設定
curl -o CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# EPELリポジトリの追加
yum install -y epel-release
sed -i 's|^#baseurl|baseurl|' /etc/yum.repos.d/epel.repo
sed -i 's|^mirrorlist|#mirrorlist|' /etc/yum.repos.d/epel.repo
システムの基本設定とツールのインストール
# SELinuxとファイアウォールの無効化
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
systemctl disable firewalld --now
# SSHサービス設定の最適化
echo "UseDNS no" >> /etc/ssh/sshd_config
echo "GSSAPIAuthentication no" >> /etc/ssh/sshd_config
systemctl restart sshd
# 必須パッケージのインストール
yum install -y vim-enhanced net-tools wget curl bind-utils \
mlocate lsof htop iotop sysstat bash-completion \
ntpdate unzip tar gzip
OpenStackインスタンス向けの最適化
クラウド環境で使用するための追加設定を実施します。
Cloud-Initの設定
Cloud-Initをインストールして設定することで、OpenStackから渡されるメタデータを処理できるようにします。
# Cloud-Initのインストール
yum install -y cloud-init cloud-utils-growpart
# Cloud-Initの基本設定
cat > /etc/cloud/cloud.cfg.d/99_openstack.cfg << EOF
# OpenStack用設定
disable_root: 0
ssh_pwauth: yes
manage_etc_hosts: localhost
datasource:
OpenStack:
timeout: 10
max_wait: 30
一時ファイルのクリーンアップ
# パッケージキャッシュのクリーンアップ
yum clean all
# 一時ファイルの削除
rm -rf /tmp/*
# システムログのクリア
echo "" > /var/log/messages
echo "" > /var/log/secure
echo "" > /var/log/audit/audit.log
# コマンド履歴の削除
history -c
イメージのエクスポートとOpenStackへの登録
仮想マシンを停止し、ディスクイメージをOpenStackで使用できる形式でエクスポートします。
# 仮想マシンの停止
shutdown -h now
# イメージ形式の変換(必要に応じて)
qemu-img convert -f qcow2 -O raw \
/var/lib/libvirt/images/centos7-template.qcow2 \
/tmp/centos7-cloud.raw
# イメージのプロパティ確認
qemu-img info /tmp/centos7-cloud.raw
# Glanceへのイメージ登録
openstack image create "CentOS-7-Cloud" \
--file /tmp/centos7-cloud.raw \
--disk-format raw \
--container-format bare \
--public \
--property os_distro="centos" \
--property os_version="7"
検証ポイント
作成したイメージを使用してOpenStackでインスタンスを作成する際、以下の点を確認します。
- インスタンス起動時に正しくIPアドレスをDHCPで取得すること
- Cloud-Initがメタデータを正常に処理し、ユーザー設定が適用されること
- SSH接続が可能で、rootログインが適切に設定されていること
- システムログに異常がないこと