123 lines
4.6 KiB
Python
123 lines
4.6 KiB
Python
"""WordOps packages repository operations"""
|
|
import os
|
|
|
|
from wo.core.logging import Log
|
|
from wo.core.shellexec import WOShellExec
|
|
from wo.core.variables import WOVar
|
|
|
|
|
|
class WORepo():
|
|
"""Manage Repositories"""
|
|
|
|
def __init__(self):
|
|
"""Initialize """
|
|
pass
|
|
|
|
def add(self, repo_url=None, ppa=None, repo_name=None):
|
|
"""
|
|
This function used to add apt repositories and or ppa's
|
|
If repo_url is provided adds repo file to
|
|
/etc/apt/sources.list.d/
|
|
If ppa is provided add apt-repository using
|
|
add-apt-repository
|
|
command.
|
|
"""
|
|
|
|
if repo_url is not None:
|
|
if repo_name is not None:
|
|
repo_file_path = ("/etc/apt/sources.list.d/" +
|
|
f"{repo_name}.list")
|
|
try:
|
|
if not os.path.isfile(repo_file_path):
|
|
with open(repo_file_path,
|
|
encoding='utf-8', mode='w') as repofile:
|
|
repofile.write(repo_url)
|
|
repofile.write('\n')
|
|
repofile.close()
|
|
elif repo_url not in open(repo_file_path,
|
|
encoding='utf-8').read():
|
|
with open(repo_file_path,
|
|
encoding='utf-8', mode='w') as repofile:
|
|
repofile.write(repo_url)
|
|
repofile.write('\n')
|
|
repofile.close()
|
|
return True
|
|
except IOError as e:
|
|
Log.debug(self, "{0}".format(e))
|
|
Log.error(self, "File I/O error.")
|
|
except Exception as e:
|
|
Log.debug(self, "{0}".format(e))
|
|
Log.error(self, "Unable to add repo")
|
|
if ppa is not None:
|
|
ppa_split = ppa.split(':')[1]
|
|
ppa_author = ppa_split.split('/')[0]
|
|
Log.debug(self, "ppa_author = {0}".format(ppa_author))
|
|
ppa_package = ppa_split.split('/')[1]
|
|
Log.debug(self, "ppa_package = {0}".format(ppa_package))
|
|
if os.path.exists(
|
|
'/etc/apt/sources.list.d/{0}-ubuntu-{1}-{2}.list'
|
|
.format(ppa_author,
|
|
ppa_package, WOVar.wo_platform_codename)):
|
|
Log.debug(self, "ppa already added")
|
|
return True
|
|
if WOShellExec.cmd_exec(
|
|
self, "LC_ALL=C.UTF-8 add-apt-repository -y '{ppa_name}'"
|
|
.format(ppa_name=ppa)):
|
|
Log.debug(self, "Added PPA {0}".format(ppa))
|
|
return True
|
|
return False
|
|
|
|
def remove(self, ppa=None, repo_url=None):
|
|
"""
|
|
This function used to remove ppa's
|
|
If ppa is provided adds repo file to
|
|
/etc/apt/sources.list.d/
|
|
command.
|
|
"""
|
|
if ppa:
|
|
WOShellExec.cmd_exec(self, "add-apt-repository -y "
|
|
"--remove '{ppa_name}'"
|
|
.format(ppa_name=ppa))
|
|
elif repo_url:
|
|
repo_file_path = ("/etc/apt/sources.list.d/" +
|
|
WOVar().wo_repo_file)
|
|
|
|
try:
|
|
repofile = open(repo_file_path, "w+", encoding='utf-8')
|
|
repofile.write(repofile.read().replace(repo_url, ""))
|
|
repofile.close()
|
|
except IOError as e:
|
|
Log.debug(self, "{0}".format(e))
|
|
Log.error(self, "File I/O error.")
|
|
except Exception as e:
|
|
Log.debug(self, "{0}".format(e))
|
|
Log.error(self, "Unable to remove repo")
|
|
|
|
def add_key(self, keyid, keyserver=None):
|
|
"""
|
|
This function adds imports repository keys from keyserver.
|
|
default keyserver is hkp://keyserver.ubuntu.com
|
|
user can provide other keyserver with keyserver="hkp://xyz"
|
|
"""
|
|
try:
|
|
WOShellExec.cmd_exec(
|
|
self, "apt-key adv --keyserver {serv}"
|
|
.format(serv=(keyserver or
|
|
"hkp://keyserver.ubuntu.com")) +
|
|
" --recv-keys {key}".format(key=keyid))
|
|
except Exception as e:
|
|
Log.debug(self, "{0}".format(e))
|
|
Log.error(self, "Unable to import repo key")
|
|
|
|
def download_key(self, key_url):
|
|
"""
|
|
This function download gpg keys and add import them with apt-key add"
|
|
"""
|
|
try:
|
|
WOShellExec.cmd_exec(
|
|
self, "curl -sL {0} ".format(key_url) +
|
|
"| apt-key add -")
|
|
except Exception as e:
|
|
Log.debug(self, "{0}".format(e))
|
|
Log.error(self, "Unable to import repo keys")
|