一気にインストールする決めうちスクリプトです。
/usr/local/src/djb とかに install.sh などとしておき、
./install.sh install
もしくは
sh install.sh install
で実行です。
[追記 date="2011.07.13."]
CentOS6 (RHEL6ベース)の場合、インストール後に下記の記事の設定が必要です。
[サイト内の別記事] CentOS6にdaemontoolsをインストールするとそのままでは自動起動しない。
[/追記]
[追記 date="2011.09.09."]
sendmailラッパーのシンボリックリンクがsendmailインストール時に機能しなかったのを修正。
[/追記]
相当決めうちのスクリプトなので、中身をよくご確認のうえご利用ください。
※当然ですが、無保証です。
とりあえずインストールはうまくいけば動くはずですが、他の部分は未完成です。
#! /bin/sh # ===================================================== # 設定 # ===================================================== export PATH=$PATH:/usr/local/bin # CentOS 6 系の場合 1 に。 RHEL6=0 # ------------------------------------------------------------------- # DJB共通 # ------------------------------------------------------------------- # パッケージバージョン PACK_NQ=netqmail-1.06 PACK_DT=daemontools-0.76 PACK_UT=ucspi-tcp-0.88 PACK_DD=djbdns-1.05 BASE_LOG_DIR=/var/log/multilog # このスクリプトが ${BASE_DIR}直下にある前提で。 # BASE_DIR : パッケージ管理パス pushd $(dirname $0) 2>&1 > /dev/null BASE_DIR=$(pwd) popd 2>&1 > /dev/null # インストールログファイルのフルパス INSTALL_LOG=${BASE_DIR}/install_logs/install_$(date +%Y%m%d_%H%M%S).log # ログディレクトリが存在しない場合作成 [ ! -e `dirname ${INSTALL_LOG}` ] && mkdir -p `dirname ${INSTALL_LOG}` # ------------------------------------------------------------------- # daemontools # ------------------------------------------------------------------- DT_LOG_GENS=100 DT_LOG_SIZE=16777215 # ------------------------------------------------------------------- # djbdns # ------------------------------------------------------------------- # DJBDNS(cache)インストール設定 DD_GRP=djbdns DD_CACHE_USR=dnscache DD_LOG_USR=dnslog DD_HOME_DIR=/etc/dnscache DD_LOG_DIR=${BASE_LOG_DIR}/dnscache DD_SCR_RT_UPD=sh/update_root_servers.sh # ------------------------------------------------------------------- # netqmail # ------------------------------------------------------------------- # netqmail 用設定 NQ_ADD_PATCHES_DIR=${BASE_DIR}/src/netqmail-patches NQ_SRC_DIR=${BASE_DIR}/src/${PACK_NQ} # net-qmail other-patches パス PATCHES=${NQ_SRC_DIR}/other-patches # qmail インストールディレクトリ QMAIL_DIR=/var/qmail NQ_SVC_DIR=${QMAIL_DIR}/services NQ_SMTP_CDB=${QMAIL_DIR}/services/tcprules/smtp.cdb # ===================================================== # 共通スクリプト # ===================================================== # ログセクションタイトル出力 log_title() { echo " ----------------------------------------------------------" echo " $(date +%T) $1" echo " ----------------------------------------------------------" } # ===================================================== # DJB共通スクリプト # ===================================================== # DJBディレクトリ作成 # /doc -> ${BASE_DIR}/doc : ドキュメントファイル # /command -> ${BASE_DIR}/command : コマンドへのシンボリックリンク # /package -> ${BASE_DIR}/package : パッケージディレクトリへのシンボリックリンク # ${BASE_DIR}/archive : ダウンロードパッケージの保管場所 # ${BASE_DIR}/src : パッケージの展開ディレクトリ # archive, src は非標準 create_dirs() { # package ディレクトリ作成 [ ! -e ${BASE_DIR}/package ] && mkdir ${BASE_DIR}/package [ ! -e /package ] && ln -s ${BASE_DIR}/package /package # command ディレクトリ作成 [ ! -e ${BASE_DIR}/command ] && mkdir ${BASE_DIR}/command [ ! -e /command ] && ln -s ${BASE_DIR}/command /command # doc ディレクトリ作成 [ ! -e ${BASE_DIR}/doc ] && mkdir ${BASE_DIR}/doc [ ! -e /doc ] && ln -s ${BASE_DIR}/doc /doc # archive ディレクトリ作成 [ ! -e ${BASE_DIR}/archive ] && mkdir ${BASE_DIR}/archive # src ディレクトリ作成 [ ! -e ${BASE_DIR}/src ] && mkdir ${BASE_DIR}/src } # ===================================================== # ダウンロードスクリプト # ===================================================== # 各パッケージダウンロード download_package() { pushd ${BASE_DIR}/archive 2>&1 > /dev/null # ダウンロード [ ! -e ${PACK_NQ}.tar.gz ] && wget http://qmail.org/${PACK_NQ}.tar.gz [ ! -e ${PACK_DT}.tar.gz ] && wget http://tools.qmail.jp/daemontools/${PACK_DT}.tar.gz [ ! -e ${PACK_UT}.tar.gz ] && wget http://tools.qmail.jp/ucspi-tcp/${PACK_UT}.tar.gz [ ! -e ${PACK_DD}.tar.gz ] && wget http://cr.yp.to/djbdns/${PACK_DD}.tar.gz [ ! -e doc.tar.gz -a ! -e djbdns_doc.tar.gz ] && wget http://cr.yp.to/djbdns/doc.tar.gz && mv doc.tar.gz djbdns_doc.tar.gz popd 2>&1 > /dev/null } # 各パッケージ展開 extract_archive() { # net-qmail ucspi-tcp djbdns 展開 pushd ${BASE_DIR}/src 2>&1 > /dev/null [ ! -e ${PACK_NQ} ] && tar zxvf ${BASE_DIR}/archive/${PACK_NQ}.tar.gz [ ! -e ${PACK_UT} ] && tar zxvf ${BASE_DIR}/archive/${PACK_UT}.tar.gz [ ! -e ${PACK_DD} ] && tar zxvf ${BASE_DIR}/archive/${PACK_DD}.tar.gz popd 2>&1 > /dev/null # daemontools 展開 → ./package 以下 pushd ${BASE_DIR}/package 2>&1 > /dev/null [ ! -e admin/${PACK_DT} ] && tar zxvf ${BASE_DIR}/archive/${PACK_DT}.tar.gz popd 2>&1 > /dev/null # djbdns_doc 展開 pushd ${BASE_DIR} 2>&1 > /dev/null tar zxvf archive/djbdns_doc.tar.gz for i in packages commands cfunctions fileformats do sort -f /dev/null `find /doc/merge -name $i.html` > /doc/$i.new mv /doc/$i.new /doc/$i.html done popd 2>&1 > /dev/null } # ===================================================== # インストールスクリプト # ===================================================== # ------------------------------------------------------------------- # daemontools 関連 # ------------------------------------------------------------------- # daemontools インストール daemontools_install() { if [ -d /service ]; then echo "daemontools already installed. (skip)" else ln -s ${BASE_DIR}/package /package pushd ${BASE_DIR}/package/admin/${PACK_DT} 2>&1 > /dev/null patch -p1 < ${PATCHES}/daemontools-0.76.errno.patch package/install popd 2>&1 > /dev/null # CentOS 6 対応 (SysVinit が upstart になったことに対応) if [ ${RHEL6} eq 1 ]; then # /etc/inittab コメントアウト sed -e 's/\(SV:123456:respawn:\/command\/svscanboot\)/# \1/g' /etc/inittab > /etc/inittab # /etc/init/svscan.conf 作成 cat << _EOT_ > /etc/init/svscan.conf start on runlevel [12345] respawn exec /command/svscanboot _EOT_ initctl reload-configuration initctl start svscan fi fi } # サービスログrun ファイル作成 # 第1引数:ログユーザ名 第2引数:ログディレクトリ名 dt_log_run() { local LOGUSER=$1 local LOGDIR=$2 cat << _EOT_ #!/bin/sh exec \\ setuidgid \\ ${LOGUSER} \\ multilog \\ t \\ n${DT_LOG_GENS} \\ s${DT_LOG_SIZE} \\ ${LOGDIR} _EOT_ } # ------------------------------------------------------------------- # ucspi-tcp 関連 # ------------------------------------------------------------------- # ucspi-tcp インストール ucspi_tcp_install() { pushd ${BASE_DIR}/src/${PACK_UT} 2>&1 > /dev/null patch -p1 < ${PATCHES}/ucspi-tcp-0.88.errno.patch patch -p1 < ${PATCHES}/ucspi-tcp-0.88.a_record.patch patch -p1 < ${PATCHES}/ucspi-tcp-0.88.nodefaultrbl.patch make make setup check popd 2>&1 > /dev/null } # ------------------------------------------------------------------- # djbdns 関連 # ------------------------------------------------------------------- # ユーザ・グループ作成(ログディレクトリも作成) dd_preset() { # DJBDNS用グループ作成 groupadd ${DD_GRP} # DJBDNS DNSCACHE用/LOG用ユーザ作成 useradd \ -M \ -g ${DD_GRP} \ -G ${DD_GRP} \ -s /bin/false \ -c "djbdns dnscache user" \ ${DD_CACHE_USR} useradd \ -M \ -g ${DD_GRP} \ -G ${DD_GRP} \ -s /bin/false \ -c "djbdns log user" \ ${DD_LOG_USR} # ログディレクトリ作成 # DJBDNS ログ [ ! -e ${DD_LOG_DIR} ] \ && mkdir -p ${DD_LOG_DIR} \ && chown -R ${DD_LOG_USR}.${DD_GRP} ${DD_LOG_DIR} } # スクリプト作成 dd_script() { case $1 in "root_update" ) ;; esac } # ローカルDNSを見る必要のあるゾーン用の設定 dd_local_nameservers() { pushd ${DD_HOME_DIR}/root/servers 2>&1 > /dev/null # 特定のドメイン(LANとか)を名前解決する際に使うDNSを別途指定する場合はこの辺に追記 # echo "192.168.100.35" > example.com # echo "192.168.100.35" > example.net popd 2>&1 > /dev/null } # djbdns(cache) インストール dd_install_dnscache() { # ユーザ・グループ作成・ログディレクトリ作成 dd_preset # パッチ、コンパイル、インストール pushd ${BASE_DIR}/src/${PACK_DD} 2>&1 > /dev/null patch -p1 < ${PATCHES}/djbdns-1.05.errno.patch make make setup check popd 2>&1 > /dev/null # サービスディレクトリ作成 dnscache-conf ${DD_CACHE_USR} ${DD_LOG_USR} ${DD_HOME_DIR} # サービス自動起動停止 # touch ${DD_HOME_DIR}/down # touch ${DD_HOME_DIR}/log/down # ログローテーション設定変更(log/run) dt_log_run ${DD_LOG_USR} ${DD_LOG_DIR} > ${DD_HOME_DIR}/log/run # 管理スクリプトディレクトリ作成 mkdir -p ${DD_HOME_DIR}/sh # 管理スクリプトディレクトリに root servers 更新スクリプト作成 cat << _EOT_ > ${DD_HOME_DIR}/${DD_SCR_RT_UPD} #! /bin/sh cd $(dirname ${DD_HOME_DIR}/${DD_SCR_RT_UPD}) wget http://www.internic.net/zones/named.root grep " A " named.root |awk '{print \$4}' > ${DD_HOME_DIR}/root/servers/@ rm named.root _EOT_ # 作成したスクリプトを実行 sh ${DD_HOME_DIR}/${DD_SCR_RT_UPD} # ローカルIP範囲のDNS設定 # (DH用設定) dd_local_nameservers # サービス設定 ln -s ${DD_HOME_DIR} /service/dnscache } # ------------------------------------------------------------------- # netqmail 関連 # ------------------------------------------------------------------- # netqmail 用パッチダウンロード/適用 nq_download_netqmail_patches() { # パッチ用ディレクトリ作成 [ ! -e ${NQ_ADD_PATCHES_DIR} ] && mkdir -p ${NQ_ADD_PATCHES_DIR} pushd ${NQ_ADD_PATCHES_DIR} 2>&1 > /dev/null [ ! -e netqmail-maildir++.patch ] && wget http://www.shupp.org/patches/netqmail-maildir++.patch [ ! -e qmail-date-localtime.patch ] && wget http://www.asahi-net.or.jp/~AA4T-NNGK/codes/qmail-date-localtime.patch [ ! -e patch-qmail-1.03-rfc2821.diff ] && wget http://www.dt.e-technik.uni-dortmund.de/~ma/qmail/patch-qmail-1.03-rfc2821.diff # ------------ # 追加のパッチがあればこの辺にダウンロードコマンドを追記 # ------------ popd 2>&1 > /dev/null log_title "netqmail パッチ適用" pushd ${NQ_SRC_DIR} 2>&1 > /dev/null patch -p1 < ${NQ_ADD_PATCHES_DIR}/netqmail-maildir++.patch patch -p1 < ${NQ_ADD_PATCHES_DIR}/qmail-date-localtime.patch patch -p0 < ${NQ_ADD_PATCHES_DIR}/patch-qmail-1.03-rfc2821.diff # ------------ # 追加のパッチがあればこの辺にpatch コマンドを追記 # ------------ popd 2>&1 > /dev/null } # netqmail 用ユーザ・グループ作成 nq_create_users_groups() { # qmail ディレクトリ作成 [ ! -e ${QMAIL_DIR} ] && mkdir -p ${QMAIL_DIR} # ユーザ・グループ作成 groupadd nofiles useradd -s /bin/false -g nofiles -d ${QMAIL_DIR}/alias alias useradd -s /bin/false -g nofiles -d ${QMAIL_DIR} qmaild useradd -s /bin/false -g nofiles -d ${QMAIL_DIR} qmaill useradd -s /bin/false -g nofiles -d ${QMAIL_DIR} qmailp groupadd qmail useradd -s /bin/false -g qmail -d ${QMAIL_DIR} qmailq useradd -s /bin/false -g qmail -d ${QMAIL_DIR} qmailr useradd -s /bin/false -g qmail -d ${QMAIL_DIR} qmails } # netqmail コンパイル・インストール nq_install() { pushd ${NQ_SRC_DIR} 2>&1 > /dev/null make make setup check # config-fast実行 echo -n "このメールサーバのFQDNを入力してください。:" read FQDN ./config-fast ${FQDN} popd 2>&1 > /dev/null } # smtp.cdb 作成 nq_set_smtp_cdb() { # ディレクトリ作成 [ ! -e `dirname ${NQ_SMTP_CDB}` ] && mkdir -p `dirname ${NQ_SMTP_CDB}` # smtp.tcp 作成 cat << _EOT_ > `dirname ${NQ_SMTP_CDB}`/smtp.tcp 127.:allow,RELAYCLIENT="",RBLSMTPD="" :allow _EOT_ tcprules ${NQ_SMTP_CDB} `dirname ${NQ_SMTP_CDB}`/smtp.tmp < `dirname ${NQ_SMTP_CDB}`/smtp.tcp } # netqmail サービス設定 nq_set_service() { # サービスディレクトリ作成 [ ! -e ${NQ_SVC_DIR}/qmail/log ] && mkdir -p ${NQ_SVC_DIR}/qmail/log [ ! -e ${NQ_SVC_DIR}/smtpd/log ] && mkdir -p ${NQ_SVC_DIR}/smtpd/log # qmail run ファイル作成 cat << _EOT_ > ${NQ_SVC_DIR}/qmail/run #! /bin/sh exec \\ env - PATH="/var/qmail/bin:/usr/local/bin:/usr/bin:/bin" \\ qmail-start ./Maildir/ _EOT_ # smtpd run ファイル作成 cat << _EOT_ > ${NQ_SVC_DIR}/smtpd/run #! /bin/sh PATH="/var/qmail/bin:/usr/local/bin:/bin:/usr/bin" exec \\ tcpserver -HRv \\ -u \`id -u qmaild\` \\ -g \`id -g qmaild\` \\ -c 250 \\ -x ${NQ_SMTP_CDB} \\ 0 \\ smtp \\ rblsmtpd \\ -r sbl.spamhaus.org \\ -r dnsbl.ahbl.org \\ ${QMAIL_DIR}/bin/qmail-smtpd \\ 2>&1 _EOT_ # smtp.cdb 作成 nq_set_smtp_cdb # ログディレクトリ作成 [ ! -e ${BASE_LOG_DIR}/qmail ] && mkdir -p ${BASE_LOG_DIR}/qmail [ ! -e ${BASE_LOG_DIR}/smtpd ] && mkdir -p ${BASE_LOG_DIR}/smtpd chown -R qmaill.nofiles ${BASE_LOG_DIR}/qmail chown -R qmaill.nofiles ${BASE_LOG_DIR}/smtpd # qmail ログ run ファイル作成 dt_log_run qmaill ${BASE_LOG_DIR}/qmail > ${NQ_SVC_DIR}/qmail/log/run # smtpd ログ run ファイル作成 dt_log_run qmaill ${BASE_LOG_DIR}/smtpd > ${NQ_SVC_DIR}/smtpd/log/run # パーミッション chmod +t ${NQ_SVC_DIR}/qmail/ chmod +x ${NQ_SVC_DIR}/qmail/run chmod +x ${NQ_SVC_DIR}/qmail/log/run chmod +t ${NQ_SVC_DIR}/smtpd/ chmod +x ${NQ_SVC_DIR}/smtpd/run chmod +x ${NQ_SVC_DIR}/smtpd/log/run echo -n "qmail/smtpdサービスを開始しますか?[ y/N ]:" read TMP if [ ! ${TMP} = "y" -a ! ${TMP} = "Y" ]; then touch ${NQ_SVC_DIR}/qmail/down touch ${NQ_SVC_DIR}/qmail/log/down touch ${NQ_SVC_DIR}/smtpd/down touch ${NQ_SVC_DIR}/smtpd/log/down fi ln -s ${NQ_SVC_DIR}/qmail /service/ ln -s ${NQ_SVC_DIR}/smtpd /service/ # sendmail ラッパー # ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail # ln -s /var/qmail/bin/sendmail /usr/lib/sendmail # 2011.09.09.変更 [ -e /usr/sbin/sendmail ] && mv /usr/sbin/sendmail /usr/sbin/sendmail.orig [ -e /usr/lib/sendmail ] && mv /usr/lib/sendmail /usr/sbin/sendmail.orig ln -sf /var/qmail/bin/sendmail /usr/sbin/sendmail ln -sf /var/qmail/bin/sendmail /usr/lib/sendmail } # qmail/control 設定 set_qmail_control() { pushd ${QMAIL_DIR}/control 2>&1 > /dev/null echo 255 > concurrencylocal echo 255 > concurrencyremote echo 259200 > queuelifetime echo 120 > timeoutconnect echo 600 > timeoutremote popd 2>&1 > /dev/null } # netqmail インストール netqmail_install() { # netqmail 用パッチダウンロード/適用 log_title "netqmail パッチダウンロード" nq_download_netqmail_patches # 最大同時配信数を255に echo 255 > ${NQ_SRC_DIR}/conf-spawn # qmailディレクトリ・ユーザ・グループ作成 log_title "qmail ディレクトリ・ユーザ・グループ作成" nq_create_users_groups # netqmail コンパイル・インストール log_title "netqmail インストール" nq_install # qmail/control log_title "qmail/control 設定" set_qmail_control # サービス設定 log_title "netqmail サービス設定" nq_set_service } # ===================================================== # メインスクリプト # ===================================================== # ------------------------------------------------------------------- # デバッグ用スクリプト # ------------------------------------------------------------------- debug() { # echo "-----------------------" # echo ${PACK_NQ} # echo ${PACK_DT} # echo ${PACK_UT} # echo ${PACK_DD} # echo "-----------------------" # echo ${BASE_DIR} # echo ${PATCHES} # echo "-----------------------" # echo ${DD_GRP} # echo ${DD_CACHE_USR} # echo ${DD_LOG_USR} # echo ${DD_HOME_DIR} # echo ${DD_LOG_DIR} # echo ${DD_SCR_RT_UPD} # echo ${DD_LOG_GENS} # echo ${DD_LOG_SIZE} # # echo "-----------------------" # log_title "djbdns インストール" # dd_script "log_run" # # log_title "djbdns インストール" # dd_script "root_update" nq_set_service } # ------------------------------------------------------------------- # アンインストールスクリプト # ------------------------------------------------------------------- uninstall() { rm -rf \ /service \ /command \ /doc \ /package \ ${BASE_DIR}/command \ ${BASE_DIR}/doc \ ${BASE_DIR}/package \ ${BASE_DIR}/archive \ ${BASE_DIR}/src \ ${DD_HOME_DIR} ls -l /usr/local/bin \ | grep "/command" \ | awk '{ print "/usr/local/bin/"$9; }' \ | xargs rm -rf userdel ${DD_CACHE_USR} userdel ${DD_LOG_USR} groupdel ${DD_GRP} } # ------------------------------------------------------------------- # インストールスクリプト # ------------------------------------------------------------------- install(){ log_title "DJBディレクトリ作成" create_dirs log_title "ダウンロード" download_package log_title "パッケージ展開" extract_archive log_title "daemontools インストール" daemontools_install log_title "ucspi-tcp インストール" ucspi_tcp_install log_title "djbdns インストール" dd_install_dnscache echo -n "netqmailのインストールを実行しますか?[ y/N ]:" read TMP if [ ${TMP} = "y" -o ${TMP} = "Y" ]; then log_title "netqmail インストール" netqmail_install fi } # ------------------------------------------------------------------- # メイン # ------------------------------------------------------------------- case $1 in "debug" ) debug ;; "uninstall" ) uninstall ;; "install" ) install 2>&1 |tee ${INSTALL_LOG} ;; * ) echo "引数に install | uninstall | debug のいずれかを指定してください。" esac
[Blog:技術系メモ] に新規投稿しました。 daemontools + ucspi-tcp + http://go.kaz.bz/52
@ma2shita あ、netqmailでいきそうで、インストール面倒なら、こちらもご参照ください http://ux.nu/vUj9RO
だいぶ前に作ったゲテ物スクリプトです。