Contenu | Rechercher | Menus

Annonce

Bientôt Ubuntu 16.04 LTS
Réservez vos DVD et clé USB Ubuntu-fr dès maintenant

En cas de déconnexions intempestives, merci de vous connecter à partir de cette page en cochant la case « Me connecter automatiquement lors de mes prochaines visites ».

#1 Le 28/02/2013, à 17:20

sylv_31
Membre

Live USB, personnalisation

Bonjour à tous,

Je dois faire une clé USB avec un Ubuntu qui "démarre tout seul", et qui lance un programme d'antivirus automatiquement, pour scanner le poste de travail.

Pour faire ça, j'ai créé une LiveUSB avec Lili USB Creator et une image ISO Ubuntu Desktop. C'est bien, ça marche.

Mais, il me reste 2 points :
- canaliser un peu plus l'utilisateur, quand il boote avec la clé; en particulier, retirer des options inutiles (install sur disque dur, ...), et des packages inutiles (firefox, ...), pour aller directement à "essayer ubuntu",
- déposer mes propres packages (scripts, anti-virus, ...) dans la distri, et faire qu'ils se lancent après le démarrage d'Ubuntu.

Merci d'avance

Hors ligne

#2 Le 01/03/2013, à 14:15

Maisondouf
Membre

Re : Live USB, personnalisation

Si tu veux juste scanner le poste il y a des solutions toutes prêtes : http://www.avira.com/fr/download/produc … cue-system.


ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor,  OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)

Hors ligne

#3 Le 01/03/2013, à 18:58

sylv_31
Membre

Re : Live USB, personnalisation

Merci, mais on m'impose les antivirus (Mc Afee ET Sophos).

Hors ligne

#4 Le 02/03/2013, à 12:50

Maisondouf
Membre

Re : Live USB, personnalisation

C'est vrai qu'ils sont mieux, il y a plus de pub lol


ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor,  OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)

Hors ligne

#5 Le 02/03/2013, à 15:16

jamesbad000
Membre

Re : Live USB, personnalisation

Bonjour,

Pour personaliser un live comme tu veux le faire, Il y a différentes approches :
- Faire une installation classique, la modiifier, puis utiliser un outil qui permet de la repackager en live. (Démarche utilisée me semble-t-il pour faire les distrib ubuntu,..)

- Extraire le contenu du squashfs de l'iso dans un répertoire, puis aller dedans en chroot pour le personaliser (à la ligne de commande). Puis reconstruire le squasfs et l'iso...
cette démarche est expliqué ici http://doc.ubuntu-fr.org/personnaliser_livecd.
La démarche est opérationnelle, je l'ai même "scripté" pour me faire des live cd à jour et avec des package additionnels. Mais attention, ce n'est pas "clé en main".

Il existe une variante qui permet de rentrer dans le squashfs en mode graphique, du devrait pouvoir remettre la main dessus en cherchant "personalisation live" dans le forum. Mais sachant qu'à chaque distrib il peux y avoir de subtils différence qui mettent l'outiliage en échec, je considère qu'il vaut mieux suivre une démarche ou l'on maitrise les manips.

