第1章 Atomic Host について

1.1. RHEL Atomic Host ファイルシステム

Red Hat Enterprise Linux Atomic Host は、起動可能で不変のバージョン管理された、RPM コンテンツのファイルシステムツリーを管理するためのオープンソースツール rpm-OSTree (atomic とも呼ばれる) を使用します。現在、これらのツリーは Red Hat によってパッケージから作成されています。rpm-ostree ツールはツリーを自動的に複製します。これにより、アトミックなアップグレードを中心としたアップグレードおよび保守についての戦略を立てやすくなります。ソフトウェアのアップグレードおよび保守に yum ではなく rpm-ostree を使用する点で、Red Hat Enterprise Linux Atomic Host の管理方法は他の Red Hat Enterprise Linux 7 製品と異なっています。

具体的には Red Hat Enterprise Linux Atomic Host を使用する場合、オペレーティングシステムのコンテンツは読み取り専用でマウントされます。アップデートは以下の方法で実行されます。新規の起動可能なファイルシステムツリーが生成され、これはストレージを現在の起動可能なファイルシステムツリーと共有します。古いファイルシステムツリーは、新規のファイルシステムツリーと並行して維持されます。これは、何かの理由で 2 番目のアップグレード後のバージョンが 1 番目のバージョンほど適切でないとされる場合に、ファイルシステムの 1 番目のアップグレード前のバージョンが実行されるバージョンとして自動的に復元されることを意味します。

コンテナーおよびデータを含む、複数のアップグレード後に保持されることが意図されたユーザーファイルは /var/ ディレクトリーに配置する必要があります。オペレーティングシステム自体は /usr/ ディレクトリーに保存され、読み取り専用になります。ls -l / コマンドを使用して root ディレクトリーの詳細なファイルの一覧表示を実行する場合、従来の root レベルのディレクトリーの多くが、これらの 2 カ所の位置のいずれかを参照するシンボリックリンクであることに気づかれるでしょう。たとえば、/home/ ディレクトリーは /var/home/ ディレクトリーのシンボリックリンクです。このディレクトリーは複数のアップグレード後も保持されます。

root (/) ディレクトリーには、/sysroot/ ディレクトリーおよび /ostree/ ディレクトリーの 2 つの新規ディレクトリーがあります。これらのディレクトリーについての詳細は、「Understanding atomic upgrades in Red Hat Enterprise Linux Atomic Host」を参照してください。

1.2. インストール方法

Red Hat Enterprise Linux Atomic Host は複数のフォーマットで配信され、ベアメタル、複数の仮想環境、およびパブリックおよびプライベートのクラウドインフラストラクチャーにインストールできます。

Installation Media の下にある Download ボタンをクリックすると、Red Hat Enterprise Linux Atomic Host Product Page のインストールメディアを見つけることができます。詳細のインストール方法の説明は、『Red Hat Enterprise Linux インストールガイド』を参照してください。

1.3. システム要件

Red Hat Enterprise Linux Atomic Host は、過去 2 年以内に工場で生産された大半のハードウェアと互換性があります。ハードウェアの互換性は、古いシステムをお使いの場合やシステムをカスタマイズした場合にとりわけ重要になります。ハードウェアの仕様はほぼ毎日変更されるため、すべてのシステムの互換性を確認することが推奨されます。サポートされるハードウェアの最新リストについては、「Red Hat Hardware Compatibility List」を参照してください。システム要件の一般的な情報については、「Red Hat Enterprise Linux テクノロジーの機能と制限」を参照してください。

Red Hat Enterprise Linux Atomic Host のランタイム要件は Red Hat Enterprise Linux と同じです。ただし、ベアメタルまたは仮想環境の Anaconda ベースのインストール (インタラクティブ、キックスタート、および PXE) の場合はメモリーが 2GB 必要です。

1.4. RHEL Atomic Host の登録

ソフトウェアアップデートを有効にするには、Red Hat Enterprise Linux Atomic Host インストールを登録する必要があります。これは、以下に説明したとおりに subscription-manager コマンドで実行できます。お使いのシステムは、HTTP プロキシーを使用する必要があるネットワークに置かれます。詳細は、Red Hat ナレッジベースの記事「Red Hat Subscription Manager に HTTP Proxy を設定する」を参照してください。--name= オプションを使用すると、サブスクリプションレコードを表示する際に覚えやすい名前を使用できます。

