Script iso2iso-fb72r

Un article de Projet de documentation fug-fr .

Jump to: navigation, search

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.