Et dans tous les cas, si tu veux modifier le comportement du démarrage, il faut encore savoir ou intervenir (script de démarrage dans /etc/init.d, option de démarrage de l'utilisateur...)

Dernière modification par jamesbad000 (Le 02/03/2013, à 15:17)


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

En ligne

#6 Le 02/03/2013, à 19:33

sylv_31
Membre

Re : Live USB, personnalisation

Merci Jamesbad000,

La deuxième approche semble bien correspondre à ce que je dois faire. Le lien que tu donnes est assez explicite. Un peu long, mais pas mal. Je vais commencé par ça.
Tu dis que tu as des scripts ? Pour tout générer ? On peut en bénéficier ?

Merci en tout cas

Hors ligne

#7 Le 02/03/2013, à 20:45

jamesbad000
Membre

Re : Live USB, personnalisation

Pas de problème, je peux te passer les script, à condition que tu te contente d'un minimun d'explication et que tu sache t'en débrouiller après. Parce que ça reste assez technique à l'utilisation quand même.

Je te prépare un post, mais ça sera peut-être pas avant demain...


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

En ligne

#8 Le 02/03/2013, à 22:10

sylv_31
Membre

Re : Live USB, personnalisation

Super, c'est gentil.

Hors ligne

#9 Le 03/03/2013, à 18:56

jamesbad000
Membre

Re : Live USB, personnalisation

Edit - mise à jour des scripts le 12/10/2015. Testés sur 14.04 avec prise en charge du boot efi.

Voilà les script.

- Le répertoire ou ces script doivent se trouver va être également le répertoire ou vont être extrait l'iso et le squashfs et ou va être placé l'mage iso résultant. Il faut donc prévoir qq Go...
Edit: Les répertoires peuvent maintenant être associés par des liens symbolique. Mais attention le répertoire squashFs doit être dans un système de fichier qui supporte la gestion de droit linux (fat, ntfs exclus donc)

- A l'exécution, le répertoire courant doit être le répertoire contenant les scripts

- Le nom à affecter aux script, sa fonction, ainsi que les directives particulières sont en commentaire au début de chaque script. (Quoique pour la fonction, je me suis parfois contenté du message de "trace")

- En certain endroit, J'ai forcé la sortie brutale en cas de problème, sans toujours prévoir un message d'erreur explicite. Néanmoins, il y a pas mal de messages d'information qui permettent de repérer l'étape incriminée.

- On peut traiter un live 32 bits depuis une 64 bits, mais pas l'inverse !

- remarque importante, le packaging du kernel dans une 12.10 francisé m'a posé un problème que j'ai laissé de coté (au niveau du script buildSquasfs, et en lien avec kernel-remove)
Eventuellement, si tu rencontre ce cas de figure, je me pencherais sur le problème !
edit : ce problème a été corrigé, mais la mise à jour de kernel reste dépendante de l'implémentation sur le live qui évolue à chaque release.

# Script : uLive-updateIso.sh

# Ce script enchaine les script pour une simple remise à niveau de l'iso :
# Extract de l'iso et du squashfs, application des dernière mise à jour, reconstruction du squashfs et de l'iso

# Paramètre 
# 	$1 : L'iso à extraire

./uLive-extract.sh --nocheck "$1" && ./uLive-chroot.sh /chrootHostSharedDir/uLive-distUpgrade.sh && ./uLive-buildSquash.sh && ./uLive-buildIso.sh
#! /bin/bash

# script: uLive-extract.sh
# Extrait l'iso dans "./extract" et le squashfs dans "./squashFs"
# (Il peut s'agir de lien symbolique grace au "readlink" ajouté sur les commandes qui ne supporte pas les liens)

echo -e "\n ==== Extract live cd ====\n"
# Vérif sudo

if [ ! $USER = "root" ]; then
	echo "cette commande doit être lancée avec SUDO"
	exit 1
fi

check=true
wrkDir='.' # sens effet pour le moment

# Check the arguments.
while test $# -gt 0; do
	option="$1"
	shift

	case "$option" in
		# Pas de confirmation avant suppression des répertoires de travail
		-n|--nocheck) 
			check=false;; 

		-*) 
			echo "option $option invalide"; exit 1;;

		# toute autre valeurs est considérée comme le nom de fichier iso puis le répertoire de travail
		*) 
		  if [ -z "$isoFile" ]; then
		    isoFile="$option"
		  else
		    wrkDir="$option"
		  fi
	esac
done
# Vérif existance fichier iso 

if [ ! -f "$isoFile" ]; then
	echo "le fichier \"$isoFile\" n'existe pas."
	echo "Le 1er paramètre doit indiquer un nom de fichier image iso"
	exit 1
fi

echo "--> fichier iso : $isoFile"

# vérif validité éventuel lien vers répertoire extraction iso
extractCd="$(readlink -fn extractCd)"
[ $? != 0 ] && echo "Le chemin d'accès \"$(readlink -mn extractCd)\" indiqué par le lien "extractCd" est invalide" && exit 1

# vérif validité éventuel lien vers répertoire extraction squashFs
squashFs="$(readlink -fn squashFs)"
[ $? != 0 ] && echo "Le chemin d'accès \"$(readlink -mn squashFs)\" indiqué par le lien "squashFs" est invalide" && exit 1

# démontage du squashFs
if [ -e squashFs ]; then
	echo "--> Démontage répertoires du squashfs"
	! ./bindChroot.sh --unbind squashFs && echo "Terminus" && exit 1
fi

# Nettoyage répertoires de travail
umount ./mntCd

if [ -e "$extractCd" ] || [ -e "$squashFs" ]; then

	if [ $check == true ]; then

		echo "Confirmer la suppression des répertoires extractCd, squashFs O/N ?"
		read confSuppr

		if [ "$confSuppr" != "O" ]; then
			echo "Abandon"
			exit 1
		fi
	fi	
	echo "--> suppression des répertoires extractCd, squashFs"
	[ -e "$extractCd" ] && rm -R "$extractCd" 
	[ -e "$squashFs" ] && rm -R "$squashFs"
fi

mkdir -p "$extractCd" mntCd

# monte l'iso 
mount -o loop "$isoFile" ./mntCd

# Affiche & Enregistre le nom du fichier iso (sans le chemin d'accès, ni l'extention)
echo "$isoFile" | sed -e 's/.*\///g' -e 's/\.[^\.]\{0,3\}$//' | tee >extractCd/isoFile.txt

# extrait les fichiers du cd sauf le squash
echo "--> extraction fichiers du cd dans : $extractCd"
rsync --exclude=/casper/filesystem.squashfs -a mntCd/ extractCd
[ $? != 0 ] && echo "echec extraction de l'image iso" && exit 1

echo "--> extrait le squashfs dans $squashFs"
apt-get -y install squashfs-tools
unsquashfs -d "$squashFs" mntCd/casper/filesystem.squashfs
[ $? != 0 ] && echo "echec extraction du squashFs" && exit 1

# démonte l'image du cd
umount ./mntCd

exit 0
#!/bin/bash
# Script: uLive-buildSquash.sh

echo -e "\n ==== Reconstruction squashfs ====\n"
# Vérif sudo

if [ ! $USER = "root" ]; then
	echo "cette commande doit être lancée avec SUDO"
	exit 1
fi

! ./bindChroot.sh squashFs squashSh && echo "echec du montage : Terminus"  && exit 1;

# si le rerp ./profil existe
if [ -d profil ]; then
	echo "--> Mise à jour home personnalisé"
	rm -R squashFs/etc/skel/*
	cp -r profil/. squashFs/etc/skel
	chown -R root:root squashFs/etc/skel
else
	echo "--> Pas de home personnalisé"
fi

# == Si le noyau ou le initrd a été mis à jour, .. 
# il faut réinstaller la dernière version de kernel et le initrd dans casper :
echo "--> sup ancien kernel"
chroot squashFs /chrootHostSharedDir/kernel-remove.sh 1 --auto-remove

echo "--> install le kernel dans casper"
# cette façon de faire suppose qu'il n'y a qu'une seule version dans /boot (repose sur kernel-remove !)
mv -v squashFs/boot/vmlinuz-*-generic extractCd/casper/vmlinuz 
mv -v squashFs/boot/vmlinuz-*-generic.efi* extractCd/casper/vmlinuz.efi
mv -v squashFs/boot/initrd.img-*-generic* extractCd/casper/initrd.gz && gzip -dc extractCd/casper/initrd.gz | lzma -7 > extractCd/casper/initrd.lz && rm -v extractCd/casper/initrd.gz
# rm squashFs/boot/*

echo "--> nettoyage packages"
chroot squashFs apt-get autoremove
chroot squashFs apt-get autoclean
chroot squashFs apt-get clean

echo "--> construit le manifest du nouveau squashfs" 
chmod +w extractCd/casper/filesystem.manifest
chroot squashFs dpkg-query -W --showformat='${Package} ${Version}\n' > extractCd/casper/filesystem.manifest
cp extractCd/casper/filesystem.manifest extractCd/casper/filesystem.manifest-desktop

echo "--> Démontage rép dans squashFs"
./bindChroot.sh -u squashFs

echo "--> ménage dans squashFs"
rm -rf squashFs/tmp/* ~/.bash_history

echo "--> Supprime le fichier squashfs d'origine"
rm extractCd/casper/filesystem.squashfs

echo "--> Reconstruit le nouveau squashfs"
apt-get -y install squashfs-tools
mksquashfs "$(readlink -fn squashFs)" ./extractCd/casper/filesystem.squashfs
#! /bin/bash
# script: uLive-buildIso.sh

echo -e "\n ==== Reconstruction image iso ====\n"
# Vérif sudo

if [ ! $USER = "root" ]; then
	echo "cette commande doit être lancée avec SUDO"
	exit 1
fi

isoOutput="$1"
if [ "$isoOutput" = "" ]; then  
  isoOutput="isoOutput"; 
  [ ! -e "$isoOutput" ] && mkdir "$isoOutput"
fi


# vérif validité éventuel lien vers répertoire extraction iso
isoOutput="$(readlink -en $isoOutput)"
[ $? != 0 ] && echo "Le chemin d'accès \"$(readlink -mn isoOutput)\" indiqué par le lien "isoOutput" est invalide" && exit 1
echo "--> Répertoire cible de l'iso  : $isoOutput"

# Génère une checksum md5
echo "--> checksum md5"
cd extractCd
# bash -c "find . -path ./isolinux -prune -o -type f -not -name md5sum.txt -print0 | xargs -0 md5sum > md5sum.txt"

# ajout exclusion de efi.img qui est probablement modifié par xorriso et met en échec le test du cd !? de toute façon s'il n'est pas bon ça ne boot pas. Et si on peut lancer le test du cd c'est qu'on a bien pu booter (quoique... on pourrait démarrer sur isolinux pour tester...)
# ps probable que c'est pour la même raison que le rep isolinux est exclu. Mais tout le répertoire c'est abusif -> a voir
bash -c "find . -path ./isolinux -prune -o -type f -not -name md5sum.txt -not -name efi.img -print0 | xargs -0 md5sum > md5sum.txt"
cd ..

isoName=`head -n 1 extractCd/isoFile.txt`

echo "--> génère iso : $isoOutput/Custom-$isoName.iso"
apt-get -y install xorriso

xorriso -as mkisofs -r -V "$isoName" -o "${isoOutput}/Custom-$isoName.iso" -isohybrid-mbr /usr/lib/syslinux/isohdpfx.bin  -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot  -isohybrid-gpt-basdat -isohybrid-apm-hfsplus "$(readlink -en extractCd)"

# -partition_offset 16

# Methodes inadéquate pour un boot EFI
# genisoimage  -r -J -no-emul-boot -boot-load-size 4 -boot-info-table -b isolinux/isolinux.bin -c isolinux## /boot.cat -V "$isoName" -o "${isoOutput}/Custom-$isoName.iso" "$(readlink -en extractCd)" 

# si genisoimage non trouvé essayer mkisofs
# [ $? = 127 ] && mkisofs -r -V "$isoName" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o "${isoOutput}/Custom-$isoName.iso" "$(readlink -en extractCd)"
#! /bin/bash
# script: uLive-chroot.sh
# permet de passer en chroot dans le squashfs en assurant tous les montages de répertoires nécessaires
# Il est fortement déconseillé de faire le chroot directement sans passer par là. 

! ./bindChroot.sh squashFs squashSh  && exit 1;

export HOME=/root
export LC_ALL=C
#xhost +local:root
chroot squashFs $*
#xhost -local:root
#! /bin/bash
# script: bindChroot.sh
# Assure le montage et le démontage des répertoires et fichiers nécessaire à l'utilisation de certaines commandes dans le mode chroot
# attention, une fois le montage effectué, il est fortement déconseillé de tenter de supprimer le répertoire squashFs sans avoir procédé au démontage (option -u). Et ne pas perdre de vu que ce script est appelé automatiquement d'un peu partout pour effectuer le montage

usage() {
	echo -e "\nutilisation : bindChroot [-u] | [-f] rootDir [hostSharedDir]"
	echo "lie les répertoires & fichiers systèmes dans un répertoire racine pour chroot"
	echo
	echo "   -u, --unbind     : démonte les répertoires liés"
	echo "   -f, --force-bind : force le démontage + remontage"
	echo "   rootDir          : répertoire racine"
	echo "   hostSharedDir    : Répertoire partagé à lier dans la racine (dans /hostSharedDir. monté en read only) "
	echo 
	echo "Les répertoire /dev, /proc, /sys & /dev/pts ainsi que les fichiers /etc/resolv.conf et /etc/host seront liés  (ou déliés) dans le répertoire racine indiqué"
	echo 
	echo "En présence du paramètre hostSharedDir, et si celui-ci est déjà monté, aucune action n'est effectuée. Dans ce cas on peut toutefois utiliser l'option --force-bind pour forcer le remontage"
	echo
}

if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
	usage
	exit 0
fi

# Vérif sudo

if [ ! $USER = "root" ]; then
	echo "cette commande doit être lancée avec SUDO"
	exit 1
fi

unbind=false
hostSharedDir="*none"
hostSharedDirMounted=false
forceBind=false

argument () {
  opt="$1"
  shift

  if test $# -eq 0; then
      echo "$0: option requires an argument -- '$opt'" 1>&2
      exit 1
  fi
  echo "$1"
}

# Check the arguments.
while test $# -gt 0; do
	option="$1"
	shift

	case "$option" in

		-u|--unbind) 
			unbind=true;; 

		-f|--force-bind)
			forceBind=true;;

		-*) 
			echo "option $option invalide"; usage; exit 1;;

		# toute autre valeurs est d'abord considérée comme "rootDir" 
		# puis "répertoire d'échange du système hote"
		*) 
			if [ -z "$rootDir" ]; then rootDir="$option"; else hostSharedDir="$option"; fi;;
	esac
done

# supp éventuel slash final du rép raçine
# rootDir=$(echo "$rootDir" | sed -re 's/(.+)\/+$/\1/')
rootDir=$(readlink -en "$rootDir")

# contrôles
if [ -z "$rootDir" ]; then
	echo "Aucun répertoire racine indiqué pour chroot."
	usage
	exit 1
fi

if [ ! -d "$rootDir" ]; then
	echo "le répertoire racine $rootDir pour chroot n'existe pas."
	exit 1
fi

if [ ! $unbind ]; then
	if [ ! -d "$rootDir"/dev ]; then
		echo "Le répertoire système $rootDir/dev n'existe pas !"
		exit 1
	fi
fi

# test si rép partagé déjà monté
mount -l | grep -q "$hostSharedDir " && hostSharedDirMounted=true;

echo "unbind . . . : $unbind"
echo "rootDir  . . : $rootDir"
echo "hostSharedDir: $hostSharedDir, mouted=$hostSharedDirMounted"
echo "montage forcé: $forceBind"

# ===============================================================================================		
# === unbind ===
# ===============================================================================================		

if [ $unbind = true ] || [[ $forceBind = true  && $hostSharedDirMouted = true ]]; then

	echo -e "\n--> unbind $rootDir"

	# Démontage dans l'ordre inverse du montage : répertoire d'échange avec le system hote sert de témoin,
	# 		=> doit donc être démonté en 1er

 
	sedExpr="s,.* on +(\S*${rootDir}/\S+) .*,\1,"

	for mounted in $( mount -l | grep $rootDir/ | sed -re "${sedExpr}" | tac ); do 
		echo "unmount : ${mounted}"
		umount  -lf ${mounted}
	done

	# Vérification du démontage

	mounted=$(mount -l | grep "$rootDir/")
	if [ "$mounted" != "" ]; then
		echo -e "\ntous les répertoires n'ont pas été démontés :\n"
		echo "$mounted"

		echo -e "\nliste des processus utilisants $rootDir :\n"
		fuser "$rootDir"

		exit 3
	fi
	
	rm "$rootDir"/var/lib/dbus/machine-id
	# suppression répertoire d'échange
	[ -d "$rootDir"/chrootHostSharedDir ]	&& rmdir "$rootDir"/chrootHostSharedDir;
fi 

# ===============================================================================================		
# === bind ===
# ===============================================================================================

if [ $unbind = false ];then

	# si le montage n'est pas forcé et que que le répertoire d'échange est déjà monté, sortir

	[ $forceBind = false ] && [ $hostSharedDirMounted = true ] && echo -e "\n--> $hostSharedDir déjà monté." && exit 0;


	echo -e "\n-> bind $rootDir comme racine de chroot, avec $hostSharedDir comme répertoire partagé"

	# fonction de montage 

	mountBind() {
		mount --bind $1 $2

		if [ $? != 0 ]; then
			echo "echec du montage de $1 on $2"
			exit 1
		fi 
	}

	# montages Repertoires Sytèmes

	mountBind /dev  "$rootDir"/dev
	mountBind /proc "$rootDir"/proc
	mountBind /sys  "$rootDir"/sys
	mountBind /dev/pts "$rootDir"/dev/pts
	mkdir -p "$rootDir"/run/dbus/
	mountBind /run/dbus/ "$rootDir"/run/dbus/
	
	# afin d'utiliser la connexion réseau du système hôte
	[ ! -f "$rootDir"/etc/resolv.conf ] && touch "$rootDir"/etc/resolv.conf
	mountBind /etc/resolv.conf "$rootDir"/etc/resolv.conf
	[ ! -f "$rootDir"/etc/hosts ] && touch "$rootDir"/etc/hosts
	mountBind /etc/hosts "$rootDir"/etc/hosts

	# montage répertoire d'échange du système hote, en lecture seul (Sert de flag également)

	if [ "$hostSharedDir" != "*none" ]; then
		mkdir "$rootDir"/chrootHostSharedDir
		mountBind "$hostSharedDir" "$rootDir"/chrootHostSharedDir
		mount -o remount,ro "$rootDir"/chrootHostSharedDir
	fi

	chroot "$rootDir" sh -c 'dbus-uuidgen > /var/lib/dbus/machine-id'
	mount -l | grep "$rootDir"
fi

Les 2 script ci-dessous doivent être placés dans un sous répertoire ./squashSh (A ne pas confondre avec .squashFs !!) qui va être monté dans le ./squashFs/chrootHostSharedDir pour être accessibles en chroot

#! /bin/bash
# script: uLive-distUpgrade.sh

echo -e "\n ==== Mise à niveau distribution ====\n"

apt-get update && apt-get -y dist-upgrade
#!/bin/bash
# script: kernel-remove.sh

usage() {
	echo -e "\nUtilisation : kernel-remove [-s] | [-a] [N]"
	echo "supprime les packages d'une ou plusieurs versions de  kernel"
	echo
	echo "   -s, --select      : selection manuelle d'un kernel dans la liste"
	echo "   -a, --auto-remove : supression sans confirmation (Ignoré avec l'option -s)"
	echo "   N                 : nombre de versions de kernel à conserver (2 par défaut. Ignoré avec l'option -s) "
}

if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
	usage
	exit 0
fi

# Vérif sudo

if [ ! $USER = "root" ]; then
    echo "cette commande doit être lancée avec SUDO"
    exit 1
fi

keepCount=2
select=false
autoRemove=""

# Check the arguments.

while test $# -gt 0;  do
	option=$1
	shift

	case "$option" in

		-s|--select) 
			select=true;; 

		-a|--auto-remove)
			autoRemove="-y";;

		-*) 
			echo "option $option invalide"; usage; exit 1;;

		# toute autre valeur est considérée comme le nombre de versions de kernel à conserver
		*) 
			keepCount=$option;;
	esac
done

# **** --select incompatible avec --auto-remove !
# **** --select incompatible avec un nombre de versions à conserver

# Suppression auto

echo "auto-remove = $autoRemove" 

# Extrait et affiche liste des versions de kernel installées, triée par n° de version

kernelList=$(dpkg-query -W --showformat='${Package} ${Status}\n' linux-headers-* linux-image-* \
	| sed 	-re '/^linux-.*-([0-9]+\.[0-9]+\.[0-9]+-[0-9]+).* installed$/!d' \
				-e 's/^linux-.*-([0-9]+\.[0-9]+\.[0-9]+-[0-9]+).* installed$/\1/' \
	| sort -V | uniq
)

kernelCount=0

echo -e "\nversions de kernel installées" 
	for kernel in $kernelList; do
	((kernelCount+=1))	
	echo -e "$kernelCount\t$kernel"
done

[[ $kernelCount<2 ]] && echo "Impossible de supprimer le seul kernel existant" && exit 0;

# Selection manuel d'une version 

if [ $select = true ]; then 
	autoRemove=""
   echo -e "Indiquez le n° correspondant à la version à supprimer.\nq pour quitter"
   read selectedKernelNumber
	[ $selectedKernelNumber = "q" ] && exit;
	[[ $selectedKernelNumber<1 || $selectedKernelNumber>$kernelCount ]] && echo "Choix invalide" && exit 1
   oldKernel=`echo "$kernelList" | head -n "$selectedKernelNumber" | tail -n 1 | sed -re 's/(.+)$/linux-*\1*/'` 

# Selection automatique selon le nombre de version à conserver

else
    echo -e "\n$keepCount versions à conserver"
	[[ ${kernelCount} -le ${keepCount} ]] && echo "Aucune version de kernel à supprimer" && exit 0;

   # liste des versions de kernel à supprimer entre 2 '*' 
   oldKernel=`echo "$kernelList" | head -n "-$keepCount" | sed -re 's/(.+)$/linux-*-\1*/'` 
fi

echo -e "\nVersions de kernel à supprimer:" $oldKernel

# S'il existe des packages d'anciens kernel, les désinstaller

if [ "$oldKernel" != "" ]; then
    echo
    apt-get -V $autoRemove remove $(echo $(dpkg-query -W --showformat='${Package} ${Status}\n' $oldKernel | sed -e '/ installed/!d' | cut -d' ' -f1))
else 
    echo -e "Aucune\n"
fi

Les 2 script ci-dessous sont utilisé à la demande en considérant que le rép squashFs contient une distrib à modifier

Remarque: la façon d'activer les dépot à été mise en échec avec une 12.10 francisé, car les dépot inactifs on été retiré du sources.list ou lieu d'être en commentaire !

#! /bin/bash
# script: uLive-install.sh
# ajoute et retire des packages

# Vérif sudo

if [ ! $USER = "root" ]; then
	echo "cette commande doit être lancée avec SUDO"
	exit 1
fi

! ./bindChroot.sh squashFs squashSh  && echo "Terminus" && exit 1;

# Suppression composants windows
cd extractCd
rm -r pics autorun.inf wubi.exe
cd ..

# supression exemple
rm -R squashFs/usr/share/example-content

chroot squashFs apt-get remove simplecommeubuntu 

# remove language pack (ne conserve que fr et en)
chroot squashFs apt-get -V remove $(echo $(dpkg-query -W --showformat='${Package} ${Status} \n' | sed -re '/language-pack-\w\w-.*base .* installed/!d' -e '/pack-(en|fr)-/d' | cut -d' ' -f1))

chroot squashFs apt-get -V remove $(echo $(dpkg-query -W --showformat='${Package} ${Status} \n' | sed -re '/firefox-locale-\w\w.* .* installed/!d' -e '/locale-(en|fr)/d'  | cut -d' ' -f1))

# dpkg-query -W --showformat='${Package} ${Installed-Size} ${Status} \n' | sed -re '/language-pack-.* installed/!d'

echo  "==> Instal packets supplémentaires"
# ddrescue + testdisk -> activer dépot universe + apt-get update

# sed -i.bck -re 's,# (deb http://\S+ (\w|-)+ (universe|multiverse)),\1,' squashFs/etc/apt/sources.list
sed -i.bck -re 's,(deb http://\S+ (\w|-)+ main restricted),\1 universe multiverse ,' squashFs/etc/apt/sources.list

#sed  -re 's,(deb http://\S+ (\w|-)+) main (.*),\1 multiverse ,' squashFs/etc/apt/sources.list >> squashFs/etc/apt/sources.list

chroot squashFs apt-get update

# chroot squashFs apt-get install b43-fwcutter
chroot squashFs apt-get install squashfs-tools gdisk gddrescue testdisk smartmontools ncurses-hexedit p7zip-full chntpw baobab gparted xorriso nmap ecryptfs-utils


chroot squashFs apt-get install clamav rkhunter 
chroot squashFs /update-rc.d clamav-freshclam disable

chroot squashFs /chrootHostSharedDir/truecrypt-7.1a-setup-x64 #86 

chroot squashFs apt-get install ssh
# chroot squashFs apt-get install gedit
chroot squashFs apt-get install  wireshark


# remet la liste de dépots initiale (pas forcément une bonne idée pour les update futures)
#rm  squashFs/etc/apt/sources.list
# mv  squashFs/etc/apt/sources.list.bck squashFs/etc/apt/sources.list
# chroot squashFs apt-get check # Refait les caches pour y retirer les paquets universe/multiverse
#! /bin/bash
# script: uLive-configure.sh
# assure certain setup en mode question réponse (intervention de l'utilisateur nécessaire)

# Vérif sudo

if [ ! $USER = "root" ]; then
	echo "cette commande doit être lancée avec SUDO"
	exit 1
fi

! ./bindChroot.sh squashFs squashSh  && echo "Terminus" && exit 1;

echo "choisir les configuration suivante  : - Generic 105-key (Intl) PC - France - France - Alternative - Pas de touche AltGr - Pas de touche « compose » - UTF-8 - # latin1 et latin5  : langues de l'Europe de l'ouest et turc - VGA - 16 - /dev/tty[1-6]"
echo "Entrée pour continuer"
read reply  
./uLive-chroot.sh dpkg-reconfigure console-setup

./uLive-chroot.sh dpkg-reconfigure tzdata

Voilà, j'espère que tu pourra en faire qq chose. Eventuellement, je peux repréciser certains points d'utilisation, si ce n'est pas clair...