$ sudo subscription-manager register --username=<username> --auto-attach

注意: Red Hat Enterprise Linux Atomic Host は Red Hat Subscription Manager (RHSM) とのみ連携します。Red Hat Enterprise Linux Atomic Host は RHN とは連携しません。

注意: Red Hat Enterprise Linux Atomic Host を使用するには、製品 ID 271 の Red Hat Enterprise Linux Atomic Host と製品 ID 61 の Red Hat Enterprise Linux Server を登録する必要があります。これらはどちらも同じエンタイトルメントを使用します。

システムが適切に登録されると、以下のように両方の ID が表示されます。

$ sudo subscription-manager list
+-------------------------------------------+
    Installed Product Status
+-------------------------------------------+
Product Name:   Red Hat Enterprise Linux Atomic Host
Product ID:     271
Version:        7
Arch:           x86_64
Status:         Subscribed
Status Details:
Starts:         02/27/2015
Ends:           02/26/2016

Product Name:   Red Hat Enterprise Linux Server
Product ID:     69
Version:        7.1
Arch:           x86_64
Status:         Subscribed
Status Details:
Starts:         02/27/2015
Ends:           02/26/2016

subscription-manager コマンドについては、『Red Hat Subscription Management Guide』の 3.2 「Registering from the Command Line」にも記載されています。

1.5. RHEL Atomic Host の設定

Red Hat Enterprise Linux Atomic Host は、/etc/ ディレクトリーの設定ファイルを使用して、Red Hat Enterprise Linux 7 と同様の方法で設定されます。Red Hat Enterprise Linux Atomic Host は、デスクトップを使用しない最小のサーバー製品です。したがって、GUI で使用されるグラフィカル設定ツールは利用できません。

現時点で Red Hat Enterprise Linux 7 の /etc/passwd ファイルに一覧表示されている一部のシステムユーザーは、読み取り専用の /usr/lib/passwd ファイルに移動しています。Red Hat Enterprise Linux Atomic Host のアプリケーションは Linux コンテナー内で実行されるため、これがデプロイメントに影響することはありません。useradd などの従来のユーザー管理ツールについては、/etc/passwd ファイルにローカルで追加したユーザーを書き込みます。

インストール時にネットワークを設定していない場合は、nmcli ツールを使用し、インストール後に設定することができます。以下のコマンドは、atomic というネットワーク接続の作成、ホスト名のセットアップ、およびその接続のアクティブ化を実行します。

# nmcli con add type ethernet con-name atomic ifname eth0
# nmcli con modify my-office my-office ipv4.dhcp-hostname atomic ipv6.dhcp-hostname atomic
# nmcli con up atomic

nmcli ツールの使用方法についての詳細は、『Red Hat Enterprise Linux 7 ネットワークガイド』の「2.3.2. nmcli を使用したネットワーク接続」を参照してください。

Red Hat Enterprise Linux 7 の設定方法についての詳細は、『Red Hat Enterprise Linux 7 システム管理者のガイド』を参照してください。

1.6. cloud-init のセットアップ

Red Hat Enterprise Linux Atomic Host は cloud-init を使用して、インストールと最初の起動時にシステムを設定します。当初 cloud-init は、クラウドインスタンスの早期の初期化を行うために作成されました。Red Hat Enterprise Linux Atomic Host では、仮想マシンのインストールにも使用できます。

cloud-init で使用されるファイルは YAML フォーマットのファイルです。

注記

マシンを最初に起動した時だけ cloud-init を実行します。ファイルで構文エラーが発生したために cloud-init に失敗した場合や、ユーザーの資格情報など必要なディレクティブがすべて含まれていない場合は、新しいインスタンスを作成して起動する必要があります。新しい cloud-init ファイルを使って失敗したインスタンスを再起動しても 機能しません

