POSTFIX-WRAPPER(5) File Formats Manual POSTFIX-WRAPPER(5)

postfix-wrapper - رابط برنامه‌نویسی (API) چندنمونه‌ای Postfix


پشتیبانی از مدیریت چندین نمونهٔ (instance) Postfix از نسخهٔ ۲.۶ به بعد در دسترس است. نمونه‌ها فایل‌های اجرایی و مستندات را به اشتراک می‌گذارند، اما دایرکتوری‌های مجزایی برای پیکربندی، صف و فایل‌های داده دارند.

این سند توضیح می‌دهد که چگونه می‌توان از رابط کاربری آشنای "postfix start" و امثال آن برای مدیریت یک یا چند نمونهٔ Postfix استفاده کرد، و جزئیات یک API را برای هماهنگی فعالیت‌ها بین دستور postfix(1) و یک برنامهٔ مدیر چندنمونه‌ای ارائه می‌دهد.

با پشتیبانی از حالت چندنمونه‌ای، وجود نمونهٔ پیش‌فرض Postfix همواره الزامی است. این نمونه توسط مقدار پیش‌فرض پارامتر config_directory مشخص می‌شود.

پشتیبانی از چندنمونه‌ای با نسخه‌های پیشین سازگار است: هنگامی که فقط یک نمونهٔ Postfix را اجرا می‌کنید، دستوراتی مانند "postfix start" به هیچ وجه تغییر رفتار نخواهند داد.

حتی با وجود چندین نمونهٔ Postfix، می‌توانید به استفاده از همان دستورات postfix در اسکریپت‌های راه‌اندازی (بوت)، رویه‌های ارتقا و سایر بخش‌ها ادامه دهید. دستورات کارهای بیشتری انجام می‌دهند، اما کاربران مجبور به یادگیری روش‌های جدید نیستند.

برای مثال، جهت شروع به کار تمام نمونه‌های Postfix، از دستور زیر استفاده کنید:

# postfix start

سایر دستورات postfix(1) نیز طبق انتظار کار می‌کنند. برای مثال، جهت اطلاع از اینکه چه نمونه‌های Postfix در یک پیکربندی چندنمونه‌ای وجود دارند، استفاده کنید از:

# postfix status

این دستور وضعیت تمام نمونه‌های Postfix موجود در یک پیکربندی چندنمونه‌ای را فهرست می‌کند.

جهت مدیریت یک نمونهٔ خاص از Postfix، دایرکتوری پیکربندی آن را در خط فرمان postfix(1) مشخص کنید:

# postfix -c /path/to/config_directory command

به‌عنوان روش جایگزین، دستور postfix(1) دایرکتوری پیکربندی نمونه را از طریق متغیر محیطی MAIL_CONFIG می‌پذیرد (گزینهٔ خط فرمان -c اولویت بالاتری دارد).

در غیر این صورت، دستور postfix(1) روی تمام نمونه‌های Postfix اعمال خواهد شد.

به‌طور پیش‌فرض، دستور postfix(1) در حالت تک‌نمونه‌ای عمل می‌کند. در این حالت دستور مستقیماً فایل postfix-script را فراخوانی می‌کند (که در حال حاضر در دایرکتوری daemon نصب شده است). این فایل حاوی دستوراتی است که یک نمونهٔ Postfix را راه‌اندازی یا متوقف می‌کنند، پیکربندی یک نمونهٔ Postfix را ارتقا می‌دهند، و غیره.

هنگامی که دستور postfix(1) در حالت چندنمونه‌ای (همان‌طور که در ادامه بحث می‌شود) عمل می‌کند، نیاز دارد تا دستورات start، stop و غیره را برای هر نمونهٔ Postfix اجرا کند. این تکثیر و اجرای دستورات توسط یک برنامهٔ مدیر چندنمونه‌ای اداره می‌شود.

فعال‌سازی حالت چندنمونه‌ای در postfix(1) به شرح زیر است: در فایل main.cf نمونهٔ پیش‌فرض Postfix: ۱) مسیر یک برنامهٔ مدیر چندنمونه‌ای را با پارامتر multi_instance_wrapper مشخص کنید؛ ۲) پارامتر multi_instance_directories را با مسیرهای دایرکتوری پیکربندی نمونه‌های اضافی Postfix مقداردهی کنید. برای مثال:

/etc/postfix/main.cf:
    multi_instance_wrapper = $daemon_directory/postfix-wrapper
    multi_instance_directories = /etc/postfix-test

فایل $daemon_directory/postfix-wrapper یک مدیر ساده را پیاده‌سازی می‌کند و حاوی دستورالعمل‌هایی برای ایجاد دستی نمونه‌های Postfix است. دستور postmulti(1) پیاده‌سازی گسترده‌تری شامل پشتیبانی از مدیریت چرخهٔ حیات را ارائه می‌دهد.

