هنگامی که این مطلب را میخوانید، ممکن است توسط خودم یا دیگران تغییراتی کرده باشد. بدین ترتیب مشکلات آن برطرف شده و قسمتهای جدیدی به آن اضافه میشوند. همواره میتوانید آخرین نسخه این مطلب را در دانشنامه BSD مطالعه کنید.
FreeBSD قادر است فایلهای باینری دیگر سیستمعاملهای شبهیونیکس مثل لینوکس را اجرا کند. بیشتر شرکتها و توسعهدهندگان برنامههای خود را فقط برای Linux ارائه میدهند و به هر دلیلی از ارائه یک نسخه اختصاصی از برنامه مورد نظر برای سیستمعامل FreeBSD خودداری میکنند.اما شما با استفاده از این قابلیت FreeBSD، میتوانید حدوداً ۹۰% برنامههای لینوکس را بدون نیاز به هیچ گونه تغییری در FreeBSD اجرا کنید. برنامههایی مثل StarOffice، نسخههای لینوکسی Netscape,Adobe Acrobat,Real Player,VMware,Oracle,WordPerfect,Doom,Quake و … به راحتی بر روی FreeBSD اجرا میشوند. این قابلیت به صورت پیشفرض غیر فعال است.میتوانید با بارگزاری یک KLD در هسته که linux نام دارد این قابلیت را فعال کنید:
# kldload linux
اگر میخواهید این قابلیت همیشه فعال باشد خط زیر را به فایل /etc/rc.conf اضافه کنید:
linux_enable=\"YES\"
از دستور kldstat میتوانید از بارگذاری صحیح این KLD در هسته اطمینان حاصل کنید:
% kldstat Id Refs Address Size Name 1 2 0xc0100000 16bdb8 kernel 7 1 0xc24db000 d000 linux.ko
اگر به هر دلیلی نمیخواهید یا نمیتوانید این KLD را در هسته بارگذاری کنید، میتوانید این قابلیت را به صورت ایستا در هسته خود فعال کنید تا همیشه فعال باشد. برای این کار باید خط زیر را به فایل پیکربندی هسته خود اضافه کرده و آن را مجدداً کامپایل کنید:
options COMPAT_LINUX
در مرحله بعد باید کتابخانههای مورد نیاز برای اجرای باینریهای لینوکس را نصب کنید. این کتابخانهها را هم میتوانید به صورت دستی و هم از روی ports collection نصب کنید. برای نصب از روی ports collection به مسیر زیر بروید:
# cd /usr/ports/emulators/linux_base-f10
و دستور زیر را اجرا کنید:
# make install distclean
اگر از نسخه ۸٫۰ یا قدیمیتر استفاده میکنید، باید emulators/linux_base-fc4 را به جای emulators/linux_base-f10 نصب کنید. خب حالا باید FreeBSD شما بتواند باینریهای لینوکس را اجرا کند.
نصب کتابخانههای بیشتر
اگر این کتابخانهها را نصب کردهاید و برنامه شما باز هم به کتابخانههای بیشتری احتیاج داشته باشد چه؟ اصلاً چگونه بفهمیم که برنامه مورد نظر ما به چه کتابخانههایی احتیاج دارد؟ فرض میکنیم که باینریهای Doom را از طریق ftp دریافت کرده و آنها را بر روی یک سیستم لینوکس نصب کردهایم. در این صورت میتوانیم با دستور ldd linuxdoom کتابخانههای مورد نیاز آن را پیدا کنیم:
% ldd linuxdoom libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0 libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0 libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29
به طور کلی از دستور ldd میتوان برای دیدن کتابخانههای مورد نیاز برای هر باینری دلخواهی استفاده کرد:
$ ldd /bin/ls linux-gate.so.1 => (0x00f1a000) libselinux.so.1 => /lib/i386-linux-gnu/libselinux.so.1 (0x00f80000) librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0x00b92000) libacl.so.1 => /lib/i386-linux-gnu/libacl.so.1 (0x00dc0000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00805000) libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0x00bef000) /lib/ld-linux.so.2 (0x00666000) libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x0060d000) libattr.so.1 => /lib/i386-linux-gnu/libattr.so.1 (0x00180000)
اگر دستور ldd در سیستم شما وجود نداشته و پیغام ldd: command not found را دریافت میکنید، باید بسته binutils را در توزیع لینوکس خود نصب کنید. بعد از پیدا کردن کتابخانهها، باید آنها را در سیستم FreeBSD خود و در مسیر زیر کپی کنید:
/compat/linux
نصب باینریهای نوع ELF
باینریهای نوع ELF بعضی اوقات احتیاج به یک گام اضافه به نام “branding” دارند. ممکن است در هنگام اجرای این نوع باینری ها پیغام زیر را دریافت کنید:
% ./my-linux-elf-binary ELF binary type not known Abort
برای اینکه به کرنل FreeBSD کمک کرده باشید تا فرق بین باینریهای نوع ELF مربوط به خود و باینریهای لینوکس را تشخیص دهد، میتوانید از دستور brandelf به صورت زیر استفاده کنید:
% brandelf -t Linux my-linux-elf-binary
نصب بسته های RPM
FreeBSD مدیرِ بسته مختص به خود را داشته و از بسته های rpm پشتیبانی نمیکند. با این حال اگر قصد دارید تا یک بسته rpm را نصب کنید میتوانید به این صورت عمل کنید:
# cd /compat/linux # rpm2cpio -q < /path/to/linux.archive.rpm | cpio -id
تنظیم DNS
اگر DNS کار نمیکند و خطای زیر را دریافت میکنید:
resolv+: \"bind\" is an invalid keyword resolv+: \"hosts\" is an invalid keyword
باید فایل /compat/linux/etc/host.conf را به صورت زیر پیکربندی کنید:
order hosts, bind multi on