# [howto] création LiveCD

## bouleetbil

Bonjour,

Suite à quelques demandes de howto pour la création d'un LiveCD.

j'ai décidé d'écrire ce mini Howto (qui pourra être plus détaillé si besoin) afin d'aider dans la création d'un LiveCD. 

1. Prérequis

.Une gentoo de base celle que vous utilisez au quotidien.

.Une gentoo qui représente la gentoo que fera office de LiveCD. Attention cette Gentoo doit être installée sur une et une seule partition !

J'appelerais GENTOO1 la gentoo que vous utilisez normalement et GENTOOLIVE la gentoo qui fera office de LiveCD

.Grub emergé GENTOO1. Vous pouvez configurer GRUB pour booter sur GENTOOLIVE. C'est plus simple que de modifier GENTOOLIVE par un chroot.

.Les outils squashfs installés sur la GENTOO1.

.Genkernel sur la GENTOOLIVE

2. Préparation de GENTOOLIVE

.Compiler le noyau avec Genkernel. Le linuxrc intégré dans l'initrd permet de gérer un livecd avec squashfs.

# genkernel --menuconfig --install all

(Ne pas oublier d'intégrer squahfs dans le noyau)

.Configurer votre GentooLive comme vous le souhaiter installer les logiciels, les fonds d'écran etc...

.Dans /boot/grub/ supprimer grub.conf et menu.lst. Les liens symboliques ne fonctionne pas avec grub en mode LiveCD.

.Créer dans /boot/grub un fichier menu.lst afin qu'il ressemble à cela :

versionNoyau représente le noyau créé avec genkernel.

```

default 0

timeout 10

splashimage=(cd)/boot/grub/splash.xpm.gz

title=Gentoo Linux Live

root (cd)

kernel (cd)/boot/kernel-genkernel-x86-versionNoyau  root=/dev/ram0 rw init=/linuxrc cdroot looptype=squashfs loop=/livecd.squashfs splash=verbose,fadein,theme:Metal-Tosh quiet CONSOLE=/dev/tty1

initrd (cd)/boot/initramfs-genkernel-x86-versionNoyau

```

.Créer un fichier /etc/fstablive avec ceci :

```

# /etc/fstab: static file system information.

# $Header: /home/cvsroot/gentoo-src/rc-scripts/etc/fstab,v 1.14 2003/10/13 20:03:38 azarah Exp $

#

# noatime turns off atimes for increased performance (atimes normally aren't

# needed; notail increases performance of ReiserFS (at the expense of storage

# efficiency).  It's safe to drop the noatime options if you want and to 

# switch between notail and tail freely.

# <fs>             <mountpoint>    <type>     <opts>            <dump/pass>

# NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.

#/dev/BOOT      /boot      ext2      noauto,noatime      1 1

#/dev/ROOT      /      xfs      noatime         0 0

#/dev/SWAP      none      swap      sw         0 0

#/dev/cdroms/cdrom0   /mnt/cdrom   iso9660      noauto,ro      0 0

/dev/fd0      /mnt/floppy   auto      noauto         0 0

# NOTE: The next line is critical for boot!

none         /proc      proc      defaults      0 0

## glibc 2.2 and above expects tmpfs to be mounted at /dev/shm for

# POSIX shared memory (shm_open, shm_unlink). 

# (tmpfs is a dynamically expandable/shrinkable ramdisk, and will

#  use almost no memory if not populated with files)

# Adding the following line to /etc/fstab should take care of this:

#none         /dev/shm      tmpfs         defaults   0 0

/dev/loop0              /               squashfs        ro,defaults             0 0

tmpfs   /var/lib/init.d            tmpfs         defaults   0 0

```

C'est ce fichier qui sera utilisé comme fstab dans le mode LIVECD.

Si vous voulez ajouter la gestion de de détection de matérielle, installer les paquets kudzu-knoppix et autres utilitaires. Une petite recherche dans portage et sur le wiki vous permettra de trouver les logiciels disponibles.

Attention tous ce qui se trouce dans /etc /root /tmp /mnt est chargé en mémoire quand on boot sur le LiveCD. Donc il ne faut pas trop surcharger ces répertoires

3. Création du LiveCD :

.Booter sur la GENTOO1 et lancer ce script :

```

#GNU General Public License Version  

#This program is free software; you can redistribute it and/or

#modify it under the terms of the GNU General Public License

#version 2 as published by the Free Software Foundation.

#This program is distributed in the hope that it will be useful,

#but WITHOUT ANY WARRANTY; without even the implied warranty of

#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

#GNU General Public License for more details.

#!/bin/sh

#fichiers temporaires

livecd_target="/root/target"

#point de montage de votre gentoo LiveCD

livecd_source="/mnt/gentooLive" 

#ou creer le .iso

livecd_output="/root/live/livecd.iso"

mkdir /root/target

mkdir /root/live

#deplacement de portage pour installer grub sans internet avec le script d'installation

rm -rf "$livecd_source"/usr/portage/distfiles

mirrorselect  -s3 -b10 -o  | grep 'GENTOO_MIRRORS=' >> "$livecd_source"/etc/make.conf 

#chroot "$livecd_source" ebuild /usr/local/portage/sys-boot/grub/grub-0.96-r100.ebuild digest

mv "$livecd_source"/usr/portage "$livecd_source"/usr/portage2

mkdir "$livecd_source"/usr/portage

mkdir "$livecd_source"/usr/portage/sys-boot

mkdir "$livecd_source"/usr/portage/distfiles

cp -aRv "$livecd_source"/usr/portage2/eclass "$livecd_source"/usr/portage/eclass

cp -aRv "$livecd_source"/usr/portage2/profiles "$livecd_source"/usr/portage/profiles

cp -aRv "$livecd_source"/usr/portage2/header.txt "$livecd_source"/usr/portage/header.txt

cp -aRv "$livecd_source"/usr/portage2/skel.ChangeLog "$livecd_source"/usr/portage/skel.ChangeLog

cp -aRv "$livecd_source"/usr/portage2/skel.ebuild "$livecd_source"/usr/portage/skel.ebuild

cp -aRv "$livecd_source"/usr/portage2/skel.metadata.xml "$livecd_source"/usr/portage/skel.metadata.xml

cp -aRv "$livecd_source"/usr/portage2/sys-boot/grub "$livecd_source"/usr/portage/sys-boot

chroot "$livecd_source" emerge grub #va telecharger les fichiers necessaires 

# Liste des dossiers à exlcure:

exclude_dir="/usr/portage2 /usr/src /proc /dev /usr/share/doc /usr/doc/usr/share/man /usr/man /tmp /var/tmp /var/log /var/cache /var/db "

#Vous pouvez en ajouter

# efface ancien iso

rm  -f "$livecd_output"

# efface ancien fichiers temporaires

rm -rf "$livecd_target"

mkdir  "$livecd_target"

#mise en place du fstabLive

mv "$livecd_source"/etc/fstab "$livecd_source"/etc/fstabdd

mv "$livecd_source"/etc/fstablive "$livecd_source"/etc/fstab

cp -a  "$livecd_source"/boot "$livecd_target"

rm -f  "$livecd_source"/etc/mtab

touch  "$livecd_source"/etc/mtab

echo -e "\nCreation squashfs...\n"

for i in $exclude_dir; do

       exclude_sqfs="$exclude_sqfs $livecd_source$i"

done

#création du fichier squashfs

mksquashfs "$livecd_source" "$livecd_target"/livecd.squashfs -e $exclude_sqfs

echo -e "\nCreation image ISO dans /root/live ...\n"

cd /

mkisofs -J -R -l -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4-boot-info-table -z -iso-level 4  -c livecd -o $livecd_output $livecd_target/ > /dev/null 2>&1

#remet le bon fstab

mv "$livecd_source"/etc/fstab "$livecd_source"/etc/fstablive

mv "$livecd_source"/etc/fstabdd "$livecd_source"/etc/fstab

#remet portage en place

rm -rf "$livecd_source"/usr/portage

mv "$livecd_source"/usr/portage2 "$livecd_source"/usr/portage

#Suppression fichiers temporaires

rm -Rf /root/target

echo "Image iso créée dans /root/live"

```

4. Script d'installation :

.Vous pouvez créer un installeur pour ce LiveCD, il suffit d'intégrer ce script dans GENTOOLIVE :

```

#GNU General Public License Version  

#This program is free software; you can redistribute it and/or

#modify it under the terms of the GNU General Public License

#version 2 as published by the Free Software Foundation.

#This program is distributed in the hope that it will be useful,

#but WITHOUT ANY WARRANTY; without even the implied warranty of

#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

#GNU General Public License for more details.

#!/bin/sh

#Les variables

BACK_TITLE="OS Installeur"

TEMP_FILE=/var/log/temp

LOG_FILE=/var/log/log.txt

CDROM_MOUNT_POINT=/mnt/cdrom

RepInstall=/mnt/gentoo

FileSquash=/mnt/cdrom/livecd.squashfs

FileTar=/mnt/cdrom/files

sourceSquash=/mnt/squash

SysFichier="ext3"

userInput=""

PartDDChoix=""

LiveCD=0

#Les fonctions

##############################################################################

#L'installation

##############################################################################

function installOS()

{

let boxHeight=7

if [ $LiveCD == 1 ]; then

   echo "Installation de Gentoo" > $LOG_FILE

   RepInstall="/mnt/gentoo"

   dialog --backtitle "$BACK_TITLE" \

   --title "Installation" \

   --yesno "Cela va installer Gentoo sur votre ordinateur.\

      Désirez-vous continuer ? \n \

      Pensez à créer les partitions si besoin dans le menu configuration."\

      16 70

   if [ $? -eq 1 ]; then

      #On quitte

      exitInstaller

   fi

   

   # choix de la la partition

   PartDD=""

   umount $RepInstall

   title="Choix de la partition Root"

   message="Sélectionner la partition Root."

   SelChoixPartition

   PartDD=$PartDDChoix

   if [ $PartDD =="" ]; then 

      #On retourne au debut!

      title="Erreur"

      message="Il faut une partition."

      echo "Aucune partition choisie" >> $LOG_FILE

      showMessageBox

      installOS

   fi

   showSysFile

   TypePartition=$SysFichier

   echo "Systeme de fichier : $TypePartition " >> $LOG_FILE

   title="Choix de la partition Swap"

   message="Sélectionner la partition Swap."

   SelChoixPartition

   SwapMont=$PartDDChoix

   echo "Partion swap : $SwapMont " >> $LOG_FILE

   # Formater la partition oui/non 

   dialog --backtitle "$BACK_TITLE" \

   --title "Installation LiveCd" \

   --yesno "\n Désirez-vous formater $PartDD ?" \

   16 70

   if [ $? -eq 1 ]; then

      echo "Pas de formatage "

   else

      mkfs.$TypePartition $PartDD

      echo "Formatage de $PartDD " >> $LOG_FILE

   fi

   mount -t $TypePartition $PartDD $RepInstall

   LigneMtab=""

   #traitement de LigneMtab

   LigneMtab=$(grep $RepInstall /etc/mtab)

   if [$LigneMtab == ""]; then 

      #il y a probleme

      title="Erreur"

      message="Aucune partition root trouvée pour $PartDD ."

      echo "Pas de partition Root " >> $LOG_FILE

      showMessageBox

      installOS

   fi

        

   executeOK="f"

   if [ $SwapMont != '' ] ; then

      # Formater la partition  swap oui/non

      dialog --backtitle "$BACK_TITLE" \

      --title "Installation LiveCd" \

      --yesno "\n Désirez-vous formater et activer votre partition swap ?" \

      16 70

      if [ $? -eq 1 ]; then

      echo "Pas de formatage "

      else

         mkswap $SwapMont  

         swapon $SwapMont 

         echo "Activation et formatage de la partition swap " >> $LOG_FILE         

         sleep 2

      fi

   fi

   

   if [ -d $RepInstall ]; then

          #creation du point de montage pour le fichier squash

          mkdir $sourceSquash >> $LOG_FILE

          mount $FileSquash $sourceSquash -t squashfs -o loop 2>> $LOG_FILE

          dialog --backtitle "$BACK_TITLE" \

      --title "Installation LiveCd" \

      --yesno "\n Gentoo va être installé sur $RepInstall " \

      16 70

      if [ $? -eq 1 ]; then

          exit  2>> $LOG_FILE #/dev/null

      fi

   title="Installation"

   message="Copie des fichiers en cours..."

      showInfoBox

   echo "Début de la copie des fichiers " >> $LOG_FILE

        cp -Rva $sourceSquash/* $RepInstall  && executeOK="t"

        cp -vp /etc/resolv.conf $RepInstall/etc/resolv.conf

        cp -Ra /dev $RepInstall

   echo "Copie des fichiers terminées " >> $LOG_FILE

   fi

    if [ $executeOK = "t" ]; then

         

          cd $RepInstall

        #chroot environnement

          mkdir $RepInstall/proc

          #mkdir $RepInstall/usr/local/portage

          mount -t proc none $RepInstall/proc

      

     disk=${LigneMtab:0:9}

     #Installation de grub oui/non

          rm -R $RepInstall/boot/grub

           dialog --backtitle "$BACK_TITLE" \

           --title "GRUB" \

           --yesno "\n Désirez vous installer grub ? " \

           16 70

         if [ $? -eq 1 ]; then

           #Mise a jour du menu.lst si grub

           #demander ou se trouve menu.lst afin de le mettre à jour

           echo "Pas encore implémenté"

         else

          echo "Installation de grub " >> $LOG_FILE

            chroot $RepInstall emerge grub

       cp -vpf /boot/grub/menu.lst $RepInstall/boot/grub/grub.conf

       chroot $RepInstall ln -s /boot/grub/grub.conf  /boot/grub/menu.lst

            diskGrub=""   

       OptionGrub=""

            case $disk in

                   "/dev/hda1" ) diskGrub='(hd0,0)'

                    ;;

                   "/dev/hda2" ) diskGrub='(hd0,1)'

                    ;;

                   "/dev/hda3" ) diskGrub='(hd0,2)'

                    ;;

                   "/dev/hda4" ) diskGrub='(hd0,3)'

                    ;;

                   "/dev/hda5" ) diskGrub='(hd0,4)'

                    ;;

                   "/dev/hda6" ) diskGrub='(hd0,5)'

                    ;;

                   "/dev/hda7" ) diskGrub='(hd0,6)'

                    ;;

                   "/dev/hda8" ) diskGrub='(hd0,7)'

                    ;;

                   "/dev/hdb1" ) diskGrub='(hd1,0)'

                   ;;

                   "/dev/hdb2" ) diskGrub='(hd1,1)'

                    ;;

                   "/dev/hdb3" ) diskGrub='(hd1,2)'

                    ;;

                   "/dev/hdb4" ) diskGrub='(hd1,3)'

                   ;;

                   "/dev/hdb5" ) diskGrub='(hd1,4)'

                    ;;

                   "/dev/hdb6" ) diskGrub='(hd1,5)'

                   ;;

                   "/dev/hdb7" ) diskGrub='(hd1,6)'

                    ;;

                   "/dev/hdb8" ) diskGrub='(hd1,7)'

                    ;;

                   "/dev/hdc1" ) diskGrub='(hd2,0)'

                    ;;

                   "/dev/hdc2" ) diskGrub='(hd2,1)'

                    ;;

                   "/dev/hdc3" ) diskGrub='(hd2,2)'

                    ;;

                   "/dev/hdc4" ) diskGrub='(hd2,3)'

                    ;;

                   "/dev/hdc5" ) diskGrub='(hd2,4)'

                    ;;

                   "/dev/hdc6" ) diskGrub='(hd2,5)'

                    ;;                           

                   "/dev/hdc7" ) diskGrub='(hd2,6)'

                    ;;

                   "/dev/hdc8" ) diskGrub='(hd2,7)'

                    ;;

                   "/dev/hdd1" ) diskGrub='(hd3,0)'

                    ;;

                   "/dev/hdd2" ) diskGrub='(hd3,1)'

                    ;;

                   "/dev/hdd3" ) diskGrub='(hd3,2)'

                    ;;

                   "/dev/hdd4" ) diskGrub='(hd3,3)'

                    ;;

                   "/dev/hdd5" ) diskGrub='(hd3,4)'

                    ;;

                   "/dev/hdd6" ) diskGrub='(hd3,5)'

                    ;;

                   "/dev/hdd7" ) diskGrub='(hd3,6)'

                    ;;

                   "/dev/hdd8" ) diskGrub='(hd3,7)'

                    ;;

         "/dev/sda1" ) diskGrub='(hd0,0)'

                    OptionGrub="doscsi"

                    ;;

                    * )

                    title="Erreur"

                    message="La partition racine n'a pas étée trouvée\n\n\

                    Vous devez éditer menu.lst manuellement"

                    let boxHeight=7

                    showMessageBox

                    diskGrub="erreur"

              esac

            if [ $diskGrub == "erreur" ]; then

                nano $RepInstall/boot/grub/grub.conf

      echo "Pas trouvé de partition racine pour Grub " >> $LOG_FILE

            else

      #modification menu.lst   

              sed -i 's:(cd):'$diskGrub':' $RepInstall/boot/grub/grub.conf

      sed -i 's:cdroot:'real_root=$disk':' $RepInstall/boot/grub/grub.conf

      sed -i 's:looptype=squashfs:'':' $RepInstall/boot/grub/grub.conf

      sed -i "s:loop=/livecd.squashfs:resume2=$SwapMont $OptionGrub:" $RepInstall/boot/grub/grub.conf

      #resume2=$SwapMont dans le cas ou le noyau prendrait en charge suspend2

      echo "menu.lst mis a jour " >> $LOG_FILE

                #fin modification menu.lst   

            fi

      

      #MAj de /etc/mtab sinon l'installation de grub ne fonctionne pas

      mbrDD=${LigneMtab:0:9}

      echo "$mbrDD / $TypePartition  rw,noatime 0 0" > $RepInstall/etc/mtab

      

      #Suppression du fichier contenant les derniers devices de grub

      rm $RepInstall/boot/grub/device.map 

      chroot $RepInstall grub-install --no-floppy  ${LigneMtab:0:8}

      echo "Installation de Grub sur le mbr " >> $LOG_FILE

         fi

         #Mettre a  jour fstab

    echo "Mise à  jour de /etc/fstab " >> $LOG_FILE

         mv $RepInstall/etc/fstab $RepInstall/etc/fstablive

         #ce fichier pourra servir pour recréer un livecd

   echo "# This file is edited by fstab-sync - see 'man fstab-sync' for details       ">  $RepInstall/fstab 

   echo "# /etc/fstab: static file system information.                                  " >> $RepInstall/etc/fstab

   echo "# $Header: /home/cvsroot/gentoo-src/rc-scripts/etc/fstab,v 1.14 2003/10/1320 :03:38 azarah Exp $  ">> $RepInstall/etc/fstab

   echo "#                                    " >> $RepInstall/etc/fstab

   echo "# noatime turns off atimes for increased performance (atimes normally aren't   " >> $RepInstall/etc/fstab

   echo "# needed; notail increases performance of ReiserFS (at the expense ofs torage  " >> $RepInstall/etc/fstab

   echo "# efficiency).  It's safe to drop the noatime options if you want and to       " >> $RepInstall/etc/fstab

   echo "# switch between notail and tail freely.                                       " >> $RepInstall/etc/fstab

   echo "                                                                               " >> $RepInstall/etc/fstab

   echo "# <fs>             <mountpoint>    <type>     <opts> <dump/pass>               " >> $RepInstall/etc/fstab

   echo "                                                                               " >> $RepInstall/etc/fstab

   echo "# NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.     " >> $RepInstall/etc/fstab

   echo "#/dev/BOOT      /boot      ext2      noauto,noatime      1 1                   " >> $RepInstall/etc/fstab

   echo "                                                                               " >> $RepInstall/etc/fstab

   echo "#/dev/cdroms/cdrom0   /mnt/cdrom   iso9660      noauto,ro      0 0             " >> $RepInstall/etc/fstab

   echo "/dev/fd0      /mnt/floppy   auto      noauto         0 0                       " >> $RepInstall/etc/fstab

   echo "                                                                               " >> $RepInstall/etc/fstab

   echo "                                                                               " >> $RepInstall/etc/fstab

   echo "                                                                               " >> $RepInstall/etc/fstab

   echo "# NOTE: The next line is critical for boot!                                    " >> $RepInstall/etc/fstab

   echo "none         /proc      proc      defaults      0 0                            " >> $RepInstall/etc/fstab

   echo "                                                                               " >> $RepInstall/etc/fstab

   echo "# glibc 2.2 and above expects tmpfs to be mounted at /dev/shm for              " >> $RepInstall/etc/fstab

   echo "# POSIX shared memory (shm_open, shm_unlink).                                  " >> $RepInstall/etc/fstab

   echo "# (tmpfs is a dynamically expandable/shrinkable ramdisk, and will              " >> $RepInstall/etc/fstab

   echo "#  use almost no memory if not populated with files)                           " >> $RepInstall/etc/fstab

   echo "# Adding the following line to /etc/fstab should take care of this:            " >> $RepInstall/etc/fstab

   echo "                                                                               " >> $RepInstall/etc/fstab

   echo "none         /dev/shm   tmpfs      defaults      0 0                           " >> $RepInstall/etc/fstab

   #Mise a jour partition Root

   echo "$disk               /                $TypePartition     defaults        1 1    " >> $RepInstall/etc/fstab

   if [ $SwapMont != '' ] ; then

           echo "$SwapMont            none                    swap    sw           0 0    ">> $RepInstall/etc/fstab

        fi

   

       #Quitter l'installeur

       message="Gentoo a été copié sur votre Disque dur \n\n\

       L'historique de l'installation est disponible dans $LOG_FILE\n\n\

       N'oubliez pas de synchroniser votre arbre de portage : \n\n\

       # emerge sync"

       echo "Installation terminee " >> $LOG_FILE

       showMessageBox

       exitInstaller

       

  else

          message="Un problème est survenu durant la copie des fichiers,consulter $LOG_FILE "

     echo "Problème de copie :-(" >> $LOG_FILE

          showMessageBox

  fi

else

   title="Warning"

   let boxHeight=7

   message="Le LiveCd n'a pas été trouvé"

   showMessageBox

fi

return

}

##############################################################################

# Information

##############################################################################

function showMessageBox()

{

getBoxWidth

dialog --backtitle "$BACK_TITLE" \

--title "$title" \

--msgbox "\n$message" \

$boxHeight $boxWidth

return

}

##############################################################################

# Apparition d'une boite d'information

##############################################################################

function showInfoBox ()

{

getBoxWidth

dialog --backtitle "$BACK_TITLE" \

--sleep 3 \

--title "$title" \

--infobox "\n$message" \

5 $boxWidth

return

}

##############################################################################

#Choix systeme de fichier

##############################################################################

function showSysFile()

{

dialog --backtitle "$BACK_TITLE" \

--title "Systeme de fichier disponible" \

--menu "Selection :" \

18 60 6 \

"reiserfs" "Reiser fs" \

"ext3" "ext3" \

"ext2" "ext2" \

"xfs" "xfs" \

"jfs"  "jfs"  2> $TEMP_FILE

if [ $? -eq 0 ]; then

 installMethod=$(cat $TEMP_FILE)

 rm -f $TEMP_FILE

 SysFichier=$installMethod

elif [ $? -eq 1 ]; then

 SysFichier="ext3"

 #Il faut un systeme de fichiers. Par défaut ext3   

fi

}

############################################################################## 

#Recherche des partitions connues

##############################################################################

function SelChoixPartition()

{

rm -f $TEMP_FILE

find /dev/hd??  >> $TEMP_FILE

find /dev/sd??  >> $TEMP_FILE

rm $TEMP_FILE.2nd 2> /dev/null

echo "Debut analyse partition"

tmp=""

cat $TEMP_FILE |

while read line

do 

   tmp=$(grep ${line:5:9} /proc/partitions)

   if [ ${tmp:1:1} !="" ] ; then

      #Trouver dans /proc/partitions

      grep ${line:5:9} /proc/partitions |awk '{print "/dev/"$4 "     /dev/"$4":Taille:" int($3/1000000)"GB  \n"}' >> $TEMP_FILE.2nd

   fi

done

#toutes les partitions possible

local radioList=$(cat $TEMP_FILE.2nd)

rm $TEMP_FILE.2nd

let boxHeight=12

dialog --backtitle "$BACK_TITLE" \

--title "$title" \

--menu "$message" \

18 60 6  \

$radioList 2> $TEMP_FILE

if [ $? -eq 0 ]; then

userInput=$(cat $TEMP_FILE)

rm -f $TEMP_FILE

fi

PartDDChoix=$userInput

return 

}

##############################################################################

# Apparition d'une boite d'information

##############################################################################

function showInfoBox ()

{

getBoxWidth

dialog --backtitle "$BACK_TITLE" \

--sleep 3 \

--title "$title" \

--infobox "\n$message" \

5 $boxWidth

return

}

##############################################################################

# quitter installeur

##############################################################################

function exitInstaller()

{

title="Quitter"

message="A bientôt"

let boxHeight=7

showMessageBox

exit 0

}

#Lancement du script :

if [ -s $FileSquash ]; then

 echo "LiveCD detecte"

 LiveCD=1

 installos

else

 echo "LiveCD non trouvé"

 exitInstaller

fi

```

Astuces : La gentoo1 peux trés bien être une autre distribtution comme ubuntu. Il faut juste que cette distribution intégre les outils squashfs et grub.

Pour alléger votre LiveCD ajouter à USE -debug => diminue la taille des éxecutables, -man -exemple -exemples -doc => pour ne pas installer les fichiers d'aides. 

Le script de création pourrait servir à d'autre distribution, il faut juste intégrer le fichier linuxrc dans l'initrd et que le noyau supporte squashfs.

Pour le moment je n'ai pas le temps de détailler plus donc si vous rencontrez un problème, postez un message   :Wink: 

----------

## geekounet

Ha merci pour le howto !!  :Smile: 

J'ai pas encore pris le temps de tout lire, mais j'avais envie de me faire mon livecd perso depuis qq temps.

----------

## Antares

Merci pour le partage de tes scripts, cela va m'etre tres utile !!  :Smile: 

----------

## SoukoussMan

Génial..Je vais essayer des que possible..

Quelqu'un a déjà tester a partir de cette explication et de ces scripts ?

----------

## bouleetbil

bonjour,

Oui moi   :Laughing:   pour mes livecd. Par contre maintenant, j'utilise syslinux au lieu de grub pour le gestionnaire de boot.

----------

## ganymede

Salut bouleetbill, et merci pour ton howto.

J'aurais deux questions avant de m'y mettre :

Sur syslinux : quels avantages y a-t-il à l'utiliser et est-ce que cela change beaucoup la façon de procéder ?La doc. gentoo mentionne un autre outil qui peut (entre autres) générer des live-cd : catalyst. Est-ce que tu l'as essayé, et si oui, qu'en penses-tu ?

----------

## bouleetbil

Salut,

Pour syslinux cela change pas grand chose. Par contre, je n'utilise pas la version de portage mais une version ubuntu afin de mettre un splash. C'était pour régler un problème de boot sur une machine. Je n'ai pas essayé avec les dernières versions de grub. Donc, il est même possible que le problème soit réglé maintenant.   :Question: 

J'ai essayé catalyst j'ai jamais réussi à aller jusqu'au bout. De plus, je trouve qu'au niveau personnalisation c'est assez limité.

----------

## coachllb

suite à un message posté dans le forum, on m'a renvoyé verrs ce tuto qui est clair et simple.

j'ai donc crée une gentoo dans une partition montée dans /mnt/gentoo. C'est ma gentoolive. J'ai testé un boot dessus, elle fonctionne.

j'ai ensuite exécuté le script en modifiant /mnt/gentoolive par /mnt/gentoo

le script se termine en me disant que l'iso est créee. Or je n'ai aucun fichier iso dans /root/live.

cependant il y a eu une erreur lors de l'émerge de grub. Mais le script a continué donc je devrais avoir un iso.

Je vais essayer de trouver l'erreur pour grub

vvoici l'erreur :

```

touch: setting times of `/var/tmp/portage/grub-0.97-r2/.unpacked': Function not implemented

!!! ERROR: sys-boot/grub-0.97-r2 failed.

Call stack:

  ebuild.sh, line 1539:   Called dyn_unpack

  ebuild.sh, line 712:   Called die

!!! IO Failure -- Failed 'touch .unpacked' in /var/tmp/portage/grub-0.97-r2

!!! If you need support, post the topmost build error, and the call stack if relevant.

```

----------

## guitoo

Tiens ça me donne une idée de cadeau pour noel. Je vais faire ma tournée de livecd/clé usb

Si on veut intégrer les drivers nvidia et ati, comment on peut faire pour détecter la carte graphique et générer un Xorg.conf pour la carte?

Comment on peut faire pour monter automatiquement une clé usb sur /home/<user>? Avec un reconnaissance de la clé et une lecture du login et mot de passe sur la clé.

----------

## coachllb

je n'ai plus l'erreur pour grub c'est corrigé.

par contre lors de l"éxécution du script j'obtiens :

```
Cannot stat exclude dir/file /mnt/gentoo/usr/doc/usr/share/man, ignoring: No such file or directory

Cannot stat exclude dir/file /mnt/gentoo/usr/man, ignoring: No such file or directory

Creating little endian 3.0 filesystem on /root/target/livecd.squashfs, block size 65536.

Error in reading file, skipping...: Input/output error

Error in reading file, skipping...: Input/output error

Error in reading file, skipping...: Input/output error

......

Little endian filesystem, data block size 65536, compressed data, compressed metadata, compressed fragments

Filesystem size 412685.61 Kbytes (403.01 Mbytes)

        38.36% of uncompressed filesystem size (1075704.40 Kbytes)

Inode table size 572681 bytes (559.26 Kbytes)

        29.09% of uncompressed inode table size (1968703 bytes)

Directory table size 536921 bytes (524.34 Kbytes)

        46.50% of uncompressed directory table size (1154641 bytes)

Number of duplicate files found 3360

Number of inodes 59651

Number of files 50084

Number of fragments 4595

Number of symbolic links  5059

Number of device nodes 3

Number of fifo nodes 0

Number of socket nodes 0

Number of directories 4505

Number of uids 3

        root (0)

        ldap (439)

        portage (250)

Number of gids 11

        lp (7)

        ldap (439)

        mail (12)

        tty (5)

        man (15)

        nogroup (65533)

        utmp (406)

        root (0)

        portage (250)

        uucp (14)

        lpadmin (106)

Creation image ISO dans /root/live ...

Image iso créée dans /root/live

```

Mais je n'ai toujours pas d'image dans le répertoire live.

----------

## bouleetbil

@coachllb

Pour les erreurs :

```

Cannot stat exclude 

```

Celle la c'est pas grave le répertoire n'existe pas.

Par contre celle-ci :

```
Error in reading file, skipping...: Input/output error 
```

 me semble plus grave

Pour commencer tu peux changer cette ligne :

```

mkisofs -J -R -l -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4-boot-info-table -z -iso-level 4  -c livecd -o $livecd_output $livecd_target/ > /dev/null 2>&1 

```

par

```

mkisofs -J -R -l -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4-boot-info-table -z -iso-level 4  -c livecd -o $livecd_output $livecd_target/ 

```

Comme cela si une erreur est détectée elle sera visible

Puis ajouter ces deux lignes afin de vérifier les répertoires :

```

echo "Source : $livecd_target/ "

echo "ISO : $livecd_output "

```

Question bête  /mnt/gentoo  est monté ?

@guitoo

 *Quote:*   

> Si on veut intégrer les drivers nvidia et ati, comment on peut faire pour détecter la carte graphique et générer un Xorg.conf pour la carte? 

 

avec le paquet x11-misc/mkxf86config

 *Quote:*   

> Comment on peut faire pour monter automatiquement une clé usb sur /home/<user>? Avec un reconnaissance de la clé et une lecture du login et mot de passe sur la clé.

 

Je comprend pas l'histoire du mot de passe sinon pour monter la clé sur un répertoire. une regle udev devrait fonctionner : http://www.minet.net/spip/spip.php?article147

----------

## dmganges

Bonjour,

Je connais très peu Linux, mais j'ai administré Unix pendant une dizaine d'années.

A la retraite, je redécouvre un environnement que j'ai beaucoup apprécié...

Je suis revenu à Linux par la clé USB Mandriva, et de fil en aiguille je suis remonté à Gentoo par le LiveCD SystemRescueCD que j'ai légèrement modifié.

Autant dire que je mesure l'énorme travail que vous avez réalisé.

Je n'ai pas encore exploité les scripts que vous avez déposé ici, ni parcouru la totalité de votre site ! ...

mais je ne manquerai pas de le faire car je suis très intéressé par le format LiveCD.

2 mots : BRAVO et MERCI

@+

----------

## bouleetbil

Bonjour,

Merci, c'est toujours sympa des compliments   :Laughing: 

@+

----------

## doulinux

Bjr booleetbil,

çà y est, j'ai fait mes toutes premières armes en gentoo, autant dire que je ne suis pas encore au point...

Comme coachllb, je n'ai pas d'image iso.

J'ai supprimé > /dev/null 2>&1 

Il semble qu'il y a un pb de taille :

NB: arrêt à 93%

Creation squashfs...

Cannot stat exclude dir/file /home1/root/proc2/gentoolive/usr/doc/usr/share/man, ignoring: No such file or directory

Cannot stat exclude dir/file /home1/root/proc2/gentoolive/usr/man, ignoring: No such file or directory

Parallel mksquashfs: Using 2 processors

Creating little endian 3.1 filesystem on /home1/root/proc2/target/livecd.squashfs, block size 131072.

[========================================================    ] 58548/62508  93%

Exportable Little endian filesystem, data block size 131072, compressed data, compressed metadata, compressed fragments, duplicates are removed

Filesystem size 555362.13 Kbytes (542.35 Mbytes)

        48.32% of uncompressed filesystem size (1149238.15 Kbytes)

Inode table size 603757 bytes (589.61 Kbytes)

        29.99% of uncompressed inode table size (2013175 bytes)

Directory table size 590922 bytes (577.07 Kbytes)

        47.35% of uncompressed directory table size (1247937 bytes)

Number of duplicate files found 4347

Number of inodes 61521

Number of files 53067

Number of fragments 3256

Number of symbolic links  3960

Number of device nodes 0

Number of fifo nodes 0

Number of socket nodes 0

Number of directories 4494

Number of uids 3

        root (0)

        portage (250)

        haldaemon (102)

Number of gids 11

        lp (7)

        mail (12)

        man (15)

        locate (245)

        tty (5)

        nogroup (65533)

        utmp (406)

        portage (250)

        uucp (14)

        lpadmin (106)

        ssmtp (408)

Creation image ISO dans  /home1/root/proc2/target

genisoimage: Boot image load size invalid.

Image iso créée dans  /home1/root/proc2/livecd.iso

/home1/root/proc2

# ll target

total 372568

drwxr-xr-x 3 root root      4096 Oct 21 13:25 .

drwx------ 7 root root      4096 Oct 21 13:25 ..

drwxr-xr-x 3 root root      4096 Oct 19 17:38 boot

-rwx------ 1 root root 381116433 Oct 21 13:27 livecd.squashfs

/home1/root/proc2

# df .

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sdb6             10325748   6101448   3699780  63% /home1

/home1/root/proc2

# e2fsck -c /dev/sdb3

e2fsck 1.40.9 (27-Apr-2008)

Checking for bad blocks (read-only test): done

/dev/sdb3: Updating bad block inode.

Pass 1: Checking inodes, blocks, and sizes

Pass 2: Checking directory structure

Pass 3: Checking directory connectivity

Pass 3A: Optimizing directories

Pass 4: Checking reference counts

Pass 5: Checking group summary information

/dev/sdb3: ***** FILE SYSTEM WAS MODIFIED *****

/dev/sdb3: 274534/1311552 files (2.4% non-contiguous), 735672/2622611 blocks

3,6 Go libres pour 381 Mo, çà devrait passer... Non ?

Ou bien la limite est ailleurs ?

Ma gentooLive est une gentoo de nOOb : kernel-genkernel-x86-2.6.25-gentoo-r8, xorg, ati-drivers, kde-base, firefox + qq petits outils de vieux vim, slocate...

Quand vous aurez le temps, si vous avez une idée, je suis preneur.

MERCI !

PS: Je suis en fait dmganges, j'ai abandonné cet identifiant qui correspondait aussi à une @Mail saturée de spams

----------

## doulinux

Bjr,

Il y a une petite coquille au niveau du mkisofs, il manque un espace entre '4' et '-boot-info-table'

Il faut lire :

mkisofs -J -R -l -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -z -iso-level 4  -c livecd -o $livecd_output $livecd_target/

D'où le  *Quote:*   

> genisoimage: Boot image load size invalid. 

 

Donc le .iso est généré.

J'ai emergé grub dans gentoolive et mis en commentaire :

 *Quote:*   

> #chroot "$livecd_source" emerge grub #va telecharger les fichiers necessaires
> 
> 

 

Non seulement gain de temps, mais l'emerge recréait le lien grub.conf et menu.lst --> blocage au boot sur prompt GRUB>

Donc boot correct, copie un peu longue dans tmpfs, mais OK !!!

Bien sûr je ne peux pas démarrer startx, création de fichiers temporaires impossible sur le CD, quel âne je fais !

Je vais intégrer unionfs dans gentoolive ou faire un fs en mémoire...

Ben, MERCI booleetbil, ce tuto est SUPER   :Exclamation: 

Sauf que c'est pas juste, moi qui croyais avoir trouvé un job pour mes soirées d'hivers... c'est largement compromis !

Bon j'ai quand même encore de quoi gratter pour ""tout"" comprendre  :Very Happy: 

----------

## bouleetbil

Salut,

cool si sa marche encore et bravo  :Laughing: 

----------

## tux_i

bonjour,

Est-ce que cette méthode fonctionne toujours ?

il y a une étape que je ne comprend pas 

j'ai actuellement ma distrib gentoo sur mon disque dur. Pour la passer en Live il faut que je la recopie dans /mnt/gentoolive ?

merci

----------

