Date: Sun, 16 Apr 2017 16:26:29 +0000 (UTC) From: Marc Fonvieille <blackend@FreeBSD.org> To: doc-committers@freebsd.org, svn-doc-all@freebsd.org, svn-doc-head@freebsd.org Subject: svn commit: r50172 - head/fr_FR.ISO8859-1/books/handbook/linuxemu Message-ID: <201704161626.v3GGQTWd006075@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: blackend Date: Sun Apr 16 16:26:29 2017 New Revision: 50172 URL: https://svnweb.freebsd.org/changeset/doc/50172 Log: MFen 1.136 --> r49367 Modified: head/fr_FR.ISO8859-1/books/handbook/linuxemu/chapter.xml Modified: head/fr_FR.ISO8859-1/books/handbook/linuxemu/chapter.xml ============================================================================== --- head/fr_FR.ISO8859-1/books/handbook/linuxemu/chapter.xml Sun Apr 16 04:57:28 2017 (r50171) +++ head/fr_FR.ISO8859-1/books/handbook/linuxemu/chapter.xml Sun Apr 16 16:26:29 2017 (r50172) @@ -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>Catalogue des logiciels portés</primary></indexterm> - <indexterm><primary>KLD (kernel loadable object)</primary></indexterm> + <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>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>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> - <programlisting>linux_enable="YES"</programlisting> + <screen>&prompt.root; <userinput>kldload linux64</userinput></screen> - <para>La commande &man.kldstat.8; peut être utilisée - pour vérifier que le KLD est chargé:</para> + <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> + 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>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> - - <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>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> + <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> + + <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> - <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> + + <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 + <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> - - <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> + <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> - <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>&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>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>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>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201704161626.v3GGQTWd006075>