Puis-je effectuer une mise à niveau de version silencieuse ou sans assistance?

31

Comment mettre à niveau vers une nouvelle version d'Ubuntu sans avoir à réagir aux invites?

Je suis le 12.04 maintenant et j'aimerais installer le 12.10. Quand je démarre la mise à jour, il télécharge généralement des trucs, puis pose une question, s'installe un peu, pose une question, etc. Je la laisse du jour au lendemain et trouve parfois que la mise à jour n'a pratiquement pas progressé. Je voudrais juste lancer le processus, m'en aller et le terminer après quelques heures. Je suis d'accord avec la mise à jour automatique des fichiers de configuration dans / etc et ainsi de suite. Alors, comment démarrer une mise à niveau sans assistance?

jdm
la source

Réponses:

42

La commande suivante est mise à niveau vers la nouvelle version stable sans invites:

do-release-upgrade -f DistUpgradeViewNonInteractive

La commande suivante est mise à niveau vers la version de développement actuelle sans invites:

do-release-upgrade -d -f DistUpgradeViewNonInteractive

Je ne l'ai pas testé, mais il semble qu'il exécute simplement l'action par défaut lorsqu'une question se pose. Il expire également tous les scripts s'ils se bloquent trop longtemps.

Vous devrez peut-être utiliser dpkg-reconfigureensuite si vous n'êtes pas satisfait de la configuration de certains packages, mais la plupart du temps, vous devriez être d'accord.

Source: http://awaseroot.wordpress.com/2012/04/29/ubuntu-release-upgrade-fully-automatic-non-interactive-upgrade/ . Dans le lien, il existe également d'autres façons de le faire.

jdm
la source
Veuillez éviter de référencer le contenu des liens, mais incluez également les informations pertinentes pour éviter la perte d'informations si le site n'est pas accessible.
k0pernikus
J'ai fait cela et tout a semblé fonctionner, mais après un redémarrage, je n'ai eu qu'une erreur grub , donc vous semblez devoir ajouter un peu plus de configuration grub après cette mise à niveau sans assistance. peut-être avec sudo apt-get install grub-emu?
rubo77
6
Cela ne fonctionne pas pour Trusty => Xenial. Obtenez toujours des questions sur les fichiers / etc modifiés.
Willem
Cela ne devrait-il pas être exécuté avec sudo?
Cerin
En ce qui concerne les questions sur les fichiers / etc modifiés, il existe une solution intéressante ici: awaseroot.wordpress.com/2012/04/29/… . Exécutez la commande avec 'echo "y \ n \ ny \ ny \ ny \ n" | 'devant do-release-upgrade. Il nourrit les réponses aux questions. Ajoutez beaucoup de réponses au cas où il y aurait beaucoup de fichiers modifiés dans / etc.
nmgeek
6

Juste pour développer les réponses précédentes, voici comment faire à distance la même chose que la réponse acceptée, en utilisant une mise à niveau sans mot de passe sur ssh qui mettra votre box à niveau vers la dernière version. Il est copié sur ma propre entrée de blog .

Toutes ces étapes supposent que votre référentiel de packages fonctionne. Ce qui signifie que si vous exécutez la mise à jour apt-get, vous ne recevez pas beaucoup de 404 en raison d'une version obsolète. Vous devez d'abord corriger cela, alors voyez cette réponse pour cela.

0. Mettre à jour tous les packages existants

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

1. Configurer l'exécution sans mot de passe

Ajoutez-vous à la liste des utilisateurs qui peuvent exécuter do-release-upgrade en utilisant sudo sans entrer de mot de passe.

sudo visudo -f /etc/sudoers.d/do-release-upgrade.

et en ajoutant la ligne suivante, en remplaçant mon-nom d'utilisateur par le vôtre bien sûr:

my-username ALL=NOPASSWD: /usr/bin/do-release-upgrade

2. Lancer des mises à niveau incrémentielles

Déconnectez-vous et exécutez la commande suivante à partir de votre ordinateur. Il effectuera une mise à niveau sans vous demander d'entrer (en acceptant toutes les réponses par défaut), attendez que l'ordinateur redémarre, puis essayez à nouveau de mettre à niveau. Il s'exécute jusqu'à ce que vous soyez mis à niveau vers la dernière version.

while true; do 
    ssh my-user@my-server sudo do-release-upgrade -f DistUpgradeViewNonInteractive;
    sleep 120; 
done

3. Fixez les fichiers de configuration à leur état précédent

Ensuite, vous devrez déplacer les fichiers de configuration sauvegardés vers leur emplacement précédent car le processus de mise à niveau a mis les configurations par défaut à leur place.

Pas satisfait des réponses par défaut?

Ce type a un moyen de pré-préparer les réponses pour chaque invite, mais l'inconvénient est que vous devez savoir combien il y a d'invites…

oligofren
la source
5

Pour confirmer ce que Thomas Ward déclare dans sa réponse et contredire la réponse acceptée, do-release-upgrade -d -f DistUpgradeViewNonInteractiveNE FONCTIONNE PAS.

En fait, à la toute première invite, il a cassé ma partition de test 16.04 à 18.04 cassée et j'ai dû la recloner. C'est là que le script se fige:

Setting up mount (2.31.1-0.4ubuntu3) ...
Setting up systemd (237-3ubuntu10) ...
Installing new version of config file /etc/pam.d/systemd-user ...
Installing new version of config file /etc/systemd/journald.conf ...

Configuration file '/etc/systemd/logind.conf'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
*** logind.conf (Y/I/N/O/D/Z) [default=N] ? y

Y
CRASHED... NOTHING HAPPENS NOW... WILL KILL AND RESTART WITHOUT -f OPTION...

