بعد از اینکه کد‌های منبع یک نسخه از FreeBSD مانند FreeBSD-STABLE یا FreeBSD-CURRENT را دریافت کردید، می‌توانید از آن برای کامپایل مجدد کل سیستم استفاده کنید. در این قسمت به نحوه به روز‌رسانی و کامپایل مجدد سیستم‌عامل FreeBSD می‌پردازیم.

هشدار:
از سیستم خود یک نسخه پشتیبان تهیه کنید. لازم به تذکر نیست که انجام این کار قبل از شروع عملیات، چقدر می‌تواند مهم باشد. هر چند که روند کامپایل سیستم‌عامل یک کار راحت و سر‌راست است، اما اگر مشکلی در کد‌های منبع وجود داشته باشد، ممکن است سیستم شما غیر قابل بوت شود. یک نسخه پشتیبان از سیستم خود تهیه کرده و برای اطمینان بیشتر آن را بررسی کنید.
هشدار:
از دستور make world استفاده نکنید. برخی از مستندات قدیمی استفاده از این دستور را پیشنهاد می‌کنند. با این حال در نسخه‌های اخیر FreeBSD نحوه عملکرد این دستور تغییر کرده است. این دستور از انجام چند مرحله مهم صرف نظر خواهد کرد و استفاده از آن فقط برای افراد حرفه‌ای توصیه می‌شود. به جای استفاده از آن دستور، از روشی که در ادامه معرفی خواهیم کرد استفاده کنید.

روش صحیح برای به روز‌رسانی سیستم

قبل از انجام عمل به روز‌رسانی، حتماً فایل /usr/src/UPDATING را مطالعه کنید. این فایل دربرگیرنده اطلاعات مهمی درباره اشکالات احتمالی است. ممکن است لازم باشد قبل از شروع عملیات، تنظیمات و کارهایی را در سیستم خود انجام دهید. این فایل حاوی دستورالعمل های احتمالی است که قبل از انجام عمل به روزرسانی باید انجام شوند.

روشی که در اینجا برای به روز‌رسانی سیستم معرفی می‌کنیم، فرض می‌کند که در حال حاضر شما از یک نسخه قدیمی FreeBSD استفاده می‌کنید، که این شامل یک کامپایلر قدیمی، هسته قدیمی، برنامه‌های قدیمی، و فایل‌های پیکربندی قدیمی می‌شود. واژه world به معنی تمام چیزهایی است که به صورت پیش فرض در FreeBSD وجود دارند مانند برنامه‌ها، کتابخانه‌ها، ابزار‌های برنامه‌نویسی و … . دقت کنید که هسته جزء world به حساب نمی‌آید و ما آن را به عنوان یک موجودیت مجزا در نظر می‌گیریم. همین طور برنامه‌هایی که از روی درخت پورت ها نصب می‌کنید هم جزء world به حساب نمی‌آیند. اما کامپایلری که به صورت پیش فرض در سیستم وجود دارد جزئی از world است که البته نگرانی‌های خاصی درباره آن وجود دارد.

این راهنما فرض می‌کند که در حال حاضر شما کد‌های منبع یک نسخه جدید از FreeBSD را دریافت کرده‌اید. اگر هنوز این کار را نکردید، لطفا استفاده از Subversion را ببینید.

نکات مهمی که باید بدانید:

  • کامپایلر قدیمی که در حال حاضر بر روی سیستم شما وجود دارد، ممکن است تعدادی باگ داشته باشد و نتواند هسته جدید را کامپایل کند. بنابراین شما باید هسته را با استفاده از کامپایلر جدیدی که هنوز در کد‌های منبع وجود دارد کامپایل کنید. این حرف به این معنی است که ابتدا باید کامپایلر جدید را کامپایل کرده و سپس با استفاده از آن اقدام به کامپایل هسته جدید نمایید. البته این حرف به این معنی نیست که کامپایلر جدید لزوما باید نصب هم شود.
  • دیگر قسمت‌های سیستم جدید به غیر از هسته (منظور همان world است)، ممکن است به هسته جدید وابسته باشند. بنابراین باید هسته جدید را قبل از world جدید نصب کنید.

