Evita que Ubuntu se cierre antes de que se completen las actualizaciones automáticas de fondo

21

Entonces, hay una situación en la que he instalado un (x) Ubuntu 14.04 en la PC de un amigo. Las actualizaciones automáticas se configuran como "descargas y actualizaciones automáticas de instalación".

El problema es que después de algunos meses de uso, sucede que apaga su PC antes de completar la actualización de los paquetes. Eso lleva a paquetes / dependencias rotas (no recuerdo exactamente el mensaje), lo que lleva a que ya no haya kernel, aplicaciones ni actualizaciones del navegador. Para solucionarlo, necesita ejecutar el comando de terminal sudo dpkg –configure -a

Eso está bien para mí, pero para su caso es la teoría de la relatividad de Einstein

¿Es posible hacer que Ubuntu espere a que se completen las actualizaciones antes de que se apague la PC o reinicie como lo hace Windows para asegurarse de que nunca habrá paquetes rotos y al mismo tiempo su PC se actualizará automáticamente?

    
pregunta Giannis 24.11.2015 - 23:37

3 respuestas

9

Molly-Guard es un programa para exactamente este propósito; requiere una pequeña cantidad de configuración y tiene /usr/sbin antes /sbin en tu $PATH .

De lo contrario, de acuerdo con esto los detalles exactos dependen en gran medida de la implementación de GUI / DE. Como sabemos que tu amigo está usando Xubuntu, esto lo reduce, pero sin recompilar Xfce con este soporte integrado (lo que crearía más problemas) parece muy difícil.

De acuerdo con mi abundante investigación, puedes teóricamente simplemente reemplazar /sbin/shutdown con un script que verifica si un trabajo apto está activo y ejecuta sudo shutdown -c o sudo init 2 para cancelar un apagado en funcionamiento y wait para que salga, pero no estoy seguro de cuán robusto es esto.

Según esto , podría hacer que sea difícil para el usuario cerrar, en lugar de conectar una secuencia de comandos.

Finalmente, como se describe aquí , puede instalar unattended-upgrades sobre cualquier sistema que estés usando para las actualizaciones automáticas ahora, y asegúrate de que sale antes de que se cierre como detallado en esta respuesta .

Hay muchas opciones, todas las cuales varían en niveles poco confiables, pero creo que es la mejor, que resuelve lo que I creo que es, hasta cierto punto, un Problema X / Y en juego aquí, es esto:

Usa crontab para hacer que su computadora ejecute dpkg --configure -a en cada arranque.

@LovesTha: para su propósito, recomiendo unattended-upgrades , o tal vez Molly-Guard.

    
respondido por el cat 25.12.2015 - 02:01
7

Introducción

El siguiente script usa un sondeo controlado por interrupciones para mensajes específicos de dbus, y cada vez que ve una solicitud para apagar / reiniciar, verifica si se están ejecutando o no un administrador de paquetes como dpkg o apt . Si se están ejecutando, la solicitud de cierre se cancelará.

Configurar

Ya que ha mencionado que su amigo no quiere tocar la línea de comando, tendrá que entrar en su máquina o venir e instalarlo manualmente.

Configuración manual

  1. mkdir $HOME/bin
  2. Copie el origen del script, guárdelo en el archivo denominado preventShutdown.sh
  3. El script debe ser ejecutable. Use chmod +x $HOME/bin/preventShutdown.sh para hacer eso
  4. Agregue una secuencia de comandos a la lista de rutinas que se ejecutarán al iniciar sesión en Unity / Gnome mediante la aplicación Aplicaciones de inicio o colocando manualmente un archivo .desktop en $HOME/.config/autostart

Configuración alternativa

