Dextrose/Updater: Difference between revisions
Appearance
< Dextrose
Created page with "== Configuration == Edit {{Code|/etc/default/dextrose-update}} configuration file: DEXTROSE_YUM_REPO=''name-of-yum-repository-with-dextrose-packages'' == Install == Create {..." |
No edit summary |
||
| (6 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
{{Obsolete|Moved and died at https://sugardextrose.org/projects/dextrose/wiki/Dextrose_3_Updater}} | |||
== Configuration == | == Configuration == | ||
Edit {{Code|/etc/default/dextrose-update}} configuration file: | Edit {{Code|/etc/default/dextrose-update}} configuration file to set space separated list of yum repositories: | ||
DEXTROSE_YUM_REPO= | DEXTROSE_YUM_REPO="dextrose dextrose-freeworld" | ||
== Install == | == Install == | ||
| Line 12: | Line 14: | ||
name="dextrose-update" | name="dextrose-update" | ||
. /etc/default/${name} | . /etc/default/${name} | ||
logfile="/var/log/${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=* --skip-broken --quiet" | |||
for i in $DEXTROSE_YUM_REPOS; do | |||
yum="$yum --enablerepo=$i" | |||
done | |||
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) | echo "$(date)" >> $logfile | ||
echo ${ | 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 for {{Code|src/jarabe/model/notifications.py}}: | |||
_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}}. | ||
Latest revision as of 23:33, 16 May 2016
ConfigurationEdit DEXTROSE_YUM_REPO="dextrose dextrose-freeworld" InstallCreate #!/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=* --skip-broken --quiet"
for i in $DEXTROSE_YUM_REPOS; do
yum="$yum --enablerepo=$i"
done
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 for _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'))
LogsLogging records are collected in |
