Installieren Sie eine Liste von Paketen nur, wenn sie noch nicht installiert sind


9

Ich versuche mein Setup so weit wie möglich zu automatisieren.

Zu diesem Zweck habe ich Listen von Paketen, die ich installieren möchte, zum Beispiel: Banshee Wireshark Kühnheit Thunderbird Thunderbird-Blitz Kaliber Überschwemmung Unison-GTK USB-Creator-Kde Ding Digikam Chrom-Browser Bleachbit Soundconverter Kdenlive Firefox-Kde-Support VLC CWRite OpenJDK -6-jre icedtea6-plugin virtualbox virtualbox-guest-additions-iso.

Ich möchte ein kleines Bash-Skript schreiben, um apt-get aufzurufen und diese Pakete nur zu installieren, wenn sie noch nicht installiert sind.

Derzeit habe ich dies, aber es funktioniert nicht:

dpkg -s "$1" > /dev/null 2>&1 || apt-get -y install "$1", (wobei $ 1 die Liste ist)

Antworten:


3

apt-get überspringt ziemlich stillschweigend jedes Paket, das bereits installiert ist, sodass ich nicht sicher bin, warum es eine Sonderbehandlung benötigt? dh:

root@bun:~# apt-get -y install  vlc
Reading package lists... Done
Building dependency tree       
Reading state information... Done
vlc is already the newest version.

Gibt es einen bestimmten Grund, warum dies bei Ihnen nicht so funktioniert, wie es ist?


Ich denke ich könnte. Der Grund, warum ich es nicht als erstes in Betracht gezogen habe, ist, dass ich dies als Teil eines automatisierten Skripts verwende, das meine gesamte Konfiguration (alle Konfigurationsdateien, Netzwerkeinstellungen usw.) ausführt. Das heißt, wenn ich etwas ändere, muss ich dieses Skript auf zwei separaten Computern erneut ausführen, damit es in so kurzer Zeit wie möglich ausgeführt wird. Das Ausführen von apt-get, insbesondere auf dem Laptop, der möglicherweise nicht immer über eine Internetverbindung verfügt, ist in Bezug auf die benötigte Zeit ziemlich schwer.
Happyskeptic

Darüber hinaus funktioniert dies auf RPM-basierten Systemen mit RPM -q. Es wird einfach in der lokalen Datenbank der installierten Pakete angezeigt und ist sehr schnell. Außerdem muss keine Zeitüberschreitung auftreten, falls kein Netzwerk vorhanden ist.
Happyskeptic

Ein Grund, das Aufrufen apt-get -y installmit bereits installierten Paketnamen zu vermeiden, ist, dass apt-get in diesem Fall den Status automatisch installierter Pakete in "manuell installiert" ändert. Weitere Informationen finden Sie unter askubuntu.com/q/831/550780 .
CODE-REaD

2

Für ein Live-Session-Setup-Skript hatte ich ungefähr Folgendes:

# returns 1 if the package was already installed and 0 otherwise. The first
# argument is the package name to be checked (and installed if not already).
# other arguments are passed to apt-get
try_install() {
    dpkg -l "$1" | grep -q ^ii && return 1
    apt-get -y install "$@"
    return 0
}

if try_install openssh-server; then
    sed /etc/ssh/sshd_config 's/UsePAM yes/UsePAM no/' -i
    reload ssh
fi
try_install screen && wget lekensteyn.nl/files/screenrc -O ~/.screenrc
# passing extra options and package names to apt-get
try_install firefox --no-install-recommends firefox-kde-support

Wenn eine Anwendung bereits installiert war, habe ich angenommen, dass sie konfiguriert ist.


1

Ich ging meine gestellten Fragen auf dieser Site noch einmal durch und stellte fest, dass ich nie die Befehle gepostet habe, die ich letztendlich verwendet habe:

export DEBIAN_FRONTEND=noninteractive # stop annoying prompts
dpkg -s "$@" > /dev/null 2>&1 || apt-get -qq -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install "$@"

0

Sie können versuchen, eine Liste bereits installierter Pakete über zu speichern dpkg --get-selections > installed-software

Jetzt können Sie andere Tools verwenden, um herauszufinden, welche Pakete installiert werden sollen, z.

vadik@ubuntu:~$ cat installed-software | grep "indicator-weather"
indicator-weather               install
vadik@ubuntu:~$ cat installed-software | grep "indicator-cpufreq"
vadik@ubuntu:~$ 

Wie Sie vielleicht sehen, können Sie bestimmen, ob indicator-weatheroder indicator-cpufreqmit installiert werdengrep

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.