Archive de la catégorie «livecd»

Persistent LiveCD : casper script [résolu! (ou presque)]

Après un court congé, nous voici replongés dans les joies de l’adaptation de la persistance. Aujourd’hui, le principe est simple, on localise les lignes de scripts qui correspondent à ce que casper n’arrive pas à monter le “casper-rw” mais arrive à monter le “home-rw”. Ensuite, on ajoute des petits commentaires de débuggage pour préciser le problème. Ensuite si le problème est proprement localisé, il ne devrait pas y avoir trop de difficultés pour le résoudre. Il devrait…

C’est parti.

  • Les lignes de scripts incriminées semblent être les lignes 380 à 415 du script “casper” dans “scripts/” (version 1.135 de casper). Ça commence par

    mkdir -p /cow
    cowdevice=”tmpfs”
    cow_fstype=”tmpfs”
    cow_mountopt=”rw,noatime,mode=755″

  • La fontion “find_cow_device” est définie dans “casper-helpers” (ligne 182 et suivantes).

N.b.: Petit rappel pour ceux qui comme moi ont la mémoire courte…

Quand on voit utilisé dans un script un test du genre “if [ -b $FICHIER ]“, pour se souvenir ce que veut dire le “-b” ou le “-x” etc, il suffit de lire le man de “test”. Par exemple, “-b” teste si le fichier “$FICHIER” existe et si c’est un fichier spécial en mode block.

L’USB n’apparaît pas dans la liste des “dev” à regarder pour casper-rw. Si il apparaît pour home-rw, c’est qu’il se passe quelque chose entre temps qui fait que /dev/sdx1 peut apparaître. Reste à trouver quoi.

  • De mon côté, il y a beaucoup de warnings disant que /dev/fd0 est introuvable. Ça peut être ça qui perturbe le processus (?!)…

    /init: /init: 1: Cannot open /dev/fd0: No such file

    On peut essayer de désactiver le lecteur de disquettes en suivant les directives données sur cette page. On va dans “$test/squashfs/etc/modprobe.d” pour rajouter la ligne “alias block-major-2 off” dans le fichier “aliases”. Pas sûr que ça améliore grand chose. En fait, c’est même sûr que ça ne servira à rien vu que les scripts correspondants au “modprobe.d” sont lancés beaucoup plus tard.

  • On tente d’insérer un “sleep” suffisament long (10 secs pour tester) pour que si le fait que le /dev/sdx n’apparaît pas dans la liste des dev, ce ne soit pas seulement lié à un problème de synchronisation entre deux scripts. On refait un initrd.gz. On refait un squashfs. On refait un iso. On relance une VM. Ça marche ? Et oui ! en tout cas, l’USB apparaissait dans la liste des périphériques block au moment où ils étaient interrogés pour la recherche du volume “casper-rw”. Le problème reste que les messages de log que je faisais envoyer par les fonctions pour debugger ont légèrement perturbé le fonctionnement et que ça n’a pas vraiment totalement marché du coup. Bon, on ré-essaie de même, mais sans les logs.
  • Ça marche ! Enfin ça marche dans la machine virtuelle. Pour le reste il va falloir avoir la patience d’attendre que le CD se grave.
  • Une fois le CD gravé, ça ne se passe pas trop mal, sauf que j’aboutis à une console en clavier US et qu’il faut lancer kdm à la mano. Je ne vois pas encore d’où ça vient. Par contre, la persistence fonctionne très bien semble-t-il. C’est très rassurant et finalement très impressionant.

Conclusion… Hé bien ça semble marcher plutôt pas mal. On obtient un pendrive-liveCD bien pratique. Je vais peut-être essayer de remettre le descriptif de l’installation totale au propre ici dans la semaine. J’aimerais quand même bien résoudre ce bug de kdm qui ne se lance pas, mais ce n’est absolument pas prioritaire.

Persistent LiveCD : toujours là…

C’est reparti une nouvelle fois pour essayer de booter le LiveCD Kubuntu 8.04.1 en mode persistant.

