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である.
- qmail:the Internet's MTA of choice
- 今回インストールする環境を確認する.
[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]# |
- それぞれのファイルの中身については,以下の通り.
ファイル名 | 説明 |
---|---|
me | 自分のサーバのFQDN.qmailが稼働する為に最低限必要なファイル. |
defaultdomain | to等宛先のドメイン名が省略された時に補完されるドメイン名. |
locals | 受信するホスト名・ドメイン名. qmail-sendプロセスが利用する. |
rcpthost | 受信するホスト名・ドメイン名. qmail-smtpが利用. |
plusdomain | ドメイン部が+で終わっている場合に付加されるドメイン. qmail-injectが利用する. |
4.最低限必要なユーザを作成する
- 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]# |
- ヘッダと時間が設定された事が確認できた.
- ここまででひとおとりの設定は終了かな.