Script iso2iso-fb72r
Un article de Projet de documentation fug-fr .
Ce scritp permet de créer une iso livecd FreeBSD "frog-fb72r.iso" (ou $NOMISO) à partir de l'iso FreeBSD "7.2-RELEASE-i386-disc1.iso" (ou $IMGISO). Ecrit sous OpenBSD, il tourne tel quel sous celui-ci. Pour un autre BSD, il est possible que vous deviez modifier la syntaxe de quelques commandes.
Note : ce script fonctionne également avec 8.0-RELEASE. Pensez simplement à modifier les trois premières variables ainsi.
# variables IMGISO="8.0-RELEASE-i386-disc1.iso" VERSION="8.0-RELEASE" NOMISO="frog-fb80r.iso"
[modifier] Le script
Vous trouverez quelques explications dans les commentaires.
#!/bin/sh # iso2iso-fb72r # copyleft Marc alias Marck Fug-fr http://fug-fr.org # cree une iso livecd FreeBSD $NOMISO a partir de $IMGISO # root : placez ce script dans un repertoire avec $IMGISO # executez le script vous obtenez $NOMISO # paquets FreeBSD installes : base, kernel GENERIC, man pages # repertoires en ram : /etc, /tmp, /root, /var # attention script OpenBSD : controlez la syntaxe des commandes # variables IMGISO="7.2-RELEASE-i386-disc1.iso" VERSION="7.2-RELEASE" NOMISO="frog-fb72r.iso" ## preparation # sommes nous root ? ## merci a Nix46 if [ "`id -u`" != "0" ] ; then echo "Sorry, this must be done as root." exit 1 fi # iso fbsd presente ? if [ ! -f $IMGISO ] ; then echo "Image $IMGISO introuvable" exit 1 fi # iso livecd presente ? if [ -f $NOMISO ] ; then mv $NOMISO $NOMISO.old fi # repertoire pour monter iso fbsd if [ ! -d mntiso ] ; then mkdir mntiso fi # montage iso fbsd case `uname` in "OpenBSD"|"NetBSD") vnconfig svnd0 $IMGISO mount -t cd9660 /dev/svnd0c mntiso/ ;; "FreeBSD") ggatel create -u 0 $IMGISO mount -t cd9660 /dev/ggate0 mntiso/ ;; *) echo "Impossible de monter $IMGISO" exit 1 ;; esac # repertoire pour livecd if [ -d livecd ] ; then echo "Suppression du repertoire livecd" rm -rf livecd fi mkdir livecd mkdir livecd/frog ## installation # base fbsd echo "Installation de la base $VERSION" cat mntiso/$VERSION/base/base.?? | tar xpzf - -C livecd/ # noyau fbsd echo "Installation du noyau $VERSION" cat mntiso/$VERSION/kernels/generic.?? | tar xpzf - -C livecd/ rmdir livecd/boot/kernel/ mv livecd/GENERIC/ livecd/boot/kernel # pages man fbsd echo "Installation des pages man $VERSION" cat mntiso/$VERSION/manpages/manpages.?? | tar xpzf - -C livecd/ ## configuration # fichier /etc/fstab echo " /dev/acd0 / cd9660 ro 0 0 " > livecd/etc/fstab # fichier /etc/rc.conf echo " hostname=\"frog.marsh\" cron_enable=\"NO\" moused_enable=\"YES\" usbd_enable=\"YES\" keymap=\"fr.iso.acc\" saver=\"star\" " > livecd/etc/rc.conf # fichier /etc/rc.d/mdtmp echo "Configuration pour mdtmp" echo " #!/bin/sh # PROVIDE: mdtmp # REQUIRE: mdetc # BEFORE: tmp . /etc/rc.subr name=\"mdtmp\" start_cmd=\"mdtmp_start\" stop_cmd=\":\" mdtmp_start() { echo \"Creating a memory filesystem for /tmp\" /sbin/mdmfs -s 32m md /tmp } load_rc_config \$name run_rc_command \"\$1\" " > livecd/etc/rc.d/mdtmp chmod +x livecd/etc/rc.d/mdtmp # fichier /etc/rc.d/mdroot echo "Configuration pour mdroot" tar cpzf livecd/frog/root.tar.gz -C livecd root/ echo " #!/bin/sh # PROVIDE: mdroot # REQUIRE: mdetc # BEFORE: . /etc/rc.subr name=\"mdroot\" start_cmd=\"mdroot_start\" stop_cmd=\":\" mdroot_start() { echo \"Creating a memory filesystem for /root\" /sbin/mdmfs -s 16m md /root /usr/bin/tar xpzf /frog/root.tar.gz -C / } load_rc_config \$name run_rc_command \"\$1\" " > livecd/etc/rc.d/mdroot chmod +x livecd/etc/rc.d/mdroot # fichier /etc/rc.d/mdvar echo "Configuration pour mdvar" tar cpzf livecd/frog/var.tar.gz -C livecd var/ echo " #!/bin/sh # PROVIDE: mdvar # REQUIRE: mdetc # BEFORE: var . /etc/rc.subr name=\"mdvar\" start_cmd=\"mdvar_start\" stop_cmd=\":\" mdvar_start() { echo \"Creating a memory filesystem for /var\" /sbin/mdmfs -s 64m md /var /usr/bin/tar xpzf /frog/var.tar.gz -C / } load_rc_config \$name run_rc_command \"\$1\" " > livecd/etc/rc.d/mdvar chmod +x livecd/etc/rc.d/mdvar # fichier /etc/rc.d/mdetc requis par les autres md* # a laisser en fin de configuration : tar de /etc echo "Configuration pour mdetc" echo " #!/bin/sh # PROVIDE: mdetc # REQUIRE: # BEFORE: hostid . /etc/rc.subr name=\"mdetc\" start_cmd=\"mdetc_start\" stop_cmd=\":\" mdetc_start() { echo \"Creating a memory filesystem for /etc\" /sbin/mdmfs -s 32m md /etc /usr/bin/tar xpzf /frog/etc.tar.gz -C / } load_rc_config \$name run_rc_command \"\$1\" " > livecd/etc/rc.d/mdetc chmod +x livecd/etc/rc.d/mdetc tar cpzf livecd/frog/etc.tar.gz -C livecd etc/ ## fin # autocopie du script cp `basename $0` livecd/frog/ # demontage iso fbsd umount mntiso/ case `uname` in "OpenBSD"|"NetBSD") vnconfig -u svnd0 ;; "FreeBSD") ggatel destroy -u 0 ;; *) echo "Impossible de demonter $IMGISO" exit 1 ;; esac # creation iso livecd mkisofs -R -gid 0 -uid 0 -b boot/cdboot -no-emul-boot -c .boot.catalog -o $NOMISO livecd/
[modifier] Personnalisation
Si vous le voulez, il vous est possible d'installer d'autres paquets de la base FreeBSD après la base et le noyau (et les pages man). Par exemple :
# jeux fbsd echo "Installation des jeux $VERSION" cat mntiso/$VERSION/games/games.?? | tar xpzf - -C livecd/
Pour ajouter des fichiers plus personnels, le plus simple est sans doute de créer un répertoire files dans le même répertoire que livecd et d'y placer les fichiers que vous souhaitez (de toute façon tout n'est pas scriptable !).
Un exemple très simple pour issue et motd. D'abord vous les créez:
# figlet -c Frog LiveCD > files/issue
# figlet -c Welcome > files/motd
Ensuite vous les copiez grâce au script après l'installation des paquets FreeBSD, mais avant la création des md* et surtout de leurs archives tar.
# personnalisation if [ -f files/issue ] ; then cp files/issue livecd/etc fi if [ -f files/motd ] ; then cp files/motd livecd/etc fi
Si vous souhaitez pouvoir installer de petits paquets comme nmap, lynx ou que-sais-je lors de l'utilisation du liveCD, il faut également créer un disque mémoire pour /usr/local. Pour cela vous pouvez insérer les lignes suivantes juste avant ou juste après la section # fichier /etc/rc.d/mdtmp.
# fichier /etc/rc.d/mduloc
echo "Configuration pour mduloc"
echo "
#!/bin/sh
# PROVIDE: mduloc
# REQUIRE: mdetc
# BEFORE: tmp
. /etc/rc.subr
name=\"mduloc\"
start_cmd=\"mduloc_start\"
stop_cmd=\":\"
mduloc_start()
{
echo \"Creating a memory filesystem for /usr/local\"
/sbin/mdmfs -s 128m md /usr/local
}
load_rc_config \$name
run_rc_command \"\$1\"
" > livecd/etc/rc.d/mduloc
chmod +x livecd/etc/rc.d/mduloc
Ainsi pkg_add, pkg_info ou pkg_delete fonctionneront correctement. Enfin pour installer des paquets lors de la création du liveCD, je ne peux pas tester, mais d'après d'anciens essais, cela devrait ressembler à :
# pkg_add -r -C livecd/ NOM_PAQUET
ou encore
# chroot livecd/ pkg_add -r NOM_PAQUET
Si cela ne fonctionne pas, il doit falloir copier /etc/resolv.conf dans le répertoire livecd/etc.

