michihide's blog

技術メモおよび雑感

CLI起動とcron起動の違い

$ cat _server.php
#!/usr/bin/php
<?php
print_r($_SERVER);

このようなPHPスクリプトで挙動を観察してみた。
まずはコマンドラインから起動。

$ ./_server.php
Array
(
    [HOSTNAME] => atlas.example.com
    [TERM] => xterm
    [SHELL] => /bin/bash
    [HISTSIZE] => 1000
    [NLS_LANG] => JAPANESE_JAPAN.AL32UTF8
    [SSH_CLIENT] => 10.28.1.30 62948 22
    [SSH_TTY] => /dev/pts/2
    [USER] => m-hotta
    [LS_COLORS] => no=00:fi=00:di=01;33:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jpg=01;35:*.png=01;35:*.gif=01;35:*.bmp=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.png=01;35:*.mpg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:
    [MAIL] => /var/spool/mail/m-hotta
    [PATH] => /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/sbin
    [INPUTRC] => /etc/inputrc
    [PWD] => /home/m-hotta/lc_view/progs
    [LANG] => en_US.UTF-8
    [SSH_ASKPASS] => /usr/libexec/openssh/gnome-ssh-askpass
    [SHLVL] => 1
    [HOME] => /home/m-hotta
    [LOGNAME] => m-hotta
    [CVS_RSH] => ssh
    [SSH_CONNECTION] => 10.28.1.30 62948 10.27.4.26 22
    [LESSOPEN] => |/usr/bin/lesspipe.sh %s
    [G_BROKEN_FILENAMES] => 1
    [_] => ./_server.php
    [OLDPWD] => /home/m-hotta
    [ORACLE_HOME] => /usr/lib/oracle/10.2.0.3/client/lib
    [PHP_SELF] => ./_server.php
    [SCRIPT_NAME] => ./_server.php
    [SCRIPT_FILENAME] => ./_server.php
    [PATH_TRANSLATED] => ./_server.php
    [DOCUMENT_ROOT] =>
    [REQUEST_TIME] => 1291857301
    [argv] => Array
        (
            [0] => ./_server.php
        )

    [argc] => 1
)

次はこのようなcronを仕掛けて、

m-hotta@gtr:~$ crontab -l
MAILTO=hotta@example.com
HOME=/home/m-hotta
LANG=ja_JP.UTF-8
SUDO=/usr/bin/sudo
RM=/bin/rm
MV=/bin/mv
 */1 * * * * $HOME/lc_view/progs/_server.php

これで飛んできたメールの中身がこれ。

Array
(
   [SHELL] => /bin/sh
   [MAILTO] => hotta@example.com
   [USER] => m-hotta
   [RM] => /bin/rm
   [PATH] => /usr/bin:/bin
   [SUDO] => /usr/bin/sudo
   [PWD] => /home/m-hotta
   [MV] => /bin/mv
   [LANG] => ja_JP.UTF-8
   [SHLVL] => 1
   [HOME] => /home/m-hotta
   [LOGNAME] => m-hotta
   [_] => /home/m-hotta/lc_view/progs/_server.php
   [ORACLE_HOME] => /usr/lib/oracle/10.2.0.3/client/lib
   [PHP_SELF] => /home/m-hotta/lc_view/progs/_server.php
   [SCRIPT_NAME] => /home/m-hotta/lc_view/progs/_server.php
   [SCRIPT_FILENAME] => /home/m-hotta/lc_view/progs/_server.php
   [PATH_TRANSLATED] => /home/m-hotta/lc_view/progs/_server.php
   [DOCUMENT_ROOT] =>
   [REQUEST_TIME] => 1291857241
   [argv] => Array
       (
           [0] => /home/m-hotta/lc_view/progs/_server.php
       )

   [argc] => 1
)

コマンドラインでの実行に比べて、かなり情報が欠落しているのがわかる。
HOSTNAMEやSERVER_NAMEは、必要であればcrontabの中で設定してやる必要がありそう。

独自ドメインからGoogle Groupsに投稿できない

独自ドメイン example.com の MX を Gmail に向けて、すっかり Google 様に
依存した生活になったが、まだ一部問題を抱えていた。このドメインに所属
するアドレス a@example.com から、Google Groups の(たぶん)すべての
グループに投稿ができないというもの。やっと解決したのでメモしておく。
a@example.comGoogle Apps にログインして Google Groups に
投稿すると、以下のようなバウンスメールが返ってくる。

a@example.com

連絡しようとしたグループ(anon-group)が存在しないか、グループに
メッセージを投稿する権限がない可能性があります。
投稿できなかった詳しい理由をいくつか紹介します:

