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}}. |