Impedisce l'arresto di Ubuntu prima del completamento degli aggiornamenti automatici in background

21

Quindi c'è una situazione in cui ho installato una (x) Ubuntu 14.04 sul PC di un amico. Gli aggiornamenti automatici sono impostati su "download e aggiornamenti automatici dell'installazione".

Il problema è che dopo alcuni mesi di utilizzo, accade di spegnere il PC prima che l'aggiornamento dei pacchetti sia completo. Ciò porta a dipendenze / pacchetti non funzionanti (non ricordo esattamente il messaggio), il che non comporta più aggiornamenti del kernel, delle app e del browser. Per risolvere il problema è necessario eseguire il comando terminale sudo dpkg –configure -a

Questo è OK per me, ma per il suo caso è la teoria della relatività di Einstein

È possibile fare in modo che Ubuntu attenda il completamento degli aggiornamenti prima dell'arresto del PC o il riavvio come fa Windows per assicurarsi che non ci saranno mai pacchetti rotti e allo stesso tempo il suo PC rimarrà aggiornato automaticamente?

    
posta Giannis 25.11.2015 - 00:37
fonte

3 risposte

9

Molly-Guard è un programma esattamente per questo scopo; richiede una piccola quantità di impostazioni e ha /usr/sbin prima /sbin nel tuo $PATH .

Altrimenti, secondo questo i dettagli esatti dipendono fortemente dall'implementazione della GUI / DE. Dato che sappiamo che il tuo amico usa Xubuntu, questo lo restringe, ma senza la ricompilazione di Xfce con questo supporto integrato (che creerebbe ulteriori problemi) sembra molto difficile.

In base alla mia generosa ricerca, puoi teoricamente sostituire appena /sbin/shutdown con uno script che controlla se un lavoro apt è attivo ed esegue sudo shutdown -c o sudo init 2 per annullare un arresto in corso e wait per uscire, ma non sono sicuro di quanto sia robusto.

Secondo questo , potresti semplicemente rendere difficile per l'utente lo spegnimento, invece di agganciare uno script.

Infine, come descritto qui , puoi installare unattended-upgrades su qualsiasi sistema tu stia utilizzando per gli aggiornamenti automatici adesso e assicurati che esca prima dell'arresto come dettagliato in questa risposta .

Ci sono molte opzioni, ognuna delle quali presenta vari livelli di inaffidabilità, ma penso che la migliore, che risolve ciò che I pensa sia, in una certa misura, un sottostante Problema X / Y in riproduzione qui, è questo:

Usa crontab per fare in modo che il suo computer esegua dpkg --configure -a ad ogni avvio.

@LovesTha: per il tuo scopo, ti consiglio unattended-upgrades , o forse Molly-Guard.

    
risposta data cat 25.12.2015 - 03:01
fonte
7

Introduzione

Lo script qui sotto utilizza il polling guidato da interrupt per messaggi specifici da dbus, e ogni volta che vede la richiesta di shutdown / reboot, testerà se un gestore di pacchetti come dpkg o apt sono in esecuzione. Se sono in esecuzione, la richiesta di spegnimento verrà annullata.

Imposta

Dato che hai accennato al fatto che il tuo amico non vuole toccare la riga di comando, dovrai installare ssh nel suo computer, oppure trovarlo e installarlo manualmente.

Impostazione manuale

  1. mkdir $HOME/bin
  2. Copia l'origine dello script, salva nel file denominato preventShutdown.sh
  3. Lo script deve essere eseguibile. Usa chmod +x $HOME/bin/preventShutdown.sh per farlo
  4. Aggiungi uno script all'elenco delle routine da eseguire all'accesso a Unity / Gnome utilizzando l'app Applicazioni di avvio o posizionando manualmente un file .desktop in $HOME/.config/autostart

Impostazione alternativa

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

Aggiungi lo script come applicazione di avvio.

Sorgente dello 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
    
risposta data Sergiy Kolodyazhnyy 26.12.2015 - 12:35
fonte
5
  1. Per citare Einstein:

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

    quindi non esiste una garanzia del 100% contro la stupidità umana, ma puoi rendere più difficile per non Einsteins rompere le cose con:

  2. Attivazione degli aggiornamenti automatici allo spegnimento .

  3. Spiega che i computer non sono martelli, né chiodi ma pezzi fragili e intelligenti che richiedono due tipi di cibo: elettricità e aggiornamenti

In alternativa,

  1. Interrompi del tutto gli aggiornamenti automatici e inizia visitando il tuo amico più spesso e installa gli aggiornamenti per te stesso.
  2. Chiedere birre o un buon pasto per "accordare" il computer

In alternativa:
• usa Remmina per far funzionare la roba senza intoppi

    
risposta data Fabby 25.12.2015 - 22:42
fonte

Leggi altre domande sui tag