create core package
This commit is contained in:
@@ -0,0 +1,245 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (C) 2005-2009 TUBITAK/UEKAE
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it under
|
||||
# the terms of the GNU General Public License as published by the Free
|
||||
# Software Foundation; either version 2 of the License, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# Please read the COPYING file.
|
||||
#
|
||||
|
||||
# Disable cyclic garbage collector of Python to avoid comar segmentation
|
||||
# faults under high load (#11110)
|
||||
import gc
|
||||
gc.disable()
|
||||
|
||||
import os
|
||||
import locale
|
||||
import string
|
||||
|
||||
# FIXME: later this will be Comar's job
|
||||
systemlocale = open("/etc/mudur/locale", "r").readline().strip()
|
||||
|
||||
# for pisi
|
||||
os.environ["LC_ALL"] = systemlocale
|
||||
|
||||
# for system error messages
|
||||
locale.setlocale(locale.LC_ALL, systemlocale)
|
||||
|
||||
try:
|
||||
import pisi.api
|
||||
import pisi.db
|
||||
import pisi.ui
|
||||
import pisi.util as util
|
||||
import pisi.configfile
|
||||
from pisi.version import Version
|
||||
except KeyboardInterrupt:
|
||||
notify("System.Manager", "cancelled", "")
|
||||
|
||||
class UI(pisi.ui.UI):
|
||||
def error(self, msg):
|
||||
notify("System.Manager", "error", str(msg))
|
||||
|
||||
def warning(self, msg):
|
||||
notify("System.Manager", "warning", str(msg))
|
||||
|
||||
def notify(self, event, **keywords):
|
||||
if event == pisi.ui.installing:
|
||||
pkgname = keywords["package"].name
|
||||
notify("System.Manager", "status", ("installing", pkgname, "", ""))
|
||||
elif event == pisi.ui.configuring:
|
||||
pkgname = keywords["package"].name
|
||||
notify("System.Manager", "status", ("configuring", pkgname, "", ""))
|
||||
elif event == pisi.ui.extracting:
|
||||
pkgname = keywords["package"].name
|
||||
notify("System.Manager", "status", ("extracting", pkgname, "", ""))
|
||||
elif event == pisi.ui.updatingrepo:
|
||||
reponame = keywords["name"]
|
||||
notify("System.Manager", "status", ("updatingrepo", reponame, "", ""))
|
||||
elif event == pisi.ui.removing:
|
||||
pkgname = keywords["package"].name
|
||||
notify("System.Manager", "status", ("removing", pkgname, "", ""))
|
||||
elif event == pisi.ui.cached:
|
||||
total = str(keywords["total"])
|
||||
cached = str(keywords["cached"])
|
||||
notify("System.Manager", "status", ("cached", total, cached, ""))
|
||||
elif event == pisi.ui.installed:
|
||||
notify("System.Manager", "status", ("installed", "", "", ""))
|
||||
elif event == pisi.ui.removed:
|
||||
notify("System.Manager", "status", ("removed", "", "", ""))
|
||||
elif event == pisi.ui.upgraded:
|
||||
notify("System.Manager", "status", ("upgraded", "", "", ""))
|
||||
elif event == pisi.ui.packagestogo:
|
||||
notify("System.Manager", "status", ("order", "", "", ""))
|
||||
elif event == pisi.ui.desktopfile:
|
||||
filepath = keywords["desktopfile"]
|
||||
notify("System.Manager", "status", ("desktopfile", filepath, "", ""))
|
||||
else:
|
||||
return
|
||||
|
||||
def ack(self, msg):
|
||||
return True
|
||||
|
||||
def confirm(self, msg):
|
||||
return True
|
||||
|
||||
def display_progress(self, operation, percent, info="", **kw):
|
||||
if operation == "fetching":
|
||||
file_name = kw["filename"]
|
||||
if not file_name.startswith("pisi-index.xml"):
|
||||
file_name = pisi.util.parse_package_name(file_name)[0]
|
||||
out = (operation, file_name, str(percent), int(kw["rate"]), kw["symbol"], int(kw["downloaded_size"]), int(kw["total_size"]))
|
||||
else:
|
||||
out = (operation, str(percent), info, 0, 0, 0, 0)
|
||||
notify("System.Manager", "progress", out)
|
||||
|
||||
def _init_pisi():
|
||||
ui = UI()
|
||||
try:
|
||||
pisi.api.set_userinterface(ui)
|
||||
except KeyboardInterrupt:
|
||||
cancelled()
|
||||
|
||||
def cancelled():
|
||||
notify("System.Manager", "cancelled", None)
|
||||
|
||||
def started(operation=""):
|
||||
notify("System.Manager", "started", operation)
|
||||
|
||||
def finished(operation=""):
|
||||
if operation in ["System.Manager.setCache", "System.Manager.installPackage", "System.Manager.removePackage", "System.Manager.updatePackage"]:
|
||||
__checkCacheLimits()
|
||||
|
||||
notify("System.Manager", "finished", operation)
|
||||
|
||||
def privileged(func):
|
||||
"""
|
||||
Decorator for synchronizing privileged functions
|
||||
"""
|
||||
def wrapper(*__args,**__kw):
|
||||
operation = "System.Manager.%s" % func.func_name
|
||||
|
||||
started(operation)
|
||||
_init_pisi()
|
||||
try:
|
||||
func(*__args,**__kw)
|
||||
except KeyboardInterrupt:
|
||||
cancelled()
|
||||
return
|
||||
except Exception, e:
|
||||
notify("System.Manager", "error", str(e))
|
||||
return
|
||||
finished(operation)
|
||||
|
||||
return wrapper
|
||||
|
||||
@privileged
|
||||
def installPackage(package=None):
|
||||
if package:
|
||||
package = package.split(",")
|
||||
reinstall = package[0].endswith(".pisi")
|
||||
pisi.api.install(package, ignore_file_conflicts=True, reinstall=reinstall)
|
||||
|
||||
@privileged
|
||||
def reinstallPackage(package=None):
|
||||
if package:
|
||||
package = package.split(",")
|
||||
pisi.api.install(package, ignore_file_conflicts=True, reinstall=True)
|
||||
|
||||
@privileged
|
||||
def updatePackage(package=None):
|
||||
if package is None:
|
||||
package = []
|
||||
else:
|
||||
package = package.split(",")
|
||||
pisi.api.upgrade(package)
|
||||
|
||||
@privileged
|
||||
def removePackage(package=None):
|
||||
if package:
|
||||
package = package.split(",")
|
||||
pisi.api.remove(package)
|
||||
|
||||
@privileged
|
||||
def updateRepository(repository=None):
|
||||
if repository:
|
||||
pisi.api.update_repo(repository)
|
||||
|
||||
@privileged
|
||||
def updateAllRepositories():
|
||||
repos = pisi.db.repodb.RepoDB().list_repos()
|
||||
for repo in repos:
|
||||
try:
|
||||
pisi.api.update_repo(repo)
|
||||
except pisi.db.repodb.RepoError, e:
|
||||
notify("System.Manager", "error", str(e))
|
||||
|
||||
@privileged
|
||||
def addRepository(name=None,uri=None):
|
||||
if name and uri:
|
||||
pisi.api.add_repo(name,uri)
|
||||
|
||||
@privileged
|
||||
def removeRepository(repo=None):
|
||||
if repo:
|
||||
pisi.api.remove_repo(repo)
|
||||
|
||||
@privileged
|
||||
def setRepoActivities(repos=None):
|
||||
if repos:
|
||||
for repo, active in repos.items():
|
||||
pisi.api.set_repo_activity(repo, active)
|
||||
|
||||
@privileged
|
||||
def setRepositories(repos):
|
||||
oldRepos = pisi.db.repodb.RepoDB().list_repos(only_active=False)
|
||||
|
||||
for repo in oldRepos:
|
||||
pisi.api.remove_repo(repo)
|
||||
|
||||
for repo in repos:
|
||||
pisi.api.add_repo(repo[0], repo[1])
|
||||
|
||||
@privileged
|
||||
# ex: setConfig("general", "bandwidth_limit", "30")
|
||||
def setConfig(category, name, value):
|
||||
config = pisi.configfile.ConfigurationFile("/etc/pisi/pisi.conf")
|
||||
config.set(category, name, value)
|
||||
|
||||
config.write_config()
|
||||
|
||||
@privileged
|
||||
def setCache(enabled, limit):
|
||||
config = pisi.configfile.ConfigurationFile("/etc/pisi/pisi.conf")
|
||||
config.set("general", "package_cache", str(enabled))
|
||||
config.set("general", "package_cache_limit", str(limit))
|
||||
|
||||
config.write_config()
|
||||
|
||||
@privileged
|
||||
def takeSnapshot():
|
||||
pisi.api.snapshot()
|
||||
|
||||
@privileged
|
||||
def takeBack(operation):
|
||||
pisi.api.takeback(operation)
|
||||
|
||||
@privileged
|
||||
def clearCache(cacheDir, limit):
|
||||
pisi.api.clearCache(int(limit) == 0)
|
||||
|
||||
def __checkCacheLimits():
|
||||
cached_pkgs_dir = "/var/cache/pisi/packages"
|
||||
config = pisi.configfile.ConfigurationFile("/etc/pisi/pisi.conf")
|
||||
cache = config.get("general", "package_cache")
|
||||
if cache == "True":
|
||||
limit = config.get("general", "package_cache_limit")
|
||||
|
||||
# If PackageCache is used and limit is 0. It means limitless.
|
||||
if limit and int(limit) != 0:
|
||||
clearCache(cached_pkgs_dir, int(limit) * 1024 * 1024)
|
||||
elif cache == "False":
|
||||
clearCache(cached_pkgs_dir, 0)
|
||||
@@ -0,0 +1,13 @@
|
||||
#/usr/bin/python
|
||||
|
||||
import os
|
||||
|
||||
def postInstall(fromVersion, fromRelease, toVersion, toRelease):
|
||||
if not os.path.exists("/var/lib/pisi/info/files.ldb"):
|
||||
os.mkdir("/var/lib/pisi/info/files.ldb")
|
||||
os.chmod("/var/lib/pisi/info/files.ldb", 509)
|
||||
os.chown("/var/lib/pisi/info/files.ldb", 0, 10)
|
||||
if not os.path.exists("/var/lib/pisi/package"):
|
||||
os.system("mkdir /var/lib/pisi/package")
|
||||
os.system("mv /var/lib/pisi/* /var/lib/pisi/package/")
|
||||
os.system("mv /var/lib/pisi/package/scripts /var/lib/pisi/")
|
||||
Reference in New Issue
Block a user