sudo apt-get install git
cd /opt
sudo git clone https://github.com/SergKolo/sergrep.git
sudo chmod +x /opt/sergrep/*

Agregue el script como una aplicación de inicio.

Fuente de script

#! /bin/bash

##########################
# AUTHOR: Serg Kolo 
# Date: Saturday, December 26th, 2015
# Description: Script to notify user and prevent 
#   shutdown or reboot
#   if any update or package manager
#   are running. 
# TESTED ON: 14.04.3 LTS, Trusty Tahr
# WRITTEN FOR: http://askubuntu.com/q/702156/295286
# VERSION: 2, removed xdotool, using dbus method
#          changed to C-style of organizing code
#########################

# Copyright (c) 2015 Serg Kolo
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal in 
# the Software without restriction, including without limitation the rights to use,
# copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 
# the Software, and to permit persons to whom the Software is furnished to do so, 
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all 
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

# Uncomment the line bellow if needed for debugging
# set -x
###########################
# VARIABLES
###########################

DISPLAY=:0 # has to be set since we are using notify-send


###########################
# MAIN
###########################
#
#    Basic idea : This runs dbus-monitor which waits for
# "RebootRequested" memberf from com.canonical.Unity.Session ,
# which apprears only when the user clicks the shutdown option 
# from the Unity's top right drop down box. Why RebootRequested ?
# Because this message is guaranteed to pop up once user presses
# the shutdown button.
#   The while loop with read command does the big job.
# dbus-monitor sends initial message , so we want to filter only
# The output that contains the string we need, hence the case...esac
# structure employed here. Once we get the proper message.
# we check whether update-manager or package managers are running
# If there is one instance, then call CancelAction method
# and send notification to the user.
#   Both dbus-monitor and while loop run continuously. This
# can be launcher as script in '/etc/rc.local' or '/etc/rc2.d'
# or preferably (!) in '/etc/xdg/autostart/' . 
#   Here is sample /etc/xdg/autostart/preventShutdown.desktop file
# 
# [Desktop Entry]
# Type=Application
# Name=Prevent-Update
# Exec=/home/$USER/bin/preventShutdown.sh
# OnlyShowIn=GNOME;Unity;
# Terminal=false
# 
# Remember to make this file  as well as script be root-owned with 
# chmod +x /path/to/Script.
# It is preferred to store the script in user's personal $HOME/bin
# folder.
# Make sure to edit $HOME/.profile file to include that into $PATH
# variable

interupt()
{
 qdbus com.canonical.Unity /com/canonical/Unity/Session com.canonical.Unity.Session.CancelAction
 notify-send "<<< UPDATE IN PROGRESS; DO NOT SHUT DOWN>>>"
 wall <<< "<<< UPDATE IN PROGRESS; DO NOT SHUT DOWN>>>"
}

main()
{
 dbus-monitor --profile "interface='com.canonical.Unity.Session',type=signal" |
 while read -r line;
 do
  case "$line" in
   *RebootRequested*)
       pgrep update-manager || pgrep apt-get || pgrep dpkg
    if [ $? -eq 0 ]; then
           interupt
        fi
     ;;
   esac
 done
}

main
    
respondido por el Sergiy Kolodyazhnyy 26.12.2015 - 11:35
5
  1. Para citar a Einstein:

    Only two things are infinite, the universe and human stupidity, 
    and I'm not sure about the former.
    

    por lo que no hay garantía del 100% contra la estupidez humana, pero puede hacer que sea más difícil para los que no Einstein dividir las cosas entre:

  2. Activación de actualizaciones automáticas al cerrar .

  3. Explique que las computadoras no son martillos ni clavos, sino equipos inteligentes e frágiles que necesitan dos tipos de alimentos: electricidad y actualizaciones

Alternativamente,

  1. Detenga por completo las actualizaciones automáticas y comience visitando a su amigo con más frecuencia e instale las actualizaciones usted mismo.
  2. Pide cervezas o una buena comida para "sintonizar" la computadora

Alternativamente:
• use Remmina para que todo funcione correctamente

    
respondido por el Fabby 25.12.2015 - 21:42

Lea otras preguntas en las etiquetas