الرئيسية > أنظمة يونكس > تشغيل برامج Linux على FreeBSD

تشغيل برامج Linux على FreeBSD


السلام عليكم و رحمة الله و بركاته
معروف أن لكل نظام بنية خاصة لملفاته التطبيقية أو ما يعرف ب Binary Executable، مما يستحيل تشغيلها في نظام آخر إلا بوسيط آخر كemulation الذي يقوم بعمل محاكاة، ليس شرطا أن يحاكي النظام كله ربما جزء منه كما يفعل FreeBSD لتشغيل الملفات التطبيقية للأنظمة الأخرى كSolaris, OpenSolaris, BSD based,Linux.
FreeBSD لديه قابلية تشغيل معظم برامج Linux مما يجعلك تضرب عصفورين بحجر واحد، يعتمد على ذلك بوحدة أو module، هذه الوحدة تقوم بمحاكاة system call’s الخاصة ب Linux على FreeBSD مما يعطي القابلية لتشغيل ملفات Linux عليه.
كيفية تشغيل Linux emulation على FreeBSD:


أولا علينا تشغيل الوحدة linux، نقوم أولا بإضافة خاصية تشغيلها في الملف rc.conf:

ee /etc/rc.conf
linux_enable=”YES”

بعدها من سطر الأوامر و بصلاحيات جذر نفذ الآتي:

kldload linux

هذا الأمر سيقوم بتشغيل الوحدة linux على مستوى النظام، للتأكد من تشغيلها ننفذ الآتي:

kldstat
.
.
.
 8    1 0xffffffff80c22000 1393f1   zfs.ko
 9    1 0xffffffff80d5c000 1c39     opensolaris.ko
10    1 0xffffffff80d5e000 510b     linprocfs.ko
11    1 0xffffffff80d64000 2564e    linux.ko

يقوم FreeBSD بتشغيل ملفات Linux بصنع بيئة مشابهة لل Linux أو أقرب إلى أن تكون chroot، تكون هذه البيئة المصغرة في المسار التالي:

/usr/compat/linux

لو نرى ما بداخلها نجدها مشابهة لبيئة Linux، حيث توضع جميع الملفات الأساسية لل Linux و كأنك في توزيعة aDSL، هذا سيجعل برامج Linux تجد نفس الإعدادات و الوحدات (shared object) التي هي في Linux، بعدها يقوم النظام بالمحاكاة.
يجب عدم الخلط ما بين الملفات الموجودة في المسار usr/compat/linux/lib/مثلا و الموجودة في المسارlib/، حتى لو وجدت بنفس الإسم إلا أن كل ملف يحمل معلومات خاصة بنظامه الأصلي.
تنصيب Linux emulation:
ال port الخاص بالمحاكاة نجده في:

/usr/ports/emulators/linux_base-f10

FreeBSD يعتمد على بيئة مشابهة ل Fedora 10 في المحاكاة، لأن كل توزيعة تحمل إصدارة نواة خاصة، و المحاكاة الخاصة ب FreeBSD لم تكتمل بعد لتدعم كل sys call’s الخاصة ب Linux.
الآن نتوجه إلى المسار السابق و نقوم بتنصيب طبقة المحاكاة:

cd /usr/ports/emulators/linux_base-f10
make install clean

بعدها نقوم بالآتي حتى لا نضطر إلى إعادة تشغيل النظام:

/etc/rc.d/abi restart
/etc/rc.d/sysctl restart

الكثير من برامج Linux تعتمد على نظام الملفات procfs لتخزن معلومات حول البرامج، لمحاكاة هذا النظام نضيفه إلى الملف etc/fstab/:

ee /etc/fstab
linproc	/usr/compat/linux/proc		linprocfs	rw	0	0
mount linproc

الآن يمكنك تشغيل برامج Linux على FreeBSD.
تشغيل Flash في المتصفح Firefox 3.x:
سنقوم الآن بتشغيل الفلاش على المتصفح Firefox، مثل ماهو معروف فإن أغلب المواقع تعتمد على Adobe Flash Player الذي لم توفر الشركة الأصلية نسخة للبيسداويين(لا علينا).
سنقوم بتشغيل Flash 10 الآن لكن قبل ذلك علينا أن نضيف الآتي:

OVERRIDE_LINUX_BASE_PORT=f10
OVERRIDE_LINUX_NONBASE_PORTS=f10

etc/make.conf/، بهذا سنعتمد على الحزم الخاصة ب fedora 10 فقط.
نقوم الآن بتنصيب ال flash plugin:

cd /usr/ports/www/linux-f10-flashplugin10 && make install clean

تعتمد فكرة تشغيل الفلاش في FreeBSD على nspluginwrapper، ماهية عمل هذا الأخير هي تمكين تشغيل ال plugins لمنصة في منصة أخرى، و كأنه Cygwin لكن خاص بالمتصفح.

cd /usr/ports/www/nspluginwrapper && make install clean

الآن يمكننا إيجاد الإضافة flash على المسار التالي:

/usr/local/lib/npapi/linux-f10-flashplugin/libflashplayer.so

الآن قم بغلق المتصفح و نفذ الآتي من دون صلاحيات جذر:

nspluginwrapper -v -i /usr/local/lib/npapi/linux-f10-flashplugin/libflashplayer.so

تنفيذ الأمر السابق سيجعل الفلاش يشتغل للمستخدم الحالي، إن أردت تششغيل عند أي مستخدم آخر عليك أولا أن تقوم إلى الدخول إليه، عبر الطرفية مثلا، بعدها تنفذ الأمر السابق.
مثال:

$su Brother
$nspluginwrapper -v -i /usr/local/lib/npapi/linux-f10-flashplugin/libflashplayer.so
$exit

مشاكل تصادفك أثناء تشغيل ملفاتLinux:
مثال 01:
كما قلنا سابقا أن FreeBSD يقوم بتضمين الملفات الاساسية فقط في المسار usr/compat/linux/، لذا فإنه من الممكن أن تجد وحدات ناقصة تعتمد عليها برامج أخرى عند تشغيلها، كل ماعليك فعله هو البحث عن الملفات الناقصة و وضعها في المسار الصحيح تحت usr/compat/linux/، هنا عند محاولتي لتشغيل skype صادفت الرسالة التالية:
./skype: error while loading shared libraries: libasound.so.2: cannot open shared object file: No such file or directory
فل ما كان علي فعله هو الذهاب إلى موقع http://rpm.pbone.net و البحث عن الحزمة المسؤولة عن الوحدة libasound.so.2 بعدها قمت بتحميلها عندي، إستخرجت الملفات من الحزمة و و ضعتها في مكانها المناسب، بلغة سطر الأوامر:

$wget http://archive.fedoraproject.org/fedora/linux/updates/10/i386/alsa-lib-1.0.21-2.fc10.i386.rpm
$rpm2cpio | cpio -idm
$ls
$lib	usr	etc
$su
#cp -R lib/ usr/compat/linux/lib/
#cp -R etc/ usr/compat/linux/etc/
#cp -R usr/ usr/compat/linux/usr

لاحظوا أني نقلت المجلدات المستخرجة إلى usr/compat/linux/، نقلها إلى غير مكانها مثلا إلى lib/ يسبب عدم عمل بعض البرامج لديك و ربما حتى خلل في النظام.
كرر هذه الخطوة مع كل ملف تجده ناقص😀.
مثال 02:

skype: error while loading shared libraries: /usr/lib/libvorbisenc.so.2: ELF file OS ABI invalid

سبب هذه الرسالة هو عدم تعرف النظام إلى أصل الملفات أهي خاصة ب FreeBSD أم ب Linux، ﻷن الملفات التطبيقية الخاصة بالنظام لاتحمل معلومات كافية، GNU بدء يقوم بإضافة معلومات إلى هذه الملفات أثناء الترجمة.
لحل هذه المشكلة نقوم بوسم ملفات ال Linux حتى يتعرف عليها النظام كالآتي:

brandelf -t Linux /usr/compat/linux/usr/lib/libvorbisenc.so.2

مصادر:
Linux® emulation in FreeBSD
Linux at FreeBSD Wiki
NSpluginwrapper: A cross-architecture browser plugin tool
HOW TO: Flash10 plugin, Firefox3 and FreeBSD 7.2 or higher

التصنيفات :أنظمة يونكس
  1. لا يوجد تعليقات.
  1. No trackbacks yet.

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s

%d مدونون معجبون بهذه: