Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

インストールと設定ガイド

Red Hat Enterprise Linux Atomic Host 7

インストールと設定ガイド

Red Hat Atomic Host Documentation Team

概要

Red Hat のインストールおよび設定ガイド

第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 サイト を参照してください。

第2章 物理インストール

第3章 仮想マシンのインストール

第4章 PXE インストール

第5章 アップグレードおよびダウングレード

RHEL Atomic Host は、オープンソースツールの rpm-OSTree を使用し、起動可能で不変のバージョン管理された RPM コンテンツのファイルシステムツリーを管理します。yum を使用し、従来のパッケージ管理モデルを持つ他の Red Hat Enterprise Linux 7 製品とは異なり、RHEL Atomic Host は OSTree を使用します。RHEL Atomic Host は新たなオペレーティングシステムの root を用意し、これを次回の起動時のデフォルトにすることによりアップグレードされます。

5.1. 新規バージョンへのアップグレード

アップグレードを実行するには、以下のコマンドを実行します。

$ sudo atomic host upgrade
$ sudo systemctl reboot

HTTP プロキシーが必要なシステムを使用している場合は、環境変数でプロキシーを設定できます。環境変数を設定するには、以下のようなコマンドを実行してください。

$ sudo env http_proxy=http://proxy.example.com:port/ atomic host upgrade

5.2. 直前バージョンへのロールバック

Red Hat Enterprise Linux Atomic Host の直前のインストールに戻すには、以下のコマンドを実行します。

$ sudo atomic host rollback
$ sudo systemctl reboot

初回のアップグレード後は、Red Hat Enterprise Linux Atomic Host の 2 つのバージョンがシステムで利用可能になります。1 つ目は現在実行されているバージョンです。2 つ目はアップグレードでインストールされたばかりの新規バージョンか、または直前のアップグレードの前にインストールされていたバージョンのいずれかになります。

重要

設定は複数回のアップデート後も保持されますが、以前のバージョンに戻す場合は保存されません。つまり、設定を変更した後に直前のバージョンにロールバックする場合は、変更した設定が元に戻ります。

注記

atomic host upgrade コマンドを実行すると、Red Hat Enterprise Linux Atomic Host の実行されていないバージョンの置換が実行されます。さらに、このバージョンは次回の起動時に使用されるように設定されます。

実行されているオペレーティングシステムのバージョンを判別するには、以下のコマンドを実行します。

$ sudo atomic host status

/ostree/deploy/rhel-atomic-host/ ディレクトリーにディレクトリーのハッシュ名が含まれる出力は以下のようになります。

$ sudo atomic host status
  TIMESTAMP (UTC)         VERSION   ID             OSNAME               REFSPEC
* 2015-05-07 19:00:48     7.1.2     203dd666d3     rhel-atomic-host     rhel-atomic-host:rhel-atomic-host/7/x86_64/standard
  2015-04-02 20:14:06     7.1.1-1   21bd99f9f3     rhel-atomic-host     rhel-atomic-host:rhel-atomic-host/7/x86_64/standard

この出力例は、次回の再起動時にバージョン 7.1.1-1 が起動することを示しています。次回の再起動時に起動するバージョンは先頭に表示されます。

また、この例ではバージョン 7.1.2 が現在実行中であることを示しています。現在実行中のバージョンにはアスタリスク (*) が付けられます。

この出力は atomic host upgrade コマンドの実行後すぐに作成されました。したがって、新規バージョンは次回の再起動時に適用されるように設定されています。

第6章 アプリケーション例

6.1. Red Hat Enterprise Linux 7 ホストシステム上での Red Hat Enterprise Linux 6 プラットフォームイメージのインストール

6.1.1. 概要

このセクションでは、Red Hat Enterprise Linux 7 を Docker フォーマットのコンテナーのホストシステムとして使用する方法について説明します。サブスクリプションマネージャーツールを使用して Red Hat Enterprise Linux 7 サーバーをインストールし、システムを登録します。

このトピックでは、Red Hat Enterprise Linux 7 サーバーホストシステムのインストール後に Red Hat Enterprise Linux 6 プラットフォームイメージをインストールするステップについて説明します。Red Hat Enterprise Linux のインストール方法についての詳細は、『Red Hat Enterprise Linux 7 インストールガイド』を参照してください。