Dans tous les cas, il semble qu’il faille modifier l’iso car le bug décrit est réparé pour Intrepid, soit la version suivante d’Ubuntu.

Pour résumer les étapes que je vais essayer de suivre :

  • ouvrir l’iso de base (on est le 11 juillet, il ne semble pas que ma version 8.04.1 soit obsolète) avec un “mount -o loop” et copier son contenu dans “$test/iso”
  • créer un répertoire “$test/squashfs” pour y décompresser le squash (après l’avoir monté ailleurs, on l’y copie)
  • mettre à jour ce qu’il faut en faisant un “apt-get dist-upgrade” en chroot
  • déplier le initrd.gz
  • décompresser le casper 1.135 récupéré ici, mettre les fichiers au bon endroit
  • recréer un fichier initrd.gz, soit avec la méthode “find . | cpio -o -H newc | gzip -9 > initrd.gz“, soit avec la méthode “update-initramfs -k all -u“, cette seconde méthode étant plus “boîte noire”
  • le passer à la moulinette du script “casper-new-uuid” qui va l’ouvrir, mettre à jour les uuid (spécifier “$test/iso/.disk” comme répertoire cible pour le fichier uuid) et reformer le initrd.gz là où précisé.
  • hop, on reforme le squashfs,
  • on crée l’iso,
  • et là, en théorie, ça marche. En théorie.

C’est parti…

N.b.: a priori, le passage par “casper-new-uuid” semble superflu étant donné que les iso créées jusque là avec initrd modifié mais sans passer par “casper-new-uuid” ont marché… Mais c’est plus propre de passer par là. C’est comme mettre à jour les sommes MD5 du CD, ce n’est pas indispensable non plus, mais c’est plus propre en le faisant.

Quelques remarques en passant :

  • pas besoin de déplier le “initrd.gz” finalement si on utilise “update-initramfs -k all -u“.
  • Le script de casper “casper-new-uuid” n’est pas dans le path vu qu’on est sorti du chroot quand il faut le lancer.
  • Ce script (casper-new-uuid) prend comme argument le chemin absolu du “initrd.gz” à modifier.

Ça marche avec la virtualbox !!!

Si ça marche pour de vrai en dur (gravé), je vous remets au propre la procédure complète (misère, ça va être long). Le CD test est en cours de gravure. Alea jacta est.

En fait, ça ne marche pas complètement. Ça se passe bien quand on a un volume qui s’appelle “home-rw” en ext2 sur la clef USB, mais dès qu’il s’appelle “casper-rw” (toujours en ext2), ça ne marche pas. Je vais essayer en ext3…

Ça ne marche pas non plus. “casper.log” : Il n’arrive pas à ouvrir ni “/dev/sdb” ni “/dev/sdb1″ ?!? Tentative avec l’USB en FAT32 et un fichier “casper-rw” à monter en loopback en ext3 (voir ici, “using a loopback file”). Ça ne marche pas non plus. Il reste du boulot…

La solution

Persistent 8.04.1 : solution ?

Il est je-ne-sais-pas-quelle heure de la nuit, et je me dis que peut-être que la solution serait de prendre le nouveau package (1.135 pour Intrepid) décrit dans le suivi de bug #219192, d’en récupérer les fichiers de scripts de /casper et de reformer tout ça.

Mais il est tard, on verra cela demain…

La solution

Persistent LiveCD : encore une suite…

Comme toutes les méthodes testées précédemment pour mettre en place un LiveCD avec un mode persistant qui marche n’ont pas abouti, j’ai choisi de modifier le initrd.gz à la main (comme d’habitude), mais de le reformer en utilisant

update-initramfs -k all -u

pendant un chroot, plutôt qu’un classique :

find . | cpio -o -H newc | gzip -9 > initrd.gz

comme il a pu être testé plus bas.

On obtient alors une image qui va se mettre dans le répertoire “/boot” (on est toujours en chroot). Il faudra le placer judicieusement (dans “/casper”).

Pour info, comme ci-dessous, j’ai modifié les scripts “init” et “scripts/casper”.

