2017年9月19日火曜日

packer + esxi で CentOS7 の ISO から vmx と vmdk ファイルを作成してみた

概要

前回 Ubuntu で試しました
今回は CentOS で試したので JSON テンプレートの紹介をしたいと思います

環境

  • Ubuntu Ubuntu 16.04.2
  • packer 1.0.4
  • VMware ESXi 6.0.0

事前準備

JSON テンプレート

  • vim centos7.json
{
    "builders": [
    {
        "name": "centos7",
        "type": "vmware-iso",

        "vm_name": "centos7_from_packer",
        "guest_os_type": "rhel7-64",
        "ssh_username": "root",
        "ssh_password": "vm_password",
        "ssh_timeout": "15m",

        "iso_url": "http://ftp.jaist.ac.jp/pub/Linux/CentOS/7/isos/x86_64/CentOS-7-x86_64-Minimal-1708.iso",
        "iso_checksum": "bba314624956961a2ea31dd460cd860a77911c1e0a56e4820a12b9c5dad363f5",
        "iso_checksum_type": "sha256",

        "shutdown_command": "echo 'shutdown -P now' > shutdown.sh; echo 'vm_password'|sudo -S sh 'shutdown.sh'",
        "boot_command": [
        "<tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/centos7.ks<enter><wait>"
        ],
        "http_directory": "./",
        "tools_upload_flavor": "linux",
        "headless": false,
        "keep_registered": true,

        "remote_type": "esx5",
        "remote_host": "192.168.100.105",
        "remote_datastore": "datastore1",
        "remote_username": "root",
        "remote_password": "esxi_password",
        "disk_type_id": "thin",
        "vmx_data": {
        "ethernet0.networkName": "VM Network"
        },

        "vnc_port_min": "5900",
        "vnc_port_max": "5911",
        "vnc_bind_address": "0.0.0.0",
        "vnc_disable_password": "true"
    }
    ]
}

詳細に説明

メタデータ

  • name・・・このビルドの名称、packer は並列ビルドが可能でどのビルドかをこの name で識別します
  • type・・・どのビルドタイプを使うか指定します、今回は「vmware-iso」を使いましたが他にも docker や amazon-ebs などたくさんのビルドタイプがあります、今回のタイプはダウンロードした ISO を ESXi でビルドし vSphere 環境で動作する vmx ファイルと vmdk ファイルを作成するためのタイプです

作成する VM の情報

  • vm_name・・・VM の名前
  • guest_os_type・・・vSphere 環境で扱われる OS のタイプを指定します、今回は RedHat 系の OS なので「rhel7-64」を指定しています、他にも ubuntu-64 や other などがあります
  • ssh_username・・・プロビジョニングするために作成した VM に SSH ログインするためのユーザ名です、OS インストール時に作成したユーザ名と同じにする必要があります
  • ssh_password・・・プロビジョニングするために作成した VM に SSH ログインするためのパスワードです、OS インストール時と設定したパスワードと同じにする必要があります
  • ssh_timeout・・・SSH のタイムアウト時間です、この時間内に VM と SSH のコネクションが確立されないとビルドエラーとなります

ISO 情報

  • iso_url・・・ダウンロードする ISO の URLです、ここで指定した ISO をダウンロードして packer はビルドします
  • iso_checksum・・・ダウンロードする ISO のチェックサムです、チェックサムが間違っているとビルドエラーとなります
  • iso_checksum_type・・・チェックサムのタイプを指定します

ビルドオプション

  • shutdown_command・・・すべてのプロビジョニングが完了した後に実行するシャットダウンコマンドを指定します
  • boot_command・・・ISO から OS をインストールする際のオプションを指定します、GRUB 画面を直接制御することができる特殊なコマンドが用意されており、ここで kickstart サーバを指定します
  • http_directory・・・これを指定することで packer 自信が HTTP サーバになることができます、HTTP サーバとして立ち上がった際のバインドされる IP とポートはそれぞれ {{ .HTTPIP }}{{ .HTTPPort }} に格納されます、このオプションでは HTTP サーバの DocumentRoot となるパスを指定します
  • tools_upload_flavor・・・VMware tools のタイプを指定します、他に windows や darwin が指定できます
  • headless・・・ビルド時にコンソールを使うか使わないか指定できます、今回の場合は kickstart を使って OS をインストールするため true でも問題ないです、false にすることでコンソールを確認すると OS のインストール画面が確認できるのでデバッグに役立ちます
  • keep_registered・・・ビルド完了後にサーバを削除するかしないか指定できます、true にするとサーバはシャットダウン後削除されません

ESXi 情報

  • remote_type・・・「esx5」を絶対指定しましょう、それ以外の指定ではエラーとなります
  • remote_host・・・ビルドする ESXi の IP を指定します
  • remote_datastore・・・ダウンロードする ISO を格納したり、成果物となる vmx や vmdk を格納する ESXi のデータストアを指定します
  • remote_password・・・ESXi に SSH ログインするための root パスワードを指定します
  • disk_type_id・・・VM を作成する際のディスクタイプを指定します、thin の場合はシンプロビジョニングが適用されます、他には zeroedthick, eagerzeroedthick などが指定できます、0 - 5 の数字でも指定できます
  • vmx_data・・・VM の構成を細かく設定することができます、CPU やメモリネットワークや接続する外部記憶デバイスを指定することができます、指定するフォーマットは VMware に準拠するため詳細は VMware のドキュメントを確認する必要があります、ethernet0.networkName は 1 枚目の NIC を指定することができます

VNC 関係

  • vnc_port_min・・・ビルド時に作成される VM が LISTEN する VNC サーバに使用される最小ポート番号を指定します
  • vnc_port_max・・・ビルド時に作成される VM が LISTEN する VNC サーバに使用される最大ポート番号を指定します、今回の場合 VM は 5900 から 5911 番の間で VNC サーバを LISTEN します
  • vnc_bind_address・・・ビルド時に作成される VM が LISTEN する VNC サーバのバインド IP を指定します
  • vnc_disable_password・・・VNC サーバのパスワード認証を使うか使わないか指定します、true の場合認証を使いません

VNC に関して少し補足として vSphere 環境に作成される VM にはオプションで VNC サーバを立ち上げることができます
もし VM に VNC を立ち上げるとコンソールの情報を VNC でも確認することができます
packer はデフォルトで VNC 接続を使うので VNC 関連のオプションを指定する必要があります

ビルド

  • packer build centos7.json

成果物の保存場所

  • ls /vmfs/volumes/datastore12/output-centos7

ちなみに再度ビルドする場合 output-centos7 フォルダがあるとビルドエラーになるので事前に削除しておきましょう

最後に

packer + esxi で CentOS をビルドしてみました
基本的な操作を確認したかったので、変数の展開やプロビジョニングはしませんでした
興味があればドキュメントを確認しながら実施すれば簡単にできると思います

参考サイト

0 件のコメント:

コメントを投稿