منبع اصلی نوشتار زیر در این لینک قرار دارد

اجرای باینری‌های لینوکس در FreeBSD

هنگامی که این مطلب را می‌خوانید، ممکن است توسط خودم یا دیگران تغییراتی کرده باشد. بدین ترتیب مشکلات آن برطرف شده و قسمت‌های جدیدی به آن اضافه می‌شوند. همواره می‌توانید آخرین نسخه این مطلب را در دانشنامه 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/l‌inux.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



برچسب ها : , ,