以下は、cloud-init で実行される共通タスクの例になります。

  • cloud-init でユーザーを作成する

    cloud-init でユーザーを作成するには、meta-data および user-data の 2 つのファイルを作成し、それらを ISO イメージにパッケージ化する必要があります。

    1. ディレクトリーを作成し、そのディレクトリーに移動します。

      $ mkdir clouinitiso
      $ cd cloudinitiso
    2. meta-data という名前のファイルを作成します。以下の行を meta-data というファイルに追加します。

      instance-id: Atomic0
      local-hostname: atomic-00
    3. user-data という名前のファイルを作成します。以下の行を user-data ファイルに追加します。

      #cloud-config
      password: atomic
      chpasswd: {expire: False}
      ssh_pwauth: True
      ssh_authorized_keys:
        - ssh-rsa AAA...SDvZ user1@domain.com

      注意: 上記の user-data ファイルの最終行は ssh 公開キーです。SSH 公開キーは ~/.ssh/id_rsa.pub にあります。

    4. meta-data および user-data を含む ISO イメージを作成します。

      # genisoimage -output atomic0cidata.iso -volid cidata -joliet -rock user-data meta-data
    5. atomic0cidata.iso という名前のファイルが生成されます。Red Hat Enterprise Linux Atomic Host をインストールするマシンにこのファイルを添付して、ユーザー名を "cloud-user" にし、パスワードは "atomic" にします。
  • cloud-user のパスワードの有効期限を設定し、初回ログイン時にパスワードを変更するように設定する

    "cloud-user" に初回ログイン時にパスワードを変更させるように設定するには、user-data ファイルで 'chpasswd: {expire: False}' 行を 'chpasswd: {expire: True}' に変更します。

    #cloud-config
    password: atomic
    chpasswd: {expire: True}
    ssh_pwauth: True
    ssh_authorized_keys:
      - ssh-rsa AAA...SDvz user1@yourdomain.com
      - ssh-rsa AAB...QTuo user2@yourdomain.com

    password および chpasswd は、とくに指定がない限りデフォルトユーザーで操作するため有効になります。

    注意: これはグローバル設定です。True に設定すると、作成したすべてのユーザー (以下を参照) でパスワードを変更する必要があります。

  • デフォルトのユーザー名を変更する

    デフォルトのユーザー名を cloud-user から変更するには、'user: username' 行を user-data ファイルに追加します。

    #cloud-config
    user: username
    password: atomic
    chpasswd: {expire: False}
    ssh_pwauth: True
    ssh_authorized_keys:
      - ssh-rsa AAA...SDvz user1@yourdomain.com
      - ssh-rsa AAB...QTuo user2@yourdomain.com
  • root パスワードを設定する

    root パスワードを設定するには、user-data ファイルの 'chpasswd' セクションにユーザー一覧を作成する必要があります。一覧のフォーマットは以下のとおりです。空白文字は重要です。一覧に空白を持つパスワードを設定するため、空白文字はコロン (:) のいずれの側にも追加しないでください。この方法でユーザーパスワードを設定する場合は、すべてのパスワード をこのセクションに設定する必要があります。つまり、先頭部分からこのセクションに 'password:'' 行を移動する必要があります。

    #cloud-config
    ssh_pwauth: True
    ssh_authorized_keys:
      - ssh-rsa AAA...SDvz user1@yourdomain.com
      - ssh-rsa AAB...QTuo user2@yourdomain.com
    chpasswd:
      list: |
         root:password
         cloud-user:atomic
      expire: False
  • 初回のシステム設定時にユーザーを追加し、ユーザーオプションを設定する

    ユーザーは user-data ファイルの users セクションに作成され、説明されます。このセクションを追加した場合は、デフォルトユーザーのオプションもここに設定する必要があります。

    users セクションの最初のエントリーは 'default' であるため、デフォルトユーザー cloud-user は、他のユーザーと共に作成されます。デフォルトの行を省略すると、cloud-user は作成されません。

    #cloud-config
    users:
      - default
      - name: foobar
        gecos: User N. Ame
        selinux-user: staff_u
        groups: users,wheel
        ssh_pwauth: True
        ssh_authorized_keys:
          - ssh-rsa AA..vz user@domain.com
    chpasswd:
      list: |
        root:password
        cloud-user:atomic
        foobar:foobar
      expire: False

    注意: デフォルトでは se-linux-user 値がない場合は、ユーザーには unconfined_u というラベルが追加されます。

    注意: この例では、foobar ユーザーを 2 つのグループ ('users' および 'wheel') に置きます。cloud-init 0.7.5 の時点では、グループリストに空白文字を使用することはサポートされていません。詳細は、BZ 1126365 を参照してください。

  • 最初に起動コマンドを実行する

    user-data ファイルの 'runcmd' および 'bootcmd' セクションを使用して、起動時および初期化時に任意のコマンドを実行できます。bootcmd セクションは、初期化プロセスの早い内に実行されます。runcmd セクションは、init によるプロセスの最後の方で実行されます。これらのコマンドはその後の起動のために 保存されず、最初の初期化起動時にのみ実行されます。

    #cloud-config
    users:
      - default
      - name: foobar
        gecos: User N. Ame
        groups: users
    chpasswd:
      list: |
        root:password
        fedora:atomic
        foobar:foobar
      expire: False
    bootcmd:
     - echo New MOTD >> /etc/motd
    runcmd:
     - echo New MOTD2 >> /etc/motd
  • sudoer を追加する

    ユーザーは、sudo および groups エントリーを、以下に示す user-data ファイルの users セクションに追加することによって sudoer に設定できます。

    #cloud-config
    users:
      - default
      - name: foobar
        gecos: User D. Two
        sudo: ["ALL=(ALL) NOPASSWD:ALL"]
        groups: wheel,adm,systemd-journal
        ssh_pwauth: True
        ssh_authorized_keys:
          - ssh-rsa AA...vz user@domain.com
    chpasswd:
      list: |
        root:password
        cloud-user:atomic
        foobar:foobar
      expire: False
  • 静的ネットワーク設定をセットアップする

    'network-interfaces' セクションを meta-data ファイルに追加します。このセクションには、ネットワーク設定オプションの通常のセットが含まれます。

    cloud-init で発生している現在の バグ のために、静的なネットワーク設定は自動的に開始しません。代わりに、デフォルトの DHCP 設定がアクティブになったままとなります。回避策としては、bootcmd ディレクティブからネットワークインターフェースを手動で停止してから再起動することが推奨されます。

    network-interfaces: |
      iface eth0 inet static
      address 192.168.1.10
      network 192.168.1.0
      netmask 255.255.255.0
      broadcast 192.168.1.255
      gateway 192.168.1.254
    bootcmd:
      - ifdown eth0
      - ifup eth0
  • cloud-user を削除し、root 以外のユーザーを持たないようにする

    root ユーザーだけを作成するには、user-data ファイルの 'users' セクションに root エントリーを作成します。このセクションは 'name' オプションと同様に単純です。

    users:
      - name: root
    chpasswd:
      list: |
        root:password
      expire: False

    オプションで、以下のように root ユーザーに SSH キーを設定できます。

    users:
      - name: root
        ssh_pwauth: True
        ssh_authorized_keys:
          - ssh-rsa AA..vz user@domain.com
  • インスタンスで cloud-init を再実行する

    ほとんどの状態では、すでに作成された仮想マシンの設定を変更するために cloud-init を再実行することはできません。

    インスタンス ID を変更 (たとえば、Atomic0 から Atomic1 へ変更) できる環境で cloud-init が使用される場合、インスタンス ID を変更し、cloud-init の再実行のために再起動することで既存の仮想マシンを再設定することができます。これは、cloud-init が完全かつ適切に設定された状態の最初のブートシステムで作成するようにセットアップされることになっているため、実稼働環境では推奨される方法ではありません。

    ほとんどの IAAS 実装では、インスタンス ID を変更することはできません。cloud-init を再実行する必要がある場合、新規のインスタンス ID を取得するには、インスタンスのクローン作成が必要になります。

  • シェルスクリプトを bootcmd および runcmd に配置する

    配置することは可能です。'bootcmd' または 'runcmd' の一覧表示されている値を使用する場合、それぞれの一覧表の項目は 'execve' を使用して実行されます。文字列の値を使用する場合、文字列全体がシェルスクリプトとして実行されます。または、単純に cloud-init を使用してシェルスクリプトを実行する場合、'.yaml' ファイルで cloud-init を指定する代わりにシェルスクリプト (シェバング (shebang)(#!) を使用) を指定できます。

シェルスクリプトを 'bootcmd' および 'runcmd' に配置する方法の例については、この web サイト を参照してください。