UJP - 技術情報1

Life is fun and easy!

不正IP報告数

Okan Sensor
 
メイン
ログイン
ブログ カテゴリ一覧

qmailをRedHat ES3.0にインストールする

qmailをRedHat ES3.0にインストールする


0.改訂履歴

  • 2005.08.15 新規作成
  • 2005.09.29 コピペで動くように,useradd,groupaddコマンドをフルパスで記述した.
  • 2005.11.14 さらにコピペしやすくした.
  • 2006.02.15 localtimeパッチのダウンロード先を変更.
  • 2006.02.23 aliasを作成するときの手順を楽にした.
  • 2006.03.06 UID,GIDを指定するようにした.
  • 2006.07.03 誤字修正

1.はじめに

 このドキュメントでは,RedHat ES3.0に,qmailをインストールしてメールの送受信を行うまでの手順を説明する.

 バグやセキュリティホールの多いsendmailに対抗する為に作成されたのがqmailで,最新バージョンの1.03のリリースが1998年というあたりからも,堅実に作成されているメールサーバソフトとされている.

 最近の流れでは,sendmailと互換性を持っていないqmail派と,互換性を持っているpostfix派があるようで,多くの有名ディストリビューションではpostfixを利用する流れになっているようだが,qmailは先に書いたように技術が(良い意味で)枯れているので,ある程度は安心して利用する事ができるという部分と,古い解説本でも役に立つという部分がqmailのメリットかとおもう.

2.ソースの入手からインストールまで

  • qmail公式サイトは次のURLである.
  • 今回インストールする環境を確認する.
[root@jupiter root]# uname -a
Linux jupiter 2.4.21-32.0.1.EL #1 Tue May 17 18:01:37 EDT 2005 i686 i686 i386 GNU/Linux
[root@jupiter root]# cat /etc/redhat-release 
Red Hat Enterprise Linux ES release 3 (Taroon Update 5)
[root@jupiter root]#
  • モジュールの入手用ディレクトリを作成する.
[root@jupiter root]# pwd
/root
[root@jupiter root]# mkdir Download
[root@jupiter root]# cd Download 
[root@jupiter Download]#
  • wgetコマンドにてqmail-1.03を入手する.
[root@jupiter Download]# wget ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz
--14:23:01--  ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz
           => `qmail-1.03.tar.gz'
Resolving ftp.jp.qmail.org... 131.112.32.6
Connecting to ftp.jp.qmail.org[131.112.32.6]:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD /qmail ... done.
==> PASV ... done.    ==> RETR qmail-1.03.tar.gz ... done.

    [ <=>                                         ] 220,668       --.--K/s             

14:23:05 (1.87 MB/s) - `qmail-1.03.tar.gz' saved [220,668]

[root@jupiter Download]# ls -la
total 228
drwxr-xr-x    2 root     root         4096 Aug 15 14:23 .
drwxr-x---   16 root     root         4096 Aug 15 14:22 ..
-rw-r--r--    1 root     root       220668 Aug 15 14:23 qmail-1.03.tar.gz
[root@jupiter Download]
  • インストール用ディレクトリを作成する.
  • qmailでは,/usr/localじゃなくて/var/qmailとしておく.理由は知らない.
[root@jupiter Download]# mkdir /var/qmail
[root@jupiter Download]#
  • qmail用のqmailグループとユーザを作成する.
[root@jupiter Download]# /usr/sbin/groupadd -G 700 qmail
[root@jupiter Download]# /usr/sbin/useradd -u 701 -g qmail -d /var/qmail -s /bin/true qmailq
[root@jupiter Download]# /usr/sbin/useradd -u 702 -g qmail -d /var/qmail -s /bin/true qmailr
[root@jupiter Download]# /usr/sbin/useradd -u 703 -g qmail -d /var/qmail -s /bin/true qmails
[root@jupiter Download]#
コピペ用
/usr/sbin/groupadd -g 700 qmail
/usr/sbin/useradd -u 701 -g qmail -d /var/qmail -s /bin/true qmailq
/usr/sbin/useradd -u 702 -g qmail -d /var/qmail -s /bin/true qmailr
/usr/sbin/useradd -u 703 -g qmail -d /var/qmail -s /bin/true qmails
  • qmail用のnofilesグループとユーザを作成する.
[root@jupiter Download]# /usr/sbin/groupadd -g 710 nofiles
[root@jupiter Download]# /usr/sbin/useradd -u 711 -g nofiles -d /var/qmail/alias -s /bin/true
 alias
[root@jupiter Download]# /usr/sbin/useradd -u 712 -g nofiles -d /var/qmail -s /bin/true qmaild
[root@jupiter Download]# /usr/sbin/useradd -u 713 -g nofiles -d /var/qmail -s /bin/true qmaill
[root@jupiter Download]# /usr/sbin/useradd -u 714 -g nofiles -d /var/qmail -s /bin/true qmailp
[root@jupiter Download]# 
コピペ用
/usr/sbin/groupadd -g 710 nofiles
/usr/sbin/useradd -u 711 -g nofiles -d /var/qmail/alias -s /bin/true alias
/usr/sbin/useradd -u 712 -g nofiles -d /var/qmail -s /bin/true qmaild
/usr/sbin/useradd -u 713 -g nofiles -d /var/qmail -s /bin/true qmaill
/usr/sbin/useradd -u 714 -g nofiles -d /var/qmail -s /bin/true qmailp 
  • 入手したアーカイブファイルを展開する.
  • 展開したディレクトリは,/usr/local/srcディレクトリに保存しておく.
[root@jupiter Download]# tar xfz qmail-1.03.tar.gz 
[root@jupiter Download]# ls -la
total 1156
drwxr-xr-x    3 root     root         4096 Aug 15 14:25 .
drwxr-x---   16 root     root         4096 Aug 15 14:22 ..
drwxr-xr-x    2 root     bin         12288 Jun 15  1998 qmail-1.03
-rw-r--r--    1 root     root      1158144 Aug 15 14:23 qmail-1.03.tar
[root@jupiter Download]# mv qmail-1.03 /usr/local/src/.
[root@jupiter Download]# 
  • 展開したディレクトリに移動して中身を確認する.
[root@jupiter Download]# cd /usr/local/src/qmail-1.03
[root@jupiter qmail-1.03]# ls 
BIN.Makefile     config-fast.sh   make-load.sh     scan_ulong.c
BIN.README       config.sh        make-makelib.sh  seek.h
BLURB            constmap.c       mbox.5           seek_cur.c
BLURB2           constmap.h       myctime.c        seek_end.c
BLURB3           control.c        myctime.h        seek_set.c
BLURB4           control.h        ndelay.c         seek_trunc.c
CHANGES          date822fmt.c     ndelay.h         select.h1
FAQ              date822fmt.h     ndelay_off.c     select.h2
FILES            datemail.sh      newfield.c       sendmail.c
INSTALL          datetime.3       newfield.h       sgetopt.3
INSTALL.alias    datetime.c       now.3            sgetopt.c
INSTALL.ctl      datetime.h       now.c            sgetopt.h
INSTALL.ids      datetime_un.c    now.h            sig.h
INSTALL.maildir  direntry.3       open.h           sig_alarm.c
INSTALL.mbox     direntry.h1      open_append.c    sig_block.c
INSTALL.vsm      direntry.h2      open_excl.c      sig_bug.c
INTERNALS        dns.c            open_read.c      sig_catch.c
Makefile         dns.h            open_trunc.c     sig_child.c
PIC.local2alias  dnscname.c       open_write.c     sig_hup.c
PIC.local2ext    dnsdoe.c         pinq.sh          sig_misc.c
PIC.local2local  dnsdoe.h         predate.c        sig_pause.c
PIC.local2rem    dnsfq.c          preline.1        sig_pipe.c
PIC.local2virt   dnsip.c          preline.c        sig_term.c
PIC.nullclient   dnsmxip.c        prioq.c          slurpclose.c
PIC.relaybad     dnsptr.c         prioq.h          slurpclose.h
PIC.relaygood    dot-qmail.9      proc+df.sh       spawn.c
PIC.rem2local    elq.sh           proc.sh          splogger.8
README           env.3            prot.c           splogger.c
REMOVE.binmail   env.c            prot.h           str.h
REMOVE.sendmail  env.h            qail.sh          str_chr.c
SECURITY         envelopes.5      qbiff.1          str_cpy.c
SENDMAIL         envread.c        qbiff.c          str_diff.c
SYSDEPS          error.3          qlx.h            str_diffn.c
TARGETS          error.c          qmail-clean.8    str_len.c
TEST.deliver     error.h          qmail-clean.c    str_rchr.c
TEST.receive     error_str.3      qmail-command.8  str_start.c
THANKS           error_str.c      qmail-control.9  stralloc.3
THOUGHTS         error_temp.3     qmail-getpw.9    stralloc.h
TODO             error_temp.c     qmail-getpw.c    stralloc_arts.c
UPGRADE          except.1         qmail-header.5   stralloc_cat.c
VERSION          except.c         qmail-inject.8   stralloc_catb.c
addresses.5      exit.h           qmail-inject.c   stralloc_cats.c
alloc.3          extra.h          qmail-limits.9   stralloc_copy.c
alloc.c          fd.h             qmail-local.8    stralloc_eady.c
alloc.h          fd_copy.3        qmail-local.c    stralloc_opyb.c
alloc_re.c       fd_copy.c        qmail-log.5      stralloc_opys.c
auto-gid.c       fd_move.3        qmail-lspawn.8   stralloc_pend.c
auto-int.c       fd_move.c        qmail-lspawn.c   strerr.h
auto-int8.c      fifo.c           qmail-newmrh.9   strerr_die.c
auto-str.c       fifo.h           qmail-newmrh.c   strerr_sys.c
auto-uid.c       fifo_make.3      qmail-newu.9     subfd.h
auto_break.h     find-systype.sh  qmail-newu.c     subfderr.c
auto_patrn.h     fmt.h            qmail-pop3d.8    subfdin.c
auto_qmail.h     fmt_str.c        qmail-pop3d.c    subfdins.c
auto_spawn.h     fmt_strn.c       qmail-popup.8    subfdout.c
auto_split.h     fmt_uint.c       qmail-popup.c    subfdouts.c
auto_uids.h      fmt_uint0.c      qmail-pw2u.9     subgetopt.3
auto_usera.h     fmt_ulong.c      qmail-pw2u.c     subgetopt.c
binm1+df.sh      fmtqfn.c         qmail-qmqpc.8    subgetopt.h
binm1.sh         fmtqfn.h         qmail-qmqpc.c    substdi.c
binm2+df.sh      forgeries.7      qmail-qmqpd.8    substdio.c
binm2.sh         fork.h1          qmail-qmqpd.c    substdio.h
binm3+df.sh      fork.h2          qmail-qmtpd.8    substdio_copy.c
binm3.sh         forward.1        qmail-qmtpd.c    substdo.c
bouncesaying.1   forward.c        qmail-qread.8    tcp-env.1
bouncesaying.c   gen_alloc.h      qmail-qread.c    tcp-env.c
byte.h           gen_allocdefs.h  qmail-qstat.8    tcp-environ.5
byte_chr.c       getln.3          qmail-qstat.sh   tcpto.c
byte_copy.c      getln.c          qmail-queue.8    tcpto.h
byte_cr.c        getln.h          qmail-queue.c    tcpto_clean.c
byte_diff.c      getln2.3         qmail-remote.8   timeoutconn.c
byte_rchr.c      getln2.c         qmail-remote.c   timeoutconn.h
byte_zero.c      gfrom.c          qmail-rspawn.8   timeoutread.c
case.3           gfrom.h          qmail-rspawn.c   timeoutread.h
case.h           headerbody.c     qmail-send.9     timeoutwrite.c
case_diffb.c     headerbody.h     qmail-send.c     timeoutwrite.h
case_diffs.c     hfield.c         qmail-showctl.8  token822.c
case_lowerb.c    hfield.h         qmail-showctl.c  token822.h
case_lowers.c    hier.c           qmail-smtpd.8    trigger.c
case_starts.c    home+df.sh       qmail-smtpd.c    trigger.h
cdb.3            home.sh          qmail-start.9    triggerpull.c
cdb.h            hostname.c       qmail-start.c    triggerpull.h
cdb_hash.c       idedit.c         qmail-tcpok.8    trycpp.c
cdb_seek.c       install-big.c    qmail-tcpok.c    trydrent.c
cdb_unpack.c     install.c        qmail-tcpto.8    tryflock.c
cdbmake.h        instcheck.c      qmail-tcpto.c    trylsock.c
cdbmake_add.c    ip.c             qmail-upq.sh     trymkffo.c
cdbmake_hash.c   ip.h             qmail-users.9    trynpbg1.c
cdbmake_pack.c   ipalloc.c        qmail.7          tryrsolv.c
cdbmss.c         ipalloc.h        qmail.c          trysalen.c
cdbmss.h         ipme.c           qmail.h          trysgact.c
chkshsgr.c       ipme.h           qreceipt.1       trysgprm.c
chkspawn.c       ipmeprint.c      qreceipt.c       tryshsgr.c
coe.3            lock.h           qsmhook.c        trysysel.c
coe.c            lock_ex.c        qsutil.c         trysyslog.c
coe.h            lock_exnb.c      qsutil.h         tryulong32.c
commands.c       lock_un.c        quote.c          tryvfork.c
commands.h       maildir.5        quote.h          trywaitp.c
condredirect.1   maildir.c        rcpthosts.c      uint32.h1
condredirect.c   maildir.h        rcpthosts.h      uint32.h2
conf-break       maildir2mbox.1   readsubdir.c     wait.3
conf-cc          maildir2mbox.c   readsubdir.h     wait.h
conf-groups      maildirmake.1    readwrite.h      wait_nohang.c
conf-ld          maildirmake.c    received.c       wait_pid.c
conf-patrn       maildirwatch.1   received.h       warn-auto.sh
conf-qmail       maildirwatch.c   remoteinfo.c     warn-shsgr
conf-spawn       mailsubj.1       remoteinfo.h
conf-split       mailsubj.sh      scan.h
conf-users       make-compile.sh  scan_8long.c
[root@jupiter qmail-1.03]#
  • コンパイルを行う.
