例: CentOS イメージ

この例は、CentOS イメージのインストール方法を説明します。おもに CentOS 7 を対象にしています。CentOS のインストールプロセスはバージョンにより異なる可能性があるため、違うバージョンの CentOS を使用している場合、インストール手順が異なる可能性があります。

CentOS インストール ISO のダウンロード

  1. CentOS ミラー ページに移動します。

  2. ミラーの右側にある HTTP リンクをクリックします。

  3. 使用したい CentOS のバージョンのリンクをクリックします。例えば、 7/ です。

  4. isos/ フォルダーへのリンクをクリックします。

  5. 64 ビットイメージ用の x86_64/ フォルダーへのリンクをクリックします。

  6. ダウンロードしたい netinstall ISO イメージをクリックします。例えば、 CentOS-7-x86_64-NetInstall-1611.iso は小さいイメージなので良いでしょう。不足しているパッケージは、インストール中にインターネットからダウンロードされます。

インストールプロセスの開始

すでに説明したように、コマンド virt-managervirt-install を使用して、インストールプロセスを開始します。 virt-install コマンドを使用する場合、必ず VNC クライアントを仮想マシンに接続してください。

以下を前提としています。

  • 仮想マシンイメージの名前は centos です。 virsh コマンドを使用してイメージの状態を操作する際に、この名前が必要になります。

  • ネットワークインストール ISO イメージは /data/isos ディレクトリーに保存されています。

virt-install をコマンド使用する場合、このコマンドは以下のようになるでしょう。

# qemu-img create -f qcow2 /tmp/centos.qcow2 10G
# virt-install --virt-type kvm --name centos --ram 1024 \
  --disk /tmp/centos.qcow2,format=qcow2 \
  --network network=default \
  --graphics vnc,listen=0.0.0.0 --noautoconsole \
  --os-type=linux --os-variant=centos7.0 \
  --location=/data/isos/CentOS-7-x86_64-NetInstall-1611.iso

インストールのステップ実行

At the initial Installer boot menu, choose the Install CentOS 7 option. After the installation program starts, choose your preferred language and click Continue to get to the installation summary. Accept the defaults.

_images/centos-install.png

Ethernet 状態の変更

デフォルトの Ethernet 設定は OFF です。 Ethernet 設定を OFF から ON に変更します。特に、 IPv4 設定方法 (IPv4 Settings Method) は必ず 自動 (DHCP) (Automatic (DHCP)) に設定してください。なお、デフォルト値は 自動 (DHCP) です。

_images/centos-tcpip.png

ホスト名

インストーラーでは、ホスト名を入力できます。デフォルトの localhost.localdomain が良いでしょう。後ほど cloud-init パッケージをインストールします。これにより、このイメージを使用して展開された新規インスタンスの起動時に、ホスト名が設定されます。

CentOS Web サーバーの指定

CentOS のバージョンによっては、ユーザーが CentOS のミラーに応じた、URL や Web サイト、および CentOS のディレクトリをネットワークインストーラーに指定する必要があります。インストーラーが URL だけを要求する場合、http://mirror.umd.edu/centos/7/os/x86_64 は有効な URL の 1 つです。

注釈

mirror.umd.edu の代わりに、他のミラーを使用することを考えてください。

_images/centos-url-setup.png

インストーラーが Web サイト名と CentOS ディレクトリをそれぞれ確認する場合、次のとおり入力します。

  • Web サイト名: mirror.umd.edu

  • CentOS ディレクトリー: centos/7/os/x86_64

ミラーの一覧は CentOS ミラーページ を参照してください。取得したいミラー Web サイト名の HTTP リンクをクリックしてください。

ストレージデバイス

インストールに使用するデバイスの種類の確認が表示された場合、virtio ブロックデバイス (Virtio Storage Devices) を選択します。

ディスクのパーティション作成

ディスクのパーティションは、さまざまな選択肢があります。デフォルトでは、LVM パーティションが使用され、3 つのパーティション (/boot/swap) が作成されます。これでうまく動作します。この代わりに、単一の ext4 パーティション を作成し、 / にマウントしたい場合もあるでしょう。これもうまく動作します。

