いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! Linux システム管理 / Vol.145 / 読者数:1328名

こんばんは、うすだです。

先週、実家に帰ったところ、オール電化になっていました。

安い深夜電力を使ってお湯を沸かす電気温水器があり、たね火をつけなくても、 蛇口をひねるだけでお湯が出るということに、少し驚きました。

お湯を使おうとするたびに、たね火はついてるんだっけ? あ、いらないんだっけ? という確認を、脳内でこっそり行う必要がありました。

どうも、お湯を使うにはたね火をつけて、寝る前にたね火を消す、という固定観念が、 頭にべっとりと染み着いているようです。

しかし、そういった、当り前だと思っている不便なことを、当り前だとは思わず、 解決する手段を考えることが、人類の進歩のために必要ではないかなと、 いまさらではありますが、気づいた次第です。

まずは、技術者にとっては当り前だけど、 一般のひとにとっては不便だと思われていることに気づいてみよう、と思いました。

あいかわらず思ってばっかりですが、今回も、はりきってまいります。

今回のお題 - いまさらだけど Apache を動かしてみる

わたしが普段使用しているマシンの Apache は、 バージョンが未だに 1.x だったのですが、先日、ようやく 2.x に上げました。

Apache の設定なんて、1.x だろうが 2.x だろうが変わらんだろうとか、 NCSA httpd のころからやっているから余裕だぜ、などと思っていましたが、 同程度に動作するまで、結構な試行錯誤を繰り返してしまいました。

そんな試行錯誤の際にふと思ったのは、脱初心者を目指すかたにとって、 Apache を設定して動かすことが、意外と難しいことなのかもしれない、 ということでした。

というわけで今回は、いまさらのようにも思われますが、 Apache を設定して動作させるまでの手順を、ご紹介したいと思います。


まずは、いまある設定ファイルを雛型にして、 一般ユーザ(つまり自分)の権限で動かしてみたいと思います。
(すでに Apache が稼働中のマシンでも、試すことができると思います。)

ですので、自分のホームディレクトリの下に httpd というディレクトリを作成し、 その下に必要なもろもろを詰め込んでいきたいと思います。
以下は、ユーザ usu の場合の例です。

  /home/usu/httpd/                いわゆる ServerRoot
            +-- conf/httpd.conf   設定ファイル
            +-- conf.d/           ダミーの設定ファイル置き場
            +-- html/             コンテンツ置き場
            +-- logs/             ログファイル置き場
            +-- run/              PIDファイル置き場

そして、今回は、以下のような環境を想定して、話を進めていきます。
もちろん、下記と完全に一致する環境をご使用ではないと思いますので、 ご自身の環境で試される際には、適時読みかえてくださいませ。

  ユーザ:     usu
  グループ:   users
  IPアドレス: 192.168.1.225
  ポート:     65080  (万が一使用中なら、別の番号をご使用ください)

ちなみに、Fedora9, Ubuntu8.04, Vine4.2 の上で、動作確認しました。


最初に、最低限的な設定を行ってみたいと思います。

まずは、必要なディレクトリを作成します。

  $ mkdir -p ~/httpd/conf
  $ cd ~/httpd
  $ mkdir conf.d html logs run

Fedora や Vine なかたは、 ServerRoot の直下に modules ディレクトリが必要になりますので、 下記のようにシンボリックリンクを作成します。

  $ ln -s /etc/httpd/modules    (Fedora の場合)
  $ ln -s /etc/apache2/modules  (Vine の場合)

そして、既存の設定ファイルをコピーします。
Ubuntu の場合、設定ファイルが複数ありコピーが大変ですので、 Apache 純正と思われる設定ファイルを雛型にして、お茶を濁したいと思います。

  $ cp /etc/httpd/conf/httpd.conf conf/httpd.conf  (Fedora の場合)
  $ cp /etc/apache2/conf/httpd.conf conf/httpd.conf  (Vine の場合)
  $ zcat \
  /usr/share/doc/apache2.2-common/examples/apache2/apache2.conf.gz \
  > conf/httpd.conf  (Ubuntu の場合)

以上で、最低限のファイルが揃ったことになると思います。
では次に、設定ファイルを書き換えます。
普段ご使用のエディタ(gedit とか emacs とか vi とか)で設定ファイルを開き、 下記に該当するディレクティブを書き換えてください。

  ServerRoot "/home/usu/httpd"
  Listen 192.168.1.225:65080
  PidFile run/httpd.pid
  User usu
  Group users
  ServerAdmin usu@usupi.org
  ServerName www.usupi.org
  DocumentRoot "/home/usu/httpd/html"
  ErrorLog logs/error_log
  CustomLog logs/access_log combined
  TypesConfig /etc/mime.types

