source: ogLive-Builder-Git/boottools/btog.py @ 866cdb4

browserbuild-browserdeps-vadimfilebeat-installerimprove-versionlgromero-testsmainno-apt-moduleoglive-ipv6pull-from-cloning-enginepybuilder
Last change on this file since 866cdb4 was 866cdb4, checked in by Natalia Serrano <natalia.serrano@…>, 8 months ago

refs #597 make image smaller by not keeping a copy of the opengnsys repo

  • Property mode set to 100644
File size: 20.5 KB
Line 
1import platform
2import os
3import time
4import logging
5import subprocess
6import shutil
7import glob
8import datetime
9
10from . import utils
11
12logger = logging.getLogger ('boottools')
13
14def GetVar (osarch):
15    btdir            = '/tmp/opengnsys/oglive_builder'
16    bttargetdir      = '/var/lib/tftpboot/ogclient/'
17    btrootfsimg      = os.path.join (bttargetdir, 'ogclient.img')
18    btrootfsmnt      = os.path.join (bttargetdir, 'ogclientmount')
19    btrootfsimglabel = 'ogClient'
20    log_file         = '/tmp/boot-tools_installation.log'
21    versionboottools = 'ogLive'
22    if 'i386' == osarch:
23        btvirtualdisksize = '2000'    # tamaño maximo limitado por schroot 2GB para 32 bits
24    else:
25        btvirtualdisksize = '3G'
26    return btdir, bttargetdir, btrootfsimg, btrootfsmnt, btrootfsimglabel, log_file, versionboottools, btvirtualdisksize
27
28def GetOsInfo1 (type_client):
29    if 'precise' == type_client:        # ogLive 1.0.4-rc2 basado en Ubuntu 12.04 LTS.
30            osdistrib='ubuntu'
31            oscodename='precise'
32            osrelease='3.2.0-23-generic'
33            osarch='i386'
34            oshttp='http://es.archive.ubuntu.com/ubuntu/'
35    elif 'wheezy' == type_client:       # ogLive basado en Debian 7.3.
36            osdistrib='debian'
37            oscodename='wheezy'
38            osrelease='3.2.0-4-i386'
39            osarch='i386'
40            oshttp='http://ftp.es.debian.org/debian/'
41    elif 'quantal' == type_client:      # ogLive 1.0.5-rc2 basado en Ubuntu 12.10 con Kernel descargado.
42            osdistrib='ubuntu'
43            oscodename='quantal'
44            osrelease='3.7.6-030706-generic'
45            osarch='i386'
46            oshttp='http://es.archive.ubuntu.com/ubuntu/'
47    elif 'raring' == type_client:       # ogLive 1.0.5-rc3 basado en Ubuntu 13.04.
48            osdistrib='ubuntu'
49            oscodename='raring'
50            osrelease='3.8.0-22-generic'
51            osarch='i386'
52            oshttp='http://es.archive.ubuntu.com/ubuntu/'
53    elif 'trusty' == type_client:       # ogLive 1.0.5-rc4 basado en Ubuntu 14.04.
54            osdistrib='ubuntu'
55            oscodename='trusty'
56            osrelease='3.13.0-24-generic'
57            osarch='i386'
58            oshttp='http://es.archive.ubuntu.com/ubuntu/'
59    elif 'vivid' == type_client:                # ogLive 1.1.0-rc2 basado en Ubuntu 15.04.
60            osdistrib='ubuntu'
61            oscodename='vivid'
62            osrelease='3.19.0-49-generic'
63            osarch='i386'
64            oshttp='http://es.archive.ubuntu.com/ubuntu/'
65    elif 'wily' == type_client:                 # ogLive 1.1.0-rc1 basado en Ubuntu 15.10.
66            osdistrib='ubuntu'
67            oscodename='wily'
68            osrelease='4.2.0-35-generic'
69            osarch='i386'
70            oshttp='http://es.archive.ubuntu.com/ubuntu/'
71    elif 'xenial' == type_client or 'xenial-4.4' == type_client:        # ogLive 1.1.0-rc4 basado en Ubuntu 16.04 y Kernel 4.4.
72            osdistrib='ubuntu'
73            oscodename='xenial'
74            osrelease='4.4.0-34-generic'
75            osarch='i386'
76            oshttp='http://es.archive.ubuntu.com/ubuntu/'
77    elif 'xenial-4.8' == type_client:   # ogLive 1.1.0-rc5 basado en Ubuntu 16.04 y Kernel 4.8.
78            osdistrib='ubuntu'
79            oscodename='xenial'
80            osrelease='4.8.0-39-generic'
81            osarch='amd64'
82            oshttp='http://es.archive.ubuntu.com/ubuntu/'
83    elif 'xenial-4.13' == type_client:  # ogLive 1.1.0-rc6 basado en Ubuntu 16.04 y Kernel 4.13.
84            osdistrib='ubuntu'
85            oscodename='xenial'
86            osrelease='4.13.0-17-generic'
87            osarch='amd64'
88            oshttp='http://es.archive.ubuntu.com/ubuntu/'
89    elif 'bionic' == type_client or 'bionic-4.15' == type_client:       # ogLive 1.1.1-rc1 basado en Ubuntu 18.04 y Kernel 4.15.
90            osdistrib='ubuntu'
91            oscodename='bionic'
92            osrelease='4.15.0-32-generic'
93            osarch='amd64'
94            oshttp='http://es.archive.ubuntu.com/ubuntu/'
95    elif 'bionic-4.18' == type_client:  # ogLive 1.1.1-rc3 basado en Ubuntu 18.04 y Kernel 4.18.
96            osdistrib='ubuntu'
97            oscodename='bionic'
98            osrelease='4.18.0-20-generic'
99            osarch='amd64'
100            oshttp='http://es.archive.ubuntu.com/ubuntu/'
101    elif 'bionic-5.0' == type_client:   # ogLive 1.1.1-rc5 basado en Ubuntu 18.04 y Kernel 5.0.
102            osdistrib='ubuntu'
103            oscodename='bionic'
104            osrelease='5.0.0-27-generic'
105            osarch='amd64'
106            oshttp='http://es.archive.ubuntu.com/ubuntu/'
107    elif 'focal' == type_client:        # ogLive 1.2.0-rc1 basado en Ubuntu 20.04 y Kernel 5.4.
108            osdistrib='ubuntu'
109            oscodename='focal'
110            osrelease='5.4.0-42-generic'
111            osarch='amd64'
112            oshttp='http://es.archive.ubuntu.com/ubuntu/'
113    elif 'noble' == type_client:        # ogLive 1.2.0-rc1 basado en Ubuntu 24.04 y Kernel 6.8.
114            osdistrib='ubuntu'
115            oscodename='noble'
116            osrelease='6.8.0-31-generic'
117            osarch='amd64'
118            oshttp='http://es.archive.ubuntu.com/ubuntu/'
119    elif 'host' == type_client: # ogLive basado en la distribución del servidor.
120            osdistrib=platform.freedesktop_os_release()['NAME']
121            oscodename=platform.freedesktop_os_release()['VERSION_CODENAME']
122            osrelease=platform.uname()[2]
123            osarch, _=utils.run (['dpkg', '--print-architecture'])
124            oshttp='http://es.archive.ubuntu.com/ubuntu/'
125    else:       # Parámetro desconocido
126            logger.error ('Parámetro no válido.')
127            osdistrib=None
128            oscodename=None
129            osrelease=None
130            osarch=None
131            oshttp=None
132    return osdistrib, oscodename, osrelease, osarch, oshttp
133
134def GetOsInfo2 (versionboottools, oscodename, osrelease, osarch, gitrelease):
135    nameisoclient  ='-'.join ([versionboottools, oscodename, osrelease, osarch, gitrelease])
136    namehostclient = '-'.join ([versionboottools, oscodename, gitrelease])
137    return nameisoclient, namehostclient
138
139def mkrootfs (btrootfsimg, btrootfsimglabel, btrootfsmnt, btvirtualdisksize, bttargetdir, osarch):
140    logger.info (f'Creación y formateo del disco virtual "{btrootfsimg}" "{btvirtualdisksize}" MB')
141
142    try: utils.umount (btrootfsmnt)
143    except: pass
144
145    if (utils.is_mounted (btrootfsmnt)):
146        raise Exception (f'failed to umount "{btrootfsmnt}"')
147
148    try: os.makedirs (btrootfsmnt, exist_ok=True)
149    except:
150        raise Exception (f'Creando directorio "{btrootfsmnt}" : ERROR')
151
152    try: utils.run (['chown', '-R', 'root:opengnsys', bttargetdir])
153    except Exception as e:
154        raise Exception (f'Failed to chown root:opengnsys "{btrootfsmnt}": {str(e)}')
155
156    logger.info (f'Creating disk image "{btrootfsimg}"')
157    if 'i386' == osarch:
158        try: utils.run (['dd', 'if=/dev/zero', f'of={btrootfsimg}', 'bs=1048576', f'count={btvirtualdisksize}'])
159        except Exception as e:
160            raise Exception (f'Creando el disco virtual "{btrootfsimg}" con tamaño maxima "{btvirtualdisksize}" MB : ERROR: {str(e)}')
161    else:
162        try: utils.run (['qemu-img', 'create', btrootfsimg, btvirtualdisksize])
163        except Exception as e:
164            raise Exception (f'Creando el disco virtual "{btrootfsimg}" con tamaño maxima "{btvirtualdisksize}" MB : ERROR: {str(e)}')
165
166    logger.debug ('losetup --find')
167    diskloop, _ = utils.run (['losetup', '--find'])
168    if not diskloop:
169        raise Exception ('no diskloop')
170
171    logger.debug ('losetup attach')
172    try: utils.run (['losetup', '--partscan', diskloop, btrootfsimg])
173    except: raise Exception ('losetup failed')
174
175    logger.info ('Partitioning disk image')
176    stdout, _ = utils.run (['bash', '-c', f"echo $'n\np\n1\n\n\nt\n83\nw' |fdisk {diskloop}"])
177
178    time.sleep (3)
179    logger.debug ('losetup --detach')
180    try: utils.run (['losetup', '--detach', diskloop])
181    except:
182        raise Exception ('Liberando disco virtual despues del particionado: ERROR')
183
184    logger.debug ('losetup --find')
185    partloop, _ = utils.run (['losetup', '--find'])
186    if not partloop:
187        raise Exception ('no partloop')
188
189    logger.debug ('losetup --offset attach')
190    utils.run (['losetup', '--offset', '32256', partloop, btrootfsimg])
191
192    logger.info ('Creating ext4 filesystem')
193    try: utils.run (['mkfs.ext4', '-b', '4096', '-L', btrootfsimglabel, partloop])
194    except:
195        raise Exception ('Formateando la particion principal del disco virtual: ERROR')
196
197    time.sleep (3)
198    logger.debug ('losetup --detach')
199    try: utils.run (['losetup', '--detach', partloop])
200    except:
201        raise Exception ('Liberando la particion virtual despues del formateo: ERROR')
202
203    logger.info (f'"{btrootfsimg}" "{btvirtualdisksize}" MB : OK')
204
205# debootstrap: Genera el sistema root base con debootstrap
206# trabaja sobre un rootfs ya montado
207def debootstrap (btrootfsimg, btrootfsmnt, osarch, oscodename, oshttp):
208    logger.info ('Iniciando la generación del sistema de archivos')
209
210    logger.info ('debootstrapping system')
211    logger.debug (f'debootstrap --arch="{osarch}" --components=main,universe "{oscodename}" "{btrootfsmnt}" "{oshttp}"')
212    try: utils.run (['debootstrap', f'--arch={osarch}', '--components=main,universe', oscodename, btrootfsmnt, oshttp])
213    except: raise Exception (f'debootstrap --arch="{osarch}" --components=main,universe "{oscodename}" "{btrootfsmnt}" "{oshttp}" : ha fallado!')
214
215    logger.info (f'debootstrap --arch="{osarch}" --components=main,universe "{oscodename}" "{btrootfsmnt}" "{oshttp}" : ok')
216    return 0
217
218def copy_og_files (builder, og_shared, og_engine, ogclientmount, osdistrib, oscodename):
219    logger.info ('Iniciando la personalización con datos del repositorio')
220
221    sources_list_in  = f'{builder}/includes/etc/apt/sources.list.{osdistrib.lower()}'
222    sources_list_out = f'{builder}/includes/etc/apt/sources.list'
223    fdin  = open (sources_list_in,  'r')
224    fdout = open (sources_list_out, 'w')
225    while True:
226        l = fdin.readline()
227        if not l: break
228        fdout.write (l.replace ('OSCODENAME', oscodename))
229    fdin.close()
230    fdout.close()
231
232    subprocess.run (f'chmod -R 775 {builder}/includes/usr/bin/*', shell=True)
233
234    os.makedirs (f'{ogclientmount}/opt/opengnsys/lib/engine/bin/', exist_ok=True)
235    os.makedirs (f'{ogclientmount}/usr/local/etc',                 exist_ok=True)
236    os.makedirs (f'{ogclientmount}/usr/local/lib',                 exist_ok=True)
237    os.makedirs (f'{ogclientmount}/usr/local/plugins',             exist_ok=True)
238
239    subprocess.run (f'rsync -aH {builder}/includes/* {ogclientmount}/'                             , shell=True)
240    subprocess.run (f'rsync -aH {og_shared}/*        {ogclientmount}/opt/opengnsys/'               , shell=True)
241    subprocess.run (f'rsync -aH {og_engine}/*        {ogclientmount}/opt/opengnsys/lib/engine/bin/', shell=True)
242
243    if not os.path.exists (f'{ogclientmount}/etc/pci.ids'):
244        shutil.copy (f'{og_shared}/lib/pci.ids', f'{ogclientmount}/etc/')
245
246    # Dependencias Qt para el Browser.
247    subprocess.run (f'rsync -aH {og_shared}/etc/*.qmap      {ogclientmount}/usr/local/etc',     shell=True)
248    subprocess.run (f'rsync -aH {og_shared}/lib/qtlib/*     {ogclientmount}/usr/local/lib',     shell=True)
249    subprocess.run (f'rsync -aH {og_shared}/lib/fonts       {ogclientmount}/usr/local/lib',     shell=True)
250    subprocess.run (f'rsync -aH {og_shared}/lib/qtplugins/* {ogclientmount}/usr/local/plugins', shell=True)
251
252    # Browser y ogAdmClient.
253    if os.path.exists (f'{og_shared}/bin/browser'):     shutil.copy (f'{og_shared}/bin/browser',     f'{ogclientmount}/bin/')
254    if os.path.exists (f'{og_shared}/bin/ogAdmClient'): shutil.copy (f'{og_shared}/bin/ogAdmClient', f'{ogclientmount}/bin/')
255
256def ssh_server (btrootfsmnt):
257    if not os.path.exists ('/root/.ssh/id_rsa'):                     ## crea un par de claves en la VM, no en el chroot
258        utils.run (['ssh-keygen', '-q', '-f', '/root/.ssh/id_rsa', '-N', ''])
259
260    logger.debug ('comprobando directorio .ssh del root')
261    if not os.path.exists (f'{btrootfsmnt}/root/.ssh'):     ## crea directorio dentro del chroot
262        logger.debug ('creando directorio .ssh 600')
263        os.mkdir (f'{btrootfsmnt}/root/.ssh')
264        os.chmod (f'{btrootfsmnt}/root/.ssh', 0o700)
265
266    logger.debug ('creando el fichero authorized_keys')              ## crea archivo en el chroot
267    if not os.path.exists (f'{btrootfsmnt}/root/.ssh/authorized_keys'):
268        open (f'{btrootfsmnt}/root/.ssh/authorized_keys', 'w').close()
269    os.chmod (f'{btrootfsmnt}/root/.ssh/authorized_keys', 0o600)
270
271    logger.debug ('importando la clave publica del servidor OG')
272    #cat /tmp/id_rsa.pub
273    if os.path.exists ('/root/.ssh/id_rsa.pub'):                     ## coge la publica de la VM y la pone en el authorized_keys del chroot
274        fdin = open ('/root/.ssh/id_rsa.pub', 'r')
275        fdout = open (f'{btrootfsmnt}/root/.ssh/authorized_keys', 'a')
276        while True:
277            l = fdin.readline()
278            if not l: break
279            fdout.write (l)
280        fdin.close()
281        fdout.close()
282
283    else:
284        logger.error ('no key publica og')
285
286def ssh_client (btrootfsmnt):
287    if not os.path.exists (f'{btrootfsmnt}/root/.ssh/id_rsa'):
288        utils.run (['ssh-keygen', '-q', '-f', f'{btrootfsmnt}/root/.ssh/id_rsa', '-N', ''])     ## crea un par de claves en el chroot
289
290    #cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys          ## coge la publica y se la autoriza a sí mismo
291    fdin = open (f'{btrootfsmnt}//root/.ssh/id_rsa.pub', 'r')
292    fdout = open (f'{btrootfsmnt}/root/.ssh/authorized_keys', 'a')
293    while True:
294        l = fdin.readline()
295        if not l: break
296        fdout.write (l)
297    fdin.close()
298    fdout.close()
299
300    ## TODO: exportamos la publica a los repos
301    #cp /root/.ssh/id_rsa.pub /tmp/rsa.ogclient.pub
302
303#move_initrd  genera un initrd.
304def move_initrd (bttargetdir, osrelease):
305    #echo "cp /tmp/*-${OSRELEASE} ${BTTARGETDIR}"
306    #cp /tmp/*-${OSRELEASE} ${BTTARGETDIR}      ## esto copia algo??
307
308    ## backup de oginitrd.img, oginitrd.img.sum, ogvmlinuz y ogvmlinuz.sum
309    now = datetime.datetime.now(datetime.timezone.utc).strftime ('%Y%m%d-%H%M%S%z')
310    if os.path.exists (f'{bttargetdir}/oginitrd.img'):
311        os.rename (f'{bttargetdir}/oginitrd.img'    , f'{bttargetdir}/oginitrd.img.{now}')
312        os.rename (f'{bttargetdir}/oginitrd.img.sum', f'{bttargetdir}/oginitrd.img.sum.{now}')
313    if os.path.exists (f'{bttargetdir}/ogvmlinuz'):
314        os.rename (f'{bttargetdir}/ogvmlinuz'    , f'{bttargetdir}/ogvmlinuz.{now}')
315        os.rename (f'{bttargetdir}/ogvmlinuz.sum', f'{bttargetdir}/ogvmlinuz.sum.{now}')
316
317    shutil.copy (f'/tmp/initrd.img-{osrelease}', f'{bttargetdir}/oginitrd.img')
318    shutil.copy (f'/tmp/vmlinuz-{osrelease}',    f'{bttargetdir}/ogvmlinuz')
319
320    utils.write_md5 (f'{bttargetdir}/oginitrd.img')
321    utils.write_md5 (f'{bttargetdir}/ogvmlinuz')
322
323    #chmod -R 755 $BTTARGETDIR
324    for f in glob.glob (f'{bttargetdir}/oginitrd*') + glob.glob (f'{bttargetdir}/vmlinuz*'):
325        os.chmod (f, 0o755)
326
327#mksquashfs   convierte el sistema root en sqfs
328def mksquashfs (bttargetdir, btrootfsmnt):
329    logger.info ('Iniciando la creación del sistema de archivos en sqfs')
330
331    # si ya existe un sqfs lo renombramos
332    if os.path.exists (f'{bttargetdir}/ogclient.sqfs'):
333        now = datetime.datetime.now(datetime.timezone.utc).strftime ('%Y%m%d-%H%M%S%z')
334        os.rename (f'{bttargetdir}/ogclient.sqfs', f'{bttargetdir}/ogclient.sqfs.{now}')
335
336    utils.run (['mksquashfs', btrootfsmnt, f'{bttargetdir}/ogclient.sqfs'])
337    os.chmod (f'{bttargetdir}/ogclient.sqfs', 0o744)
338
339    utils.write_md5 (f'{bttargetdir}/ogclient.sqfs')
340
341# mkisofs genera la iso del cliente
342def mkisofs (pxepkg, isolinux_tpl, bttargetdir, nameisoclient):
343    #Preparamos los gestores de arranque
344    try: os.makedirs ('/tmp/iso/isolinux', exist_ok=True)
345    except: raise
346
347    subprocess.run (['cp -a /usr/lib/syslinux/* /tmp/iso/isolinux/'], shell=True)
348
349    if 'gpxe' == pxepkg:
350        subprocess.run (['cp -a /usr/share/gpxe/* /tmp/iso/isolinux'], shell=True)
351    elif 'ipxe' == pxepkg:
352        subprocess.run (['cp -a /usr/lib/ipxe/* /tmp/iso/isolinux'], shell=True)
353    else:
354        raise Exception (f'unknown pxepkg value "{pxepkg}"')
355
356    # Si existe el fichero ISO, montarlo para extraer isolinux.bin.
357    if os.path.exists (f'/tmp/iso/isolinux/{pxepkg}.iso'):
358        os.mkdir ('/tmp/iso/isolinux/mount')
359        utils.run (['mount', '-o', 'loop', f'/tmp/iso/isolinux/{pxepkg}.iso', '/tmp/iso/isolinux/mount'])
360        subprocess.run (['cp -a /tmp/iso/isolinux/mount/* /tmp/iso/isolinux'], shell=True)
361        utils.umount ('/tmp/iso/isolinux/mount')
362        os.rmdir ('/tmp/iso/isolinux/mount')
363        os.unlink (f'/tmp/iso/isolinux/{pxepkg}.iso')
364
365    with open ('/tmp/iso/isolinux/isolinux.cfg', 'w') as fd:
366        fd.write (isolinux_tpl.strip().replace('__NAMEISOCLIENT__', nameisoclient).replace('__PXEPKG__', pxepkg))
367
368    # preparamos el directorio boot-tools.
369    if not os.path.exists ('/tmp/iso/ogclient'):
370        os.mkdir ('/tmp/iso/ogclient')
371    shutil.copy (f'{bttargetdir}/ogclient.sqfs',     '/tmp/iso/ogclient/')
372    shutil.copy (f'{bttargetdir}/ogclient.sqfs.sum', '/tmp/iso/ogclient/')
373    shutil.copy (f'{bttargetdir}/ogvmlinuz',         '/tmp/iso/ogclient/')
374    shutil.copy (f'{bttargetdir}/ogvmlinuz.sum',     '/tmp/iso/ogclient/')
375    shutil.copy (f'{bttargetdir}/ogvmlinuz',         '/tmp/iso/ogclient/linuxISO')
376    shutil.copy (f'{bttargetdir}/ogvmlinuz.sum',     '/tmp/iso/ogclient/linuxISO.sum')
377    shutil.copy (f'{bttargetdir}/oginitrd.img',      '/tmp/iso/ogclient/')
378    shutil.copy (f'{bttargetdir}/oginitrd.img.sum',  '/tmp/iso/ogclient/')
379    #el ogclienteToISO  debe tener una copia del ogvmlinuz como linuxISO
380    #cp -prv /var/lib/tftpboot/ogclientToIso/* /tmp/iso/ogclient
381
382    oldpwd = os.getcwd()
383    os.chdir ('/tmp')
384    logger.debug (f'mkisofs -quiet -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')
385    utils.run (['mkisofs', '-quiet', '-V', 'ogClient', '-o', f'{nameisoclient}.iso', '-b', 'isolinux/isolinux.bin', '-c', 'isolinux/boot.cat', '-J', '-no-emul-boot', '-boot-load-size', '4', '-boot-info-table', '/tmp/iso'])
386
387    utils.write_md5 (f'{nameisoclient}.iso')
388    os.chdir (oldpwd)
389
390    shutil.move (f'/tmp/{nameisoclient}.iso'    , f'/var/lib/tftpboot/ogclient/{nameisoclient}.iso')
391    shutil.move (f'/tmp/{nameisoclient}.iso.sum', f'/var/lib/tftpboot/ogclient/{nameisoclient}.iso.sum')
392
393#def __unused_boottoolsBootGraphics():
394#    find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null;
395#    apt-get -y install plymouth plymouth-theme-script
396#    update-alternatives --install /lib/plymouth/themes/default.plymouth default.plymouth /lib/plymouth/themes/opengnsys/opengnsys.plymouth 100
397#    update-alternatives --set default.plymouth /lib/plymouth/themes/opengnsys/opengnsys.plymouth
398#    mkdir -p /etc/initramfs-tools/conf.d
399#    echo "FRAMEBUFFER=y" > /etc/initramfs-tools/conf.d/splash
400
401
402############### No usados en el instalador, solo en actualizaciones.
403
404#         ogClientMount [str_program]
405#@brief   Acceso al 2nd FS del cliente desde el Servidor Opengnsys
406#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones
407#@return  Si no hay parametros: login de acceso.
408#@return  con un parametro: La salida del programa ejecutado
409#def ogClientMount():
410#       TODO comprobar que OGFILE y OGFILEMOUNT existe.
411#       mount | grep $OGCLIENTFILE > /dev/null || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256
412#       mount | grep $OGCLIENTMOUNT/proc > /dev/null || mount --bind /proc $OGCLIENTMOUNT/proc
413#       mount | grep $OGCLIENTMOUNT/sys > /dev/null || mount --bind /sys $OGCLIENTMOUNT/sys
414#       mount | grep $OGCLIENTMOUNT/tmp > /dev/null || mount --bind /tmp $OGCLIENTMOUNT/tmp
415#       mount | grep $OGCLIENTMOUNT/dev > /dev/null || mount --bind /dev $OGCLIENTMOUNT/dev
416#       mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null || mount --bind /dev/pts $OGCLIENTMOUNT/dev/pts
417#       [ $# = 0 ] && $(chroot $OGCLIENTMOUNT /sbin/getty 38400 `tty`)
418#       [ $# = 1 ] && chroot $OGCLIENTMOUNT $1
419
420#@brief   Desmonta el 2nd FS del cliente desde el Servidor Opengnsys
421#def ogClientUnmount():
422#       cd /tmp
423#       echo "desmontando cliente espere"
424#       sleep 5
425#       mount | grep $OGCLIENTMOUNT/dev > /dev/null && umount $OGCLIENTMOUNT/dev || ogClientUnmount
426#       mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null && umount $OGCLIENTMOUNT/dev/pts || ogClientUnmount
427#       mount | grep $OGCLIENTMOUNT/proc > /dev/null && umount $OGCLIENTMOUNT/proc || ogClientUnmount
428#       mount | grep $OGCLIENTMOUNT/sys > /dev/null && umount $OGCLIENTMOUNT/sys || ogClientUnmount
429#       mount | grep $OGCLIENTMOUNT/tmp > /dev/null && umount $OGCLIENTMOUNT/tmp || ogClientUnmount
430#       mount | grep $OGCLIENTMOUNT > /dev/null && umount $OGCLIENTMOUNT || ogClientUnmount
Note: See TracBrowser for help on using the repository browser.