پس به طور کلی مراحل کامپایل سیستم جدید به این ترتیب شد:

  • کامپایلر جدید را کامپایل می‌کنیم. (این کار با دستور buildworld انجام می‌شود)
  • هسته را کامپایل می‌کنیم. (این کار با دستور buildkernel انجام می‌شود)
  • هسته را نصب می‌کنیم. (این کار با دستور installkernel انجام می‌شود)
  • کامپایلر و دیگر اجزای سیستم را نصب می‌کنیم. (این کار با دستور installworld انجام می‌شود)

همین طور به یاد داشته باشید که:

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

با در نظر گرفتن مواردی که در بالا گفته شد، روند بروز‌رسانی سیستم به این صورت است:

۱-

make buildworld

دستور بالا در ابتدا کامپایلر و تعدادی ابزار مرتبط دیگر را کامپایل خواهد کرد. سپس از این کامپایلر جدید برای کامپایل کردن دیگر قسمت‌های سیستم استفاده می‌شود. نتیجه عملیات در /usr/obj قرار می‌گیرد.

۲-

make buildkernel

دستور بالا هسته را با استفاده از کامپایلر جدیدی که در /usr/obj قرار گرفته کامپایل خواهد کرد.

۳-

make installkernel

دستور بالا هسته کامپایل شده را در سیستم نصب خواهد کرد. هسته در مسیر /boot/kernel/kernel نصب می‌شود. ماژول‌های هسته هم در مسیر /boot/kernel نصب می‌شوند. به یاد داشته باشید که شما هنوز world جدید را نصب نکرده‌اید. بنابراین در صورتی که سیستم خود را reboot کنید، هسته جدید با world قدیمی بوت خواهد شد که احتمال نا‌سازگار بودن این دو بسیار بالاست. بنابراین در ادامه سیستم را در حالت single-user-mode بوت خواهیم کرد.

۴- سیستم خود را در حالت single user mode بوت کنید. کافیست دستور reboot را اجرا کرده و در صفحه خوش‌آمد گویی کلید s را فشار دهید. در این مرحله باید world جدید را نصب کنیم. حالت تک‌کاربره اشکالات احتمالی که ممکن است بر اثر به روز‌رسانی نرم‌افزارهای در حال اجرا به وجود آیند را کاهش می‌دهد.

۵-

mergemaster -p

دستور mergemaster برای نصب و جایگزینی فایل‌های پیکربندی استفاده می‌شود. فایل‌های پیکربندی در شاخه /etc قرار دارند. به شدت توصیه می‌شود که از این شاخه یک نسخه پشتیبان تهیه کنید. همان طور که قبلا هم گفته شد، به روز‌رسانی فایل‌های پیکربندی در دو مرحله انجام می‌شود. ما فعلا قسمت اول را انجام خواهیم داد. ممکن است برای نصب کردن world جدید احتیاج باشد تغییراتی در بعضی از فایل‌های پیکربندی انجام شود. برای مثال اجرای دستور بالا ممکن است کاربر یا گروه جدید را به سیستم اضافه کند. بنابراین پروسه نصب installworld می‌تواند از این کاربر اضافه شده استفاده کند.

۶-

make installworld

دستور بالا کامپایلر، کتابخانه‌ها، برنامه‌ها و تمام چیزهای دیگر را نصب خواهد کرد. بنابراین تا اینجا ما هم هسته و هم world را در سیستم نصب کرده‌ایم.

۷-

mergemaster

در این مرحله باید قسمت دوم به روز‌رسانی فایل‌های پیکربندی را انجام دهیم. در ادامه مقاله این مرحله با جزئیات توصیف خواهد شد.

۸- سیستم را مجددا راه‌اندازی کنید. با انجام این کار، سیستم با هسته جدید، برنامه‌های جدید و فایل‌های پیکربندی جدید راه‌اندازی خواهد شد.

