MAKEHISTORY(8) InterNetNews Documentation MAKEHISTORY(8)

makehistory - مقداردهی اولیه یا بازسازی پایگاه‌داده تاریخچه INN

makehistory [-abFIOSx] [-f filename] [-l count] [-L load-average] [-s size] [-T tmpdir]

دستور makehistory فایل متنی history(5) را که شامل فهرستی از شناسه‌های پیام (message-IDs) مقالات دیده‌شده توسط کارساز است، بازسازی می‌کند. همچنین می‌تواند برای بازسازی پایگاه‌داده مرور کلی (overview) استفاده شود. توجه داشته باشید که هرچند نمایه‌های dbz برای فایل history نیز توسط makehistory بازسازی می‌شوند، اجرای makedbz(8) پس از makehistory(8) به منظور بهبود کارایی نمایه‌ها مفید خواهد بود (زیرا makehistory در اولین اجرا اندازه جدول هش را نمی‌داند، مگر اینکه اندازه با فلگ -s تعیین شده باشد).

محل پیش‌فرض فایل متنی history در pathdb/history است؛ برای مشخص کردن یک مسیر جایگزین، از فلگ -f استفاده کنید.

به‌طور پیش‌فرض، makehistory کل اسپول را با استفاده از مدیر ذخیره‌سازی پویش کرده و برای هر مقاله یک سطر تاریخچه می‌نویسد. برای تولید اطلاعات مرور کلی (overview) نیز از فلگ -O استفاده کنید.

اگر مقاله‌ای ناسالم یا ناقص در اسپول اخبار پیدا شود، به‌گونه‌ای که مانع از ادغام آن در داده‌های تاریخچه یا مرور کلی گردد، یک سطر گزارش (log) در خروجی ثبت شده و از آن مقاله صرف‌نظر خواهد شد.

هشدار: اگر در تلاش برای بازسازی پایگاه‌داده مرور کلی هستید، برای دستیابی به بهترین نتیجه، حتماً پیش از شروع innd(8) را متوقف کرده و پایگاه‌داده موجود را حذف یا صفر کنید. بازسازی مرور کلی نباید در زمان اجرای کارساز انجام شود. در صورت عدم حذف مرور کلی موجود، ممکن است با مشکلاتی نظیر ورودی‌های نامرتب مرور کلی، بافرهای بیش از حد بزرگ مرور کلی و موارد مشابه مواجه شوید.

اگر مقدار ovmethod در inn.conf برابر با "ovdb" باشد، باید در حین بازسازی مرور کلی، فرایندهای ovdb در حال اجرا باشند. ovdb هنگام نوشتن ورودی‌های مرور کلی به آن‌ها نیاز دارد. می‌توانید با اجرای ovdb_init آن‌ها را جدا از بقیه کارساز به‌صورت دستی راه‌اندازی کنید؛ برای جزئیات بیشتر به ovdb_init(8) مراجعه کنید.

به همین ترتیب، اگر ovmethod در inn.conf برابر با "ovsqlite" باشد، باید فرایند ovsqlite-server در حین بازسازی مرور کلی در حال اجرا باشد. برای جزئیات بیشتر و نحوه راه‌اندازی دستی آن، به ovsqlite-server(8) مراجعه کنید.

بازسازی داده‌های مرور کلی مراحلی سرراست به شرح زیر دارد:

1.
بررسی اینکه فایل پیکربندی روش جدید ذخیره‌سازی مرور کلی در pathetc موجود بوده و با نیازهای شما سازگار باشد (buffindexed.conf، ovdb.conf یا ovsqlite.conf). توجه داشته باشید که روش ذخیره‌سازی مرور کلی tradindexed فایل پیکربندی اختصاصی ندارد.
2.
اطمینان از متوقف بودن INN (اجرای "rc.news stop" توسط کاربر news، یا هر دستوری که استفاده می‌کنید).
3.
تنظیم روش جدید ذخیره‌سازی مرور کلی در پارامتر ovmethod در inn.conf.
4.
اطمینان از اینکه دایرکتوری مشخص‌شده توسط پارامتر pathoverview در inn.conf وجود داشته و خالی باشد (یا در صورت استفاده از روش ذخیره‌سازی buffindexed، شامل بافرهای تازه ایجادشده buffindexed باشد). در غیر این صورت، نام دایرکتوری فعلی را تغییر دهید (تا از داده‌های مرور کلی موجود نسخه پشتیبان تهیه شود) و دایرکتوری pathoverview را توسط کاربر news مجدداً ایجاد کنید.
5.
شروع ovdb_init یا ovsqlite-server توسط کاربر news در صورتی که روش جدید ذخیره‌سازی مرور کلی به‌ترتیب ovdb یا ovsqlite باشد.
6.
اجرای "makehistory -O -x -F" و انتظار برای پایان اجرای دستور. (ممکن است چند پیام گزارش درباره مقالاتی مشاهده کنید که داده‌های مرور کلی آن‌ها را نمی‌توان در روش جدید ذخیره‌سازی وارد کرد. تا زمانی که تعداد آن‌ها زیاد نباشد کاملاً طبیعی است؛ به‌ویژه به این دلیل که برخلاف innd، در طول داده‌های مرور کلی تولیدشده توسط makehistory محدودیت داخلی وجود دارد. متأسفانه این مقالات نادر در مرور کلی جدید حضور نخواهند داشت.)
7.
متوقف کردن برنامه‌های کمکی ovdb یا ovsqlite اگر آن‌ها را در مراحل قبل راه‌اندازی کرده‌اید (اجرای "rc.news stop" توسط کاربر news آن‌ها را متوقف می‌کند؛ به پیام‌های مربوط به در حال اجرا نبودن کارساز اخبار اهمیتی ندهید).
8.
راه‌اندازی INN و بررسی گزارش‌ها (logs) برای اطمینان از سلامت همه‌چیز. معمولاً متوجه خواهید شد که شماره‌گذاری فایل active تجدید می‌شود (اجرای rc.news پس از بازسازی مرور کلی این کار را انجام می‌دهد؛ در غیر این صورت، دستور "ctlinnd renumber ''" را به‌صورت دستی اجرا کنید).

