[yum-cvs] Makefile docs/Makefile docs/yum-updatesd.8 docs/yum-updatesd.conf.5 etc/Makefile etc/yum-updatesd.init yum-updatesd.py yum.spec
James Bowes
jbowes at linux.duke.edu
Sun Sep 30 23:44:39 UTC 2007
Makefile | 7
docs/Makefile | 2
docs/yum-updatesd.8 | 18 -
docs/yum-updatesd.conf.5 | 70 -----
etc/Makefile | 10
etc/yum-updatesd.init | 63 ----
yum-updatesd.py | 654 -----------------------------------------------
yum.spec | 37 --
8 files changed, 6 insertions(+), 855 deletions(-)
New commits:
commit bab47e934196b94a8afdca6d306806e46e73f4e3
Author: James Bowes <jbowes at redhat.com>
Date: Sun Sep 30 19:32:28 2007 -0400
Remove yum-updatesd, as it's a distinct project now.
diff --git a/Makefile b/Makefile
index 62121e3..9d9730b 100644
--- a/Makefile
+++ b/Makefile
@@ -21,12 +21,10 @@ install:
for p in $(PYFILES) ; do \
install -m 644 $$p $(DESTDIR)/usr/share/yum-cli/$$p; \
done
- mv $(DESTDIR)/usr/share/yum-cli/yum-updatesd.py $(DESTDIR)/usr/share/yum-cli/yumupd.py
$(PYTHON) -c "import compileall; compileall.compile_dir('$(DESTDIR)/usr/share/yum-cli', 1, '$(PYDIR)', 1)"
mkdir -p $(DESTDIR)/usr/bin $(DESTDIR)/usr/sbin
install -m 755 bin/yum.py $(DESTDIR)/usr/bin/yum
- install -m 755 bin/yum-updatesd.py $(DESTDIR)/usr/sbin/yum-updatesd
mkdir -p $(DESTDIR)/var/cache/yum
mkdir -p $(DESTDIR)/var/lib/yum
@@ -36,9 +34,8 @@ install:
.PHONY: docs test
docs:
epydoc -n yum -o docs/epydoc -u http://linux.duke.edu/projects/yum \
- yum yum-updatesd.py rpmUtils callback.py progress_meter.py \
- yumcommands.py shell.py translate.py output.py i18n.py cli.py \
- yummain.py
+ yum rpmUtils callback.py progress_meter.py yumcommands.py \
+ shell.py translate.py output.py i18n.py cli.py yummain.py
test:
python test/alltests.py
diff --git a/docs/Makefile b/docs/Makefile
index 379ba2b..1fc653f 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -10,5 +10,3 @@ install:
install -m 644 yum.8 $(DESTDIR)/usr/share/man/man8/yum.8
install -m 644 yum-shell.8 $(DESTDIR)/usr/share/man/man8/yum-shell.8
install -m 644 yum.conf.5 $(DESTDIR)/usr/share/man/man5/yum.conf.5
- install -m 644 yum-updatesd.8 $(DESTDIR)/usr/share/man/man8/yum-updatesd.8
- install -m 644 yum-updatesd.conf.5 $(DESTDIR)/usr/share/man/man5/yum-updatesd.conf.5
diff --git a/docs/yum-updatesd.8 b/docs/yum-updatesd.8
deleted file mode 100644
index be0d346..0000000
--- a/docs/yum-updatesd.8
+++ /dev/null
@@ -1,18 +0,0 @@
-.TH "yum-updatesd" "8" "" "Jeremy Katz" ""
-.SH "NAME"
-yum-updatesd \- Update notifier daemon
-.SH "SYNOPSIS"
-\fByum-updatesd\fP
-.SH "DESCRIPTION"
-.PP
-\fByum-updatesd\fP provides notification of updates which are
-available to be applied to your system. This notification can be done
-either via syslog, email or over dbus. Configuration is done via the
-\fByum-updatesd.conf(5) \fR file.
-.PP
-.SH "SEE ALSO"
-.nf
-.I yum(8)
-.I yum-updatesd.conf(5)
-http://linux.duke.edu/yum/
-.fi
diff --git a/docs/yum-updatesd.conf.5 b/docs/yum-updatesd.conf.5
deleted file mode 100644
index ee6e7aa..0000000
--- a/docs/yum-updatesd.conf.5
+++ /dev/null
@@ -1,70 +0,0 @@
-.TH "yum-updatesd.conf" "5" "" "Jeremy Katz" "yum-updatesd configuration file"
-.SH "NAME"
-.LP
-\fByum-updatesd.conf\fR \- Configuration file for \fByum-updatesd(8)\fR.
-.SH "DESCRIPTION"
-.LP
-yum-updatesd uses a configuration file at \fB/etc/yum/yum-updatesd.conf\fR.
-.LP
-Additional configuration information is read from the main \fByum.conf
-(5)\fR configuration file.
-
-.SH "PARAMETERS"
-.LP
-There is one section in the yum-updatesd configuration file, main,
-which defines all of the global configuration options.
-
-.SH "[main] OPTIONS"
-.LP
-The [main] section must exist for yum-updatesd to do anything. It
-consists of the following options:
-
-.IP \fBrun_interval\fR
-Number of seconds to wait between checks for available updates.
-
-.IP \fBupdaterefresh\fR
-Minimum number of seconds between update information refreshes to
-avoid hitting the server too often.
-
-.IP \fBemit_via\fR
-List of ways to emit update notification. Valid values are `email',
-`dbus' and `syslog'.
-
-.IP \fBdo_update\fR
-Boolean option to decide whether or not updates should be
-automatically applied. Defaults to False.
-
-.IP \fBdo_download_deps\fR
-Boolean option to decide whether or not updates should be
-automatically downloaded. Defaults to False.
-
-.IP \fBdo_download_deps\fR
-Boolean option to automatically download dependencies of packages which need
-updating as well. Defaults to False.
-
-.SH "MAIL OPTIONS"
-.IP \fBemail_to\fR
-List of email addresses to send update notification to. Defaults to
-`root at localhost'.
-
-.IP \fBemail_from\fR
-Email address for update notifications to be from. Defaults to
-`yum-updatesd at localhost'.
-
-.SH "SYSLOG OPTIONS"
-.IP \fBsyslog_facility\fR
-What syslog facility should be used. Defaults to `DAEMON'.
-
-.IP \fBsyslog_level\fR
-Level of syslog messages. Defaults to `WARN'.
-
-
-.SH "FILES"
-.nf
-/etc/yum/yum-updatesd.conf
-
-.SH "SEE ALSO"
-.LP
-yum-updatesd(8)
-yum.conf(5)
-
diff --git a/etc/Makefile b/etc/Makefile
index 1ba5a1f..7124035 100644
--- a/etc/Makefile
+++ b/etc/Makefile
@@ -12,13 +12,3 @@ install:
mkdir -p $(DESTDIR)/etc/logrotate.d
install -m 644 yum.logrotate $(DESTDIR)/etc/logrotate.d/yum
-
- mkdir -p $(DESTDIR)/etc/rc.d/init.d
- install -m 755 yum-updatesd.init $(DESTDIR)/etc/rc.d/init.d/yum-updatesd
-
- mkdir -p $(DESTDIR)/etc/dbus-1/system.d/
- install -m 755 yum-updatesd-dbus.conf $(DESTDIR)/etc/dbus-1/system.d/yum-updatesd.conf
-
- install -m 755 yum-updatesd.conf $(DESTDIR)/etc/yum/yum-updatesd.conf
-
-
diff --git a/etc/yum-updatesd.init b/etc/yum-updatesd.init
deleted file mode 100755
index 55f166d..0000000
--- a/etc/yum-updatesd.init
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/bash
-#
-# yum This shell script enables the yum-updates daemon
-#
-# Author: Jeremy Katz <katzj at redhat.com>
-#
-# chkconfig: 345 97 03
-#
-# description: This is a daemon which periodically checks for updates \
-# and can send notifications via mail, dbus or syslog.
-# processname: yum-updatesd
-# config: /etc/yum/yum-updatesd.conf
-# pidfile: /var/run/yum-updatesd.pid
-#
-
-# source function library
-. /etc/rc.d/init.d/functions
-
-RETVAL=0
-
-start() {
- echo -n $"Starting yum-updatesd: "
- daemon +19 yum-updatesd
- RETVAL=$?
- echo
- [ $RETVAL -eq 0 ] && touch /var/lock/subsys/yum-updatesd
-}
-
-stop() {
- echo -n $"Stopping yum-updatesd: "
- killproc yum-updatesd
- echo
- [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/yum-updatesd
-}
-
-restart() {
- stop
- start
-}
-
-case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- restart|force-reload|reload)
- restart
- ;;
- condrestart)
- [ -f /var/lock/subsys/yum-updatesd ] && restart
- ;;
- status)
- status yum-updatesd
- RETVAL=$?
- ;;
- *)
- echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
- exit 1
-esac
-
-exit $RETVAL
diff --git a/yum-updatesd.py b/yum-updatesd.py
deleted file mode 100644
index ac05f2b..0000000
--- a/yum-updatesd.py
+++ /dev/null
@@ -1,654 +0,0 @@
-#!/usr/bin/python -tt
-# 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.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-# (c)2006 Duke University, Red Hat, Inc.
-# Seth Vidal <skvidal at linux.duke.edu>
-# Jeremy Katz <katzj at redhat.com>
-
-#TODO:
-# - clean up config and work on man page for docs
-# - need to be able to cancel downloads. requires some work in urlgrabber
-# - what to do if we're asked to exit while updates are being applied?
-# - what to do with the lock around downloads/updates
-
-# since it takes me time everytime to figure this out again, here's how to
-# queue a check with dbus-send. adjust appropriately for other methods
-# $ dbus-send --system --print-reply --type=method_call \
-# --dest=edu.duke.linux.yum /Updatesd edu.duke.linux.yum.CheckNow
-
-import gettext
-import os
-import sys
-import time
-import gzip
-import dbus
-import dbus.service
-import dbus.glib
-import gobject
-import smtplib
-import threading
-from optparse import OptionParser
-from email.MIMEText import MIMEText
-
-
-
-import yum
-import yum.Errors
-import syslog
-from yum.config import BaseConfig, Option, IntOption, ListOption, BoolOption
-from yum.parser import ConfigPreProcessor
-from ConfigParser import ConfigParser, ParsingError
-from yum.constants import *
-from yum.update_md import UpdateMetadata
-
-# FIXME: is it really sane to use this from here?
-sys.path.append('/usr/share/yum-cli')
-import callback
-
-config_file = '/etc/yum/yum-updatesd.conf'
-initial_directory = os.getcwd()
-
-class UpdateEmitter(object):
- """Abstract object for implementing different types of emitters."""
- def __init__(self):
- pass
- def updatesAvailable(self, updateInfo):
- """Emitted when there are updates available to be installed.
- If not doing the download here, then called immediately on finding
- new updates. If we do the download here, then called after the
- updates have been downloaded."""
- pass
- def updatesDownloading(self, updateInfo):
- """Emitted to give feedback of update download starting."""
- pass
- def updatesApplied(self, updateInfo):
- """Emitted on successful installation of updates."""
- pass
- def updatesFailed(self, errmsgs):
- """Emitted when an update has failed to install."""
- pass
- def checkFailed(self, error):
- """Emitted when checking for updates failed."""
- pass
-
- def setupFailed(self, error, translation_domain):
- """Emitted when plugin initialization failed."""
- pass
-
-
-class SyslogUpdateEmitter(UpdateEmitter):
- def __init__(self, syslog_facility, ident = "yum-updatesd",
- level = "WARN"):
- UpdateEmitter.__init__(self)
- syslog.openlog(ident, 0, self._facilityMap(syslog_facility))
- self.level = level
-
- def updatesAvailable(self, updateInfo):
- num = len(updateInfo)
- level = self.level
- if num > 1:
- msg = "%d updates available" %(num,)
- elif num == 1:
- msg = "1 update available"
- else:
- msg = "No updates available"
- level = syslog.LOG_DEBUG
-
- syslog.syslog(self._levelMap(level), msg)
-
- def _levelMap(self, lvl):
- level_map = { "EMERG": syslog.LOG_EMERG,
- "ALERT": syslog.LOG_ALERT,
- "CRIT": syslog.LOG_CRIT,
- "ERR": syslog.LOG_ERR,
- "WARN": syslog.LOG_WARNING,
- "NOTICE": syslog.LOG_NOTICE,
- "INFO": syslog.LOG_INFO,
- "DEBUG": syslog.LOG_DEBUG }
- if type(lvl) == int:
- return lvl
- if level_map.has_key(lvl.upper()):
- return level_map[lvl.upper()]
- return syslog.LOG_INFO
-
- def _facilityMap(self, facility):
- facility_map = { "KERN": syslog.LOG_KERN,
- "USER": syslog.LOG_USER,
- "MAIL": syslog.LOG_MAIL,
- "DAEMON": syslog.LOG_DAEMON,
- "AUTH": syslog.LOG_AUTH,
- "LPR": syslog.LOG_LPR,
- "NEWS": syslog.LOG_NEWS,
- "UUCP": syslog.LOG_UUCP,
- "CRON": syslog.LOG_CRON,
- "LOCAL0": syslog.LOG_LOCAL0,
- "LOCAL1": syslog.LOG_LOCAL1,
- "LOCAL2": syslog.LOG_LOCAL2,
- "LOCAL3": syslog.LOG_LOCAL3,
- "LOCAL4": syslog.LOG_LOCAL4,
- "LOCAL5": syslog.LOG_LOCAL5,
- "LOCAL6": syslog.LOG_LOCAL6,
- "LOCAL7": syslog.LOG_LOCAL7,}
- if type(facility) == int:
- return facility
- elif facility_map.has_key(facility.upper()):
- return facility_map[facility.upper()]
- return syslog.LOG_DAEMON
-
-
-class EmailUpdateEmitter(UpdateEmitter):
- def __init__(self, sender, rcpt):
- UpdateEmitter.__init__(self)
- self.sender = sender
- self.rcpt = rcpt
-
- def updatesAvailable(self, updateInfo):
- num = len(updateInfo)
- if num < 1:
- return
-
- output = """
- Hi,
- There are %d package updates available. Please run the system
- updater.
-
- Thank You,
- Your Computer
- """ % num
-
- msg = MIMEText(output)
- msg['Subject'] = "%d Updates Available" %(num,)
- msg['From'] = self.sender
- msg['To'] = ",".join(self.rcpt)
- s = smtplib.SMTP()
- s.connect()
- s.sendmail(self.sender, self.rcpt, msg.as_string())
- s.close()
-
-class DbusUpdateEmitter(UpdateEmitter):
- def __init__(self):
- UpdateEmitter.__init__(self)
- bus = dbus.SystemBus()
- name = dbus.service.BusName('edu.duke.linux.yum', bus = bus)
- yum_dbus = YumDbusInterface(name)
- self.dbusintf = yum_dbus
-
- def updatesAvailable(self, updateInfo):
- num = len(updateInfo)
- msg = "%d" %(num,)
- if num > 0:
- self.dbusintf.UpdatesAvailableSignal(msg)
- else:
- self.dbusintf.NoUpdatesAvailableSignal(msg)
-
- def updatesFailed(self, errmsgs):
- self.dbusintf.UpdatesFailedSignal(errmsgs)
-
- def updatesApplied(self, updinfo):
- self.dbusintf.UpdatesAppliedSignal(updinfo)
-
- def checkFailed(self, error):
- self.dbusintf.CheckFailedSignal(error)
-
- def setupFailed(self, error, translation_domain):
- self.dbusintf.SetupFailedSignal(error, translation_domain)
-
-
-class YumDbusInterface(dbus.service.Object):
- def __init__(self, bus_name, object_path='/UpdatesAvail'):
- dbus.service.Object.__init__(self, bus_name, object_path)
-
- @dbus.service.signal('edu.duke.linux.yum')
- def UpdatesAvailableSignal(self, message):
- pass
-
- @dbus.service.signal('edu.duke.linux.yum')
- def NoUpdatesAvailableSignal(self, message):
- pass
-
- @dbus.service.signal('edu.duke.linux.yum')
- def UpdatesFailedSignal(self, errmsgs):
- pass
-
- @dbus.service.signal('edu.duke.linux.yum')
- def UpdatesAppliedSignal(self, updinfo):
- pass
-
- @dbus.service.signal('edu.duke.linux.yum')
- def CheckFailedSignal(self, message):
- pass
-
- @dbus.service.signal('edu.duke.linux.yum')
- def SetupFailedSignal(self, message, translation_domain=""):
- pass
-
-
-class UDConfig(BaseConfig):
- """Config format for the daemon"""
- run_interval = IntOption(3600)
- nonroot_workdir = Option("/var/tmp/yum-updatesd")
- emit_via = ListOption(['dbus', 'email', 'syslog'])
- email_to = ListOption(["root"])
- email_from = Option("root")
- dbus_listener = BoolOption(True)
- do_update = BoolOption(False)
- do_download = BoolOption(False)
- do_download_deps = BoolOption(False)
- updaterefresh = IntOption(3600)
- syslog_facility = Option("DAEMON")
- syslog_level = Option("WARN")
- syslog_ident = Option("yum-updatesd")
- yum_config = Option("/etc/yum/yum.conf")
-
-
-class UpdateBuildTransactionThread(threading.Thread):
- def __init__(self, updd, name):
- self.updd = updd
- threading.Thread.__init__(self, name=name)
-
- def run(self):
- self.updd.tsInfo.makelists()
- try:
- (result, msgs) = self.updd.buildTransaction()
- except yum.Errors.RepoError, errmsg: # error downloading hdrs
- msgs = ["Error downloading headers"]
- self.updd.emitUpdateFailed(msgs)
- return
-
- dlpkgs = map(lambda x: x.po, filter(lambda txmbr:
- txmbr.ts_state in ("i", "u"),
- self.updd.tsInfo.getMembers()))
- self.updd.downloadPkgs(dlpkgs)
- self.processPkgs(dlpkgs)
-
-
-class UpdateDownloadThread(UpdateBuildTransactionThread):
- def __init__(self, updd):
- UpdateBuildTransactionThread.__init__(self, updd,
- name="UpdateDownloadThread")
-
- def processPkgs(self, dlpkgs):
- self.updd.emitAvailable()
- self.updd.releaseLocks()
-
-
-class UpdateInstallThread(UpdateBuildTransactionThread):
- def __init__(self, updd):
- UpdateBuildTransactionThread.__init__(self, updd,
- name="UpdateInstallThread")
-
- def failed(self, msgs):
- self.updd.emitUpdateFailed(msgs)
- self.updd.releaseLocks()
-
- def success(self):
- self.updd.emitUpdateApplied()
- self.updd.releaseLocks()
-
- self.updd.updateInfo = None
- self.updd.updateInfoTime = None
-
- def processPkgs(self, dlpkgs):
- for po in dlpkgs:
- result, err = self.updd.sigCheckPkg(po)
- if result == 0:
- continue
- elif result == 1:
- try:
- self.updd.getKeyForPackage(po)
- except yum.Errors.YumBaseError, errmsg:
- self.failed([str(errmsg)])
-
- del self.updd.ts
- self.updd.initActionTs() # make a new, blank ts to populate
- self.updd.populateTs(keepold=0)
- self.updd.ts.check() #required for ordering
- self.updd.ts.order() # order
- cb = callback.RPMInstallCallback(output = 0)
- cb.filelog = True
-
- cb.tsInfo = self.updd.tsInfo
- try:
- self.updd.runTransaction(cb=cb)
- except yum.Errors.YumBaseError, err:
- self.failed([str(err)])
-
- self.success()
-
-class UpdatesDaemon(yum.YumBase):
- def __init__(self, opts):
- yum.YumBase.__init__(self)
- self.opts = opts
- self.didSetup = False
-
- self.emitters = []
- if 'dbus' in self.opts.emit_via:
- self.emitters.append(DbusUpdateEmitter())
- if 'email' in self.opts.emit_via:
- self.emitters.append(EmailUpdateEmitter(self.opts.email_from,
- self.opts.email_to))
- if 'syslog' in self.opts.emit_via:
- self.emitters.append(SyslogUpdateEmitter(self.opts.syslog_facility,
- self.opts.syslog_ident,
- self.opts.syslog_level))
-
- self.updateInfo = []
- self.updateInfoTime = None
-
- def doSetup(self):
- # if we are not root do the special subdir thing
- if os.geteuid() != 0:
- if not os.path.exists(self.opts.nonroot_workdir):
- os.makedirs(self.opts.nonroot_workdir)
- self.repos.setCacheDir(self.opts.nonroot_workdir)
-
- self.doConfigSetup(fn=self.opts.yum_config)
-
- def refreshUpdates(self):
- self.doLock()
- try:
- self.doRepoSetup()
- self.doSackSetup()
- self.updateCheckSetup()
- except Exception, e:
- syslog.syslog(syslog.LOG_WARNING,
- "error getting update info: %s" %(e,))
- self.emitCheckFailed("%s" %(e,))
- self.doUnlock()
- return False
- return True
-
- def populateUpdateMetadata(self):
- self.updateMetadata = UpdateMetadata()
- repos = []
-
- for (new, old) in self.up.getUpdatesTuples():
- pkg = self.getPackageObject(new)
- if pkg.repoid not in repos:
- repo = self.repos.getRepo(pkg.repoid)
- repos.append(repo.id)
- try: # grab the updateinfo.xml.gz from the repodata
- md = repo.retrieveMD('updateinfo')
- except Exception: # can't find any; silently move on
- continue
- md = gzip.open(md)
- self.updateMetadata.add(md)
- md.close()
-
- def populateUpdates(self):
- def getDbusPackageDict(pkg):
- """Returns a dictionary corresponding to the package object
- in the form that we can send over the wire for dbus."""
- pkgDict = {
- "name": pkg.name,
- "version": pkg.version,
- "release": pkg.release,
- "epoch": pkg.epoch,
- "arch": pkg.arch,
- "sourcerpm": pkg.sourcerpm,
- "summary": pkg.summary or "",
- }
-
- # check if any updateinfo is available
- md = self.updateMetadata.get_notice((pkg.name, pkg.ver, pkg.rel))
- if md:
- # right now we only want to know if it is a security update
- pkgDict['type'] = md['type']
-
- return pkgDict
-
- if self.up is None:
- # we're _only_ called after updates are setup
- return
-
- self.populateUpdateMetadata()
-
- self.updateInfo = []
- for (new, old) in self.up.getUpdatesTuples():
- n = getDbusPackageDict(self.getPackageObject(new))
- o = getDbusPackageDict(self.rpmdb.searchPkgTuple(old)[0])
- self.updateInfo.append((n, o))
-
- if self.conf.obsoletes:
- for (obs, inst) in self.up.getObsoletesTuples():
- n = getDbusPackageDict(self.getPackageObject(obs))
- o = getDbusPackageDict(self.rpmdb.searchPkgTuple(inst)[0])
- self.updateInfo.append((n, o))
-
- self.updateInfoTime = time.time()
-
- def populateTsInfo(self):
- # figure out the updates
- for (new, old) in self.up.getUpdatesTuples():
- updating = self.getPackageObject(new)
- updated = self.rpmdb.searchPkgTuple(old)[0]
-
- self.tsInfo.addUpdate(updating, updated)
-
- # and the obsoletes
- if self.conf.obsoletes:
- for (obs, inst) in self.up.getObsoletesTuples():
- obsoleting = self.getPackageObject(obs)
- installed = self.rpmdb.searchPkgTuple(inst)[0]
-
- self.tsInfo.addObsoleting(obsoleting, installed)
- self.tsInfo.addObsoleted(installed, obsoleting)
-
- def updatesCheck(self):
- if not self.didSetup:
- try:
- self.doSetup()
- except Exception, e:
- syslog.syslog(syslog.LOG_WARNING,
- "error initializing: %s" % e)
-
- if isinstance(e, yum.plugins.PluginYumExit):
- self.emitSetupFailed(e.value, e.translation_domain)
- else:
- # if we don't know where the string is from, then assume
- # it's not marked for translation (versus sending
- # gettext.textdomain() and assuming it's from the default
- # domain for this app)
- self.emitSetupFailed(str(e))
- # Setup failed, let's restart and try again after the update
- # interval
- restart()
- else:
- self.didSetup = True
-
- try:
- if not self.refreshUpdates():
- return
- except yum.Errors.LockError:
- return True # just pass for now
-
- try:
- self.populateTsInfo()
- self.populateUpdates()
-
- if self.opts.do_update:
- uit = UpdateInstallThread(self)
- uit.start()
- elif self.opts.do_download:
- self.emitDownloading()
- dl = UpdateDownloadThread(self)
- dl.start()
- else:
- # just notify about things being available
- self.emitAvailable()
- self.releaseLocks()
- except Exception, e:
- self.emitCheckFailed("%s" %(e,))
- self.doUnlock()
-
- return True
-
- def getUpdateInfo(self):
- # if we have a cached copy, use it
- if self.updateInfoTime and (time.time() - self.updateInfoTime <
- self.opts.updaterefresh):
- return self.updateInfo
-
- # try to get the lock so we can update the info. fall back to
- # cached if available or try a few times.
- for i in range(10):
- try:
- self.doLock()
- break
- except yum.Errors.LockError:
- # if we can't get the lock, return what we have if we can
- if self.updateInfo:
- return self.updateInfo
- time.sleep(1)
- else:
- return []
-
- try:
- self.updateCheckSetup()
-
- self.populateUpdates()
-
- self.releaseLocks()
- except:
- self.doUnlock()
-
- return self.updateInfo
-
- def updateCheckSetup(self):
- self.doTsSetup()
- self.doRpmDBSetup()
- self.doUpdateSetup()
-
- def releaseLocks(self):
- self.closeRpmDB()
- self.doUnlock()
-
- def emitAvailable(self):
- """method to emit a notice about updates"""
- map(lambda x: x.updatesAvailable(self.updateInfo), self.emitters)
-
- def emitDownloading(self):
- """method to emit a notice about updates downloading"""
- map(lambda x: x.updatesDownloading(self.updateInfo), self.emitters)
-
- def emitUpdateApplied(self):
- """method to emit a notice when automatic updates applied"""
- map(lambda x: x.updatesApplied(self.updateInfo), self.emitters)
-
- def emitUpdateFailed(self, errmsgs):
- """method to emit a notice when automatic updates failed"""
- map(lambda x: x.updatesFailed(errmsgs), self.emitters)
-
- def emitCheckFailed(self, error):
- """method to emit a notice when checking for updates failed"""
- map(lambda x: x.checkFailed(error), self.emitters)
-
- def emitSetupFailed(self, error, translation_domain=""):
- """method to emit a notice when checking for updates failed"""
- map(lambda x: x.setupFailed(error, translation_domain), self.emitters)
-
-
-class YumDbusListener(dbus.service.Object):
- def __init__(self, updd, bus_name, object_path='/Updatesd',
- allowshutdown = False):
- dbus.service.Object.__init__(self, bus_name, object_path)
- self.updd = updd
- self.allowshutdown = allowshutdown
-
- def doCheck(self):
- self.updd.updatesCheck()
- return False
-
- @dbus.service.method("edu.duke.linux.yum", in_signature="")
- def CheckNow(self):
- # make updating checking asynchronous since we discover whether
- # or not there are updates via a callback signal anyway
- gobject.idle_add(self.doCheck)
- return "check queued"
-
- @dbus.service.method("edu.duke.linux.yum", in_signature="")
- def ShutDown(self):
- if not self.allowshutdown:
- return False
-
- # we have to do this in a callback so that it doesn't get
- # sent back to the caller
- gobject.idle_add(shutDown)
- return True
-
- @dbus.service.method("edu.duke.linux.yum", in_signature="", out_signature="a(a{ss}a{ss})")
- def GetUpdateInfo(self):
- # FIXME: should this be async?
- upds = self.updd.getUpdateInfo()
- return upds
-
-
-def shutDown():
- sys.exit(0)
-
-def restart():
- os.chdir(initial_directory)
- os.execve(sys.argv[0], sys.argv, os.environ)
-
-def main(options = None):
- # we'll be threading for downloads/updates
- gobject.threads_init()
- dbus.glib.threads_init()
-
- if options is None:
- parser = OptionParser()
- parser.add_option("-f", "--no-fork", action="store_true", default=False, dest="nofork")
- parser.add_option("-r", "--remote-shutdown", action="store_true", default=False, dest="remoteshutdown")
- (options, args) = parser.parse_args()
-
- if not options.nofork:
- if os.fork():
- sys.exit()
- fd = os.open("/dev/null", os.O_RDWR)
- os.dup2(fd, 0)
- os.dup2(fd, 1)
- os.dup2(fd, 2)
- os.close(fd)
-
- confparser = ConfigParser()
- opts = UDConfig()
-
- if os.path.exists(config_file):
- confpp_obj = ConfigPreProcessor(config_file)
- try:
- confparser.readfp(confpp_obj)
- except ParsingError, e:
- print >> sys.stderr, "Error reading config file: %s" % e
- sys.exit(1)
-
- syslog.openlog("yum-updatesd", 0, syslog.LOG_DAEMON)
-
- opts.populate(confparser, 'main')
- updd = UpdatesDaemon(opts)
-
- if opts.dbus_listener:
- bus = dbus.SystemBus()
- name = dbus.service.BusName("edu.duke.linux.yum", bus=bus)
- YumDbusListener(updd, name, allowshutdown = options.remoteshutdown)
-
- run_interval_ms = opts.run_interval * 1000 # needs to be in ms
- gobject.timeout_add(run_interval_ms, updd.updatesCheck)
-
- mainloop = gobject.MainLoop()
- mainloop.run()
-
-
-if __name__ == "__main__":
- main()
diff --git a/yum.spec b/yum.spec
index f65248e..c5406f8 100644
--- a/yum.spec
+++ b/yum.spec
@@ -1,7 +1,7 @@
Summary: RPM installer/updater
Name: yum
Version: 3.2.5
-Release: 1
+Release: 2
License: GPL
Group: System Environment/Base
Source: %{name}-%{version}.tar.gz
@@ -25,19 +25,6 @@ Yum is a utility that can check for and automatically download and
install updated RPM packages. Dependencies are obtained and downloaded
automatically prompting the user as necessary.
-%package updatesd
-Summary: Update notification daemon
-Group: Applications/System
-Requires: yum = %{version}-%{release}
-Requires: dbus-python
-Requires: pygobject2
-Prereq: /sbin/chkconfig
-Prereq: /sbin/service
-
-%description updatesd
-yum-updatesd provides a daemon which checks for available updates and
-can notify you when they are available via email, syslog or dbus.
-
%prep
%setup -q
@@ -55,18 +42,6 @@ make DESTDIR=$RPM_BUILD_ROOT install
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
-%post updatesd
-/sbin/chkconfig --add yum-updatesd
-/sbin/service yum-updatesd condrestart >/dev/null 2>&1
-exit 0
-
-%preun updatesd
-if [ $1 = 0 ]; then
- /sbin/chkconfig --del yum-updatesd
- /sbin/service yum-updatesd stop >/dev/null 2>&1
-fi
-exit 0
-
%files
%defattr(-, root, root)
%doc README AUTHORS COPYING TODO INSTALL ChangeLog PLUGINS
@@ -83,15 +58,11 @@ exit 0
%{_mandir}/man*/yum.*
%{_mandir}/man*/yum-shell*
-%files updatesd
-%defattr(-, root, root)
-%config(noreplace) %{_sysconfdir}/yum/yum-updatesd.conf
-%config %{_sysconfdir}/rc.d/init.d/yum-updatesd
-%config %{_sysconfdir}/dbus-1/system.d/yum-updatesd.conf
-%{_sbindir}/yum-updatesd
-%{_mandir}/man*/yum-updatesd*
%changelog
+* Sun Sep 30 2007 James Bowes <jbowes at redhat.com> 3.2.5-2
+- remove yum-updatesd (it's external now)
+
* Mon Sep 10 2007 Seth Vidal <skvidal at fedoraproject.org>
- 3.2.5
More information about the Yum-cvs-commits
mailing list