[root@jupiter qmail-1.03]# make setup check
( cat warn-auto.sh; ¥
echo CC=¥'`head -1 conf-cc`¥'; ¥
echo LD=¥'`head -1 conf-ld`¥' ¥
) > auto-ccld.sh
cat auto-ccld.sh make-load.sh > make-load
chmod 755 make-load
cat auto-ccld.sh find-systype.sh > find-systype
chmod 755 find-systype
./find-systype > systype
( cat warn-auto.sh; ./make-load "`cat systype`" ) > load
chmod 755 load
cat auto-ccld.sh make-compile.sh > make-compile
chmod 755 make-compile
( cat warn-auto.sh; ./make-compile "`cat systype`" ) > ¥
compile
chmod 755 compile
( ( ./compile tryvfork.c && ./load tryvfork ) >/dev/null ¥
2>&1 ¥
&& cat fork.h2 || cat fork.h1 ) > fork.h
rm -f tryvfork.o tryvfork
./compile qmail-local.c
qmail-local.c: In function `main':
qmail-local.c:450: warning: return type of `main' is not `int'
./compile qmail.c
./compile quote.c
./compile now.c
./compile gfrom.c
./compile myctime.c
./compile slurpclose.c
cat auto-ccld.sh make-makelib.sh > make-makelib
chmod 755 make-makelib
( cat warn-auto.sh; ./make-makelib "`cat systype`" ) > ¥
makelib
chmod 755 makelib
./compile case_diffb.c
./compile case_diffs.c
./compile case_lowerb.c
./compile case_lowers.c
./compile case_starts.c
./makelib case.a case_diffb.o case_diffs.o case_lowerb.o ¥
case_lowers.o case_starts.o
./compile getln.c
./compile getln2.c
./makelib getln.a getln.o getln2.o
./compile subgetopt.c
./compile sgetopt.c
./makelib getopt.a subgetopt.o sgetopt.o
./compile sig_alarm.c
( ( ./compile trysgprm.c && ./load trysgprm ) >/dev/null ¥
2>&1 ¥
&& echo ¥#define HASSIGPROCMASK 1 || exit 0 ) > hassgprm.h
rm -f trysgprm.o trysgprm
./compile sig_block.c
( ( ./compile trysgact.c && ./load trysgact ) >/dev/null ¥
2>&1 ¥
&& echo ¥#define HASSIGACTION 1 || exit 0 ) > hassgact.h
rm -f trysgact.o trysgact
./compile sig_catch.c
./compile sig_pause.c
./compile sig_pipe.c
./compile sig_child.c
./compile sig_hup.c
./compile sig_term.c
./compile sig_bug.c
./compile sig_misc.c
./makelib sig.a sig_alarm.o sig_block.o sig_catch.o ¥
sig_pause.o sig_pipe.o sig_child.o sig_hup.o sig_term.o ¥
sig_bug.o sig_misc.o
./compile open_append.c
./compile open_excl.c
./compile open_read.c
./compile open_trunc.c
./compile open_write.c
./makelib open.a open_append.o open_excl.o open_read.o ¥
open_trunc.o open_write.o
./compile seek_cur.c
./compile seek_end.c
./compile seek_set.c
./compile seek_trunc.c
./makelib seek.a seek_cur.o seek_end.o seek_set.o ¥
seek_trunc.o
( ( ./compile tryflock.c && ./load tryflock ) >/dev/null ¥
2>&1 ¥
&& echo ¥#define HASFLOCK 1 || exit 0 ) > hasflock.h
rm -f tryflock.o tryflock
./compile lock_ex.c
./compile lock_exnb.c
./compile lock_un.c
./makelib lock.a lock_ex.o lock_exnb.o lock_un.o
./compile fd_copy.c
./compile fd_move.c
./makelib fd.a fd_copy.o fd_move.o
( ( ./compile trywaitp.c && ./load trywaitp ) >/dev/null ¥
2>&1 ¥
&& echo ¥#define HASWAITPID 1 || exit 0 ) > haswaitp.h
rm -f trywaitp.o trywaitp
./compile wait_pid.c
./compile wait_nohang.c
./makelib wait.a wait_pid.o wait_nohang.o
./compile env.c
./compile envread.c
./makelib env.a env.o envread.o
./compile stralloc_eady.c
./compile stralloc_pend.c
./compile stralloc_copy.c
./compile stralloc_opys.c
./compile stralloc_opyb.c
./compile stralloc_cat.c
./compile stralloc_cats.c
./compile stralloc_catb.c
./compile stralloc_arts.c
./makelib stralloc.a stralloc_eady.o stralloc_pend.o ¥
stralloc_copy.o stralloc_opys.o stralloc_opyb.o ¥
stralloc_cat.o stralloc_cats.o stralloc_catb.o ¥
stralloc_arts.o
./compile alloc.c
./compile alloc_re.c
./makelib alloc.a alloc.o alloc_re.o
./compile strerr_sys.c
./compile strerr_die.c
./makelib strerr.a strerr_sys.o strerr_die.o
./compile substdio.c
./compile substdi.c
./compile substdo.c
./compile subfderr.c
./compile subfdout.c
./compile subfdouts.c
./compile subfdin.c
./compile subfdins.c
./compile substdio_copy.c
./makelib substdio.a substdio.o substdi.o substdo.o ¥
subfderr.o subfdout.o subfdouts.o subfdin.o subfdins.o ¥
substdio_copy.o
./compile error.c
./compile error_str.c
./compile error_temp.c
./makelib error.a error.o error_str.o error_temp.o
./compile str_len.c
./compile str_diff.c
./compile str_diffn.c
./compile str_cpy.c
./compile str_chr.c
./compile str_rchr.c
./compile str_start.c
./compile byte_chr.c
./compile byte_rchr.c
./compile byte_diff.c
./compile byte_copy.c
./compile byte_cr.c
./compile byte_zero.c
./makelib str.a str_len.o str_diff.o str_diffn.o str_cpy.o ¥
str_chr.o str_rchr.o str_start.o byte_chr.o byte_rchr.o ¥
byte_diff.o byte_copy.o byte_cr.o byte_zero.o
./compile fmt_str.c
./compile fmt_strn.c
./compile fmt_uint.c
./compile fmt_uint0.c
./compile fmt_ulong.c
./compile scan_ulong.c
./compile scan_8long.c
./makelib fs.a fmt_str.o fmt_strn.o fmt_uint.o fmt_uint0.o ¥
fmt_ulong.o scan_ulong.o scan_8long.o
./compile datetime.c
./compile datetime_un.c
./makelib datetime.a datetime.o datetime_un.o
./compile auto-str.c
auto-str.c: In function `main':
auto-str.c:17: warning: return type of `main' is not `int'
./load auto-str substdio.a error.a str.a 
substdio.a(substdo.o)(.text+0x43): In function `allwrite':
: undefined reference to `errno'
collect2: ld returned 1 exit status
make: *** [auto-str] Error 1
[root@jupiter qmail-1.03]#
  • エラーになっている.
  • これを,エラーでなくする為には,error.hを書き換えれば良い事がわかった.
    • この修正が必要なのは,RedHatでは9以降となる.
ヘッダの設定
変更前
[root@jupiter qmail-1.03]# head -n 10 error.h 
#ifndef ERROR_H
#define ERROR_H

extern int errno;

extern int error_intr;
extern int error_nomem;
extern int error_noent;
extern int error_txtbsy;
extern int error_io;
[root@jupiter qmail-1.03]#  
変更後
[root@jupiter qmail-1.03]# head -n 10 error.h 
#ifndef ERROR_H
#define ERROR_H

#include <errno.h>

extern int error_intr;
extern int error_nomem;
extern int error_noent;
extern int error_txtbsy;
extern int error_io;
[root@jupiter qmail-1.03]# 
  • また,コンパイラもccじゃなくてgccに変更しておく.
コンパイラの設定
変更前
[root@jupiter qmail-1.03]# cat conf-cc
cc -O2

This will be used to compile .c files.
[root@jupiter qmail-1.03]#
変更後
[root@jupiter qmail-1.03]# cat conf-cc
gcc -O2

This will be used to compile .c files.
[root@jupiter qmail-1.03]#
  • リンカもgccにしておく.
リンカの設定
変更前
[root@jupiter qmail-1.03]# cat conf-ld
cc -s

This will be used to link .o files into an executable.
[root@jupiter qmail-1.03]#
変更後
[root@jupiter qmail-1.03]# cat conf-ld
gcc -s

This will be used to link .o files into an executable.
[root@jupiter qmail-1.03]#
  • 再度コンパイルしてみる.
[root@jupiter qmail-1.03]# make setup check
( cat warn-auto.sh; ¥
echo CC=¥'`head -1 conf-cc`¥'; ¥
echo LD=¥'`head -1 conf-ld`¥' ¥
) > auto-ccld.sh
cat auto-ccld.sh make-load.sh > make-load
chmod 755 make-load
cat auto-ccld.sh find-systype.sh > find-systype
chmod 755 find-systype
./find-systype > systype
( cat warn-auto.sh; ./make-load "`cat systype`" ) > load
chmod 755 load
cat auto-ccld.sh make-compile.sh > make-compile
chmod 755 make-compile
( cat warn-auto.sh; ./make-compile "`cat systype`" ) > ¥
compile
chmod 755 compile
( ( ./compile tryvfork.c && ./load tryvfork ) >/dev/null ¥
2>&1 ¥
&& cat fork.h2 || cat fork.h1 ) > fork.h
rm -f tryvfork.o tryvfork
./compile qmail-local.c
qmail-local.c: In function `main':
qmail-local.c:450: warning: return type of `main' is not `int'
./compile qmail.c
./compile quote.c
./compile now.c
./compile gfrom.c
./compile myctime.c
./compile slurpclose.c
cat auto-ccld.sh make-makelib.sh > make-makelib
chmod 755 make-makelib
( cat warn-auto.sh; ./make-makelib "`cat systype`" ) > ¥
makelib
chmod 755 makelib
./compile case_diffb.c
./compile case_diffs.c
./compile case_lowerb.c
./compile case_lowers.c
./compile case_starts.c
./makelib case.a case_diffb.o case_diffs.o case_lowerb.o ¥
case_lowers.o case_starts.o
./compile getln.c
./compile getln2.c
./makelib getln.a getln.o getln2.o
./compile subgetopt.c
./compile sgetopt.c
./makelib getopt.a subgetopt.o sgetopt.o
./compile sig_alarm.c
( ( ./compile trysgprm.c && ./load trysgprm ) >/dev/null ¥
2>&1 ¥
&& echo ¥#define HASSIGPROCMASK 1 || exit 0 ) > hassgprm.h
rm -f trysgprm.o trysgprm
./compile sig_block.c
( ( ./compile trysgact.c && ./load trysgact ) >/dev/null ¥
2>&1 ¥
&& echo ¥#define HASSIGACTION 1 || exit 0 ) > hassgact.h
rm -f trysgact.o trysgact
./compile sig_catch.c
./compile sig_pause.c
./compile sig_pipe.c
./compile sig_child.c
./compile sig_hup.c
./compile sig_term.c
./compile sig_bug.c
./compile sig_misc.c
./makelib sig.a sig_alarm.o sig_block.o sig_catch.o ¥
sig_pause.o sig_pipe.o sig_child.o sig_hup.o sig_term.o ¥
sig_bug.o sig_misc.o
./compile open_append.c
./compile open_excl.c
./compile open_read.c
./compile open_trunc.c
./compile open_write.c
./makelib open.a open_append.o open_excl.o open_read.o ¥
open_trunc.o open_write.o
./compile seek_cur.c
./compile seek_end.c
./compile seek_set.c
./compile seek_trunc.c
./makelib seek.a seek_cur.o seek_end.o seek_set.o ¥
seek_trunc.o
( ( ./compile tryflock.c && ./load tryflock ) >/dev/null ¥
2>&1 ¥
&& echo ¥#define HASFLOCK 1 || exit 0 ) > hasflock.h
rm -f tryflock.o tryflock
./compile lock_ex.c
./compile lock_exnb.c
./compile lock_un.c
./makelib lock.a lock_ex.o lock_exnb.o lock_un.o
./compile fd_copy.c
./compile fd_move.c
./makelib fd.a fd_copy.o fd_move.o
( ( ./compile trywaitp.c && ./load trywaitp ) >/dev/null ¥
2>&1 ¥
&& echo ¥#define HASWAITPID 1 || exit 0 ) > haswaitp.h
rm -f trywaitp.o trywaitp
./compile wait_pid.c
./compile wait_nohang.c
./makelib wait.a wait_pid.o wait_nohang.o
./compile env.c
./compile envread.c
./makelib env.a env.o envread.o
./compile stralloc_eady.c
./compile stralloc_pend.c
./compile stralloc_copy.c
./compile stralloc_opys.c
./compile stralloc_opyb.c
./compile stralloc_cat.c
./compile stralloc_cats.c
./compile stralloc_catb.c
./compile stralloc_arts.c
./makelib stralloc.a stralloc_eady.o stralloc_pend.o ¥
stralloc_copy.o stralloc_opys.o stralloc_opyb.o ¥
stralloc_cat.o stralloc_cats.o stralloc_catb.o ¥
stralloc_arts.o
./compile alloc.c
./compile alloc_re.c
./makelib alloc.a alloc.o alloc_re.o
./compile strerr_sys.c
./compile strerr_die.c
./makelib strerr.a strerr_sys.o strerr_die.o
./compile substdio.c
./compile substdi.c
./compile substdo.c
./compile subfderr.c
./compile subfdout.c
./compile subfdouts.c
./compile subfdin.c
./compile subfdins.c
./compile substdio_copy.c
./makelib substdio.a substdio.o substdi.o substdo.o ¥
subfderr.o subfdout.o subfdouts.o subfdin.o subfdins.o ¥
substdio_copy.o
./compile error.c
./compile error_str.c
./compile error_temp.c
./makelib error.a error.o error_str.o error_temp.o
./compile str_len.c
./compile str_diff.c
./compile str_diffn.c
./compile str_cpy.c
./compile str_chr.c
./compile str_rchr.c
./compile str_start.c
./compile byte_chr.c
./compile byte_rchr.c
./compile byte_diff.c
./compile byte_copy.c
./compile byte_cr.c
./compile byte_zero.c
./makelib str.a str_len.o str_diff.o str_diffn.o str_cpy.o ¥
str_chr.o str_rchr.o str_start.o byte_chr.o byte_rchr.o ¥
byte_diff.o byte_copy.o byte_cr.o byte_zero.o
./compile fmt_str.c
./compile fmt_strn.c
./compile fmt_uint.c
./compile fmt_uint0.c
./compile fmt_ulong.c
./compile scan_ulong.c
./compile scan_8long.c
./makelib fs.a fmt_str.o fmt_strn.o fmt_uint.o fmt_uint0.o ¥
fmt_ulong.o scan_ulong.o scan_8long.o
./compile datetime.c
./compile datetime_un.c
./makelib datetime.a datetime.o datetime_un.o
./compile auto-str.c
auto-str.c: In function `main':
auto-str.c:17: warning: return type of `main' is not `int'
./load auto-str substdio.a error.a str.a 
./auto-str auto_qmail `head -1 conf-qmail` > auto_qmail.c
./compile auto_qmail.c
./compile auto-int8.c
auto-int8.c: In function `main':
auto-int8.c:19: warning: return type of `main' is not `int'
./load auto-int8 substdio.a error.a str.a fs.a 
./auto-int8 auto_patrn `head -1 conf-patrn` > auto_patrn.c
./compile auto_patrn.c
( ( ./compile trylsock.c && ¥
./load trylsock -lsocket -lnsl ) >/dev/null 2>&1 ¥
&& echo -lsocket -lnsl || exit 0 ) > socket.lib
rm -f trylsock.o trylsock
./load qmail-local qmail.o quote.o now.o gfrom.o myctime.o ¥
slurpclose.o case.a getln.a getopt.a sig.a open.a seek.a ¥
lock.a fd.a wait.a env.a stralloc.a alloc.a strerr.a ¥
substdio.a error.a str.a fs.a datetime.a auto_qmail.o ¥
auto_patrn.o  `cat socket.lib`
( ( ./compile tryulong32.c && ./load tryulong32 && ¥
./tryulong32 ) >/dev/null 2>&1 ¥
&& cat uint32.h2 || cat uint32.h1 ) > uint32.h
rm -f tryulong32.o tryulong32
./compile qmail-lspawn.c
( ./compile trysysel.c >/dev/null 2>&1 ¥
&& cat select.h2 || cat select.h1 ) > select.h
rm -f trysysel.o trysysel
./compile chkspawn.c
chkspawn.c: In function `main':
chkspawn.c:12: warning: return type of `main' is not `int'
./compile auto-int.c
auto-int.c: In function `main':
auto-int.c:19: warning: return type of `main' is not `int'
./load auto-int substdio.a error.a str.a fs.a 
./auto-int auto_spawn `head -1 conf-spawn` > auto_spawn.c
./compile auto_spawn.c
./load chkspawn substdio.a error.a str.a fs.a auto_spawn.o 
./chkspawn
./compile spawn.c
spawn.c: In function `main':
spawn.c:181: warning: return type of `main' is not `int'
./compile chkshsgr.c
chkshsgr.c: In function `main':
chkshsgr.c:3: warning: return type of `main' is not `int'
./load chkshsgr 
./chkshsgr || ( cat warn-shsgr; exit 1 )
( ( ./compile tryshsgr.c ¥
&& ./load tryshsgr && ./tryshsgr ) >/dev/null 2>&1 ¥
&& echo ¥#define HASSHORTSETGROUPS 1 || exit 0 ) > ¥
hasshsgr.h
rm -f tryshsgr.o tryshsgr
./compile prot.c
./compile coe.c
./compile cdb_hash.c
./compile cdb_unpack.c
./compile cdb_seek.c
./makelib cdb.a cdb_hash.o cdb_unpack.o cdb_seek.o
./compile auto-uid.c
auto-uid.c: In function `main':
auto-uid.c:22: warning: return type of `main' is not `int'
./load auto-uid substdio.a error.a str.a fs.a 
./compile auto-gid.c
auto-gid.c: In function `main':
auto-gid.c:22: warning: return type of `main' is not `int'
./load auto-gid substdio.a error.a str.a fs.a 
( ./auto-uid auto_uida `head -1 conf-users` ¥
&&./auto-uid auto_uidd `head -2 conf-users | tail -1` ¥
&&./auto-uid auto_uidl `head -3 conf-users | tail -1` ¥
&&./auto-uid auto_uido `head -4 conf-users | tail -1` ¥
&&./auto-uid auto_uidp `head -5 conf-users | tail -1` ¥
&&./auto-uid auto_uidq `head -6 conf-users | tail -1` ¥
&&./auto-uid auto_uidr `head -7 conf-users | tail -1` ¥
&&./auto-uid auto_uids `head -8 conf-users | tail -1` ¥
&&./auto-gid auto_gidq `head -1 conf-groups` ¥
&&./auto-gid auto_gidn `head -2 conf-groups | tail -1` ¥
) > auto_uids.c.tmp && mv auto_uids.c.tmp auto_uids.c
./compile auto_uids.c
./load qmail-lspawn spawn.o prot.o slurpclose.o coe.o ¥
sig.a wait.a case.a cdb.a fd.a open.a stralloc.a alloc.a ¥
substdio.a error.a str.a fs.a auto_qmail.o auto_uids.o ¥
auto_spawn.o 
./compile qmail-getpw.c
qmail-getpw.c: In function `main':
qmail-getpw.c:61: warning: return type of `main' is not `int'
./auto-str auto_break ¥
"`head -1 conf-break`" > auto_break.c
./compile auto_break.c
./auto-str auto_usera `head -1 conf-users` > auto_usera.c
./compile auto_usera.c
./load qmail-getpw case.a substdio.a error.a str.a fs.a ¥
auto_break.o auto_usera.o 
./compile qmail-remote.c
qmail-remote.c: In function `main':
qmail-remote.c:332: warning: return type of `main' is not `int'
./compile control.c
./compile constmap.c
./compile timeoutread.c
./compile timeoutwrite.c
./compile timeoutconn.c
./compile tcpto.c
./compile dns.c
./compile ip.c
./compile ipalloc.c
( ./compile trysalen.c >/dev/null 2>&1 ¥
&& echo ¥#define HASSALEN 1 || exit 0 ) > hassalen.h
rm -f trysalen.o
./compile ipme.c
./compile ndelay.c
./compile ndelay_off.c
./makelib ndelay.a ndelay.o ndelay_off.o
( ( ./compile tryrsolv.c && ./load tryrsolv dns.o ¥
ipalloc.o ip.o stralloc.a alloc.a error.a fs.a str.a ¥
-lresolv `cat socket.lib` ) >/dev/null 2>&1 ¥
&& echo -lresolv || exit 0 ) > dns.lib
rm -f tryrsolv.o tryrsolv
./load qmail-remote control.o constmap.o timeoutread.o ¥
timeoutwrite.o timeoutconn.o tcpto.o now.o dns.o ip.o ¥
ipalloc.o ipme.o quote.o ndelay.a case.a sig.a open.a ¥
lock.a seek.a getln.a stralloc.a alloc.a substdio.a error.a ¥
str.a fs.a auto_qmail.o  `cat dns.lib` `cat socket.lib`
./compile qmail-rspawn.c
./compile tcpto_clean.c
./load qmail-rspawn spawn.o tcpto_clean.o now.o coe.o ¥
sig.a open.a seek.a lock.a wait.a fd.a stralloc.a alloc.a ¥
substdio.a error.a str.a auto_qmail.o auto_uids.o ¥
auto_spawn.o 
( ./compile trydrent.c >/dev/null 2>&1 ¥
&& cat direntry.h2 || cat direntry.h1 ) > direntry.h
rm -f trydrent.o
./compile qmail-clean.c
qmail-clean.c: In function `main':
qmail-clean.c:53: warning: return type of `main' is not `int'
./compile fmtqfn.c
./auto-int auto_split `head -1 conf-split` > auto_split.c
./compile auto_split.c
./load qmail-clean fmtqfn.o now.o getln.a sig.a stralloc.a ¥
alloc.a substdio.a error.a str.a fs.a auto_qmail.o ¥
auto_split.o 
./compile qmail-send.c
qmail-send.c: In function `main':
qmail-send.c:1516: warning: return type of `main' is not `int'
./compile qsutil.c
./compile newfield.c
./compile prioq.c
( ( ./compile trymkffo.c && ./load trymkffo ) >/dev/null ¥
2>&1 ¥
&& echo ¥#define HASMKFIFO 1 || exit 0 ) > hasmkffo.h
rm -f trymkffo.o trymkffo
./compile fifo.c
( ( ./compile trynpbg1.c ¥
&& ./load trynpbg1 fifo.o open.a && ./trynpbg1 ) ¥
>/dev/null 2>&1 ¥
&& echo ¥#define HASNAMEDPIPEBUG1 1 || exit 0 ) > ¥
hasnpbg1.h
rm -f trynpbg1.o trynpbg1
./compile trigger.c
./compile readsubdir.c
./compile date822fmt.c
./load qmail-send qsutil.o control.o constmap.o newfield.o ¥
prioq.o trigger.o fmtqfn.o quote.o now.o readsubdir.o ¥
qmail.o date822fmt.o datetime.a case.a ndelay.a getln.a ¥
wait.a seek.a fd.a sig.a open.a lock.a stralloc.a alloc.a ¥
substdio.a error.a str.a fs.a auto_qmail.o auto_split.o 
./compile qmail-start.c
qmail-start.c: In function `main':
qmail-start.c:33: warning: return type of `main' is not `int'
./load qmail-start prot.o fd.a auto_uids.o 
./compile splogger.c
splogger.c: In function `main':
splogger.c:51: warning: return type of `main' is not `int'
( ( ./compile trysyslog.c && ¥
./load trysyslog -lgen ) >/dev/null 2>&1 ¥
&& echo -lgen || exit 0 ) > syslog.lib
rm -f trysyslog.o trysyslog
./load splogger substdio.a error.a str.a fs.a  `cat ¥
syslog.lib` `cat socket.lib`
./compile qmail-queue.c
qmail-queue.c: In function `main':
qmail-queue.c:155: warning: return type of `main' is not `int'
./compile triggerpull.c
./load qmail-queue triggerpull.o fmtqfn.o now.o ¥
date822fmt.o datetime.a seek.a ndelay.a open.a sig.a ¥
alloc.a substdio.a error.a str.a fs.a auto_qmail.o ¥
auto_split.o auto_uids.o 
./compile qmail-inject.c
qmail-inject.c: In function `main':
qmail-inject.c:688: warning: return type of `main' is not `int'
./compile headerbody.c
./compile hfield.c
./compile token822.c
./load qmail-inject headerbody.o hfield.o newfield.o ¥
quote.o now.o control.o date822fmt.o constmap.o qmail.o ¥
case.a fd.a wait.a open.a getln.a sig.a getopt.a datetime.a ¥
token822.o env.a stralloc.a alloc.a substdio.a error.a ¥
str.a fs.a auto_qmail.o 
./compile predate.c
predate.c: In function `main':
predate.c:26: warning: return type of `main' is not `int'
./load predate datetime.a strerr.a sig.a fd.a wait.a ¥
substdio.a error.a str.a fs.a 
cat warn-auto.sh datemail.sh ¥
| sed s}QMAIL}"`head -1 conf-qmail`"}g ¥
| sed s}BREAK}"`head -1 conf-break`"}g ¥
| sed s}SPLIT}"`head -1 conf-split`"}g ¥
> datemail
chmod 755 datemail
cat warn-auto.sh mailsubj.sh ¥
| sed s}QMAIL}"`head -1 conf-qmail`"}g ¥
| sed s}BREAK}"`head -1 conf-break`"}g ¥
| sed s}SPLIT}"`head -1 conf-split`"}g ¥
> mailsubj
chmod 755 mailsubj
cat warn-auto.sh qmail-upq.sh ¥
| sed s}QMAIL}"`head -1 conf-qmail`"}g ¥
| sed s}BREAK}"`head -1 conf-break`"}g ¥
| sed s}SPLIT}"`head -1 conf-split`"}g ¥
> qmail-upq
chmod 755 qmail-upq
./compile qmail-showctl.c
qmail-showctl.c: In function `main':
qmail-showctl.c:140: warning: return type of `main' is not `int'
./load qmail-showctl auto_uids.o control.o open.a getln.a ¥
stralloc.a alloc.a substdio.a error.a str.a fs.a ¥
auto_qmail.o auto_break.o auto_patrn.o auto_spawn.o ¥
auto_split.o 
./compile qmail-newu.c
qmail-newu.c: In function `main':
qmail-newu.c:72: warning: return type of `main' is not `int'
./compile cdbmss.c
./compile cdbmake_pack.c
./compile cdbmake_hash.c
./compile cdbmake_add.c
./makelib cdbmake.a cdbmake_pack.o cdbmake_hash.o ¥
cdbmake_add.o
./load qmail-newu cdbmss.o getln.a open.a seek.a cdbmake.a ¥
case.a stralloc.a alloc.a substdio.a error.a str.a ¥
auto_qmail.o 
./compile qmail-pw2u.c
qmail-pw2u.c: In function `main':
qmail-pw2u.c:234: warning: return type of `main' is not `int'
./load qmail-pw2u constmap.o control.o open.a getln.a ¥
case.a getopt.a stralloc.a alloc.a substdio.a error.a str.a ¥
fs.a auto_usera.o auto_break.o auto_qmail.o 
./compile qmail-qread.c
qmail-qread.c: In function `main':
qmail-qread.c:109: warning: return type of `main' is not `int'
./load qmail-qread fmtqfn.o readsubdir.o date822fmt.o ¥
datetime.a open.a getln.a stralloc.a alloc.a substdio.a ¥
error.a str.a fs.a auto_qmail.o auto_split.o 
cat warn-auto.sh qmail-qstat.sh ¥
| sed s}QMAIL}"`head -1 conf-qmail`"}g ¥
| sed s}BREAK}"`head -1 conf-break`"}g ¥
| sed s}SPLIT}"`head -1 conf-split`"}g ¥
> qmail-qstat
chmod 755 qmail-qstat
./compile qmail-tcpto.c
qmail-tcpto.c: In function `main':
qmail-tcpto.c:36: warning: return type of `main' is not `int'
./load qmail-tcpto ip.o now.o open.a lock.a substdio.a ¥
error.a str.a fs.a auto_qmail.o 
./compile qmail-tcpok.c
qmail-tcpok.c: In function `main':
qmail-tcpok.c:15: warning: return type of `main' is not `int'
./load qmail-tcpok open.a lock.a strerr.a substdio.a ¥
error.a str.a auto_qmail.o 
./compile qmail-pop3d.c
qmail-pop3d.c: In function `main':
qmail-pop3d.c:293: warning: return type of `main' is not `int'
./compile commands.c
./compile maildir.c
./load qmail-pop3d commands.o case.a timeoutread.o ¥
timeoutwrite.o maildir.o prioq.o now.o env.a strerr.a sig.a ¥
open.a getln.a stralloc.a alloc.a substdio.a error.a str.a ¥
fs.a  `cat socket.lib`
./compile qmail-popup.c
qmail-popup.c: In function `main':
qmail-popup.c:171: warning: return type of `main' is not `int'
./load qmail-popup commands.o timeoutread.o timeoutwrite.o ¥
now.o case.a fd.a sig.a wait.a stralloc.a alloc.a ¥
substdio.a error.a str.a fs.a  `cat socket.lib`
./compile qmail-qmqpc.c
./load qmail-qmqpc slurpclose.o timeoutread.o ¥
timeoutwrite.o timeoutconn.o ip.o control.o auto_qmail.o ¥
sig.a ndelay.a open.a getln.a substdio.a stralloc.a alloc.a ¥
error.a str.a fs.a  `cat socket.lib`
./compile qmail-qmqpd.c
./compile received.c
./load qmail-qmqpd received.o now.o date822fmt.o qmail.o ¥
auto_qmail.o env.a substdio.a sig.a error.a wait.a fd.a ¥
str.a datetime.a fs.a 
./compile qmail-qmtpd.c
./compile rcpthosts.c
./load qmail-qmtpd rcpthosts.o control.o constmap.o ¥
received.o date822fmt.o now.o qmail.o cdb.a fd.a wait.a ¥
datetime.a open.a getln.a sig.a case.a env.a stralloc.a ¥
alloc.a substdio.a error.a str.a fs.a auto_qmail.o 
./compile qmail-smtpd.c
qmail-smtpd.c: In function `main':
qmail-smtpd.c:412: warning: return type of `main' is not `int'
./load qmail-smtpd rcpthosts.o commands.o timeoutread.o ¥
timeoutwrite.o ip.o ipme.o ipalloc.o control.o constmap.o ¥
received.o date822fmt.o now.o qmail.o cdb.a fd.a wait.a ¥
datetime.a getln.a open.a sig.a case.a env.a stralloc.a ¥
alloc.a substdio.a error.a str.a fs.a auto_qmail.o  `cat ¥
socket.lib`
./compile sendmail.c
sendmail.c: In function `main':
sendmail.c:54: warning: return type of `main' is not `int'
./load sendmail env.a getopt.a alloc.a substdio.a error.a ¥
str.a auto_qmail.o 
./compile tcp-env.c
tcp-env.c: In function `main':
tcp-env.c:36: warning: return type of `main' is not `int'
./compile remoteinfo.c
./load tcp-env dns.o remoteinfo.o timeoutread.o ¥
timeoutwrite.o timeoutconn.o ip.o ipalloc.o case.a ndelay.a ¥
sig.a env.a getopt.a stralloc.a alloc.a substdio.a error.a ¥
str.a fs.a  `cat dns.lib` `cat socket.lib`
./compile qmail-newmrh.c
qmail-newmrh.c: In function `main':
qmail-newmrh.c:33: warning: return type of `main' is not `int'
./load qmail-newmrh cdbmss.o getln.a open.a cdbmake.a ¥
seek.a case.a stralloc.a alloc.a strerr.a substdio.a ¥
error.a str.a auto_qmail.o 
cat warn-auto.sh config.sh ¥
| sed s}QMAIL}"`head -1 conf-qmail`"}g ¥
| sed s}BREAK}"`head -1 conf-break`"}g ¥
| sed s}SPLIT}"`head -1 conf-split`"}g ¥
> config
chmod 755 config
cat warn-auto.sh config-fast.sh ¥
| sed s}QMAIL}"`head -1 conf-qmail`"}g ¥
| sed s}BREAK}"`head -1 conf-break`"}g ¥
| sed s}SPLIT}"`head -1 conf-split`"}g ¥
> config-fast
chmod 755 config-fast
./compile dnscname.c
dnscname.c: In function `main':
dnscname.c:14: warning: return type of `main' is not `int'
./compile dnsdoe.c
./load dnscname dns.o dnsdoe.o ip.o ipalloc.o stralloc.a ¥
alloc.a substdio.a error.a str.a fs.a  `cat dns.lib` `cat ¥
socket.lib`
./compile dnsptr.c
dnsptr.c: In function `main':
dnsptr.c:17: warning: return type of `main' is not `int'
./load dnsptr dns.o dnsdoe.o ip.o ipalloc.o stralloc.a ¥
alloc.a substdio.a error.a str.a fs.a  `cat dns.lib` `cat ¥
socket.lib`
./compile dnsip.c
dnsip.c: In function `main':
dnsip.c:18: warning: return type of `main' is not `int'
./load dnsip dns.o dnsdoe.o ip.o ipalloc.o stralloc.a ¥
alloc.a substdio.a error.a str.a fs.a  `cat dns.lib` `cat ¥
socket.lib`
./compile dnsmxip.c
dnsmxip.c: In function `main':
dnsmxip.c:20: warning: return type of `main' is not `int'
./load dnsmxip dns.o dnsdoe.o ip.o ipalloc.o now.o ¥
stralloc.a alloc.a substdio.a error.a str.a fs.a  `cat ¥
dns.lib` `cat socket.lib`
./compile dnsfq.c
dnsfq.c: In function `main':
dnsfq.c:16: warning: return type of `main' is not `int'
./load dnsfq dns.o dnsdoe.o ip.o ipalloc.o stralloc.a ¥
alloc.a substdio.a error.a str.a fs.a  `cat dns.lib` `cat ¥
socket.lib`
./compile hostname.c
hostname.c: In function `main':
hostname.c:9: warning: return type of `main' is not `int'
./load hostname substdio.a error.a str.a  `cat dns.lib` ¥
`cat socket.lib`
./compile ipmeprint.c
ipmeprint.c: In function `main':
ipmeprint.c:10: warning: return type of `main' is not `int'
./load ipmeprint ipme.o ip.o ipalloc.o stralloc.a alloc.a ¥
substdio.a error.a str.a fs.a  `cat socket.lib`
./compile qreceipt.c
qreceipt.c: In function `main':
qreceipt.c:125: warning: return type of `main' is not `int'
./load qreceipt headerbody.o hfield.o quote.o token822.o ¥
qmail.o getln.a fd.a wait.a sig.a env.a stralloc.a alloc.a ¥
substdio.a error.a str.a auto_qmail.o 
./compile qsmhook.c
qsmhook.c: In function `main':
qsmhook.c:41: warning: return type of `main' is not `int'
./load qsmhook sig.a case.a fd.a wait.a getopt.a env.a ¥
stralloc.a alloc.a substdio.a error.a str.a 
./compile qbiff.c
qbiff.c: In function `main':
qbiff.c:54: warning: return type of `main' is not `int'
./load qbiff headerbody.o hfield.o getln.a env.a open.a ¥
stralloc.a alloc.a substdio.a error.a str.a 
./compile forward.c
forward.c: In function `main':
forward.c:32: warning: return type of `main' is not `int'
./load forward qmail.o strerr.a alloc.a fd.a wait.a sig.a ¥
env.a substdio.a error.a str.a fs.a auto_qmail.o 
./compile preline.c
preline.c: In function `main':
preline.c:32: warning: return type of `main' is not `int'
./load preline strerr.a fd.a wait.a sig.a env.a getopt.a ¥
substdio.a error.a str.a 
./compile condredirect.c
condredirect.c: In function `main':
condredirect.c:34: warning: return type of `main' is not `int'
./load condredirect qmail.o strerr.a fd.a sig.a wait.a ¥
seek.a env.a substdio.a error.a str.a fs.a auto_qmail.o 
./compile bouncesaying.c
bouncesaying.c: In function `main':
bouncesaying.c:13: warning: return type of `main' is not `int'
./load bouncesaying strerr.a error.a substdio.a str.a ¥
wait.a 
./compile except.c
except.c: In function `main':
except.c:12: warning: return type of `main' is not `int'
./load except strerr.a error.a substdio.a str.a wait.a 
./compile maildirmake.c
maildirmake.c: In function `main':
maildirmake.c:9: warning: return type of `main' is not `int'
./load maildirmake strerr.a substdio.a error.a str.a 
./compile maildir2mbox.c
maildir2mbox.c: In function `main':
maildir2mbox.c:37: warning: return type of `main' is not `int'
./load maildir2mbox maildir.o prioq.o now.o myctime.o ¥
gfrom.o lock.a getln.a env.a open.a strerr.a stralloc.a ¥
alloc.a substdio.a error.a str.a fs.a datetime.a 
./compile maildirwatch.c
maildirwatch.c: In function `main':
maildirwatch.c:62: warning: return type of `main' is not `int'
./load maildirwatch hfield.o headerbody.o maildir.o ¥
prioq.o now.o getln.a env.a open.a strerr.a stralloc.a ¥
alloc.a substdio.a error.a str.a 
cat warn-auto.sh qail.sh ¥
| sed s}QMAIL}"`head -1 conf-qmail`"}g ¥
| sed s}BREAK}"`head -1 conf-break`"}g ¥
| sed s}SPLIT}"`head -1 conf-split`"}g ¥
> qail
chmod 755 qail
cat warn-auto.sh elq.sh ¥
| sed s}QMAIL}"`head -1 conf-qmail`"}g ¥
| sed s}BREAK}"`head -1 conf-break`"}g ¥
| sed s}SPLIT}"`head -1 conf-split`"}g ¥
> elq
chmod 755 elq
cat warn-auto.sh pinq.sh ¥
| sed s}QMAIL}"`head -1 conf-qmail`"}g ¥
| sed s}BREAK}"`head -1 conf-break`"}g ¥
| sed s}SPLIT}"`head -1 conf-split`"}g ¥
> pinq
chmod 755 pinq
./compile idedit.c
idedit.c: In function `main':
idedit.c:126: warning: return type of `main' is not `int'
./load idedit strerr.a substdio.a error.a str.a fs.a ¥
wait.a open.a seek.a 
./compile install-big.c
./compile install.c
install.c: In function `main':
install.c:156: warning: return type of `main' is not `int'
./load install-big fifo.o install.o auto_qmail.o ¥
auto_split.o auto_uids.o strerr.a substdio.a open.a error.a ¥
str.a fs.a 
./compile hier.c
./load install fifo.o hier.o auto_qmail.o auto_split.o ¥
auto_uids.o strerr.a substdio.a open.a error.a str.a fs.a 
./compile instcheck.c
instcheck.c: In function `main':
instcheck.c:105: warning: return type of `main' is not `int'
./load instcheck fifo.o hier.o auto_qmail.o auto_split.o ¥
auto_uids.o strerr.a substdio.a error.a str.a fs.a 
cat home.sh ¥
| sed s}QMAIL}"`head -1 conf-qmail`"}g ¥
> home
chmod 755 home
cat home+df.sh ¥
| sed s}QMAIL}"`head -1 conf-qmail`"}g ¥
> home+df
chmod 755 home+df
cat proc.sh ¥
| sed s}QMAIL}"`head -1 conf-qmail`"}g ¥
> proc
chmod 755 proc
cat proc+df.sh ¥
| sed s}QMAIL}"`head -1 conf-qmail`"}g ¥
> proc+df
chmod 755 proc+df
cat binm1.sh ¥
| sed s}QMAIL}"`head -1 conf-qmail`"}g ¥
> binm1
chmod 755 binm1
cat binm1+df.sh ¥
| sed s}QMAIL}"`head -1 conf-qmail`"}g ¥
> binm1+df
chmod 755 binm1+df
cat binm2.sh ¥
| sed s}QMAIL}"`head -1 conf-qmail`"}g ¥
> binm2
chmod 755 binm2
cat binm2+df.sh ¥
| sed s}QMAIL}"`head -1 conf-qmail`"}g ¥
> binm2+df
chmod 755 binm2+df
cat binm3.sh ¥
| sed s}QMAIL}"`head -1 conf-qmail`"}g ¥
> binm3
chmod 755 binm3
cat binm3+df.sh ¥
| sed s}QMAIL}"`head -1 conf-qmail`"}g ¥
> binm3+df
chmod 755 binm3+df
nroff -man qmail-local.8 > qmail-local.0
nroff -man qmail-lspawn.8 > qmail-lspawn.0
cat qmail-getpw.9 ¥
| sed s}QMAILHOME}"`head -1 conf-qmail`"}g ¥
| sed s}BREAK}"`head -1 conf-break`"}g ¥
| sed s}SPAWN}"`head -1 conf-spawn`"}g ¥
> qmail-getpw.8
nroff -man qmail-getpw.8 > qmail-getpw.0
nroff -man qmail-remote.8 > qmail-remote.0
nroff -man qmail-rspawn.8 > qmail-rspawn.0
nroff -man qmail-clean.8 > qmail-clean.0
cat qmail-send.9 ¥
| sed s}QMAILHOME}"`head -1 conf-qmail`"}g ¥
| sed s}BREAK}"`head -1 conf-break`"}g ¥
| sed s}SPAWN}"`head -1 conf-spawn`"}g ¥
> qmail-send.8
nroff -man qmail-send.8 > qmail-send.0
cat qmail-start.9 ¥
| sed s}QMAILHOME}"`head -1 conf-qmail`"}g ¥
| sed s}BREAK}"`head -1 conf-break`"}g ¥
| sed s}SPAWN}"`head -1 conf-spawn`"}g ¥
> qmail-start.8
nroff -man qmail-start.8 > qmail-start.0
nroff -man splogger.8 > splogger.0
nroff -man qmail-queue.8 > qmail-queue.0
nroff -man qmail-inject.8 > qmail-inject.0
nroff -man mailsubj.1 > mailsubj.0
nroff -man qmail-showctl.8 > qmail-showctl.0
cat qmail-newu.9 ¥
| sed s}QMAILHOME}"`head -1 conf-qmail`"}g ¥
| sed s}BREAK}"`head -1 conf-break`"}g ¥
| sed s}SPAWN}"`head -1 conf-spawn`"}g ¥
> qmail-newu.8
nroff -man qmail-newu.8 > qmail-newu.0
cat qmail-pw2u.9 ¥
| sed s}QMAILHOME}"`head -1 conf-qmail`"}g ¥
| sed s}BREAK}"`head -1 conf-break`"}g ¥
| sed s}SPAWN}"`head -1 conf-spawn`"}g ¥
> qmail-pw2u.8
nroff -man qmail-pw2u.8 > qmail-pw2u.0
nroff -man qmail-qread.8 > qmail-qread.0
nroff -man qmail-qstat.8 > qmail-qstat.0
nroff -man qmail-tcpto.8 > qmail-tcpto.0
nroff -man qmail-tcpok.8 > qmail-tcpok.0
nroff -man qmail-pop3d.8 > qmail-pop3d.0
nroff -man qmail-popup.8 > qmail-popup.0
nroff -man qmail-qmqpc.8 > qmail-qmqpc.0
nroff -man qmail-qmqpd.8 > qmail-qmqpd.0
nroff -man qmail-qmtpd.8 > qmail-qmtpd.0
nroff -man qmail-smtpd.8 > qmail-smtpd.0
nroff -man tcp-env.1 > tcp-env.0
cat qmail-newmrh.9 ¥
| sed s}QMAILHOME}"`head -1 conf-qmail`"}g ¥
| sed s}BREAK}"`head -1 conf-break`"}g ¥
| sed s}SPAWN}"`head -1 conf-spawn`"}g ¥
> qmail-newmrh.8
nroff -man qmail-newmrh.8 > qmail-newmrh.0
nroff -man qreceipt.1 > qreceipt.0
nroff -man qbiff.1 > qbiff.0
nroff -man forward.1 > forward.0
nroff -man preline.1 > preline.0
nroff -man condredirect.1 > condredirect.0
nroff -man bouncesaying.1 > bouncesaying.0
nroff -man except.1 > except.0
nroff -man maildirmake.1 > maildirmake.0
nroff -man maildir2mbox.1 > maildir2mbox.0
nroff -man maildirwatch.1 > maildirwatch.0
nroff -man qmail.7 > qmail.0
cat qmail-limits.9 ¥
| sed s}QMAILHOME}"`head -1 conf-qmail`"}g ¥
| sed s}BREAK}"`head -1 conf-break`"}g ¥
| sed s}SPAWN}"`head -1 conf-spawn`"}g ¥
> qmail-limits.7
nroff -man qmail-limits.7 > qmail-limits.0
nroff -man qmail-log.5 > qmail-log.0
cat qmail-control.9 ¥
| sed s}QMAILHOME}"`head -1 conf-qmail`"}g ¥
| sed s}BREAK}"`head -1 conf-break`"}g ¥
| sed s}SPAWN}"`head -1 conf-spawn`"}g ¥
> qmail-control.5
nroff -man qmail-control.5 > qmail-control.0
nroff -man qmail-header.5 > qmail-header.0
cat qmail-users.9 ¥
| sed s}QMAILHOME}"`head -1 conf-qmail`"}g ¥
| sed s}BREAK}"`head -1 conf-break`"}g ¥
| sed s}SPAWN}"`head -1 conf-spawn`"}g ¥
> qmail-users.5
nroff -man qmail-users.5 > qmail-users.0
cat dot-qmail.9 ¥
| sed s}QMAILHOME}"`head -1 conf-qmail`"}g ¥
| sed s}BREAK}"`head -1 conf-break`"}g ¥
| sed s}SPAWN}"`head -1 conf-spawn`"}g ¥
> dot-qmail.5
nroff -man dot-qmail.5 > dot-qmail.0
nroff -man qmail-command.8 > qmail-command.0
nroff -man tcp-environ.5 > tcp-environ.0
nroff -man maildir.5 > maildir.0
nroff -man mbox.5 > mbox.0
nroff -man addresses.5 > addresses.0
nroff -man envelopes.5 > envelopes.0
nroff -man forgeries.7 > forgeries.0
./install
./instcheck
[root@jupiter qmail-1.03]#  
  • 今回はエラーなしだった.
  • main関数のリターン値に関してのwarningがでているが無視できそうである.

