Commit Graph

173 Commits (ogkiosk)

Author SHA1 Message Date
Jose M. Guisado b58ccca48b legacy: improve readability of ogGetImageInfo helper functions
Change the name of the helper functions used when getting opengnsys
image information (legacy ogGetImageInfo bash script). As of now the
process consist of decompressing the image file with lzop and feeding
that output to partclone.info.

Prefer a more explicit function name rather than "process_image_*"

Add comment about skipping the first two lines of partclone.info output.
Usually, partclone.info starts printing out these two lines that are not
related to the partclone image information:

	Partclone v0.3.23 http://partclone.org
	Showing info of image (-)

As long as partclone.info output doesn't change we'll be fine, but we
should not depend on human readable output. This might change in the
future (i.e. adding json output format to partclone.info).
2023-03-10 11:26:42 +01:00
Jose M. Guisado c9a3a763dd legacy: rewrite ogGetImageInfo
Rewrites this legacy script behavior using native Python code, using
subprocess module when executing programs like partclone.info or lzop

ogGetImageInfo is a bash script that retrieves information regarding an
OpenGnsys partition image, specifically:

- clonator
- compressor
- filesystem
- datasize (size of the partition image)

This rewrite only supports partclone and lzop compressed images. This is
standard behavior, we have no reports of other programs or compression
algorithms in use.

Keep this legacy function with hungarian notation to emphasize this is
still a legacy component that may be replaced in the future.
2023-03-02 13:15:10 +01:00
Jose M. Guisado a1edbe904b legacy: rewrite ogChangeRepo
Drop ogChangeRepo Bash script in favor of a native Python
approach. Use only necessary subprocess calls instead of bringing
all the logic of this function into a Bash script black box.

ogChangeRepo unmounts the current OpenGnsys image samba folder
(/opt/opengnsys/images) and mounts (connects to) a new directory using
the new provided ip address. Keeping access mode from previous mount.
If anything goes wrong when mounting the new directory, it will fallback
to mounting the previous directory.

If no previous OpenGnsys image samba directory is detected, this
functions tries to mount the new directory anyway. In this case,
it will raise CalledProcessError if something goes wrong.
2023-03-02 09:33:33 +01:00
Jose M. Guisado 1858950af1 legacy: improve readability of cambiar_accesso
Expand function docstring and do not use CalledProcessError handling to
return True or False. Just checking for returncode value is simpler.
2023-03-02 09:09:39 +01:00
Jose M. Guisado 7801d483d4 utils: add init_cache function
init_cache() creates the default directory in which OpenGnsys stores
images when using any cache enabled transfer method.

As of this commit this folder must exist for tiptorrent.py to
work properly.

Subprocess Popen object inside tiptorrent.py use
'cwd' optional parameter like:

	cwd='/opt/opengnsys/cache/opt/opengnsys/images/'

This folder convention might change in the future.
2023-02-08 17:11:44 +01:00
Jose M. Guisado eac942660f utils: add fs.py
Adds utility module which wraps several mkfs.* calls as a subprocess.

The main utility function is mkfs(fs, disk, partition, label), which
subsequently calls the corresponding mkfs_*(partition_device) function.

mkfs() supports specifying a drive label where supported.

Other modules using fs.py should call mkfs() only.
2023-02-08 17:11:44 +01:00
Jose M. Guisado 699a6c242a live: improve error paths
Fix error paths in live operations which do not
reset the "browser" to the main page (one with the menu).

Add error logging messages when:

* _restartBrowser fails.
* ogChangeRepo fails.

Improve checksum fetch error handling. For example, when an invalid
repository IP is specified.
2022-11-17 15:55:42 +01:00
Jose M. Guisado 55c76c9d70 tiptorrent: improve raised exceptions for tip_client_get
Raise exception when tiptorrent-client subprocess runs normally but
exits with non-zero code. (For example, if download file allocation
failed)
2022-09-29 13:24:43 +02:00
Jose M. Guisado 00a95bdb61 live: rewrite image_restore
Integrates image restore command into native ogClient code. Further
reduces the need for external Bash scripts.

After a succesful image restore, OS configuration is still using
external Bash script "osConfigure/osConfigureCustom".
2022-09-14 17:12:14 +02:00
Jose M. Guisado 5d799773f6 utils: add tiptorrent.py
Utility and wrapper functions related to the usage of tiptorrent.
To be used by the image restore command.
2022-09-14 17:12:14 +02:00
Jose M. Guisado 52838e2ce6 utils: add get_partition_device
Maps a disk and partition number to the corresponding device path
('/dev/sdXY', '/dev/nvmeXnYpZ', ...)
2022-09-14 17:12:14 +02:00
Jose M. Guisado 87e738b33f image_restore: fix ogCopyEfiBootLoader
ogCopyEfiBootloader is an invalid legacy bash function name.

Rename to the correct function name 'ogCopyEfiBootLoader' and
rename utility python wrapper too.

