blob: e52b677c341eb1fb043a5465721fb227584d2b6a (
plain)
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
|
#!/bin/bash
#/**
#@brief Descomprime el fichero ogclient.sqfs en ogclient.img con un formato donde podemos escribir.
#@param none
#@note Copiado del wiki: http://opengnsys.es/wiki/ClienteInitrdDSGenerarlo
#@note para "entrar" en ogclient: schroot -c ogclient.img o mount ogclient.img ogclientmount -o loop,offset=32256
#@exeption 1 No es usuario root
#@exeption 2 No existe el fichero ogclient.sqfs
#@date 2013-11.27
#*/
PROG="$(basename $0)"
# Mostrar ayuda si se solicita.
if [ "$*" == "help" ]; then
echo -e "$PROG: Descomprime el fichero ogclient.sqfs en ogclient.img con un formato donde podemos escribir. \n" \
" Uso: $PROG (sin parametros)"
exit 0
fi
if [ "$USER" != "root" ]; then
echo "$PROG: Error: solo ejecutable por root" >&2
exit 1
fi
DATE=$(date +%y-%m-%d)
OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
OGCLIENTBASEDIR=$OPENGNSYS/tftpboot/ogclient/;
OGCLIENTSQFS=${OGCLIENTBASEDIR}ogclient.sqfs
OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img;
OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount;
OGCLIENTSIZEMB=2100;
OGCLIENTLABEL=ogClient;
# Comprobamos que existe el cliente .sqfs
! [ -f $OGCLIENTSQFS ] && echo "No existe $OGCLIENTSQFS" && exit 3
# instalamos los paquetes necesarios.
echo "Si no existen, instalamos los paquetes necesarios: squashfs-tools schroot."
if ! which schroot unsquashfs 2>&1 >/dev/null; then
apt-get update
apt-get -y install squashfs-tools schroot
fi
# Creamos el archivo.
echo -e "\nCreamos el archivo."
echo dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB;
dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB;
DISKLOOP=$(losetup -f);
losetup $DISKLOOP $OGCLIENTFILE;
echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk $DISKLOOP;
losetup -d $DISKLOOP ;
# Creamos el sistema de ficheros.
echo "Creamos el sistema de ficheros."
echo "mkfs.ext4 -b 4096 -L $OGCLIENTLABEL $PARTLOOP"
PARTLOOP=$(losetup -f);
losetup -o 32256 $PARTLOOP $OGCLIENTFILE && mkfs.ext4 -b 4096 -L $OGCLIENTLABEL $PARTLOOP;
losetup -d $PARTLOOP ;
# Descomprimimos el ogclient.sqfs en el sistema de ficheros.
mkdir -p $OGCLIENTMOUNT;
echo "Descomprimimos el ogclient.sqfs en el sistema de ficheros."
mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256;
echo "unsquashfs -d ${OGCLIENTMOUNT}/ -f $OGCLIENTSQFS"
unsquashfs -d ${OGCLIENTMOUNT}/ -f $OGCLIENTSQFS
umount $OGCLIENTMOUNT;
# Creamos los archivos de configuracion de schroot.
echo "Creamos los archivos de configuracion de schroot."
cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.$DATE
cat << EOF > /etc/schroot/schroot.conf
[ogclient.img]
type=loopback
file=${OGCLIENTBASEDIR}ogclient.img
description=ogclient ubuntu luc IMGi
#priority=1
users=root
groups=root
root-groups=root
mount-options=-o offset=32256
root-users=root
#[DIRogclient]
#type=directory
#directory=${OGCLIENTBASEDIR}ogclientmount
#description=ogclient ubuntu lucid DIR
#priority=2
#users=root
#groups=root
#root-groups=root
#root-users=root
EOF
cp /etc/schroot/mount-defaults /etc/schroot/mount-defaults.$DATE
cat << EOF > /etc/schroot/mount-defaults
# mount.defaults: static file system information for chroots.
# Note that the mount point will be prefixed by the chroot path
# (CHROOT_PATH)
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
#procbususb /proc/bus/usb usbfs defaults 0 0
/dev /dev none rw,bind 0 0
/dev/pts /dev/pts none rw,bind 0 0
/dev/shm /dev/shm none rw,bind 0 0
#/home /home none rw,bind 0 0
/tmp /tmp none rw,bind 0 0
EOF
# Si existen dispositivos loop los eliminamos.
echo "Si existen dispositivos loop los eliminamos."
LOOPDEVICES=$(losetup -a|grep $OGCLIENTFILE |cut -d: -f1)
for DEVICE in $LOOPDEVICES
do
echo "losetup -d $DEVICE"
losetup -d $DEVICE
done
echo -e "Para \"entrar\" en ogclient: \n \t schroot -c ogclient.img o \n \t mount ogclient.img ogclientmount -o loop,offset=32256"
echo "El servicio schroot montará el cliente automaticamente, si no queremos que pase hay que apagarlo."
|