8 Ignitionを使用した設定 #
この章では、マシンのセットアップに使用されるIgnitionプロビジョニングツールに関する詳細について説明します。ここでは、マシン定義に使用される必要な設定ファイルの提供方法を学習します。
8.1 Ignitionについて #
      Ignitionは、最初のブート時に仕様に従ってシステムを設定できるプロビジョニングツールです。システムが最初にブートすると、Ignitionはinitramfsの一部としてロードされ、(USBフラッシュディスク上、またはURLを指定できる)特定のディレクトリ内の設定ファイルを検索します。すべての変更は、カーネルが一時ファイルシステムから実際のルートファイルシステムに切り替わる前に(switch_rootコマンドが発行される前に)実行されます。
    
      Ignitionは、JSON形式の設定ファイルを使用します。ファイルはconfig.ignと呼ばれます。
    
8.2 config.ign #
      config.ignはIgnitionを規定するJSON設定ファイルです。JSONで手動でファイルを作成するか、Fuel Ignitionツール(https://ignite.opensuse.org/)を使用して規定の基本セットを生成できます。Fuel Ignitionツールはオプションの完全なセットを提供していないため、ファイルを手動で変更する必要がある場合があることに注意してください。
    
      または、人間が理解できるようにするため、YAMLでconfig.fccファイルを作成し、そのファイルをJSONにトランスパイルすることもできます。詳細については、8.2.2項 「YAML fccファイルをJSON ignに変換する」を参照してください。
    
      ベアメタルにインストールする場合、設定ファイルconfig.ignは、ignitionというラベルの付いた設定メディアのignitionサブディレクトリに存在する必要があります。ディレクトリ構造は次のようになる必要があります。
    
<root directory>
└── ignition
    └── config.ign
      QEMU/KVM仮想マシンを設定する場合は、qemuコマンドの属性としてconfig.ignへのパスを提供します。例:
    
-fw_cfg name=opt/com.coreos/config,file=PATH_TO_config.ign
      config.ignには、オブジェクト、文字列、整数、ブール値、オブジェクトのリストなど、さまざまなデータ型が含まれています。仕様の全詳細については、Ignition
      specification v3.3.0を参照してください。
    
      version属性は必須です。SLE Microの場合、その値は3.3.0またはそれ以前のバージョンに設定する必要があります。そのように設定しない場合、Ignitionは失敗します。
    
      ルートとしてシステムにログインする場合は、少なくともrootのパスワードを含める必要があります。ただし、SSHキーを使用してアクセスを確立することをお勧めします。パスワードを設定する場合は、必ずセキュアなパスワードを使用してください。ランダムに生成されたパスワードを使用する場合は、少なくとも10文字を使用してください。パスワードを手動で作成する場合は、10文字以上を使用し、大文字と小文字、および数字を組み合わせます。
    
8.2.1 設定例 #
        このセクションでは、JSONおよびYAML形式のIgnition設定の一般的な例をいくつか示します。YAML形式で設定を作成する場合は、8.2.2項 「YAML fccファイルをJSON ignに変換する」で説明されているように、設定をJSONにトランスパイルする必要があります。
      
          default mounted directoriesの外部でファイルを作成する場合は、filesystem属性を使用してディレクトリを定義する必要があることに注意してください。
        
version属性は必須です
          バージョン仕様をconfig.ign (バージョン3.3.0以前)にそれぞれ含めます。config.fcc (バージョン1.4.0以前)。
        
8.2.1.1 ストレージの設定 #
          storage属性は、パーティションの設定、RAID、ファイルシステムの定義、ファイルの作成などに使用されます。パーティションを定義するには、disks属性を使用します。filesystem属性は、パーティションのフォーマット、特定パーティションのマウントポイントの定義に使用されます。files属性は、ファイルシステムのファイルの作成に使用できます。先に述べた属性のそれぞれについて、次のセクションで説明します。
        
8.2.1.1.1 disks属性 #
            disks属性は、これらのデバイス上でパーティションを定義できるデバイスのリストです。disks属性には、少なくとも1つのdevice属性が含まれている必要があります。その他の属性はオプションです。次の例では、単一の仮想デバイスを使用し、ディスクを4つのパーティションに分けます。
          
    {
    "variant": "fcos",
    "version": "3.3.0",
    "storage": {
        "disks": [
            {
                "device": "/dev/vda",
                "wipe_table": true,
                "partitions": [
                    {
                        "label": "root",
                        "number": 1,
                        "type_guid": "4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709"
                    },
                    {
                        "label": "boot",
                        "number": 2,
                        "type_guid": "BC13C2FF-59E6-4262-A352-B275FD6F7172"
                    },
                    {
                        "label": "swap",
                        "number": 3,
                        "type_guid": "0657FD6D-A4AB-43C4-84E5-0933C84B4F4F"
                    },
                    {
                        "label": "home",
                        "number": 4,
                        "type_guid": "933AC7E1-2EB4-4F13-B844-0E14E2AEF915"
                    }
                ]
            }
        ]
    }
}YAML形式の同じ例:
variant: fcos
version: 1.4.0
storage:
  disks:
    - device: "/dev/vda"
      wipeTable: true
      partitions: 
        - label: root
          number: 1
          typeGuid: 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709
        - label: boot
          number: 2
          typeGuid: BC13C2FF-59E6-4262-A352-B275FD6F7172
        - label: swap
          number: 3
          typeGuid: 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
        - label: home
          number: 4
          typeGuid: 933AC7E1-2EB4-4F13-B844-0E14E2AEF9158.2.1.1.2 raid属性 #
            raidは、RAIDアレイのリストです。raidの次の属性は必須です:
          
- level
- 特定のRAIDアレイのレベル(linear、raid0、raid1、raid2、raid3、raid4、raid5、raid6) 
- devices
- 絶対パスで参照されるアレイ内のデバイスのリスト 
- name
- mdデバイスに使用される名前 
      {
    "variant": "fcos",
    "version": "3.3.0",
    "storage": {
        "raid": [
            {
                "name": "system",
                "level": "raid1",
                "devices": [
                    "/dev/sda",
                    "/dev/sdb"
                ]
            }
        ]
    }
}YAML形式の同じ例:
variant: fcos
version: 1.4.0
storage:
  - raid: data
    name: system
    level: raid1
    devices: "/dev/sda", "/dev/sdb"8.2.1.1.3 filesystem属性 #
            filesystemには次の属性が含まれている必要があります:
          
- device
- デバイスへの絶対パス。通常、物理ディスクの場合は - /dev/sda
- format
- ファイルシステム形式(btrfs、ext4、xfs、vfatまたはswap) 注記- SLE Microの場合、 - rootファイルシステムはbtrfsにフォーマットされる必要があります。
            次の例は、filesystem属性の使用方法を示しています。/optディレクトリは、/dev/sda1パーティションにマウントされ、btrfsにフォーマットされます。パーティションテーブルは消去されません。
          
{
    "variant": "fcos",
    "version": "3.3.0",
    "storage": {
        "filesystems": [
            {
                "path": "/opt",
                "device": "/dev/sda1",
                "format": "btrfs",
                "wipe_filesystem": false
            }
        ]
    }
}YAML形式の同じ例:
variant: fcos
version: 1.4.0
storage:
  filesystems:
    - path: /opt
      device: "/dev/sda1"
      format: btrfs
      wipe_filesystem: false8.2.1.1.4 files属性 #
            files属性を使用して、マシンに任意のファイルを作成できます。default mounted directoriesの外部でファイルを作成する場合は、filesystem属性を使用してディレクトリを定義する必要があることに注意してください。
          
            次の例では、ホスト名がfiles属性を使用して作成されます。ファイル/etc/hostnameはslemicro-1ホスト名で作成されます。
          
              JSONでは10進数のシステムを使用しているため、mode値はアクセス権の10進数表記です。8進数表記を使用するには、この場合はYAMLを使用します。
            
{
    "variant": "fcos",
    "version": "3.3.0",
    "storage": {
        "files": [
            {
                "path": "/etc/hostname",
                "mode": 420,
                "overwrite": true,
                "contents": {
                    "inline": "slemicro-1"
                }
            }
        ]
    }
}YAMLの同じ例:
variant: fcos
version: 1.4.0
storage:
  files:
    - path: /etc/hostname
      mode: 0644
      overwrite: true
      contents:
        inline: "slemicro-1"8.2.1.1.5 directories属性 #
            directories属性は、ファイルシステムに作成されるディレクトリのリストです。directories属性には、少なくとも1つのpath属性が含まれている必要があります。
          
{
    "variant": "fcos",
    "version": "3.3.0",
    "storage": {
        "directories": [
            {
                "path": "/mnt/backup",
                "user": {
                    "name": "tux"
                }
            }
        ]
    }
}YAMLの同じ例:
variant: fcos
version: 1.4.0
storage:
  directories:
    - path: /mnt/backup
      user: 
       - name: tux8.2.1.2 ユーザ管理 #
          passwd属性は、ユーザを追加するために使用されます。システムにログインする場合は、rootの作成、rootパスワードの設定、および/またはSSHキーのIgnition設定への追加を行います。たとえば、opensslコマンドを使用して、rootパスワードをハッシュする必要があります。
        
openssl passwd -6
          コマンドは、選択するパスワードのハッシュを作成します。このハッシュをpassword_hash属性の値として使用します。
        
variant: fcos
version: 1.0.0
passwd:
  users:
   - name: root
     password_hash: "$6$PfKm6Fv5WbqOvZ0C$g4kByYM.D2B5GCsgluuqDNL87oeXiHqctr6INNNmF75WPGgkLn9O9uVx4iEe3UdbbhaHbTJ1vpZymKWuDIrWI1"
     ssh_authorized_keys: 
       - ssh-rsa long...key user@host
          users属性には、少なくとも1つのname属性が含まれている必要があります。ssh_authorized_keysは、ユーザのsshキーのリストです。
        
root以外の他のユーザの作成
            root以外の他のユーザを作成する場合は、ユーザの/homeディレクトリを定義する必要があります。これらのディレクトリは(通常/home/USER_NAME)デフォルトではマウントされないためです。したがって、storage/filesystem属性を使用してこれらのディレクトリを宣言します。たとえば、tuxの場合、この例は次のようになります。
          
        {
  "ignition": {
    "version": "3.2.0"
  },
  "passwd": {
    "users": [
      {
        "name": "tux",
        "passwordHash": "$2a$10$US9XSqLOqMmGq/OnhlVjPOwuZREh2.iEtlwD5LI7DKgV24NJU.wO6"
      }
    ]
  },
  "storage": {
    "filesystems": [
      {
        "device": "/dev/disk/by-label/ROOT",
        "format": "btrfs",
        "mountOptions": [
          "subvol=/@/home"
        ],
        "path": "/home",
        "wipeFilesystem": false
      }
    ]
  }
}YAMLの同じ例:
version: 1.2.0
passwd:
  users:
    - name: tux
      passwordHash: $2a$10$US9XSqLOqMmGq/OnhlVjPOwuZREh2.iEtlwD5LI7DKgV24NJU.wO6
storage:
  filesystems:
    - device: /dev/disk/by-label/ROOT
      format: btrfs
      mountOptions:
        - subvol=/@/home
      path: /home
      wipeFilesystem: false8.2.1.3 systemdサービスの有効化 #
          systemd属性で指定して、systemdサービスを有効にできます。nameは、有効にするサービスの正確な名前(サフィックスを含む)である必要があります。
        
variant: fcos
version: 1.0.0
systemd:
  units:
  - name: sshd.service
    enabled: true  {
  "ignition": {
    "version": "3.0.0"
  },
  "systemd": {
    "units": [
      {
        "enabled": true,
        "name": "sshd.service"
      }
    ]
  }
}YAMLの同じ例:
variant: fcos
version: 1.0.0
systemd:
  units:
  - name: sshd.service
    enabled: true8.2.2 YAML fccファイルをJSON ignに変換する #
        Ignition設定を人間が理解できるようにするため、2段階設定を使用することができます。最初に、YAMLの設定をfccファイルとして準備し、この設定をJSONにトランスパイルします。トランスパイルは、butaneツールによって実行できます。
      
        トランスパイル中に、butaneはYAMLファイルの構文も検証して、構造内の潜在的なエラーをキャッチします。butaneツールの最新バージョンの場合は、次のリポジトリを追加します:
      
>sudozypper ar -f \ https://download.opensuse.org/repositories/devel:/kubic:/ignition/DISTRIBUTION/ \ devel_kubic_ignition
ここで、DISTRIBUTIONは、次のいずれかです(ディストリビューションによって異なります):
- openSUSE_Tumbleweed
- openSUSE_Leap_$release_number
- 15.a
        これで、butaneツールをインストールできるようになりました。
      
>sudozypper in butane
        次のコマンドを実行して、butaneを呼び出すことができます。
      
>  butane -p -o config.ign config.fcc各要素の説明
- config.fccは、YAML設定ファイルへのパスです
- config.ignは、出力JSON設定ファイルへのパスです
- -pコマンドオプションを使用すると、出力ファイルに改行が追加されるため、読みやすくなります。