| [1a2fa9d8] | 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." | 
|---|