-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathiso
More file actions
executable file
·130 lines (107 loc) · 3.64 KB
/
iso
File metadata and controls
executable file
·130 lines (107 loc) · 3.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/bin/bash
#notes
# * ne marche que pour les iso avec squashfs (ubuntu par exemple, pas debian)
# todo
# * le but est d'ouvrir une fois, et de builder plusieurs fois si on teste quelque chose, faut faire tourner ce scénario
# * ./livecd.modified/iso/dest.iso, devrait pas être là
ABS=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd)
base=~/livecd.modified
case $1 in
install)
sudo apt install -y realpath squashfs-tools schroot genisoimage
;;
on)
echo "*** chargement iso $iso"
if [ -e "$base" ]; then
echo "$base existe déjà, nettoyer avant le script"
exit 1
fi
if [ ! -f "$2" ]; then
echo "second paramètre : iso de départ"
exit 1
fi
iso=$(realpath $2)
echo "*** extraction iso"
mkdir $base
cd $base
echo $iso > source.txt
mkdir iso squashfs mnt
sudo mount -o loop $iso mnt
cp -a mnt/. iso
sudo umount mnt
echo "*** extraction squashfs"
sudo mount -t squashfs -o loop iso/casper/filesystem.squashfs mnt
sudo cp -a mnt/. squashfs
echo "*** mount's"
sudo umount mnt
sudo mount --bind /proc squashfs/proc
sudo mount --bind /sys squashfs/sys
sudo mount -t devpts none squashfs/dev/pts
sudo mount --bind /dev squashfs/dev
sudo mount --bind /dev/pts squashfs/dev/pts
sudo mount --bind /var/run/dbus/ squashfs/var/run/dbus/
echo "*** copie des confs"
cp squashfs/etc/hosts .
cp squashfs/etc/apt/sources.list .
sudo cp /etc/resolv.conf squashfs/etc/resolv.conf
sudo cp /etc/hosts squashfs/etc/hosts
sudo cp /etc/apt/sources.list squashfs/etc/apt/sources.list
;;
off)
if [ ! -e "$base" ]; then
echo "$base n'existe pas, aucune iso en cours de travail"
exit 1
fi
if [ -z "$2" ]; then
echo "second paramètre : iso de départ"
exit 1
elif [ -e "$2" ]; then
echo "l'iso $2 existe déjà"
exit 1
fi
iso=$2
cd $base
echo "*** écriture iso $iso"
sudo cp ./hosts squashfs/etc/hosts
sudo cp ./sources.list squashfs/etc/apt/sources.list
sudo rm squashfs/etc/hosts
#todo, un peu violent non, trop générique ?
#killall -9 mysqld mysqld_safe apache2 winbindd sshd smbd nmbd freshclam
#echo "umount killall $?"
#sleep 10
#todo, en fait il faut reprendre le code du clean, umount de tout, et si un seul survit on arrête
#todo voir si ce umount est nécessaire pour le rebuild iso, et donc s'il faut le laisser là
sudo umount squashfs/proc/sys/fs/binfmt_misc squashfs/proc squashfs/sys squashfs/dev/pts squashfs/dev squashfs/dev/pts
echo "umount return $?"
chmod a+w iso/casper/filesystem.manifest
sudo chroot squashfs dpkg-query -W --showformat='${Package} ${Version}\n' > iso/casper/filesystem.manifest
chmod go-w iso/casper/filesystem.manifest
echo "*** build squashfs"
sudo rm -f iso/casper/filesystem.squashfs
cd squashfs
buildiso=~/buildiso_$(date +%F_%Hh%Mm%Ss).log
sudo mksquashfs . ../iso/casper/filesystem.squashfs -info >> $buildiso
cd ..
cd iso
echo "*** build de l'iso $fichier"
sudo bash -c "find . -path ./isolinux -prune -o -type f -not -name md5sum.txt -print0 | xargs -0 md5sum > md5sum.txt"
sudo genisoimage -o "$iso" -r -J -input-charset utf-8 -no-emul-boot -boot-load-size 4 -boot-info-table -b isolinux/isolinux.bin -c isolinux/boot.cat ./ >> $buildiso
cd ~
;;
clean)
echo "*** umount"
squashbase=~/livecd/squashfs
for i in proc sys dev/pts dev dev/pts; do
mounted=$(mount | grep $squashbase/$i)
if [ ! -z "$mounted" ]; then
liste=$(lsof $squashbase/$i 2>/dev/null | grep livecd | awk '{print $2}')
if [ ! -z "$liste" ]; then kill -9 $liste; fi
sudo umount $squashbase/$i
fi
done
#todo à améliorer, refuser de le faire si un seul umount passe pas, et préciser lequel
#rm -r $base
;;
*)
echo "usage: iso on source.iso | iso off dest.iso | iso clean"
esac