1
0
mirror of https://github.com/altlinux/gpupdate.git synced 2025-03-22 02:50:32 +03:00

Add packages installation/removing

This commit is contained in:
Rustem Bapin 2020-04-23 19:48:18 +04:00 committed by Igor Chudov
parent 400ea0aced
commit d9cad51f52
Signed by untrusted user: nir
GPG Key ID: 0F3883600CAE7AAC
3 changed files with 47 additions and 14 deletions

View File

@ -16,16 +16,33 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from util.rpm import (
install_rpm,
remove_rpm
)
import subprocess
import logging
from util.logging import slogm
class rpm:
def __init__(self, name, action):
self.name = name
self.action = action
def __init__(self, packages_for_instsall, packages_for_remove):
self.packages_for_instsall = packages_for_instsall
self.packages_for_remove = packages_for_remove
def apply(self):
pass
try:
logging.info(slogm('Updating APT-RPM database'))
subprocess.check_call(['/usr/bin/apt-get', 'update'])
except Exception as exc:
logging.info(slogm('Failed to update APT-RPM database: {}'.format(exc)))
logging.info(slogm('Installing packages: {}. Removing packages {}.'.format(self.packages_for_instsall, self.packages_for_remove)))
if self.packages_for_remove:
self.packages_for_remove = [i + "-" for i in self.packages_for_remove]
cmd = ['/usr/bin/apt-get', '-y', 'install']
cmd.extend(self.packages_for_instsall)
cmd.extend(self.packages_for_remove)
try:
subprocess.check_call(cmd)
except Exception as exc:
logging.info(slogm('Failed to install/remove packages: {}'.format(exc)))

View File

@ -93,16 +93,17 @@ class frontend_manager:
, 'gsettings': gsettings_applier(self.storage)
, 'cups': cups_applier(self.storage)
, 'folders': folder_applier(self.storage, self.sid)
#, 'package': package_applier(self.storage)
, 'package': package_applier(self.storage)
})
# User appliers are expected to work with user-writable
# files and settings, mostly in $HOME.
self.user_appliers = dict({
'shortcuts': shortcut_applier_user(self.storage, self.sid, self.username),
'folders': folder_applier_user(self.storage, self.sid, self.username),
'gsettings': gsettings_applier_user(self.storage, self.sid, self.username),
'cifs': cifs_applier_user(self.storage, self.sid, self.username)
'shortcuts': shortcut_applier_user(self.storage, self.sid, self.username)
, 'folders': folder_applier_user(self.storage, self.sid, self.username)
, 'gsettings': gsettings_applier_user(self.storage, self.sid, self.username)
, 'cifs': cifs_applier_user(self.storage, self.sid, self.username)
, 'package': package_applier_user(self.storage, self.sid, self.username)
})
def machine_apply(self):
@ -127,6 +128,7 @@ class frontend_manager:
self.user_appliers['folders'].admin_context_apply()
self.user_appliers['gsettings'].admin_context_apply()
self.user_appliers['cifs'].admin_context_apply()
self.user_appliers['package'].admin_context_apply()
logging.debug(slogm('Running user appliers for user context'))
with_privileges(self.username, self.user_appliers['shortcuts'].user_context_apply)

View File

@ -17,6 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import logging
from util.logging import slogm
from .applier_frontend import applier_frontend
from .appliers.rpm import rpm
@ -24,9 +25,22 @@ from .appliers.rpm import rpm
class package_applier(applier_frontend):
def __init__(self, storage):
self.storage = storage
self.package_applier_settings = self.storage.filter_hklm_entries('Software\\BaseALT\\Policies\\Packages%')
def apply(self):
pass
packages_for_install = None
packages_for_remove = None
for setting in self.package_applier_settings:
action = setting.hive_key.rpartition('\\')[2]
if action == 'PackagesForInstall':
packages_for_install = setting.data.split()
if action == 'PackagesForRemove':
packages_for_remove = setting.data.split()
r = rpm(packages_for_install, packages_for_remove)
r.apply()
class package_applier_user(applier_frontend):
def __init__(self):