3.環境設定

  • 使用するホストと,ドメイン名を登録する.
  • 設定にはconfig-fastコマンドを利用する. コマンドがあるか確認する.
[root@jupiter qmail-1.03]# pwd
/usr/local/src/qmail-1.03
[root@jupiter qmail-1.03]# ls -la config-fast
-rwxr-xr-x    1 root     root         1087 Aug 15 15:29 config-fast
[root@jupiter qmail-1.03]# 
  • config-fastのパラメータは,ホスト名.ドメイン名として設定する.
  • ここでは,jupiter.ujpqmail.ujp.jpをFQDNとする.
[root@jupiter qmail-1.03]# ./config-fast jupiter.ujpqmail.ujp.jp
Your fully qualified host name is jupiter.ujpqmail.ujp.jp.
Putting jupiter.ujpqmail.ujp.jp into control/me...
Putting ujpqmail.ujp.jp into control/defaultdomain...
Putting ujp.jp into control/plusdomain...
Putting jupiter.ujpqmail.ujp.jp into control/locals...
Putting jupiter.ujpqmail.ujp.jp into control/rcpthosts...
Now qmail will refuse to accept SMTP messages except to jupiter.ujpqmail.ujp.jp.
Make sure to change rcpthosts if you add hosts to locals or virtualdomains!
[root@jupiter qmail-1.03]# 
  • ここで指定した定義情報は,/var/qmail/controlディレクトリ配下に設定される.
