Page 1 sur 1

[PACMAN] Pb libarchive qui bloque toute maj

Publié : mer. 04 juil. 2007, 08:41
par Incognito
Bonjour à tous, j'ai en fait un très très gros soucis, mon pacman est devenu inutilisable (et yaourt aussi donc) suite à une mise à jour du package libarchive-1 vers libarchive-2

Quelle que soit la commande que j'essaie j'obtiens le message suivant :

Code : Tout sélectionner

pacman: error while loading shared libraries: libarchive.so.1: cannot open shared object file: No such file or directory
impossible de réinstaller libarchive ou pacman, je suis vraiment bloqué... Si qqun a une solution à me proposer je l'essaierai volontier :wink:

Publié : mer. 04 juil. 2007, 12:10
par galactose
[Le post du newbie]
Y a sûrement une solution autre, mais tu peux toujours essayer d'installer libarchive-1 en le compilant. Ensuite peut-être faire une MAJ de Pacman, réinstaller libarchive-2, essayer de voir si y a conflit avec le 1, etc...

Publié : mer. 04 juil. 2007, 12:39
par vincentxavier

Code : Tout sélectionner

ln -s /usr/lib/libarchive.so.1 $(slocate libarchive | grep so$)

Publié : mer. 04 juil. 2007, 12:59
par vincentxavier
En même temps, ma réponse est mauvaise, car je balance une solution sans explication ....
En fait, la solution est de faire juste un lien symbolique ...

Publié : mer. 04 juil. 2007, 13:53
par wain
la meilleure solution quand pacman ne fonctionne plus et d'utiliser la commande "pacman-static" qui elle ne dépend pas des librairies habituelles, ni même de glibc.

Code : Tout sélectionner

pacman-static -S libarchive

Publié : mer. 04 juil. 2007, 13:57
par galactose
Hey trop bien ça wain ! Merci du tuyau :P C'est marqué dans le man de pacman ? :?

Publié : mer. 04 juil. 2007, 19:36
par wain
galactose a écrit :Hey trop bien ça wain ! Merci du tuyau :P C'est marqué dans le man de pacman ? :?
Non, si ça peut te rassurer, la doc de pacman ne mentionne pas l'existence de pacman-static. Je le connais parcequ'il est utilisé pour faire une installation en chroot, et aussi parceque je me suis retrouvé coincé un jour après une mise à jour catastrophique de glibc où seul pacman-static pouvait me sortir de là :?

Publié : mer. 04 juil. 2007, 20:20
par Incognito
Tout d'abord merci pour vos réponses.

J'ai testé en 1er la solution de wain mais apparemment pacman-static n'existe pas sur mon install...

La solution du lien symbolique a fontionné, en dirigeant /usr/lib/libarchive.so.1 vers /usr/lib/libarchive.so

Ouf! pacman remarche, merci à tous pour vos propositions :D

Publié : mer. 04 juil. 2007, 20:35
par vincentxavier
En fait parfois, il manque des liens symboliques entre différentes appellations du même objet partagé (*.so.ver comme Shared Object). Il faut donc refaire les liens à la main. Ceci vient du fait que parfois les updates se sont mal déroulées !

Publié : mer. 04 juil. 2007, 23:44
par galactose
D'où l'utilité d'essayer de comprendre le système :wink:

J'vous raconte pas la galère quand j'essayais même pas de comprendre ce que /usr/share/, /usr/bin/ et /usr/lib/ renfermaient :?

Publié : mer. 04 juil. 2007, 23:57
par vincentxavier
Pour ca que ma réponse est mauvaise car elle donne une solution technique sans explication :S

Publié : jeu. 05 juil. 2007, 00:26
par galactose
vincentxavier a écrit :

Code : Tout sélectionner

$(slocate libarchive | grep so$)
Ca veut dire quoi ça ?

Publié : jeu. 05 juil. 2007, 00:58
par mélodie
galactose a écrit :
vincentxavier a écrit :

Code : Tout sélectionner

$(slocate libarchive | grep so$)
Ca veut dire quoi ça ?
J'aime bien les devinettes quand je connais une partie de la réponse, je vais essayer de jouer. :P

$ veut dire 'argument'.

tout ce qui est entre les parenthèses c'est l'argument.

slocate est invoqué pour chercher sur tout le disque dur.

(vincentxavier, est-ce que ce n'est pas un peu osé ça si il y a des autres GnuLinux installés et montés ? un "find / -name 'name'" voir un "find /usr/lib -name 'name'" ne serait-il pas plus précis ?).

Le tube dit quelque chose comme : avec le ou les fichiers nommés libarchive que slocate aura affiché, grep produira/sélectionnera celui qui contient la chaîne 'so', car à gauche d'un tube '|' on affiche des données et à droite on produit... quelque chose comme ça.

Au total sa commande dit de lier symboliquement (ln -s) à l'argument '$' défini par le résultat de la commande entre parenthèses, c'est à dire, lier le fichier /usr/lib/libarchive.so.1 à n'importe quel fichier nommé libarchive et comportant la chaîne de caractères 'so'.

Alors, est-ce que j'ai gagné ? :D

PS: avant de lancer locate ou slocate, ça peut être utile de lancer en root updatedb.

Publié : jeu. 05 juil. 2007, 16:55
par galactose
Alors dans le texte maintenant je comprend ; ce que je comprend pas, c'est à quoi ça sert :P Genre moi mes liens symboliques, je fais :

Code : Tout sélectionner

ln -s /path/file /otherpath/
J'crois que je vais aller faire man ln et man grep :D

Publié : jeu. 05 juil. 2007, 19:15
par vincentxavier
mélodie a écrit :
galactose a écrit :
vincentxavier a écrit :

Code : Tout sélectionner

$(slocate libarchive | grep so$)
Ca veut dire quoi ça ?
J'aime bien les devinettes quand je connais une partie de la réponse, je vais essayer de jouer. :P

$ veut dire 'argument'.

tout ce qui est entre les parenthèses c'est l'argument.

slocate est invoqué pour chercher sur tout le disque dur.

(vincentxavier, est-ce que ce n'est pas un peu osé ça si il y a des autres GnuLinux installés et montés ? un "find / -name 'name'" voir un "find /usr/lib -name 'name'" ne serait-il pas plus précis ?).

Le tube dit quelque chose comme : avec le ou les fichiers nommés libarchive que slocate aura affiché, grep produira/sélectionnera celui qui contient la chaîne 'so', car à gauche d'un tube '|' on affiche des données et à droite on produit... quelque chose comme ça.

Au total sa commande dit de lier symboliquement (ln -s) à l'argument '$' défini par le résultat de la commande entre parenthèses, c'est à dire, lier le fichier /usr/lib/libarchive.so.1 à n'importe quel fichier nommé libarchive et comportant la chaîne de caractères 'so'.

Alors, est-ce que j'ai gagné ? :D

PS: avant de lancer locate ou slocate, ça peut être utile de lancer en root updatedb.
$(machin) ou `machin` exécute et renvoie la sortie de la fonction machin. La ce résultat est passé comme second argument de ln via un tube (|) qui redirige la sortie standard de la commande de droite vers l'entrée standard de la commande de gauche. 'slocate libarchive' permet de localiser tout les fichiers dont le nom contient "libarchive". Le résultat de cette commande est filtré avec grep pour ne garder que ce qui finit par .so (*.so$)