Script de génération des ISO Custom

From Le Wiki de debian-fr.xyz
Jump to: navigation, search


 ATTENTION : Ce document est en cours de rédaction!!! De nombreux changements vont encore intervenir, il manque beaucoup d'éléments et d'explications.


Les ISOs custom du forum debian-fr.xyz sont générées à l'aides des scripts qui se trouvent sur cette page.

Ils sont largement améliorables et rien n'est figé.

Vous pouvez en discuter ici (page de discussion) ou sur le forum. Et ce sera apprécié...

Le principe:

  1. On part d'une ISO LIVE DEbian qui contient l'installeur qu'on monte et copie dans un répartoire.
  2. A l'aide de debbotstrap on crée un système de fichier (dans les scripts qui suivent c'est stable amd64, rien ne vous empêche de changer).
  3. Avec chroot on "customise" le système de fichiers (Noyau, Gestionnaire de fenêtre, Utilitaires, etc.).
  4. Avec mksquashfs on recrée le filesystem.squashfs qu'on copie dans la LIVE Debian.
  5. Avec xorriso on reconstruis l'ISO.

J'utilise apt-cacher-ng. Si ce n'est pas votre cas, remplacez

Proxy="/10.10.10.2:9999"

par

Proxy=""

Script de lancement

# cat live-custom-start.sh 
#!/bin/bash
### Variables:
Architecture="amd64"
Branche="stable"
Proxy="/10.10.10.2:9999"
Chemin_base="/var/local"
Nom_chroot="custom"
Chemin_chroot=$Chemin_base/$Nom_chroot
	
iso="debian-live-8.7.1-amd64-standard.iso"
mkdir -p $Chemin_base/iso
# TEST MONTAGE ISO - Sortie si montée
if mount | grep $iso > /dev/null; then
        echo "ISO déjà montée - Impossible de continuer"
        exit
else
        mount -o loop $Chemin_base/$iso $Chemin_base/iso
fi
rm -rf debian
cp -rp iso debian
umount /var/local/iso
	
# TEST MONTAGE PSEUDOS SYSTEMES DE FICHIERS - Sortie si montés
if mount | grep $Nom_chroot > /dev/null; then
	echo "Pseudo systèmes de fichiers montés - Impossible de continuer"
	exit
else
	:
fi
	
# PREPARATION CHROOT + DEBOOTSTRAPING
rm -rf $Chemin_chroot
mkdir -p $Chemin_chroot
	
apt install -y debootstrap
debootstrap --arch $Architecture $Branche $Chemin_chroot http:/$Proxy/httpredir.debian.org/debian/
	
mount --bind /dev/pts $Chemin_chroot/dev/pts/
mount --bind /proc $Chemin_chroot/proc/
mount --bind /sys $Chemin_chroot/sys/
	
