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
# 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
# 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.

