Компилятор нодлиста
Все нодлисты, как указано в 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