4 votes

Les distributions Linux sont-elles compatibles entre elles ?

En d'autres termes, une application qui fonctionne sur une distro peut-elle être simplement copiée et exécutée sur une autre distro ?

5voto

Lukas Loesche Points 726

Cela dépend de la façon dont l'application est construite. Un problème peut être les chemins d'accès au système qui peuvent différer d'une distribution à l'autre. Un autre problème est celui des bibliothèques partagées qui peuvent ne pas être installées sur le système cible, ou pire, être installées dans des versions incompatibles.

Une solution au problème des bibliothèques est soit de construire des binaires liés statiquement, soit (comme c'est courant sous OS X) de livrer toutes les librairies requises avec l'application et, si nécessaire, de définir LD_LIBRARY_PATH en conséquence (bien que ce soit une mauvaise idée pour de nombreuses raisons).

Une façon simple de vérifier si votre programme s'exécutera est de lister toutes les bibliothèques liées en utilisant ldd et de voir si elles existent sur le système cible.

Exemple utilisant apache httpd :

[lukas@web1 /]$ ldd /usr/sbin/httpd
        libm.so.6 => /lib64/libm.so.6 (0x00002b1ec3aaf000)
        libpcre.so.0 => /lib64/libpcre.so.0 (0x00002b1ec3d32000)
        libselinux.so.1 => /lib64/libselinux.so.1 (0x00002b1ec3f4e000)
        libaprutil-1.so.0 => /usr/lib64/libaprutil-1.so.0 (0x00002b1ec4167000)
        libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00002b1ec4384000)
        libldap-2.3.so.0 => /usr/lib64/libldap-2.3.so.0 (0x00002b1ec45bc000)
        liblber-2.3.so.0 => /usr/lib64/liblber-2.3.so.0 (0x00002b1ec47f7000)
        libdb-4.3.so => /lib64/libdb-4.3.so (0x00002b1ec4a05000)
        libexpat.so.0 => /lib64/libexpat.so.0 (0x00002b1ec4cfa000)
        libapr-1.so.0 => /usr/lib64/libapr-1.so.0 (0x00002b1ec4f1d000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b1ec5144000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00002b1ec535f000)
        libc.so.6 => /lib64/libc.so.6 (0x00002b1ec5564000)
        libsepol.so.1 => /lib64/libsepol.so.1 (0x00002b1ec58bb000)
        /lib64/ld-linux-x86-64.so.2 (0x00002b1ec3892000)
        libuuid.so.1 => /lib64/libuuid.so.1 (0x00002b1ec5b01000)
        libpq.so.4 => /usr/lib64/libpq.so.4 (0x00002b1ec5d06000)
        libsqlite3.so.0 => /usr/lib64/libsqlite3.so.0 (0x00002b1ec5f28000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00002b1ec6183000)
        libsasl2.so.2 => /usr/lib64/libsasl2.so.2 (0x00002b1ec6399000)
        libssl.so.6 => /lib64/libssl.so.6 (0x00002b1ec65b2000)
        libcrypto.so.6 => /lib64/libcrypto.so.6 (0x00002b1ec67fc000)
        libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00002b1ec6b4e000)
        libnsl.so.1 => /lib64/libnsl.so.1 (0x00002b1ec6de3000)
        libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00002b1ec6ffc000)
        libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00002b1ec722a000)
        libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00002b1ec742c000)
        libz.so.1 => /usr/lib64/libz.so.1 (0x00002b1ec7652000)
        libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00002b1ec7866000)
        libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00002b1ec7a6e000)

Si toutes les bibliothèques liées existent dans une version compatible sur le système cible, il est probable que votre application pourra démarrer. À partir de là, ce sont surtout les chemins qui doivent être ajustés.

3voto

Chochos Points 3364

Cela dépend entre autres de la version de la glibc. En général, elle no une bonne idée de le faire puisque les structures des systèmes de fichiers peuvent varier.

2voto

Sunny Points 941

Elle dépend de la complexité de l'application, ainsi que des dépendances et des bibliothèques auxquelles elle est liée.

Si l'application est autonome, simple, qu'elle n'a pas de dépendances externes et qu'elle est compilée sur la même architecture de CPU, elle devrait fonctionner.

Dans des scénarios plus complexes, il est difficile de savoir. En tout cas, pour avoir une chance, l'application doit être destinée à la même architecture de processeur, à la même version de glibc, et les deux distributions doivent avoir une base commune - c'est-à-dire qu'il est plus facile d'exécuter une application debian sur ubuntu, etc.

Si vous voulez construire une telle application, et être capable de l'exécuter sur n'importe quelle distribution - alors vous devez la compiler avec des bibliothèques liées statiquement, et ne pas vous reposer sur la disposition du système de fichiers du système d'exploitation et supposer que certains fichiers seront situés à des endroits spécifiques.

Si ce n'est pas vous qui construisez l'application, il vaut mieux utiliser les paquets pré-construits de la distribution spécifique, ou compiler à partir des sources.

Tout ce qui précède est vrai pour l'application "compilée". S'il s'agit d'une application en langage de script - ruby, php, perl, Python, etc., il est fort probable (si la version de l'interpréteur est la même) que vous puissiez simplement la copier - encore une fois, si l'application ne suppose pas que certains fichiers se trouvent à des emplacements spécifiques. Mais cela peut être résolu, car vous pouvez modifier le script pour l'adapter au déménagement.

0voto

Johnas Points 567

Si l'architecture du processeur est la même, je ne vois pas pourquoi cela ne fonctionnerait pas.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X