「apache」でチャットを動かす。 [Apache]
■CGIで動かすチャットを用意する。
|
パーミッションの確認をしておく。
■ファイル情報変更。
|
「nkf -w -Lu --overwrite *.cgi」で正常表示されました。掲示板のCGIでは「-s」でしたが。
ただ、サイトには「アスキー」「バイナリー」でアップロードと指示してあるので、「CentOS」に直接ダウンロードしている当方にはいまいちわかりにくい情報なんですよね。
しかしCGI設置三個目でしたので、流石にミスは一回で済みました。
それにしても懐かしいなーチャットって。
「apache」で掲示板を動かす。 [Apache]
■CGIで動かす掲示板を用意する。
|
というわけで、インターネットで検索し以下のサイト様の掲示板を使わせていただくことにしました。ありがとうございました。
まずは「wget」でファイル名を付けつつダウンロードします。
「unzip」コマンドで解凍し、できあがったディレクトリを「/var/www/html」に移動します。
パーミッション変更という同じ作業が続くので間違いが無いようにチェックしておきます。
■ファイル情報変更。
|
間違えないように、飛ばさないようにパーミッションを指定の数値に変更していきます。
この段階でブラウザで「check.cgi」にアクセスするとエラーがでました。(所有者はそのときapacheに変更して)
これはカウンター設置の時に学びましたが、「改行コード(フォーマット)」のが「dos」であるからです。
前回のカウンターのときは「:set fileencoding=utf-8」などといじってしまうとその後「nkf」コマンドで上書き出来ない状態になってしまったので、今回は注意します。
といいながら、実は今回も苦労しました。
前回の教訓から初めから「nkf -w -Lu --overwrite check.cgi」としたところ、カウンターの時は文字化けしなかったのに、文字化けが発生してしまいました。
色々いじった結果、「vi」コマンドの「:set fileformat=unix」だけ実行することにより正常表示しました。その時の文字コードは「latin1」でした。
これだと、一つ一つファイルを開けて修正しなくてはならないので、面倒です。
続けていじっていると、「nkf -s -Lu --overwrite check.cgi」で正常表示されました。
つまり、カウンターと掲示板では文字コードが「utf-8」と「shift-jis(またはlatin1)」と異なることになります。この辺はまだ勉強が足りなくわからないですね。
最後に、「wforum」ディレクトリを「chown」コマンド「-R」オプションでまとめてapacheにして、「apache」を再起動してアクセスします。
学べたのは、前回の上手くいった手段がそのまま使えるとは限らないと言うことで、毎回初心で望まないといけないということ。ですね。
あと、所有者が異なる所有者のファイルを編集したりするときに「root」権限が必要になるときが多々あるのですが、色々チェックしつつ進めているときは面倒になりますね。
修正することで所有者が変わってしまっていることを失念し、進まなくなってしまったりしました。
注意不足と言えばそうなんですが、「apache」ユーザーでコマンドを打てるようにするか、「bibo-roku」を「apache」グループに追加することで解決できるかな。
あ、あと文字コードやら改行コードの修正が面倒なんですが、「FTPサーバ」を立ててWidowsから「FTPクライアント」でアップロードした方が楽かなぁ。
「apache」でカウンターを動かす。 [Apache]
■CGIで動かすカウンターを用意する。
|
インターネットで検索し以下のサイト様のカウンターを使わせていただくことにしました。ありがとうございました。
http://www.kent-web.com/count/dream.html
まずはダウンロードしましたが、「wget」コマンドで少し手間取ってしまいました。
「wget http://www.kent-web.com/cgi/downld/downld.cgi?id=dream」を実施するとダインロードされるファイルは「downld.cgi?id=dream」となってしまっています。
確認もせずに捨てていましたが、実はこれがファイルでした……。これを「mv」コマンドで変名しても良いのでしょうが、「-O」オプションを付けて初めからファイル名を付けることが出来ました。
次にファイルを「unzip」コマンドで解凍し出来上がった「dream」ディレクトリを説明にあるとおり「public_html」に設置します。
といっても、「public_html」というディレクトリはありません。調べてみると、
レンタルサーバーでホームページファイルをアップロードする場所は、ファイルマネージャーの「public_html」というフォルダになります。
また、この「public_html」は「www」のフォルダとなっていることもあります。
とのこと。つまり文字通りの意味で、公開するHTMLファイルを入れるディレクトリで一番浅いディレクトリというところでしょうかね。当方の場合は「html」でしょう。
ダウンロードして解凍したディレクトリを指定の場所に設置し、各ファイルの所有権を指定通りに設定します。
※当方は今回間違って変更している部分があります。後半で気がつき修正しています。
次に各「cgi」ファイルに「#!/usr/local/bin/perl」を記入(当方と同じだったので変更無し)するためにファイルを「vi」コマンドで開いたのですが、英数字文字以外は全部文字化けしておりコメントアウトしてある説明文は全く読めません。
しかし、いじるところは英数字のところばかりなので問題なく変更。
「apache」を再起動し、説明にあるとおりブラウザでチェックモードの「check.cgi」に直接アクセスするも「Internal Server Error」発生。
「パーミッション」を「755」にするも変化なし。
先日調べた「Internal Server Error」発生の原因リストには、
1.ディレクトリのパーミッション
2.CGI ファイルのパーミッション
3.Perl のパスの違い
4.改行コード
5.UTF-8 の BOMコード
6.文法エラー
7.「モジュール」の不足
8..htaccess の問題
9.Perl のバージョン
これらがあるようなので、当てはまるところを修正していきます。
問題なさそう→1.3.6.9
問題ありそう→4
わからない→5.7.8
ということで、改行コードについて調べてみました。
Unix=LF
Windows=CR+LF
Mac=CR
うーん。よく見かける情報ですが、コピペとか手動でいい加減に修正して其の場凌ぎで対処してきたから全然わかりませんねぇ。
でもまぁつまり「check.cgi」の現状の改行コードを調べて、それが「Unix(CentOS)」用の「LF」であれば良いと言うことですよね。
現状の改行コードを調べてみます。
「vi」コマンドで「check.cgi」を開き、「set fileformat?」とついでに「set fileencoding?」コマンドで調べてみると「fileformat=dos」と「fileencoding=latin1」表示されました。
これはつまりWindowsで「CR+LF」ということですよね。なるほど、こりゃだめです。
***********************下記 禁止事項***********************
ならば、改行コードを「LF」にエンコーディングを「utf-8」にしてやれば良いはずです。
変更後、「apache」を再起動して再度アクセスするも「Internal Server Error」発生。
実はここではまりました。
「vi」コマンドで「set:fileformat=unix」を実施したところ、「check.cgi」にブラウザで直接アクセスしたところ、文字化けは起こすものの「Internal Server Error」が出なくなりました。
じゃぁ、あとは文字化けだけだと、「set:fileencoding=utf-8」を初め色々変えてみたのですが、文字化けは直りません。
調べを進めたところ「nkf」コマンドという文字コートや改行コードを変換してくれるコマンドが存在しました。
「vi」で上手くいかないので「nkf」で変換したところ、やはり文字化けは直りませんでした。
仕方ないので、最初からやり直そうとスナップショットを遡って今度はまず「nkf」コマンドで改行コードと文字コードを変更しました。
「nkf -w -Lu --overwrite check.cgi」そして「apache」を再起動させアクセスすると問題なく動いてくれました。文字化けも直っていました。
その後「vi」のコマンドも使用してみたのですが、はじめに「vi」で「set:fileencoding=」を行ってしまうと、あとで「nkf」を使っても文字化けが直らない現象が起きることが解りました。(多分ですが。自分の環境だけかも。)
つまり、「vi」コマンドでは文字、改行コードは変更せず「nkf」コマンドだけインストールして変更してやれば良いことになります。
大変時間をかけてしまいました。
---追記--- 「vi」の「set: fileformat=unix」は有効でした。実行することにより「Internal Server Error」がなくなり文字化けではあるけど正しいページが表示されます。
次に「文字コード」を直そうと「set:fileencoding=utf-8」を使用するのが間違いとわかりました。(utf-8以外でもだめ)
「文字コード」の修正には「nkf -w --overwrite check.cgi」とします。その前に「set:fileencoding=utf-8」を実行してしまうと。「nkf -w --overwrite check.cgi」が効かなくなってしまうので注意です。(当方の場合では)
改行コード変更=「vi set:fileformat=unix」と「nkf -Lu --overwrite」有効
文字コード変更=「nkf -w --overwrite」有効
「vi」と「nkf」どちらも「改行」「文字」コードをいっぺんに変更できますが、1つずつ変更すると不具合の場合の原因が特定しやすくなると思います。
当方の理解度が低いための現象かも知れませんので悪しからず。
***********************上記 禁止事項***********************
次に「admin.cgi」を自信を持ってアクセスしたのですが、「Internal Server Error」でした。
サイトを巡りまくってようやく「perl-CGI」というモジュールが「掲示板」などのCGIに必要だという記述を見つけました。そして一応入れてみることにして、たまたま解決することができました。まだまだ駄目ですねぇ。
最後にHTMLファイルにカウンターを設置しちゃんと動作するか確認すべく、HTMLファイルに「<img src="dream/dream.cgi?id=index">」を記述し、「apache」の再起動後アクセスするも、テキストは表示されるもののカウンターは表示されず。
「admin.cgi」「check.cgi」という直接接続するCGIには問題なく接続ができるようになったので、気楽に構えていたのですがこれまたはまってしまいました。
結局はパーミッションの問題でした。しかも完全に自分が行った設定が間違いでした。 ディレクトリ「lib」がパーミッション「604」になっていたのです。(今回のびぼーろくの初めにちゃんと間違いが残っている!) 他のパーミッション変更と流れ作業的に行ったのが敗因ですね。お恥ずかしい限りです。
でこれを「707」とか「755」などに変更してカウンターが表示されるようになりました!
このレベルで長時間苦しんで情けない限りです。が、基本的には「パーミッション」「所有権」「モジュールの不足」がトラブルの原因だった。ということを知れたのは収穫でした。次回に生かせると尚良いのだけれど。
「apache」でCGIを動かしてみる。 [Apache]
■「apache」の設定変更。
|
「/etc/httpd/conf.modules.d/01-cgi.conf」を確認すると、「prefork」=「mod_cgi.so」で「event」と「worker」は「mod_cgid.so」ということのようです。
「/etc/httpd/modules」を確認すると両方のモジュールが確認できました。
「/etc/httpd/conf/httpd.conf」の<Directory "/var/www/html">の設定を「ExecCGI」を追記することでこのディレクトリでも「CGI」を利用することができるようになります。
意味はSSIの許可(コマンドExec含む)、CGIの許可、シンボリックリンク許可。
「ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"」は本来「CGI」を置くディレクトリである「/var/www/cgi-bin/」をエイリアスにより「/cgi-bin/」と表記できるようにしています。
アドレスは「http://192.168.0.66/cgi-bin/test.cgi」となります。
コメントアウト解除します。
「AddHandler cgi-script .cgi .pl」と追加して、使用できる拡張子を増やします。
■「apache」でCGIを動かす準備。
|
「/var/www/html」ディレクトリの所有者を「apache」に変更します。
■「apache」でCGIを動かす。
|
しかし「HTML」と「SHTML」は表示されたものの「CGI」はエラーが出てしまいました。前者は表示されるのですから「apache」は一応動いていると思います。
となると、「CGI」を実現させる何かが間違っているのでしょう。「パッケージ」「モジュール」「設定」「所有者」というところでしょうか。
インターネットで検索してみると
ディレクトリのパーミッション
CGI ファイルのパーミッション
Perl のパスの違い
改行コード
UTF-8 の BOMコード
文法エラー
「モジュール」の不足
.htaccess の問題
Perl のバージョン
などがあるようです。調べていきますと、「test.cgi」のパーミッションが「644」でした。「755」に変更します。
表示できました!
表示は出来ましたが、理由が解らないのでこれを機に調べてみます。
パーミッションは以下の表のようになっています。
オーナー | グループ | それ以外 | ||||||
---|---|---|---|---|---|---|---|---|
読み込み | 書き込み | 実行 | 読み込み | 書き込み | 実行 | 読み込み | 書き込み | 実行 |
r | w | x | r | w | x | r | w | x |
4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
まずは「index.html」ですがこれは「644」ですから
「オーナー」→「読み込み」「書き込み」
「グループ」→「読み込み」
「それ以外」→「読み込み」
HTMLファイルは読み込むだけですから、「644」のままでも表示できたということでしょうか。
次に「index.shtml」ですがこれは「644」ですから
「オーナー」→「読み込み」「書き込み」
「グループ」→「読み込み」
「それ以外」→「読み込み」
SHTMLファイルは動的なページと言えるようですが、HTMLに埋め込むだけで使用できるとのことですから、パーミッションも読み込むだけで「644」のままでも表示できたということでしょうか。時間を表示しているので、情報を引き出して(実行して)いるようにも思えるのですが……。
まずは「test.cgi」ですがこれは「644」でしたから
「オーナー」→「読み込み」「書き込み」
「グループ」→「読み込み」
「それ以外」→「読み込み」
CGIはSHTMLと同様に動的なページを作成できますが、埋め込みのタイプではなく、perlに渡して実行し、HTMLを生成する必要があるため、「読み込み」と「実行」が必要なのではないでしょうかね。
そのため、「perl」のパスを間違えたままでアクセスすると、ソースだけ表示されますが、これは「読み込み」だけだからでしょう。
その後色々試してみました。結局のところ「オーナー」は「apache」なので当方の状況でブラウザを見る場合「グループ」と「それ以外」は無関係かもしれません。
ブラウザで見るという行為は「それ以外」が「読み込み」をする物だと思ったのですが。「770」にしても見られるので間違いのようですね。
そして「オーナー」を「1」にしても「Internal Server Error」発生。実行はできても「読み込み」ができていないからでしょう。
「オーナー」を「5」にしてみると案の定表示されました。ただ、HTMLファイルに書き込むようなプログラムの場合「書き込み」も必要となり「7」にしなければならないのではないでしょうか。それとも単にHTMLファイルの編集する権限のことかな。
ちょっと話が逸れてしまいますが、「cat /etc/passwd」にて「apache」のユーザーIDが48ということがわかりました。
次に「ps alx」で「httpd」の付くプロセスのユーザーIDを見てみると「48」でした。
やはりプロセスを動かしている「オーナー」に「7」を付与するのが正しいみたいですね。
apache2.4.12のファイル配置。 [Apache]
apache2.4.12の起動確認。 [Apache]
■「apache」の状態確認。
|
http://westbird.blog.so-net.ne.jp/2015-04-23-1
にて「apache2.4.12」のインストールが完了したので、これが起動しているか「service」コマンドで確認したところ、初めは「sudo」が無いため権限が不足と言われてしまいました。
修正後の結果は「停止」とのことなので起動してみます。
■「apache」を起動。
|
「# chkconfig サービス名 on[off]」で設定可能。
「sudo /etc/init.d/httpd start」コマンドで起動させることが出来ました。
以下アドレスに、ホストOS(Windows8.1)のブラウザ、ゲストOS(CentOS)の「X-Window」の「FireFox」いずれからもアクセス不可。
URL:
http://192.168.0.66/ ←66がホストアドレス。
http://centos/ ←「ホスト名の変更」にて設定。
http://www/ ←「ホスト名の変更」にて設定。
次にホストOSからゲストOSに「ping」を打って確認。
C:\Users\xxxxx>ping 192.168.0.66
双方向からのPINGに問題なし。
■「iptables」の編集。
|
これはルータで言うところの「フィルター」の役目をするファイルのようです。
「-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT」
が確認できました。
書式はさっぱりわかりませんが「22」がSSHのポート番号であることはピンときました。
なので、丸ごとコピーしてポートをウェブ用の「80」に変更して追記しました。
「sudo /etc/init.d/iptables restart」で再起動させることにより、全てのURLで確認が取れました!
最新のApache 2.4.12-5 を yum でインストールする。 [Apache]
■リポジトリの一時的「有効」と「無効」。
|
リポジトリ「IUS」で最新のパッケージを確認したのでこれを利用することにしました。
が、現在
http://westbird.blog.so-net.ne.jp/2015-04-20
で設定したとおり、デフォルトで利用できるリポジトリはID「base」「extras」「updates」だけです。
そしてこれらは今回不要なので、「yum」のオプション「--disablerepo=base,extras,updates」とし無効化します。
次に必要なリポジトリ「IUS」を「--enablerepo=ius」で有効化します。これでインストールを実施します。 するとエラーが発生したので下記でこれに対処します。
■必要なファイルを「yum provides」コマンドで検索する。
|
ゆえに、今後も何かインストールするたびに要求されることと思いますが、そのパッケージが名前の通りのものであれば楽ですが、何かのパッケージ内にしか存在しない場合などもあるようで、その場合にパッケージを検索するのに「yum」のオプション「provides」が使えます。
今回は「mailcap」をインストールすることで「mime.types」もインストールされました。
■最新の「apache 2.4.12-5」を「yum」でインストールする。
|
■「httpd-devel」をインストールする。
|
■最新の「httpd-manual」をインストールする。
|