السلام عليكم و رحمة الله و بركاته
معروف أن لكل نظام بنية خاصة لملفاته التطبيقية أو ما يعرف ب Binary Executable، مما يستحيل تشغيلها في نظام آخر إلا بوسيط آخر كemulation الذي يقوم بعمل محاكاة، ليس شرطا أن يحاكي النظام كله ربما جزء منه كما يفعل FreeBSD لتشغيل الملفات التطبيقية للأنظمة الأخرى كSolaris, OpenSolaris, BSD based,Linux.
FreeBSD لديه قابلية تشغيل معظم برامج Linux مما يجعلك تضرب عصفورين بحجر واحد، يعتمد على ذلك بوحدة أو module، هذه الوحدة تقوم بمحاكاة system call's الخاصة ب Linux على FreeBSD مما يعطي القابلية لتشغيل ملفات Linux عليه.
كيفية تشغيل Linux emulation على FreeBSD:
أولا علينا تشغيل الوحدة linux، نقوم أولا بإضافة خاصية تشغيلها في الملف rc.conf:
بعدها من سطر الأوامر و بصلاحيات جذر نفذ الآتي:
يقوم FreeBSD بتشغيل ملفات Linux بصنع بيئة مشابهة لل Linux أو أقرب إلى أن تكون chroot، تكون هذه البيئة المصغرة في المسار التالي:
لو نرى ما بداخلها نجدها مشابهة لبيئة Linux، حيث توضع جميع الملفات الأساسية لل Linux و كأنك في توزيعة aDSL، هذا سيجعل برامج Linux تجد نفس الإعدادات و الوحدات (shared object) التي هي في Linux، بعدها يقوم النظام بالمحاكاة.
يجب عدم الخلط ما بين الملفات الموجودة في المسار usr/compat/linux/lib/مثلا و الموجودة في المسارlib/، حتى لو وجدت بنفس الإسم إلا أن كل ملف يحمل معلومات خاصة بنظامه الأصلي.
تنصيب Linux emulation:
ال port الخاص بالمحاكاة نجده في:
FreeBSD يعتمد على بيئة مشابهة ل Fedora 10 في المحاكاة، لأن كل توزيعة تحمل إصدارة نواة خاصة، و المحاكاة الخاصة ب FreeBSD لم تكتمل بعد لتدعم كل sys call's الخاصة ب Linux.
الآن نتوجه إلى المسار السابق و نقوم بتنصيب طبقة المحاكاة:
بعدها نقوم بالآتي حتى لا نضطر إلى إعادة تشغيل النظام:
الكثير من برامج Linux تعتمد على نظام الملفات procfs لتخزن معلومات حول البرامج، لمحاكاة هذا النظام نضيفه إلى الملف etc/fstab/:
الآن يمكنك تشغيل برامج Linux على FreeBSD.
تشغيل Flash في المتصفح Firefox 3.x:
سنقوم الآن بتشغيل الفلاش على المتصفح Firefox، مثل ماهو معروف فإن أغلب المواقع تعتمد على Adobe Flash Player الذي لم توفر الشركة الأصلية نسخة للبيسداويين(لا علينا).
سنقوم بتشغيل Flash 10 الآن لكن قبل ذلك علينا أن نضيف الآتي
نقوم الآن بتنصيب ال flash plugin:
تعتمد فكرة تشغيل الفلاش في FreeBSD على nspluginwrapper، ماهية عمل هذا الأخير هي تمكين تشغيل ال plugins لمنصة في منصة أخرى، و كأنه Cygwin لكن خاص بالمتصفح.
الآن يمكننا إيجاد الإضافة flash على المسار التالي:
الآن قم بغلق المتصفح و نفذ الآتي من دون صلاحيات جذر:
مثال:
مشاكل تصادفك أثناء تشغيل ملفاتLinux:
مثال 01:
كما قلنا سابقا أن FreeBSD يقوم بتضمين الملفات الاساسية فقط في المسار usr/compat/linux/، لذا فإنه من الممكن أن تجد وحدات ناقصة تعتمد عليها برامج أخرى عند تشغيلها، كل ماعليك فعله هو البحث عن الملفات الناقصة و وضعها في المسار الصحيح تحت usr/compat/linux/، هنا عند محاولتي لتشغيل skype صادفت الرسالة التالية:
لاحظوا أني نقلت المجلدات المستخرجة إلى usr/compat/linux/، نقلها إلى غير مكانها مثلا إلى lib/ يسبب عدم عمل بعض البرامج لديك و ربما حتى خلل في النظام.
كرر هذه الخطوة مع كل ملف تجده ناقص :D.
مثال 02:
سبب هذه الرسالة هو عدم تعرف النظام إلى أصل الملفات أهي خاصة ب FreeBSD أم ب Linux، ﻷن الملفات التطبيقية الخاصة بالنظام لاتحمل معلومات كافية، GNU بدء يقوم بإضافة معلومات إلى هذه الملفات أثناء الترجمة.
لحل هذه المشكلة نقوم بوسم ملفات ال Linux حتى يتعرف عليها النظام كالآتي:
مصادر:
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
المصدر
معروف أن لكل نظام بنية خاصة لملفاته التطبيقية أو ما يعرف ب 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
كود:
كود:
/usr/compat/linux
يجب عدم الخلط ما بين الملفات الموجودة في المسار usr/compat/linux/lib/مثلا و الموجودة في المسارlib/، حتى لو وجدت بنفس الإسم إلا أن كل ملف يحمل معلومات خاصة بنظامه الأصلي.
تنصيب Linux emulation:
ال port الخاص بالمحاكاة نجده في:
كود:
/usr/ports/emulators/linux_base-f10
الآن نتوجه إلى المسار السابق و نقوم بتنصيب طبقة المحاكاة:
كود:
cd /usr/ports/emulators/linux_base-f10 make install clean
كود:
بعدها نقوم بالآتي حتى لا نضطر إلى إعادة تشغيل النظام:
كود:
/etc/rc.d/abi restart /etc/rc.d/sysctl restart
كود:
كود:
ee /etc/fstab linproc /usr/compat/linux/proc linprocfs rw 0 0 mount linproc
كود:
تشغيل 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 فقط.
كود:
cd /usr/ports/www/linux-f10-flashplugin10 make install clean
كود:
كود:
cd /usr/ports/www/nspluginwrapper make install clean
كود:
/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
كود:
مثال 01:
كما قلنا سابقا أن FreeBSD يقوم بتضمين الملفات الاساسية فقط في المسار usr/compat/linux/، لذا فإنه من الممكن أن تجد وحدات ناقصة تعتمد عليها برامج أخرى عند تشغيلها، كل ماعليك فعله هو البحث عن الملفات الناقصة و وضعها في المسار الصحيح تحت usr/compat/linux/، هنا عند محاولتي لتشغيل skype صادفت الرسالة التالية:
./
فل ما كان علي فعله هو الذهاب إلى موقع http://rpm.pbone.net و البحث عن الحزمة المسؤولة عن الوحدة libasound.so.2 بعدها قمت بتحميلها عندي، إستخرجت الملفات من الحزمة و و ضعتها في مكانها المناسب، بلغة سطر الأوامر:
كود:
skype: error while loading shared libraries: libasound.so.2: cannot open shared object file: No such file or directory
كود:
[LEFT][FONT=Arabic Transparent][SIZE=4]$[/SIZE][/FONT]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 [/LEFT]
كرر هذه الخطوة مع كل ملف تجده ناقص :D.
مثال 02:
كود:
skype: error while loading shared libraries: /usr/lib/libvorbisenc.so.2: ELF file OS ABI invalid
[CODE]brandelf -t Linux /usr/compat/linux/usr/lib/libvorbisenc.so.2[/CODE
مصادر:
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
المصدر
تعليق