[root@jupiter qmail-1.03]# cd /var/qmail
[root@jupiter qmail]# ls -la
total 76
drwxr-xr-x   11 root     qmail        4096 Aug 15 15:19 .
drwxr-xr-x   22 root     root         4096 Aug 15 14:26 ..
-rw-r--r--    1 qmails   qmail          24 Aug 15 14:28 .bash_logout
-rw-r--r--    1 qmails   qmail         191 Aug 15 14:28 .bash_profile
-rw-r--r--    1 qmails   qmail         124 Aug 15 14:28 .bashrc
-rw-r--r--    1 qmails   qmail        5542 Aug 15 14:28 .canna
-rw-r--r--    1 qmails   qmail         237 Aug 15 14:28 .emacs
-rw-r--r--    1 qmails   qmail         120 Aug 15 14:28 .gtkrc
drwxr-xr-x    3 qmails   qmail        4096 Aug 15 14:27 .kde
-rw-r--r--    1 qmails   qmail         136 Aug 15 14:28 .zshrc
drwxr-sr-x    3 alias    qmail        4096 Aug 15 14:27 alias
drwxr-xr-x    2 root     qmail        4096 Aug 15 15:19 bin
drwxr-xr-x    2 root     qmail        4096 Aug 15 15:19 boot
drwxr-xr-x    2 root     qmail        4096 Aug 15 16:00 control
drwxr-xr-x    2 root     qmail        4096 Aug 15 15:19 doc
drwxr-xr-x   10 root     qmail        4096 Aug 15 15:19 man
drwxr-x---   11 qmailq   qmail        4096 Aug 15 15:19 queue
drwxr-xr-x    2 root     qmail        4096 Aug 15 15:19 users
[root@jupiter qmail]# cd control
[root@jupiter control]# ls -la
total 28
drwxr-xr-x    2 root     qmail        4096 Aug 15 16:00 .
drwxr-xr-x   11 root     qmail        4096 Aug 15 15:19 ..
-rw-r--r--    1 root     root           19 Aug 15 16:00 defaultdomain
-rw-r--r--    1 root     root           81 Aug 15 16:00 locals
-rw-r--r--    1 root     root           27 Aug 15 16:00 me
-rw-r--r--    1 root     root            7 Aug 15 16:00 plusdomain
-rw-r--r--    1 root     root           81 Aug 15 16:00 rcpthosts
[root@jupiter control]#  
  • それぞれの設定内容を確認する.
