1 | #!/bin/bash |
---|
2 | #/** |
---|
3 | #@brief Descomprime el fichero ogclient.sqfs en ogclient.img con un formato donde podemos escribir. |
---|
4 | #@param none |
---|
5 | #@note Copiado del wiki: http://opengnsys.es/wiki/ClienteInitrdDSGenerarlo |
---|
6 | #@note para "entrar" en ogclient: schroot -c ogclient.img o mount ogclient.img ogclientmount -o loop,offset=32256 |
---|
7 | #@exeption 1 No es usuario root |
---|
8 | #@exeption 2 No existe el fichero ogclient.sqfs |
---|
9 | #@date 2013-11.27 |
---|
10 | #*/ |
---|
11 | PROG="$(basename $0)" |
---|
12 | # Mostrar ayuda si se solicita. |
---|
13 | if [ "$*" == "help" ]; then |
---|
14 | echo -e "$PROG: Descomprime el fichero ogclient.sqfs en ogclient.img con un formato donde podemos escribir. \n" \ |
---|
15 | " Uso: $PROG (sin parametros)" |
---|
16 | exit 0 |
---|
17 | fi |
---|
18 | |
---|
19 | if [ "$USER" != "root" ]; then |
---|
20 | echo "$PROG: Error: solo ejecutable por root" >&2 |
---|
21 | exit 1 |
---|
22 | fi |
---|
23 | |
---|
24 | |
---|
25 | |
---|
26 | DATE=$(date +%y-%m-%d) |
---|
27 | OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"} |
---|
28 | OGCLIENTBASEDIR=$OPENGNSYS/tftpboot/ogclient/; |
---|
29 | OGCLIENTSQFS=${OGCLIENTBASEDIR}ogclient.sqfs |
---|
30 | OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img; |
---|
31 | OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount; |
---|
32 | OGCLIENTSIZEMB=2100; |
---|
33 | OGCLIENTLABEL=ogClient; |
---|
34 | |
---|
35 | # Comprobamos que existe el cliente .sqfs |
---|
36 | ! [ -f $OGCLIENTSQFS ] && echo "No existe $OGCLIENTSQFS" && exit 3 |
---|
37 | |
---|
38 | # instalamos los paquetes necesarios. |
---|
39 | echo "Si no existen, instalamos los paquetes necesarios: squashfs-tools schroot." |
---|
40 | if ! which schroot unsquashfs 2>&1 >/dev/null; then |
---|
41 | apt-get update |
---|
42 | apt-get -y install squashfs-tools schroot |
---|
43 | fi |
---|
44 | |
---|
45 | # Creamos el archivo. |
---|
46 | echo -e "\nCreamos el archivo." |
---|
47 | echo dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB; |
---|
48 | dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB; |
---|
49 | DISKLOOP=$(losetup -f); |
---|
50 | losetup $DISKLOOP $OGCLIENTFILE; |
---|
51 | echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk $DISKLOOP; |
---|
52 | losetup -d $DISKLOOP ; |
---|
53 | |
---|
54 | # Creamos el sistema de ficheros. |
---|
55 | echo "Creamos el sistema de ficheros." |
---|
56 | echo "mkfs.ext4 -b 4096 -L $OGCLIENTLABEL $PARTLOOP" |
---|
57 | PARTLOOP=$(losetup -f); |
---|
58 | losetup -o 32256 $PARTLOOP $OGCLIENTFILE && mkfs.ext4 -b 4096 -L $OGCLIENTLABEL $PARTLOOP; |
---|
59 | losetup -d $PARTLOOP ; |
---|
60 | |
---|
61 | # Descomprimimos el ogclient.sqfs en el sistema de ficheros. |
---|
62 | mkdir -p $OGCLIENTMOUNT; |
---|
63 | echo "Descomprimimos el ogclient.sqfs en el sistema de ficheros." |
---|
64 | mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256; |
---|
65 | echo "unsquashfs -d ${OGCLIENTMOUNT}/ -f $OGCLIENTSQFS" |
---|
66 | unsquashfs -d ${OGCLIENTMOUNT}/ -f $OGCLIENTSQFS |
---|
67 | umount $OGCLIENTMOUNT; |
---|
68 | |
---|
69 | # Creamos los archivos de configuracion de schroot. |
---|
70 | echo "Creamos los archivos de configuracion de schroot." |
---|
71 | cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.$DATE |
---|
72 | cat << EOF > /etc/schroot/schroot.conf |
---|
73 | [ogclient.img] |
---|
74 | type=loopback |
---|
75 | file=${OGCLIENTBASEDIR}ogclient.img |
---|
76 | description=ogclient ubuntu luc IMGi |
---|
77 | #priority=1 |
---|
78 | users=root |
---|
79 | groups=root |
---|
80 | root-groups=root |
---|
81 | mount-options=-o offset=32256 |
---|
82 | root-users=root |
---|
83 | #[DIRogclient] |
---|
84 | #type=directory |
---|
85 | #directory=${OGCLIENTBASEDIR}ogclientmount |
---|
86 | #description=ogclient ubuntu lucid DIR |
---|
87 | #priority=2 |
---|
88 | #users=root |
---|
89 | #groups=root |
---|
90 | #root-groups=root |
---|
91 | #root-users=root |
---|
92 | EOF |
---|
93 | |
---|
94 | cp /etc/schroot/mount-defaults /etc/schroot/mount-defaults.$DATE |
---|
95 | cat << EOF > /etc/schroot/mount-defaults |
---|
96 | # mount.defaults: static file system information for chroots. |
---|
97 | # Note that the mount point will be prefixed by the chroot path |
---|
98 | # (CHROOT_PATH) |
---|
99 | # |
---|
100 | # <file system> <mount point> <type> <options> <dump> <pass> |
---|
101 | proc /proc proc defaults 0 0 |
---|
102 | #procbususb /proc/bus/usb usbfs defaults 0 0 |
---|
103 | /dev /dev none rw,bind 0 0 |
---|
104 | /dev/pts /dev/pts none rw,bind 0 0 |
---|
105 | /dev/shm /dev/shm none rw,bind 0 0 |
---|
106 | #/home /home none rw,bind 0 0 |
---|
107 | /tmp /tmp none rw,bind 0 0 |
---|
108 | EOF |
---|
109 | |
---|
110 | # Si existen dispositivos loop los eliminamos. |
---|
111 | echo "Si existen dispositivos loop los eliminamos." |
---|
112 | LOOPDEVICES=$(losetup -a|grep $OGCLIENTFILE |cut -d: -f1) |
---|
113 | for DEVICE in $LOOPDEVICES |
---|
114 | do |
---|
115 | echo "losetup -d $DEVICE" |
---|
116 | losetup -d $DEVICE |
---|
117 | done |
---|
118 | |
---|
119 | echo -e "Para \"entrar\" en ogclient: \n \t schroot -c ogclient.img o \n \t mount ogclient.img ogclientmount -o loop,offset=32256" |
---|
120 | echo "El servicio schroot montará el cliente automaticamente, si no queremos que pase hay que apagarlo." |
---|