a priori, le package casper a pourtant dû être mis à jour quand on suit les directives indiquées ici et donc il ne devrait pas y avoir besoin de modifier les scripts dans /casper ? Mais ça n’a pas l’air de fonctionner comme ça…

Quelqu’un mentionne “casper-new-uuid” dans le rapport de bug de hardy heron à propos du mode persistant pour gérer le initrd.gz. Je ne sais pas trop comment ça fonctionne, ça peut être une piste à suivre également.

Si ça ne marche toujours pas, il sera toujours possible de reprendre l’install décrite dans pendrivelinux en modifiant le syslinux en isolinux pour pouvoir l’utiliser sur un CD au lieu d’une clef USB…

———–

D’ailleurs, ça ne marche toujours pas…

Hop, technique Pendrive Linux. On reprend de zéro. C’est parti. C’est ici.

  • Déjà, on remarque qu’on nous fait charger le répertoire “/isolinux” de l’image à la racine du volume live. étonnant. Ça à l’air de pouvoir marcher.
  • par contre, on nous propose de télécharger un “syslinux.cfg”. On va plutôt modifier notre “isolinux.cfg” comme on en a l’habitude. En plus, sinon, on est confronté au problème de “/cdrom” qui est présent dans notre version mais ne l’est pas dans la version USB.
  • On change le “initrd.gz” en téléchargeant celui proposé.
  • On reforme l’iso (voir la page personaliser un liveCD, à modifier en tenant compte du fait que les fichiers de isolinux sont maintenant à la racine du nouveau volume)
  • Test en machine virtuelle : ça boote, mais comme d’habitude, le volume persistant n’est pas retrouvé. Et voilà… On n’a pas avancé d’un chouïa.

Le problème ne serait-il pas ailleurs que là où on le cherche ?

Dans le log de casper (“/var/log/casper.log”), il semblerait qu’un script cherche un fichier sans nom par exemple… peut-être dans “casper-premount” ; à creuser…

La solution

Persistent LiveCD : la suite…

Nous venons de voir que mon iso de LiveCD ne convient pas pour un mode persistant. Il boote tout à fait correctement mais il n’arrive pas à trouver le volume “casper-rw” malgré les modifications du “initrd.gz” effectuées.
J’ai donc récupéré un initrd corrigé trouvé ici (Bug #219192) : commentaire daté du 2008-04-29 par FlipsideTech. Après décompression et comparaison des scripts casper, il y a une différence entre le sien et le mien, mais pas à l’endroit que l’on aurait pu croire… Un diff me renvoie ceci :

128a129,139
> is_supported_fs () {
>     # FIXME: do something better like the scan of supported filesystems
>     fstype=”${1}”
>     case ${fstype} in
>         vfat|iso9660|udf|ext2|ext3|ntfs)
>             return 0
>             ;;
>     esac
>     return 1
> }
>
447,456d457
<     if [ -d "${devname}" ]; then
<         mount -o bind “${devname}” $mountpoint || continue
<         if is_casper_path $mountpoint; then
<             echo $mountpoint
<             return 0
<         else
<             umount $mountpoint
<         fi
<     fi

Pas de trace donc du “mode=775″ évoqué partout à l’origine d’un des bugs.

Comme je n’ai trouvé de commentaires de cette partie-ci nulle part, je vais prendre ce initrd.gz réparé et l’utiliser directement, tel quel, sur mon iso. Inch Allah !

———-

Bon, ça ne marche pas, ce n’est vraiment pas top. Le initrd est manifestement pour un ubuntu (splash ubuntu) et pas un kubuntu (jusque là ce n’est pas trop génant), mais ensuite, il me lance directement sur une busybox. Donc on n’a pas beaucoup avancé. Au contraire, on pourrait même dire que ça régresse bien.

———-

Ah, on m’annonce dans l’oreillette qu’il est possible que ça marche mieux avec du ext3 que du ext2 pour casper-rw. Étrange… mais ça ne coûte rien de tester. Allons-y.

Pas mieux.

La solution

« Page précédentePage suivante »