ウェブサイト検索

自動インストールを使用して Ubuntu 無人インストールを作成して実行する方法


オペレーティング システムの複製可能なインストールをプロビジョニングおよび作成できることは、特に企業環境では非常に重要です。無人インストールを実行するために、Ubuntu は Debian のプリシード ファイルとキックスタート ファイルをサポートしていました。 Ubuntu サーバー 20.04 および Ubuntu デスクトップのバージョン 23.04 以降、これらのインストール方法は非推奨となり、ディストリビューションでは、cloud-init を利用する新しい自動インストール形式が採用されました。

このチュートリアルでは、Ubuntu 自動インストール ファイルを作成する方法と、それを使用して無人で複製可能なインストールを実行する方法を学びます。

このチュートリアルでは次のことを学びます:

  • 自動インストール ファイルを作成し、あらゆる側面で Ubuntu インストールを定義する方法
  • 自動インストール ファイルを Ubuntu デスクトップおよびサーバーのインストーラーに渡す方法

自動インストールファイルの紹介

Debian の派生ディストリビューションである Ubuntu は、当初、無人で複製可能なインストールを実行する方法としてプリシード ファイルをサポートしていました。キックスタート インストール構文のサポートは互換性レイヤーとして後に追加されましたが、すべてのキックスタート コマンドが実装されたわけではありません。 Ubuntu サーバー 20.04 以降、および Ubuntu デスクトップ 23.04 以降、Ubuntu は YAML 構文に基づく独自の自動インストール方法、autoinstall を採用しました。

通常、自動インストール ファイルで最初に表示されるのは「#cloud-config」コメントです。これは、ファイルをcloud-initによって処理する場合に必要です(これについては後で詳しく説明します)。設定ファイルで使用される主なキーは autoinstall です。代わりに、ファイル構文のバージョンは version キーで指定されます。この記事の執筆時点では、バージョン 1 のみが利用可能です。

#cloud-config
autoinstall:
  version: 1

ソースの選択

インストールする「環境」を指定するには、マッピングを値として受け取る source キーを使用します。このマッピング内で、インストールする環境の名前を id キーの値として渡します。たとえば、Ubuntu デスクトップをインストールする場合は、ubuntu-minimal-desktop と本格的な ubuntu-desktop のどちらかを選択できます。キーが省略された場合は、最初に使用可能なソースが使用されます。

#cloud-config
autoinstall:
  source:
    id: ubuntu-desktop-minimal

システムロケール、タイムゾーン、キーボードレイアウトの設定

システム ロケールを設定するには、locale キーを使用します。代わりに、キーボード設定は keyboard キーを使用して指定します。このキーは値としてマッピングを受け取ります。以下の例では、使用する レイアウト のみを指定します (us)。レイアウト バリアントなどの他のパラメータを指定することもできます。最後に、システムのタイムゾーンを設定するには、timezone キーを使用します。

#cloud-config
autoinstall:
  locale: en_US.UTF-8
  keyboard:
    layout: us
  timezone: Europe/Rome

ネットワークインターフェースの構成

システム ネットワークを構成するには、netplan 構文を使用して network キーを使用します。以下の例では、enp1s0 イーサネット インターフェイスを dhcp4 経由で自動的に設定するように指定しています。

#cloud-config
autoinstall:
  network:
    version: 2
    ethernets:
      enp1s0:
        dhcp4: true

ホスト名とシステムの初期ユーザーの構成

システムを安全に使用するには、少なくとも 1 人の非特権ユーザーを作成する必要があります。システムのホスト名も設定する必要があります。これらの両方の側面は、identity キーを介して管理されます。キーはマッピングを値として受け取ります。 usernamepasswordhostname をそれぞれのキーで定義します。