* グループ名のスペルや形式が間違っている。
* グループのオーナーによってこのグループが削除された。
* 投稿する権限を取得するためには、グループに参加する
必要がある。
* このグループでは投稿を受け付けていない。

このグループやその他の Google グループについてご不明な点がありましたら、
http://groups.google.com/support/?hl=ja_US からヘルプセンターに
アクセスしてください。

よろしくお願いいたします。

Google Groups

原因は、全く関係ないテストアドレス b@gmail.com が以前登録してあり、
そこに問題のメールアドレス a@example.com が紐付けられていたせい
であった。Google アカウントの設定の中に「別のメールアドレスを追加する」
という機能があり、ここに a@example.com を設定していたのをすっかり失念
していた。この場合、Google (Groups) 的には b@gmail.com から投稿された
ものと見なされるようだ。b@gmail.com が該当のグループに登録されていない
と、上記のような現象になる。
これを解決するために、別アカウント c@gmail.com で Google Groups に
グループ x@googlegroups.com を登録して挙動を観察した。当該グループ
のページの「メンバー」→「メンバー リストとメンバーの権限を編集」を選ぶと
メンバーリストが表示されるが、そのメールアドレスは一見正しい。問題の
メールアドレスの「編集」をクリックするとその中に表示されるアドレスが一覧に
表示されるアドレスとは異なるため、この原因が判明した。

リポジトリサイトの利用

m-hotta@celsior:~$ sudo yum -y install yum-priorities
m-hotta@celsior:~$ wget http://repos.net-newbie.com/newbie.repo
m-hotta@celsior:~$ sudo mv newbie.repo /etc/yum.repos.d/
m-hotta@celsior:~$ sudo rpm --import http://repos.net-newbie.com/RPM-GPG-KEY-newbie
(enabled=0 にしてあるので、明示的に --enablerepo=newbie をつけないと有効にならない。)
m-hotta@celsior:~$ sudo yum --enablerepo=newbie update
(元々sambaが入っていなかった場合は以下のようにする)
m-hotta@celsior:~$ sudo yum --enablerepo=newbie install samba-client samba-doc samba-swat

サーバー側の動作確認

m-hotta@gaia:~$ ls -l /var/www/repos/
合計 12
 lrwxrwxrwx 1 m-hotta wheel    3  1月 20 15:23 5 -> 5.4
 drwxr-xr-x 4 m-hotta wheel 4096  1月 20 15:25 5.4
 -rw-r--r-- 1 m-hotta wheel 1690  1月 20 15:13 RPM-GPG-KEY-newbie
 -rw-r--r-- 1 m-hotta wheel  363  1月 20 15:36 newbie.repo
m-hotta@gaia:~$ w3m http://repos.net-newbie.com
Index of /

[ICO]        Name          Last modified   Size Description
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 
[DIR] 5/4/               20-Jan-2010 15:25    -
[ ]   RPM-GPG-KEY-newbie 20-Jan-2010 15:13 1.7K
[ ]   newbie.repo        20-Jan-2010 15:36  363
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Apache/2.2.3 (CentOS) Server at repos.net-newbie.com Port 80

リポジトリ作成&パッケージの登録

m-hotta@gaia:$ mkdir -p /var/www/repos/5.4/{,S}RPMS
m-hotta@gaia:/var/www/repos$ ln -s 5.4 5
m-hotta@gaia:~$ cp rpm/RPMS/i386/samba*3.4.5* /var/www/repos/5/RPMS/
m-hotta@gaia:~$ cp rpm/SRPMS/samba-3.4.5-1.src.rpm /var/www/repos/5/SRPMS/
m-hotta@gaia:~$ createrepo /var/www/repos/5/RPMS/
m-hotta@gaia:~$ createrepo /var/www/repos/5/SRPMS/
m-hotta@gaia:~$ cp .gnupg/pubkey.asc /var/www/repos/RPM-GPG-KEY-newbie
m-hotta@gaia:~$ cat > /var/www/repos/newbie.repo <

リポジトリ公開用サイトの作成

m-hotta@gaia:~$ sudo mkdir /var/www/repos
m-hotta@gaia:~$ sudo chown m-hotta /var/www/repos/
m-hotta@gaia:~$ grep -Ew -C 1 Include /etc/httpd/conf/httpd.conf
#
#Include conf.d/*.conf

  • -
NameVirtualHost *:80 Include conf.d/*.conf m-hotta@gaia:~$ sudo cat > /etc/httpd/conf.d/repos.conf <<_EOF_ DocumentRoot /var/www/repos ServerName repos.net-newbie.com CustomLog logs/repos_log combined ErrorLog logs/repos-error_log Options +Indexes _EOF_ root@gaia:~# sudo /sbin/service httpd reload

(repos.net-newbie.com は、別途 DNS で正引きの設定をしておく)