Journal Bootsplash et alternative /bin/sh dans Debian

Posté par  (site web personnel) .
Étiquettes :
0
6
mar.
2005
Je suis tombé par hasard sur l'excellent tutoriel http://www.swisslinux.org/forums/sutra2275.php,(...) qui explique comment installer BootSplash sur une Debian, avec un kernel non Debian (un CK en l'occurence).
Le choix des fonds d'écrans disponibles empaquettés en deb, que l'on peut voir sur http://www.bootsplash.de,(...) m'a donner envie de m'y remettre ce week-end.

J'avais déja obtenu un beau résultat avec BootSplash dans le passé, mais je ne l'avais pas réinstallé après mon dernier crash disque. Et puis il y avait ce bug incompréhensible sur le postinst de sysv-rc-bootsplash :

Paramétrage de sysv-rc-bootsplash (1.0.0-5) ...
/var/lib/dpkg/info/sysv-rc-bootsplash.postinst: 42: function: not found

Depuis le temps, je me suis dit que ça devait être réglé!

Et bien non, le problème existe toujours. Mais cette fois ci, je me suis donné la peine de creuser. Je passe sur un problème de partage de fichiers de sysv-rc_2.86 appartenant aussi au paquet sysvinit, réglé à coup de dpkg --force-overwrit

Le problème du postinst, c'est que le script /var/lib/dpkg/info/sysv-rc-bootsplash.postinst utilise une fonction, ce qui n'est pas du sh, mais que le fichier commence par le classique #! /bin/sh

En temps normal, pas de problème, /bin/sh est divertit sur bash par défaut. Mais en toute logique, sh peut être fournit par tout shell compatible sh, même sans les extensions bash. C'était le cas pour moi, mon sh pointant sur dash.
(Je ne sais plus comment dash a été installé chez moi, mais il me semble bien que c'était une suggestion de l'installateur Debian).

Il existe plusieurs solutions simples pour régler le problème, comme par exemple retirer son statut de sh par défaut à dash par un dpkg-reconfigure dash, et vérifier ensuite que /bin/sh pointe bien sur bash, ou bien réécrire le postinst en question pour supprimer l'usage de function.
J'ai choisit une autre voie : puisque postinst dépend de bash, autant officialiser la chose, et remplacer #! /bin/sh par #! /bin/bash dans /var/lib/dpkg/info/sysv-rc-bootsplash.postinst

Evidemment c'est un bricolage, le packageur ne peut pas se contenter de faire ça.

Moi, oui :-)
  • # http://www.bootsplash.de/

    Posté par  (site web personnel) . Évalué à 5.

    Sans la virgule c'est mieux ;)

    http://www.bootsplash.de/(...)
  • # Sysv-rc ?

    Posté par  . Évalué à 3.

    Je passe sur un problème de partage de fichiers de sysv-rc_2.86 appartenant aussi au paquet sysvinit

    Curieux je n'ai pas ce problème. Tu as fais un petit upgrade avant d'installer bootsplash? Il a pu y avoir des modifs.

    dpkg --force-overwrit

    Arrrrgghh! Vade retro. Risquer de mettre en vrac apt pour avoir un joli logo au démarrage ça ne vaut pas le coup, à mon avis.
    • [^] # Re: Sysv-rc ?

      Posté par  (site web personnel) . Évalué à 1.

      Curieux je n'ai pas ce problème. Tu as fais un petit upgrade avant d'installer bootsplash? Il a pu y avoir des modifs.

      Merci pour ton mail, ca m'a donné à réfléchir : c'est probablement du a ce que j'ai restauré la base de mon système avec une Knoppix.
      Il y a quelques paquetages qui gardent l'empreinte Knoppix, entre autre sysvinit : je force la mise à jour vers une version Debian et je vais bien voir le résultat.

      Si je ne poste plus rien dans les jours à venir, c'est que c'était une mauvaise idée :-)
  • # /usr/bin/reportbug

    Posté par  . Évalué à 4.

    « Il existe plusieurs solutions simples pour régler le problème [...]»

    La meilleur solution est de faire un rapport de bug, car il s'agit bien d'un bug: Les scripts en #!/bin/sh ne doivent pas comporter de « bashisme »

    http://www.debian.org/doc/debian-policy/ch-files.html(...)

    The standard shell interpreter /bin/sh can be a symbolic link to any POSIX compatible shell, if echo -n does not generate a newline.[53] Thus, shell scripts specifying /bin/sh as interpreter should only use POSIX features. If a script requires non-POSIX features from the shell interpreter, the appropriate shell must be specified in the first line of the script (e.g., #!/bin/bash) and the package must depend on the package providing the shell (unless the shell package is marked "Essential", as in the case of bash).


    « Evidemment c'est un bricolage, le packageur ne peut pas se contenter de faire ça. »

    Non non c'est pas du bricolage, c'est la bonne façon de faire. A la rigueur, il pourrait émuler la fonction bash en shellscript POSIX, mais c'est inutile (BASH est un paquet marqué « Essential »). Il y a d'ailleurs plein de paquets qui ont leurs scripts *.{pre,post}{inst,rm} en bash sans que ça pose problème.
    • [^] # Re: /usr/bin/reportbug

      Posté par  (site web personnel) . Évalué à 3.

      Apparemment, sysv-rc-bootsplash est un paquet proposé par bootsplash.de, ce n'est pas un paquet officiel Debian. Donc je ne suis pas sûr que reportbug marche...

      Mais c'est vrai qu'il faut privilégier le rapport de bug plutôt que la petite correction dans son coin.
      • [^] # Re: /usr/bin/reportbug

        Posté par  . Évalué à 2.

        reportbug marchera peut-être, mais les développeurs debian ne résoudront pas ton problème, il y a largement assez de boulot avec les paquets officiels de la future Sarge qui doit sortir 'bientôt'.

        Par contre, tu peux peut-être comparer la version officielle debian de sysv-rc avec celle modifiée. Normalement, la version officielle ne contient pas de 'bashism' (sinon, c'est un bug, à reporter effectivement aussi), et ca peut te donner des indications sur les corrections propres à effectuer sur le pquet modifié sysv-rc-debian.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.