مراحلی که در بالا گفته شد، روند کلی به روز‌رسانی سیستم را توصیف می‌کند. البته ممکن است احتیاج به انجام تعدادی مراحل اضافه باشد. این مراحل اضافه در /usr/src/UPDATING توصیف شده‌اند. بنابراین خواندن این فایل قبل از شروع عملیات اجباری است.

خلاصه

به طور خلاصه به روز رسانی سیستم به صورت زیر انجام می‌شود:

# cd /usr/src
# make buildworld
# make buildkernel
# make installkernel
# shutdown -r now

بعد از مرحله installkernel باید سیستم را در حالت تک‌کاربره راه‌اندازی کنید. سپس دستورات زیر را اجرا کنید:

# mount -u /
# mount -a -t ufs
# adjkerntz -i
# mergemaster -p
# cd /usr/src
# make installworld
# mergemaster
# reboot

فایل /usr/src/UPDATING را بخوانید

برای بار چندم تکرار می‌کنیم که قبل از شروع عملیات حتما فایل /usr/src/UPDATING را بخوانید. این فایل حاوی اطلاعات مهمی درباره مشکلات احتمالی است. بنابراین شما با خواندن این فایل می‌توانید این مشکلات احتمالی را برطرف کنید. ممکن است احتیاج به انجام کارهای خاصی قبل از شروع عملیات و یا در حین انجام آن باشد. UPDATING اولویت بیشتری نسبت به دستورالعمل های موجود در این راهنما دارد. اگر اطلاعاتی که در UPDATING آمده با چیزهایی که ما در اینجا به شما گفتیم در تضاد است، باید از دستورالعمل‌های موجود در UPDATING پیروی کنید.

فایل /etc/make.conf را بررسی کنید

گزینه‌ها و تنظیمات موجود برای دستور make در صفحه make.conf و همین طور فایل /usr/share/examples/etc/make.conf مستند شده‌اند. با اضافه کردن این گزینه‌ها به فایل /etc/make.conf می‌توان بر روی رفتار دستور make کنترل داشته و نحوه اجرای آن دستور و همین طور چگونگی کامپایل شدن برنامه‌ها کنترل داشته باشید. هر بار که دستور make را اجرا می‌کنید، فایل /etc/make.conf هم خوانده می‌شود. تغییر دادن برخی از این گزینه‌ها می‌تواند تاثیر زیادی بر روند انجام عملیات داشته باشد و باعث بوجود آمدن اتفاقات عجیب و غریب شود. بنابراین در هنگام تنظیم آنها دقت کنید. به خاطر داشته باشید که مقادیر پیش فرض طوری انتخاب شده‌اند که هم ایمنی کار حفظ شود و هم کارآیی بالا برود.

بررسی فایل /etc/src.conf

این فایل نحوه کامپایل کردن کد‌های منبع سیستم‌عامل را کنترل می‌کند. برخلاف /etc/make.conf، فایل /etc/src.conf فقط در هنگام کامپایل کد‌منبع سیستم خوانده می‌شود. اما فایل /etc/make.conf علاوه بر این در هنگام کامپایل پورت ها و … هم خوانده می‌شود. این فایل از قالب بسیار ساده‌ای برخوردار است. تمام متغیر‌هایی که می‌توان در این فایل تنظیم کرد در src.conf لیست شده‌اند. برای نمونه تعدادی از آن‌ها را در اینجا خواهیم آورد.

WITHOUT_BLUETOOTH

اگر متغیر بالا تنظیم شود، ماژول ها، برنامه‌ها و کتابخانه‌های مرتبط با بلوتوث کامپایل نخواهند شد.

WITHOUT_CVS

باعث می‌شود تا برنامه CVS کامپایل نشود.

WITHOUT_IPFW

باعث می‌شود تا فایروال IPFW کامپایل نشود.

شاخه /etc را به روز کنید