پارامتر multi_instance_directories و سایر پارامترهای main.cf در ادامه در بخش «پارامترهای پیکربندی» فهرست شده‌اند.

در حالت چندنمونه‌ای، دستور postfix(1) دستور $multi_instance_wrapper را به جای فایل postfix-script فراخوانی می‌کند. این مدیر چندنمونه‌ای نیز به نوبهٔ خود دستور postfix(1) را در حالت تک‌نمونه‌ای برای هر نمونهٔ Postfix اجرا می‌کند.

برای نشان دادن ایده‌های اصلی پشت عملکرد چندنمونه‌ای، در ادامه نمونه‌ای از یک پیاده‌سازی ساده اما کاربردی از مدیر چندنمونه‌ای آورده شده است:

#!/bin/sh
: ${command_directory?"do not invoke this command directly"}
POSTCONF=$command_directory/postconf
POSTFIX=$command_directory/postfix
instance_dirs=`$POSTCONF -h multi_instance_directories |
                sed 'y/,/ /'` || exit 1
err=0
for dir in $config_directory $instance_dirs
do
    case "$1" in
    stop|abort|flush|reload|drain)
        test "`$POSTCONF -c $dir -h multi_instance_enable`" \
            = yes || continue;;
    start)
        test "`$POSTCONF -c $dir -h multi_instance_enable`" \
            = yes || {
            $POSTFIX -c $dir check || err=$?
            continue
        };;
    esac
    $POSTFIX -c $dir "$@" || err=$?
done
exit $err

هر نمونهٔ Postfix فایل main.cf مخصوص به خود را دارد که پارامترهای آن نحوهٔ عملکرد مدیر چندنمونه‌ای روی آن نمونه را کنترل می‌کنند. این بخش به مهم‌ترین تنظیمات می‌پردازد.

تنظیم "multi_instance_enable = yes" به مدیر چندنمونه‌ای اجازه می‌دهد نمونهٔ مربوطهٔ Postfix را راه‌اندازی (متوقف و غیره) کند. به دلایل امنیتی، این تنظیم پیش‌فرض نیست.

تنظیم پیش‌فرض "multi_instance_enable = no" برای آزمایش‌های دستی با "postfix -c /path/name start" و غیره کاربرد دارد. مدیر چندنمونه‌ای چنین نمونه‌ای را راه‌اندازی نخواهد کرد و از دستوراتی مانند "stop" یا "flush" که نیازمند یک نمونهٔ در حال اجرای Postfix هستند، صرف‌نظر می‌کند. مدیر چندنمونه‌ای دستوراتی مانند "check"، "set-permissions" یا "upgrade-configuration" را اجرا خواهد کرد، و "start" را با "check" جایگزین می‌کند تا مشکلات حتی در صورت غیرفعال بودن نمونه گزارش شوند.

برخی فایل‌ها بین نمونه‌های Postfix مشترک هستند، مانند فایل‌های اجرایی و صفحات راهنما (manpages)، و برخی فایل‌ها مختص هر نمونه هستند، مانند فایل‌های پیکربندی، فایل‌های صف ایمیل و فایل‌های داده. برای مشاهدهٔ فهرستی از فایل‌های مختص هر نمونه، بخش «فایل‌های غیرمشترک» در ادامه را ببینید.

پیش از پیاده‌سازی پشتیبانی از چندنمونه‌ای در Postfix، فایل‌های اجرایی، صفحات راهنما و غیره همواره به عنوان بخشی از نمونهٔ پیش‌فرض Postfix نگهداری می‌شدند.

با پشتیبانی از چندنمونه‌ای، ما به سادگی به انجام همین کار ادامه می‌دهیم. به‌طور خاص، هنگامی که مقدار config_directory یک نمونهٔ Postfix در پارامتر multi_instance_directories فایل main.cf پیش‌فرض درج شده باشد، آن نمونه فایل‌های مشترک را بررسی یا به‌روزرسانی نخواهد کرد.

پیامد این رویکرد این است که نمونهٔ پیش‌فرض Postfix باید قبل از هر نمونهٔ دیگری بررسی و به‌روزرسانی شود.

تنها مدیر چندنمونه‌ای پشتیبانی از پارامتر پیکربندی multi_instance_enable را پیاده‌سازی می‌کند. مدیر چندنمونه‌ای فقط نمونه‌هایی از Postfix را راه‌اندازی می‌کند که مقدار "multi_instance_enable = yes" در فایل main.cf آن‌ها تنظیم شده باشد. مقدار "no" امکان آزمایش دستی نمونهٔ Postfix را فراهم می‌سازد.

