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.
more_events
Jose M. Guisado 2022-05-09 12:40:46 +02:00
parent 4e5b17ce6d
commit 81ee4b02dd
2 changed files with 71 additions and 0 deletions

View File

@ -20,6 +20,7 @@ from src.utils.menu import generate_menu
from src.utils.fs import mount_mkdir, umount, get_usedperc
from src.utils.probe import os_probe, cache_probe
from src.utils.disk import get_disks
from src.utils.cache import generate_cache_txt
OG_SHELL = '/bin/bash'
@ -351,6 +352,7 @@ class OgLiveOperations:
parsed['partition_setup'].append(part_setup)
generate_menu(parsed['partition_setup'])
generate_cache_txt()
self._restartBrowser(self._url)
return parsed

69
src/utils/cache.py 100644
View File

@ -0,0 +1,69 @@
#
# Copyright (C) 2022 Soleta Networks <info@soleta.eu>
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU Affero General Public License as published by the
# Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
import os
from src.utils.fs import mount_mkdir, umount
from src.utils.net import getifaddr
from src.utils.probe import cache_probe
OGIMG='/opt/opengnsys/images/'
OGCACHE_MOUNTPOINT='/opt/opengnsys/cache'
OGCLIENT_LOG_CACHE='/opt/opengnsys/log/{ip}.cache.txt'
def mount_cache():
"""
Probes for cache and mounts if succesful.
Returns the mountpoint or an empty string.
"""
cache_dev = cache_probe()
if cache_dev:
# cache_target = cache_dev.replace('dev', 'mnt')
mount_mkdir(cache_dev, OGCACHE_MOUNTPOINT)
return OGCACHE_MOUNTPOINT
return ''
def umount_cache():
"""
If OGCACHE_MOUNTPOINT is a mountpoint, umounts.
If not, does nothing.
"""
if os.path.ismount(OGCACHE_MOUNTPOINT):
umount(OGCACHE_MOUNTPOINT)
def write_cache_txt(content):
"""
Dumps content to /opt/opengnsys/log/{ip}.cache.txt
"""
client_ip = getifaddr(os.getenv('DEVICE'))
with open(OGCLIENT_LOG_CACHE.format(ip=client_ip), 'w') as f:
print("About to write")
f.write(content)
def generate_cache_txt():
"""
If no OpenGnsys cache partition is detected this function will
do nothing.
Generates a *.cache.txt file from a given path.
A .cache.txt file is just a comma separated list of
the files contained in the images folder in the OpenGnsys cache.
"""
cache_path = mount_cache()
if cache_path:
try:
files = os.listdir(f'{cache_path}{OGIMG}')
except FileNotFoundError:
return
content = ','.join(files)
write_cache_txt(content)