1
Исходный текст sendmail доступен для анонимного FTP-копирования с сервера ftp.sendmail.org, где он хранится в каталоге pub/sendmail. sendmail постоянно обновляется. В последующих примерах использован дистрибутив sendmail 8.11.3. Помните, что в новых версиях происходят изменения. Всегда обращайтесь к файлам README и установочной документации, прежде чем начинать обновление.
Чтобы получить возможность скомпилировать программу sendmail, загрузите сжатый tar-файл в качестве двоичного, а затем распакуйте и извлеките архив при помощи команды tar, как показано ниже:
$ ftp ftp.sendmail.org Connected to ftp.sendmail.org. 220 pub2.pa.vix.com FTP server ready. Name (ftp.sendmail.org:craig): anonymous 331 Guest login ok, send your e-mail address as password. Password: 230 Guest login ok, access restrictions apply. Remote system type is UNIX. Using binary mode to transfer files. ftp> cd pub/sendmail ftp> get sendmail.8.11.3.tar.gz local: sendmail.8.11.3.tar.gz remote: sendmail.8.11.3.tar.gz 200 PORT command successful. 150 Opening BINARY mode data connection for sendmail.8.11.3.tar.gz (1347756 bytes). 226 Transfer complete. 1347756 bytes received in 18.68 Seconds (72.42 Kbytes/sec) ftp> quit 221-You have transferred 1347756 bytes in 1 files. 221-Thank you for using the FTP service on pub2.pa.vix.com. 221 Goodbye. $ cd /usr/local/src $ tar -zxvf /home/craig/sendmail.8.11.3.tar.gz
Затем перейдите в каталог sendmail-8.11.3, созданный при распаковке архива, и воспользуйтесь сценарием Build для компиляции новой программы sendmail:
$ cd sendmail-8.11.3 $ ./Build Making all in: /usr/local/src/sendmail-8.11.3/libsmutil Configuration: pfx=, os=Linux, rel=2.2.10, rbase=2, rroot=2.2, arch=i586, sfx=, variant=optimized Using M4=/usr/bin/m4 Creating ../obj.Linux.2.2.10.i586/libsmutil using ../devtools/OS/Linux Making dependencies in ,./obj.Linux.2.2.10.i586/libsmutil шаке[1]: Entering directory '/usr/local/src/sendmail-8.11.3/obj.Linux.2.2.10.i586/libsmutil' cc -M -I. -I../../sendmail -I../../include -DNEWDB -DNOT_SENDMAIL debug.с errstring.c lockfile.c safefile.c snprintf.c strl.c » Makefile make[1]: Leaving directory '/usr/local/src/sendiriail-8.11.3/obj.Linux.2.2.10.i586/libsmutil' Making in ../obj.Linux.2.2.10.i586/libsrautil make[1]: Entering directory •/usr/local/src/sendmail-8.11.3/obj.Linux.2.2.10.i586/libsmutil' cc -0 -I. -I../../sendmail -I../../include -DNEWDB -DNOT_SENDMAIL -c debug.с -о debug.о cc -0 -I. -I../../sendmail -I../../include -DNEWDB -DNOT_SENDMAIL -c errstring.c -o errstring.o ... Удалено много, много, много строк... сс -О -I. -I../../sendmail -I../../include -DNEWDB -DNOT_SENDMAIL -с vacation.с -о vacation.о сс -о vacation vacation.о ../libsmdb/libsmdb.a ../libsmutil/libsmutil.a -ldb -lresolv -lcrypt -lnsl -ldl groff -Tascii -man vacation.1 > vacation.0 || cp vacation.O.dist vacation.О make[1]: Leaving directory '/usr/local/src/sendmail-8.11.3/obj.Linux.2.2.10.i586/vacation'
Сценарий Build самостоятельно определяет архитектуру системы и создает корректный для данной системы файл сборки Makefile. Затем выполняется компиляция sendmail при помощи созданного Makefile.
Если верить документации, выполнение Build - все, что нужно для компиляции sendmail в большинстве систем. Такой способ работает в Red Hat Linux и Solaris 8. Однако гарантий никаких нет. В вашей системе могут использоваться нестандартные каталоги или отсутствовать определенные библиотеки. Может потребоваться уточнить флаги компилятора для вашей системы.
Если у вас есть опыт компиляции sendmail, вы можете испытать соблазн заглянуть в поисках параметров компиляции в файл Makefile, расположенный в каталоге исходных текстов дистрибутива. Возможно, вы даже вспомните, что некогда указывали параметры компиляции именно в этом файле.
Но теперь все иначе. Параметры компилятора устанавливаются в файлах, расположенных в каталоге devtools дистрибутива исходных текстов sendmail.
Параметры компилятора, принимаемые по умолчанию, обычно устанавлива-ются в специальных для каждой ОС файлах из каталога devtools/OS и изме-няются в файлах, создаваемых непосредственно для вашего сервера в катало-ге devtools/Site. Имена файлов devtools/OS основаны на названиях операционных систем; к примеру, файл настройки Solaris 8 называется SunOS5.8.
Если ваша система Solaris 8 отличается от стандартной, создайте собственный файл в каталоге devtools/Site, дайте ему имя site.SunOS5.8.m4. В этом файле сохраните скорректированные настройки. Кроме того, вы можете создать файл site.config.m4 в каталоге devtools/Site, если устанавливаемые параметры компилятора относятся более к особенностям сервера, чем к поправкам на операционную систему. Build находит и использует файлы с такими именами.
Как следует из расширений ,т4 имен данных файлов, команды, используемые для установки параметров компилятора, являются макроопределениями т4, а не простыми параметрами компилятора. В табл. Е.1 перечислены команды т4, используемые в sendmail 8.11.3 для управления процессом компиляции.
Таблица Е.1. т4, параметры компилятора
Команда | Назначение |
confBEFORE | Указывает файлы, которые необходимо создать перед компиляцией |
ConfBLOVARIANT | Запрашивает варианты сборки OPTIMIZED, DEBUG или PURIFY |
COnfBUILDBIN | Путь к вспомогательным исполняемым файлам сборки |
confCC | Имя компилятора С |
Команда | Назначение |
confCCOPTS | Параметры, передаваемые компилятору |
confCOPY | Имя программы, копирующей файлы |
COnfDEPEND.TYPE | Имя файла из devtools/M4/depend, определяющего способ построения зависимостей |
ConfDEPLIBS | Зависимые библиотеки для разделяемых объектов |
confEBINDIR | Путь к программе, исполняемой другими программами |
ConfENVDEF | Флаги -D, передаваемые компилятору |
ConfFORCE_RHAIL | Принудительная установка rmail |
ConfHFDIR | Путь к файлу справки sendmail |
confHFFILE | Имя файла справки |
ConflNCDIRS | Флаги -I, передаваемые компилятору |
COnflNCGRP | Идентификатор группы для включаемых файлов |
conflNCMODE | Файловые права доступа для включаемых файлов |
confINCOWN | Идентификатор пользователя для включаемых файлов |
COnflNCLUDEDIR | Путь установки включаемых файлов |
COnflNSTALL | Программа установки |
COnfINSTALL_RAWMAN | Устанавливать неформатированные страницы руководства |
confLDOPTS | Параметры для редактора связей |
ConfllBDIR | Путь к файлам библиотеки установки |
confLIBDIRS | Флаги -L для редактора связей |
confLIBGRP | Идентификатор группы для библиотек |
confLIBMODE | Файловые права доступа для библиотек |
COnfLIBOWN | Идентификатор пользователя для библиотек |
confLIBS | Флаги -I, передаваемые редактору связей |
COnfLIBSEARCH | Имена библиотек, используемых при связывании |
COnfLIBSEARCHPATH | Путь к библиотекам, используемым при связывании |
confLINKS | Имена логических ссылок на sendmail, к примеру, newaliases |
confLN | Команда, используемая для создания логических ссылок |
Команда | Назначение |
COnfMANI | Путь к файлам manl |
COnfMANIEXT | Расширение имен файлов manl |
COnfMANISRC | Источник страниц manl |
COnfMAN3 | Путь к файлам тапЗ |
COnfMAN3EXT | Расширение имен файлов тапЗ |
COnfMAN3SRC | Источник страниц тапЗ |
COnfMAN4 | Путь к файлам man4 |
COnfMAN4EXT | Расширение имен файлов тап4 |
COnfMAN4SRC | Источник страниц man4 |
ConfMAN5 | Путь к файлам man5 |
COnfMAN5EXT | Расширение имен файлов man 5 |
COnfHAN5SRC | Источник страниц man5 |
COnfMAN8 | Путь к файлам man8 |
COnfMAN8EXT | Расширение имен файлов тап8 |
COnfMAN8SRC | Источник страниц man8 |
COnfMANDOC | Макроопределения, используемые для форматирования страниц руководства |
COnfMANGRP | Идентификатор группы для файлов страниц руководства |
COnfMANMODE | Файловые права доступа для страниц руководства |
COnfMANOWN | Идентификатор пользователя для файлов страниц руководства |
COnfMANROOT | Корневой каталог для различных каталогов, содержащих отформатированные страницы руководства |
ConfMANROOTMAN | Корневой каталог для различных каталогов, содержащих неформатированные страницы руководства |
COnfHAPDEF | Указывает типы баз данных, поддержку которых следует встроить в sendmail |
COnfMBINDIR | Путь установки для программы sendmail |
COnfN0_HELPFILE_INSTALL | Не устанавливать файл справки |
COnfN0_MAN_BUILD | Не создавать страницы руководства |
COnfN0_MAN_INSTALL | Не устанавливать страницы руководства |
confNO_STATISTICS_INSTALL | Не устанавливать файл статистики |
COnfNROFF | Команда, используемая для форматирования страниц руководства |
Команда | Назначение |
COnfOBJADD | Указывает объекты, которые следует встроить в sendmail |
confOPTIMIZE | Флаги, передаваемые компилятору в виде ${0} |
COnfRANLIB | Путь к программе ranlib |
COnfRANLIBOPTS | Параметры, передаваемые ranlib |
COnfSBINDIR | Каталог, в котором сохраняются команды вроде makemap |
COnfSBINGRP | Идентификатор группы для исполняемых файлов setuid |
confSBINHODE | Файловые права доступа для исполняемых файлов setuid |
ConfSBINOWN | Идентификатор пользователя для исполняемых файлов setuid |
COnfSHAREDLIB_EXT | Расширения имен файлов разделяемых библиотек |
COnfSHAREDLIB_SUFFIX | Суффикс для разделяемых объектов |
COnfSHAREDLIBDIR | Каталог, в который устанавливаются разделяемые библиотеки |
confSHELL | Полное имя интерпретатора команд, используемого make |
COnfSMOBJAOD 67Q / 813 | Объекты, которые следует встраивать в sendmail |
COnfSMSRCADD | Исходные файлы на языке С для объектов, перечисленных в confSMOBJADD |
confSMSRCDIR | Каталог, содержащий исходные тексты sendmail |
confSRCADD | Исходные файлы на языке С для объектов, перечисленных в confOBJADD |
confSRCDIR | Путь к иерархии каталогов исходных текстов |
COnfSONAME | Флаг редактора связей для записи имени разделяемого объекта |
confSTDIO.TYPE | Указывает тип буферной зоны, portable или torek |
COnfSTDIR | Каталог, в котором сохраняется файл статистики |
confSTFILE | Имя файла статистики |
confSTRIP | Указывает программу, используемую для удаления из исполняемых файлов отладочной информации |
confSTRIPOPTS | Параметры, передаваемые программе confSTRIP |
Команда | Назначение |
COnfUBINDIR | Путь к пользовательским программам |
COnfUBINGRP | Идентификатор группы для пользовательских исполняемых программ |
COnfUBINHODE | Файловые права доступа для пользовательских исполняемых программ |
COnfUBINOWN | Идентификатор пользователя для пользовательских исполняемых программ |
После компиляции sendmail устанавливается посредством команды Build с аргументом install, как показано ниже:
# ./Build Install Making all in: /usr/local/src/sendmail-8.11.3/libsmutil Configuration: pfx=, os=Linux, rel=2.2.10. rbase=2, rroot=2.2, arch=i586, sfx=, variant=optimized Making in ../obj.Linux.2.2.10.i586/libsmutil make[1]: Entering directory '/usr/local/src/sendmail-8.11.3/obj.Linux.2.2.10.i586/libsmutil' ... Удалено много, много, много строк... Making in ../obj.Linux.2.2.10.1586/vacation make[1]: Entering directory '/usr/local/src/sendmail-8.11.3/obj.Linux.2.2.10.i586/vacation' install -с -o bin -g bin -m 555 vacation /usr/bin install -с -o bin -g bin -m 444 vacation.0 /usr/man/manl/vacation. 1 make[1]: Leaving directory '/usr/local/src/sendmail-8.11.3/obj.Linux.2.2.10.i586/vacation'
Команда Build устанавливает страницы руководства, исполняемые файлы, файл справки, а также файл состояния в соответствующие каталоги вашей системы.
sendmail готова к запуску. В следующем разделе описывается синтаксис ко-манды sendmail.