شاخه /etc دربرگیرنده بسیاری از فایل‌های پیکربندی سیستم و همچنین اسکریپت‌هایی برای کنترل سرویس‌های سیستمی است. ممکن است در نسخه جدید برخی از این فایل‌ها تغییر کرده باشند.

در برخی موراد، مرحله make installworld انتظار دارد تعدادی کاربر و گروه در سیستم وجود داشته باشند. وقتی که سیستم را به روز می‌کنید، ممکن است که این گروه‌ها و کاربران هنوز در سیستم وجود نداشته باشند. در برخی مواقع make buildworld بررسی می‌کند که آیا این کاربران در سیستم وجود دارند یا نه.

راه حل این مسئله اجرای دستور ‎mergemaster -p‎ است. این دستور فقط فایل هایی که برای مراحل buildworld و installworld احتیاج هستند را مقایسه می‌کند.

سیستم را در حالت تک‌کاربره بوت کنید

در هنگام نصب مجدد سیستم، فایل‌های بسیار مهم سیستمی دستکاری خواهد شد. مانند برنامه‌ها، کتابخانه ها و … . تغییر دادن این فایل‌ها در یک سیستم در حال اجرا خصوصا سیستم‌هایی که کاربران فعال دارند، می تواند باعث بوجود آمدن اشکالات اساسی شود. می توانید سیستم را در حالت چند‌کاربره کامپایل کرده و سپس وارد حالت تک‌کاربره شده و سپس آن را نصب کنید. بعد از اینکه وارد حالت تک‌کاربره شدید، دستورات زیر را اجرا کنید:

# fsck -p
# mount -u /
# mount -a -t ufs
# swapon -a

به این ترتیب فایل‌سیستم‌ها بررسی شده و مشکلات آنها برطرف خواهد شد (در صورت وجود)، فایل سیستم ریشه به صورت خواندنی/نوشتنی مونت خواهد شد، سپس تمام دیگر فایل سیستم‌های نوع UFS مونت می‌شوند و در آخر فضای swap هم فعال می‌شود.

شاخه /usr/obj را حذف کنید

نتیجه عملیات کامپایل در مسیر /usr/obj قرار می‌گیرد. برای سرعت بخشیدن به عمل make buildworld و جلوگیری از داخل وابستگی‌ها این شاخه را پاک کنید (اگر وجود دارد). ممکن است برخی از فایل‌ها طوری برچسب خورده باشند که نتوان آنها را پاک کرد. کافی است آنها را به این صورت پاک کنید:

# cd /usr/obj
# chflags -R noschg *
# rm -rf *

خروجی عملیات را در جایی ذخیره کنید

در هنگام کامپایل شدن سیستم، نوشته‌های زیادی بر روی صفحه نمایش چاپ می‌شود که به علت سریع بودن عملیات امکان خواندن آنها وجود ندارد. بهتر است خروجی دستور make را در یک فایل ذخیره کنید. اگر اشکالی پیش آمد، می‌توانید یک کپی از پیغام خطا را برای لیست پستی و یا انجمن ارسال کرده و از دیگران کمک بخواهید. ساده‌ترین راه برای انجام این کار استفاده از دستور script است. این دستور یک آرگومان می‌گیرد که این آرگومان نام فایل خروجی را مشخص می‌کند. این دستور را بلافاصله قبل از شروع عملیات اجرا کرده و پس از پایان آن دستور exit را تایپ کنید.

# script /var/tmp/mw.out
Script started, output file is /var/tmp/mw.out
# make TARGET
… compile, compile, compile …
# exit
Script done, …

از شاخه /tmp برای ذخیره کردن فایل خروجی استفاده نکنید. چون ممکن است این دایرکتوری در هنگام راه اندازی سیستم پاک‌سازی شود. بهترین جا برای ذخیره کردن این فایل مسیر /var/tmp یا دایرکتوری خانگی کاربر ریشه است.

بررسی دقیق‌تر دستور make

برنامه make دستورالعمل‌های موجود در فایلی به نام Makefile را می‌خواند. این دستورالعمل‌ها مشخص می‌کنند که برنامه‌های تشکیل‌دهنده FreeBSD چگونه باید کامپایل شوند. همین طور این فایل ترتیب کامپایل شدن این برنامه‌ها را هم مشخص می‌کند. شکل کلی دستور make به صورت زیر است:

# make -x -DVARIABLE target

در مثال بالا، ‎-x گزینه‌ایست که به make ارسال می‌شود. برای دیدن گزینه‌های موجود، صفحه make را ببینید.

‎-DVARIABLE هم یک متغیر را برای Makefile ارسال می‌کند. این متغیر‌ها نحوه رفتار کردن Makefile را کنترل می‌کنند. این متغیر‌ها مشابه همان متغیر‌هایی هستند که در /etc/make.conf تعریف می‌شوند. حتی شما می‌توانید این متغیر‌ها را در فایل /etc/make.conf قرار دهید تا مجبور نباشید همیشه آنها را بنویسید. به عنوان مثال:

# make -DWITHOUT_SENDMAIL target

باعث می‌شود تا برنامه sendmail کامپایل نشود. راه دیگر برای انجام این کار این است که این متغیر را در فایل /etc/make.conf تعریف کنیم:

WITHOUT_SENDMAIL=yes	# Avoid compiling sendmain(8)

قسمت target به make می‌گوید که چه کاری را باید انجام دهد. هر Makefile حاوی تعدادی target مختلف است که انتخاب هر کدام از آنها باعث می‌شود عملیات خاصی صورت پذیرد.

برای سرعت بخشیدن به عمل کامپایل، می‌توانید از گزینه ‎-j استفاده کنید. این گزینه به make می‌گوید که چند کار را به صورت همزمان انجام بده. در سیستم‌هایی که چند CPU دارند، این گزینه می‌تواند بسیار مفید واقع شود. استفاده از این گزینه بر روی سیستمی که حتی یک پردازنده هم دارد مفید است.

برای سیستمی که یک پردازنده دارد این دستور را اجرا کنید:

# make -j4 buildworld

با اجرای دستور بالا، make چهار کار را به صورت همزمان انجام می‌دهد. برای سیستمی که چند پردازنده دارد، مقادیری بین ۶ تا ۱۰ را امتحان کنید.

اگر در حین اجرای دستور make buildworld متغیری را تعریف کرده‌اید، باید همان متغیر‌ها را عینا در مرحله make installworld هم تعریف کنید. در ضمن، هرگز از گزینه ‎-j برای مرحله installworld استفاده نکنید.

به عنوان مثال، اگر از این دستور استفاده کردید:

make -DWITHOUT_SENDMAIL buildworld

باید حتما متغیر WITHOUT_SENDMAIL را در مرحله installworld هم تعریف کنید:

make -DWITHOUT_SENDMAIL installworld

در غیر این صورت، دستور installworld سعی می‌کند برنامه sendmail را نصب کند. در حالی که این برنامه اصلا کامپایل نشده است.

mergemaster

mergemaster برنامه‌ای برای به روز‌رسانی فایل‌های پیکربندی موجود در شاخه /etc است. فایل‌های پیکربندی باید توسط این برنامه به روز شوند. این دستور فایل‌های موجود در شاخه /etc را با فایل‌های موجود در /usr/src/etc مقایسه می‌کند و تفاوت آنها را به شما اطلاع می‌دهد. اگر تفاوتی میان این فایل‌ها وجود داشته باشد، mergemaster آن تفاوت را در قالب diff به شما نشان می‌دهد. اگر علامت + را در ابتدای خطی دیدید، یعنی در نسخه جدید، آن خط یا اضافه شده و یا تغییر کرده است. علامت – که در ابتدای خطوط قرار دارد، نشان دهنده این است که آن خط در نسخه جدید‌تر حذف یا جایگزین شده است. سپس به شما اجازه می‌دهد که درباره این فایل‌ها تصمیم‌گیری کنید. می‌توانید فایل جدید را با فشردن کلید i نصب کنید. می‌توانید با فشردن کلید d فایل قدیمی را نگه داشته و فایل جدید را حذف کنید. همین طور با فشردن کلید m می‌توانید این دو فایل را با هم ترکیب کرده و نتیجه را در سیستم نصب کنید.

