This is the old SliTaz forum - Please use the main forum.slitaz.org

Creer livecd à partir du disque
  • claudemclaudem January 2010
    Bonjour,

    J'ai installé Slitaz sur le disque dur d'un "vieux" Pc.
    J'ai ajouté les paquets dont j'avais besoin.
    Je voudrai créer un LiveCd qui reprenne tous les éléments mis en place sur le disque, y compris ceux du /home (favoris du navigateur).
    La documentation en ligne me parait complexe.
    Qu'elles sont les commandes à utiliser pour créer l'image iso amorçable à partir de l'intégralité du disque ?
  • LuXLuX January 2010
    Bonjour Claudem,

    * Claudem a écrit :

    La documentation en ligne me parait complexe.


    Créer soi-même un système live personalisé à partir d'un système installé sur le disque dur est quelque chose de complexe, et je m'émerveille toujours que Slitaz en donne la possibilité. La complexité de la méthode fournie est donc très relative. Il faut simplement satisfaire à l'une des conditions suivantes :

    - soit on utilise les outils tout faits tazlito ou tazusb, mais ceci ne marche vraiment que pour une personalisation limitée à l'ajout de paquets (en fait d'autres personnalisations sont possibles, mais pas "en 2 commandes" ou "en 2 clics") :

    http://www.slitaz.org/fr/doc/handbook/gen-livecd.html#2cmds
    http://www.slitaz.org/en/doc/handbook/liveusb.html

    - soit on veut un système plus personalisé encore, incluant par exemple les répertoires qu'on aura ajoutés pour d'autre utilisateurs ou comme points de montages, les fichiers de configuration, icônes, etc, qu'on aura ajoutés ou modifiés, et alors il faut travailler un peu, sur la base de :

    http://www.slitaz.org/fr/doc/handbook/hacking-livecd.html


    Mon expérience est que la méthode tazlito ou tazusb "en 2 clics" n'est pas assez puissante pour inclure un niveau de personalisation suffisant. Elle est même assez complexe dans le cas de tazlito car l'iso en question est recontruite à partir des paquets et non à partir de ce qui se trouve sur ton disque, ce qui engendre souvent des problèmes (m'a-t-il semblé quand j'ai essayé). Il est plus simple selon moi de construire directement soi-même le fichier rootfs.gz qui est le coeur du système live sans passer par ces outils.

    Mais bien sûr cette conclusion tirée de mon expérience n'est peut-être pas valable pour toi. Tu as donc le choix : soit tu utilises tazlito comme expliqué dans la doc, et je ne vois pas ce que je pourrais ajouter de plus, soit tu as envie de fignoler une personalisation aux petits oignons et dans ce cas la doc en ligne nécessite pas mal d'explications dont je peux te fournir une partie.

    À partir de maintenant je vais supposer que tu es dans le second cas.

    Je ne vais pas te faire un tuto indiquant ligne par ligne les commandes à taper (tu comprendras pourquoi en lisant ce qui suit). À la place je vais te donner les explications qu'il m'aurait été bien utile d'avoir, à l'époque où j'ai essayé, pour comprendre les informations très précieuses qui sont fournies sur la page "Haccking LiveCD" ci-dessus. Ces informations permettent en effet de faire exactement ce qu'on veut pour construire un système Live, qu'il soit sur CD, sur clé USB ou ailleurs.


    1) La première chose à savoir, c'est qu'un système live est constitué de deux morceaux : le noyau Linux (vmlinuz-numero-de-version) et le système de fichier compressé (rootfs.gz). Le premier se trouve tel quel dans ton système installé sur le disque (il est dans le répertoire /boot), alors que le second ne s'y trouve que décompressé et mélé à d'autres éléments (par exemple les fichiers de log) qui n'en font pas partie.

    Quand tu démarres sur le disque, certains fichiers utiles de ton système sont chargés en RAM au fur et à mesure des besoins mais la plupart d'entre eux restent sur le disque. Dans un système live au contraire le rootfs.gz est chargé tel quel en RAM au démarrage (ce qui peut prendre du temps, il ne faut donc pas qu'il soit trop gros... 100Mo est une limite raisonnable) puis décompressé en RAM pour y construire le système tout entier, semblable à celui que tu as sur ton disque.

    Pour info, ces deux morceaux peuvent être stockés n'importe où : sur un CD, une clé USB ou sur le disque dur. Ils ne nécessitent pas une partition particulière, et on peut même les placer dans un répertoire d'un autre système (Linux ou Windows) et démarrer quand même dessus (plus vite que s'ils étaient stockés sur un support amovible).


    2) Pour créer à la main un LiveCD, il est instructif de regarder comment est constitué celui qui est fourni. Pour cela je te recommande l'expérience suivante :

    - Télécharge une iso de Slitaz, place-la dans un répertoire avec le nom que tu voudras, par exemple "slitaz.iso", dans le répertoire "/home/tux".

    - Monte le système de fichier contenu dans l'iso, dans un répertoire vide (tu peux créer un répertoire pour cela, ici je suppose que /mnt est vide et je l'utilise) :
    $ mount -o loop /home/tux/slitaz.iso /mnt


    Si tu vas ensuite dans le répertoire /mnt tu constateras qu'il a le contenu suivant :
    $ ls -l /mnt
    drwxr-xr-x 4 root root 2048 Nov 4 20:37 boot
    drwxr-xr-x 2 root root 2048 Jul 3 2008 images
    -rw-r--r-- 1 root root 1987 Jul 3 2008 index.html
    -rw-r--r-- 1 root root 2992 Nov 4 20:37 md5sum
    -rw-r--r-- 1 root root 2980 Jul 3 2008 README
    -rw-r--r-- 1 root root 954 Jul 3 2008 style.css


    Et les deux morceaux dont je parlais se trouvent dans le sous-répertoire boot :
    $ ls -l /mnt/boot/
    -rw-r--r-- 2 root root 2244368 Sep 25 23:24 bzImage
    -rw-r--r-- 1 root root 195056 Sep 24 01:06 gpxe
    drwxr-xr-x 2 root root 2048 Nov 4 20:34 grub
    drwxr-xr-x 2 root root 6144 May 16 2009 isolinux
    -rw-r--r-- 1 root root 30070962 Nov 4 20:37 rootfs.gz
    -rw-r--r-- 2 root root 2244368 Sep 25 23:24 vmlinuz-2.6.30.6-slitaz


    Pour créer ta propre iso il suffit donc en fait de conserver la même structure en remplaçant le fichier rootfs.gz fourni par celui que tu auras construit toi-même à partir de ton système. Une fois cela fait, la construction de l'iso peut se faire directement par la commande genisoimage, comme expliqué ici (honnêtement je ne comprends pas cette commande, que je n'ai jamais utilisée) :

    http://www.slitaz.org/fr/doc/handbook/hacking-livecd.html#gen-iso


    3) Pour construire ce fichier rootfs.gz, tazUSB (contrairement à tazlito, je crois) utilise une commande "magique", qui est indiquée dans la page "Hacking LiveCD" :
    find . -print | cpio -o -H newc | lzma e -si -so > ../rootfs.gz

    C'est cette commande qui fait tout ou presque, et qu'il faut comprendre un peu pour pouvoir l'adapter à sa propre configuration.

    Elle est formée de trois commandes enchainées (le symbole "|" sert à combiner des commandes en passant à la suivante le résultat de la précédente) :

    - "find . -print" produit la liste des fichiers (avec leur chemin) contenus dans le répertoire "." qui est le répertoire courant. Tu peux la tester dans ton home, pour voir :
    $ find /home/tux -print

    - "cpio -o -H newc" produit à partir de cette liste un fichier d'archive, unique, contenant tous les fichiers en question, donc ici toute l'arborescence à partir du répertoire courant.

    - "lzma e -si -so > ../rootfs.gz" comprime ce fichier au format lzma (compression plus grande que celle de gzip, par exemple, et rapide à décompresser mais longue à produire... cette commande pourra prendre 30 mn ou davantage) puis, avec la partie "> ../rootfs.gz" de la commande, le fichier compressé est placé dans le répertoire parent ".." et nommé "rootfs.gz".

    Pour créer ton propre système Live à partir de ce qui se trouve dans ton disque dur, la seule partie à modifier dans cette commande est "find . -print".

    En effet tu dois la lancer à partir de la racine de ton système (où tu te places par la commande "cd /") et en même temps tu ne dois pas tout inclure dedans : par exemple il faut exclure les fichiers de log, les fichiers temporaires contenus dans /tmp ou les fichiers indiquant l'état actuel du processeur (au lieu de l'état "au repos" dont on doit partir).


    J'ai un peu oublié comment modifier cette commande "find" : ce n'est pas tout-à-fait simple, et du reste il faut la modifier aussi en fonction de la façon dont tu as personalisé ton système. Par exemple j'ai ajouté un répertoire /users dans lequel je monte au démarrage le contenu d'une autre partition (contenant des données que je partage entre mes différents linux). Je dois donc inclure le répertoire /users dans le rootfs.gz comme point de montage mais pas son contenu !

    À toi de me dire si ce que j'ai expliqué jusqu'ici t'éclaire : si c'est du chinois, inutile que je continue, sinon je reviendrai compléter ce qui manque.

    Cordialement,

    LuX.
  • claudemclaudem January 2010
    Pour commencer : merci
    En effet ce n'est pas simple.
    Je pars au soleil pour 2 semaines, donc j'essayerai en février.
  • kerdannekerdanne February 2010
    Bonjour LuX,

    Tout d'abord merci pour ton explication laquelle répond en partie à mes préoccupations (Cf. http://forum.slitaz.org/index.php/discussion/660/creer-.iso-bootable-de-sa-slitaz/#Item_1).

    Néanmoins, je reste curieux de la suite de ton post. Est-il possible de faire les manip' dont tu parle à partir d'un systeme personnalisé en live ? Enfin, l'utilitaire isomaster ne pourrait-il pas simplifier ces manip' ?

    Si je résume bien :

    1- il faut créer un fichier rootfs.gz
    2- ajouter à l'image iso de base ses propres fichiers de configurations (lesquels ?)
    3- modifier le rootfs.gz d'origine par le sien
    4- enregistrer la nouvelle image iso ?? (comment et est-elle bootable ?)

    Cordialement,
  • LuXLuX February 2010
    Bonjour Kerdanne,

    oui, tu peux créer ton iso, intégrant toutes tes personalisations, à partir du système en train de tourner, qu'il soit live ou pas.

    Je ne connais pas l'utilitaire isomaster, il se peut très bien qu'il convienne mieux, il faut essayer.

    Il y a 1001 façons de créer à partir de Slitaz ton propre système live personnalisé. Les outils tazlito et tazusb servent tous les deux à ça, avec des optiques et des fonctionalités différentes. Celle que j'ai proposée est "générique", au sens où elle consiste à reprendre dans tazusb l'étape-coeur de création du nouveau rootfs.gz, et à faire toutes les autres étapes avant et après à la main, pour être sûr d'avoir exactement la personalisation qu'on veut. Ce n'est donc pas la plus directe, et si tu en trouves une qui produit directement ce que tu veux alors c'est à l'évidence la meilleure solution pour toi.

    Dans la liste d'étapes de ton résumé de "ma" méthode, je dirais plutôt :

    1) Il existe au départ un rootfs.gz qui est celui à partir duquel a été construit l'ensemble de ton système Slitaz de départ (à l'exception du noyau), lorsque tu l'as installé à partir de l'iso officielle ;

    2) Tu n'as pas besoin de revenir à ce rootfs.gz initial, seulement de partir de ton système installé pour créer un nouveau rootfs.gz, qui incluera toutes les modifications personnelles que tu as ajoutées à Slitaz.

    À tes deux questions, je n'ai malheureusement pas de réponse directe :

    - Quelles fichiers de configurations inclure dans ton roofs.gz ? C'est plutôt à toi de dire ce que tu as ajouté par rapport au système initial, et que tu souhaites inclure dans ton rootfs.gz personalisé (voir ci-après, la deuxième partie de ce long post).

    - Une fois créé le bon rootfs.gz, comment créer l'iso ? Comme je l'ai dit, n'ayant pas de graveur je ne me suis jamais soucié de réaliser cette dernière étape. Apparemment une fois que tu as mis dans un répertoire toute la structure utile pour l'iso (la même structure que tu vois dans l'iso elle-même quand tu la monte avec "mount -o loop ...") il suffit pour créer l'iso d'appliquer la grosse commande 'genisoimage' que je t'ai indiquée dans le handbook.

    http://www.slitaz.org/fr/doc/handbook/hacking-livecd.html#gen-iso

    Voici maintenant la suite-et-fin de mon précédent message : concrètement, comment créer le rootfs.gz ?

    Je suis retourné voir dans le script /usr/bin/tazusb et j'y ai retrouvé les lignes utiles :
    # Create list of files
    find /bin /etc /init /sbin /var /dev /lib /root /usr >/tmp/list

    for dir in /home /proc /sys /tmp /mnt /media /media/cdrom /media/flash /media/usbdisk
    do
    echo $dir >>/tmp/list
    done

    Cette étape écrit dans un fichier /tmp/list une simple liste de fichiers avec leurs chemins. Cette liste inclus :

    - d'une part les répertoires /bin /etc /init /sbin /var /dev /lib /root /usr et tout leur contenu (donc entre autres tous les paquets installés et leurs fichiers de configurations --EDIT: /init n'est pas un répertoire mais un script et il est essentiel, voir PPS en fin de message--) ;

    - d'autre part les répertoires /home /proc /sys /tmp /mnt /media /media/cdrom /media/flash /media/usbdisk mais juste ces répertoires, pas leurs contenus.

    Tu noteras en particulier que le répertoire /boot n'est pas inclus, et ne doit pas l'être car il sera recréé au démarrage de ton système live.

    Juste après dans /usr/bin/tazusb cette liste apparait la fameuse commande magique :
    cat /tmp/list | cpio -o -H newc | lzma e -si -so > /rootfs.gz


    Donc si tu n'as rien d'autre à inclure dans ton rootfs.gz que ce que tazusb inscrit dans cette liste /tmp/list, il te suffit pour créer le rootfs.gz d'utiliser la commande faite pour cela dans tazusb :
    # tazusb writefs lzma

    Dans le cas contraire il te faudra ajouter à la main les autres trucs que tu auras éventuellement créés ailleurs dans ton système. Pour cela tu devras créer toi-même une liste /tmp/list comme le fait tazusb ci-dessus avec la commande find et la boucle for, et y ajouter à la main ce que tu veux inclure en plus (donc notamment les noms de répertoires qui sont listés ci-dessus juste après "find"), avant de lancer la commande "cat /tmp/list | cpio..." ci-dessus pour créer le bon rootfs.gz.

    Par exemple j'avais ajouté dans mon système, entre autres, un répertoire /users comme point de montage pour une partition de données. Comme ce répertoire ne figurait pas dans la liste ci-dessus il n'était pas inclus dans le rootfs.gz créé par tazusb. J'ai donc dû créer ma propre liste avec find, en imitant le fonctionnement de tazusb, et y ajouter une ligne contenant juste "/users". Ensuite j'ai pu créer mon rootfs.gz à la façon de tazusb à partir de cette liste personalisée.

    Y'a plus qu'à...

    Cordialement,
    LuX.

    PS : Je serais offline la semaine prochaine.

    PPS : Super important !!! Lorsque tu as installé Slitaz sur ton disque dur, tu as peut-être effacé l'exécutable "init" qui se trouvait à la racine. Il est essentiel de l'inclure dans ton rootfs.gz (donc dans la liste /tmp/list) : c'est lui qui rend ce système compressé bootable. Tu pourras récupérer ce script à partir d'une iso officielle, montée avec l'option "-o loop" de la commande "mount" comme je te l'ai déjà indiqué.
  • kerdannekerdanne March 2010
    Bonjour LuX,

    Tout d'abord merci pour ta réponse et pour le temps que tu y as passé.

    je n'ai pas eu le temps de l'étudier mais cela me semble complet et détaillé. Je m'y attelerais prochainement;

    encore merci et bonne continuation.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Sign In Apply for Membership

SliTaz Social