ServerAdmin と ServerName は、それぞれ、ご自身のメールアドレスと、 適当なサーバ名をご指定ください。

それから、DocumentRoot が以下のようになっていたとしますと、

  DocumentRoot "/var/www/html"

その後方に、以下のような行があると思います。

  <Directory "/var/www/html">

見つかりましたら、これを、本物の DocumentRoot のパスに変更します。

  <Directory "/home/usu/httpd">

また、もし下記のようなモジュールを使用する行がありましたら、 先頭に # を挿入してコメントアウトしてください。

  LoadModule cgid_module modules/mod_cgid.so
  LoadModule suexec_module modules/mod_suexec.so

最低限的な設定は、おそらく以上です。


それではいよいよ、Apache を動かします。

…の前に、変更した設定ファイルの記述が間違っていないか、 確認をしておきましょう。
httpd を -t オプションつきで実行しますと、設定ファイルを確認して、 結果を出力した後、サービスを開始せずに終了します。
ですので、以下のように、-f オプションで設定ファイルを指定し、 実行してみてください。

  $ /usr/sbin/httpd -f ~/httpd/conf/httpd.conf -t
  Syntax OK

あ、Ubuntu や Vine の場合は、httpd ではなく apache2 です。

  $ /usr/sbin/apache2 -f ~/httpd/conf/httpd.conf -t
  Syntax OK

とはいえ、毎回並列して記述すると、見にくくなりますので、 Ubuntu や Vine なかたは、httpd を apache2 だと思って、以降をご覧ください。

さて、上記のように、Syntax OK と言われれば、とりあえず合格です。
Syntax OK ではなく、たとえば、

  $ /usr/sbin/httpd -f ~/httpd/conf/httpd.conf -t
  httpd: Syntax error on line 99 of /home/usu/httpd/conf/httpd.conf: \
  Cannot load /etc/apache2/modules/mod_ssl.so into server: \
  /etc/apache2/modules/mod_ssl.so: cannot open shared object file: \
  No such file or directory

のように言われた場合、mod_ssl.so がないようですので、 該当する行をコメントアウトします。(上記では、99行目だとおっしゃっていますね。)


さて、試行錯誤の末、Syntax OK と言ってもらえたなら、 今度こそ動作をさせてみましょう。以下のように、-k start を付加して実行します。

  $ /usr/sbin/httpd -f ~/httpd/conf/httpd.conf -k start

すると、httpd(もしくは apache2)が動き出す…はずです。

  $ ps ux | grep httpd  (あるいは apache2)
  usu   9192   1  0 00:08 ?   00:00:00 /usr/sbin/httpd -f ...
  usu   9200   1  0 00:08 ?   00:00:00 /usr/sbin/httpd -f ...
  usu   9201   1  0 00:08 ?   00:00:00 /usr/sbin/httpd -f ...
  ...後略

もし動いていないようでしたら、logs/error_log を見てください。
動かない理由がエラーログに吐かれているはずですので、 それを見て原因を探ってみてください。
(検索などしてもわからなかったら、ご連絡ください。 一緒に悩むくらいのことはできるかもしれません。)


無事、httpd(あるいは apache2)が動き出しましたら、 最寄りのブラウザでアクセスして、httpd が動作していることを確認します。

おっとその前に、~/httpd/html/ の下に、 適当な HTML ファイルを置いておきましょう。見当たらなければ、 以下のようにしてでっちあげます。
(適当過ぎますが、動作確認のためと思って、割り切ってくださいませ。)

  $ cat > ~/httpd/html/index.html << E-O-F
  <html><body><p>Hello World!</p></body></html>
  E-O-F

そして、最寄りのブラウザで、以下にアクセスします。

  http://192.168.1.225:65080/

index.html が、先ほどのいい加減なものでしたら、 Hello World! とだけ表示されると思います。
なにも表示されなかったり、エラー的なものが表示されたら、 エラーログ(logs/error_log)になにか出力されていますので、確認してください。

あるいは、無応答の場合、 ファイアウォール(iptables)によってブロックされている可能性があります。
そんなときは、root の権限で iptables -L を実行してみてください。
それっぽいものが出力されますと、その可能性が高いです。

  # /sbin/iptables -L

共用のマシンやサーバでなければ、ファイアウォールを止めてしまうことで、 ブロックされないようにできます。乱暴な方法ですが…。

  # /etc/init.d/iptables stop

