can't load load libc.so.6 : file does not exist

Le
gUI
bonjour,

je suis en train de me faire un mini Linux didactique, pour bien
comprendre comment tout marche. je me suis fait un noyau minimal
(2.6.8.1) avec support console, disquette, binaires ELF (faut pas
l'oublier celui-la !!!) disques IDE et ext2fs.

j'ai ma disquette de boot Grub, qui me fait booter sur mon disque root :
le disque dur.

tout cela est purement didactique (pour l'instant) car ca ne tourne en
fait que sous Bochs.

mon pb c'est que je n'arrive pas a utiliser de librairies dynamiques !

le message exact du kernel pour lancer /bin/sh (je n'ai pas de init, il
passe a /bin/sh en dernier recours): error while loading shared
libraries : libc.so.6 : cannot open shared object file : No such file or
directory)

j'ai pourant :
- un repertoire /lib
- copié les librairies nécessaires (selon ldd) dans /lib
- copié ld-linux.so (le loader ELF)
- verifie par un chroot que tout fonctionne !!!

apparemment /etc/ld.so.conf e /etc/ld.so.cache ne sont pas necessaires.
j'ai les ai quand meme créés (comme mon chroot marche, j'ai pu créer
ld.so.cache facilement) mais rien n'y fait !

bref je ne sais pas pourquoi ca marche pas : mon filesystem ? mon kernel
? un fichier manquant ?

