2008年12月 7日

Gentooのapacheのconfを書き直す

apache2のconfがだいたい4年以上前に書いたモノだったため、うまくSSLが動作しないようなので、1から書き直すことにした。
躓いた点をいくつか…。

なお、apacheのバージョンはapache 2.2.9である。

まず、インストールしたての設定ファイルでスタートさせるとこんな状態に…

# /etc/init.d/apache2 start

no listening sockets available, shutting down
Unable to open logs
#

これは、以前までvhostを使わずに、http.confに全てを書き込んでいたために生じる問題である。
どうやら2.2以降のgentoo用apacheは、デフォルトサーバの動作を/etc/apache2/vhosts.d/00_default_vhost.confおよびそこにinclude指示がある/etc/apache2/vhosts.d/default_vhost.includeに記述し、デフォルトのvhostとして動作させる仕様のようだ。
しかし、ここを正しく記述したとしても、このデフォルトvhostの設定を有効にしなければならない。

有効にするには、/etc/conf.d/apache2に次の記述を行う

APACHE2_OPTS="-D DEFAULT_VHOST $APACHE2_OPTS

なお、$APACHE2_OPTSはもしすでに何らかの形でAPACHE2_OPTSに変数が入っていた場合、それを引き継ぐ形でここに代入してくれるものだ。

あとは、上記デフォルトvhostに関わる2ファイルを煮るなり焼くなりする。

しかし、この状態ではたとえOptions ExecCGIを入れたとしても、perlなどで書かれたスクリプトが動作しない。
(なぜかC言語で書かれたCGIは動作する。不思議?)

これを直すには、/etc/apache2/modules.d/00_mod_mime.confにハンドラー記述を追加(コメントアウトを外す)する。
ねんのため、plファイルも追加

#AddHandler cgi-script .cgi
AddHandler cgi-script .cgi .pl

(SSIなんかも必要に応じてコメントアウトを外すと良い)


以上で通常動作に耐えうるのではなかろうか?
なお、SSLを使うには、/etc/conf.d/apache2を

APACHE2_OPTS="-D DEFAULT_VHOST -D SSL -D SSL_DEFAULT_VHOST $APACHE2_OPTS"

として、あとは/etc/apache2/vhosts.d/00_default_ssl_vhost.confを必要に応じて編集する。

2008年11月30日

ひさびさにSSLの証明書を作る。

SSLの証明書を作る。
CA局も立てて、自分で自分を証明するようにする。

/etc/ssl/openssl.cnfの設定を書き換える。

dir = /etc/xxx/CA (CA局に関する証明書等を入れるディレクトリを指定)

default_days = 3652
(証明書のデフォルトを10年に)

basicConstraints=CA:TRUE
(CA局の証明書も作るため、TRUEに)

nsCertType = server, sslCA, emailCA
(Netscape向けの設定。どの証明書を作るか。)

/etc/ssl/miscにあるCA.shの中の設定を書き換える。

DAYS="-days 3652"
(証明書の有効期限を10年に)

CADAYS="-days 3652"
(CA局証明書の有効期限を10年に)

CATOP=/etc/xxx/CA
(証明書等作成のディレクトリを指定)

上記のCA.shを実行

# ./CA.sh -newca

CA certificate filename (or enter to create) (Enterを押して新規作成する。)

Making CA certificate ...
Generating a 1024 bit RSA private key
.++++++
..........++++++
writing new private key to '/etc/xxx/CA/private/./xxxxx.pem'
Enter PEM pass phrase:(設定したいパスフレーズを入力)
Verifying - Enter PEM pass phrase:(上と同じパスフレーズを入力)
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:(都道府県名を入れる)
Locality Name (eg, city) []:(市町村名を入れる)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:(団体名を入れる)
Organizational Unit Name (eg, section) []:(配下の組織名を入れる)
Common Name (eg, YOUR name) []:(識別に使う名称を入れる)
Email Address []:xxxx@nns-fact.2y.net(メールアドレスを入れる)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:(そのままEnter)
An optional company name []:(そのままEnter)
(省略)

Write out database with 1 new entries
Data Base Updated

pemファイルをブラウザにインポート可能なder形式に変換。

# cd /etc/xxx/CA
openssl x509 -days 3652 -inform pem -in xxxxx.pem -outform der -out cacert.der