[root@jupiter control]# cat defaultdomain 
ujpqmail.ujp.jp
[root@jupiter control]# cat locals 
jupiter.ujpqmail.ujp.jp
[root@jupiter control]# cat me
jupiter.ujpqmail.ujp.jp
[root@jupiter control]# cat plusdomain 
ujp.jp
[root@jupiter control]# cat rcpthosts 
jupiter.ujpqmail.ujp.jp
[root@jupiter control]#  
  • それぞれのファイルの中身については,以下の通り.
control以下のファイルの説明
ファイル名 説明
me 自分のサーバのFQDN.qmailが稼働する為に最低限必要なファイル.
defaultdomain to等宛先のドメイン名が省略された時に補完されるドメイン名.
locals 受信するホスト名・ドメイン名. qmail-sendプロセスが利用する.
rcpthost 受信するホスト名・ドメイン名. qmail-smtpが利用.
plusdomain ドメイン部が+で終わっている場合に付加されるドメイン. qmail-injectが利用する.

4.最低限必要なユーザを作成する

  • qmailの動作に最低限必要なユーザ,3つを作成する.
qmailで必要な3つのユーザの説明
ファイル名 説明
root rootは管理者宛を意味する.
postmaster すべてのメールサーバに存在すべきとされているアカウント.
mailer-ddaemon qmail自身では必要ないが,エラーメールをこのアドレスに送信してくる人が居るので,作法として作成しておく.
  • qmailのaliasディレクトリ内に作成する.
