diff --git a/03-boottoolsSoftwareInstall.py b/03-boottoolsSoftwareInstall.py index 53f1f2e..6f4667d 100755 --- a/03-boottoolsSoftwareInstall.py +++ b/03-boottoolsSoftwareInstall.py @@ -7,13 +7,9 @@ import re import subprocess import configparser -from boottoolsfunctions import _run +from boottoolsfunctions import _run, _read_config -config = configparser.ConfigParser (comment_prefixes='#', inline_comment_prefixes='#') -if not os.path.exists ('boottoolsgenerator.cfg'): - print ('configuration file "boottoolsgenerator.cfg" not found') - sys.exit (1) -config.read ('boottoolsgenerator.cfg') +config = _read_config ('boottoolsgenerator.cfg') debconf_settings = config['debconf'].get ('settings') def _aptget_clean(): diff --git a/05-boottoolsFsLocales.py b/05-boottoolsFsLocales.py index e3995b8..486e21f 100755 --- a/05-boottoolsFsLocales.py +++ b/05-boottoolsFsLocales.py @@ -3,13 +3,9 @@ import os import subprocess import configparser -from boottoolsfunctions import _run +from boottoolsfunctions import _run, _read_config -config = configparser.ConfigParser (inline_comment_prefixes='#') -if not os.path.exists ('boottoolsgenerator.cfg'): - print ('configuration file "boottoolsgenerator.cfg" not found') - sys.exit (1) -config.read ('boottoolsgenerator.cfg') +config = _read_config ('boottoolsgenerator.cfg') debconf_settings2 = config['debconf'].get ('settings2') subprocess.run (['debconf-set-selections'], input=debconf_settings2, text=True) diff --git a/boottoolsfunctions/__init__.py b/boottoolsfunctions/__init__.py index 7693f4f..e7acbae 100644 --- a/boottoolsfunctions/__init__.py +++ b/boottoolsfunctions/__init__.py @@ -43,6 +43,14 @@ def _umount (mntpt): if (_is_mounted (mntpt)): _run (['umount', mntpt]) +def _read_config (fn): + if not os.path.exists (fn): + print (f'configuration file "{fn}" not found') + sys.exit (1) + config = configparser.ConfigParser (comment_prefixes='#', inline_comment_prefixes='#') + config.read (fn) + return config + def btogGetVar (osarch): btdir = '/tmp/opengnsys_installer/opengnsys/client/boot-tools' bttargetdir = '/var/lib/tftpboot/ogclient/' @@ -58,7 +66,6 @@ def btogGetVar (osarch): return btdir, bttargetdir, btrootfsimg, btrootfsmnt, btrootfsimglabel, log_file, versionboottools, btvirtualdisksize def btogGetOsInfo1 (type_client): - ogclientcfg = '/tmp/ogclient.cfg' if 'precise' == type_client: # ogLive 1.0.4-rc2 basado en Ubuntu 12.04 LTS. osdistrib='ubuntu' oscodename='precise' @@ -158,31 +165,15 @@ def btogGetOsInfo1 (type_client): else: # Parámetro desconocido print ('Parámetro no válido.') os.exit (1) - return ogclientcfg, osdistrib, oscodename, osrelease, osarch, oshttp + return osdistrib, oscodename, osrelease, osarch, oshttp -def btogGetOsInfo2 (type_client, versionboottools, ogclientcfg, osdistrib, oscodename, osrelease, osarch, oshttp): +def btogGetOsInfo2 (type_client, versionboottools, osdistrib, oscodename, osrelease, osarch, oshttp): branch = 'master' giturl = f'https://api.github.com/repos/opengnsys/OpenGnsys/commits?sha={branch}&path=/client' gitrelease = 'r20240808' ## TODO: are we going to keep the following? $(curl -s "$GITURL" | jq -r '"r" + (.[0].commit.committer.date | split("-") | join("")[:8]) + "." + (.[0].sha[:7])') nameisoclient ='-'.join ([versionboottools, oscodename, osrelease, osarch, gitrelease]) namehostclient = '-'.join ([versionboottools, oscodename, gitrelease]) - ### El fichero de configuración debe sustituir a estos 3 ficheros (borrar las 3 líneas siguientes). - #echo "$NAMEISOCLIENT" > /tmp/opengnsys_info_rootfs - #echo "$NAMEHOSTCLIENT" > /tmp/opengnsys_chroot - - # Generar fichero de configuración. - with open (ogclientcfg, 'w') as f: - print (f'TYPECLIENT="{type_client}"', file=f) - print (f'OSDISTRIB="{osdistrib}"', file=f) - print (f'OSCODENAME="{oscodename}"', file=f) - print (f'OSRELEASE="{osrelease}"', file=f) - print (f'OSARCH="{osarch}"', file=f) - print (f'OSHTTP="{oshttp}"', file=f) - print (f'GITRELEASE="{gitrelease}"', file=f) - print (f'NAMEISOCLIENT="{nameisoclient}"', file=f) - print (f'NAMEHOSTCLIENT="{namehostclient}"', file=f) - return gitrelease, nameisoclient, namehostclient def btogSetFsVirtual (btrootfsimg, btrootfsimglabel, btrootfsmnt, btvirtualdisksize, bttargetdir, osarch): @@ -225,7 +216,8 @@ def btogSetFsVirtual (btrootfsimg, btrootfsimglabel, btrootfsmnt, btvirtualdisks logger.info ('Partitioning disk image') stdout, _ = _run (['bash', '-c', f"echo $'n\np\n1\n\n\nt\n83\nw' |fdisk {diskloop}"]) - logger.debug (f'fdisk output follows: {stdout}') + logger.debug (f'fdisk stdout follows:') + for i in stdout.strip().split('\n'): logger.debug (' ' + i) time.sleep (3) logger.debug ('losetup --detach') @@ -254,6 +246,34 @@ def btogSetFsVirtual (btrootfsimg, btrootfsimglabel, btrootfsmnt, btvirtualdisks logger.info (f'"{btrootfsimg}" "{btvirtualdisksize}" MB : OK') +schroot_conf_tpl = """ +[IMGogclient] +type=loopback +file=/var/lib/tftpboot/ogclient/ogclient.img +description=ogclient Ubuntu image +#priority=1 +users=root +groups=root +root-groups=root +mount-options=-o offset=32256 +root-users=root +""".strip() + +mount_defaults_tpl = """ +# mount.defaults: static file system information for chroots. +# Note that the mount point will be prefixed by the chroot path +# (CHROOT_PATH) +# +# +proc /proc proc defaults 0 0 +#procbususb /proc/bus/usb usbfs defaults 0 0 +#/dev /dev none rw,bind 0 0 +/dev/pts /dev/pts none rw,bind 0 0 +/dev/shm /dev/shm none rw,bind 0 0 +#/home /home none rw,bind 0 0 +/tmp /tmp none rw,bind 0 0 +""".strip() + #btogSetFsAcces: habilita el acceso al sistema root del cliente con schroot def btogSetFsAccess (btrootfsimg): if (_grep (btrootfsimg, '/etc/schroot/schroot.conf')): @@ -265,34 +285,14 @@ def btogSetFsAccess (btrootfsimg): shutil.copy ('/etc/schroot/schroot.conf', '/etc/schroot/schroot.conf.bak') with open ('/etc/schroot/schroot.conf', 'w') as f: - print ('[IMGogclient]', file=f) - print ('type=loopback', file=f) - print ('file=/var/lib/tftpboot/ogclient/ogclient.img', file=f) - print ('description=ogclient Ubuntu image', file=f) - print ('#priority=1', file=f) - print ('users=root', file=f) - print ('groups=root', file=f) - print ('root-groups=root', file=f) - print ('mount-options=-o offset=32256', file=f) - print ('root-users=root', file=f) + f.write (schroot_conf_tpl + '\n') #cp /etc/schroot/mount-defaults /etc/schroot/mount-defaults.`getDateTime` if (os.path.exists ('/etc/schroot/mount-defaults')): shutil.copy ('/etc/schroot/mount-defaults', '/etc/schroot/mount-defaults.bak') with open ('/etc/schroot/mount-defaults', 'w') as f: - print ('# mount.defaults: static file system information for chroots.', file=f) - print ('# Note that the mount point will be prefixed by the chroot path', file=f) - print ('# (CHROOT_PATH)', file=f) - print ('#', file=f) - print ('# ', file=f) - print ('proc /proc proc defaults 0 0', file=f) - print ('#procbususb /proc/bus/usb usbfs defaults 0 0', file=f) - print ('#/dev /dev none rw,bind 0 0', file=f) - print ('/dev/pts /dev/pts none rw,bind 0 0', file=f) - print ('/dev/shm /dev/shm none rw,bind 0 0', file=f) - print ('#/home /home none rw,bind 0 0', file=f) - print ('/tmp /tmp none rw,bind 0 0', file=f) + f.write (mount_defaults_tpl + '\n') map (os.unlink, glob.glob('/etc/schroot/setup.d/*chrootname')) #for i in glob.glob ('/etc/schroot/setup.d/*chrootname'): diff --git a/boottoolsgenerator.cfg b/boottoolsgenerator.cfg index 3542537..2797d4b 100644 --- a/boottoolsgenerator.cfg +++ b/boottoolsgenerator.cfg @@ -62,6 +62,10 @@ xwindows = #roxterm gparted #+80M #openbox midori #xvesa en compilacion +[General] + +logging_level = INFO + [debconf] settings = diff --git a/boottoolsgenerator.py b/boottoolsgenerator.py index 6891796..4b57dae 100755 --- a/boottoolsgenerator.py +++ b/boottoolsgenerator.py @@ -11,29 +11,29 @@ import shutil curdir = os.path.dirname (__file__) sys.path.insert (0, curdir) -from boottoolsfunctions import _run, _mount, _umount, btogGetOsInfo1, btogGetOsInfo2, btogGetVar, btogSetFsVirtual, btogSetFsAccess, btogSetFsBase, boottoolsSshServer, boottoolsSshClient, btogFsInitrd, btogFsSqfs, btogIsoGenerator +from boottoolsfunctions import _run, _mount, _umount, _read_config, btogGetOsInfo1, btogGetOsInfo2, btogGetVar, btogSetFsVirtual, btogSetFsAccess, btogSetFsBase, boottoolsSshServer, boottoolsSshClient, btogFsInitrd, btogFsSqfs, btogIsoGenerator +config = _read_config ('boottoolsgenerator.cfg') +isolinux_tpl = config['ISOLinux'].get ('template') +lvl = config['General'].get ('logging_level') + +numeric_level = getattr (logging, lvl.upper(), None) +if numeric_level is None: + numeric_level = getattr (logging, 'INFO') def _logging(): #logging.root.handlers = [] logging.basicConfig ( format='%(levelname)s %(asctime)s (%(funcName)s) %(message)s', - level=logging.INFO, + level=numeric_level, handlers = [ logging.FileHandler ('/tmp/boot-tools_installation.log'), logging.StreamHandler (sys.stdout), ], ) - return = logging.getLogger ('boottools') + return logging.getLogger ('boottools') logger = _logging() -config = configparser.ConfigParser (comment_prefixes='#', inline_comment_prefixes='#') -if not os.path.exists ('boottoolsgenerator.cfg'): - print ('configuration file "boottoolsgenerator.cfg" not found') - sys.exit (1) -config.read ('boottoolsgenerator.cfg') -isolinux_tpl = config['ISOLinux'].get ('template') - def clone_client_dirs(): if not os.path.exists ('/tmp/opengnsys_installer/opengnsys/client/engine'): branch = 'main' @@ -59,9 +59,9 @@ clone_client_dirs() ####################################################################3 logger.info ('FASE 1 - Asignación de variables') -ogclientcfg, osdistrib, oscodename, osrelease, osarch, oshttp = btogGetOsInfo1(type_client) +osdistrib, oscodename, osrelease, osarch, oshttp = btogGetOsInfo1(type_client) btdir, bttargetdir, btrootfsimg, btrootfsmnt, btrootfsimglabel, log_file, versionboottools, btvirtualdisksize = btogGetVar(osarch) -gitrelease, nameisoclient, namehostclient = btogGetOsInfo2(type_client, versionboottools, ogclientcfg, osdistrib, oscodename, osrelease, osarch, oshttp) +gitrelease, nameisoclient, namehostclient = btogGetOsInfo2(type_client, versionboottools, osdistrib, oscodename, osrelease, osarch, oshttp) def _mount_rootfs(): global btrootfsimg, btrootfsmnt @@ -158,9 +158,10 @@ def _cerodos(): logger.error ('mount failed') sys.exit (3) - logger.debug (f'running \'{curdir}/02-boottoolsFsOpengnsys.py --mntpt "{btrootfsmnt}" --osdistrib "{osdistrib}" --oscodename "{oscodename}" --osrelease "{osrelease}" --osarch "{osarch}" --oshttp "{oshttp))}"\'') + logger.debug (f'running \'{curdir}/02-boottoolsFsOpengnsys.py --mntpt "{btrootfsmnt}" --osdistrib "{osdistrib}" --oscodename "{oscodename}" --osrelease "{osrelease}" --osarch "{osarch}" --oshttp "{oshttp}"\'') stdout, _ = _run ([f'{curdir}/02-boottoolsFsOpengnsys.py', '--mntpt', btrootfsmnt, '--osdistrib', osdistrib, '--oscodename', oscodename, '--osrelease', osrelease, '--osarch', osarch, '--oshttp', oshttp]) - logger.debug (f'02-boottoolsFsOpengnsys stdout follows: {stdout}') + logger.debug (f'02-boottoolsFsOpengnsys stdout follows:') + for i in stdout.strip().split('\n'): logger.debug (' ' + i) _umount (btrootfsmnt) @@ -170,9 +171,10 @@ _cerodos() ## aqui empiezan las cosas de chroot def _cerotres(): - logger.debug (f'running \'schroot --chroot IMGogclient -- {curdir}/03-boottoolsSoftwareInstall.py --osrelease "{osrelease}" --osarch "{osarch))}"\'') + logger.debug (f'running \'schroot --chroot IMGogclient -- {curdir}/03-boottoolsSoftwareInstall.py --osrelease "{osrelease}" --osarch "{osarch}"\'') stdout, _ = _run (['schroot', '--chroot', 'IMGogclient', '--', f'{curdir}/03-boottoolsSoftwareInstall.py', '--osrelease', osrelease, '--osarch', osarch]) - logger.debug (f'03-boottoolsSoftwareInstall stdout follows: {stdout}') + logger.debug (f'03-boottoolsSoftwareInstall stdout follows:') + for i in stdout.strip().split('\n'): logger.debug (' ' + i) logger.info ('FASE 5 - Instalar software') logger.info ('Fase 5.1 instalar paquetes deb con apt-get') @@ -183,10 +185,11 @@ def _cerocuatro(): #cd / stdout, _ = _run (['schroot', '--chroot', 'IMGogclient', '--', f'{curdir}/04-boottoolsSoftwareCompile.py']) #cd - - logger.debug (f'04-boottoolsSoftwareCompile stdout follows: {stdout}') + logger.debug (f'04-boottoolsSoftwareCompile stdout follows:') + for i in stdout.strip().split('\n'): logger.debug (' ' + i) logger.info ('Fase 5.2 compilar software.') -_cerocuatro(): +_cerocuatro() ## ya no chroot @@ -226,7 +229,8 @@ _ssh_stuff() def _cerocinco(): logger.debug (f'running \'schroot --chroot IMGogclient -- {curdir}/05-boottoolsFsLocales.py\'') stdout, _ = _run (['schroot', '--chroot', 'IMGogclient', '--', f'{curdir}/05-boottoolsFsLocales.py']) - logger.debug (f'05-boottoolsFsLocales stdout follows: {stdout}') + logger.debug (f'05-boottoolsFsLocales stdout follows:') + for i in stdout.strip().split('\n'): logger.debug (' ' + i) logger.info ('Fase 6.3 Configurando las locales') _cerocinco() @@ -234,9 +238,10 @@ _cerocinco() def _ceroseis(): #cd / #schroot -c IMGogclient -- /usr/bin/boot-tools/boottoolsInitrdGenerate.sh - logger.debug (f'running \'schroot --chroot IMGogclient -- {curdir}/06-boottoolsInitrdGenerate.py --osrelease "{osrelease))}"\'') + logger.debug (f'running \'schroot --chroot IMGogclient -- {curdir}/06-boottoolsInitrdGenerate.py --osrelease "{osrelease}"\'') stdout, _ = _run (['schroot', '--chroot', 'IMGogclient', '--', f'{curdir}/06-boottoolsInitrdGenerate.py', '--osrelease', osrelease]) - logger.debug (f'06-boottoolsInitrdGenerate stdout follows: {stdout}') + logger.debug (f'06-boottoolsInitrdGenerate stdout follows:') + for i in stdout.strip().split('\n'): logger.debug (' ' + i) ## esto deja initrd.img-6.8.0-31-generic y vmlinuz-6.8.0-31-generic en /tmp _ceroseis()