BASH Programming - Введение

       

Компилятор нодлиста


Все нодлисты, как указано в config-файле, должны лежать в каталоге /var/spool/ifmail/nodelist. Вызываем ifindex, который создаст index.dir и index.pag, которые содержат откомпилированный ноделист.

Поскольку ifindex не слишком быстр, вы можете перед компиляцией урезать нодлист до нужных вам размеров (напрмер, ограничиться только вашей зоной). Вы можете спользовать этот скрипт. Поправьте в нем значения в соответствии с вашими.

#!/bin/sh # # /var/spool/ifmail/nodelist/strip.nodelist # if [ ! $1 ] then echo Syntax Error! echo Start with $0 xxx, whereas xxx is the number of the latest echo nodelist. exit fi

NODELIST=NODELIST.$1

if [ ! -s $NODELIST ] then echo $NODELIST is not a correct nodelist exit fi

NLSHORT=nl_short.$1

if [ -s $NLSHORT ] then echo $NLSHORT already exists, moving to $NLSHORT.bak mv -f $NLSHORT $NLSHORT.bak fi

head -n 2 $NODELIST >> $NLSHORT grep ',1-[0-9][0-9][0-9]-\|^Zone,1' $NODELIST >> $NLSHORT

echo Done.

Вы можете запускать скрипт так: strip.nodelist xxx, гдеe xxx - номер последнего нодлиста. Скрипт генерирует nl_short.xxx из nodelist.xxx.

А что с diffs? Начиная с ifmail-2.6 имеется программа nlpatch, включенная в состав пакета, которая разбирается со старыми нодлистами и применяет последние diff, например:

nlpatch NODELIST.123 NODEDIFF.130

создаст 130-й нодлист.

Для обработки еженедельных nodediff`ов я использую скрипт /etc/ifmail/misc/getnodelist. Я скопировал его в мой /usr/lib/ifmail, установив владельца fnet.uucp с правами доступа 764, и вызываю раз в неделю из crontab как пользователь fnet. Вы можете подправить скрипт под вашу систему.

#!/bin/sh # Check и see if we got a fresh nodediff, unpack и apply it и rebuild # the index.

INB=/var/spool/ifmail/inbound NLDIR=/var/spool/ifmail/nodelist UNPACKER="/usr/bin/unzip -o" PATCHER=/usr/lib/ifmail/nlpatch INDEXER=/usr/lib/ifmail/ifindex NDMASK='nodediff*' NLMASK='NODELIST*'

if cd ${INB} ; then DIFF=`ls ${NDMASK}` if [ ! -f ${NDMASK} ] ; then echo No diff file exit 0 fi else echo Cannot chdir to ${INB} exit 1 fi

echo Processing ${DIFF}

if cd ${NLDIR} ; then if cp ${INB}/${DIFF} . ; then rm -f ${INB}/${DIFF} else echo Cannot copy ${INB}/${DIFF} to ${NLDIR} exit 1 fi else echo Cannot chdir to ${NLDIR} exit 1 fi

if ${UNPACKER} ${DIFF} ; then rm -f ${DIFF} DIFF=`ls ${NDMASK}` else echo Could not unpack ${DIFF} exit 1 fi

if [ ! -f ${DIFF} ] ; then echo Nodediff was unpacked to unknown name exit 1 fi

NLIST=`ls ${NLMASK}`

if [ ! -f ${NLIST} ] ; then echo Nodediff was unpacked to unknown name exit 1 fi

echo applying ${DIFF} to ${NLIST}

if ${PATCHER} ${NLIST} ${DIFF} ; then rm -f ${NLIST} ${DIFF} exec ${INDEXER} else echo Error compiling new nodelist exit 1 fi



Содержание раздела