Compatibilité Linux
De Diablotins.org.
| Lancer des programmes écrits pour Linux
|
| ||
| Cet article va vous permettre d'utiliser des logiciels écrits pour Linux, de
«déguiser votre diablotin en clown avec un chapeau rouge». |
Sommaire |
Installer
Ajoutez l'entrée suivante dans /etc/rc.conf:
linux_enable="YES"
Le noyau GENERIC de FreeBSD possède le module Linux.ko pré compilé. Vérifiez qu'il est chargé:
david:~$ kldstat -n linux Id Refs Address Size Name 8 1 0xc4973000 22000 linux.ko
Sinon:
kldload linux.ko
Il est possible de compiler la linux(4) dans le noyau directement, consultez les NOTES.
Ensuite installez un port qui va installer une distribution Linux.
Ces ports se situe dans /usr/ports/emulators/linux_base-*.
Consultez [1] emulators/linux_base_f10]] pour déterminer celui qui est le mieux adapté à votre usage et surtout celui qui est actuellement conseillé, voire supporté par l'équipe FreeBSD.
Aujourd'hui, en septembre 2008, ces ports sont :
- emulators/linux_base-fc4........Fedora core, actuellement conseillée pour les branches 5 et 6
- emulators/linux_base.............Red Hat 7.3/i386, non soutenue, non maintenue
- emulators/linux_base-8..........Red Hat 8/i386, précédente version conseillée
- emulators/linux_base-fc6........Fedora core, à partir de la branche 7
- emulators/linux_base-fc7........en test pour FreeBSD 7, abandonnée.
- emulators/linux_base-f7........retenue pour FreeBSD 7, obsolète.
- emulators/linux_base-f8........retenue pour FreeBSD 7, adoptée.
- emulators/linux_base-f10........retenue pour FreeBSD 8.1, adoptée.
- Toutes les autres : Debian (ne compile pas), suze, Gentoo; vérifiez qu'elle soient toujours maintenues.
Vous aurez ainsi installé une distribution Linux sur votre système, ou plutôt un environnement de chroot compatible.
La version du noyau que vous utilisez se trouve dans une variable système:
sysctl compat.linux.osrelease=2.6.16
Vous pouvez, selon la distribution que vous avez choisi, être amené à la changer.
Par exemple, sous FreeBSD 8.1, vous devez revenir à fedora-8:
pkg_delete -fi linux_base-f10\* echo "OVERRIDE_LINUX_BASE_PORT=f8" >> /etc/make.conf' echo "OVERRIDE_LINUX_NONBASE_PORTS=f8" >> /etc/make.conf' pkg_add r linux_base-f8'
Utiliser
Copiez via SSH, FTP, disquette, NFS etc. votre 'super_prog_de_la_mort' compatible Linux qui tourne en binaire ELF Linux.
Cette astuce ne fonctionne que pour ces derniers, pas pour les formats a.out.
Vous le lancez et là, crack boum uh:
$ ./super_prog_de_la_mort ELF binary type not known Abort<
D'où astuce dans l'astuce, genre poupée russe :
# brandelf -t Linux super_prog_de_la_mort
Bon, soit vous avez de la chance, ou vous saviez exactement ce que vous faisiez, soit votre boite FreeBSD vous insulte parce que vous ne disposez pas des bibliothèques nécessaires. Donc sur le Linux d'origine, entrez:
$ ldd super_prog_de_la_mort lib_ki_tue_grave.so.41 -> /usr/lib/lib_ki_tue_grave.so.41
donc il vous suffit maintenant de poser dans :
/compat/linux/
la ou les bibliothèques au même niveau que sur la boite Linux.
Attention, il ne faut pas assigner un ABI aux bibliothèques Linux mais seulement les programmes Linux. En effet, les bibliothèques Linux sont chargées par le linkeur dynamique Linux et celui-ci attend un type SVR4.
Voila, mais c'est mal.
Exemple
Vous avez sous la main un logiciel en version bêta, construit pour Linux, qui a vocation d'être multi-plateforme.
Pour cette raison, aucun mainteneur n'a encore travaillé sur un portage pour FreeBSD. Ce mainteneur, d'ailleurs, ce pourrait être vous.
Étant destiné à être disponible sur plusieurs système, ce logiciel est construit sur des bibliothèques multi-OS; par exemple, celles de la SDL.
Voyons notre logiciel:
chmod +x ~/BetaTest/MadSoft.v01 brandelf -t linux ~/BetaTest/MadSoftBeta.v01
Que demande-t-il:
ldd ~/BetaTest/MadSoftBeta.v01
MadSoftBeta.v01:
libSDL-1.2.so.0 => not found
libSDL_image-1.2.so.0 =>not found
libSDL_ttf-2.0.so.0 => not found
libc.so.6 => /lib/libc.so.6 (0x28119000)
libm.so.6 => /lib/libm.so.6 (0x28271000)
libpthread.so.0 => /lib/libpthread.so.0 (0x2829a000)
libdl.so.2 => /lib/libdl.so.2 (0x282b2000)
libncurses.so.5 => /lib/libncurses.so.5 (0x282b8000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x282d8000)
libz.so.1 => /lib/libz.so.1 (0x28362000)
/lib/ld-linux.so.2 (0x28051000)
libtinfo.so.5 => /lib/libtinfo.so.5 (0x28375000)
Ici, nous avons un système Linux déjà installé,
- voyez libc et cie -
mais les bibliothèques SDL sont manquantes.
Ne vous jetez pas sur le Web pour les télécharger !
Elles sont dans l'arbre des ports:
devel/linux-sdl12 graphics/linux-sdl_image graphics/linux-sdl_ttf
Si votre système est vraiment épuré, vous devrez sans doute apporter d'autres bibliothèques, comme celle-ci:
x11/linux-xorg-libs.
Voyez maintenant:
ldd MadSoftBeta.v01
MadSoftBeta.v01:
libSDL-1.2.so.0 => /usr/lib/libSDL-1.2.so.0 (0x28070000)
libSDL_image-1.2.so.0 => /usr/lib/libSDL_image-1.2.so.0 (0x280f7000)
libSDL_ttf-2.0.so.0 => /usr/lib/libSDL_ttf-2.0.so.0 (0x28113000)
libc.so.6 => /lib/libc.so.6 (0x28119000)
libm.so.6 => /lib/libm.so.6 (0x28271000)
libpthread.so.0 => /lib/libpthread.so.0 (0x2829a000)
libdl.so.2 => /lib/libdl.so.2 (0x282b2000)
libncurses.so.5 => /lib/libncurses.so.5 (0x282b8000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x282d8000)
libz.so.1 => /lib/libz.so.1 (0x28362000)
/lib/ld-linux.so.2 (0x28051000)
libtinfo.so.5 => /lib/libtinfo.so.5 (0x28375000)
Il ne vous reste plus qu'à l'exécuter:
~/BetaTest/MadSoftBeta.v01
Suivez cette conversation, qui illustre les méthodes employées dans cet article.
pour vous faire une idée de la solution trouvée et de la méthode de recherche.
Plus!
- Équivalences Linux/FreeBSD
- Linuxator expliqué aux utilisateurs(en)
- Emprisonner une Debian par bapt
- Emprisonner CentOS(en)
« C'est l'histoire d'un gars qui veut la machine la plus puissante du
monde sous Windows 95 en émulation sous Wine qui tourne sur une station
FreeBSD avec bibliotheque de compatibilité Linux. »
-+- ST in Guide du linuxien pervers : "A quoi sert Unix ?" -+-