[root@jupiter control]# cd /var/qmail/alias
[root@jupiter alias]# ls -la
total 44
drwxr-sr-x    3 alias    qmail        4096 Aug 15 14:27 .
drwxr-xr-x   11 root     qmail        4096 Aug 15 15:19 ..
-rw-r--r--    1 alias    nofiles        24 Aug 15 14:27 .bash_logout
-rw-r--r--    1 alias    nofiles       191 Aug 15 14:27 .bash_profile
-rw-r--r--    1 alias    nofiles       124 Aug 15 14:27 .bashrc
-rw-r--r--    1 alias    nofiles      5542 Aug 15 14:27 .canna
-rw-r--r--    1 alias    nofiles       237 Aug 15 14:27 .emacs
-rw-r--r--    1 alias    nofiles       120 Aug 15 14:27 .gtkrc
drwxr-xr-x    3 alias    nofiles      4096 Aug 15 14:27 .kde
-rw-r--r--    1 alias    nofiles       136 Aug 15 14:27 .zshrc
[root@jupiter alias]#  
  • ここに各ユーザの空ファイルを作成する.
[root@jupiter alias]# echo '&root' > .qmail-postmaster
[root@jupiter alias]# echo '&root' > .qmail-mailer-daemon
[root@jupiter alias]# echo '&Your MailAddress' > .qmail-root
[root@jupiter alias]# ls -la
total 44
drwxr-sr-x    3 alias    qmail        4096 Aug 15 16:20 .
drwxr-xr-x   11 root     qmail        4096 Aug 15 15:19 ..
-rw-r--r--    1 alias    nofiles        24 Aug 15 14:27 .bash_logout
-rw-r--r--    1 alias    nofiles       191 Aug 15 14:27 .bash_profile
-rw-r--r--    1 alias    nofiles       124 Aug 15 14:27 .bashrc
-rw-r--r--    1 alias    nofiles      5542 Aug 15 14:27 .canna
-rw-r--r--    1 alias    nofiles       237 Aug 15 14:27 .emacs
-rw-r--r--    1 alias    nofiles       120 Aug 15 14:27 .gtkrc
drwxr-xr-x    3 alias    nofiles      4096 Aug 15 14:27 .kde
-rw-r--r--    1 root     qmail           6 Aug 15 16:20 .qmail-mailer-daemon
-rw-r--r--    1 root     qmail           6 Aug 15 16:20 .qmail-postmaster
-rw-r--r--    1 root     qmail           9 Aug 15 16:20 .qmail-root
-rw-r--r--    1 alias    nofiles       136 Aug 15 14:27 .zshrc
[root@jupiter alias]#
コピペ用
cd /var/qmail/alias 
echo '&root' > .qmail-postmaster

echo '&root' > .qmail-mailer-daemon


echo '&あなたのメールアドレス' > .qmail-root



  • qmailでは,rootユーザがメールを直接受け取れないようになっているので,root宛メールは転送する必要がある.
  • 先ほど作成した.qmail-rootファイル内に,転送先のメールアドレスを記述する.
  • ここでは,あなたのメールアドレス宛に転送する.
[root@jupiter alias]# cat .qmail-root 
&あなたのメールアドレス
[root@jupiter alias]# 

5.sendmailを止める

  • ほっといたら自動的にsendmailが起動しているかもしれない.
[root@jupiter alias]# ps -aux | grep sendmail
root      1351  0.0  0.9  6108 2428 ?        S    10:02   0:00 sendmail: accepting
 connections
smmsp     1360  0.0  0.8  5984 2200 ?        S    10:02   0:00 sendmail: Queue 
runner@01:00:00 for /var/spool/clientmqueue
root      6287  0.0  0.1  1608  472 pts/1    S    16:33   0:00 grep sendmail
[root@jupiter alias]#  
  • プロセスが起動している事が確認できたので,停止する.
[root@jupiter alias]# /etc/rc.d/init.d/sendmail stop
sendmailを停止中:                                            [  OK  ]
sm-clientを停止中:                                           [  OK  ]
[root@jupiter alias]#
  • OSの起動時に,sendmailが間違っても起動しないように,つぶす.
[root@jupiter init.d]# pwd
/etc/rc.d/init.d
[root@jupiter init.d]# ls -la sendmail
-rwxr-xr-x    1 root     root         3219 Jun 30  2004 sendmail
[root@jupiter init.d]# mv sendmail sendmail.off
[root@jupiter init.d]# mv /etc/rc.d/rc2.d/S80sendmail /etc/rc.d/rc2.d/_S80sendmail
[root@jupiter init.d]# mv /etc/rc.d/rc3.d/S80sendmail /etc/rc.d/rc3.d/_S80sendmail
[root@jupiter init.d]# mv /etc/rc.d/rc5.d/S80sendmail /etc/rc.d/rc5.d/_S80sendmail
[root@jupiter init.d]#  
コピペ
cd /etc/rc.d/init.d
mv sendmail sendmail.off
mv /etc/rc.d/rc2.d/S80sendmail /etc/rc.d/rc2.d/_S80sendmail
mv /etc/rc.d/rc3.d/S80sendmail /etc/rc.d/rc3.d/_S80sendmail
mv /etc/rc.d/rc5.d/S80sendmail /etc/rc.d/rc5.d/_S80sendmail 
  • sendmailコマンドもつぶす.
[root@jupiter init.d]# cd /usr/sbin
[root@jupiter sbin]# ls -la sendmail
lrwxr-xr-x    1 root     root           21 Aug 10 11:36 sendmail -> /etc/alternatives/
mta
[root@jupiter sbin]# ls -la /etc/alternatives/mta
lrwxrwxrwx    1 root     root           27 Aug 12 19:12 /etc/alternatives/mta -> /usr/
sbin/sendmail.sendmail
[root@jupiter sbin]# ls -la /usr/sbin/sendmail.sendmail 
-rwxr-sr-x    1 root     smmsp      650816 Jun 30  2004 /usr/sbin/sendmail.sendmail
[root@jupiter sbin]# 
  • なんだか伝言ゲームしているようだ...
[root@jupiter sbin]# mv sendmail sendmail.off
[root@jupiter sbin]#
コピペ用
cd /usr/sbin
mv sendmail sendmail.off 
  • sendmailコマンドを前提として使っているシェルスクリプト等の為に,qmailで用意されているラッパー,つまりsendmailの代替え品に入れ替える.
[root@jupiter sbin]# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail 
[root@jupiter sbin]# ls -la /usr/sbin/sendmail
lrwxrwxrwx    1 root     root           23 Aug 15 17:11 /usr/sbin/sendmail ->
 /var/qmail/bin/sendmail
[root@jupiter sbin]# which sendmail
/usr/sbin/sendmail
[root@jupiter sbin]#
  • sendmailコマンドが指名している実態も確認できた.

6.qmailの起動設定

  • qmailの起動用スクリプトは,インストール時に用意されている.
  • スクリプトを確認する.
[root@jupiter boot]# pwd
/var/qmail/boot
[root@jupiter boot]# ls -la
total 48
drwxr-xr-x    2 root     qmail        4096 Aug 15 15:19 .
drwxr-xr-x   11 root     qmail        4096 Aug 15 15:19 ..
-rwxr-xr-x    1 root     qmail         347 Aug 15 15:30 binm1
-rwxr-xr-x    1 root     qmail         431 Aug 15 15:30 binm1+df
-rwxr-xr-x    1 root     qmail         316 Aug 15 15:30 binm2
-rwxr-xr-x    1 root     qmail         400 Aug 15 15:30 binm2+df
-rwxr-xr-x    1 root     qmail         314 Aug 15 15:30 binm3
-rwxr-xr-x    1 root     qmail         398 Aug 15 15:30 binm3+df
-rwxr-xr-x    1 root     qmail         204 Aug 15 15:30 home
-rwxr-xr-x    1 root     qmail         292 Aug 15 15:30 home+df
-rwxr-xr-x    1 root     qmail         223 Aug 15 15:30 proc
-rwxr-xr-x    1 root     qmail         309 Aug 15 15:30 proc+df
[root@jupiter boot]# cat home
#!/bin/sh

# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ~/Mailbox by default.

exec env - PATH="/var/qmail/bin:$PATH" ¥
qmail-start ./Mailbox splogger qmail
[root@jupiter boot]#
  • このファイルを,/var/qmail/rcとして複写する.
