Meine Binärdatei hängt von diesen Boost-Bibliotheken und den entsprechenden Paketen ab:
NAME | PACKAGE:
--------------------------------------+-----------------------------------
libboost_serialization.so.1.55.0 | libboost-serialization1.55.0
libboost_thread.so.1.55.0 | ibboost-thread1.55.0
libboost_date_time.so.1.55.0 | libboost-date-time1.55.0
libboost_signals.so.1.55.0 | libboost-signals1.55.0
Daher möchte ich eine Liste von Paketen definieren:
boostlibnames="libboost-serialization1.55.0 libboost-thread1.55.0 libboost-date-time1.55.0 libboost-signals1.55.0"
Und jetzt möchte ich überprüfen, ob sie alle installiert sind und erst dann tatsächlich ausgeführt werden apt-get install
. Ich weiß, dass apt automatisch prüft, ob die Pakete bereits installiert sind, aber ich möchte dem Benutzer in einer Eingabeaufforderung mitteilen, ob er fehlende Bibliotheken installieren möchte, bevor er dies tut.
Gibt es also eine gute Möglichkeit zu überprüfen, ob alle aufgelisteten Bibliotheken (in Variablen wie oben) installiert sind?
Antworten:
Der
dpkg -s
Befehl gibt den Status der installierten Pakete zurück. Wenn ich es beispielsweise auf meinem System ausführe, fürfirefox
das installiert ist und fürnedit
das nicht, wird Folgendes angezeigt:Mit diesem Befehl können Sie also überprüfen, ob ein Paket installiert ist:
quelle
installed = installed || isInstalled(libArray[i])
. In ähnlicher Weise möchte ich false in eine Variable einfügen, wenn eine oder mehrere nicht installiert sind. Ich denke, ich kann das damit machenif
, aber das ist viel Code für nichts.apt-get install
auf allen ausführen . Alle installierten werden einfach ignoriert. Lassen Sie mich wissen, was Sie wollen und ich werde dies bearbeiten. Grundsätzlich müssen Sie die Änderungen|| echo ...
an|| installed=1
oder so etwas.if
Anweisungen arbeiten lassen, aber Variable würde bevorzugt. Ich habe vor, es in eine Funktion zu packen.dpkg -s
nach mehreren Paketen gleichzeitig suchen kann.Ich habe diese Funktion heute für ein CentOS-System ausgeführt.
Nun, ich habe die Funktion leicht modifiziert. Schneller und es braucht keine Schleife mehr.
Das Debian / Ubuntu-Gegenstück:
quelle
Im Folgenden finden Sie eine Liste aller relevanten Pakete, die nicht installiert sind:
Dies überspringt
dpkg -l
die Kopfzeilen und druckt dann Zeilen aus, in denen sich dpkg-query über ein unbekanntes Paket beschwert, UND Zeilen, die nicht mithi
oder beginnenii
(Hold Inst oder Install Inst).Normalerweise würde ich so etwas wie
awk 'NR<=5 {next} ; ...'
odersed -e '1,5d'
um diedpkg -l
Kopfzeilen loszuwerden , aber in diesem Fall leiten wir stderr nach stdout um, um Beschwerdendpkg-query
sowiedpkg -l
die Ausgabe abzufangen, sodass wir die erste nicht einfach löschen können 5 Zeilen.Dies zeigt Pakete an, die entweder nie installiert, entfernt oder gelöscht wurden oder bei denen die Installation aufgrund eines Fehlers fehlgeschlagen oder teilweise abgeschlossen ist.
quelle
Ich verwende in meiner Arbeit den folgenden Code namens Easy Bash , mit dessen Hilfe die beliebtesten Pakete schnell auf Ubuntu-Servern installiert werden können. Dieser Code überprüft die aufgelisteten installierten Pakete oder nicht.
Ergebnis:
quelle
quelle