cacert.derは公開し、自分を含め、必要な方にブラウザにインポートしてもらいます。


つづいてサーバ側の証明書作成のお話。

秘密鍵を保存するディレクトリに移動し、秘密鍵を生成。

# cd /etc/xxx/private/
# openssl genrsa -des3 1024 -days 3652 > yyyyy.key
Generating RSA private key, 1024 bit long modulus
....................++++++
...................++++++
e is 65537 (0x10001)
Enter pass phrase:(設定したいパスフレーズを入力)
Verifying - Enter pass phrase:(上と同じパスフレーズを入力)

秘密鍵から認証部分を削除(SMTPでのエラーを防ぐ、まぁ念のため)

openssl rsa -in yyyyy.key -out yyyyy.key
Enter pass phrase for private.key:(先ほど設定した秘密鍵のパスフレーズを入力)
writing RSA key

続いてサーバー証明書(署名要求書)を作成する。

# cd /etx/xxx/csr
# openssl req -new -key ../private/yyyyy.key -out zzzzz.csr -days 3652
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:(都道府県名を入れる)
Locality Name (eg, city) []:(市町村名を入れる)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:(団体名を入れる)
Organizational Unit Name (eg, section) []:(配下の組織名を入れる)
Common Name (eg, YOUR name) []:(識別に使う名称を入れる)
Email Address []:xxxx@nns-fact.2y.net(メールアドレスを入れる)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:(そのままEnter)
An optional company name []:(そのままEnter)

このcsrに先ほど作ったCA局に署名させる。

openssl ca -config /etc/ssl/openssl.cnf -in private.csr -keyfile /etc/xxx/CA/aaaaa/bbbbb.pem -cert /etc/xxx/CA/cacert.pem -out ssl.pem
Using configuration from /etc/ssl/openssl.cnf
Enter pass phrase for /etc/ssl/CA/private/cakey.pem:
Check that the request matches the signature
Signature ok

できたファイルがpem形式なので、公開鍵形式のcrtに変換する。

# openssl x509 -days 3652 -in ssl.pem -out ssl.crt

このままでも良いが、postfixのssl化(将来用)に、ファイルを一つにまとめる。

# (cat ssl.crt ; cat ssl.pem)> ssl_smtp.pem

これでsslに必要な証明書がそろった。

2008年11月29日

sambaにプリンタ関連のエラーログが大量に残る

ログをサマライズしてくれるLogwatchは大変便利ですね。
指定されたログを毎日解析してメールで報告するようにしています。

その中に、Sambaのこんなログが大量に残っていると教えてくれました。

Unable to connect to CUPS server localhost:631 xxxTime(s)

Timesは回数ですが、3桁に達しています。
これでは無駄にログファイルが肥大化しますね。

コレを直すには/etc/samba/smb.confの[global]セクションに次の1行を書くと良いそうです。

printing = bsd

ただ、これだけでは次のようなログが大量に残ります。

Unable to open printcap file /etc/printcap for read!

これは単にprintcapというからファイルを作ればよいだけ

# touch /etc/printcap

プリンタ共有は使わないんだからほっといてよ!って言いたいですね。

2008年11月28日

postfixのバージョンアップ後に外部にメールが送れない

/etc/ssh/sshrcは、全てのsshログイン時に実行されるファイルである。
その中に、ログイン時にはfromアドレスがログインユーザー名になっているメールが私に送られる仕組みになっている。
(sshが万が一乗っ取られると、すぐにわかる仕組みになっている。)

が、postfixのバージョンアップ後にケータイにメールが来なくなった。

postfixにUSE="mailwrapper"をつけてemergeしてもダメ。

/var/log/mail.logを見ると、