Dernière modification par jamesbad000 (Le 11/10/2015, à 23:32)


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

En ligne

#10 Le 04/03/2013, à 17:00

sylv_31
Membre

Re : Live USB, personnalisation

Super ! J'ai de la lecture !

Merci beaucoup ! smile:)

Hors ligne

#11 Le 07/03/2013, à 18:46

sylv_31
Membre

Re : Live USB, personnalisation

Ca y est, je m'en sors...

Merci beaucoup pour tes scripts, jamesbad000. Ils marchent très bien... J'arrive à faire mon ISO LiveUSB à la fin.

J'ai une question annexe : où se trouve dans le squashFs le/les programmes de lancement du user ubuntu dans sa session X. Je voudrais ne pas lancer le programme qui propose "Try Ubuntu" / "Install Ubuntu", mais un autre ?

Hors ligne

#12 Le 07/03/2013, à 22:18

jamesbad000
Membre

Re : Live USB, personnalisation

Ce que tu cites se sont les options du menu de boot iso. Elles ne sont pas dans le squashfs, mais dans le répertoire isolinux à la racine de l'iso. (isolinux est le pendant de grub pour le boot à partir de l'iso, il existe des sites spécialisés sur le sujet)

Si je regarde sur une 12.04 j'ai un fichier isolinux.cfg qui référence menu.cfg, qui référence txt.cfg.
Les options de menu en question sont dans ce dernier.
Après, il doit y avoir un lien avec les fichiers dans les différente langues, mais je n'ai jamais exploré cet aspect

Dernière modification par jamesbad000 (Le 07/03/2013, à 22:21)


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

En ligne

#13 Le 09/03/2013, à 14:00

sylv_31
Membre

Re : Live USB, personnalisation

Merci, j'ai commencé à regarder les conf d'isolinux.

J'aurais besoin d'un éclaircissement : si dans mon sqhashFs, en étant chrooté, j'installe un logiciel supplémentaire, non pas à partir d'un package, mais d'un tar, install.sh, ... . Après reconstruction du squashFs et de l'ISO, je devrais m'attendre à retrouver le logiciel dans mon LiveUSB ?

Hors ligne

#14 Le 09/03/2013, à 14:26

jamesbad000
Membre

Re : Live USB, personnalisation

Absolument. Après avoir passé la commande chroot, le répertoire squashFs devient / (la racine) dans le terminal ou tu as passé cette commande (et uniquement dans CE terminal)

Du coup tous ce que tu fais dans ce terminal, y compris les commandes que tu introduis, prennent comme référence cette racine.

Donc quand tu exécutes un simple

cat /etc/apt/sources.list

c'est la commande cat du squashfs qui s'exécute et non celle du ubuntu sur lequel tu as booté.
et c'est le contenu de /etc/apt/sources.list du squashfs qui s'affiche !

Dernière modification par jamesbad000 (Le 09/03/2013, à 14:30)


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

En ligne

#15 Le 09/03/2013, à 15:13

sylv_31
Membre

Re : Live USB, personnalisation

c'est ce que je pensais. Mais j'ai installé Sophos en /opt/ quand j'étais sous chroot squashFs, et dans mon LiveUSB, le /opt est vide...

Hors ligne

#16 Le 09/03/2013, à 15:36

jamesbad000
Membre

Re : Live USB, personnalisation

Est-ce que tu as déjà réussi cette installation dans des conditions "normal" ?

Autrement, si tu n'a pas dézingué le rep squashFs, rien ne t'interdit d'y retourner (avec uLive-chroot.sh) et de retenter la manip pour essayer de comprendre ce qui ne va pas.

Perso, je ne connais pas ce logiciel, et je ne pourrais pas t'aider sur son installation en particulier.
Mais éventuellement, tu me renvoi le contenu de ta console, si tu veux que je t'aide sur un problème de compréhension lié au chroot.

Dernière modification par jamesbad000 (Le 09/03/2013, à 18:18)


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

En ligne

#17 Le 09/03/2013, à 18:06

sylv_31
Membre

Re : Live USB, personnalisation

Oui, j'ai déjà réussi en normal. Mais je pense que j'ai fait un "chroot squashFs" direct quand j'ai installé le logiciel, plutôt que uLive-chroot.sh. Donc, j'ai dû manqué de pas mal de bind... Je regénère le squashFs, on va bien voir...

Hors ligne