فشردن کلید d به mergemaster می‌گوید که فایلی که در حال حاضر در سیستم وجود دارد را نگه دار و فایل جدید را پاک کن. این گزینه پیشنهاد نمی‌شود. مگر زمانی که هیچ دلیلی برای تغییر در فایل فعلی نباشد. هر جا که به کمک احتیاج داشتید می‌توانید کلید ? را فشار دهید.

در اکثر موارد شما باید با استفاده از کلید i فایل جدیدتر را جایگزین فایل قدیمی کنید. اگر می‌خواهید تفاوت‌های موجود بین فایل‌ها را مجددا ببینید، کافی است کلید v را فشار دهید.

همچنین فشردن کلید m باعث می‌شود تا هر دو فایل در یک ویرایشگر متن باز شوند. این ویرایشگر از دو ستون تشکیل شده که ستون سمت چپ فایل قدیمی و ستون سمت راست فایل جدید را نشان می‌دهد. می توانید تغییرات این فایل‌ها را ببینید و قسمت‌های مورد نظر خود را انتخاب کنید. اگر می‌خواهید خطوطی را از فایل سمت راست انتخاب کنید، کلید r را فشار دهید و اگر می‌خواهید خطوطی را از فایل سمت چپ انتخاب کنید، کلید l را فشار دهید. خروجی فایلی خواهد بود که از ترکیب این دو فایل تشکیل شده است. این حالت برای فایل‌هایی که توسط کاربر تغییر کرده‌اند بسیار مفید است.

سوالات متداول

سوال:
آیا هر وقت که تغییری در کد‌های منبع ایجاد می‌شود (حتی تغییرات کوچک) من هم باید سیستم را آپدیت کنم؟

جواب دادن به این سوال کار ساده‌ای نیست. چون این کار بستگی به همان تغییرات دارد. برای مثال ممکن است svn فقط فایل‌های زیر را به روز کند:

src/games/cribbage/instr.c
src/games/sail/pl_main.c
src/release/sysinstall/config.c
src/release/sysinstall/media.c
src/share/mk/bsd.port.mk

در این حالت انجام به روز رسانی کامل کار خوبی نیست. در عوض کافی است وارد همان دایرکتوری‌ها شده و دستور make all install را اجرا کنید. اما اگر فایل‌های مهمی مانند src/lib/libc/stdlib تغییر کردند، آن وقت یا تمام world را به صورت کامل کامپایل کنید و یا حداقل آن قسمت‌هایی که به صورت ثابت به آن کتابخانه لینک شده‌اند را کامپایل کنید.

به هر حال، تصمیم با شماست. بعضی از کاربران عمل به روز‌رسانی سیستم را هر دو هفته یک بار انجام می‌دهند و اجازه می‌دهند تا تغییرات در تمام آن دو هفته روی هم جمع شود. برخی دیگر فقط چیزهایی که تغییر کرده را کامپایل می‌کنند (با رعایت وابستگی‌ها). البته این کار بستگی زیادی به این دارد که شما FreeBSD-STABLE را دنبال می‌کنید و یا FreeBSD-CURRENT را.

پاک کردن فایل‌ها، دایرکتوری‌ها و کتابخانه‌های قدیمی و بلا‌استفاده

