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:
parent
400ea0aced
commit
d9cad51f52
@ -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)))
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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):
|
||||
|
Loading…
x
Reference in New Issue
Block a user