دستور postfix(1) تنها زمانی روی یک نمونهٔ Postfix عمل می‌کند که گزینهٔ -c مشخص شده باشد، یا MAIL_CONFIG در محیط فرایند وجود داشته باشد. این سازوکار برای پایان دادن به فراخوانی بازگشتی (recursion) ضروری است.

در غیر این صورت، هنگامی که مقدار پارامتر multi_instance_directories خالی نباشد، دستور postfix(1) به جای اجرای دستورات موجود در postfix-script، دستوری را که توسط پارامتر multi_instance_wrapper مشخص شده است اجرا می‌کند.

مدیر چندنمونه‌ای هنگامی که یک نمونه دارای "multi_instance_enable = yes" نباشد، از دستوراتی مانند "stop" یا "reload" که به یک نمونهٔ در حال اجرا نیاز دارند، صرف‌نظر می‌کند. این امر از تولید پیام‌های خطای نادرست جلوگیری می‌کند.

مدیر چندنمونه‌ای در صورتی که فایل main.cf یک نمونهٔ Postfix فاقد "multi_instance_enable = yes" باشد، دستور "start" را با "check" جایگزین می‌کند. این جایگزینی تضمین می‌کند که مشکلات حتی در زمان غیرفعال بودن نمونه نیز گزارش شوند.

هیچ دستور یا اسکریپت Postfix در صورتی که مقدار config_directory آن در مقدار پارامتر multi_instance_directories فایل main.cf پیش‌فرض فهرست شده باشد، فایل‌های مشترک را بررسی یا به‌روزرسانی نخواهد کرد. بنابراین، نمونهٔ پیش‌فرض باید پیش از هر نمونهٔ Postfix وابسته به آن، بررسی و به‌روزرسانی شود.

دستورات Set-gid مانند postdrop(1) و postqueue(1) در عمل مقدار پارامتر multi_instance_directories را به مقدار پارامتر قدیمی alternate_config_directories الحاق می‌کنند. این دستورات از این اطلاعات برای تعیین اینکه آیا گزینهٔ -c یا مقدار متغیر محیطی MAIL_CONFIG یک مقدار مجاز را مشخص می‌کند یا خیر، استفاده می‌کنند.

پارامتر قدیمی alternate_config_directories همچنان برای نمونه‌های غیرپیش‌فرض Postfix که نسخه‌های متفاوتی از Postfix را اجرا می‌کنند، یا همراه با نمونهٔ پیش‌فرض Postfix مدیریت نمی‌شوند، ضروری است.

در صورت وجود، دستور postfix(1) را مجبور می‌کند که منحصراً روی نمونهٔ مشخص‌شدهٔ Postfix عمل کند. این متغیر محیطی توسط گزینهٔ -c دستور postfix(1) صادر (export) می‌شود، تا دستورات postfix(1) در فرایندهای فرزند به‌درستی کار کنند.

متن زیر تنها خلاصه‌ای از پارامترها را ارائه می‌دهد. برای جزئیات بیشتر به postconf(5) مراجعه کنید.

فهرستی اختیاری از دایرکتوری‌های پیکربندی غیرپیش‌فرض Postfix؛ این دایرکتوری‌ها متعلق به نمونه‌های اضافی Postfix هستند که فایل‌های اجرایی و مستندات را با نمونهٔ پیش‌فرض Postfix به اشتراک می‌گذارند، و همراه با نمونهٔ پیش‌فرض Postfix راه‌اندازی، متوقف و غیره می‌شوند.
مسیر یک دستور مدیر چندنمونه‌ای که دستور postfix(1) در صورت خالی نبودن مقدار پارامتر multi_instance_directories آن را فراخوانی می‌کند.
نام اختیاری این نمونه از Postfix.
نام گروهی اختیاری این نمونه از Postfix.
اجازه می‌دهد تا این نمونه از Postfix توسط یک مدیر چندنمونه‌ای راه‌اندازی، متوقف و غیره شود.

مکان پیش‌فرض فایل‌های پیکربندی main.cf و master.cf در Postfix.
دایرکتوری حاوی فایل‌های دادهٔ قابل نوشتن توسط Postfix (برای مثال: حافظه‌های پنهان یا کش‌ها، اعداد شبه‌تصادفی).
مکان دایرکتوری سطح بالای صف Postfix.

postfix(1) برنامهٔ کنترل Postfix
postmulti(1) مدیر چندنمونه‌ای کامل
$daemon_directory/postfix-wrapper مدیر چندنمونه‌ای ساده

مجوز Secure Mailer باید همراه با این نرم‌افزار توزیع شود.

Wietse Venema
IBM T.J. Watson Research
P.O. Box 704
Yorktown Heights, NY 10598, USA
Wietse Venema
Google, Inc.
111 8th Avenue
New York, NY 10011, USA