[root@jupiter boot]# cp /var/qmail/boot/home /var/qmail/rc
[root@jupiter boot]#
  • qmailのプロセスが居ない事を確認し,複写した起動スクリプトを利用してqmailプロセスを起動する.
[root@jupiter boot]# ps -ef | grep qmail
root      7064  7000  0 16:53 pts/0    00:00:00 grep qmail
[root@jupiter boot]# /var/qmail/rc &
[1] 7066
[root@jupiter boot]# ps -ef | grep qmail
qmails    7066  7000  0 16:54 pts/0    00:00:00 qmail-send
qmaill    7067  7066  0 16:54 pts/0    00:00:00 splogger qmail
root      7068  7066  0 16:54 pts/0    00:00:00 qmail-lspawn ./Mailbox
qmailr    7069  7066  0 16:54 pts/0    00:00:00 qmail-rspawn
qmailq    7070  7066  0 16:54 pts/0    00:00:00 qmail-clean
root      7072  7000  0 16:54 pts/0    00:00:00 grep qmail
[root@jupiter boot]#  
  • プロセスは5つ.タイミングによって,qmail-inject(送信プロセス)が動いている事がある.
  • 自動起動スクリプトを/etc/rc.d/init.d/qmailとして作成し,ランレベル毎にシンボリックリンクを設定する.
[root@jupiter sbin]# cat /etc/rc.d/init.d/qmail
#bin/csh

echo -n 'qmail starting.'
csh -cf '/var/qmail/rc &'
[root@jupiter sbin]# ls -la /etc/rc.d/init.d/qmail
-rw-r--r--    1 root     root           62 Aug 15 17:22 /etc/rc.d/init.d/qmail
[root@jupiter sbin]# chmod +x /etc/rc.d/init.d/qmail
[root@jupiter sbin]# ls -la /etc/rc.d/init.d/qmail
-rwxr-xr-x    1 root     root           62 Aug 15 17:22 /etc/rc.d/init.d/qmail
[root@jupiter sbin]# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc2.d/S80qmail
[root@jupiter sbin]# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc3.d/S80qmail
[root@jupiter sbin]# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc5.d/S80qmail
[root@jupiter sbin]# 
コピペ用
chmod +x /etc/rc.d/init.d/qmail
ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc2.d/S80qmail 
ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc3.d/S80qmail 
ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc5.d/S80qmail
  • これでだいたいのランレベルでの稼働が設定できたが,rc2等で不要だと考えるのであれば,実行しなくてよい.

7.qmailの停止

  • qmailの停止用のコマンドは用意されていない.
  • よってkillコマンドで停止する.
  • まずはプロセスリストを取得する.
[root@jupiter sbin]# ps -ef | grep qmail   
qmails    7066  7000  0 16:54 pts/0    00:00:00 qmail-send
qmaill    7067  7066  0 16:54 pts/0    00:00:00 splogger qmail
root      7068  7066  0 16:54 pts/0    00:00:00 qmail-lspawn ./Mailbox
qmailr    7069  7066  0 16:54 pts/0    00:00:00 qmail-rspawn
qmailq    7070  7066  0 16:54 pts/0    00:00:00 qmail-clean
root      7124  7000  0 17:42 pts/0    00:00:00 grep qmail
[root@jupiter sbin]#
  • これをみると,qmail-sendコマンドが親プロセスであることが確認できる.
  • よってこのプロセスを停止する.
[root@jupiter sbin]# kill 7066
[root@jupiter sbin]# ps -ef | grep qmail
root      7128  7000  0 17:43 pts/0    00:00:00 grep qmail
[2]+  Done                    /var/qmail/rc  (wd: /var/qmail/boot)
(wd now: /usr/sbin)
[root@jupiter sbin]#
  • プロセスがなくなった事が確認できた.

8.Maildir形式にする

  • 1メール1ファイルで保存するMaildir形式がqmailの特徴としてあげられるが,デフォルトではsendmail互換のmbox形式となっている.
  • よって,この形式を変更する.
  • Maildir形式にする為には,qmail-startのパラメータを変更する事で対応できる.
  • 起動スクリプトを,次のように変更する.
変更前
[root@jupiter sbin]# cat /var/qmail/rc
#!/bin/sh

# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ~/Mailbox by default.

exec env - PATH="/var/qmail/bin:$PATH" ¥
qmail-start ./Mailbox splogger qmail
[root@jupiter sbin]#  
変更後
[root@jupiter sbin]# cat /var/qmail/rc
#!/bin/sh

# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ~/Mailbox by default.

exec env - PATH="/var/qmail/bin:$PATH" ¥
qmail-start ./Maildir/ splogger qmail
[root@jupiter sbin]# 
  • Maildirの後ろのスラッシュを忘れないようにっっ!
  • aliasユーザ以下に,Maildirディレクトリを作成する.
  • qmailでは自動的に作成されない.Postfixでは自動的に作成されるらしい.
[root@jupiter sbin]# ls -la /var/qmail/alias        
total 52
drwxr-sr-x    3 alias    qmail        4096 Aug 15 16:30 .
drwxr-xr-x   11 root     qmail        4096 Aug 15 18:23 ..
-rw-r--r--    1 alias    nofiles        24 Aug 15 14:27 .bash_logout
-rw-r--r--    1 alias    nofiles       191 Aug 15 14:27 .bash_profile
-rw-r--r--    1 alias    nofiles       124 Aug 15 14:27 .bashrc
-rw-r--r--    1 alias    nofiles      5542 Aug 15 14:27 .canna
-rw-r--r--    1 alias    nofiles       237 Aug 15 14:27 .emacs
-rw-r--r--    1 alias    nofiles       120 Aug 15 14:27 .gtkrc
drwxr-xr-x    3 alias    nofiles      4096 Aug 15 14:27 .kde
-rw-r--r--    1 root     qmail          12 Aug 15 16:29 .qmail-mailer-daemon
-rw-r--r--    1 root     qmail           0 Aug 15 16:20 .qmail-postmaster
-rw-r--r--    1 root     qmail          12 Aug 15 16:27 .qmail-root
-rw-r--r--    1 alias    nofiles       136 Aug 15 14:27 .zshrc
[root@jupiter sbin]# /var/qmail/bin/maildirmake /var/qmail/alias/Maildir
[root@jupiter sbin]# chown -R alias /var/qmail/alias/Maildir
[root@jupiter sbin]# ls -la /var/qmail/alias 
total 56
drwxr-sr-x    4 alias    qmail        4096 Aug 15 18:28 .
drwxr-xr-x   11 root     qmail        4096 Aug 15 18:23 ..
-rw-r--r--    1 alias    nofiles        24 Aug 15 14:27 .bash_logout
-rw-r--r--    1 alias    nofiles       191 Aug 15 14:27 .bash_profile
-rw-r--r--    1 alias    nofiles       124 Aug 15 14:27 .bashrc
-rw-r--r--    1 alias    nofiles      5542 Aug 15 14:27 .canna
-rw-r--r--    1 alias    nofiles       237 Aug 15 14:27 .emacs
-rw-r--r--    1 alias    nofiles       120 Aug 15 14:27 .gtkrc
drwxr-xr-x    3 alias    nofiles      4096 Aug 15 14:27 .kde
-rw-r--r--    1 root     qmail          12 Aug 15 16:29 .qmail-mailer-daemon
-rw-r--r--    1 root     qmail           0 Aug 15 16:20 .qmail-postmaster
-rw-r--r--    1 root     qmail          12 Aug 15 16:27 .qmail-root
-rw-r--r--    1 alias    nofiles       136 Aug 15 14:27 .zshrc
drwx--S---    5 alias    qmail        4096 Aug 15 18:28 Maildir
[root@jupiter sbin]#  
  • qmailを起動する.
[root@jupiter sbin]# ps -ef | grep qmail
root      7303  7000  0 18:40 pts/0    00:00:00 grep qmail
[root@jupiter sbin]# /var/qmail/rc &
[1] 7304
[root@jupiter sbin]# ps -ef | grep qmail
qmails    7304  7000  0 18:40 pts/0    00:00:00 qmail-send
qmaill    7305  7304  0 18:40 pts/0    00:00:00 splogger qmail
root      7306  7304  0 18:40 pts/0    00:00:00 qmail-lspawn ./Maildir/
qmailr    7307  7304  0 18:40 pts/0    00:00:00 qmail-rspawn
qmailq    7308  7304  0 18:40 pts/0    00:00:00 qmail-clean
[root@jupiter sbin]#
  • テスト用のメールを送信してみる.
[root@jupiter sbin]# echo to:root | /var/qmail/bin/qmail-inject
[root@jupiter sbin]# ls -la /var/qmail/alias/Maildir/new/
total 12
drwx--S---    2 alias    qmail        4096 Aug 15 18:46 .
drwxrwSrw-    5 alias    qmail        4096 Aug 15 18:28 ..
-rw-------    1 alias    qmail         407 Aug 15 18:46 1124099192.7355.jupiter
[root@jupiter sbin]#
  • もう1通.
[root@jupiter sbin]# echo to:root | /var/qmail/bin/qmail-inject
[root@jupiter sbin]# ls -la /var/qmail/alias/Maildir/new/
total 16
drwx--S---    2 alias    qmail        4096 Aug 15 18:49 .
drwxrwSrw-    5 alias    qmail        4096 Aug 15 18:28 ..
-rw-------    1 alias    qmail         407 Aug 15 18:46 1124099192.7355.jupiter
-rw-------    1 alias    qmail         407 Aug 15 18:46 1124099200.7359.jupiter
[root@jupiter sbin]# 
  • メールが1通づつファイルに保存されている事が確認できた.

9.新規ユーザにMaildirが必ず作成されるようにする

  • 今後作成されるユーザに毎回Maildirを手動で作成しなければならないのは面倒なので,ユーザを作成(useradd)した時には,必ずMaildirが作成されるようにする.
  • その為には,maildirmakeコマンドでMaildirをスケルトンディレクトリに格納しておく.
[root@jupiter root]# cd /etc/skel/
[root@jupiter skel]# ls -la
total 48
drwxr-xr-x    3 root     root         4096 Aug 12 18:40 .
drwxr-xr-x   66 root     root         8192 Aug 15 17:18 ..
-rw-r--r--    1 root     root           24 Feb 14 22:25 .bash_logout
-rw-r--r--    1 root     root          191 Feb 14 22:25 .bash_profile
-rw-r--r--    1 root     root          124 Feb 14 22:25 .bashrc
-rw-r--r--    1 root     root         5542 Sep 17  2003 .canna
-rw-r--r--    1 root     root          237 Feb  4  2005 .emacs
-rw-r--r--    1 root     root          120 Aug 24  2004 .gtkrc
drwxr-xr-x    3 root     root         4096 Aug 12  2002 .kde
-rw-r--r--    1 root     root          136 Jan 17  2005 .zshrc
[root@jupiter skel]# /var/qmail/bin/maildirmake /etc/skel/Maildir
[root@jupiter skel]# ls -la
total 52
drwxr-xr-x    4 root     root         4096 Aug 15 19:33 .
drwxr-xr-x   66 root     root         8192 Aug 15 17:18 ..
-rw-r--r--    1 root     root           24 Feb 14 22:25 .bash_logout
-rw-r--r--    1 root     root          191 Feb 14 22:25 .bash_profile
-rw-r--r--    1 root     root          124 Feb 14 22:25 .bashrc
-rw-r--r--    1 root     root         5542 Sep 17  2003 .canna
-rw-r--r--    1 root     root          237 Feb  4  2005 .emacs
-rw-r--r--    1 root     root          120 Aug 24  2004 .gtkrc
drwxr-xr-x    3 root     root         4096 Aug 12  2002 .kde
-rw-r--r--    1 root     root          136 Jan 17  2005 .zshrc
drwx------    5 root     root         4096 Aug 15 19:33 Maildir
[root@jupiter skel]# ls -la Maildir 
total 20
drwx------    5 root     root         4096 Aug 15 19:33 .
drwxr-xr-x    4 root     root         4096 Aug 15 19:33 ..
drwx------    2 root     root         4096 Aug 15 19:33 cur
drwx------    2 root     root         4096 Aug 15 19:33 new
drwx------    2 root     root         4096 Aug 15 19:33 tmp
[root@jupiter skel]# 
  • これで次回から作成される.
  • ちなみにテスト用のユーザを作成してみる.
