| 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=1900; | 
|---|
| 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." | 
|---|