جارى التحميل
  • تشغيل برامج 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”
    بعدها من سطر الأوامر و بصلاحيات جذر نفذ الآتي:

    هذا الأمر سيقوم بتشغيل الوحدة 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، تكون هذه البيئة المصغرة في المسار التالي:
    لو نرى ما بداخلها نجدها مشابهة لبيئة 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/ يسبب عدم عمل بعض البرامج لديك و ربما حتى خلل في النظام.
    كرر هذه الخطوة مع كل ملف تجده ناقص :D.
    مثال 02:
    skype: error while loading shared libraries: /usr/lib/libvorbisenc.so.2: ELF file OS ABI invalid
    سبب هذه الرسالة هو عدم تعرف النظام إلى أصل الملفات أهي خاصة ب FreeBSD أم ب Linux، ﻷن الملفات التطبيقية الخاصة بالنظام لاتحمل معلومات كافية، GNU بدء يقوم بإضافة معلومات إلى هذه الملفات أثناء الترجمة.
    لحل هذه المشكلة نقوم بوسم ملفات ال Linux حتى يتعرف عليها النظام كالآتي:
    This article was originally published in forum thread: تشغيل برامج Linux على FreeBSD started by SIFE View original post