コラム/第3回 RHEL7でWEBサーバーを起動してみよう

Hitachi Solutions

2014年10月3日

第3回 RHEL7でWEBサーバーを起動してみよう

Red Hat Enterprise Linux

今回は、先日リリースされたRed Hat Enterprise Linux 7 (以降、RHEL7)について、WEBサーバーの起動までに必要な作業を例に、これまでのバージョンとの違いやRHEL7の特徴について紹介します。

RHEL7の変更点概要

RHEL7での主な変更には、次のようなものがあります。

  • kernelは3.10となります。Fedora 19をベースにしています。
  • アーキテクチャは64bitのみとなりました(32bitライブラリ有り)。
  • ブートローダがgrub2になりました。
  • デフォルトのファイルシステムがext4からxfsに変更になりました。
  • 起動処理がinitからsystemdに変更になりました。
  • net-toolsがデフォルトでインストールされなくなりました。
    ifconfig、route、netstatなどのコマンドはデフォルトでは利用できません。 iprouteパッケージを利用してください。

    ※net-toolsパッケージをインストールすることで、従来のコマンドも利用可能です

  • デフォルトのファイアウォールがfirewalldになりました。
    従来のiptablesの選択も可能です。
  • rhn_registerコマンドがなくなりました。
    subscription-managerを利用してください。

システム管理者の立場から戸惑いが大きいのは、systemdへの変更と net-toolsがインストールされないことだと思いますので、この点は予め抑えておきましょう。

RHEL7にパッケージングされている主なソフトウェア

RHEL7にパッケージングされている主なソフトウェアとバージョンは次のとおりです。

  • apche httpd 2.4.6
  • Squid 3.3.8
  • bind 9.9.4
  • MariaDB 5.5.35
  • PostgreSQL 9.2.7
  • postfix 2.10.1
  • dovecot 2.2.10
  • cyrus-impd 2.4.17
  • samba 4.1.1
  • OpenLDAP 2.4.39
  • OpenJDK 1.7.0.51
  • Perl 5.16.3
  • PHP 5.4.16
  • Python 2.7.5
  • Ruby 2.0.0.353
  • GCC 4.8.2
  • glibc 2.17

MySQLがなくなり、MariaDBに変更になっています。 また、DevOpsとして注目度の高いDockerが正式サポートされています。 dockerを利用する場合、rhel-7-server-extras-rpmsチャネルをサブスクライブしてください。 デスクトップはGNOME Classicが標準となります。

RHEL7のインストール

前置きが長くなりましたが、WEBサーバーを稼働させるために、セットアップをしていきます。

インストーラは大きく変更されていますが、特に戸惑うことはないと思います。デフォルトでは最小構成でインストールされます。 GUIを利用する場合、構成を変更するか、インストール後にパッケージを追加します。
補足になりますが、rootユーザのパスワードを設定する際に良好なパスワードを設定するためには、パスワード長を13文字以上にする必要があります。

ネットワークの設定

OSのインストール時にネットワークの設定を実施していれば問題ありませんが、 ネットワークの設定はインストール後に実施するということも多いと思います。 ここで、RHEL7特有の事象として、ifconfigコマンドがなくて、驚くという事象が発生します。 net-toolsパッケージをインストールしてもよいのですが、このパッケージは 将来的に廃止される可能性が高いので、iprouteパッケージの使い方も覚えておきましょう。

RHEL6では停止することが多かったと思われるNetworkManagerは、RHEL7では推奨となっているようです。 NetworkManagerを利用すると、Network関連の設定(IPアドレス、ホスト名、DNS、ルーティング)が一元管理できるようになります。 NetworkManagerを利用したネットワークの設定は、nmtui(CUIベースのUIによる設定)もしくはnmcliコマンド(コマンドベース)で 行います。

ホスト名の定義ファイルは、/etc/sysconfig/network から /etc/hostname に変更になっています。/etc/hostnameの設定はhostnamectlコマンドを利用します。 DNSの設定はNetworkManagerで設定します(ifcfg-xxx ファイルに記載します)。

サブスクリプションの登録

インターネットからソフトウェアをインストールしたりアップデートする際は、 サブスクリプションの登録が必要です。

RHEL6では従来型のRHN Classicとsubscription-managerの両方が利用できましたが、 RHEL7では、subscription-managerに一本化されました。 システムの登録は、subscription-manager registerとattachを利用してください。 システムの登録は次のコマンドで行います。RHNIDとパスワードが必要となるので、事前に準備しておいてください。

# subscription-manager register

登録が完了すると、次のコマンドで利用可能なサブスクリプション一覧を表示できます。

# subscription-manager list --available

リストされた一覧からプールIDを選択し、次のコマンドでアタッチします。

# subscription-manager attach --pool

これで、Red Hat Networkからyumを利用したパッケージのインストール/アップデートができるようになります。

httpdのインストール

httpdのバージョンは2.2系から2.4系に変更となっています。 基本的な設定は2.2の時と同様です。

次のコマンドを実行してhttpdパッケージをインストールします。

# yum install httpd

インターネットに接続できない環境であれば、 RHEL6と同様にインストールDVDを利用してローカルリポジトリを作成することで、yumを利用できます。 ローカルリポジトリは、/etc/yum.repos.d/local-media.repoのようなファイルを作成して定義します。
以下はローカルリポジトリの定義例になります。 インストールDVDを/mntにマウントしています。

[rhel7]
name = rhel7
baseurl = file:///mnt
enabled = 1
gpgcheck = 1

systemdの設定

それではhttpdを起動してみます。

# service httpd start

起動できますが、「Redirecting to /bin/systemctl start httpd.service」といったメッセージが 画面に表示されると思います。 RHEL7ではサービスの起動処理がsystemdに変更になっていることによるものです。 serviceコマンドやchkconfigコマンドはsystemdのコマンドにリダイレクトされるようになっていますが、 将来的に廃止されると考えられますので、systemdの使い方を覚えておきましょう。

従来、chkconfig --add/del にて実施していたサービス起動の設定は、 systemctl enable/disable を実行することで行います。
たとえば、Apache HTTP Serverの自動起動を有効にする場合、次のコマンドを実行します。

# systemctl enable httpd.service
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'
#

自動起動を有効にした場合、内部的には、画面に表示されるコマンドが実行されています。 /usr/lib/systemd/system/httpd.service ファイルはsystemdにおけるhttpdサービスの設定ファイルです。
/etc/systemd/system/multi-user.target.wants/にリンクを作成すると、 multi-userという名称のUNIT群(.targetはUNITをグルーピングしたものと考えてください)の前提UNITという形で定義されます。 ここで、multi-userというUNITはこれまでのrunlevel 3 に相当するUNITです。 なお、runlevel 5 に相当するUNITは graphical になります。

起動が有効になっているサービスの一覧は次のコマンドで確認できます。

# systemctl -t service

少し話がそれますが、従来のrunlevelの設定は/etc/systemd/system/default.target で指定します。

# ll /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 36 8月 12 13:13 /etc/systemd/system/default.target ->
/lib/systemd/system/graphical.target
#

若干まわりくどいですが、graphical.targetには、Requires=multi-user.target という記述があり、 そこからhttpd.serviceが呼ばれることでhttpdが起動します。

これまで、chkconfigで指定していた各サービスの起動順序はUNITのBefore、Afterで指定します。 httpdの例では、After(自分より先に起動するもの)として、次のように定義されています。

After=network.target remote-fs.target nss-lookup.target

runlevelの変更もsystemctlコマンドで実行します。
従来のrunlevel 3相当に変更する場合、次のコマンドを実行します。

# systemctl set-default multi-user.target
rm '/etc/systemd/system/default.target'
ln -s '/usr/lib/systemd/system/multi-user.target' '/etc/systemd/system/default.target'
#

firewalldの設定

最後にHTTPの通信を許可するよう、firewalldの設定を実施します。
RHEL7ではデフォルトのファイヤウォールがiptablesからfirewalldに置き換えられています。 firewalldはiptablesコマンドをを利用しますが、firewalldとデーモンとしてのiptablesを併用することはできません。 firewalldではなくiptablesを利用してもよいのですが、今回はfirewalldを利用します。
firewalldでは、ネットワークインタフェースにゾーンを割り当てることで、設定を行います。 初期状態で予め9つのゾーンが作成されています。 デフォルトでは、publicゾーンが有効になっており、 dhcpv6-clientとsshのみが有効になっています。
ゾーンの一覧は次のコマンドで確認できます。

# firewall-cmd --list-all-zones

これらの定義は/usr/lib/firewalld/zones以下にxml形式で保管されています。 設定を変更する際は、/etc/firewalld/zones以下に にファイルをコピーして修正するか新規に作成します。 firewalldではゾーンに対して、有効にするサービスを定義していきます。 サービスは予めいくつか定義されており、定義されているサービスの一覧は次のコマンドで確認できます。

# firewall-cmd --get-services

これらの定義もゾーンファイルと同様に、/usr/lib/firewalld/services以下にxml形式で保管されています。 設定を変更する際は、/etc/firewalld/services にファイルをコピーして修正するか新規に作成します。
httpサービスのデフォルトの定義は次のようになっており、80/tcpの定義が記載されています。



<?xml version="1.0" encoding="utf-8"?>
<service>
 <short>WWW (HTTP)</short>
 <description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server
publicly available, enable this option. This option is not required for viewing pages locally or
developing Web pages.</description>
 <port protocol="tcp" port="80"/>
</service>
              

HTTPの通信を許可するためには、次のコマンドを実行します。変更を永続化するため、--permanetオプションを指定しています。

# firewall-cmd --add-service=http --zone=public --permanent
success
#

次のコマンドを実行し、通信が許可されたことを確認します。

# firewall-cmd --list-services --zone=public
dhcpv6-client http ssh
#

これで外部からのHTTP通信が許可されるようになりました。 外部からブラウザでhttp://<サーバーのIPアドレス> にアクセスし、 テストページが表示されることを確認してください。

最後に

今回はApache HTTPD Serverのインストールを例として、RHEL7のインストールからApache HTTPD Server を公開するまでの手順を RHEL7の変更点を中心に紹介しました。

RHEL7では、systemdをはじめとして、システム管理者が意識しておかないといけない大きな変更がいくつか存在しています。 サードパーティ製のソフトウェアの対応状況にもよりますが、今後はRHEL7が中心となってきますので、変更部分はしっかりと抑えておくようにしましょう。

著者紹介

株式会社日立ソリューションズ
社会インフラ基盤本部 第2部 山本 慎悟

Red Hat コンテンツ一覧

関連商品・キーワード