Jump to content

Dextrose/Updater: Difference between revisions

From Sugar Labs
Created page with "== Configuration == Edit {{Code|/etc/default/dextrose-update}} configuration file: DEXTROSE_YUM_REPO=''name-of-yum-repository-with-dextrose-packages'' == Install == Create {..."
 
Line 12: Line 12:
   
   
  name="dextrose-update"
  name="dextrose-update"
. /etc/default/${name}
logfile="/var/log/${name}"
   
   
  . /etc/default/${name}
  reboot_pkgs="kernel kernel-firmware"
relogin_pkgs="sugar sugar-artwork sugar-base sugar-datastore sugar-presence-service sugar-toolkit"
   
   
  yum="/usr/bin/yum --disablerepo=* --enablerepo=${DEXTROSE_YUM_REPO} --skip-broken --quiet"
  yum="/usr/bin/yum --disablerepo=* --enablerepo=${DEXTROSE_YUM_REPO} --skip-broken --quiet"
logfile="/var/log/${name}"
   
   
  updates=$(${yum} -e0 check-update | awk '/./{print $1 "-" $2}')
  updates() {
  [ "${updates}" ] || exit 0
    ${yum} -e0 check-update | awk '/./{print $1 "-" $2}'
}
to_update=$(updates)
  [ "${to_update}" ] || exit 0
parse() {
    for i in $@; do
        echo ${to_update} | grep "\(^\| \)$i\." >/dev/null && echo $i
    done
}
need_reboot=$(parse ${reboot_pkgs})
need_relogin=$(parse ${relogin_pkgs})
   
   
  echo "$(date) Update ${DEXTROSE_YUM_REPO}" >> $logfile
  echo "$(date)" >> $logfile
  echo ${updates} >> $logfile
echo -e "\tRepository:" ${DEXTROSE_YUM_REPO} >> $logfile
  echo -e "\tPackages to update:" ${to_update} >> $logfile
  ${yum} -y update >> $logfile 2>&1
  ${yum} -y update >> $logfile 2>&1
to_update=$(updates)
if [ "${need_reboot}" ]; then
    if [ "${need_reboot}" != "$(parse ${reboot_pkgs})" ]; then
        echo -e "\tNeed to reboot..." >> $logfile
        dbus-send --system /org/sugarlabs/system org.sugarlabs.system.Reboot
    fi
fi
if [ "${need_relogin}" ]; then
    if [ "${need_relogin}" != "$(parse ${relogin_pkgs})" ]; then
        echo -e "\tNeed to relogin..." >> $logfile
        dbus-send --system /org/sugarlabs/system org.sugarlabs.system.Relogin
    fi
fi


Create cron task:
Create cron task:


  ln -s /usr/sbin/dextrose-update /etc/cron.daily/
  ln -s /usr/sbin/dextrose-update /etc/cron.daily/
Python client code:
_DBUS_SYSTEM_IFACE = 'org.sugarlabs.system'
_DBUS_SYSTEM_PATH = '/org/sugarlabs/system'
_SYSTEM_REBOOT_ID = -1
_SYSTEM_RELOGIN_ID = -2
_SYSTEM_TIMEOUT = 5
systembus = dbus.SystemBus()
systembus.add_signal_receiver(self.__reboot_cb, 'Reboot', _DBUS_SYSTEM_IFACE)
systembus.add_signal_receiver(self.__relogin_cb, 'Relogin', _DBUS_SYSTEM_IFACE)
def _system_alert(self, replaces_id, app_icon, message):
    self.notification_received.send(self,app_name='system',
            replaces_id=replaces_id, app_icon=app_icon,
            summary=_('System alert'), body=message,
            actions=[], hints={}, expire_timeout=_SYSTEM_TIMEOUT)
def __reboot_cb(self):
    self._system_alert(_SYSTEM_REBOOT_ID, 'system-restart',
            _('Please, reboot your computer to take into account ' \
                    'new updates'))
def __relogin_cb(self):
    self._system_alert(_SYSTEM_RELOGIN_ID, 'system-logout',
            _('Please, restart Sugar to take into account ' \
                    'new updates'))


== Logs ==
== Logs ==


Logging records are collected in {{Code|/var/log/dextrose-update}}.
Logging records are collected in {{Code|/var/log/dextrose-update}}.

Revision as of 22:49, 27 November 2010

Configuration

Edit /etc/default/dextrose-update configuration file:

DEXTROSE_YUM_REPO=name-of-yum-repository-with-dextrose-packages

Install

Create /usr/sbin/dextrose-update, main execution file:

#!/bin/sh

name="dextrose-update"
. /etc/default/${name}

logfile="/var/log/${name}"

reboot_pkgs="kernel kernel-firmware"
relogin_pkgs="sugar sugar-artwork sugar-base sugar-datastore sugar-presence-service sugar-toolkit"

yum="/usr/bin/yum --disablerepo=* --enablerepo=${DEXTROSE_YUM_REPO} --skip-broken --quiet"

updates() {
    ${yum} -e0 check-update | awk '/./{print $1 "-" $2}'
}

to_update=$(updates)
[ "${to_update}" ] || exit 0

parse() {
    for i in $@; do
        echo ${to_update} | grep "\(^\| \)$i\." >/dev/null && echo $i
    done
}

need_reboot=$(parse ${reboot_pkgs})
need_relogin=$(parse ${relogin_pkgs})

echo "$(date)" >> $logfile
echo -e "\tRepository:" ${DEXTROSE_YUM_REPO} >> $logfile
echo -e "\tPackages to update:" ${to_update} >> $logfile
${yum} -y update >> $logfile 2>&1
to_update=$(updates)

if [ "${need_reboot}" ]; then
    if [ "${need_reboot}" != "$(parse ${reboot_pkgs})" ]; then
        echo -e "\tNeed to reboot..." >> $logfile
        dbus-send --system /org/sugarlabs/system org.sugarlabs.system.Reboot
    fi
fi

if [ "${need_relogin}" ]; then
    if [ "${need_relogin}" != "$(parse ${relogin_pkgs})" ]; then
        echo -e "\tNeed to relogin..." >> $logfile
        dbus-send --system /org/sugarlabs/system org.sugarlabs.system.Relogin
    fi
fi

Create cron task:

ln -s /usr/sbin/dextrose-update /etc/cron.daily/

Python client code:

_DBUS_SYSTEM_IFACE = 'org.sugarlabs.system'
_DBUS_SYSTEM_PATH = '/org/sugarlabs/system'
_SYSTEM_REBOOT_ID = -1
_SYSTEM_RELOGIN_ID = -2
_SYSTEM_TIMEOUT = 5

systembus = dbus.SystemBus()
systembus.add_signal_receiver(self.__reboot_cb, 'Reboot', _DBUS_SYSTEM_IFACE)
systembus.add_signal_receiver(self.__relogin_cb, 'Relogin', _DBUS_SYSTEM_IFACE)

def _system_alert(self, replaces_id, app_icon, message):
    self.notification_received.send(self,app_name='system',
            replaces_id=replaces_id, app_icon=app_icon,
            summary=_('System alert'), body=message,
            actions=[], hints={}, expire_timeout=_SYSTEM_TIMEOUT)

def __reboot_cb(self):
    self._system_alert(_SYSTEM_REBOOT_ID, 'system-restart',
            _('Please, reboot your computer to take into account ' \
                    'new updates'))

def __relogin_cb(self):
    self._system_alert(_SYSTEM_RELOGIN_ID, 'system-logout',
            _('Please, restart Sugar to take into account ' \
                    'new updates'))

Logs

Logging records are collected in /var/log/dextrose-update.