به عنوان بخشی از چرخه توسعه FreeBSD، برخی از فایل‌ها و محتویات آنها قدیمی و بلا‌استفاده می‌شوند. ممکن است عملکرد آن فایل در جای دیگری پیاده‌سازی شده باشد، یا شماره نسخه یک کتابخانه تغییر کرده باشد و یا اینکه آن فایل به طور کامل از سیستم حذف شده باشد. این فایل‌ها، دایرکتوری‌ها و کتابخانه‌ها باید از سیستم حذف شوند. مزیت این کار مشخص است. این کار از بهم ریختن سیستم جلوگیری می‌کند و پاک کردن فایل‌های اضافه می‌تواند در فضای دیسک سخت هم صرفه جویی کند. به علاوه ممکن است کتابخانه‌های قدیمی از نظر پایداری و امنیتی مشکلی داشته باشند، که در این حالت به روز‌رسانی آن کتابخانه به نسخه جدید‌تر باعث می‌شود تا هم سیستم از نظر امنیتی آسیب‌پذیر نباشد و هم از هنگ کردن و crash کردن سیستم جلوگیری شود. فایل‌ها، دایرکتوری‌ها و کتابخانه‌های قدیمی در فایل /usr/src/ObsoleteFiles.inc لیست می‌شوند. برای پاک کردن این فایل‌ها باید دستورالعمل های زیر را دنبال کنید.

پس از اینکه مرحله make installworld و به دنبال آن mergemaster با موفقیت به اتمام رسید، می‌توانید به صورت زیر سیستم را برای پیدا کردن فایل‌ها و کتابخانه‌های قدیمی جستجو کنید:

# cd /usr/src
# make check-old

اگر فایل منسوخ شده‌ای در سیستم پیدا شد، می‌توانید با استفاده از دستور زیر آن را پاک کنید:

# make delete-old

سیستم قبل از پاک کردن هر فایل از شما تایید خواهد گرفت که باید با y به آن پاسخ دهید تا فایل مورد نظر از سیستم پاک شود. برای اینکه سیستم بدون نیاز به تایید شما و به صورت خودکار فایل‌های قدیمی را پاک کند کافی است متغیر BATCH_DELETE_OLD_FILES را تنظیم کنید:

# make -DBATCH_DELETE_OLD_FILES delete-old

یک راه دیگر برای انجام این کار استفاده از دستور yes است:

# yes|make delete-old
هشدار:
پاک کردن فایل‌های منسوخ شده باعث از کار افتادن برنامه‌هایی می‌شود که هنوز به آن فایل‌های قدیمی وابسته هستند. این قضیه برای کتابخانه‌های قدیمی بسیار رایج است. در بیشتر موراد کتابخانه‌ها و پورت های قدیمی باید قبل از اجرای make delete-old-libs مجددا کامپایل شوند.

دو برنامه بسیار خوب در درخت پورت ها وجود دارد که به کمک آنها می‌توانید ببینید که یک برنامه به چه کتابخانه‌هایی لینک شده است. این دو برنامه sysutils/libchk و sysutils/bsdadminscripts هستند.

کتابخانه‌های قدیمی ممکن است با کتابخانه‌های جدید تداخل و ناسازگاری داشته باشند که این امر موجب چاپ شدن پیغام هایی مانند پیغام زیر خواهد شد:

/usr/bin/ld: warning: libz.so.4, needed by /usr/local/lib/libtiff.so, may conflict with libz.so.5
/usr/bin/ld: warning: librpcsvc.so.4, needed by /usr/local/lib/libXext.so, may conflict with librpcsvc.so.5

برای حل این مشکل باید مشخص شود که کدام پورت آن کتابخانه را نصب کرده است. این کار به صورت زیر انجام می‌شود:

# pkg_info -W  /usr/local/lib/libtiff.so
/usr/local/lib/libtiff.so was installed by package tiff-3.9.4
# pkg_info -W /usr/local/lib/libXext.so
/usr/local/lib/libXext.so was installed by package libXext-1.1.1,1

آن پورت را حذف کرده، و مجددا کامپایل و نصب نمایید. در صورتی که تعداد این برنامه‌ها زیاد باشد می توانید از برنامه ای مانند ports-mgmt/portmaster برای خودکار سازی انجام این کار استفاده کنید. بعد از اینکه همه پورت ها را دوباره کامپایل کردید و هیچ برنامه‌ای وجود نداشت که به کتابخانه‌های قدیمی لینک شده باشد، از دستور زیر برای پاک کردن کتابخانه های قدیمی استفاده کنید:

make delete-old-libs