MFen 1.136 --> r49367
This commit is contained in:
parent
ba7bffa519
commit
32515d9472
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=50172
1 changed files with 216 additions and 344 deletions
|
@ -4,10 +4,10 @@
|
|||
The FreeBSD French Documentation Project
|
||||
|
||||
$FreeBSD$
|
||||
Original revision: 1.136
|
||||
Original revision: 49367
|
||||
-->
|
||||
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="linuxemu">
|
||||
<info><title>Compatibilité binaire avec Linux</title>
|
||||
<info><title>Compatibilité binaire avec &linux;</title>
|
||||
<authorgroup>
|
||||
<author><personname><firstname>Jim</firstname><surname>Mock</surname></personname><contrib>Restructuré et en partie mis à jour
|
||||
par </contrib></author>
|
||||
|
@ -30,67 +30,46 @@
|
|||
<secondary>Linux</secondary>
|
||||
</indexterm>
|
||||
|
||||
<para>&os; fournit une compatibilité binaire avec plusieurs autres
|
||||
systèmes d'exploitation du type &unix;, y compris Linux.
|
||||
A ce point, vous devez vous demander pourquoi exactement
|
||||
&os; a besoin d'être capable d'exécuter des binaires Linux?
|
||||
La réponse à cette question est très simple. De
|
||||
nombreuses entreprises et de nombreux développeurs ne
|
||||
développent que pour Linux, puisque que c'est la dernière
|
||||
chose “à la mode” dans le monde de l'informatique.
|
||||
Cela ne laisse aux utilisateurs de &os; que la possibilité
|
||||
de réclamer auprès des ces mêmes entreprises
|
||||
et développeurs des versions native pour &os; de leurs
|
||||
applications. Le problème est, que la plupart de ces
|
||||
entreprises ne réalisent pas vraiment combien de personnes
|
||||
utiliseraient leur produit si il y aurait une version pour &os;
|
||||
également, et la plupart continuent de développer uniquement
|
||||
pour Linux. Donc que doit faire un utilisateur de &os;?
|
||||
C'est là que la compatibilité binaire avec Linux entre en
|
||||
scène.</para>
|
||||
|
||||
<para>En bref, la compatibilité permet aux utilisateurs de
|
||||
&os; d'exécuter environ 90% des applications Linux
|
||||
sans aucune modification. Cela inclus des applications
|
||||
comme <application>&staroffice;</application>,
|
||||
la version Linux de <application>&netscape;</application>,
|
||||
<application>&adobe; &acrobat;</application>,
|
||||
<application>&realplayer;</application>,
|
||||
<application>VMware</application>,
|
||||
<application>&oracle;</application>,
|
||||
<application>&wordperfect;</application>, <application>Doom</application>,
|
||||
<application>Quake</application>, et plus. On rapporte
|
||||
<para>&os; fournit une compatibilité binaire avec &linux;,
|
||||
permettant aux utilisateurs d'installer et d'exécuter la plupart
|
||||
des applications &linux; sur un système &os; sans avoir à modifier
|
||||
ces applications. On rapporte
|
||||
également que dans certaines situations, les binaires Linux
|
||||
sont plus performants sous &os; que sous Linux.</para>
|
||||
sont plus performants sous &os; que sous &linux;,.</para>
|
||||
|
||||
<para>Il existe cependant certaines caractéristiques
|
||||
spécifiques à Linux qui ne sont pas
|
||||
supportées sous &os;. Les binaires Linux ne
|
||||
spécifiques à &linux;, qui ne sont pas
|
||||
supportées sous &os;. Par exemple, des binaires &linux; ne
|
||||
fonctionneront pas sous &os; s'ils utilisent massivement
|
||||
des appels
|
||||
&i386; spécifiques, comme activation du mode virtuel
|
||||
8086.</para>
|
||||
|
||||
<note>
|
||||
<para>Le support de la compatibilité &linux; pour les binaires
|
||||
64bits a été ajouté avec &os; 10.3.</para>
|
||||
</note>
|
||||
|
||||
<para>Après la lecture de ce chapitre, vous connaîtrez:</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>Comment activer la compatibilité binaire avec
|
||||
Linux sur votre système.</para>
|
||||
&linux; sur un système &os;.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Comment installer des bibliothèques partagées Linux
|
||||
<para>Comment installer des bibliothèques partagées &linux;
|
||||
supplémentaires.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Comment installer des application Linux sur votre
|
||||
<para>Comment installer des application &linux; sur un
|
||||
système &os;.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Les détails de l'implémentation de la
|
||||
compatibilité Linux sous &os;.</para>
|
||||
compatibilité &linux; sous &os;.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
|
@ -98,280 +77,208 @@
|
|||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>Savoir comment installer des logiciels tiers
|
||||
(<xref linkend="ports"/>).</para>
|
||||
<para>Savoir comment installer des <link
|
||||
linkend="ports">logiciels tiers</link>.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="linuxemu-lbc-install">
|
||||
<title>Installation</title>
|
||||
<title>Configurer la compatibilité binaire avec &linux;</title>
|
||||
|
||||
<indexterm><primary>KLD (kernel loadable object)</primary></indexterm>
|
||||
<indexterm><primary>Catalogue des logiciels portés</primary></indexterm>
|
||||
|
||||
<para>La compatibilité binaire avec Linux n'est pas
|
||||
activée par défaut. La manière la plus simple
|
||||
pour activer cette fonctionnalité est de charger le KLD
|
||||
<literal>linux</literal> (<quote>Kernel LoaDable
|
||||
object</quote>—objet chargeable par le noyau, ce que l'on
|
||||
nomme couramment un module). Vous pouvez charger ce module
|
||||
en tapant ce qui suit sous l'utilisateur
|
||||
<systemitem class="username">root</systemitem>:</para>
|
||||
<para>Par défaut, les bibliothèques &linux; ne sont pas installées
|
||||
et la compatibilité binaire avec Linux n'est pas activée. Les
|
||||
bibliothèques &linux; peuvent être installées soit manuellement
|
||||
soit à partir du catalogue des logiciels portés.</para>
|
||||
|
||||
<para>Avant de tenter de compiler un logiciel, charger le module
|
||||
du noyau &linux;, sinon la compilation risque d'échouer:</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>kldload linux</userinput></screen>
|
||||
|
||||
<para>Si vous désirez que la compatibilité Linux soit
|
||||
toujours activée, alors vous devrez ajouter la ligne
|
||||
suivante au fichier <filename>/etc/rc.conf</filename>:</para>
|
||||
<para>Pour une compatibilité en 64bits:</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>kldload linux64</userinput></screen>
|
||||
|
||||
<para>Pour vérifier que le module est bien chargé:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>kldstat</userinput>
|
||||
Id Refs Address Size Name
|
||||
1 2 0xc0100000 16bdb8 kernel
|
||||
7 1 0xc24db000 d000 linux.ko</screen>
|
||||
|
||||
<para>Le logiciel précompilé
|
||||
<package>emulators/linux_base-c6</package> ou la version
|
||||
compilée à partir du catalogue des logiciels portés est la
|
||||
méthode la plus simple pour installer l'ensemble des
|
||||
bibliothèques et binaires de base &linux; sur un système
|
||||
&os;.</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>printf "compat.linux.osrelease=2.6.18\n" >> /etc/sysctl.conf</userinput>
|
||||
&prompt.root; <userinput>sysctl compat.linux.osrelease=2.6.18</userinput>
|
||||
&prompt.root; <userinput>pkg install emulators/linux_base-c6</userinput></screen>
|
||||
|
||||
<para>Pour activer au démarrage la compatibilité &linux;, ajouter
|
||||
ligne suivante au fichier
|
||||
<filename>/etc/rc.conf</filename>:</para>
|
||||
|
||||
<programlisting>linux_enable="YES"</programlisting>
|
||||
|
||||
<para>La commande &man.kldstat.8; peut être utilisée
|
||||
pour vérifier que le KLD est chargé:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>kldstat</userinput>
|
||||
Id Refs Address Size Name
|
||||
1 2 0xc0100000 16bdb8 kernel
|
||||
7 1 0xc24db000 d000 linux.ko</screen>
|
||||
<para>Sur les machines 64bits, <filename>/etc/rc.d/abi</filename>
|
||||
chargera automatiquement le module pour l'émulation
|
||||
64bits.</para>
|
||||
|
||||
<indexterm>
|
||||
<primary>options du noyau</primary>
|
||||
<secondary>LINUX</secondary>
|
||||
<secondary>COMPAT_LINUX</secondary>
|
||||
</indexterm>
|
||||
|
||||
<para>Si pour quelques raisons vous ne voulez ou pouvez charger le
|
||||
KLD, alors vous pouvez lier statiquement la compatibilité
|
||||
binaire Linux dans votre noyau en ajoutant <literal>options
|
||||
COMPAT_LINUX</literal> à votre fichier de configuration du noyau.
|
||||
Puis installez votre noyau comme décrit dans la
|
||||
<para>Les utilisateurs préférant lier statiquement la
|
||||
compatibilité binaire &linux; dans leur noyau devront ajouter
|
||||
<literal>options COMPAT_LINUX</literal> à leur fichier de
|
||||
configuration du noyau. Puis compiler et installer le nouveau
|
||||
noyau comme décrit dans la
|
||||
<xref linkend="kernelconfig"/>.</para>
|
||||
|
||||
<sect2>
|
||||
<title>Installer les bibliothèques Linux</title>
|
||||
<sect2 xml:id="linuxemu-libs-manually">
|
||||
<title>Installer des bibliothèques supplémentaires à la main</title>
|
||||
|
||||
<indexterm>
|
||||
<primary>Linux</primary>
|
||||
<secondary>installer les bibliothèques Linux</secondary>
|
||||
<primary>bibliothèques partagées</primary>
|
||||
</indexterm>
|
||||
|
||||
<para>Cela peut être fait de deux manières, soit
|
||||
en utilisant le logiciel porté
|
||||
<link linkend="linuxemu-libs-port">linux_base</link>, soit
|
||||
en les installant <link linkend="linuxemu-libs-manually">à la main</link>.</para>
|
||||
<para>Si une application &linux; se plaint de l'absence d'une
|
||||
bibliothèque partagée après avoir configuré la compatibilité
|
||||
binaire &linux;, déterminez quelle est la bibliothèque
|
||||
partagée nécessaire au binaire &linux; et installez-la à la
|
||||
main.</para>
|
||||
|
||||
<sect3 xml:id="linuxemu-libs-port">
|
||||
<title>Installation à l'aide du logiciel porté
|
||||
linux_base</title>
|
||||
<indexterm><primary>catalogue des logiciels
|
||||
portés</primary></indexterm>
|
||||
<para>A partir d'un système &linux;, la commande
|
||||
<command>ldd</command> peut être utilisée pour déterminer
|
||||
quelles sont les bibliothèques partagées dont l'application a
|
||||
besoin. Par exemple, pour contrôler quelles bibliothèques
|
||||
partagées sont nécessaires à <command>linuxdoom</command>,
|
||||
exécuter cette commande à partir d'un système &linux; où est
|
||||
installé <application>Doom</application>:</para>
|
||||
|
||||
<para>C'est de loin la méthode la plus simple pour
|
||||
installer les bibliothèques. La procédure est
|
||||
juste identique à l'installation d'un autre logiciel
|
||||
porté à partir du
|
||||
<link xlink:href="file://localhost/usr/ports/">catalogue
|
||||
des logiciels portés</link>.
|
||||
Faites ce qui suit:</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>cd /usr/ports/emulators/linux_base-fc4</userinput>
|
||||
&prompt.root; <userinput>make install distclean</userinput></screen>
|
||||
|
||||
<para>La compatibilité binaire Linux devrait maintenant
|
||||
fonctionner. Certains programmes pourront se plaindre de
|
||||
versions mineures incorrectes de certaines bibliothèques
|
||||
systèmes. Cela semble, en général, ne pas
|
||||
vraiment être un problème.</para>
|
||||
|
||||
<note><para>Il peut y avoir de multiples versions disponibles
|
||||
du logiciel porté <package>emulators/linux_base</package>, correspondant
|
||||
à différentes distributions et versions de Linux.
|
||||
Vous devez installez la version la plus proche de ce que
|
||||
nécessite les applications Linux que vous désirez
|
||||
installer.</para></note>
|
||||
</sect3>
|
||||
|
||||
<sect3 xml:id="linuxemu-libs-manually">
|
||||
<title>Installer les bibliothèques à la main</title>
|
||||
|
||||
<para>Si vous n'avez pas le catalogue des logiciels
|
||||
portés installé, vous pouvez à la
|
||||
place installer les bibliothèques à la main.
|
||||
Il vous faudra les bibliothèques partagées
|
||||
Linux dont à besoin le programme et l'éditeur
|
||||
de lien dynamiques. Vous devrez également
|
||||
créer un répertoire racine
|
||||
“masquant” (“shadow root”),
|
||||
<filename>/compat/linux</filename>, pour les
|
||||
bibliothèques Linux sur votre système &os;.
|
||||
Toute bibliothèque partagée ouverte par les
|
||||
programmes Linux exécutés sous &os; iront d'abord voir
|
||||
dans cette arborescence. Ainsi, si un programme Linux
|
||||
charge, par exemple, <filename>/lib/libc.so</filename>,
|
||||
&os; essayera d'abord d'ouvrir
|
||||
<filename>/compat/linux/lib/libc.so</filename>, puis si
|
||||
cette bibliothèque n'existe pas,
|
||||
<filename>/lib/libc.so</filename>. Les bibliothèques
|
||||
partagées doivent donc être installées
|
||||
sous l'arborescence <filename>/compat/linux/lib</filename>
|
||||
plutôt que sous les chemins d'accès
|
||||
mentionnés par la commande Linux
|
||||
<command>ld.so</command>.</para>
|
||||
|
||||
<para>Généralement, vous ne devrez cherchez à
|
||||
savoir de quelles bibliothèques partagées
|
||||
dépendent les binaires Linux que les premières
|
||||
fois que vous installerez des programmes Linux sur votre
|
||||
système &os;. Au bout d'un moment, vous disposerez
|
||||
d'un jeu suffisant de bibliothèques partagées
|
||||
Linux sur votre système pour être en mesure
|
||||
d'exécuter les binaires Linux nouvellement
|
||||
importés sans effort supplémentaire.</para>
|
||||
</sect3>
|
||||
|
||||
<sect3>
|
||||
<title>Comment installer des bibliothèques
|
||||
partagées supplémentaires</title>
|
||||
<indexterm><primary>bibliothèques
|
||||
partagées</primary></indexterm>
|
||||
|
||||
<para>Que faire si vous avez installé le logiciel
|
||||
porté <filename>linux_base</filename> et que votre
|
||||
application se plaint toujours qu'il lui manque des
|
||||
bibliothèques partagées?
|
||||
Comment savoir quelles bibliothèques partagées
|
||||
ont besoin les binaires Linux, et où se les
|
||||
procurer? Il a habituellement deux possibilités
|
||||
(pour suivre les instructions ci-dessous, vous devrez
|
||||
être en session sous le compte super-utilisateur
|
||||
<systemitem class="username">root</systemitem>).</para>
|
||||
|
||||
<para>Si vous avez accès à un système
|
||||
Linux, déterminez de quelles bibliothèques
|
||||
partagées l'application a besoin, et copiez-les sur
|
||||
votre système &os;. Soit l'exemple suivant:</para>
|
||||
|
||||
<informalexample>
|
||||
<para>Supposons que vous veniez de télécharger
|
||||
le binaire Linux de <application>Doom</application>,
|
||||
et que vous l'avez installé sur un système
|
||||
Linux. Vous pouvez alors vérifier de quelles
|
||||
bibliothèques partagées il a besoin pour
|
||||
fonctionner avec la commande
|
||||
<command>ldd linuxdoom</command>:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>ldd linuxdoom</userinput>
|
||||
<screen>&prompt.user; <userinput>ldd linuxdoom</userinput>
|
||||
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</screen>
|
||||
|
||||
<indexterm><primary>liens symboliques</primary></indexterm>
|
||||
<para>Vous devrez récupérer tous les
|
||||
fichiers mentionnés dans la dernière colonne,
|
||||
et les installer sous <filename>/compat/linux</filename>,
|
||||
en utilisant les noms de la première colonne comme
|
||||
liens symboliques qui pointent dessus. Cela signifie
|
||||
que vous aurez éventuellement les fichiers suivants
|
||||
sur votre système &os;:</para>
|
||||
<indexterm>
|
||||
<primary>liens symboliques</primary>
|
||||
</indexterm>
|
||||
|
||||
<screen>/compat/linux/usr/X11/lib/libXt.so.3.1.0
|
||||
<para>Ensuite, copier tous les fichiers mentionnés dans la
|
||||
dernière colonne, du système sous &linux; vers
|
||||
<filename>/compat/linux</filename> sur le système &os;. Une
|
||||
fois copiés, créer les liens symboliques vers les noms de
|
||||
fichiers donnés dans la première colonne. Cet exemple donnera
|
||||
lieu aux fichiers suivants sur le système &os;:</para>
|
||||
|
||||
<screen>/compat/linux/usr/X11/lib/libXt.so.3.1.0
|
||||
/compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0
|
||||
/compat/linux/usr/X11/lib/libX11.so.3.1.0
|
||||
/compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0
|
||||
/compat/linux/lib/libc.so.4.6.29
|
||||
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29</screen>
|
||||
|
||||
<blockquote>
|
||||
<note>
|
||||
<para>Remarquez que si vous avez déjà
|
||||
une bibliothèque partagée de même
|
||||
numéro de version majeure que celle indiquée
|
||||
par la première colonne du résultat
|
||||
de la commande <command>ldd</command>, il est inutile
|
||||
de copier le fichier donné par la dernière
|
||||
colonne sur votre système, celui que vous
|
||||
avez déjà devrait suffire.
|
||||
Il est cependant recommandé de recopier
|
||||
malgré tout la bibliothèque partagée
|
||||
si c'est une version récente.
|
||||
Vous pouvez supprimer l'ancienne version, du moment
|
||||
que le lien symbolique pointe sur la nouvelle. Par
|
||||
exemple, si vous avez les bibliothèques suivantes
|
||||
sur votre système:</para>
|
||||
<para>Si une bibliothèque &linux; partagée existe avec le même
|
||||
numéro de version majeure que celle indiquée par la première
|
||||
colonne du résultat de la commande <command>ldd</command>, il
|
||||
est inutile de la copier vers le nom de fichier donné par la
|
||||
dernière colonne, la bibliothèque déjà existante devrait
|
||||
fonctionner. Il est cependant recommandé de copier malgré
|
||||
tout la bibliothèque partagée si c'est une version récente.
|
||||
L'ancienne version peut être supprimée, du moment que le lien
|
||||
symbolique pointe sur la nouvelle.</para>
|
||||
|
||||
<screen>/compat/linux/lib/libc.so.4.6.27
|
||||
<para>Par exemple, les bibliothèques suivantes existent déjà sur
|
||||
le système &os;:</para>
|
||||
|
||||
<screen>/compat/linux/lib/libc.so.4.6.27
|
||||
/compat/linux/lib/libc.so.4 -> libc.so.4.6.27</screen>
|
||||
|
||||
<para>et que vous avez un nouveau binaire qui
|
||||
d'après le résultat de la commande
|
||||
<command>ldd</command> semble avoir besoin d'une
|
||||
version plus récente:</para>
|
||||
<para>et <command>ldd</command> indique qu'un binaire a besoin
|
||||
d'une version plus récente:</para>
|
||||
|
||||
<screen>libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29</screen>
|
||||
<para>Si vous n'avez qu'une ou deux versions de retard
|
||||
sur le dernier indice, alors ne vous souciez pas
|
||||
d'installer la version
|
||||
<filename>/lib/libc.so.4.6.29</filename> plus
|
||||
récente, parce que le programme devrait fonctionner
|
||||
sans problème avec une version
|
||||
légèrement antérieure.
|
||||
Vous pouvez néanmoins décider de remplacer
|
||||
<filename>libc.so</filename>, ce qui devrait vous
|
||||
donner quelque chose comme:</para>
|
||||
<screen>libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29</screen>
|
||||
|
||||
<screen>/compat/linux/lib/libc.so.4.6.29
|
||||
<para>Etant donné que la bibliothèque existante n'a qu'une ou
|
||||
deux versions de retard sur le dernier digit, le programme
|
||||
devrait fonctionner avec la version légèrement plus ancienne.
|
||||
Il est, néanmoins, plus sûr de remplacer la
|
||||
<filename>libc.so</filename> existante avec la version plus
|
||||
récente:</para>
|
||||
|
||||
<screen>/compat/linux/lib/libc.so.4.6.29
|
||||
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29</screen>
|
||||
</note>
|
||||
</blockquote>
|
||||
|
||||
<blockquote>
|
||||
<note>
|
||||
<para>Le mécanisme de lien symbolique n'est
|
||||
nécessaire que pour les binaires Linux.
|
||||
L'éditeur de liens dynamiques de &os;
|
||||
se charge lui-même de trouver les numéros
|
||||
de versions majeures adéquats et vous
|
||||
n'avez pas à vous en préoccuper.</para>
|
||||
</note>
|
||||
</blockquote>
|
||||
</informalexample>
|
||||
</sect3>
|
||||
<para>Généralement, vous ne devrez cherchez à savoir de quelles
|
||||
bibliothèques partagées dépendent les binaires &linux; que les
|
||||
premières fois que vous installerez des programmes &linux; sur
|
||||
le système &os;. Au bout d'un moment, il y aura un ensemble
|
||||
suffisant de bibliothèques partagées &linux; sur le système
|
||||
pour être en mesure d'exécuter les binaires &linux;
|
||||
nouvellement importés sans effort supplémentaire.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>Installer des binaires Linux ELF</title>
|
||||
<title>Installer des binaires &linux; <acronym>ELF</acronym></title>
|
||||
<indexterm>
|
||||
<primary>Linux</primary>
|
||||
<secondary>binaires ELF</secondary>
|
||||
</indexterm>
|
||||
|
||||
<para>Une étape supplémentaire est parfois
|
||||
nécessaire pour les binaires ELF: le
|
||||
“marquage”. Si vous tentez d'exécuter un
|
||||
binaire ELF non marqué, vous obtiendrez un message
|
||||
d'erreur ressemblant à ce qui suit:</para>
|
||||
nécessaire pour les binaires <acronym>ELF</acronym>. Quand
|
||||
un binaire <acronym>ELF</acronym> non marqué est exécuté, une
|
||||
erreur sera générée:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>./mon-binaire-elf-linux</userinput>
|
||||
ELF binary type not known
|
||||
Abort</screen>
|
||||
|
||||
<para>Pour que le noyau &os; puisse distinguer un binaire ELF
|
||||
&os; d'un binaire Linux, vous devez employer l'utilitaire
|
||||
&man.brandelf.1;:</para>
|
||||
<para>Pour que le noyau &os; puisse distinguer un binaire
|
||||
<acronym>ELF</acronym> &os; d'un binaire &linux;, vous devez
|
||||
employer l'utilitaire &man.brandelf.1;:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>brandelf -t Linux mon-binaire-elf-linux</userinput></screen>
|
||||
|
||||
<indexterm><primary>outils GNU</primary></indexterm>
|
||||
<para>Les outils GNU incorporent désormais automatiquement
|
||||
les marques nécessaires dans les binaires ELF, vous
|
||||
aurez donc de moins en moins besoin de passer par cette
|
||||
étape à l'avenir.</para>
|
||||
les marques nécessaires dans les binaires ELF,
|
||||
cette étape n'est généralement pas nécessaire.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>Installer une application &linux; basée sur
|
||||
<acronym>RPM</acronym></title>
|
||||
|
||||
<para>Pour installer une application &linux; basée sur
|
||||
<acronym>RPM</acronym>, installer en premier le logiciel
|
||||
précompilé ou porté <package>archivers/rpm4</package>. Une
|
||||
fois installé, <systemitem class="username">root</systemitem>
|
||||
peut utiliser la commande suivante pour installer un
|
||||
<filename>.rpm</filename>:</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>cd /compat/linux</userinput>
|
||||
&prompt.root; <userinput>rpm2cpio < /path/to/linux.archive.rpm | cpio -id</userinput></screen>
|
||||
|
||||
<para>Si nécessaire, utiliser <command>brandelf</command> sur
|
||||
les binaires <acronym>ELF</acronym> installés. Il faut noter
|
||||
que cela empêchera une desinstallation propre.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>Configurer le résolveur de noms de domaines</title>
|
||||
|
||||
<para>Si le DNS ne fonctionne pas, ou si vous avez les
|
||||
messages:</para>
|
||||
<para>Si le <acronym>DNS</acronym> ne fonctionne pas, ou si cette
|
||||
erreur apparaît::</para>
|
||||
|
||||
<screen>resolv+: "bind" is an invalid keyword resolv+:
|
||||
"hosts" is an invalid keyword</screen>
|
||||
|
@ -383,19 +290,21 @@ Abort</screen>
|
|||
<programlisting>order hosts, bind
|
||||
multi on</programlisting>
|
||||
|
||||
<para>Où l'ordre ci-dessus spécifie qu'il faut tout
|
||||
<para>Cela indique qu'il faut tout
|
||||
d'abord regarder dans le fichier <filename>/etc/hosts</filename>
|
||||
puis interroger le DNS. Quand le fichier
|
||||
puis interroger le <acronym>DNS</acronym>. Quand le fichier
|
||||
<filename>/compat/linux/etc/host.conf</filename> n'existe pas,
|
||||
les applications Linux trouvent le fichier
|
||||
<filename>/etc/host.conf</filename> de &os; et se plaignent de
|
||||
les applications &linux; trouvent le fichier
|
||||
<filename>/etc/host.conf</filename> et se plaignent de
|
||||
sa syntaxe &os; incompatible. Supprimez
|
||||
<literal>bind</literal> si vous n'avez pas configuré de
|
||||
serveur de noms avec le fichier
|
||||
<literal>bind</literal> si un serveur de noms n'est pas configuré
|
||||
avec le fichier
|
||||
<filename>/etc/resolv.conf</filename>.</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<?ignore
|
||||
|
||||
<sect1 xml:id="linuxemu-mathematica">
|
||||
<info><title>Installer &mathematica;</title>
|
||||
<authorgroup>
|
||||
|
@ -3693,34 +3602,26 @@ options SHMMAXPGS=393216
|
|||
</sect3>
|
||||
</sect2>
|
||||
</sect1>
|
||||
?>
|
||||
|
||||
<sect1 xml:id="linuxemu-advanced">
|
||||
<title>Sujets avancés</title>
|
||||
|
||||
<para>Si vous êtes curieux de savoir comment la
|
||||
compatibilité binaire avec Linux fonctionne, cette
|
||||
section est faite pour vous. La plupart de ce qui suit est
|
||||
principalement basé sur un courrier électronique
|
||||
<para>Cette section décrit comment la
|
||||
compatibilité binaire avec &linux; fonctionne, et est basée
|
||||
sur un courrier électronique
|
||||
de Terry Lambert <email>tlambert@primenet.com</email>
|
||||
envoyé à la &a.chat; (Message ID:
|
||||
<literal><199906020108.SAA07001@usr09.primenet.com></literal>).</para>
|
||||
|
||||
<sect2>
|
||||
<title>Comme ça marche?</title>
|
||||
|
||||
<indexterm><primary>chargeur de classe d'exécution</primary></indexterm>
|
||||
<indexterm><primary>chargeur de classe
|
||||
d'exécution</primary></indexterm>
|
||||
|
||||
<para>&os; possède une abstraction appelée
|
||||
“chargeur de classe d'exécution”. C'est
|
||||
une portion de l'appel système &man.execve.2;.</para>
|
||||
|
||||
<para>Ce qui se passe est que &os; dispose d'une liste de
|
||||
chargeurs, à la place d'un simple chargeur avec retour
|
||||
(“fallback”) vers le chargeur
|
||||
<literal>#!</literal> pour exécuter n'importe quel
|
||||
interpréteur de commandes ou procédure.</para>
|
||||
|
||||
<para>Historiquement, l'unique chargeur sur les plate-formes
|
||||
<para>Historiquement, le chargeur
|
||||
&unix; examinait le nombre magique (généralement
|
||||
les 4 ou 8 premiers octets du fichier) pour voir si
|
||||
c'était un binaire connu par le système, et si
|
||||
|
@ -3730,46 +3631,41 @@ options SHMMAXPGS=393216
|
|||
système, l'appel &man.execve.2; retournait un
|
||||
échec, et l'interpréteur de commandes tentait de
|
||||
l'exécuter comme une commande
|
||||
d'interpréteur.</para>
|
||||
|
||||
<para>Cette hypothèse est celle par défaut quelque
|
||||
soit l'interpréteur de commandes actuel.</para>
|
||||
d'interpréteur. Cette hypothèse était celle par défaut
|
||||
<quote>quelque soit l'interpréteur de commandes
|
||||
actuel</quote>.</para>
|
||||
|
||||
<para>Plus tard, une modification a été faite sur
|
||||
&man.sh.1; pour examiner les deux premiers caractères,
|
||||
et s'ils étaient <literal>:\n</literal>, alors elle
|
||||
invoquait l'interpréteur de commandes &man.csh.1;
|
||||
à la place (nous pensons que l'entreprise SCO fut la
|
||||
première à faire cette modification).</para>
|
||||
à la place.</para>
|
||||
|
||||
<para>Ce que fait maintenant &os; est de parcourir une liste de
|
||||
chargeurs, avec un chargeur <literal>#!</literal>
|
||||
générique qui reconnaît les noms des
|
||||
interpréteurs qui se trouvent après le
|
||||
caractère espace suivant, puis avec un retour possible
|
||||
vers <filename>/bin/sh</filename>.</para>
|
||||
<indexterm><primary>ELF</primary></indexterm>
|
||||
<para>&os; possède désormais une liste de chargeurs, avec un
|
||||
chargeur par défaut, <literal>#!</literal>, pour exécuter les
|
||||
interpréteurs ou les procédures de commandes.</para>
|
||||
|
||||
<para>Pour le support de l'ABI Linux, &os; voit le nombre
|
||||
magique comme un binaire ELF (il ne fait pas la
|
||||
différence à ce niveau entre &os;, &solaris;,
|
||||
Linux, ou tout autre système d'exploitation qui dispose
|
||||
d'un type d'image ELF).</para>
|
||||
<indexterm><primary>Solaris</primary></indexterm>
|
||||
<indexterm>
|
||||
<primary>ELF</primary>
|
||||
</indexterm>
|
||||
|
||||
<para>Le chargeur ELF recherche une <emphasis>marque</emphasis>
|
||||
spécifique, qui se trouve dans une section de commentaire
|
||||
<indexterm>
|
||||
<primary>Solaris</primary>
|
||||
</indexterm>
|
||||
|
||||
<para>Pour le support de l'<acronym>ABI</acronym> &linux;, &os;
|
||||
voit le nombre magique comme un binaire ELF. Le chargeur ELF
|
||||
recherche une <emphasis>marque</emphasis>
|
||||
spécifique, qui se trouve dans une section de commentaires
|
||||
dans l'image ELF, et qui n'est pas présente dans les
|
||||
binaires SVR4/&solaris; ELF.</para>
|
||||
|
||||
<para>Pour que les binaires Linux puissent fonctionner, ils
|
||||
<para>Pour que les binaires &linux; puissent fonctionner, ils
|
||||
doivent être <emphasis>marqués</emphasis> sous le
|
||||
type <literal>Linux</literal> avec &man.brandelf.1;:</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>brandelf -t Linux file</userinput></screen>
|
||||
|
||||
<para>Quand cela est fait, le chargeur ELF verra le marquage
|
||||
<literal>Linux</literal> sur le fichier.</para>
|
||||
<indexterm>
|
||||
<primary>ELF</primary>
|
||||
<secondary>marquage</secondary>
|
||||
|
@ -3778,7 +3674,7 @@ options SHMMAXPGS=393216
|
|||
<para>Lorsque le chargeur ELF voit le marquage
|
||||
<literal>Linux</literal>, le chargeur remplace un pointeur
|
||||
dans la structure <literal>proc</literal>. Tous les appels
|
||||
système sont indéxés par
|
||||
système sont indexés par
|
||||
l'intermédiaire de ce pointeur (dans un système
|
||||
&unix; traditionnel, cela serait la structure
|
||||
<literal>sysent[]</literal>, contenant les appels
|
||||
|
@ -3787,9 +3683,9 @@ options SHMMAXPGS=393216
|
|||
(“trap”) pour le signal de code
|
||||
“trampoline”, et plusieurs autres corrections
|
||||
(mineures) qui sont gérées par le noyau
|
||||
Linux.</para>
|
||||
&linux;.</para>
|
||||
|
||||
<para>Le vecteur d'appel système Linux contient, entre
|
||||
<para>Le vecteur d'appel système &linux; contient, entre
|
||||
autres, une liste des entrées
|
||||
<literal>sysent[]</literal> dont les adresses résident
|
||||
dans le noyau.</para>
|
||||
|
@ -3798,76 +3694,52 @@ options SHMMAXPGS=393216
|
|||
binaire Linux, le code “trap”
|
||||
déréférence de la structure
|
||||
<literal>proc</literal> le pointeur de la fonction de l'appel
|
||||
système, et utilise les points d'entrée Linux,
|
||||
système, et utilise les points d'entrée &linux;,
|
||||
et non pas &os;, de d'appel système.</para>
|
||||
|
||||
<para>De plus, le mode Linux redéfinit dynamiquement
|
||||
l'origine des requêtes; c'est, en effet, ce qu'effectue
|
||||
l'option <option>union</option> (<emphasis>pas</emphasis> le
|
||||
type de système de fichiers
|
||||
<literal>unionfs</literal>!) de montage des systèmes de
|
||||
<para>Le mode &linux; <emphasis>redéfinit dynamiquement</emphasis>
|
||||
l'origine des requêtes. C'est, en effet, équivalent à
|
||||
l'option <option>union</option> de montage des systèmes de
|
||||
fichiers. Tout d'abord, une tentative est faite pour
|
||||
rechercher le fichier dans le répertoire <filename>/compat/linux/chemin-origine</filename>,
|
||||
<emphasis>puis</emphasis> uniquement si cela échoue, la
|
||||
rechercher le fichier dans le répertoire <filename>/compat/linux/<replaceable>chemin-origine</replaceable></filename>.
|
||||
Si cela échoue, la
|
||||
recherche est effectuée dans le répertoire
|
||||
<filename>/chemin-origine</filename>.
|
||||
<filename>/<replaceable>chemin-origine</replaceable></filename>.
|
||||
Cela permet de s'assurer que les binaires nécessitant
|
||||
d'autres binaires puissent s'exécuter (par exemple,
|
||||
l'ensemble des outils Linux peuvent tourner sous l'ABI Linux).
|
||||
Cela signifie également que les binaires Linux peuvent
|
||||
d'autres binaires puissent s'exécuter. Par exemple,
|
||||
l'ensemble des outils &linux; peuvent tourner sous l'ABI &linux;.
|
||||
Cela signifie également que les binaires &linux; peuvent
|
||||
charger et exécuter les binaires &os;, s'il n'y a pas
|
||||
de binaires Linux correspondant présents, et vous
|
||||
de binaires &linux; correspondant présents, et vous
|
||||
pourriez placer une commande &man.uname.1; dans l'arborescence
|
||||
<filename>/compat/linux</filename> pour vous
|
||||
assurer que les binaires Linux ne puissent pas dire qu'ils ne
|
||||
tournent pas sous Linux.</para>
|
||||
assurer que les binaires &linux; ne puissent pas dire qu'ils ne
|
||||
tournent pas sous &linux;.</para>
|
||||
|
||||
<para>En effet, il y a un noyau Linux dans le noyau &os;; les
|
||||
<para>En effet, il y a un noyau &linux; dans le noyau &os;. Les
|
||||
diverses fonctions sous-jacentes qui implémentent tous
|
||||
les services fournis par le noyau sont identiques entre les
|
||||
deux tables d'entrées des appels systèmes &os;
|
||||
et Linux: les opérations sur les systèmes de
|
||||
et &linux;: les opérations sur les systèmes de
|
||||
fichiers, les opérations sur la mémoire
|
||||
virtuelle, la gestion des signaux, l'IPC System V, etc. La
|
||||
virtuelle, la gestion des signaux, iet l'IPC System V. La
|
||||
seule différence est que les binaires &os; utilisent
|
||||
les fonctions <emphasis>glue</emphasis> de &os;, et les
|
||||
binaires Linux celles de Linux (les plus anciens
|
||||
systèmes d'exploitation avaient uniquement leurs
|
||||
propres fonctions de <emphasis>glue</emphasis>: les adresses
|
||||
des fonctions dans une structure <literal>sysent[]</literal>
|
||||
statique globale, au lieu des adresses des fonctions
|
||||
déréférencées d'un pointeur
|
||||
initialisé dynamiquement pointant vers la structure
|
||||
<literal>proc</literal> du processus faisant l'appel).</para>
|
||||
|
||||
<para>Laquelle est l'ABI native &os;? Cela n'a pas
|
||||
d'importance. Basiquement, la seule différence est que
|
||||
(actuellement, cela pourrait facilement changer dans les
|
||||
versions futures, et probablement après cela) les
|
||||
binaires &linux; celles de &linux;. Les
|
||||
fonctions <emphasis>glue</emphasis> de &os; sont liées
|
||||
en statique dans le noyau, les fonctions
|
||||
<emphasis>glue</emphasis> Linux peuvent être
|
||||
<emphasis>glue</emphasis> &linux; peuvent être
|
||||
liées statiquement, ou l'on peut y accéder via
|
||||
un module du noyau.</para>
|
||||
|
||||
<para>Oui, mais est-ce vraiment de l'émulation? Non.
|
||||
C'est l'implémentation d'une interface binaire pour les
|
||||
applications (ABI). Il n'y a pas d'émulateur (ou de
|
||||
simulateur, pour couper court aux prochaines questions)
|
||||
impliqué.</para>
|
||||
|
||||
<para>Mais pourquoi appelle-t-on parfois cela
|
||||
“émulation Linux”? Pour rendre difficile
|
||||
la vente des versions de &os;! Sérieusement, c'est
|
||||
dû au fait que l'implémentation historique a
|
||||
été faite à une époque où
|
||||
il n'y avait pas vraiment d'autres mots pour décrire ce
|
||||
qui était en développement; dire que &os;
|
||||
exécutait les binaires Linux n'était pas vrai si
|
||||
vous n'aviez pas compilé le code ou chargé un
|
||||
module, aussi un terme était nécessaire pour
|
||||
qualifier ce qui était chargé — donc
|
||||
l'“émulateur Linux”.</para>
|
||||
</sect2>
|
||||
<para>Techniquement, ce n'est pas vraiment de l'émulation,
|
||||
c'est l'implémentation d'une interface binaire pour les
|
||||
applications (<acronym>ABI</acronym>). Cela est parfois
|
||||
appelé <quote>émulation &linux;</quote> parce que
|
||||
l'implémentation a été faite à une époque où il n'y avait pas
|
||||
vraiment d'autres mots pour décrire ce qui était en
|
||||
développement. Dire que &os; exécutait les binaires &linux;
|
||||
n'était pas vrai, jusqu'à ce le code de support &linux; soit
|
||||
compilé ou le module soit chargé.</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
|
Loading…
Reference in a new issue