#cloud-config
autoinstall:
  identity:
    username: egidio
    hostname: linuxconfig
    password: '$6$mzOdSSVUfhWRNhcX$mkm.drDfOLfpZRX/58ouJqMvitV2O0147VgKzKGYE6Qx4adJ8TXqMHs2dh2L7kT4TW5e97FCRDkGK1J.LouyV.'

例でわかるように、提供するパスワードは sha512 アルゴリズムを使用してすでにハッシュされている必要があります。

SSHサーバーのセットアップ

自動インストール ファイルでは、SSH サーバーをインストールして構成するかどうかを指定できます。パスワード認証を有効または無効にし、最終的には最初のユーザーの authorized_keys ファイルに追加される承認された公開キーのリストを渡すことができます。

#cloud-config
autoinstall:
  ssh:
    install-server: true
    allow-pw: true
    authorized-keys: []

追加パッケージのインストール

システム インストールの一部として、apt-get パッケージ マネージャーによって取り込まれる追加パッケージのリストを指定するには、packages キーを使用できます。以下に例を示します。

#cloud-config
autoinstall:
  packages:
    - git
    - python3-pip

スナップ パッケージをインストールするには、代わりに snaps キーワードを使用します。キーワードはマッピングのリストを値として受け入れます。各マッピングでは、namechannel、および classic キーを使用して、インストールするスナップ パッケージの名前をそれぞれ指定します。スナップをインストールするチャネル (デフォルトは「stable」)、およびスナップ パッケージをクラシック モードでインストールするかどうか (デフォルトは「false」):

#cloud-config
autoinstall:
  snaps:
    - name: pycharm-community
      channel: stable 
      classic: true

インストール後のアクションの定義

インストール後のアクションを定義するには、shutdown キーを使用します。このキーは、「poweroff」と「reboot」という 2 つの値を受け入れます。

#cloud-config
autoinstall:
  shutdown: reboot

ストレージ設定の定義

システムのインストールで最も重要な側面の 1 つは、パーティショニングのセットアップです。 Ubuntu を対話的にインストールする場合、事前定義されたレイアウトから選択するか、カスタム セットアップを作成できます。自動インストールを実行するときにも同じことができます。利用可能な事前定義レイアウトは、lvmdirect、および zfs です。

lvm レイアウトはデフォルトです。EFI (最新の UEFI システムの場合) とブート標準パーティションを作成し、システムの残りの部分を LVM 論理ボリュームにインストールします。ルート論理ボリュームのサイズはポリシーに従って決定されます。「拡張」(デフォルト) に設定されている場合、論理ボリュームに割り当てられるスペースの量はボリューム グループのサイズによって異なります。可能な場合は、スナップショットを作成できるように、一部のスペースが未使用のまま残されます。

Less than 10 GiB

利用可能なスペースの 100%

Between 10 GiB and 20 GiB

10 GiB

Between 20GiB and 200 GiB

利用可能なスペースの 50%

Greater than 200 GiB

100 GiB

ポリシーが「all」に設定されている場合、代わりに、使用可能なすべてのスペースがルート論理ボリュームに割り当てられます。このコンテキストでは、password キーを使用して LUKS 暗号化を有効にし、暗号化パスワードを指定できます。

#cloud-config
autoinstall:
  storage:
    layout:
      name: lvm
      policy: all
      password: mysecretpassword

直接レイアウトでは、Ubuntu が標準パーティションにインストールされます。 UEFI システムでは、サイズ 1 GiB の EFI パーティションが作成され、残りのスペースがルート パーティションに割り当てられます。

最後に、zfs レイアウトはシステムを ZFS プールにインストールし、いくつかのボリュームを作成します。以下は、Ubuntu の新規インストール後の zfs セットアップのスクリーンショットです。

インストール用のディスクの選択

パーティションのレイアウトに加えて、インストールにどのディスクを使用するかを明示的に設定できます。これは、match キーを使用して行います。パス、ベンダー、モデル、シリアルなどによってディスクを選択できます。キーワードを省略した場合、インストールは使用可能な最大のディスクに実行されます。以下の例では、パス (/dev/vda) によってディスクを選択します。

#cloud-config
autoinstall:
  storage:
    layout:
      name: lvm
      match:
        path: /dev/vda

カスタムレイアウトの作成

カスタム パーティション レイアウトを定義するには、config キーワードを使用します。このキーワードは値としてマッピングのリストを受け入れます。各マッピングは curtin インストーラーのコマンドを記述します。例を見てみましょう。 LUKS セットアップ上の LVM に Ubuntu をインストールし、次のパーティションを作成するとします。

  1. fat32 でフォーマットされた 600 MiB の小さな EFI パーティションが /boot/efi にマウントされます
  2. /boot にマウントされるように ext4 でフォーマットされた 1 GiB のブート パーティション
  3. 残りのスペースにまたがる 3 番目のパーティションは、LUKS で暗号化され、LVM 物理ボリュームとしてフォーマットされます。
  4. / にマウントされる 45 GiB の 1 つの LVM 論理ボリューム
  5. /home にマウントされる 50 GiB の 1 つの LVM 論理ボリューム

ここではどのように進めていきますか。最初に行う必要があるのは、disk コマンドを使用することです。これは、ディスクのセットアップとパーティション テーブルの作成に使用されます。

#cloud-config
autoinstall:
  storage:
    config:
      - id: disk-vda
        type: disk
        ptable: gpt
        path: /dev/vda
        wipe: superblock-recursive

id キーワードを使用して、セクションとコマンドの識別子を提供します。これにより、他のコマンドを使用するときにディスクを参照できるようになります。代わりに、type キーワードを使用して、実行するコマンド (この場合は「disk」) を指定します。

ptable キーが存在する場合、指定されたタイプのパーティション テーブルがディスク上に作成されます。この場合、値として「gpt」を使用しました。 path キーワードは、パス (/dev/vda) によってディスクを識別するために使用されます。

wipe キーワードは非常に重要です。使用すると、ディスクまたはパーティションの内容が破壊されます。使用できる「ワイプ」にはさまざまなタイプがあります: スーパーブロックスーパーブロック再帰ゼロランダム、そしてpvremove。ディスクのスーパーブロックだけをワイプしたい場合はスーパーブロックを使用し、最終的な埋め込みスーパーブロックもワイプしたい場合はスーパーブロック再帰的を使用します(LVMを使用する場合に存在する可能性があります)。 、 例えば)。 zero または random ワイプを使用すると、それぞれゼロまたはランダム データでディスクを上書きできます。最後に、pvremove は、ディスクが LVM セットアップの一部でないことを確認するために、LVM メタデータを明確に消去します。上の例ではスーパーブロック再帰的を使用しましたが、ほとんどの場合これで十分です。

「partition」コマンドによる標準パーティションの作成

次に、ディスク上に 3 つの「標準」パーティションを作成する必要があります。 1 つ目は EFI パーティション、2 つ目は /boot にマウントされるパーティション、3 つ目は LUKS で暗号化され、LVM 物理ボリュームとして使用されるパーティションです。パーティションを作成するには、partition コマンドを使用します。以下の例では、わかりやすくするために現在のコマンドに焦点を当て、以前に使用したコマンドは省略しています。

#cloud-config
autoinstall:
  storage:
    config:
      # [...]

      - id: efipart
        type: partition
        device: disk-vda
        offset: 1048576
        size: 600M
        flag: boot
        grub_device: true

      - id: bootpart
        type: partition
        device: disk-vda
        size: 1G

      - id: pvpart
        type: partition
        device: disk-vda
        size: -1

「efipart」パーティションは最初のパーティションであるため、offset キーワードを使用して、ディスクの先頭から 1MiB の位置に作成されるようにしました (値はバイト単位で指定されます: 1048576)。 flag キーワードを使用して、パーティションに設定するフラグ (この場合は「boot」) を指定しました。最後に、grub_device キーワードを使用して、GRUB がパーティションに確実にインストールされるようにしました。

すべての定義で、パーティションを作成する必要があるディスクを参照するために device キーを使用し、パーティション サイズを指定するために size キーを使用しました。 「pvpart」パーティションの場合、値として「-1」を使用します。これにより、パーティションがディスク上の残りのスペースをすべて占有することが保証されます。

dm_crypt コマンドを使用した暗号化された LUKS ボリュームの作成

次のステップとして、LUKS を使用して「pvpart」パーティションを暗号化します。これを行うには、dm_crypt コマンドを使用します。

#cloud-config
autoinstall:
  storage:
    config:
      # [...]

      - id: pvpart-crypt
        type: dm_crypt
        volume: pvpart
        key: mysecretpassword

dm_crypt コマンドを使用する場合、暗号化するパーティションの識別子を volume キーの値として渡し、key を使用して暗号化パスフレーズを提供します。

LVMボリュームグループと論理ボリュームの作成

LVM ボリューム グループを作成するには、lvm_volgroup コマンドを使用し、devices キーワードを使用してグループに追加する物理ボリュームをリストします。

#cloud-config
autoinstall:
  storage:
    config:
      # [...]
     
      - id: vg0
        type: lvm_volgroup
        name: vg0
        devices:
          - pvpart-crypt

論理ボリュームを作成するには、 lvm_partition コマンドを使用します。 name キーで LV 名を指定し、volgroup の値として LV を作成するボリューム グループと、size でそのサイズを指定します。 キー:

#cloud-config
autoinstall:
  storage:
    config:
      # [...]
      - id: root_lv
        type: lvm_partition
        name: root_lv
        volgroup: vg0
        size: 45G
 
      - id: home_lv
        type: lvm_partition
        name: home_lv
        volgroup: vg0
        size: 50G

パーティションのフォーマット

定義したパーティションにファイルシステムを作成し、そのマウントポイントを設定するには、format コマンドを使用します。 volume キーワードを使用して ID でパーティションを参照し、fstype キーワードを使用して作成するファイルシステムを指定します。

#cloud-config
autoinstall:
  storage:
    config:
      # [...]
    
      - id: efipart_fs
        type: format
        volume: efipart
        fstype: fat32

      - id: bootpart_fs
        type: format
        volume: bootpart
        fstype: ext4

      - id: root_lv_fs
        type: format
        volume: root_lv
        fstype: ext4

      - id: home_lv_fs
        type: format
        volume: home_lv
        fstype: ext4

最後に、 ファイルシステムをマウントする場所を指定するには、mount コマンドを使用します。 device キーを使用して、ファイルシステム ID を指定します。 path の代わりに、そのマウントポイントを使用します。

#cloud-config
autoinstall:
  storage:
    config:
      # [...]
     
      - id: efipart-mount
        type: mount
        device: efipart_fs
        path: /boot/efi

      - id: bootpart-mount
        type: mount
        device: bootpart_fs
        path: /boot

      - id: root_lv_mount
        type: mount
        device: root_lv_fs
        path: /

      - id: home_lv_mount
        type: mount
        device: home_lv_fs
        path: /home

構成を Ubuntu インストーラーに渡す

自動インストール構成ファイル全体の内容は次のとおりです。