En raison des inhibiteurs d'entrée, ni le redémarrage ni l'arrêt ne fonctionneront après avoir tué le script. Vous devez faire un arrêt à froid (maintenez le bouton d'alimentation ~ 10 secondes).

Dieu merci, c'était une mise à niveau du clone 16.04 et non sur la vraie partition 16.04.


Pour rendre la vie encore plus intéressante, une nouvelle partition de 898 Mo a été ajoutée à mon SSD NVMe et mes partitions régulières ont été déplacées:

$ lsdrv
NAME        FSTYPE  LABEL                  MOUNTPOINT          SIZE MODEL

nvme0n1                                                        477G Samsung SSD 960 PRO 512G
├─nvme0n1p5 ntfs                                               858M 
├─nvme0n1p3                                                     16M 
├─nvme0n1p1 ntfs                                               450M 
├─nvme0n1p8 ntfs    Shared_WSL+Linux       /mnt/e                9G 
├─nvme0n1p6 ext4    Ubuntu18.04                               23.7G 
├─nvme0n1p4 ntfs    NVMe_Win10             /mnt/c            390.4G 
├─nvme0n1p2 vfat                           /boot/efi            99M 
├─nvme0n1p9 swap    Linux Swap             [SWAP]              7.9G 
└─nvme0n1p7 ext4    NVMe_Ubuntu_16.0       /                  44.6G 
  • nvme0n1p5 l'habitude d'être où ma partition Ubuntu 16.04 résidait, mais maintenant il est sur nvme0n1p7
  • nvme0n1p8 l'habitude d'être où ma partition de test 18.04 résidait, mais maintenant il est sur nvme0n1p8

REMARQUE: J'ai également mis à niveau Windows 10 de la version 1709 vers la version 1803 cet après-midi, il est donc possible qu'il ait créé la nouvelle nvme0n1p5partition de 898 Mo au ntfsformat.

WinEunuuchs2Unix
la source
C'est un gros problème, alors vous devriez le signaler sur Launchpad. Utilisé de manière non interactive à travers plusieurs mises à niveau de distribution plus tôt
oligofren
mis à jour ubuntu et windows sur la même boîte le même jour? vous devez apprécier la douleur
JDS
@JDS Windows s'est foutu. 1700 mises à niveau manquantes, toutes sortes de dépendances cassées Python 2 vs Python 3. Je dois effacer et réinstaller Ubuntu 16.04 à partir du soupir du Windows Store .
WinEunuuchs2Unix
2

Vous pouvez le faire via le terminal, en utilisant sudo apt-get -y upgrade. Cela répondra «oui» à toutes les invites. Cependant, il ne s'exécutera pas automatiquement, vous devez donc l'exécuter. Ça devrait marcher. AFAIK, il n'y a aucun moyen d'utiliser le gestionnaire de mise à jour de l'interface graphique pour effectuer des mises à niveau sans assistance du logiciel ( ce n'est PAS la même chose qu'une mise à niveau de version! )

Si vous essayez de mettre à niveau vers une autre version d'Ubuntu (alias une mise à niveau de version , et généralement la prochaine version de la gamme de versions relative à votre version d'Ubuntu), vous devez l'activer manuellement . sudo do-release-upgradepeut fonctionner. Il n'y a cependant aucun moyen d'ignorer les invites. C'est pourquoi vous lancez des mises à niveau lorsque vous allez être présent pour de telles invites - il y aura des invites.

Thomas Ward
la source
1
"Il n'y a cependant aucun moyen d'ignorer les invites". Qu'en est-il de l'indicateur DistUpgradeViewNonInteractive? Cela saute les invites.
oligofren
1
@oligofren Thomas a raison car l' -f DistUpgradeViewNonInteractiveindicateur provoque le verrouillage du script à la première (Y/I/N/O/D/Z)invite. Voir ma réponse que je viens de poster.
WinEunuuchs2Unix
-4

Essayez d'ajouter une -yoption à apt-getmais sachez qu'elle répondra à ytoutes les requêtes.

blogueur
la source
1
J'utilise le gestionnaire de mise à jour graphique, pas apt-get. Je pouvais faire la mise à jour dans la console, mais j'ai entendu dire que «apt-get dist-upgrade» ne fonctionnait pas depuis des années (pour mettre à niveau entre les versions), donc la commande ne serait pas «apt-get».
jdm
@jdm apt-get dist-upgradedevrait fonctionner correctement . Où étiez-vous ici, ça ne marche plus?
Seth
3
@Seth apt-get dist-upgradene fait pas et n'a jamais, sur aucun système d'exploitation, effectué de mise à niveau de sa propre version. Voir man apt-get. upgrademet uniquement à niveau les packages qui peuvent être mis à niveau sans qu'aucun package ne soit nouvellement installé ou désinstallé. dist-upgrademet à niveau les packages même lorsque cela signifie que les packages sont supprimés ou ajoutés. Ceci est principalement utile pour effectuer des mises à jour ordinaires - par exemple, upgradene mettra pas à jour les noyaux.
Eliah Kagan
2
La modification sources.listpour pointer vers les archives de la prochaine version puis son exécution apt-get dist-upgradeentraîneront, si elle réussit , une mise à niveau de la version. Ceci est supporté dans Debian mais il est recommandé de l'utiliser à la aptitude dist-upgradeplace en raison de sa résolution de dépendance plus avancée. Dans Ubuntu, rien de tout cela n'est pris en charge , bien qu'il puisse réussir. Au lieu de cela, pour effectuer une mise à niveau vers une version ultérieure de la ligne de commande, do-release-upgradeest utilisé. Cet utilitaire ne prend pas d' -yindicateur, donc cette réponse ne s'applique pas à la situation de la mise à niveau vers une nouvelle version .
Eliah Kagan
Hein, intéressant. Je devais alors lire sur Debian.
Seth