Frage Debian kann nicht gezwungen werden, eine unbeaufsichtigte Installation durchzuführen ... libc6 möchte interaktiv bestätigen


Ich versuche ein Skript zu erstellen, das eine Debian Lenny Installation erzwingt, um die neueste Version von CRAN R zu installieren. Während der Installation erscheint libc6 aktualisiert und die Installation möchte interaktiv bestätigen, dass es OK ist, drei Dienste neu zu starten (mysql, exim4, cron ). Dieser Prozess muss unbeaufsichtigt sein, da er auf den Elastic Map Reduce (EMR) -Maschinen von Amazon ausgeführt wird. Aber mir gehen die Optionen aus. Hier sind ein paar Dinge, die ich versucht habe:

Diese Vorherige Frage scheint genau das zu sein, wonach ich suche. Also habe ich mein Installationsskript wie folgt eingerichtet:

# set my CRAN repos... yes, I know there's a new convention where to put these. 
echo "deb http://cran.r-project.org/bin/linux/debian lenny-cran/" | sudo tee -a /etc/apt/sources.list
echo "deb-src http://cran.r-project.org/bin/linux/debian lenny-cran/" | sudo tee -a /etc/apt/sources.list

# set the dpkg.cfg options per the previous SuperUser question
echo "force-confold" | sudo tee -a  /etc/dpkg/dpkg.cfg
echo "force-confdef" | sudo tee -a  /etc/dpkg/dpkg.cfg
export DEBIAN_FRONTEND=noninteractive

# add key to keyring so it doesn't complain 
gpg --keyserver pgp.mit.edu --recv-key 381BA480
gpg -a --export 381BA480 > jranke_cran.asc
sudo apt-key add jranke_cran.asc

sudo apt-get update

# install the latest R
sudo apt-get install --yes --force-yes r-base 

Aber dieses Skript hängt mit der folgenden Anfrage für die Eingabe:

enter image description here

OK, also habe ich versucht, die Dienste mithilfe des folgenden Skripts zu stoppen:

sudo /etc/init.d/mysql stop
sudo /etc/init.d/exim4 stop
sudo /etc/init.d/cron stop
sudo apt-get install --yes --force-yes libc6

Dies funktioniert nicht und der interaktive Bildschirm kommt zurück, aber dieses Mal wird nur cron als Dienst aufgeführt, der neu gestartet werden muss.

Also gibt es eine Möglichkeit, libc6 einfach diese Dienste ohne Benutzereingaben neu zu starten? Oder gibt es eine Möglichkeit, Cron zu stoppen, so dass es keine interaktive Eingabeaufforderung verursacht? Vielleicht eine kreative Option, an die ich nie gedacht habe?

Denken Sie daran, dass dieses System hochgefahren wird, ein Hadoop-Code ausgeführt wird und dann abgerissen wird. So kann ich mit Nebenwirkungen und schlechtem Verhalten, die wir in einem Produktions-Desktop-Rechner oder Web-Server vielleicht nicht wollen, aushalten.


7
2018-02-22 15:08


Ursprung


Mögliches Duplikat von Ubuntu dpkg, nicht interaktive Installation - Alastair Irvine


Antworten:


Ich bin nicht positiv auf die Einstellungen in Lenny, aber ich weiß, dass in Squeeze Sudo mit konfiguriert ist env_reset Das bedeutet, dass alle bis auf einige wenige env-Variablen vor dem Ausführen des Befehls entfernt werden.

Das bedeutet die DEBIAN_FRONTEND Variable, die Sie setzen, macht es nie wirklich zur apt-get install --yes --force-yes r-base. Wenn Sie vollen Zugriff auf sudo haben, bedeutet dies, dass Sie sich in den sudoers-Dateien befinden ALL = ALL Berechtigungen, dann können Sie dieses Verhalten überschreiben.

Verwenden Sie stattdessen Folgendes.

sudo DEBIAN_FRONTEND=noninteractive apt-get install --yes --force-yes r-base

Bearbeiten: Beachten Sie, dass das Umschreiben des Skripts, um sudo nicht überall zu verwenden und stattdessen das Skript als root auszuführen, ebenfalls funktionieren würde. Aber das würde nur das wirkliche Problem vermeiden, auf das ich hingewiesen habe, anstatt es zu lösen und daraus zu lernen.


11
2018-02-22 18:04



Ich habe abgestimmt, empfehle aber auch, den Befehl zu ändern sudo sh -c "DEBIAN_FRONTEND=noninteractive apt-get install --yes --force-yes r-base" - bahamat
@ Bahamat, ich habe beide @ arrowmaster-Lösung als Ihre getestet. Beide arbeiten für mich. Danke euch beiden sehr. Was ist der Vorteil der Übergabe des Befehls? sh -c? - JD Long
@JD Lang: Die sh -c Die Methode funktioniert so lange, wie Sie sudo ausführen dürfen. Die eine, die ich benutzt habe, kann von sudo abhängig von der sudo-Konfiguration zurückgewiesen werden, aber ich finde es sehr unwahrscheinlich, dass das in einer Situation passieren würde, die Sie verwenden könnten sh -c als Alternative. - Arrowmaster


Eine prägnantere Variante der Debconf-Lösung, die in einer anderen Antwort erwähnt wird, ist die folgende:

echo 'libc6 libraries / restart-ohne-fragen boolean true' | sudo debconf-set-selections

Ich habe gerade diese Lösung erfolgreich beim Upgrade von glibc auf Debian 7 (Wheezy) verwendet.

Für die Neugierigen habe ich die richtige Konfigurationsvariable wie folgt gefunden:

sudo apt-get installieren debconf-utils