merci pour toutes vos idees (-:

gUI
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
no_spam
Le #1143992
On Sun, 12 Sep 2004 18:49:44 +0200, gUI wrote:

bonjour,


Bonsoir,

je suis en train de me faire un mini Linux didactique, pour bien
comprendre comment tout marche. je me suis fait un noyau minimal
(2.6.8.1) avec support console, disquette, binaires ELF (faut pas
l'oublier celui-la !!!) disques IDE et ext2fs.

j'ai ma disquette de boot Grub, qui me fait booter sur mon disque root :
le disque dur.

tout cela est purement didactique (pour l'instant) car ca ne tourne en
fait que sous Bochs.

mon pb c'est que je n'arrive pas a utiliser de librairies dynamiques !

le message exact du kernel pour lancer /bin/sh (je n'ai pas de init, il
passe a /bin/sh en dernier recours): error while loading shared
libraries : libc.so.6 : cannot open shared object file : No such file or
directory)

j'ai pourant :
- un repertoire /lib
- copié les librairies nécessaires (selon ldd) dans /lib
- copié ld-linux.so (le loader ELF)


Est ce que les librairies sont bien executables ?
Est ce que tu as fait un ldconfig pour créer les liens nécessaires ?

- verifie par un chroot que tout fonctionne !!!


Il te manque la libc. C'est normal que ça marche dans un chroot car la
libc de ton système est déjà chargée. ld-linux n'étant pas bête, il
se sert de la librairie dynamique déjà en mémoire plutôt que d'essayer
de la recharger (d'ou le nom de librairies partagées...).

Nicolas George
Le #1143860
no_spam wrote in message
Il te manque la libc. C'est normal que ça marche dans un chroot car la
libc de ton système est déjà chargée. ld-linux n'étant pas bête, il
se sert de la librairie dynamique déjà en mémoire plutôt que d'essayer
de la recharger (d'ou le nom de librairies partagées...).


Tu dis des bêtises : ld-linux recharge à chaque fois la bibliothèque depuis
le filesystem. Il n'y a d'ailleurs pas d'autre moyen possible. Si tu essaies
de te chrooter à un endroit où il n'y a pas de libc, ça ne va pas marcher,
tu peux essayer.

L'appellation « partagée » décrit avant tout le fait que le _fichier_ est le
même pour plusieurs applications.

Une conséquence est que les sections en lecture seule sont chargées une
seule fois en mémoire (par le mécanisme du mmap), mais ça n'a rien de
spécifiques aux bibliothèques partagées : deux instances de /bin/sh, par
exemple, partagent le code en mémoire.

Enfin, je rappelle que le terme français pour library est bibliothèque, pas
librairie.

gUI
Le #1143856
Enfin, je rappelle que le terme français pour library est bibliothèque, pas
librairie.


c'est vrai, autant se discipliner.

oui, sinon je confirme bien (pour avoir essayé) qu'un chroot necessite
un /lib bien complet, sous peine de ne pas fonctionner du tout.

mon probleme a l'air de venir d'ailleur : l'emulation Bochs.

j'utilise mal l'image disque dur. en effet, pour une disquette, on fait
un mount de l'image et ca marche. pour un disque dur, il y a une table
des partitions, on ne peut pas faire mke2fs sur une image disque dur.

j'ai plutot du mal a comprendre maintenant comment ca a pu marcher
jusque la (charger le ld-linux.so, trouver dans le filesystem le fichier
/bin/sh etc...)

qqu'un sait bien manipuler des images de disque dur ? j'ai trouvé qques
docs sur Internet, mais un outils tout fait serait plus pratique (((-;

gUI

gUI
Le #1143854
j'ai plutot du mal a comprendre maintenant comment ca a pu marcher
jusque la (charger le ld-linux.so, trouver dans le filesystem le fichier
/bin/sh etc...)


j'ai trouvé, mais j'y comprends rien...

quand je faisais ldd /bin/sh, je trouvais une dependance a /lib/tls/libc
j'ai donc pris cette libc, sans chercher a comprendre... et bien si je
prends celle qui se trouve dans /lib tout court, ca marche nickel...

au passage, pour manipuler correctement des images de disques, j'ai
trouvé cette excellente page :
http://www.mega-tokyo.com/osfaq2/index.php/Disk%20Images%20Under%20Linux

c'est nickel, j'ai maintenant un vrai DD avec une partition dessus (-:

gUI

Ronald
Le #1143709
Le Sun, 12 Sep 2004 21:25:25 +0200, gUI a écrit :


j'utilise mal l'image disque dur. en effet, pour une disquette, on fait un
mount de l'image et ca marche. pour un disque dur, il y a une table des
partitions, on ne peut pas faire mke2fs sur une image disque dur.

[...]

qqu'un sait bien manipuler des images de disque dur ? j'ai trouvé qques
docs sur Internet, mais un outils tout fait serait plus pratique (((-;



il faut passer offset en option pour mount, l'offset est en
octets, il correspond au secteur du début de la partition multiplié par
la taille d'un secteur.
Pour connaître quel est le secteur de début de chaque partitions, tu
associes d'abord ton image à un périphérique loop avec losetup
/dev/loop0 /chemin/de/ton/image, la dessus tu peux faire un fdisk -lu
/dev/loop0.

Voilà si ça peut t'aider.

no_spam
Le #1143708
On Sun, 12 Sep 2004 18:47:15 +0000, Nicolas George wrote:

no_spam wrote in message
Il te manque la libc. C'est normal que ça marche dans un chroot car la
libc de ton système est déjà chargée. ld-linux n'étant pas bête, il
se sert de la librairie dynamique déjà en mémoire plutôt que d'essayer
de la recharger (d'ou le nom de librairies partagées...).


Tu dis des bêtises : ld-linux recharge à chaque fois la bibliothèque depuis
le filesystem. Il n'y a d'ailleurs pas d'autre moyen possible. Si tu essaies
de te chrooter à un endroit où il n'y a pas de libc, ça ne va pas marcher,
tu peux essayer.


C'est vrai, c'est le kernel qui évite la recopie, pas le linker dynamique.
J'aurais du me relire...

L'appellation « partagée » décrit avant tout le fait que le _fichier_ est le
même pour plusieurs applications.

Une conséquence est que les sections en lecture seule sont chargées une
seule fois en mémoire (par le mécanisme du mmap), mais ça n'a rien de
spécifiques aux bibliothèques partagées : deux instances de /bin/sh, par
exemple, partagent le code en mémoire.


C'est vrai, ainsi que toutes les données statiques.
Pour le code, ce n'est pas toujours vrai, ça dépend de l'architecture.

Enfin, je rappelle que le terme français pour library est bibliothèque, pas
librairie.


En toute rigueur, oui.


Nicolas George
Le #1143707
gUI wrote in message
j'ai trouvé, mais j'y comprends rien...

quand je faisais ldd /bin/sh, je trouvais une dependance a /lib/tls/libc
j'ai donc pris cette libc, sans chercher a comprendre... et bien si je
prends celle qui se trouve dans /lib tout court, ca marche nickel...


Si j'ai bien compris, les bibliothèques dans /lib/tls/ sont celles compilées
avec la NPTL, Native Portable Threads Library, tandis que celles dans /lib/
directement sont compilées avec linuxthreads. La NPTL est plus efficace,
mais ne fonctionne qu'avec un noyau 2.6.

Est-ce que, par hasard, tu n'aurais pas un 2.6 dans ton installation
habituelle, et un 2.4 dans ton installation d'essai ?

Nicolas George
Le #1143704
Nicolas George wrote in message
avec la NPTL, Native Portable Threads Library


Native _POSIX_ Threads Library, pas Portable. Toutes mes excuses.

Sebastien Kirche
Le #1143703
Bonsoir,

Le 12 sep 2004, gUI a formulé :

j'utilise mal l'image disque dur. en effet, pour une disquette, on
fait un mount de l'image et ca marche. pour un disque dur, il y a une
table des partitions, on ne peut pas faire mke2fs sur une image disque
dur.


Heuu, en émulation une image de disque dur, c'est généralement (toujours ?)
une image d'une partition du disque.
Donc il ne devrait pas y avoir de problème pour formater le fichier avec
mke2fs.

En tout cas c'est comme cela que je procède avec qemu ou l'excellentissime
pearpc (émulateur G3).

Sébastien Kirche

gUI
Le #1425665
Est-ce que, par hasard, tu n'aurais pas un 2.6 dans ton installation
habituelle, et un 2.4 dans ton installation d'essai ?


c'est l'inverse (-;

2.4.25 dans ma Mandrake 10, et le 2.6.8.1 pour mon essai. Mais comme
j'ai tout enlevé dans ce noyau, c'est normal que ca n'y soit pas.

a l'occasion (le but est d'apprendre !!!) j'essaierai de faire marcher
cette bibliotheque avc mon noyau d'essai (et donc trouver la/les
bonne(s) option(s))

merci !

gUI

Publicité
Poster une réponse
Anonyme