الحاق به فایل history به‌جای ایجاد یک فایل جدید. اگر به فایل اصلی history الحاق می‌کنید، مطمئن شوید که innd(8) محدود (throttled) شده یا در حال اجرا نیست؛ در غیر این صورت ممکن است پایگاه‌داده تاریخچه خراب شود.
حذف هرگونه پیام موجود در اسپول که فاقد فیلد سرایند معتبر Message-ID است.
ایجاد یک فرایند مجزا (fork) برای تخلیه داده‌های مرور کلی روی دیسک، به‌جای انجام مستقیم آن. مزیت این کار این است که به makehistory امکان می‌دهد در حین نوشتن اولین دسته از داده‌ها در پایگاه‌داده مرور کلی، به جمع‌آوری داده‌های بیشتر از اسپول ادامه دهد. عیب آن این است که تا دو برابر فضای دیسک موقت برای داده‌های مرور کلی تولیدشده استفاده خواهد شد. این گزینه تنها در ترکیب با گزینه -O معنا دارد. در روش buffindexed، برنامه overchan برای نوشتن مرور کلی فراخوانی می‌شود.
به‌جای نوشتن مستقیم در pathdb/history، خروجی در فایل filename که آن هم در pathdb قرار دارد نوشته می‌شود.
عدم ذخیره داده‌های مرور کلی برای مقالاتی با شماره کمتر از کمترین شماره مقاله موجود در فایل active. این گزینه در شرایطی کاربرد دارد که بنا به هر دلیلی مقالات قدیمی روی دیسک وجود دارند که نباید در دسترس خوانندگان قرار گیرند یا به پایگاه‌داده مرور کلی اضافه شوند.
این گزینه مشخص می‌کند که قبل از نوشتن اطلاعات انباشته‌شده مرور کلی در پایگاه‌داده، چه تعداد مقاله پردازش شود. مقدار پیش‌فرض "10000" است. از آنجا که کارایی نوشتن مرور کلی با داده‌های مرتب‌شده بیشتر است، هر «دسته» مرتب می‌شود. افزایش اندازه دسته با این گزینه ممکن است کارایی نوشتن را بیشتر بهبود بخشد، اما زمان مرتب‌سازی طولانی‌تر خواهد شد. همچنین برای ذخیره دسته‌های مرور کلی به فضای موقت نیاز خواهد بود. طبق یک تخمین تقریبی، حدود ۳۰۰ * count بایت فضای موقت مورد نیاز است (بدون احتساب فایل‌های موقت ایجادشده توسط sort(1)). برای نحوه تعیین محل ذخیره‌سازی موقت، به توضیحات گزینه -T مراجعه کنید. این گزینه در روش buffindexed هیچ تأثیری ندارد، زیرا buffindexed نیازی به مرور کلی مرتب‌شده ندارد و هیچ دسته‌بندی انجام نمی‌شود.
متوقف کردن موقت فعالیت‌ها در صورتی که میانگین بار سیستم (load average) از سطح مشخص‌شده load-average فراتر رود. این ویژگی به makehistory امکان می‌دهد روی سیستمی که برای مقاصد دیگر استفاده می‌شود بدون انحصار منابع سیستم و کند کردن غیرقابل قبول زمان پاسخ‌دهی برنامه‌های دیگر اجرا گردد. استفاده از nice(1) کمک چندانی نمی‌کند زیرا منشأ مشکل استفاده از ورودی/خروجی دیسک (I/O) است و ionice(1) نیز همیشه در دسترس یا کارآمد نیست.
ایجاد پایگاه‌داده مرور کلی هم‌زمان با فایل history. اطلاعات مرور کلی تنها در صورتی نیاز است که کارساز از خوانندگان (readers) پشتیبانی کند؛ برای کارسازهایی که تنها برای ترانزیت استفاده می‌شوند نیازی به آن نیست (به enableoverview در inn.conf(5) مراجعه کنید). اگر از روش ذخیره‌سازی مرور کلی buffindexed استفاده می‌کنید، قبل از اجرای makehistory با گزینه -O، تمام بافرهای مرور کلی خود را پاک کنید.
به‌جای ذخیره داده‌های مرور کلی در پایگاه‌داده مرور کلی، آن را در قالبی مناسب به خروجی استاندارد می‌نویسد تا در صورت تمایل بعداً به overchan تغذیه شود. هنگام استفاده از این گزینه، گزینه‌های -F، -I، -l و -T نادیده گرفته می‌شوند. این گزینه تنها در ترکیب با گزینه -O معنا دارد.
تنظیم اندازه پایگاه‌داده تاریخچه برای حدوداً size جفت کلید-مقدار (یعنی خطوط موجود در history). مشخص کردن دقیق اندازه، بهینه‌سازی مفیدی است که پایگاه‌داده کارآمدتری ایجاد می‌کند. (اندازه باید برآورد تعداد نهایی مقالات باشد، که معمولاً برابر با تعداد خطوط فایل قدیمی history است.)

به‌طور پیش‌فرض، makehistory پایگاه‌داده‌ای بهینه‌شده برای مدیریت حدود ۶,۰۰۰,۰۰۰ مقاله (یا ۵۰۰,۰۰۰ در صورت استفاده از فرمت هش نشانه‌دار کُندتر) ایجاد می‌کند. این اندازه مانع از ذخیره تعداد بیشتری مقاله در فایل history کارساز اخبار نمی‌شود؛ تنها پس از فراتر رفتن از این اندازه بهینه، عملکرد آن کندتر خواهد شد تا زمانی که اجرای بعدی news.daily اندازه آن را به‌طور مناسب تغییر دهد.