よくわからない場合、インストーラーのデフォルトのパーティション設定を使用します。基本的には、他のスキーマより良くありませんが、最終パーティションに動的リサイズできるパーティションを作成することにより、他のパーティションの境界をまたがることなくリサイズできます。

インストールオプションの指定

デフォルトのオプションを使用して、インストールをステップ実行します。最も簡単な方法は、「最小インストール (Minimal Install)」インストールを選択することです。SSH サーバーがインストールされます。

Set the root password

During the installation, remember to set the root password when prompted.

CD-ROM の取り出しと再起動

Wait until the installation is complete.

_images/centos-complete.png

virsh コマンドを使用して、ディスクを取り出すために、CD-ROM が前に接続されていた場所と同じ場所に、libvirt が空のディスクを接続する必要があります。この場所は、 hda でしょう。 virsh dumpxml vm-image コマンドを使用して、適切な接続先を確認できます。

# virsh dumpxml centos
<domain type='kvm' id='19'>
  <name>centos</name>
...
    <disk type='block' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='hda' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
    </disk>
...
</domain>

virsh を使用して、ディスクを取り出し、再起動するために、ホストから root として以下のコマンドを実行します。 virt-manager を使用している場合、以下のコマンドを使用することもできますが、GUI を使用して、ディスクを切断し、手動で停止および起動を実行することもできます。

# virsh attach-disk --type cdrom --mode readonly centos "" hda
# virsh reboot centos

ACPI サービスのインストール

ハイパーバイザーがインスタンスを再起動やシャットダウンできるようにするために、ゲストシステムに acpid サービスをインストールし実行しておく必要があります。

Log in as root to the CentOS guest and run the following commands to install the ACPI service and configure it to start when the system boots:

# yum install acpid
# systemctl enable acpid

メタデータ取得の設定

インスタンスは、起動時にいくつかの処理を実行するために、メタデータサービスと通信する必要があります。例えば、インスタンスが SSH 公開鍵を取得し、ユーザーデータエージェントを実行する必要があります。インスタンスが確実にこれらの処理を実行するために、以下の方法のどれかを使用します。

  • cloud-init RPM をインストールします。これは、Ubuntu cloud-init パッケージを移植したものです。これが推奨の方法です。

  • メタデータサービスから必要な情報を取得するために、次のセクションに記載されているとおり、 /etc/rc.local ファイルを編集します。

cloud-init を使用した公開鍵の取得

The cloud-init package automatically fetches the public key from the metadata server and places the key in an account. Install cloud-init inside the CentOS guest by running:

# yum install cloud-init

The account varies by distribution. On CentOS-based virtual machines, the account is called centos.

You can change the name of the account used by cloud-init by editing the /etc/cloud/cloud.cfg file and adding a line with a different user. For example, to configure cloud-init to put the key in an account named admin, use the following syntax in the configuration file:

users:
  - name: admin
    (...)

パーティションのリサイズをサポートするための cloud-utils-growpart のインストール

In order for the root partition to properly resize, install the cloud-utils-growpart package, which contains the proper tools to allow the disk to resize using cloud-init.

# yum install cloud-utils-growpart

公開鍵取得のスクリプトの書き込み (cloud-init なしの場合)

cloud-init パッケージをインストールできない場合、SSH 公開鍵を取得し、それを root アカウントに追加するために、 /etc/rc.d/rc.local ファイルを編集し、 touch /var/lock/subsys/local 行の前に以下の行を追加します。

if [ ! -d /root/.ssh ]; then
  mkdir -p /root/.ssh
  chmod 700 /root/.ssh
fi