[root@jupiter skel]# /usr/sbin/useradd testuser
[root@jupiter skel]# cd /home/testuser
[root@jupiter testuser]# ls -la
total 48
drwx------    4 testuser testuser     4096 Aug 15 19:35 .
drwxr-xr-x    4 root     root         4096 Aug 15 19:35 ..
-rw-r--r--    1 testuser testuser       24 Aug 15 19:35 .bash_logout
-rw-r--r--    1 testuser testuser      191 Aug 15 19:35 .bash_profile
-rw-r--r--    1 testuser testuser      124 Aug 15 19:35 .bashrc
-rw-r--r--    1 testuser testuser     5542 Aug 15 19:35 .canna
-rw-r--r--    1 testuser testuser      237 Aug 15 19:35 .emacs
-rw-r--r--    1 testuser testuser      120 Aug 15 19:35 .gtkrc
drwxr-xr-x    3 testuser testuser     4096 Aug 15 19:35 .kde
-rw-r--r--    1 testuser testuser      136 Aug 15 19:35 .zshrc
drwx------    5 testuser testuser     4096 Aug 15 19:35 Maildir
[root@jupiter testuser]# ls -la Maildir 
total 20
drwx------    5 testuser testuser     4096 Aug 15 19:35 .
drwx------    4 testuser testuser     4096 Aug 15 19:35 ..
drwx------    2 testuser testuser     4096 Aug 15 19:35 cur
drwx------    2 testuser testuser     4096 Aug 15 19:35 new
drwx------    2 testuser testuser     4096 Aug 15 19:35 tmp
[root@jupiter testuser]#  
  • デフォルトで作成されるようになった事が確認できた.
  • 要らないユーザはすぐ消しとく.
[root@jupiter testuser]# /usr/sbin/userdel testuser
[root@jupiter testuser]# rm -rf /home/testuser
[root@jupiter testuser]#

10.ヘッダの時間を日本対応にする

  • デフォルトのままだと,メールのヘッダに設定される時間は,グリニッジ標準時間になる.
[root@jupiter root]# cd /var/qmail/alias/Maildir/new
[root@jupiter new]# ls
1124099192.7355.jupiter  1124099200.7359.jupiter
[root@jupiter new]# cat 1124099200.7359.jupiter
Return-Path: <root@ujpqmail.ujp.jp>
Delivered-To: postmaster@ujpqmail.ujp.jp
Received: (qmail 7153 invoked by alias); 15 Aug 2005 09:31:39 -0000
Delivered-To: root@ujpqmail.ujp.jp
Received: (qmail 7150 invoked by uid 0); 15 Aug 2005 09:31:39 -0000
Date: 15 Aug 2005 09:31:39 -0000
Message-ID: <20050815093139.7149.qmail@ujpqmail.ujp.jp>
From: root@ujpqmail.ujp.jp
to: root@ujpqmail.ujp.jp
[root@jupiter new]#  
  • 日本は+9時間なので,日本にあったように設定するパッチを適用する.
  • なお,何が何でもGMT+9000に設定するので,海外から来たメールも日本時間に定義されてしまうので気をつけなければならない.
  • パッチをダウンロードする.  教科書やそれに準ずるWebサイトではパッチが見つからないので,別のサイトから持ってくる.
[root@jupiter Download]# wget http://www.ujp.jp/modules/tech/index.php/Product/qmail/qm
ail-date-localtime.patch.gz
--12:49:01--  http://www.ujp.jp/modules/tech/index.php/Product/qmail-date-localtime.patch.gz
           => `qmail-date-localtime.patch.gz'
Resolving www.ujp.jp... 219.105.23.58
Connecting to www.ujp.jp[219.105.23.58]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 742 [application/octet-stream]

100%[==========================================>] 742           --.--K/s             

12:49:01 (7.08 MB/s) - `qmail-date-localtime.patch.gz' saved [742/742]

[root@jupiter Download]# ls -al
total 1148
drwxr-xr-x    2 root     root         4096 Aug 15 19:44 .
drwxr-x---   16 root     root         4096 Aug 15 18:39 ..
-rw-r--r--    1 root     root      1158144 Aug 15 14:23 qmail-1.03.tar
-rw-r--r--    1 root     root          741 Dec 20  1998 qmail-date-localtime.patch.gz
[root@jupiter Download]#
  • 取得したファイルを展開する.
[root@jupiter Download]# gzip -d qmail-date-localtime.patch.gz 
[root@jupiter Download]# ls -al
total 1148
drwxr-xr-x    2 root     root         4096 Aug 15 19:45 .
drwxr-x---   16 root     root         4096 Aug 15 18:39 ..
-rw-r--r--    1 root     root      1158144 Aug 15 14:23 qmail-1.03.tar
-rw-r--r--    1 root     root         2450 Dec 20  1998 qmail-date-localtime.patch
[root@jupiter Download]#  
  • 正式なサイトから持ってきたのではないので,中身を確認する.
[root@jupiter Download]# cat qmail-date-localtime.patch 
This patch causes the various qmail programs to generate date stamps in
the local timezone. I find GMT too annoying to convert from/to. I make
no warranties that it will work in your timezone, however it works for me.

--- qmail-1.01/date822fmt.c     Tue Apr 15 15:05:23 1997
+++ date822fmt.c        Fri Apr 18 00:39:41 1997
@@ -1,3 +1,4 @@
+#include <time.h>
 #include "datetime.h"
 #include "fmt.h"
 #include "date822fmt.h"
@@ -12,18 +13,51 @@
 {
   unsigned int i;
   unsigned int len;
+  time_t now;
+  datetime_sec utc;
+  datetime_sec local;
+  struct tm *tm;
+  struct datetime new_dt;
+  int minutes;
+
+  utc = datetime_untai(dt);
+  now = (time_t)utc;
+  tm = localtime(&now);
+  new_dt.year = tm->tm_year;
+  new_dt.mon = tm->tm_mon;
+  new_dt.mday = tm->tm_mday;
+  new_dt.hour = tm->tm_hour;
+  new_dt.min = tm->tm_min;
+  new_dt.sec = tm->tm_sec;
+  local = datetime_untai(&new_dt);
+
   len = 0;
-  i = fmt_uint(s,dt->mday); len += i; if (s) s += i;
+  i = fmt_uint(s,new_dt.mday); len += i; if (s) s += i;
   i = fmt_str(s," "); len += i; if (s) s += i;
-  i = fmt_str(s,montab[dt->mon]); len += i; if (s) s += i;
+  i = fmt_str(s,montab[new_dt.mon]); len += i; if (s) s += i;
   i = fmt_str(s," "); len += i; if (s) s += i;
-  i = fmt_uint(s,dt->year + 1900); len += i; if (s) s += i;
+  i = fmt_uint(s,new_dt.year + 1900); len += i; if (s) s += i;
   i = fmt_str(s," "); len += i; if (s) s += i;
-  i = fmt_uint0(s,dt->hour,2); len += i; if (s) s += i;
+  i = fmt_uint0(s,new_dt.hour,2); len += i; if (s) s += i;
   i = fmt_str(s,":"); len += i; if (s) s += i;
-  i = fmt_uint0(s,dt->min,2); len += i; if (s) s += i;
+  i = fmt_uint0(s,new_dt.min,2); len += i; if (s) s += i;
   i = fmt_str(s,":"); len += i; if (s) s += i;
-  i = fmt_uint0(s,dt->sec,2); len += i; if (s) s += i;
-  i = fmt_str(s," -0000¥n"); len += i; if (s) s += i;
+  i = fmt_uint0(s,new_dt.sec,2); len += i; if (s) s += i;
+
+  if (local < utc) {
+    minutes = (utc - local + 30) / 60;
+    i = fmt_str(s," -"); len += i; if (s) s += i;
+    i = fmt_uint0(s,minutes / 60,2); len += i; if (s) s += i;
+    i = fmt_uint0(s,minutes % 60,2); len += i; if (s) s += i;
+  }
+  else {
+    minutes = (local - utc + 30) / 60;
+    i = fmt_str(s," +"); len += i; if (s) s += i;
+    i = fmt_uint0(s,minutes / 60,2); len += i; if (s) s += i;
+    i = fmt_uint0(s,minutes % 60,2); len += i; if (s) s += i;
+  }
+
+  i = fmt_str(s,"¥n"); len += i; if (s) s += i;
+
   return len;
 }
[root@jupiter Download]
  • patchコマンドを使って,パッチを適用する.
[root@jupiter Download]# pwd
/root/Download
[root@jupiter Download]# ls
qmail-1.03.tar  qmail-date-localtime.patch
[root@jupiter Download]# cd /usr/local/src/qmail-1.03/
[root@jupiter qmail-1.03]# patch < /root/Download/qmail-date-localtime.patch 
patching file date822fmt.c
[root@jupiter qmail-1.03]#
  • 再度コンパイルとインストールを行う.
  • qmailが起動していたら停止する.
[root@jupiter qmail-1.03]# ps -ef | grep qmail
qmails    7304  7000  0 18:40 pts/0    00:00:00 qmail-send
qmaill    7305  7304  0 18:40 pts/0    00:00:00 splogger qmail
root      7306  7304  0 18:40 pts/0    00:00:00 qmail-lspawn ./Maildir/
qmailr    7307  7304  0 18:40 pts/0    00:00:00 qmail-rspawn
qmailq    7308  7304  0 18:40 pts/0    00:00:00 qmail-clean
root      7431  7000  0 20:06 pts/0    00:00:00 grep qmail
[root@jupiter qmail-1.03]# kill 7304
[root@jupiter qmail-1.03]# ps -ef | grep qmail
root      7433  7000  0 20:06 pts/0    00:00:00 grep qmail
[1]+  Done                    /var/qmail/rc  (wd: /usr/sbin)
(wd now: /usr/local/src/qmail-1.03)
[root@jupiter qmail-1.03]# make setup check

     〜  略  〜  

received.o date822fmt.o now.o qmail.o cdb.a fd.a wait.a ¥
datetime.a getln.a open.a sig.a case.a env.a stralloc.a ¥
alloc.a substdio.a error.a str.a fs.a auto_qmail.o  `cat ¥
socket.lib`
./install
./instcheck
[root@jupiter qmail-1.03]#
  • 無事にコンパイルも終わったようなので,起動する.
[root@jupiter qmail-1.03]# /var/qmail/rc &
[1] 7463
[root@jupiter qmail-1.03]# ps -ef | grep qmail
qmails    7463  7000  0 20:11 pts/0    00:00:00 qmail-send
qmaill    7464  7463  0 20:11 pts/0    00:00:00 splogger qmail
root      7465  7463  0 20:11 pts/0    00:00:00 qmail-lspawn ./Maildir/
qmailr    7466  7463  0 20:11 pts/0    00:00:00 qmail-rspawn
qmailq    7467  7463  0 20:11 pts/0    00:00:00 qmail-clean
root      7469  7000  0 20:15 pts/0    00:00:00 grep qmail
[root@jupiter qmail-1.03]# 
  • 無事起動した模様.
  • テストメールを出して,ヘッダを確認する.
[root@jupiter qmail-1.03]# echo to:root | /var/qmail/bin/qmail-inject 
[root@jupiter qmail-1.03]# date    
Mon Aug 15 20:20:36 JST 2005
[root@jupiter qmail-1.03]# cd /var/qmail/alias/Maildir/new
[root@jupiter new]# ls -la
total 20
drwx--S---    2 alias    qmail        4096 Aug 15 20:20 .
drwxrwSrw-    5 alias    qmail        4096 Aug 15 18:28 ..
-rw-------    1 alias    qmail         407 Aug 15 18:46 1124099192.7355.jupiter
-rw-------    1 alias    qmail         407 Aug 15 18:46 1124099200.7359.jupiter
-rw-------    1 alias    qmail         407 Aug 15 20:20 1124104828.7478.jupiter
[root@jupiter new]# cat 1124104828.7478.jupiter
Return-Path: <root@ujpqmail.ujp.jp>
Delivered-To: postmaster@ujpqmail.ujp.jp
Received: (qmail 7475 invoked by alias); 15 Aug 2005 20:20:27 +0900
Delivered-To: root@ujpqmail.ujp.jp
Received: (qmail 7472 invoked by uid 0); 15 Aug 2005 20:20:27 +0900
Date: 15 Aug 2005 20:20:27 +0900
Message-ID: <20050815112027.7471.qmail@ujpqmail.ujp.jp>
From: root@ujpqmail.ujp.jp
to: root@ujpqmail.ujp.jp
[root@jupiter new]#  
  • ヘッダと時間が設定された事が確認できた.
  • ここまででひとおとりの設定は終了かな.


広告スペース
Google