در صورت تعیین -O، دستور makehistory به مکانی برای نوشتن داده‌های موقت مرور کلی نیاز دارد. به‌طور پیش‌فرض، از pathtmp که در inn.conf تنظیم شده استفاده می‌کند، اما در صورت مشخص کردن این گزینه، از tmpdir ارائه‌شده به‌جای آن استفاده می‌شود. این مسیر همچنین برای فایل‌های موقت ایجادشده توسط sort(1) استفاده می‌شود (که در فرآیند نوشتن اطلاعات مرور کلی فراخوانی می‌شود زیرا نوشتن اطلاعات مرتب‌شده سریع‌تر است). به‌طور پیش‌فرض، دستور sort معمولاً از دایرکتوری موقت سیستم شما استفاده می‌کند؛ برای اطمینان به صفحه راهنمای sort(1) سیستم خود مراجعه کنید.
در صورت تعیین این گزینه، makehistory ورودی‌های فایل history را در خروجی نمی‌نویسد. این ویژگی بیشتر برای ساخت مرور کلی بدون تولید فایل جدید history کاربرد دارد.

در اینجا یک مثال معمول از بازسازی کل پایگاه‌داده تاریخچه و مرور کلی همراه با حذف مقالات خراب از اسپول اخبار آمده است. این دستور از مکان‌های پیش‌فرض فایل‌های موقت استفاده می‌کند و باید در زمانی که innd در حال اجرا نیست (یا محدود شده است) انجام شود.

makehistory -b -f history.n -O -l 30000 -I

این دستور مرور کلی را بازسازی می‌کند (در صورت استفاده از buffindexed، قبل از اجرای این دستور بافرهای مرور کلی موجود را پاک کنید) و فایل جدید history را به‌صورت "history.n" در pathdb باقی می‌گذارد. برای حفظ تمام ورودی‌های تاریخچه از فایل قدیمی history که مربوط به مقالات ردشده یا منقضی‌شده هستند، دستورات زیر را پس از دستور بالا اجرا کنید:

cd <pathdb>
awk 'NF == 2 { print }' < history >> history.n

(در صورتی که مسیر پیش‌فرض نیست، آن را با pathdb خود جایگزین کنید). سپس فایل جدید history را برای بررسی مشکلات احتمالی مرور کرده و دستور زیر را اجرا نمایید:

makedbz -s `wc -l < history.n` -f history.n

سپس تمام فایل‌های منطبق بر "history.n.*" را به "history.*" تغییر نام دهید تا جایگزین پایگاه‌داده تاریخچه و نمایه‌های فعلی شوند. پس از آن، لغو محدودیت (unthrottle) innd بلامانع است.

برای یک مثال ساده‌تر:

makehistory -b -f history.n -I -O

این دستور اسپول را پویش کرده، مقالات معیوب را حذف می‌کند و برای مقالاتی که در تاریخچه وجود ندارند ورودی‌های تاریخچه و مرور کلی تولید می‌نماید.

برای تنظیم اندازه اولیه فایل history برای ۱۰۰,۰۰۰,۰۰۰ مقاله و تولید هم‌زمان داده‌های مرور کلی، می‌توانید مستقیماً از دستور زیر استفاده کنید:

makehistory -O -s 100000000

در این حالت دیگر نیازی به اجرای makedbz نخواهید داشت، زیرا فایل history از قبل تولید شده و برای تعداد مقالات مورد انتظار بهینه‌سازی شده است.

تنها برای بازسازی مرور کلی:

makehistory -O -x -F

فایل خروجی پیش‌فرض برای makehistory.
محل نوشته شدن فایل‌های موقت، مگر اینکه گزینه -T تعیین شده باشد.

در ابتدا توسط Rich $alz <rsalz@uunet.uu.net> برای InterNetNews نوشته شده و از آن زمان توسط افراد مختلفی به‌روزرسانی شده است.

active(5), ctlinnd(8), history(5), inn.conf(5), innd(8), libinn_dbz(3), makedbz(8), ovdb_init(8), overchan(8), ovsqlite-server(8).

2024-05-19 INN 2.7.4