ubuntuusers.de

Updates automatisieren per Skript

Status: Ungelöst | Ubuntu-Version: Ubuntu 6.06 (Dapper Drake)
Antworten |

Tom-L

Anmeldungsdatum:
22. Oktober 2005

Beiträge: 1181

Hallo,

ich möchte gern per Skript mit einem Klick ein System durch aptitude jeweils auf den neuesten Stand bringen, also nur die vorhandenen Pakete updaten. Wichtig dabei ist, dass dies nur auf ausdrückliche Benutzeraktion hin geschieht. Ein cron-job kommt soll es nicht sein.

Ich habe keinerlei Erfahrungen mit Skripten. Bisher habe ich folgendes versucht, was wohl auch funktioniert:

#!/bin/sh

sudo aptitude update && sudo aptitude upgrade

Wenn ich das ganze dann mit der Option "im Terminal ausführen" starte wird zuerst das Passwort abgefragt und dann werden die Befehle abgearbeitet. Danach geht das Terminal danach sofort wieder zu. Das ist natürlich ungünstig, wenn man noch einige Informationen lesen möchte, insbesondere etwaige Fehlermeldungen. Daher folgende Fragen:

Gibt es die Möglichkeit das ganze so zu gestalten, dass sich das Terminal nach vollendeter Arbeit nicht sofort wieder schließt, sondern mit der üblichen Eingabeaufforderung aufwartet (in meinem Fall also tom@ubuntu:~$)?

Kann man das ganze so einrichten (vielleicht durch eine entsprechende Option), dass nur dieses eine Skript automatisch im Terminal ausgeführt wird? Bislang kann ich nur die Eigenschaften für alle Dateien dieses Typs festlegen (also anzeigen, ausführen oder im Terminal ausführen). Bei anderen ausführbaren Textdateien möchte ich schon noch gefragt werden, wie ich damit umgehen möchte, bei diesem einen Skript aber wenn möglich nicht.

Gruß,
Tom

Len_C

Anmeldungsdatum:
15. Juli 2005

Beiträge: 2631

Wohnort: Österreich

Falls du apt-get nicht völlig ablehnst, kannst du Folgendes probieren (auf dem root-Terminal):

COLUMNS=200 dpkg-query -W --showformat='${Package}\n' > packages.list
cat packages.list | xargs apt-get -y --force-yes install

Mit dem ersten Befehl wird eine Liste erstellt, die alle installierten Pakete enthält.
Mit dem zweiten Befehl werden die Pakete aktualisiert.

Wenn du bestimmte Pakete nicht aktualisieren willst, kannst du sie vor Ausführung des zweiten Befehls aus der Datei packages.list herausnehmen.

Tom-L

(Themenstarter)

Anmeldungsdatum:
22. Oktober 2005

Beiträge: 1181

Vielen Dank für den Tipp.

Das Skript ist für einen ganz speziellen Rechner gedacht, auf dem nur einige Standardanwendungen laufen. Es sollen halt dort nur die Sicherheitsupdates oder Bugfixes eingespielt werden.

Gibt es einen Unterschied ob man apt-get oder Synaptic benutzt? Oder anders gefragt, werden die Abhängigkeiten vom deinem Skript anders aufgelöst als wenn man den update-notifer benutzt? Zwischen aptitude und Synaptic gibt es da ja einige Unterschiede.

Gruß,
Tom

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Tom L hat geschrieben:

Gibt es die Möglichkeit das ganze so zu gestalten, dass sich das Terminal nach vollendeter Arbeit nicht sofort wieder schließt, sondern mit der üblichen Eingabeaufforderung aufwartet (in meinem Fall also tom@ubuntu:~$)?

Keine Ahnung, aber wenn es nicht unbedingt die Eingabeaufforderung sein soll, sondern das Skript einfach nur auf eine Tastatureingabe warten soll, geht auch folgendes:

#!/bin/sh
sudo aptitude update && sudo aptitude dist-upgrade
read


So wartet das Skript nach Abschluss der Aktualisierung auf das Drücken der Enter Taste, bevor es sich beendet.

Tom L hat geschrieben:

Kann man das ganze so einrichten (vielleicht durch eine entsprechende Option), dass nur dieses eine Skript automatisch im Terminal ausgeführt wird? Bislang kann ich nur die Eigenschaften für alle Dateien dieses Typs festlegen (also anzeigen, ausführen oder im Terminal ausführen). Bei anderen ausführbaren Textdateien möchte ich schon noch gefragt werden, wie ich damit umgehen möchte, bei diesem einen Skript aber wenn möglich nicht.