#cloud-config
autoinstall:
  version: 1

  source:
    id: ubuntu-server-minimal

  locale: en_US.UTF-8
  keyboard:
    layout: us
  timezone: Europe/Rome

  network:
    version: 2
    ethernets:
      enp1s0:
        dhcp4: true

  identity:
    username: egidio
    hostname: linuxconfig
    password: '$6$mzOdSSVUfhWRNhcX$mkm.drDfOLfpZRX/58ouJqMvitV2O0147VgKzKGYE6Qx4adJ8TXqMHs2dh2L7kT4TW5e97FCRDkGK1J.LouyV.'

  ssh:
    install-server: true
    allow-pw: true
    authorized-keys: []

  packages:
    - git
    - python3-pip

  snaps:
    - name: pycharm-community
      channel: stable 
      classic: true

  shutdown: reboot
  storage:
    config:
      - id: disk-vda
        type: disk
        ptable: gpt
        path: /dev/vda
        wipe: superblock-recursive

      - id: efipart
        type: partition
        device: disk-vda
        offset: 1048576
        size: 600M
        flag: boot
        grub_device: true

      - id: bootpart
        type: partition
        device: disk-vda
        size: 1G

      - id: pvpart
        type: partition
        device: disk-vda
        size: -1

      - id: pvpart-crypt
        type: dm_crypt
        volume: pvpart
        key: mysecretpassword

      - id: vg0
        type: lvm_volgroup
        name: vg0
        devices:
          - pvpart-crypt

      - id: root_lv
        type: lvm_partition
        name: root_lv
        volgroup: vg0
        size: 45G
 
      - id: home_lv
        type: lvm_partition
        name: home_lv
        volgroup: vg0
        size: 50G

      - id: efipart_fs
        type: format
        volume: efipart
        fstype: fat32

      - id: bootpart_fs
        type: format
        volume: bootpart
        fstype: ext4

      - id: root_lv_fs
        type: format
        volume: root_lv
        fstype: ext4

      - id: home_lv_fs
        type: format
        volume: home_lv
        fstype: ext4

      - id: efipart-mount
        type: mount
        device: efipart_fs
        path: /boot/efi

      - id: bootpart-mount
        type: mount
        device: bootpart_fs
        path: /boot

      - id: root_lv_mount
        type: mount
        device: root_lv_fs
        path: /

      - id: home_lv_mount
        type: mount
        device: home_lv_fs
        path: /home

設定を Ubuntu インストーラーに渡すにはどうすればよいですか? Ubuntu のデスクトップ バージョンをインストールする場合、最も簡単で便利な方法は、HTTP または FTP 経由で構成ファイルを利用できるようにし、その URL をグラフィカル インストーラーの適切なセクションに渡すことです。

自動インストール構成ファイルは、対話的に実行された場合でも、Ubuntu をインストールするたびに自動的に作成されます。ファイルは /var/log/installer/autoinstall-user-data として保存されています。このファイルは、インストールを複製するために使用できます。

完全に自動化されたインストールを実行したい場合、または Ubuntu サーバーのインストール時に自動インストール構成を使用したい場合は、cloud-init を利用し、その構成を Cloud-config データ ファイルとして使用する必要があります。これが「#cloud-config」です。自動インストールファイルの一番最初にあるコメントが対象です。

Cloud-init が起動時にファイルを読み取るためには、そのファイルの名前を user-data に変更し、同じディレクトリに meta-data という名前の空のファイルを作成する必要があります。 「e」を押して、ライブ ISO GRUB メニューの最初のエントリを変更します。

次に、「linux」で始まる行を変更し、3 つのハイフンの前に次の文字列を追加します (セミコロンのエスケープが重要です)。

autoinstall ds=nocloud-net\;s=<directory-URL>

は、ユーザー データ ファイルとメタデータ ファイルが含まれるディレクトリの URL です。

この時点で、Ctrl-x を押すだけでインストールが開始されます。

最後に

Ubuntu サーバー 20.04 および Ubuntu デスクトップ 23.04 以降、ネイティブ自動インストール形式を使用して、無人で再現可能なシステム インストールを実行できるようになりました。このチュートリアルでは、自動インストール ファイルの作成方法と、そこで使用できるいくつかのキーについて説明しました。最後に、ファイルを Ubuntu デスクトップおよびサーバーのインストーラーに渡す方法を確認しました。 Ubuntu 自動インストールの完全なリファレンスについては、公式ドキュメントを参照してください。

関連記事: