source: ogLive-Builder-Git/boottoolsfunctions.lib

qndtest
Last change on this file was 1dbca89, checked in by Ramón M. Gómez <ramongomez@…>, 4 years ago

#997: Changes to build an ogLive client based on Ubuntu 20.04

  • Property mode set to 100755
File size: 21.1 KB
RevLine 
[2cffa56]1#!/bin/bash
2#/**
3#@file    boottoolsfunctions.lib
4#@brief   Librería o clase Boot-Tools
5#@class   Boot-Tools
6#@brief   Funciones para generar un sistema operativo cliente para opengnsys
[cc9336f]7#@version 1.1.1
[2cffa56]8#@warning License: GNU GPLv3+
9#*/
10
11
12# btGetVariables: define las constantes a utilizar
13# Autor: Antonio J. Doblas Viso. Universidad de Málaga.
[0714cda]14function btogGetVar()
[2cffa56]15{
[cc9336f]16export BTDIR=/tmp/opengnsys_installer/opengnsys/client/boot-tools
[2cffa56]17export BTTARGETDIR=/var/lib/tftpboot/ogclient/
18export BTROOTFSIMG=${BTTARGETDIR}ogclient.img
19export BTROOTFSMNT=${BTTARGETDIR}ogclientmount
[e1dabd9]20if [ "$OSARCH" = "i386" ]; then
21        # tamaño maximo limitado por schroot 2GB para 32 bits
22        export BTVIRTUALDISKSIZE=2000 
23else
24        export BTVIRTUALDISKSIZE="3G"
25fi
[2cffa56]26export BTROOTFSIMGLABEL=ogClient
27
28export LOG_FILE=/tmp/boot-tools_installation.log
[ad828d4]29
[c4105e1]30export VERSIONBOOTTOOLS="ogLive"
[2cffa56]31}
32
33
34# btGetOsInfo: detecta la version del host, para tenerla de referencia en el boot-tools a generar.
35#@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys.
36#@author  Antonio J. Doblas Viso. Universidad de Malaga.
37#@date    2010/05/24
38#@version 1.0 - Compatibilidad OpengGnsys X.
39#@author  Antonio J. Doblas Viso. Universidad de Malaga.
40#@date    2011/08/03
[c2839fa]41#@version 1.0.5 - Fichero general de configuración, Kernel 3.7 para Ubuntu 12.10.
42#@author  Ramón Gómez, ETSII Univ. Sevilla
43#@date    2013/02/06
[2cffa56]44function btogGetOsInfo ()
45{
[f569235]46OGCLIENTCFG=/tmp/ogclient.cfg
47case "${1,,}" in
[8428ee5]48        precise)        # ogLive 1.0.4-rc2 basado en Ubuntu 12.04 LTS.
49                OSDISTRIB="ubuntu"
50                OSCODENAME="precise"
51                OSRELEASE="3.2.0-23-generic"
[6b9e1d7]52                #OSRELEASE="3.11.0-26-generic"
[f569235]53                OSARCH="i386"
54                OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
[2cffa56]55                ;;
[00c51c9]56        wheezy)         # ogLive basado en Debian 7.3.
57                OSDISTRIB="debian"
58                OSCODENAME="wheezy"
59                OSRELEASE="3.2.0-4-i386"
60                OSARCH="i386"
61                OSHTTP="http://ftp.es.debian.org/debian/"
62                ;;
[8428ee5]63        quantal)        # ogLive 1.0.5-rc2 basado en Ubuntu 12.10 con Kernel descargado.
[f569235]64                OSDISTRIB="ubuntu"
[8428ee5]65                OSCODENAME="quantal"
66                OSRELEASE="3.7.6-030706-generic"
[f569235]67                OSARCH="i386"
68                OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
[2cffa56]69                ;;
[8428ee5]70        raring)         # ogLive 1.0.5-rc3 basado en Ubuntu 13.04.
[c2839fa]71                OSDISTRIB="ubuntu"
[8428ee5]72                OSCODENAME="raring"
73                OSRELEASE="3.8.0-22-generic"
74                OSARCH="i386"
75                OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
76                ;;
[00c51c9]77        trusty)         # ogLive 1.0.5-rc4 basado en Ubuntu 14.04.
[8533097]78                OSDISTRIB="ubuntu"
[00c51c9]79                OSCODENAME="trusty"
80                OSRELEASE="3.13.0-24-generic"
[8533097]81                OSARCH="i386"
82                OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
83                ;;
[95f20d5]84        vivid)          # ogLive 1.1.0-rc2 basado en Ubuntu 15.04.
[00c51c9]85                OSDISTRIB="ubuntu"
86                OSCODENAME="vivid"
[95f20d5]87                OSRELEASE="3.19.0-49-generic"
[8428ee5]88                OSARCH="i386"
[00c51c9]89                OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
[8428ee5]90                ;;
[00c51c9]91        wily)           # ogLive 1.1.0-rc1 basado en Ubuntu 15.10.
[8428ee5]92                OSDISTRIB="ubuntu"
[00c51c9]93                OSCODENAME="wily"
[42b1b74]94                OSRELEASE="4.2.0-35-generic"
[c2839fa]95                OSARCH="i386"
96                OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
97                ;;
[06f8bae]98        xenial|xenial-4.4)      # ogLive 1.1.0-rc4 basado en Ubuntu 16.04 y Kernel 4.4.
[f060c58]99                OSDISTRIB="ubuntu"
100                OSCODENAME="xenial"
101                OSRELEASE="4.4.0-34-generic"
102                OSARCH="i386"
103                OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
104                ;;
[06f8bae]105        xenial-4.8)     # ogLive 1.1.0-rc5 basado en Ubuntu 16.04 y Kernel 4.8.
106                OSDISTRIB="ubuntu"
107                OSCODENAME="xenial"
[8d20e01]108                OSRELEASE="4.8.0-39-generic"
109                OSARCH="amd64"
[06f8bae]110                OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
111                ;;
[8e89eab]112        xenial-4.13)    # ogLive 1.1.0-rc6 basado en Ubuntu 16.04 y Kernel 4.13.
113                OSDISTRIB="ubuntu"
114                OSCODENAME="xenial"
115                OSRELEASE="4.13.0-17-generic"
116                OSARCH="amd64"
117                OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
118                ;;
[1cc7977]119        bionic|bionic-4.15)     # ogLive 1.1.1-rc1 basado en Ubuntu 18.04 y Kernel 4.15.
[8e89eab]120                OSDISTRIB="ubuntu"
[9d8fe69]121                OSCODENAME="bionic"
[cc9336f]122                OSRELEASE="4.15.0-32-generic"
[8e89eab]123                OSARCH="amd64"
124                OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
125                ;;
[1cc7977]126        bionic-4.18)    # ogLive 1.1.1-rc3 basado en Ubuntu 18.04 y Kernel 4.18.
127                OSDISTRIB="ubuntu"
128                OSCODENAME="bionic"
[68f786a]129                OSRELEASE="4.18.0-20-generic"
130                OSARCH="amd64"
131                OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
132                ;;
[eda4704]133        bionic-5.0)     # ogLive 1.1.1-rc5 basado en Ubuntu 18.04 y Kernel 5.0.
[68f786a]134                OSDISTRIB="ubuntu"
135                OSCODENAME="bionic"
[eda4704]136                OSRELEASE="5.0.0-27-generic"
[1cc7977]137                OSARCH="amd64"
138                OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
139                ;;
[1dbca89]140        focal)  # ogLive 1.2.0-rc1 basado en Ubuntu 20.04 y Kernel 5.4.
141                OSDISTRIB="ubuntu"
142                OSCODENAME="focal"
143                OSRELEASE="5.4.0-42-generic"
144                OSARCH="amd64"
145                OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
146                ;;
[aad89c0]147        host)   # ogLive basado en la distribución del servidor.
[f569235]148                OSDISTRIB=$(lsb_release -is)
149                OSCODENAME=$(lsb_release -cs)
[8d20e01]150                OSRELEASE=$(uname -r)
151                OSARCH=$(dpkg --print-architecture)
[f569235]152                export OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
[2cffa56]153                ;;
[aad89c0]154        *)      # Parámetro desconocido
155                echo "Parámetro no válido."
156                exit 1
157                ;;
[f569235]158esac
[cda688b]159BRANCH="master"
[cc9336f]160GITURL="https://api.github.com/repos/opengnsys/OpenGnsys/commits?sha=$BRANCH&path=/client"
[2bfe10a]161GITRELEASE=$(curl -s "$GITURL" | jq -r '"r" + (.[0].commit.committer.date | split("-") | join("")[:8]) + "." + (.[0].sha[:7])')
[cc9336f]162NAMEISOCLIENT="$VERSIONBOOTTOOLS-$OSCODENAME-$OSRELEASE-$OSARCH-$GITRELEASE"
163NAMEHOSTCLIENT="$VERSIONBOOTTOOLS-$OSCODENAME-$GITRELEASE"
[f569235]164export OSDISTRIB OSCODENAME OSRELEASE OSARCH OSHTTP
[cc9336f]165export TYPECLIENT GITRELEASE NAMEISOCLIENT NAMEHOSTCLIENT
[f569235]166### El fichero de configuración debe sustituir a estos 3 ficheros (borrar las 3 líneas siguientes).
[c4105e1]167echo "$NAMEISOCLIENT" > /tmp/opengnsys_info_rootfs
168echo "$NAMEHOSTCLIENT" > /tmp/opengnsys_chroot
[f569235]169# Generar fichero de configuración.
170cat << EOT > $OGCLIENTCFG
171TYPECLIENT="$1"
172OSDISTRIB="$OSDISTRIB"
173OSCODENAME="$OSCODENAME"
174OSRELEASE="$OSRELEASE"
175OSARCH="$OSARCH"
176OSHTTP="$OSHTTP"
[cc9336f]177GITRELEASE="$GITRELEASE"
[f569235]178NAMEISOCLIENT="$NAMEISOCLIENT"
179NAMEHOSTCLIENT="$NAMEHOSTCLIENT"
180EOT
[2cffa56]181}
182
183# btogSetFsVirtual: Crea y formatea el fichero - disco duro virtual
184#@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys.
185#@author  Antonio J. Doblas Viso. Universidad de Malaga.
186#@date    2010/05/24
187#@version 1.0 - Compatibilidad OpengGnsys X.
188#@author  Antonio J. Doblas Viso. Universidad de Malaga.
189#@date    2011/08/03
190# error code return 2
[0714cda]191function btogSetFsVirtual ()
[2cffa56]192{
193
194local RERROR  DISKLOOP PARTLOOP #return code error
195
196#Dependencias.
197[ -z "$BTROOTFSIMG" ] && btogGetVar
198
199echoAndLog "$FUNCNAME(): Creación y formateo del disco virtual $BTVIRTUALDISKSIZE MB "
200
201#Desmontamos el dispositivo virtual
202mount | grep $BTROOTFSMNT && umount $BTROOTFSMNT 
[c4105e1]203mount | grep $BTROOTFSMNT && umount $BTROOTFSMNT 
[2cffa56]204
205#echo "$FUNCNAME(): Creando el directorio donde se montará el disco virtual $BTROOTFSMNT"
206mkdir -p $BTROOTFSMNT
207
208if [ $? -ne 0 ]
209then 
210        errorAndLog "$FUNCNAME(): Creando directorio $BTROOTFSMNT : ERROR" 
211        return 1
212fi 
213
214# Permisos para el usuario opengnsys.
215chown -R root:opengnsys $BTTARGETDIR
216
217#echo "$FUNCNAME(): Creando el disco virtual con tamaño máximo de  $BTVIRTUALDISKSIZE MB"
[e1dabd9]218if [ "$OSARCH" = "i386" ]; then
219        dd if=/dev/zero of=$BTROOTFSIMG bs=1048576 count=$BTVIRTUALDISKSIZE
[2cffa56]220        #dd if=/dev/zero of=$BTROOTFSIMG bs=1k count=$OGCLIENTSIZEKB   # necesita 500MB
[e1dabd9]221else
222        qemu-img create $BTROOTFSIMG $BTVIRTUALDISKSIZE
223fi
[2cffa56]224if [ $? -ne 0 ]
225then 
226        errorAndLog "$FUNCNAME(): Creando el disco virtual con tamaño maxima $BTVIRTUALDISKSIZE MB : ERROR" 
227        return 2
228fi 
229
230# Particionamos el disco virtual con una sola particion primaria.
231DISKLOOP=$(losetup -f)
232#TODO: si no DISKLOOP error
233losetup $DISKLOOP $BTROOTFSIMG
234#echo "$FUNCNAME(): particiondo el disco virtual - $DISKLOOP - con una particion primaria"
235echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk $DISKLOOP
236
237
238#echoAndLog "$FUNCNAME(): Liberamos Desmontando $DISKLOOP despues del particionado "
[8ebae0e]239sleep 10
[2cffa56]240losetup -d $DISKLOOP 
241if [ $? -ne 0 ]
242then 
243        errorAndLog "$FUNCNAME(): Liberando disco virtual despues del particionado: ERROR" 
244        return 2
245fi 
246
247
248PARTLOOP=$(losetup -f)
249#echo "$FUNCNAME(): Formateando la particion principal $PARTLOOP"
[55844f3]250losetup -o 32256 $PARTLOOP $BTROOTFSIMG && mkfs.ext4 -b 4096 -L $BTROOTFSIMGLABEL $PARTLOOP
[2cffa56]251if [ $? -ne 0 ]
252then 
253        errorAndLog "$FUNCNAME(): Formateando la particion principal del disco virtual: ERROR" 
254        return 2
255fi
256#echoAndLog "$FUNCNAME(): Desmontando $PARTLOOP despues del formateo "
[8ebae0e]257sleep 10
[2cffa56]258losetup -d $PARTLOOP 
259if [ $? -ne 0 ]
260then 
261        errorAndLog "$FUNCNAME(): Liberando la particion virtual despues del formateo: ERROR" 
262        return 2
263else 
264        echoAndLog "$FUNCNAME(): $BTROOTFSIMG $BTVIRTUALDISKSIZE MB : OK"
265fi
266}
267
268
269# btogSetfsBase: Genera el sistema root base con debootstrap
270#@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys.
271#@author  Antonio J. Doblas Viso. Universidad de Malaga.
272#@date    2010/05/24
273#@version 1.0 - Compatibilidad OpengGnsys X.
274#@author  Antonio J. Doblas Viso. Universidad de Malaga.
275#@date    2011/08/03
276# error code return 3
[0714cda]277function btogSetFsBase ()
[2cffa56]278{
279
280# Dependencias
[f569235]281[ -z "$OSCODENAME" ] && btogGetOsInfo $TYPECLIENT
[2cffa56]282
283echoAndLog "$FUNCNAME:  Iniciando la generación del sistema de archivos "
284       
285#Montamos el dispositivo virtual en su punto de montaje.
286mount | grep $BTROOTFSMNT || mount $BTROOTFSIMG $BTROOTFSMNT -o loop,offset=32256
287mount | grep $BTROOTFSMNT && echoAndLog "$FUNCNAME:  mount $BTROOTFSIMG $BTROOTFSMNT -o loop,offset=32256 OK   " || errorAndLog  "$FUNCNAME:  mount $BTROOTFSIMG $BTROOTFSMNT -o loop,offset=32256 : FAILURE  "
288
[f569235]289debootstrap --arch=$OSARCH --components=main,universe ${OSCODENAME} ${BTROOTFSMNT} ${OSHTTP} 
[8ebae0e]290#debootstrap --arch=$OSARCH ${OSCODENAME} ${BTROOTFSMNT} http://archive.ubuntu.com/ubuntu/
[2cffa56]291
292
293if [ $? -ne 0 ]; then
[f569235]294        errorAndLog "$FUNCNAME:  debootstrap --arch=$OSARCH --components=main,universe $OSCODENAME $BTROOTFSMNT $OSHTTP : ha fallado!"
[2cffa56]295        mount | grep $BTROOTFSMNT && umount $BTROOTFSMNT
296        return 3
297else
298        echoAndLog "$FUNCNAME:  debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $BTROOTFSMNT $OSHTTP :  ok"
299        mount | grep $BTROOTFSMNT && umount $BTROOTFSMNT
300        return 0
301fi     
302  sleep 5
303
304##preubas  revisar OSRELEASE
305#debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP}
306#debootstrap --include=linux-image-${OSRELEASE} --arch=i386 --variant=minbase $OSVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/
307#debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/
308#echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/
309}
310
311#btogSetFsAcces: habilita el acceso al sistema root del cliente con  schroot
312#@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys.
313#@author  Antonio J. Doblas Viso. Universidad de Malaga.
314#@date    2010/05/24
315#@version 1.0 - Compatibilidad OpengGnsys X.
316#@author  Antonio J. Doblas Viso. Universidad de Malaga.
317#@date    2011/08/03
[0714cda]318function btogSetFsAccess()
[2cffa56]319{
320echoAndLog "$FUNCNAME: Iniciando la configuración del schroot "
321cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.`getDateTime`
322cat << EOF > /etc/schroot/schroot.conf
323[IMGogclient]
324type=loopback
325file=/var/lib/tftpboot/ogclient/ogclient.img
[55844f3]326description=ogclient Ubuntu image
[2cffa56]327#priority=1
328users=root
329groups=root
330root-groups=root
331mount-options=-o offset=32256
332root-users=root
333EOF
334
335cp /etc/schroot/mount-defaults /etc/schroot/mount-defaults.`getDateTime`
336cat << EOF > /etc/schroot/mount-defaults
337# mount.defaults: static file system information for chroots.
338# Note that the mount point will be prefixed by the chroot path
339# (CHROOT_PATH)
340#
341# <file system> <mount point>   <type>  <options>       <dump>  <pass>
342proc            /proc           proc    defaults        0       0
343#procbususb      /proc/bus/usb   usbfs   defaults        0       0
344#/dev            /dev            none    rw,bind         0       0
345/dev/pts        /dev/pts        none    rw,bind         0       0
346/dev/shm        /dev/shm        none    rw,bind         0       0
347#/home          /home           none    rw,bind         0       0
348/tmp            /tmp            none    rw,bind         0       0                                                               
349EOF
350
[ad828d4]351rm /etc/schroot/setup.d/*chrootname
352
[2cffa56]353echoAndLog "$FUNCNAME: Finalizado: OK  "
354return 0
355}
356
357
358
359#btogFsInitr  genera un initrd.
360#@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys.
361#@author  Antonio J. Doblas Viso. Universidad de Malaga.
362#@date    2010/05/24
363#@version 1.0 - Compatibilidad OpengGnsys X.
364#@author  Antonio J. Doblas Viso. Universidad de Malaga.
365#@date    2011/08/03
[0714cda]366function btogFsInitrd ()
[2cffa56]367{
368#DEPENDENCIAS
[0714cda]369[ -z "$BTROOTFSIMG" ] && btogGetVar
[f569235]370[ -z "$OSCODENAME" ] && btogGetOsInfo $TYPECLIENT
[0714cda]371
[2cffa56]372cd /
[0714cda]373schroot -c IMGogclient -- /usr/bin/boot-tools/boottoolsInitrdGenerate.sh
374echo "cp /tmp/*-${OSRELEASE} ${BTTARGETDIR}"
375cp /tmp/*-${OSRELEASE} ${BTTARGETDIR}
[ad828d4]376#Creando copias de las version oginitr y ogvmlinux previas
377TIMEMOD=`date +%Y%m%d-%H%M%S`
378[ -f $BTTARGETDIR/oginitrd.img ] && mv $BTTARGETDIR/oginitrd.img $BTTARGETDIR/oginitrd.img.$TIMEMOD;  mv $BTTARGETDIR/oginitrd.img.sum $BTTARGETDIR/oginitrd.img.sum.$TIMEMOD
379[ -f $BTTARGETDIR/ogvmlinuz ] && mv $BTTARGETDIR/ogvmlinuz $BTTARGETDIR/ogvmlinuz.$TIMEMOD; mv $BTTARGETDIR/ogvmlinuz.sum $BTTARGETDIR/ogvmlinuz.sum.$TIMEMOD
380
381#copiando
[0714cda]382cp /tmp/initrd.img-${OSRELEASE} ${BTTARGETDIR}/oginitrd.img
[cc9336f]383cp /tmp/vmlinuz-${OSRELEASE} ${BTTARGETDIR}/ogvmlinuz
[ad828d4]384#generamos md5 del kernel y del initrd.
385DATASUM=`md5sum "${BTTARGETDIR}/oginitrd.img" | cut -f1 -d" "`
386echo $DATASUM > ${BTTARGETDIR}/oginitrd.img.sum
387DATASUM=`md5sum "${BTTARGETDIR}/ogvmlinuz" | cut -f1 -d" "`
388echo $DATASUM > ${BTTARGETDIR}/ogvmlinuz.sum
389#Damos permisos
[2cffa56]390cd -
[ad828d4]391chmod -R 755 $BTTARGETDIR
[2cffa56]392}
393
[0714cda]394#btogFsSqfs   convierte el sistema root en sqfs
[2cffa56]395#@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys.
396#@author  Antonio J. Doblas Viso. Universidad de Malaga.
397#@date    2010/05/24
398#@version 1.0 - Compatibilidad OpengGnsys X.
399#@author  Antonio J. Doblas Viso. Universidad de Malaga.
400#@date    2011/08/03
[0714cda]401function btogFsSqfs ()
[2cffa56]402{
403#Dependencias.
[ad828d4]404[ -z "$BTROOTFSIMG" ] && btogGetVar
[f569235]405[ -z "$OSCODENAME" ] && btogGetOsInfo $TYPECLIENT
[2cffa56]406
407echoAndLog "$FUNCNAME: Iniciando la creación del sistema de archivos en sqfs "
408# si ya existe un sqfs lo renombramos
[0714cda]409[ -f $BTTARGETDIR/ogclient.sqfs ] && mv $BTTARGETDIR/ogclient.sqfs $BTTARGETDIR/ogclient.sqfs.`date +%Y%m%d-%H%M%S`
410mount | grep $BTROOTFSMNT || mount $BTROOTFSIMG $BTROOTFSMNT -o loop,offset=32256
411mksquashfs $BTROOTFSMNT $BTTARGETDIR/ogclient.sqfs
412mount | grep $BTROOTFSMNT && umount $BTROOTFSMNT
[ad828d4]413chmod 744 $BTTARGETDIR/ogclient.sqfs
414DATASUM=`md5sum "${BTTARGETDIR}/ogclient.sqfs" | cut -f1 -d" "`
415echo $DATASUM > ${BTTARGETDIR}/ogclient.sqfs.sum
[2cffa56]416}
417
418
419
420
421
422# btogIsoGenerator genera la iso del cliente
423#@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys.
424#@author  Antonio J. Doblas Viso. Universidad de Malaga.
425#@date    2010/05/24
426#@version 1.0 - Compatibilidad OpengGnsys X.
427#@author  Antonio J. Doblas Viso. Universidad de Malaga.
428#@date    2011/08/03
429function btogIsoGenerator {
[ad828d4]430#Dependencias.
431#[ -z "$BTROOTFSIMG" ] && btogGetVar
432btogGetVar
433#Preparamos los gestores de arranque
[2cffa56]434mkdir -p /tmp/iso/isolinux
[c99360b]435cp -av /usr/lib/syslinux/* /tmp/iso/isolinux/
[f060c58]436if [ -d /usr/share/gpxe ]; then
437    cp -av /usr/share/gpxe/* /tmp/iso/isolinux
438    PXE=gpxe
439elif [ -d /usr/lib/ipxe ]; then
440    cp -av /usr/lib/ipxe/* /tmp/iso/isolinux
441    PXE=ipxe
442fi
[c99360b]443
[f060c58]444# Si existe el fichero ISO, montarlo para extraer isolinux.bin.
445if [ -f /tmp/iso/isolinux/$PXE.iso ]; then
[c99360b]446    mkdir -p /tmp/iso/isolinux/mount
[f060c58]447    mount -o loop /tmp/iso/isolinux/$PXE.iso /tmp/iso/isolinux/mount
[c99360b]448    cp -va /tmp/iso/isolinux/mount/* /tmp/iso/isolinux
449    umount /tmp/iso/isolinux/mount
450    rmdir /tmp/iso/isolinux/mount
[f060c58]451    rm -f /tmp/iso/isolinux/$PXE.iso
[c99360b]452fi
[2cffa56]453
454cat << FIN > /tmp/iso/isolinux/isolinux.cfg
455DEFAULT menu.c32
456PROMPT 0
457ALLOWOPTIONS 1
458
[ad828d4]459MENU TITLE  OpenGnsys ${NAMEISOCLIENT}
[2cffa56]460
461
462LABEL 0
[df127a6]463MENU LABEL ogLive vga irqpool acpi ogdebug ip:none
[2cffa56]464KERNEL /ogclient/linuxISO
465APPEND initrd=/ogclient/oginitrd.img ro vga=788 irqpoll acpi=on boot=oginit  og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=true ip=none
466
467LABEL 1
[df127a6]468MENU LABEL ogLive irqpoll acpi ip:none
[2cffa56]469KERNEL /ogclient/linuxISO
470APPEND initrd=/ogclient/oginitrd.img ro  irqpoll acpi=on boot=oginit  og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=false ip=none
471
472LABEL 2
[df127a6]473MENU LABEL ogLive acpi debug ip=dhcp
[2cffa56]474KERNEL /ogclient/linuxISO
475APPEND initrd=/ogclient/oginitrd.img ro acpi=on boot=oginit  og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=true ip=dhcp
476
477LABEL 3
[df127a6]478MENU LABEL ogLive ip=dhcp
[2cffa56]479KERNEL /ogclient/linuxISO
480APPEND initrd=/ogclient/oginitrd.img ro acpi=off boot=oginit  og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=false ip=dhcp
481
482LABEL 4
483MENU LABEL local
484localboot 0x80
485append -
486
487label 5
488MENU LABEL Network boot via gPXE lkrn
[f060c58]489KERNEL $PXE.lkrn
[2cffa56]490
[0714cda]491label 6
[2cffa56]492MENU LABEL Network boot via gPXE usb
[f060c58]493KERNEL $PXE.usb
[2cffa56]494
[0714cda]495label 7
[2cffa56]496MENU LABEL Network boot via gPXE  pxe
[f060c58]497KERNEL $PXE.pxe
[2cffa56]498
[0714cda]499label 8
[2cffa56]500MENU LABEL Network boot via gPXE  iso
[f060c58]501KERNEL $PXE.iso
[df127a6]502
503label 9
[f060c58]504MENU LABEL pxe
[df127a6]505KERNEL /clonezilla/live/vmlinuz1
506APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia
[2cffa56]507FIN
[ad828d4]508
509
510
511
512# preparamos el directorio boot-tools.
513mkdir -p /tmp/iso/ogclient
514cp ${BTTARGETDIR}/ogclient.sqfs /tmp/iso/ogclient/
515cp ${BTTARGETDIR}/ogclient.sqfs.sum /tmp/iso/ogclient/
516cp ${BTTARGETDIR}/ogvmlinuz /tmp/iso/ogclient/
517cp ${BTTARGETDIR}/ogvmlinuz.sum /tmp/iso/ogclient/
518cp ${BTTARGETDIR}/ogvmlinuz /tmp/iso/ogclient/linuxISO
519cp ${BTTARGETDIR}/ogvmlinuz.sum /tmp/iso/ogclient/linuxISO.sum
520cp ${BTTARGETDIR}/oginitrd.img /tmp/iso/ogclient/
521cp ${BTTARGETDIR}/oginitrd.img.sum /tmp/iso/ogclient/
522#el ogclienteToISO  debe tener una copia del ogvmlinuz como linuxISO
523#cp -prv /var/lib/tftpboot/ogclientToIso/* /tmp/iso/ogclient
524
525cd /tmp
526#TIMEMOD=`date +%Y%m%d-%H%M%S`
527####Generamos la iso
528echo "mkisofs -V ogClient -o ${NAMEISOCLIENT}.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -J -no-emul-boot -boot-load-size 4 -boot-info-table /tmp/iso"
529mkisofs -V ogClient -o ${NAMEISOCLIENT}.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -J -no-emul-boot -boot-load-size 4 -boot-info-table /tmp/iso
530##Generamos el md5
531DATASUM=`md5sum ${NAMEISOCLIENT}.iso | cut -f1 -d" "`
532echo $DATASUM > ${NAMEISOCLIENT}.iso.sum
533
[e0efe8a]534mv /tmp/${NAMEISOCLIENT}.iso /var/lib/tftpboot/ogclient/
535mv /tmp/${NAMEISOCLIENT}.iso.sum /var/lib/tftpboot/ogclient/
536
[2cffa56]537
538### vi /etc/grub.d/40_custom
539##
540#menuentry "og cache " {
541#set root=(hd0,4)
542#linux /ogvmlinuz ro vga=788 irqpoll acpi=on boot=oginit  og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=true ip=none
543#initrd /oginitrd.img
544#}
545
546}
547
548
549#@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys.
550#@author  Antonio J. Doblas Viso. Universidad de Malaga.
551#@date    2010/05/24
552#@version 1.0 - Compatibilidad OpengGnsys X.
553#@author  Antonio J. Doblas Viso. Universidad de Malaga.
554#@date    2011/08/03
555function btogIsoTest {
556#/tmp/iso
557qemu -m 256 -boot d -cdrom ogClient.iso
558}
559
560
561
562
563function getDateTime()
564{
565        echo `date +%Y%m%d-%H%M%S`
566}
567
568# Escribe a fichero y muestra por pantalla
569function echoAndLog()
570{
571        echo $1
572        FECHAHORA=`getDateTime`
573        echo "$FECHAHORA;$SSH_CLIENT;$1" >> $LOG_FILE
574}
575
576function errorAndLog()
577{
578        echo "ERROR: $1"
579        FECHAHORA=`getDateTime`
580        echo "$FECHAHORA;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE
581}
582
583
584
585
586
587
588
589
590
591
592############### No usados en el instalador, solo en actualizaciones.
593#/**
594#         ogClientMount [str_program]
595#@brief   Acceso al 2nd FS del cliente desde el Servidor Opengnsys
596#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones
597#@return  Si no hay parametros: login de acceso.
598#@return  con un parametro: La salida del programa ejecutado
599#@exception
600#@note   
601#@todo   
602#@version 0.9 - Primera versión para OpenGnSys
603#@author  Antonio J. Doblas Viso, Universidad de Málaga
604#@date    2010/02/15
605#*/ ##
606function ogClientMount ()
607{
608        #TODO comprobar que OGFILE y OGFILEMOUNT existe.
609        mount | grep $OGCLIENTFILE > /dev/null || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256
610        mount | grep $OGCLIENTMOUNT/proc > /dev/null || mount --bind /proc $OGCLIENTMOUNT/proc
611        mount | grep $OGCLIENTMOUNT/sys > /dev/null || mount --bind /sys $OGCLIENTMOUNT/sys
612        mount | grep $OGCLIENTMOUNT/tmp > /dev/null || mount --bind /tmp $OGCLIENTMOUNT/tmp
613        mount | grep $OGCLIENTMOUNT/dev > /dev/null || mount --bind /dev $OGCLIENTMOUNT/dev
614        mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null || mount --bind /dev/pts $OGCLIENTMOUNT/dev/pts
615       
616       
617        [ $# = 0 ] && $(chroot $OGCLIENTMOUNT /sbin/getty 38400 `tty`)
618        [ $# = 1 ] && chroot $OGCLIENTMOUNT $1
619       
620}
621
622#/**
623#         ogClientUnmount
624#@brief   Desmonta el 2nd FS del cliente desde el Servidor Opengnsys
625#@param   
626#@return 
627#@exception
628#@note   
629#@todo   
630#@version 0.9 - Primera versión para OpenGnSys
631#@author  Antonio J. Doblas Viso, Universidad de Málaga
632#@date    2010/02/15
633#*/ ##
634
635function ogClientUnmount ()
636{
637        cd /tmp
638        echo "desmontando cliente espere"
639        sleep 5
640        mount | grep $OGCLIENTMOUNT/dev > /dev/null && umount $OGCLIENTMOUNT/dev || ogClientUnmount
641        mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null && umount $OGCLIENTMOUNT/dev/pts || ogClientUnmount
642        mount | grep $OGCLIENTMOUNT/proc > /dev/null && umount $OGCLIENTMOUNT/proc || ogClientUnmount
643        mount | grep $OGCLIENTMOUNT/sys > /dev/null && umount $OGCLIENTMOUNT/sys || ogClientUnmount
644        mount | grep $OGCLIENTMOUNT/tmp > /dev/null && umount $OGCLIENTMOUNT/tmp || ogClientUnmount
645        mount | grep $OGCLIENTMOUNT > /dev/null && umount $OGCLIENTMOUNT || ogClientUnmount
646        #-d -f -l
647
648}
Note: See TracBrowser for help on using the repository browser.