Nov 28 02:11:15 gentoo postfix/pickup[11237]: E94769C14D: uid=1000 from=
Nov 28 02:11:15 gentoo postfix/cleanup[11558]: E94769C14D: message-id=<20081127171115.E94769C14D@nns-fact.2y.net>
Nov 28 02:11:15 gentoo postfix/qmgr[6165]: E94769C14D: from=, size=334, nrcpt=1 (queue active)
Nov 28 02:11:15 gentoo postfix/smtp[11560]: warning: smtp_sasl_auth_enable is true, but SASL support is not compiled in
Nov 28 02:11:16 gentoo postfix/smtp[11560]: E94769C14D: to=<00000000000@docomo.ne.jp>, relay=xxxx.dti.ne.jp[202.216.231.000]:587, delay=0.19, delays=0.06/0.01/0.1/0.02, dsn=5.7.0, status=bounced (host xxxx.dti.ne.jp[202.216.231.000] said: 530 5.7.0 Authentication required (in reply to MAIL FROM command))
Nov 28 02:11:16 gentoo postfix/cleanup[11558]: 1FE519C14E: message-id=<20081127171116.1FE519C14E@nns-fact.2y.net>
Nov 28 02:11:16 gentoo postfix/qmgr[6165]: 1FE519C14E: from=<>, size=2168, nrcpt=1 (queue active)
Nov 28 02:11:16 gentoo postfix/bounce[11567]: E94769C14D: sender non-delivery notification: 1FE519C14E
Nov 28 02:11:16 gentoo postfix/qmgr[6165]: E94769C14D: removed
Nov 28 02:11:16 gentoo postfix/local[11568]: 1FE519C14E: to=, relay=local, delay=0.02, delays=0/0.01/0/0, dsn=2.0.0, status=sent (delivered to maildir)
Nov 28 02:11:16 gentoo postfix/qmgr[6165]: 1FE519C14E: removed

どうも、saslサポートが必要らしい。
気を取り直してemergeし直し

# /etc/init.d/postfix stop
# USE="mailwrapper sasl dovecot-sasl" emerge --newuse postfix

こんどはうまく送れました。(ら抜き言葉推奨派)

2008年11月25日

xorg-x11がstarxで起動しない

emerge -u world
を行ってgnomeをバージョンアップしたためか、gnomeどころかXすら起動しない。
ちなみに、GeForce 8600GT 512MBで、nvidia-drivers (nvidia)を利用している。

エラーログはこんな感じ。

(EE) NVIDIA(0): Failed to initialize the NVIDIA graphics device!
(EE) Screen(s) found, but none have a usable configuration.

いろいろ試したが、どう考えてもxorg.confが間違っているようには見えない。

emerge -u nvidia-drivers
を試したら、なにやら "/usr/src/linuxにコンフリクトするようなファイルを上書きしたぜ。 上書きされたくなきゃ、"ごにょごにょ"っていうキーワードを/etc/make.confに書き込みな!" っていうような趣旨の英文が表示された。 っつーか、今更遅いだろ!!

いろいろもがいてやってもダメなので、この、モジュールが悪いのかと思い、モジュールを際コンパイルすることにした。

# cd /usr/src/linux # make modules # make modules_install # /etc/init.d/xdm restart

いままでの試行錯誤がウソのように、すんなりとnvidiaロゴが出て、Xが起動した。

2008年11月24日

gnome-panel-2.22.2のアップデート

gnome-panel-2.22.2のアップデートが失敗する。

panel-applet-frame.c:188: error: expected expression before 'do'

(途中省略)

* The specific snippet of code:
* emake || die "compile failure"
* The die message:
* compile failure

先にlibbonoboをアップデートするとよいそうだ。

emerge -u libbonobo

mesa-progsのアップデート

mesa-progsのアップデートが止まる。一回やったな。忘れてました。
こんなエラーが出ます。

* ERROR: x11-apps/mesa-progs-7.0.1 failed. * Call stack: * ebuild.sh, line 49: Called src_compile * environment, line 716: Called die * The specific snippet of code: * emake glxinfo || die "glxinfo failed"; * The die message: * glxinfo failed

これは、openglのスイッチを変更する必要がある。

eselect opengl set xorg-x11

これでOK。
マージが加能となる。

<続編>

やっぱりダメだった。
あちこちのフォーラムで、上記のopenglスイッチを疑うような書き込みがあり、上記のeselectの他に、readlinkコマンドを使って、シンボリックリンク先を確認するように、とあった。

readlink /usr/lib/libGL.so /usr/lib/opengl /xorg-x11/lib/libGL.so

上記が正しい結果らしいが、私の環境はlibGL.so.1と出た。
まったくの間違いである。
まずは、/usr/lib/libGL.soをrmで削除し、mesaおよびmesa-progsをemergeすることで解決。
(emergeは-uか、一度--unmerge(-C)してからおこなった。)