Fixes: 0bd037c1a409c65fbcb01355ee0dd6dca770330e
2022-09-14 17:12:14 +02:00
Jose M. Guisado 91077da273 utils: minor fix for ogReduceFs and ogExtendFs
Do not return the subprocess result for ogReduceFs/ogExtendFs.

ogReduceFs works with or without the target filesystem mounted.
ogExtendFs requires the target filesystem to be mounted.

'ogMount' legacy script invocation should be replaced by a better
mount/umount wrapper.
2022-09-14 17:12:14 +02:00
Jose M. Guisado cb0bd3d194 image_create: add legacy ogCopyEfiBootloader
Use legacy script that saves the Windows-specific content from the ESP
to the image target filesystem.

Current image restore solution from OpenGnsys scripts expect the EFI
partition to be stored in the target system partition. (Only for Windows
10)

For example, storing the ESP in the NTFS partition of a Windows image.

Expect use of bash script ogCopyEfiBootloader until further
integration is merged.
2022-09-14 17:10:45 +02:00
Jose M. Guisado 3550da73e6 image_create: partial integration into python
Integrates some parts of this operation into native code, eg: the md5
checksum computation.

Wraps non native processes and commands using the subprocess module.
For example, legacy.py stores bash commands pending integration.

Supports python >=3.6, expected until more modern ogLives are put into
production environments.
2022-08-24 09:48:35 +02:00
Jose M. Guisado 30fdcceea3 src: improve logging
Adds new logging handler redirecting messages to the log file
located in the Samba shared directory (applies to live mode
clients, i.e: ogLive)

Parses log level configuration from ogclient.json. See:

{
	"opengnsys": {
		...
                "log": "INFO",
		...
	}
	...
}

Adds --debug option to set root logger level to DEBUG when starting
ogClient. Overrides log level from config file.

In addition:

- Replaces any occurence of print with a corresponding logging function.
- Unsets log level for handlers, use root logger level instead.
- Default level for root logger is INFO.
- Replaces level from response log messages to debug (ogRest)
2022-06-08 10:27:06 +02:00
Jose M. Guisado 621d1b9147 utils: mount_mkdir success if target is a mountpoint
Returns true if target is already a mountpoint. Does not call mount.

It's possible that another device might be mounted in the target
mountpoint. A future check between the source and target for
equal device major:minor must be added.
2022-06-01 11:48:30 +02:00
Jose M. Guisado 81ee4b02dd live: generate cache.txt file in refresh
Generates a cache.txt file if a cache partition is detected.

OpenGnsys stores information about stored images in its 'cache'
partition via a text file.

The file is stored in a samba shared directory, mounted at
'/opt/opengnsys/log/' in a live client. The file name is '{ip}.cache.txt'.

Previously, the generation of this file was delegated to external bash
scripts.
2022-06-01 11:48:30 +02:00
Jose M. Guisado 4e5b17ce6d probe: detect 64 bit operating systems
OpenGnsys partition images store OS information, including
the OS name appended with "64 bits" when the OS is meant for 64 bit
machines.

The detected OS name when probing (refresh) is important, if it differs
from what's stored in the DB OpenGnsys will wipe last image restored
information when running a refresh.

See actualizaConfiguracion from legacy ogserver (ogAdmServer.c) code:

	dato = dbi_result_get_uint(result, "idnombreso");
	if (idsoi == dato) {
		swu = false;
	}
	...
	if (swu) {
		result_update = dbi_conn_queryf(dbi->conn,
		"UPDATE ordenadores_particiones SET "
			" codpar=0x%s,"
			" tamano=%s,"
			" uso=%s,"
			" idsistemafichero=%d,"
			" idnombreso=%d,"
			" idimagen=0,"
			" idperfilsoft=0,"
			" fechadespliegue=NULL"
			" WHERE idordenador=%d AND numdisk=%s AND numpar=%s",
2022-05-09 12:57:36 +02:00
Jose M. Guisado ad2d4a1f1a utils: fix winreghives path string
Adds missing slash in the windows reghives path f-string.

When calling os_probe inside refresh (live/ogOperations) the mountpoint
is passed without a trailing slash.
2022-04-28 16:11:30 +02:00
Jose M. Guisado e6079c42ea live: detect cache partitions in new refresh
Detects OpenGnsys cache partition when building the partition setup of a
live system.

OpenGnsys labels a Linux/ext4 partition as "CACHE".
2022-04-28 16:11:11 +02:00
Jose M. Guisado ad3d3b2d19 utils: decode probing subprocess stdout
Cannot replace str ('\n') when stdout is a bytes object.

Also fixes some typos (i.e: proc_releaseid stdout was used twice).
2022-04-27 09:38:38 +02:00
Jose M. Guisado 902e019505 Add utils modules
* disk.py

	Disk discovery

* fs.py

	Uses psutil to fetch fs usage information

* menu.py

	ogBrowser menu generation

* net.py: gets nic status information

	IP address, MAC address and ethernet speed.

* probe.py: probes mountpoints for operating systems

	Uses hivexget command to try fetching Windows installation
	information.
	Looks for /etc/os-release for probing linux systems.
2022-04-21 09:47:04 +02:00