PERL-NOCEM(8) InterNetNews Documentation PERL-NOCEM(8)

perl-nocem - یک پیاده‌سازی NoCeM-on-spool برای INN 2.x

perl-nocem [-hlu] [-b directory] [-c filename] [-g command] [-G command] [-i filename] [-k keyring] [-v level]

پروتکل NoCeM (که No See 'Em تلفظ می‌شود) پروتکلی است که به اشخاص ثالث احرازهویت‌شده امکان می‌دهد اعلان‌هایی صادر کنند که می‌توان از آن‌ها برای لغو مقالات ناخواسته (مانند هرزنامه‌ها و مقالاتی در گروه‌های خبری دارای ناظر که توسط ناظران آن‌ها تأیید نشده‌اند) استفاده کرد. این پروتکل همچنین می‌تواند توسط خوانندگان به عنوان یک فایل حذفیات شخص ثالث (third-party killfile) استفاده شود. هدف از این پروتکل جایگزینی نهایی پروتکل پیام‌های لغو شخص ثالث است؛ پیام‌های لغوی که به دلیل عدم احراز هویت (برخلاف اعلان‌های NoCeM) به سادگی قابل جعل هستند.

برنامهٔ perl-nocem اعلان‌های لغو مقالات شخص ثالث و دارای امضای PGP را پردازش می‌کند. این امکان وجود دارد که تنها مجموعهٔ منتخبی از اعلان‌های NoCeM پذیرفته و اجرا شوند، نه همهٔ آن‌ها. شما می‌توانید در پروندهٔ nocem.ctl واقع در pathetc فهرست صادرکنندگان مورد اعتماد NoCeM را پیکربندی کرده و کلیدهای عمومی PGP مربوطه را به جاکلیدی (keyring) NoCeM خود اضافه کنید (به‌طور پیش‌فرض هیچ کلید PGPای نصب نشده است، بنابراین به هیچ‌کس اعتماد نمی‌شود). تصمیم‌گیری در مورد پذیرش اعلان‌های آن‌ها، بر اساس معیارهایی که استفاده می‌کنند، به عهدهٔ شماست. توصیه می‌شود که به‌طور منظم به ثبت رسمی NoCeM به نشانی https://rosalind.home.xs4all.nl/nocemreg/nocemreg.html مراجعه کنید تا صادرکنندگان جدید احتمالی NoCeM را برای افزودن بررسی کرده و خلاصه‌ای از خط‌مشی آن‌ها را مشاهده نمایید. خلاصهٔ روزانهٔ پیام‌های NoCeM ارسال‌شده در نشانی https://www.novabbs.com/SEARCH/search_nocem.php?stats=daily نیز ممکن است مفید باشد.

برنامهٔ perl-nocem در ورودی استاندارد خود نشانه‌های ذخیره‌سازی (storage tokens) یا نام‌های پرونده را انتظار دارد. سپس مقالهٔ مربوطه را خوانده و پردازش می‌کند. در صورتی که امکانات syslog در دسترس نباشد یا پرچم -l به‌طور صریح استفاده شده باشد، تمام پیام‌های وضعیت را به پروندهٔ perl-nocem.log در pathlog اضافه می‌کند؛ در غیر این صورت، از امکانات syslog استفاده می‌شود که در این حالت پیام‌های وضعیت به پرونده‌ای که معمولاً news.notice در pathlog نام دارد، افزوده می‌شوند. (برخی از لاگ‌ها فقط در صورتی نوشته می‌شوند که سطح دیباگ برای ثبت از طریق syslog تنظیم شده باشد.)

راه‌اندازی پردازش اعلان‌های NoCeM آسان است:

1.
در صورت عدم نصب قبلی، GnuPG یا یک پیاده‌سازی معادل از استاندارد OpenPGP را نصب کنید تا بتوانید امضای پیام‌های NoCeM را راستی‌آزمایی نمایید. این بسته برنامه‌های gpg و gpgv را فراهم می‌کند. اگر GnuPG در زمان پیکربندی INN از قبل نصب بوده باشد، مسیرهای این برنامه‌ها در نظر گرفته شده‌اند. در غیر این صورت، می‌توانید از پرچم‌های -g و -G برای تعیین (یا حتی جایگزینی) دستوراتی که perl-nocem برای اجرای این برنامه‌ها استفاده می‌کند بهره ببرید.

همهٔ صادرکنندگان NoCeM که هنوز فعال هستند از کلیدهای PGP نسبتاً مدرنی استفاده می‌کنند که توسط هر دو نسخهٔ 1.x و 2.x نرم‌افزار GnuPG پذیرفته می‌شوند. دیگر نیازی به استفادهٔ صریح از gpg1 برای پردازش اعلان‌های NoCeM نیست.

2.
کلیدهای عمومی صادرکنندگان NoCeM مورد اعتماد خود را وارد (import) کنید تا اصالت اعلان‌های آن‌ها بررسی شود. می‌توانید دستور زیر را اجرا کنید:
gpg --no-default-keyring --allow-non-selfsigned-uid \
    --primary-keyring <pathetc>/pgp/ncmring.gpg --no-options \
    --no-permission-warning --batch --import <key-file>
chmod 644 <pathetc>/pgp/ncmring.gpg

که در آن <pathetc> مقدار پارامتر pathetc تنظیم‌شده در inn.conf است و <key-file> پروندهٔ حاوی کلید(های) عمومی برای وارد کردن است. جاکلیدی به‌طور پیش‌فرض در <pathetc>/pgp/ncmring.gpg قرار دارد؛ شما تنها باید پیش از استفاده از gpg دایرکتوری <pathetc>/pgp را ایجاد کنید (برنامه به‌طور خودکار پروندهٔ ncmring.gpg را ایجاد خواهد کرد) و مطمئن شوید که کاربر news پس از ایجاد، دسترسی خواندن این پرونده را دارد. می‌توانید از مکان و نام پروندهٔ دیگری برای جاکلیدی استفاده کنید و سپس perl-nocem را با پرچم -k اجرا نمایید.

کلیدهای عمومی صادرکنندگان NoCeM را می‌توان در وبگاه The NoCeM Registry به نشانی https://rosalind.home.xs4all.nl/nocemreg/nocemreg.html یافت، جایی که حتی می‌توانید یک پروندهٔ یکتا حاوی تمامی کلیدهای عمومی را بارگیری کنید.

3.
پروندهٔ پیکربندی nocem.ctl را در pathetc ایجاد یا به‌روزرسانی کنید تا صادرکنندگان NoCeM و انواع اعلان‌هایی را که می‌خواهید دنبال کنید مشخص نمایید. این پروندهٔ مجوزها شامل خطوطی مانند زیر است:
bleachbot@httrack.com:spam,site
pgpmoose@killfile.org:pgpmoose-forged-moderation

این کار تمام مقالاتی را که صادرکننده (بخش اول خط، قبل از دو نقطه ":") برای آن‌ها اعلان‌های NoCeM از نوعی صادر کرده که در فهرست انواع جداشده با ویرگولِ بعد از دو نقطه وجود دارد، حذف خواهد کرد (استفاده از "*" امکان‌پذیر است و به این معنی است که همهٔ انواع پذیرفته می‌شوند).

خطوط خالی و خطوطی که با علامت هش ("#") آغاز می‌شوند نادیده گرفته می‌شوند. حروف کوچک و بزرگ تفاوتی ندارند (حساس به بزرگی و کوچکی حروف نیست). هر مدخلی که کلید عمومی PGP متناظری در جاکلیدی نداشته باشد، نادیده گرفته خواهد شد.

همچنین اطلاعات مربوط به صادرکنندگان را در وبگاه The NoCeM Registry خواهید یافت. توجه داشته باشید که INN به همراه یک پروندهٔ nocem.ctl به‌روز عرضه می‌شود که از قبل با صادرکنندگان فعلی NoCeM پیکربندی شده است. (تنها کلیدهای عمومی PGP نصب‌شده در مرحلهٔ قبل در آن گنجانده نشده‌اند، تا حق انتخاب در مورد این‌که به چه کسی اعتماد کنید برای شما باقی بماند و جدیدترین آن‌ها را در صورت تغییر بارگیری نمایید.)

4.
مدخلی مانند زیر را به پروندهٔ newsfeeds در pathetc اضافه کنید تا پیام‌های NoCeM ارسال‌شده (یا هم‌رسانی‌شده) به news.lists.filters (گروه خبری عمومی که اعلان‌ها باید به آن ارسال شوند) را به perl-nocem تغذیه کند:
nocem!\
    :!*,news.lists.filters\
    :Tc,Wf,Ap:<pathbin>/perl-nocem

با مسیر صحیح به perl-nocem واقع در <pathbin>، و هر پرچم اختیاری که می‌خواهید استفاده کنید. سپس دستور "inncheck" را اجرا کنید تا از درستی ساختار نحوی پروندهٔ اصلاح‌شدهٔ newsfeeds اطمینان حاصل نمایید، و آن را مجدداً بارگذاری کنید (از طریق "ctlinnd reload newsfeeds 'NoCeM channel feed'").

توجه داشته باشید که اگر می‌خواهید اعلان‌های NoCeM را پردازش کنید، باید حداقل news.lists.filters (یا سایر گروه‌های خبری که اعلان‌های NoCeM به آن‌ها ارسال می‌شوند) را در سرور خبر خود میزبانی/حمل کنید.

5.
اکنون همه چیز باید کار کند. با این حال، در آزمایش دستی perl-nocem با یک پیام NoCeM، با استفاده از یکی از دستورهای زیر تردید نکنید:
grephistory '<Message-ID>' | perl-nocem -l -v 2
echo '/path/to/a/nocem/message' | perl-nocem -l -v 2

برنامهٔ perl-nocem نشانه‌های ذخیره‌سازی یا نام‌های پرونده را در ورودی استاندارد خود انتظار دارد (grephistory نشانهٔ ذخیره‌سازی مقاله‌ای را که با Message-ID آن مشخص شده بازمی‌گرداند).

لاگ‌های آن آزمایش را در perl-nocem.log در pathlog بررسی کنید.

همچنین می‌توانید فهرست کلیدهای عمومی PGP نصب‌شده را با دستور زیر، متناسب با مکان جاکلیدی NoCeM بررسی کنید:

gpg --no-default-keyring --list-keys \
    --primary-keyring <pathetc>/pgp/ncmring.gpg

پشتیبان‌گیری از مقالات لغو‌شده در پرونده‌هایی درون directory. دایرکتوری باید وجود داشته باشد و برای کاربر news قابل نوشتن باشد. پرونده‌ها به صورت issuer%type نام‌گذاری می‌شوند و شامل مقالاتی هستند که در عمل توسط صادرکنندهٔ NoCeM داده‌شده برای نوع داده‌شده از اعلان‌های NoCeM از مخزن خبر (spool) شما حذف شده‌اند. مقالات لغو‌شده‌ای که هنگام پردازش اعلان در مخزن خبر شما ذخیره نشده‌اند قابل پشتیبان‌گیری نیستند.

این پرچم عمدتاً برای حسابرسی موارد مثبت کاذب احتمالی در نظر گرفته شده است. از آن‌جا که نسخه‌های پشتیبان به‌طور خودکار پاکسازی نمی‌شوند، باید پس از بررسی محتویات آن‌ها، هر از چند گاهی آن‌ها را هرس و پاکسازی کنید.

به‌طور پیش‌فرض، perl-nocem پروندهٔ پیکربندی با نام nocem.ctl را در pathetc می‌خواند. این پرچم امکان خواندن یک پروندهٔ پیکربندی دیگر را که با یک مسیر مطلق مشخص شده است، فراهم می‌کند.
به‌طور پیش‌فرض، perl-nocem دودویی gpg(1) را اجرا می‌کند که مسیر آن در زمان پیکربندی INN تعیین شده است. اگر GnuPG در آن زمان نصب نبوده باشد یا اگر بخواهید از برنامهٔ دیگری استفاده کنید، این پرچم مفید خواهد بود. لطفاً اطمینان حاصل کنید که حداقل معادل گزینه‌های پیش‌فرض داده‌شده به gpg در command وجود داشته باشد؛ در غیر این صورت ممکن است perl-nocem دچار نقص عملکرد شود.

با فرض این‌که "/bin/gpg" متناظر با دودویی gpg باشد، حالت پیش‌فرض عبارت است از:

-g "/bin/gpg --status-fd=1 --verify --allow-weak-digest-algos"
به‌طور پیش‌فرض، perl-nocem دودویی gpgv(1) را اجرا می‌کند که مسیر آن در زمان پیکربندی INN تعیین شده است. اگر GnuPG در آن زمان نصب نبوده باشد یا اگر بخواهید از برنامهٔ دیگری استفاده کنید، این پرچم مفید خواهد بود. لطفاً اطمینان حاصل کنید که حداقل معادل گزینهٔ پیش‌فرض داده‌شده به gpgv در command وجود داشته باشد؛ در غیر این صورت ممکن است perl-nocem دچار نقص عملکرد شود.

با فرض این‌که "/bin/gpgv" متناظر با دودویی gpgv باشد، حالت پیش‌فرض عبارت است از:

-G "/bin/gpgv --status-fd=1"

توجه داشته باشید هنگامی که هر دو در دسترس باشند، gpg با اولویت نسبت به gpgv استفاده خواهد شد، مگر اینکه به -g یک رشتهٔ خالی داده شود.

چاپ پیام راهنمای نحوهٔ استفاده در خروجی استاندارد و خروج.
هنگامی که از این پرچم استفاده می‌شود، perl-nocem یک اسکریپت پرل خارجی به نام filename را که با مسیر مطلق مشخص شده است فراخوانی و وارد می‌کند. این پرچم امکان بارگذاری یک تابع "local_want_cancel_id" با قواعد محلی را فراهم می‌سازد تا تعیین شود کدام مقالات درون یک اعلان NoCeM لغو شوند. در غیر این صورت، به‌طور پیش‌فرض تمامی مقالات موجود در یک اعلان NoCeM لغو می‌شوند.

این تابع برای هر مقاله در اعلان فراخوانی می‌شود و به چندین متغیر دسترسی دارد: شناسهٔ پیام "$msgid" مربوط به پیام NoCeM، شناسهٔ پیام "$artid" مربوط به مقالهٔ مورد نظر برای لغو، فهرست جداشده با ویرگولِ گروه‌های خبری "$groups" که مقاله برای آن‌ها ارسال شده بود، و مرجع درهم‌سازی (hash reference) به نام "$hdrs" به فیلدهای شبه‌سرایند اعلان NoCeM با مقادیر حروف کوچک. اگر تابع مقدار "0" را بازگرداند مقاله حفظ می‌شود و در غیر این صورت لغو می‌گردد.

در ادامه نمونه‌ای از آنچه این تابع می‌تواند انجام دهد، در صورت تعریف در filename و استفاده از پرچم -i، آورده شده است:

sub local_want_cancel_id {
    my ($msgid, $artid, $groups, $hdrs) = @_;
    my $carried = 0;
    # پیمایش گروه‌های خبری که مقاله به آن‌ها ارسال شده است.
    foreach my $group (split(/,/, $groups)) {
        # اگر به news.software.nntp ارسال شده است، آن را نگه دار.
        return 0 if $group eq "news.software.nntp";
        # اگر به fr.* ارسال شده و صادرکننده "john" است، آن را نگه دار.
        return 0
          if $group =~ /^fr\./ and $hdrs->{issuer} eq "john";
        # مقاله حداقل به یک گروه خبری در سلسله‌مراتب fr.* یا news.*
        # ارسال شده است. می‌توانید در اینجا از یک عبارت منظم متناظر با
        # الگوی گروه‌های خبری که از فیدهای خود درخواست دریافت آن‌ها را دارید استفاده کنید.
        $carried = 1 if $group =~ /^(fr|news)\./;
    }
    # در صورتی که سرور فقط fr.* و news.* را میزبانی کند، این قاعده اجازه می‌دهد
    # اعلان‌های NoCeM مربوط به گروه‌های خبری میزبانی‌نشده توسط سرور کنار گذاشته شوند،
    # و در نتیجه شناسهٔ پیام (Message-ID) مقالاتی که هرگز به سرور نمی‌رسند در پروندهٔ
    # تاریخچه پردازش یا ثبت نشوند.
    return 0 if not $carried;
    # اگر فقط به news.admin.net-abuse.usenet ارسال شده و نوع اعلان "spam" است،
    # آن را نگه دار.
    return 0
      if $groups eq "news.admin.net-abuse.usenet"
      and $hdrs->{type} eq "spam";
    # آن را لغو کن!
    return 1;
}

اگر هنگام بارگذاری تابع توسط پرل هرگونه مشکل نحوی رخ دهد، perl-nocem با خطا متوقف شده (die) و دلیل آن را در لاگ‌ها گزارش می‌کند. سپس باید تابع را اصلاح کنید.

به‌طور پیش‌فرض، perl-nocem امضای پیام‌های NoCeM را با کلیدهای عمومی PGP موجود در جاکلیدی به نام ncmring.gpg در دایرکتوری pathetc/pgp راستی‌آزمایی می‌کند. این پرچم امکان استفاده از یک جاکلیدی دیگر را که با مسیر مطلق مشخص شده است، فراهم می‌کند.

در این حالت پرچم --keyring= به همراه مقدار keyring به دستورات gpg(1) و gpgv(1) منتقل می‌شود، مگر این‌که keyring یک رشتهٔ خالی باشد.

به‌طور پیش‌فرض، perl-nocem لاگ‌ها را به syslog(3) ارسال می‌کند. در صورتی که امکانات syslog در دسترس نباشد یا از این پرچم استفاده شود، لاگ‌ها به perl-nocem.log در pathlog فرستاده می‌شوند. لاگ‌های سطح خطا (Error) در صورت در دسترس بودن، علاوه بر آن همچنان به syslog نیز ارسال خواهند شد.
به‌طور پیش‌فرض، innreport اعلان‌های پردازش‌نشدهٔ NoCeM را در گزارش‌های روزانه‌ای که تولید می‌کند نمایش می‌دهد. هنگامی که از این پرچم استفاده شود، صادرکنندگان یا انواع اعلان‌هایی که در nocem.ctl پیکربندی نشده‌اند همچنان در لاگ‌ها ذکر خواهند شد، اما خطوط لاگ متناظر توسط innreport تجزیه (parse) نخواهند شد.
افزایش میزان جزئیات گزارش‌گیری لاگ به آن level (سطح)، از ۱ تا ۳. مقدار پیش‌فرض "1" است.

خود اسکریپت پرل که برای پردازش پیام‌های NoCeM استفاده می‌شود.
پروندهٔ پیکربندی که اعلان‌های NoCeM مورد نظر برای پردازش را مشخص می‌کند. پروندهٔ دیگری را می‌توان با پرچم -c مشخص کرد.
جاکلیدی حاوی کلیدهای عمومی صادرکنندگان مورد اعتماد NoCeM. پروندهٔ دیگری را می‌توان با پرچم -k مشخص کرد.
پروندهٔ لاگ که در صورت در دسترس نبودن امکانات syslog یا استفاده از پرچم -l استفاده می‌شود.

صحت گروه‌های خبری که پس از Message-IDهای قابل لغو در بدنهٔ NoCeM آمده‌اند بررسی نمی‌شود، و همچنین فیلد شبه‌سرایند Newsgroups در صورت وجود بررسی نمی‌گردد. خوب، از آن‌جا که ما پیش‌تر در مورد Message-IDهایی که صادرکنندهٔ اعلان به عنوان هرزنامه علامت‌گذاری می‌کند به او اعتماد کرده‌ایم، بگذارید به گروه‌های خبری فهرست‌شده نیز اطمینان داشته باشیم.

حق نشر ۲۰۰۰ توسط Miquel van Smoorenburg <miquels@cistron.nl>.

حق نشر ۲۰۰۱ توسط Marco d'Itri <md@linux.it>.

gpg(1), gpgv(1), grephistory(1), inn.conf(5), innreport(8), newsfeeds(5), pgp(1).

2026-06-12 INN 2.7.4