Ubuntu - 20.04ライブサーバーテンプレートの生成をパッカーvsphere iso buildと自動化します.

14900 ワード

UbuntuはDebianインストーラのサポートを中止します.Ubuntuサーバー20.04は、新しい自動化されたOSのインストール方法が付属しています.このポストは新しいインストーラでパッカービルドを示します.

更新:
このセットアップはUbuntu - 20.04ライブサーバーのみではありません.

静けさ
SuiquityはUbuntuサーバの新しい自動インストーラです.自動インストールの設定は、クラウドのinit設定で与えられます.
設定されている場合、値は設定ファイルから取得されます.そうでなければデフォルト値が使用されます.クラウドのinit設定を提供する方法は様々です.
ユーザー設定は、通常、データとメタデータのファイル内のクラウド設定に含まれています.
詳細な情報については、見ることができますThe AutoInstall documentation provided by Canonical .
当社のインストーラは、カーティン、netplanと雲initに基づいています.

概要
  • ユーザデータ
  • パッカーファイル
  • 変数ファイル

  • 一つずつ見てみよう
    #cloud-config
    autoinstall:
        version: 1
        early-commands:
            # Stop ssh for packer
            - sudo systemctl stop ssh
        locale: en_US
        keyboard:
            layout: en
            variant: us
        identity:
            hostname: ubuntu-server
            username: ubuntu
            password: '$6$rounds=4096$NYG7e8HxIMgz1$BqP28Ppt0FqXiBQuiE6PxiVBJJJAbm8tJrNz4HC7MEC.7Gv/eOyQIfaLqZ6W6fnMMtxP.BYfHmTBxUFQQs0u91'
        ssh:
            install-server: yes
            allow-pw: yes
        storage:
            layout:
                name: direct
        apt:
            primary:
                - arches: [i386, amd64]
                  uri: "http://ro.archive.ubuntu.com/ubuntu/"
        user-data:
          disable_root: false
        late-commands:
          - sed -i -e 's/^#\?PasswordAuthentication.*/PasswordAuthentication yes/g' /target/etc/ssh/sshd_config
          - sed -i -e 's/^#\?PermitRootLogin.*/PermitRootLogin yes/g' /target/etc/ssh/sshd_config
          - echo 'ubuntu ALL=(ALL) NOPASSWD:ALL' > /target/etc/sudoers.d/ubuntu
          - curtin in-target --target=/target -- chmod 440 /etc/sudoers.d/ubuntu
          - curtin in-target --target=/target -- apt-get update
          - curtin in-target --target=/target -- apt-get upgrade --yes
    
    ご覧の通り.yaml フォーマット済みの設定.私たちは、この設定ですべての詳細(我々がそれを必要とするものはデフォルトを使用する)を専門としました.しかし、我々はいくつかのトリッキーな部分を理解する必要があります.
    第一にidentity 部分的に、ハッシュされたパスワードを使用しました.セキュリティ目的のためのautoinstallerの既定の要件です.実際、私たちはもっと安全なシステムのためにもっと必要とします.しかし、このハッシュされたパスワードを生成するには?
    実際に使ったubuntu ssh接続用のパスワードとして、ハッシュを作成するために以下のコマンドを使用します.
    mkpasswd -m SHA-512 --rounds=4096
    
    今すぐに少し移動して見つけることができますearly-commands . どういう意味ですか.実際にパッカービルドを開始すると、パッカーは最初からssh接続を設定します.初期化中にビルドを中断することでエラーが発生します.したがって、最初の段階では、ssh接続が停止していることを確認する必要があります.
    あなたが見ることができるすべての部品を理解するためにUbuntu Autoinstall Reference . 幸いドキュメントは非常にシンプルで便利なcanonicalによって提供される.
    今、私たちはメタデータファイルを作成する必要があります.しかし、我々はそれを空にしておきます.ついに私たちは創造する必要がありますhttp これらのファイルをディレクトリに入れます.
    さて、パッカーファイルを定義する必要があります.
    {
      "builders": [
        {
          "CPUs": 2,
          "RAM": 2048,
          "RAM_reserve_all": true,
          "firmware": "bios",
          "boot_command": [
             "<esc><esc><esc>",
             "<enter><wait>",
             "/casper/vmlinuz ",
             "root=/dev/sr0 ",
             "initrd=/casper/initrd ",
             "autoinstall ",
             "ds=nocloud-net;s=http://{{ .HTTPIP }}:{{ .HTTPPort }}/",
             "<enter>"
          ],
          "boot_wait": "2s",
          "convert_to_template": "true",
          "create_snapshot": "false",
          "datacenter": "{{user `vcenter_datacenter`}}",
          "datastore": "{{user `vcenter_datastore`}}",
          "disk_controller_type": "pvscsi",
          "folder": "{{user `vcenter_folder`}}",
          "guest_os_type": "ubuntu64Guest",
          "host": "{{user `vcenter_host`}}",
          "http_directory": "{{user `http_directory`}}",
          "insecure_connection": "true",
          "iso_checksum": "{{user `iso_checksum_type`}}:{{user `iso_checksum`}}",
          "iso_paths": "{{user `iso_paths`}}",
          "name": "Ubuntu-20.04",
          "network_adapters": [
            {
              "network": "{{user `vcenter_network`}}",
              "network_card": "vmxnet3"
            }
          ],
          "notes": "Default SSH User: {{user `ssh_username`}}\nDefault SSH Pass: {{user `ssh_password`}}\nBuilt by Packer @ {{isotime \"2006-01-02 03:04\"}}.",
          "password": "{{user `vcenter_password`}}",
          "shutdown_command": "echo 'ubuntu'|sudo -S shutdown -P now",
          "ssh_password": "{{user `ssh_password`}}",
          "ssh_timeout": "20m",
          "ssh_handshake_attempts": "100000",
          "ssh_username": "{{user `ssh_username`}}",
          "storage": [
            {
              "disk_size": 20480,
              "disk_thin_provisioned": true
            }
          ],
          "type": "vsphere-iso",
          "username": "{{user `vcenter_username`}}",
          "vcenter_server": "{{user `vcenter_server`}}",
          "vm_name": "{{user `vm_name`}}"
        }
      ],
      "provisioners": [
        {
           "type": "shell",
           "execute_command": "echo 'ubuntu' | {{.Vars}} sudo -S -E bash '{{.Path}}'",
           "script": "scripts/setup_ubuntu2004.sh"
         }
       ]
    }
    
    私は、現在若干のトリッキーな点に言及する必要があります.私が使ったようにuser パッカーファイルのキーワード.変数の定義です.もう一つの最も重要な部分はds=nocloud-net;s=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ .
    それで、それは何を意味しますか?あなたが覚えているように、私はHTTPディレクトリを作り、それにconfigファイルを入れました.そこで、これらのファイルを提供するためにWebサーバが必要です.
    ビルドが実行されると、パッカーは小さなHTTPサーバを起動し、{{.HTTPIP}} and {.HTTPPort}} それぞれのIPとポートを持つ変数.
    また、http_directory (私は既にパッカーファイルで定義されています)設定オプションを使用して、ファイルシステム上のHTTPサーバがどのディレクトリを提供するかを定義します.
    あなたが望むように、あなたは異なる方法であなたのファイルを提供することができます.例えば、私は私のカスタム静的サーバーに設定ファイルをアップロードして、このサーバを通して出しました.の代わりにhttp://{{ .HTTPIP }}:{{ .HTTPPort }}/ 自分のサーバを使ったhttps://ubuntu-cloud-init.vercel.app/ 私の企業構成のために.
    少なくとも、変数ファイルを定義する必要があります.ここに私の
    {
      "vm_name": "Ubuntu-2004-Template",  
      "vcenter_server":"",
      "vcenter_username":"",
      "vcenter_password":"",
      "vcenter_datacenter": "",
      "vcenter_datastore": "",
      "vcenter_host": "",
      "vcenter_folder": "",
      "vcenter_network": "",
      "guest_os_type": "ubuntu64Guest",
      "http_directory": "http",
      "iso_urls": "https://releases.ubuntu.com/focal/ubuntu-20.04.1-live-server-amd64.iso",
      "iso_checksum_type": "sha256",
      "iso_checksum": "443511f6bf12402c12503733059269a2e10dec602916c0a75263e5d990f6bb93",
      "iso_paths": "[Datastore VMS] /packer_cache/ubuntu-20.04.1-live-server-amd64.iso",
      "ssh_username": "ubuntu",
      "ssh_password": "ubuntu"
    }
    
    空のために独自のカスタムの詳細を使用することができますvcenter 変数.
    使いましたiso_path パッカーファイルの変数.しかし、私はまたiso_url 可変変数ファイル.それで、あなたがdontに準備ができているならば、あなたは基本的に変わることができますiso_path 変数iso_url パッカーファイルで.
    これはVSphereでVSphereでUbuntu 20.04に基づいて、定義済みのUbuntu/Ubuntuユーザーをビルドします.このイメージは本当に役に立つが、私のイメージに別の段階を加えたい.
    私はvSphereクラウドのinitのためのデータソースを必要とすることを意味RancherのVSphereプロビジョナーとこのイメージを使用する予定です.それはここで利用可能ですplugin .
    それで、私は中でスクリプトを加えましたprovisioners パッカーファイルの行
      "provisioners": [
        {
           "type": "shell",
           "execute_command": "echo 'ubuntu' | {{.Vars}} sudo -S -E bash '{{.Path}}'",
           "script": "scripts/setup_ubuntu2004.sh"
         }
       ]
    
    これは、データソースを設定し、マシンの状態をリセットするためにマシンIDをリセットします.両方のパッカーファイルとコンフィグと私のgithubからのスクリプトも見つけることができますrepo .