6.1.2. Docker サービスのインストールおよびプラットフォームイメージの取得

重要

以下の手順は、root ユーザーとして実行する必要があります。

  1. Red Hat Enterprise Linux 7 サーバーをインストールした後に、以下のコマンドを使用してシステムを登録します。

    # subscription-manager register --auto-attach
  2. Docker および docker-registry パッケージを含む RHEL Extras リポジトリーを有効にします。

    # subscription-manager repos --enable=rhel-7-server-extras-rpms
    # subscription-manager repos --enable=rhel-7-server-optional-rpms

    または http://rhn.redhat.com に移動し、ここから RHEL Extras チャンネルをサブスクライブします。

  3. docker パッケージのインストール:

    # yum install docker
  4. docker サービスの有効化および起動:

    # systemctl enable docker
    # systemctl start docker

    以下のコマンドを実行してサービスが実行中であることを確認できます。

    # systemctl status docker
    docker.service - Docker Application Container Engine
       Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled)
       Active: active (running) since Fri 2015-05-22 12:03:34 CEST; 3h 19min ago
         Docs: http://docs.docker.com
     Main PID: 843 (docker)
       CGroup: /system.slice/docker.service
               └─843 /usr/bin/docker -d --selinux-enabled
  5. 以下のコマンドを使用して、Red Hat Docker Registry から Red Hat Enterprise Linux 6 プラットフォームイメージをダウンロードします。

    # docker pull registry.access.redhat.com/rhel6

    以下のコマンドで、システムで利用可能なイメージを一覧表示します。

    # docker images
    REPOSITORY                        TAG      IMAGE ID      CREATED       VIRTUAL SIZE
    registry.access.redhat.com/rhel6  6.6      f5f0b338bbd6  9 weeks ago   155.6 MB
    registry.access.redhat.com/rhel6  latest   f5f0b338bbd6  9 weeks ago   155.6 MB
  6. /etc/redhat-release ファイルの内容を確認し、RHEL6 イメージが RHEL7 ホストシステムにあることを確認します。最初に、ホストシステムで以下を実行します。

     # cat /etc/redhat-release
    Red Hat Enterprise Linux Server release 7.1 (Maipo)

    次に、再びホストシステムからプラットフォームコンテナーイメージを確認します (コンテナーイメージにログインする必要はありません)。

    # docker run rhel6 cat /etc/redhat-release
    Red Hat Enterprise Linux Server release 6.6 (Santiago)

上記は RHEL6 プラットフォームイメージが RHEL7 ホストシステムに正常にダウンロードされ、そのイメージを使用することができることを示しています。

6.1.3. 例: コンテナーに Apache Web Server を構築する

このセクションでは、RHEL6 プラットフォームイメージを使用して Apache Web Server をインストールする方法について説明します。

Dockerfile の確認: 以下のコンテンツを使用して Dockerfile を作成します。

+

# Using RHEL 6 platform image and Apache Web server
# Version 1

# Pull the rhel image from the local registry
FROM rhel6:latest
USER root

MAINTAINER Maintainer_Name

# Disable repos
RUN yum -y install deltarpm yum-utils --disablerepo=*-eus-* --disablerepo=*-htb-* \
        --disablerepo=*-ha-* --disablerepo=*-rt-* --disablerepo=*-lb-* --disablerepo=*-rs-* --disablerepo=*-sap-*

RUN yum-config-manager --disable *-eus-* *-htb-* *-ha-* *-rt-* *-lb-* *-rs-* *-sap-* > /dev/null


# Update image
RUN yum install httpd -y

# Create Apache content
RUN echo "Help! I am trapped inside a container!" > /var/www/html/index.html
EXPOSE 80

# Start the service
CMD ["-D", "FOREGROUND"]
ENTRYPOINT ["/usr/sbin/httpd"]

+ MAINTAINER 行を変更してユーザーの名前を追加します。

  1. コンテナーの構築: Dockerfile を含むディレクトリーから、以下のコマンドを実行します。

    # docker build -t rhel6apache .
  2. コンテナーの起動: コンテナーイメージを起動するには、以下のコマンドを実行します。

    # docker run -d -p 80:80 --name=rhel6apache rhel6apache
  3. インストールのテスト: Web サーバーをテストします。

    # curl http://localhost/index.html
    Help! I am trapped inside a container!

法律上の通知

Copyright © 2018 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.