Ne, das geht nicht. Beim Öffnen von Dateien beachtet Gnome nur die Mime Typen (also den Dateityp). Spezifische Einstellung für einzelene Dateien sind nicht vorgesehen, zumal solche Einschränkungen auch relativ leicht umgangen werden können.

Gruß
lunar

Tom-L

(Themenstarter)

Anmeldungsdatum:
22. Oktober 2005

Beiträge: 1181

Lunar hat geschrieben:

Keine Ahnung, aber wenn es nicht unbedingt die Eingabeaufforderung sein soll, sondern das Skript einfach nur auf eine Tastatureingabe warten soll, geht auch folgendes:

#!/bin/sh
sudo aptitude update && sudo aptitude dist-upgrade
read


So wartet das Skript nach Abschluss der Aktualisierung auf das Drücken der Enter Taste, bevor es sich beendet.

Vielen Dank Lunar, das passt super. Ich hab bei mir lediglich das dist-upgrade in upgrade geändert.

Tom

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Tom L hat geschrieben:

Vielen Dank Lunar, das passt super. Ich hab bei mir lediglich das dist-upgrade in upgrade geändert.

Fragt sich nur, warum?
Bei Updates, die neue Dependencies einführen (z.B. Kernelupdates) werden die neuen Pakete dann zuruückgehalten, und du musst wieder manuell eingreifen.
In der Regel bereitet der Einsatz von dist-upgrade keine Probleme.

Gruß
lunar

Tom-L

(Themenstarter)

Anmeldungsdatum:
22. Oktober 2005

Beiträge: 1181

Oh, ich hatte angenommen, das dist-upgrade ausschließlich eine Anweisung für eine Umstellung von z. B. dapper auf edgy wäre, während upgrade eine Aktualisierung aller vorhandenen Pakete vornimmt. Wenn das allerdings nicht so ist werde ich das für diesen speziellen Rechner wieder auf dist-upgrade umstellen. Ich will da ja gerade nicht eingreifen müssen.

An meinem Heimrechner arbeite ich mit dem Consolen-Fronted von aptitude, da dort auch mal Softwareänderungen anstehen. Daher sind mir die reinen Consolenbefehle noch nicht so geläufig.

Danke für den Tipp.

Tom

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Tom L hat geschrieben:

Oh, ich hatte angenommen, das dist-upgrade ausschließlich eine Anweisung für eine Umstellung von z. B. dapper auf edgy wäre, während upgrade eine Aktualisierung aller vorhandenen Pakete vornimmt.

Von Sinn her ist das auch einigermaßen korrekt. Ein "update" aktualiert alle installierten Pakete, installiert oder entfernt allerdings keine neuen bzw. alten Pakete. Deswegen werden bei einem "update" Pakete ignoriert, die zwar in einer neuere Version vorliegen, bei der die Installation dieser neuen Version allerdings dazu führen würde, daß z.B. ein neues Paket installiert werden muss, um die Abhängigkeiten aufzulösen.

Ein "dist-upgrade" löst die Abhängigkeiten dagegen aggressiv auf, d.h. es entfernt rücksichtlos alte Pakete und installiert neue Pakete, um die Abhängigkeiten aufzulösen. Normalerweise ist das auch erwünscht, da man ja die neue Version eines Paketes auch installieren möchte. Außerdem kommt man unter Ubuntu normalerweise nur bei zwei Gelegenheiten in die Situation, daß bei einem dist-upgrade neue Pakete installiert oder alte entfernt werden.

Das ist zum einem bei einem Systemupgrade z.B. von Breezy auf Dapper der Fall. Hier ändert sich in der Regel einiges an den Abhängigkeiten, so daß viele Pakete entfernt und auch viele neue installiert werden. Aber diese Upgrade muss man ja durch bewusstes Ändern der sources.list einleiten.

Zum anderen tritt diese Situation bei einem Kernelupdate ein. Da bei Ubuntu jede neue Kernelversion in ein eigenes Paket kommt und nicht als neue Version des vorherigen Kernelpaketes angeboten wird, muss bei einem Kernelupdate ein neues Paket installiert werden. Ein normales "update" würde sich an dieser Stelle weigern. Ein "dist-upgrade" installiert dagegen das neue Kernelpaket, was eigentlich auch erwünscht ist.

Folglich kann man ohne Probleme dist-upgrade verwenden. Es ist sogar zwingend erforderlich "dist-upgrade" zu verwenden, wenn man bei einem Update auch den Kernel aktualisieren möchte.

Gruß
lunar

Antworten |