ogclone-engine/client/etc/preinit/mountrepo.py

62 lines
2.2 KiB
Python

#!/usr/bin/env python3
import os
import subprocess
#/**
# @file mountrepo.py
# @brief Script para montar el repositorio de datos remoto.
#*/
OGIMG = os.getenv('OGIMG', '/opt/opengnsys/images')
ROOTREPO = os.getenv('ROOTREPO', os.getenv('ROOTSERVER'))
ogactiveadmin = os.getenv('ogactiveadmin')
ogprotocol = os.getenv('ogprotocol', 'smb')
ogunit = os.getenv('ogunit', '')
ogstatus = os.getenv('ogstatus')
SERVER = os.getenv('SERVER')
OGCAC = os.getenv('OGCAC')
MSG_MOUNTREPO = "Mounting repository using protocol: {} in mode: {}"
def mount_repo():
if ogactiveadmin == "true":
os.environ['boot'] = 'admin' # ATENCIÓN: siempre en modo "admin".
subprocess.run(['umount', OGIMG], stderr=subprocess.DEVNULL)
protocol = ogprotocol
OGUNIT = f"/{ogunit}" if ogunit else ""
print(MSG_MOUNTREPO.format(protocol, 'admin'))
if protocol == 'nfs':
subprocess.run(['mount.nfs', f'{ROOTREPO}:{OGIMG}{OGUNIT}', OGIMG, '-o', 'rw,nolock'])
elif protocol == 'smb':
PASS = get_password()
subprocess.run(['mount.cifs', f'//{ROOTREPO}/ogimages{OGUNIT}', OGIMG, '-o', f'rw,serverino,acl,username=opengnsys,password={PASS}'])
elif protocol == 'local':
handle_local_mount()
def get_password():
try:
with open('/scripts/ogfunctions') as f:
for line in f:
if 'OPTIONS=' in line:
return line.split('pass=')[1].split()[0]
except Exception:
pass
return 'og'
def handle_local_mount():
if ogstatus == "offline" or not SERVER:
TYPE = subprocess.getoutput("blkid | grep REPO | awk -F'TYPE=' '{print $2}' | tr -d '\"'")
if not TYPE:
if os.path.isdir(f'{OGCAC}/{OGIMG}'):
subprocess.run(['mount', '--bind', f'{OGCAC}/{OGIMG}', OGIMG])
else:
subprocess.run(['mount', '-t', TYPE, 'LABEL=REPO', OGIMG], stderr=subprocess.DEVNULL)
else:
if subprocess.run(['smbclient', '-L', SERVER, '-N'], stderr=subprocess.DEVNULL).returncode == 0:
PASS = get_password()
subprocess.run(['mount.cifs', f'//{ROOTREPO}/ogimages', OGIMG, '-o', f'rw,serverino,acl,username=opengnsys,password={PASS}'])
if __name__ == "__main__":
mount_repo()