#On copie dans le futur chroot les fichiers dont nous aurons besoin, ainsi que le script de personnalisation du chroot
cp -R $Chemin_base/fichiers_chroot/* $Chemin_chroot/tmp/
cp $Chemin_base/personnalisation_chroot.sh $Chemin_chroot/usr/local/bin/personnalisation_chroot.sh
	
# ENTREE DANS LE CHROOT + PERSONALISATION
chroot ./custom personnalisation_chroot.sh
rm $Chemin_chroot/usr/local/bin/personnalisation_chroot.sh
	
umount -l $Chemin_chroot/dev/pts/
umount -l $Chemin_chroot/proc/
umount -l $Chemin_chroot/sys/
	
# CREATION ISO
/var/local/make-custom-iso.sh
exit 0

Script chroot

# cat personnalisation_chroot.sh
#!/bin/bash
### Variables
utilisateur="debian"
mot_de_passe="debian"
### Bureau: mate xfce4 ou lxde
bureau="xfce4"
	
cp /tmp/hostname /etc/hostname
cp /tmp/hosts /etc/hosts
cp /tmp/mailname /etc/mailname
cp /tmp/sources.list.chroot /etc/apt/sources.list
	
chmod 1777 /dev/shm/
apt update
apt install -y dialog dbus
dbus-uuidgen > /var/lib/dbus/machine-id
	
export HOME=/root
	
apt install -y locales
dpkg-reconfigure locales
dpkg-reconfigure console-data
dpkg-reconfigure keyboard-configuration
dpkg-reconfigure tzdata
	
apt install -y linux-image-amd64 live-boot
apt upgrade -y
	
encrypted=$(perl -e 'printf("%s\n", crypt($ARGV[0], "password"))' "$mot_de_passe")
useradd -m -p $encrypted -s /bin/bash $utilisateur
echo 'root:debian'|chpasswd
	
apt install --ignore-missing -y $(grep -vE "^\s*#" /tmp/programmes/base.liste | tr "\n" " ")
apt install --ignore-missing -y $(grep -vE "^\s*#" /tmp/programmes/utilitaires.liste | tr "\n" " ")
apt install --ignore-missing -y $(grep -vE "^\s*#" /tmp/programmes/firmware.liste | tr "\n" " ")
apt install --ignore-missing -y $(grep -vE "^\s*#" /tmp/programmes/autres_fs.liste | tr "\n" " ")
apt install --ignore-missing -y $(grep -vE "^\s*#" /tmp/programmes/internet.liste | tr "\n" " ")
apt install --ignore-missing -y $(grep -vE "^\s*#" /tmp/programmes/x11.liste | tr "\n" " ")
	
usermod -a -G lp,floppy,audio,video,cdrom,plugdev,power,netdev,scanner debian
	
if [ $bureau == "lxde" ]
then
apt install --ignore-missing -y $(grep -vE "^\s*#" /tmp/programmes/lxde.liste | tr "\n" " ")
  elif [ $bureau == "mate" ]
  then
  apt install --ignore-missing -y $(grep -vE "^\s*#" /tmp/programmes/mate.liste | tr "\n" " ")
else
apt install --ignore-missing -y $(grep -vE "^\s*#" /tmp/programmes/xfce4.liste | tr "\n" " ")
fi

mkdir -p /home/debian/Images
cp /tmp/debian/Images/* /home/debian/Images/
mkdir -p /home/debian/.config/autostart
cp /tmp/debian/.xinitrc /home/debian/.xinitrc

if [ $bureau == "lxde" ]
then
mkdir -p /home/debian/.config/pcmanfm/LXDE
cp /tmp/debian/.config/pcmanfm/LXDE/desktop-items-0.conf /home/debian/.config/pcmanfm/LXDE/desktop-items-0.conf
  elif [ $bureau == "mate" ]
  then
  cp /tmp/debian/.config/autostart/gsettings.desktop /home/debian/.config/autostart/gsettings.desktop
else
  mkdir -p /home/debian/.config/xfce4/xfconf/xfce-perchannel-xml
  mkdir -p /home/debian/.config/xfce4/panel/{launcher-10,launcher-11,launcher-12,launcher-9}
  cp -r /tmp/debian/.config/xfce4 /home/debian/.config
  mkdir -p /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/
  mv /tmp/xfce4-panel.xml /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/
fi
	
cp /tmp/debian/.config/autostart/conky.desktop /home/debian/.config/autostart/conky.desktop
cp /tmp/debian/.conkyrc /home/debian/.conkyrc
chown -R debian:debian /home/debian
	
cp /tmp/sources.list.final /etc/apt/sources.list 
apt update
	
apt-get autoremove && apt-get clean
rm /var/lib/dbus/machine-id && rm -rf /tmp/*
	
exit 0

Script ISO

# cat make-custom-iso.sh 
#!/bin/bash
apt install -y syslinux squashfs-tools isolinux syslinux xorriso
	
mkdir -p /var/local/custom/binary/{live,isolinux}
cp /var/local/custom/boot/vmlinuz-* /var/local/custom/binary/live/vmlinuz
cp /var/local/custom/boot/initrd.img-* /var/local/custom/binary/live/initrd
	
cd /var/local/
mksquashfs custom custom/binary/live/filesystem.squashfs -comp xz -e boot
	
cp /usr/lib/ISOLINUX/isolinux.bin /var/local/debian/isolinux/
cp /usr/lib/syslinux/modules/bios/* /var/local/debian/isolinux/
cp /usr/share/misc/pci.ids /var/local/debian/isolinux/
cp /var/local/custom/binary/live/filesystem.squashfs /var/local/debian/live/filesystem.squashfs
cp /var/local/custom/binary/live/vmlinuz /var/local/debian/live/vmlinuz
cp /var/local/custom/binary/live/initrd /var/local/debian/live/initrd.img
cp /var/local/fichiers_iso/memtest86+.bin /var/local/debian/live/memtest86+.bin
cp /var/local/fichiers_iso/splash.png /var/local/debian/isolinux/splash.png
cp /var/local/fichiers_iso/isolinux/* /var/local/debian/isolinux/
	
# Preparation pour EFI
mkdir -p /var/local/debian/efi/boot
cp /var/local/fichiers_iso/Shell.efi /var/local/debian/efi/boot/Bootx64.efi
echo 'live\vmlinuz initrd=live\initrd.img append boot=live components' > /var/local/debian/liveboot.nsh
chmod +x /var/local/debian/liveboot.nsh
	
cd /var/local
xorriso -as mkisofs -r -J -joliet-long -l -cache-inodes\
 -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -partition_offset 16 -A "XYZ Live"\
 -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot\
 -boot-load-size 4 -boot-info-table -o remaster.iso debian
	
exit 0

Lol (discussion) 30 mars 2017 à 10:32 (UTC)