# Fetch public key using HTTP
ATTEMPTS=30
FAILED=0
while [ ! -f /root/.ssh/authorized_keys ]; do
  curl -f http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key \
    > /tmp/metadata-key 2>/dev/null
  if [ \$? -eq 0 ]; then
    cat /tmp/metadata-key >> /root/.ssh/authorized_keys
    chmod 0600 /root/.ssh/authorized_keys
    restorecon /root/.ssh/authorized_keys
    rm -f /tmp/metadata-key
    echo "Successfully retrieved public key from instance metadata"
    echo "*****************"
    echo "AUTHORIZED KEYS"
    echo "*****************"
    cat /root/.ssh/authorized_keys
    echo "*****************"
  fi
done

注釈

いくつかの VNC クライアントは、コロン (:) を セミコロン (;) に、アンダースコア (_) をハイフン (-) に置き換えます。http; ではなく、http: であること、authorized-keys ではなく authorized_keys であることを確認してください。

注釈

上記のスクリプトは、メタデータサーバーから SSH 公開鍵のみを取得します。新しいインスタンスの要求時に、ユーザーが指定できるオプションデータである「ユーザーデータ」の取得を行いません。ユーザーデータは、インスタンスの起動時に、カスタムスクリプトを実行するためにしばしば使用されます。

OpenStack メタデータサービスは、Amazon EC2 メタデータサービスの 2009-04-04 版と互換性があります。ユーザーデータの取得方法に関する詳細は Using Instance Metadata にある Amazon EC2 のドキュメントを参照してください。

zeroconf ルートの無効化

インスタンスがメタデータサービスにアクセスできるようにするために、デフォルトの zeroconf ルートを無効化する必要があります。

# echo "NOZEROCONF=yes" >> /etc/sysconfig/network

コンソールの設定

nova console-log コマンドを CentOS 7 で正しく動作させるためには、以下の作業が必要な場合があります。

  1. /etc/default/grub ファイルを編集し、 GRUB_CMDLINE_LINUX オプションを設定します。 rhgb quiet を削除し、オプションに console=tty0 console=ttyS0,115200n8 を追加します。

    For example:

    ...
    GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap console=tty0 console=ttyS0,115200n8"
    
  2. 以下のコマンドを実行し、設定を反映します。

    # grub2-mkconfig -o /boot/grub2/grub.cfg
    Generating grub configuration file ...
    Found linux image: /boot/vmlinuz-3.10.0-229.14.1.el7.x86_64
    Found initrd image: /boot/initramfs-3.10.0-229.14.1.el7.x86_64.img
    Found linux image: /boot/vmlinuz-3.10.0-229.4.2.el7.x86_64
    Found initrd image: /boot/initramfs-3.10.0-229.4.2.el7.x86_64.img
    Found linux image: /boot/vmlinuz-3.10.0-229.el7.x86_64
    Found initrd image: /boot/initramfs-3.10.0-229.el7.x86_64.img
    Found linux image: /boot/vmlinuz-0-rescue-605f01abef434fb98dd1309e774b72ba
    Found initrd image: /boot/initramfs-0-rescue-605f01abef434fb98dd1309e774b72ba.img
    done
    

インスタンスのシャットダウン

インスタンス内で root として以下を実行します。

# poweroff

クリーンアップ (MAC アドレスの詳細の削除)

オペレーティングシステムは、インストール中に仮想 Ethernet カードの MAC アドレスを /etc/sysconfig/network-scripts/ifcfg-eth0 などの場所に記録します。しかしながら、イメージが起動するたびに、仮想 Ethernet カードの MAC アドレスは別の値になります。そのため、この情報は設定ファイルから削除する必要があります。

virt-sysprep というユーティリティーがあります。これは、MAC アドレス参照の削除など、さまざまなクリーンアップ作業を実行します。決まった場所にある仮想マシンイメージをクリーンアップします。

# virt-sysprep -d centos

libvirt ドメインの定義削除

これで、イメージを Image service にアップロードできます。今後は、この仮想マシンイメージは libvirt により管理する必要がありません。virsh undefine vm-image コマンドを使用して libvirt に通知します。

# virsh undefine centos

イメージの完成

The underlying image file that you created with the qemu-img create command is ready to be uploaded. For example, you can upload the /tmp/centos.qcow2 image to the Image service by using the openstack image create command. For more information, see the python-openstackclient command list.