[82f994e] | 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." |
---|