Weiss jemand von euch, wie und ob das irgendwie geht? Scheinbar lässt sich "apt-get upgrade" in diesen control-Skripts ausführen, alles andere (wie z.b. install, remove, purge, clean, autoremove) nicht. (Na ja, das ist mir vorher schon aufgefallen, also nix neues)
Mein Problem ist folgendes:
Egal ob man nun den prod. (domain.net) Server oder den zum Testen/Entwickeln (domain.li) in der Datei `/etc/apt/sources.list/UnsereSoftware.list` eingetragen hat soll nach dem ausführen des Befehls "apt-get install UnsereSoftware" nochmal erneut nachgefragt werden (siehe viewtopic.php?f=27&t=179437 ) ob nun vom domain.net (prod) oder domain.li (test/dev) die SW geholt werden soll. Anschliessend wird der Eintrag in der Datei `/etc/apt/sources.list/UnsereSoftware.list` verändert und dann noch mal ein `apt-get update` gemacht.
Und: In der Datei `/etc/apt/sources.list/UnsereSoftware.list` wird ein "Marker" auf der lezten Zeile abgelegt (`# ... `), damit das keine Endlos-Schleife gibt.
Nur kriege ich es nicht hin, innerhalb des ersten "apt-get install UnsereSoftware" dann noch mal das gleiche (nach der Anpassung) zu starten. ("apt-get update" klappt wie gesagt problemlos)
- `exit` oder `exit 0` füher in der postinst dazu, dass die installation als abgeschlossen betrachtet wird
- den apt-Prozess über kill oder killall abzutöten klappt ebenfalls nicht, die nächste Zeile im Skript kommt dann nicht an die Reihe. Des weiteren kommt beim erneusten Installationsversucht die Meldung ich müsse was über dpkg reparieren.
- Einfach nochmal "apt-get install UnsereSoftware" (ohne was explizit abzubrechen) klapp auch nicht: Da kommt irgend ne Meldung mit "sub-process" oder so.
- Mit Prozess-Forks zu arbeiten ist auch nicht ganz trivial
Aktuell sieht die preinst-Datei so aus:
Code: Alles auswählen
# J.M., 2020-12-01 {
if ! grep -q '# ... ' /etc/apt/sources.list.d/raspi.list; then
PS3='Bitte APT-Repository für die Installation wählen: ';
options=("1.) Verwende UnsereSoftware.li als APT-Repo = Development / Test" "2.) Verwende UnsereSoftware.net als APT-Repository = Produktiv / Release");
USE_PROD=$(cat /dev/null);
select opt in "${options[@]}";
do
case $opt in
*"1"*)
echo "Verwende UnsereSoftware.li als APT-Repository = Development / Test";
USE_PROD="0";
break;
;;
*"2"*)
echo "Verwende UnsereSoftware.net als APT-Repository = Produktiv / Release";
USE_PROD="1";
break;
;;
*)
echo "Ungültige Wahl: $REPLY";
exit -1;
;;
esac;
done;
set -x;
if [ "$USE_PROD" == "0" ]; then
sed -i "s/UnsereSoftware.net/UnsereSoftware.li/" /etc/apt/sources.list.d/raspi.list;
echo "UnsereSoftware.li wurde als APT-Repository ausgewählt ... ";
else
if [ "$USE_PROD" == "1" ]; then
sed -i "s/UnsereSoftware.li/UnsereSoftware.net/" /etc/apt/sources.list.d/raspi.list;
echo "UnsereSoftware.net wurde als APT-Repository ausgewählt ... ";
fi;
fi;
echo "# ... " >> /etc/apt/sources.list.d/raspi.list;
apt-get update ||:;
apt-get clean && apt-get autoremove --purge;
#killall -9 apt-get ||:;
#apt-get install --yes --force-yes UnsereSoftware;
exit 0;
fi;
# } J.M., 2020-12-01
...das "exit 0" macht im preinst keinen Stress - wenn Exit-Code 0 dann geht's zur Installation über.
Ich weiss, dass meine Anforderungen "etwas speziell" tönen, aber die INstallation soll quasi idiotensicher sein.
Vielen DAnk für die Feedbacks