| TOP | |
Solaris 10で構築 このサーバには、sendmailがインストールされています。sendmailは以下のパラメータでコンパイル しています (*gcc等のコンパイル環境は予め構築しておく) ■ 2022年3月21日 sendmail-8.17.1 をコンパイル後にインストールする コンパイルの手順は、sendmail-8.16.1と変わりません ■ ソースファイルからのコンパイル(Cシェル) ■ sendmailのインストール準備 ● BerkeleyDBをインストールし使用します sourceプログラムは、googleで検索して適当にダウンロード 今回は、「db-4.2.52.NC.tar.gz」を使用。 tarで展開し、 # cd db-4.2.52.NC/build_unix B-Shellに変更 # sh $ CC=gcc ../dist/configure CFLAGS=-m64 LDFLAGS="-m64 -L/usr/sfw/lib/64" configureが成功後、 $ make $ make install でインストールする。 makeの時に「-m64」でコンパイルされていれば64bitになっている インストール先は、デフォルトは「/usr/local/BerkeleyDB.4.2」になる 変更したい場合は、--prefix=/usr/local/64 を configure 時につける ● sendmail-8.14.8 には「Errata」:「バグ、不具合」があるようで、いままでと同じようにコンパ イルするとエラーになります ↓以下のファイルに記述を追加する sendmail-8.14.8/devtools/M4/header.m4 define(`confSITECONFIG', `site.config') define(`confBUILDBIN', `${SRCDIR}/devtools/bin') define(`confRANLIB', `echo') → define(`confSHAREDLIB_EXT', `.so') define(`PUSHDIVERT', `pushdef(`__D__', divnum)divert($1)') define(`POPDIVERT', `divert(__D__)popdef(`__D__')') define(`APPENDDEF', `define(`$1', ifdef(`$1', `$1 $2', `$2'))') ■ sendmail-8.16.1の場合 ● # sh ./Build の時に以下のエラーが出る場合、↓ gcc -O -I. -I../../include -DNDBM -DNIS -DNISPLUS -DMAP_REGEX -DSOLARIS=21000 \ -DNETINET6 -c notify.c In file included from notify.c:23: /usr/include/stdbool.h:42:2: #error "Use of <stdbool.h> \ is valid only in a c99 compilation environment." *** Error code 1 make: Fatal error: Command failed for target `notify.o' ● gccのバージョンを見る # gcc -v Reading specs from /usr/sfw/lib/gcc/sparc-sun-solaris2.10/3.4.3/specs Configured with: /sfw10/builds/build/sfw10-patch/usr/src/cmd/gcc/gcc-3.4.3/configure \ --prefix=/usr/sfw --with-as=/usr/ccs/bin/as --without-gnu-as \ --with-ld=/usr/ccs/bin/ld --without-gnu-ld --enable-languages=c,c++ --enable-shared Thread model: posix gcc version 3.4.3 (csl-sol210-3_4-branch+sol_rpath) ● 以下の「stdbool.h」を /usr/include にコピーする(強引なやり方です!) オリジナルの「stdbool.h」は stdbool.h.org 等の名前を変えて保存しておく /usr/sfw/lib/gcc/sparc-sun-solaris2.10/3.4.3/install-tools/include/stdbool.h # cp /usr/sfw/lib/gcc/sparc-sun-solaris2.10/3.4.3/install-tools/include/stdbool.h /usr/include/. ● 再度、sendmailのソースディレクトリのTOPにて、sh ./Build を行う ■ sendmail-8.15.2, sendmail-8.16.1のコンパイルとインストール ● sendmailを、64bitでコンパイルするために、以下のファイルを編集し変更する (*自己流です、あしからず) > sendmail-8.15.2/devtools/M4/UNIX/defines.m4 > sendmail-8.16.1/devtools/M4/UNIX/defines.m4 # use O=-O (usual) or O=-g (debugging) O=-O2 COPTS= -m64 -I. ${INCDIRS} ${ENVDEF} ${CCOPTS} > sendmail-8.15.2/devtools/M4/UNIX/executable.m4 > sendmail-8.16.1/devtools/M4/UNIX/executable.m4 ${CCLINK} -m64 -o bldCURRENT_PRODUCT ${LDOPTS} ${LIBDIRS} ${bldCURRENT_PRODUCT`OBJS'} ${LIBS} > sendmail-8.15.2/devtools/M4/UNIX/sm-test.m4 > sendmail-8.16.1/devtools/M4/UNIX/sm-test.m4 ${CC} -m64 -o $1 ${LDOPTS} ${LIBDIRS} $1.o ifdef(`confREQUIRE_LIBSM', `libsm.a') ${LIBS} > sendmail-8.15.2/devtools/OS/SunOS.5.10 > sendmail-8.16.1/devtools/OS/SunOS.5.10 *不要なNIS、NIS+を削除したもの↓ define(`confCC', `gcc') define(`confLDOPTS_SO', `-G') define(`confBEFORE', `sysexits.h') define(`confMAPDEF', `-DUSE_VENDOR_CF_PATH -DMAP_REGEX') define(`confENVDEF', `-DSOLARIS=21000 -DNETINET6') define(`confSM_OS_HEADER', `sm_os_sunos') ↓*BerkeleyDBのパスを追加* define(`confLIBDIRS', `-L/usr/local/BerkeleyDB.4.2/lib -L/usr/local/lib -L/usr/lib \ -R/usr/local/BerkeleyDB.4.2/lib -R/usr/local/lib -R/usr/lib') define(`confINCDIRS', `-I/usr/local/BerkeleyDB.4.2/include -I/usr/local/include \ -I/usr/include') define(`confLIBS', `-lsocket -lnsl -ldb') define(`confMTCCOPTS', `-D_REENTRANT') define(`confMTLDOPTS', `-lpthread') define(`confMBINDIR', `/usr/lib') define(`confEBINDIR', `/usr/lib') define(`confSBINGRP', `sys') define(`confINSTALL', `${BUILDBIN}/install.sh') define(`confDEPEND_TYPE', `CC-M') PUSHDIVERT(3) sysexits.h: if [ -r /usr/include/sysexits.h ]; \ then \ ln -s /usr/include/sysexits.h; \ fi POPDIVERT ■ コンパイルの前にマニアル用のディレクトリを作成する # mkdir /usr/share/man/cat1 /usr/share/man/cat5 /usr/share/man/cat8 ■ sendmailのTOPディレクトリで、 # sh Build ; sh Build install でコンパイル後、インストールを実行 ■ sendmailのバイナリは、/usr/lib にインストールされ、sendmail.cf は/etc/mail 内にインスト ールされている ■ aliases ファイルは、/etc/mail/aliases がデフォルトのファイルである ■ m4を使ってsendmail.cf を作成するためにsendmail-8.15.2/cf/cf 内のgeneric-solaris.mc 等のサンプルを適宜修正し sendmail.cf を作成する EX. # cp generic-solaris.mc ○○○.mc # vi ○○○.mc # make ○○○.cf # cp ○○○.cf /etc/mail/sendmail.cf ■ 念のため、sendmail 用のユーザ、グループが登録されているか確認する # more /etc/passwd smmsp:x:25:25:SendMail Message Submission Program:/: # more /etc/group smmsp::25:smmsp ■ Solaris 10標準のsendmail を停止する # svcadm disable svc:/network/smtp:sendmail # svcadm disable svc:/network/sendmail-client:default ■ /etc/rc2.d/ にsendmail 起動スクリプトを作成 → Solaris 9のものをコピーするのが早い # vi S88sendmail → S88sendmailはこちら... # /etc/rc2.d/S88sendmail stop # /etc/rc2.d/S88sendmail start ■ 「踏台対策」として最低限、/etc/mail/relay-domains ファイルに中継を許可する自ドメイン のサブネットアドレスを記述する XXX.XXX.1.0 XXX.XXX.2.0 ・sendmail.mcの主な設定は、こちらへ... ■ sendmail実行時のエラー対処 → よく出るエラー: newaliases , mailq コマンドの実行時 # mailq ld.so.1: sendmail: 重大なエラー: libgcc_s.so.1: open に失敗しました: ファイルもディレクトもありません。 強制終了 # → sendmail が使うライブラリがリンクされているかを確認する # ldd /usr/lib/sendmail libdb-4.2.so => /usr/local/64/lib/libdb-4.2.so libresolv.so.2 => /lib/64/libresolv.so.2 < 省略 > libgcc_s.so.1 => (ファイルが見つかりません) libmp.so.2 => /lib/64/libmp.so.2 libmd.so.1 => /lib/64/libmd.so.1 < 省略 > # → gccでコンパイルしたプログラムの実行時に、プログラムが参照する ディレクトリ内に、上記のライブラリがないためエラーになっている *BerkeleyDBも/usr/sfw/lib/64を参照する → /lib/64(又は /lib/sparcv9)を参照しているので、そこに必要なライブラリのリンクを張る 64bitの「libgcc_s.so.1」は「/usr/sfw/lib/64」にあるので、 # cd /lib/64 # ln -s /usr/sfw/lib/64/* . # → 再度、sendmail が使うライブラリがリンクされているかを確認する # ldd /usr/lib/sendmail libdb-4.2.so => /usr/local/64/lib/libdb-4.2.so libresolv.so.2 => /lib/64/libresolv.so.2 < 省略 > libgcc_s.so.1 => /usr/sfw/lib/64/libgcc_s.so.1 libmp.so.2 => /lib/64/libmp.so.2 libmd.so.1 => /lib/64/libmd.so.1 < 省略 > # → sendmail が使用するライブラリが表示される事を確認する |