いまは止めてもいいけど、長期的に止めるのがまずい場合は、一旦止めた後、 /etc/sysconfig/iptables の REJECT の前に以下を挿入しておくと、 次回 iptables が有効になったとき、65080 へのアクセスが許可されると思います。 (ルールによってはうまくいかないかもしれませんので、 その際にはご連絡いただけますと、一緒に悩めるかもです。)

  -A INPUT -m state --state NEW -m tcp -p tcp --dport 65080 -j ACCEPT

共用的なマシンの場合は、システム管理者のかたにご相談ください。


一通り動作を確認して必要なくなったら、以下を実行して httpd を停止させましょう。 以下のように、-k stop を付加して実行します。

  $ /usr/sbin/httpd -f ~/httpd/conf/httpd.conf -k stop

石橋を叩かれる貴兄は、上記の後、ps コマンドでご確認ください。

  $ ps ux | grep httpd  (あるいは apache2)

以上、Apache の最低限的設定と、動作確認の手順を、ご紹介しました。

今回は、すでに十分長くなってしまいましたので、 最低限動作するところで終わってしまいました。
もし、ものすごく不評でなければ、次回は CGI を動かしたり、 Basic なアクセス制限をかけてみたりなどしてみたいと思います。

ファイアウォールによる制限さえなければ、一般ユーザのかたでも試せると思います。 ぜひ、お試しくださいませ。

宿題の答え

前回の宿題は、

  テキストファイル(*.txt)の文字コードを EUC-JP に変換したファイル
  (*.euc.txt) を、作成してください。

でした。

nkf コマンドで変換するなら、-eオプションを使用すればよいですので、 以下のように、一気に変換できると思います。

  $ for file in *.txt; do
  > nkf -e $file > ${file%.txt}.euc.txt
  > done

iconv コマンドの場合は、 元のテキストファイルの文字コードを指定する必要があります。たとえば、 元の文字コードが JIS なら、以下のように変換すればよいと思います。

  $ for file in *.txt; do
  > iconv -f ISO2022JP2 -t EUCJP $file > ${file%.txt}.euc.txt
  > done

…あ、特にひねりもなく、簡単な宿題でしたね。

ちなみに、もし作成するファイル名を間違えてしまったら、 同様の手順で戻すという方法も、アリではないかと思います。
たとえば、以下のように、 サフィックスの .txt を取り除いたファイル名で変換してしまった場合、

  $ for file in *.txt; do nkf -e $file > ${file%.txt}; done

mv コマンドで、正しいファイル名に改名してあげればよいと思います。

  $ for file in *.txt; do mv ${file%.txt} ${file%txt}euc.txt; done

ただ、間違えたファイル名の末尾が .txt の場合、それらも改名しようとしますので、 エラーメッセージが出力されてしまいます。

今回の宿題

今回の宿題は、

  Listenディレクティブで、IPアドレスを指定した場合と指定しない場合
  の違いを、確認してみましょう。

です。

デフォルトの設定ファイルは、Listen 80 と記述されていて、 IPアドレスが明記されていません。
かたや、今回の設定例では、IPアドレスを明記しています。
その違いがなにか、netstat コマンドなどを用いて、探してみましょう。

あとがき

最近、子どもの言動に、イラっと来ることがあります。

いえ、イラっとさせられるのは前からなのですが、ここ最近の数週間で、 その頻度が急上昇しています。
しかも、注意すると、こちらの怒りを増長するような言動で返されることが多いため、 ついドカーンと怒りを爆発させてしまいます。

しかし、たとえ、子どものほうが 100% 悪かったとはいえ、 やみくもかつ一方的に叱ったり説教したりすることが、 問題の解決につながるわけではないですよね。 逆に、解決から遠ざかってしまいそうです。

子どもだって、なにか理由があってそうしたのですから、 瞬間沸騰的激怒で反応するのではなく、 きちんと言い分を聞いてあげる必要があるなあと思いました。 (怒る前に10数えろ、というやつですね。)

そして、それをわが身に置き換えますと、上司から、 理不尽なことで叱咤されることがあったら、 自分の言動が怒りに火をつけたのかもしれないと思って、 感情に流されて反発するのではなく、反省しようと思いました。

…というか、もう38歳なのに、こんなことを言っているようではいけないですよね。 いまだに指導する後輩がいないということに、 危機感を感じるべきではないかという気がしております。ふー。

 

今回も、ここまで読んでいただき、ありがとうございました。
それでは、次回は 10月5日(日) 頃に、お会いしましょう!

 

「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」−この時期はがんばって栗の絵を描いていきますよ。
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本