sudo apt-get install -y libc6 # Eingabeaufforderung interaktiv beantworten

debconf-get-selections | grep libc6


4
2018-03-08 17:16



Es ist schön, dass Sie die Tools zur Verfügung gestellt haben, mit denen Sie die Antwort erhalten haben. Das könnte dem nächsten helfen, die Antwort auf ein anderes Problem zu finden. - Slartibartfast
schlau, danke !!


Schritt 1

Führen Sie auf dem Host, auf dem das Paket manuell installiert wurde (interaktive Optionsauswahl), Folgendes aus:

apt-get install debconf-utils
debconf-get-selections > answers.conf


Schritt 2 (optional)

An dieser Stelle möchten Sie vielleicht filtern Antworten.Konf um die Konfigurationsantworten nur für bestimmte Pakete aufzunehmen. Ich habe getestet, ohne zu filtern.


Schritt 3

Wenn Sie einen neuen Host erstellen, schließen Sie ein Antworten.Konfzusammen mit Ihrem automatischen Installationsskript. Vor dem Ausführen apt-get installFühren Sie im Skript Folgendes aus:

debconf-set-selections --verbose < answers.conf


Ergebnis

Dies wird die Debconf-Datenbank mit vordefinierten Antworten füllen. Die interaktiven Fragen werden beim Ausführen nicht gestellt apt-get install.


3
2018-02-22 16:51



Danke für deine Hilfe. Ich habe eine hässliche, aber funktionierende Lösung. Aber ich bleibe dran debconf Optionen, auf die Sie im Hinterkopf hinweisen. Ich werde diese beim nächsten Mal brauchen. - JD Long


Neben dem, was wir in E-Mail besprochen haben, gibt es auch das Sprichwort

Wenn du sie nicht schlagen kannst, mach mit.

Sie können also auf Ihrem Laptop eine virtuelle Maschine erstellen, die den (Basis-) Paketen der Cloud-Instanz entspricht, und dann Ihre eigene lokale R 2.12.1 .deb für diese Pakete neu erstellen. Wie kein Upgrade libc6 ist beteiligt, Sie würden das Problem umgehen.

Oder, in Übereinstimmung mit Ihrem Kommentar zu möglichen möglichen Nebenwirkungen, könnten Sie exim4, mysql und cron deinstallieren. Ihre R-Jobs brauchen sie nicht. So etwas wie

sudo dpkg --force-depends --remove ...names of your packages here...

aber ich kann nicht wirklich glauben, dass ich das empfehle :) Sie benötigen möglicherweise eine Trial and Error, um alle in Verbindung stehenden exim und mysql Pakete zu erhalten.


2
2018-02-22 15:29



Jetzt reden wir von roher Gewalt! ;) Ich habe versucht, Cron zu deinstallieren und es gibt mir einen Bestätigungssatz, etwas wie "Ich weiß, ich bin verrückt, aber es ist OK" - JD Long
Ah, verdammt, ja. Ich denke, Pakete mit einer bestimmten Priorität: Vielleicht bekommen Sie das. Also zurück zum Erstellen eines benutzerdefinierten / lokalen R .deb-Pakets? Oder kannst du nicht einfach R von Lenny laufen lassen (und die entsprechenden CRAN-Pakete manuell aus dem Archive-Bereich von CRAN holen? - Dirk Eddelbuettel
Das war ein viel größerer Schmerz in meinem Arsch, als ich mir je vorgestellt hätte. Der Klondel unten hat mir etwas Zeit gebracht ... vorerst. Nochmals vielen Dank, dass Sie mir geholfen haben, Ideen zu sammeln. - JD Long


Ich konnte folgern, dass das libc6-Installationsprogramm dazu auffordert, cron neu zu starten auch wenn Cron nicht lief was seltsam erscheint. Auf jeden Fall konnte ich das umgehen, indem ich die cron init.d-Skripte umbenannte, so dass das Paketinstallationsprogramm dazu verleitet wurde, nicht zu denken, dass Cron vorhanden war. Pfui. Was für ein Chaos:

sudo /etc/init.d/mysql stop
sudo /etc/init.d/exim4 stop
sudo /etc/init.d/cron stop
sudo mv /etc/init.d/cron /etc/init.d/cron.bak
sudo apt-get install --yes --force-yes libc6
sudo mv /etc/init.d/cron.bak /etc/init.d/cron
sudo /etc/init.d/mysql start
sudo /etc/init.d/exim4 start
sudo /etc/init.d/cron start

Nach diesem kleinen Kabuki-Tanz kann ich den neuesten R. installieren


1
2018-02-22 17:00



Yay. Gut genug für die Regierung, äh, Modellarbeit, wie wir sagen. - Dirk Eddelbuettel


Du kannst es versuchen:

printf "\n" | sudo apt-get install --yes --force-yes libc6 

0
2018-02-22 15:24



Ich schlug das früher auf JD vor; es ist das, was zum libc6upgrade, um die Probleme zu erzeugen, die er hat. - Dirk Eddelbuettel
das pringf "\n" |  Bit ist neuartig. Ich mag es, aber ich habe es ausprobiert und aus irgendeinem Grund hat es nicht dazu geführt, dass die Bestätigungsseite verschwunden ist. Gott weiß nur, was das gegessen hat \n. - JD Long
Versuchen Sie, mehrere \ n's zu setzen - Aleksandr Levchuk
Seltsamerweise macht es etwas seltsames am blauen Bildschirm. Wenn ich die hinzufügen printf "\n" dann ist der Cursor nicht mehr in der Box und ich kann den Bildschirm überhaupt nicht navigieren. Wirklich seltsam. Ich hatte Hoffnung für diesen Hack. - JD Long