TK87
Anmeldungsdatum: 8. Juli 2019
Beiträge: 216
Wohnort: Aachen
|
Hallo zusammen. Ich möchte ein Script erstellen, welches verschiedene Programme installiert, Systemkonfigurationen vornimmt und anschließend nach einem Neustart automatisch mit Rootrechten einmalig fortgesetzt wird. Die Fortsetzung sollte für den Benutzer sichtbar sein, allerdings soll hier nicht erneut nach einem Sudopasswort gefragt werden. Soweit bin ich bisher:
#!/usr/bin/sudo /bin/bash
### VARIABLEN ###
# Prüfvariable - 1.Start oder Fortsetzung
RUNS=0
### FUNKTIONEN ###
# Starter für reRun erstellen (erfordert RUNS=0)
reRun() {
cat <<-EoF > /etc/xdg/autostart/reRun.desktop
#!/usr/bin/env xdg-open
[Desktop Entry]
Type=Application
Exec=mate-terminal --command=/usr/local/sbin/mate-conf.sh
Name=Konfiguration fortsetzen
EoF
chmod 755 /etc/xdg/autostart/reRun.desktop
}
# Befehl erfolgreich ausgeführt?
error() {
if [ $? -eq 0 ]
then
echo -e 'erfolgreich.\n'
fi
}
### HAUPTPROGRAMM ###
# Erster Start oder Fortsetzung?
if [ $RUNS -eq 0 ]
then
printf "Kopiere Script nach /usr/local/sbin..."
sed s/^RUNS=./RUNS=1/ $(readlink -f $0) >/usr/local/sbin/mate-conf.sh;error
chmod 755 /usr/local/sbin/mate-conf.sh
printf "Erstelle Starter für Fortsetzung nach Neustart..."
reRun;error
# Hier beginnt die konfiguration
else
# Hier wird das Script nach Neustart fortgesetzt
rm /usr/local/sbin/mate-conf.sh
fi In Aktion:
Es wird eine Variable $RUNS deklariert, die prüft ob es sich um den 1. Start oder um die Fortsetzung nach einem Neustart handelt. Bei erstem Start wird die Funktion reRun aufgerufen, die einen Starter im Benutzerübergreifenden Autostartordner erstellt. Per sed wird die Variable $RUNS auf 1 gesetzt und das Script nach /usr/local/sbin kopiert, damit es nicht mehr ohne sudorechte editiert werden kann und keine Rechtekonflikte im Homeordner entstehen.
Funktioniert bisher alles, nur wird hier nach Neustart natürlich noch das Sudopasswort abgefragt. Das Passwort im Klartext ins Script zu schreiben kommt für mich nicht in Frage. Die einzige alternative, die mir jedoch bisher eingefallen ist, wäre dass das Script sich selbst in die sudoers einträgt und nach dem reRun wieder entfernt - was natürlich ebenfalls sehr unsauber wäre. Die sauberste Lösung wäre vermutlich(?) eine systemd-Unit zu erstellen - allerdings kenne ich hier bislang nur die Möglichkeit das Script als Daemon unsichtbar im Hintergrund starten zu lassen. Gibt es einen Weg, ein Script per systemd-Unit für den Nutzer sichtbar im Terminal zu starten? Irgendwelche Vorschläge (gerne auch zu einer besseren Vorgehensweise des obigen Scripts)? Vielen Dank im Vorraus. Gruß Thomas
|
TK87
(Themenstarter)
Anmeldungsdatum: 8. Juli 2019
Beiträge: 216
Wohnort: Aachen
|
Fällt da echt keinem etwas zu ein? ▶ Bleibt da wirklich nur der Weg, dass das Script einen Eintrag in der /etc/sudoers erstellt?
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Hallo! Es gäbe mehrere Möglichkeiten, um Dinge beim Neustart ans Laufen zu bekommen:
Der User muss ja auch nicht zwingend den "echten Ablauf" sehen, es wäre ja auch möglich ihm Meldungen davon zu schicken, was gerade passiert. Zunächst mal die Frage: Wozu neu starten? Was genau hast du vor? Ist der Neustart zwingend?
|
TK87
(Themenstarter)
Anmeldungsdatum: 8. Juli 2019
Beiträge: 216
Wohnort: Aachen
|
Danke erst mal für die Rückmeldung ChickenLipsRfun2eat schrieb: Was genau hast du vor?
Ich möchte quasi ein Script erstellen, welches die Ersteinrichtung des System nach einer Neuinstallation weitgehenst automatisiert übernimmt. Dazu gehören u. a. erstmal das System auf den neusten stand bringen, Paketquellen hinzufügen, diverse Programme installieren, ein Updatescript erstellen, Grub für Dualboot konfigurieren, eventuell noch fstab Einträge erstellen, dconf- bzw. gsettings-einstellungen, andere Systemkonfigurationen übernehmen usw.
Ist der Neustart zwingend?
Ja, genau das ist ja gerade das Problem 😉
Es gäbe mehrere Möglichkeiten, um Dinge beim Neustart ans Laufen zu bekommen:
War ja auch mein erster Gedanke. Nur wie oben schon erwähnt: eine Unit erstellen die beim Systemstart ausgeführt wird ist kein Problem. Wie man jedoch hier dem Benutzer, der ggfs. vor dem Bildschirm hockt, darüber informiert was gerade passiert, dafür habe ich zumindest bisher noch keine Lösung gefunden. Auch hier die Problematik, den Benutzer über den Ablauf auf dem laufenden zu halten. Hier weiß ich nicht so ganz wie mich das weiterbringt 😳. Kann man dem Benutzer Sonderrechte einräumen, damit er (quasi als Alternative zum Sudoers-Eintrag) das Script mit sudorechten ausführen kann? Oder kann man damit ein Script als root in der aktuellen Benutzersitzung starten? Was genau schwebt dir da vor? Der User muss ja auch nicht zwingend den "echten Ablauf" sehen
Mein Gedanke diesbezüglich war ggfs. auch Benutzerinteraktionen im Script einbringen zu können, ist aber auch kein Muss. es wäre ja auch möglich ihm Meldungen davon zu schicken, was gerade passiert.
Wäre unter Umständen auch eine Option. Wie würdest du hier herangehen? notify-send, zenity, oder schwebt dir da noch etwas ganz anderes vor? Über den Sudoers-Eintrag habe ich die ganze Geschichte derzeit zumindest ans Laufen bekommen - halte es aber nach wie vor für suboptimal, ein Script in der Sudoers rumfrickeln zu lassen.
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Gut, Fremdquellen würde ich sowieso keine "ab Werk" einbinden wollen. Aber falls du eine eigene hast, kannst du auch darüber "alles" machen. Ich sehe auch in deinen Punkten jetzt nichts, was ein "sichtbares root-Script" nach dem Neustart nötig macht. Das alles kannst du ja einrichten, ohne einen Neustart. Nach dem Neustart sollte ja auch alles fertig sein - oder entgeht mir da was? Welche Zielgruppe hast du? Mal ohne wirklich lange darüber nachzudenken würde ich das wohl so machen:
Script mit Userrechten starten, dort alles relevante anhaken/auswählen lassen, was gewünscht ist. Danach root-Rechte für alles relevante anfordern, die Änderungen (geprüft) vornehmen und letztendlich den Nutzer bitten neu zu starten. Zum update des Systems: Es gäbe zum einen unattended_upgrades , die grafischen Möglichkeiten und mein Favorit: Ein Alias im Terminal. Ungetestetes Beispiel: alias upd='sudo apt update && sudo apt full-upgrade && sudo apt autoremove && if [ -f /var/run/reboot-required ]; then echo "Neustart nötig"; else echo "Kein Neustart nötig!"; fi' Bricht ab, wenn irgendwas schief geht(könnte man noch mit einer eigenen Meldung versehen, muss aber nicht) und bringt direkt den Output, den man als Supporter eines solchen Systems braucht, wenn es nicht durchläuft. Dropdown-Terminal installieren, ggf. dort vorbereitet alles einrichten, was benötigt wird. (Siehe bspw. Yakuake/Howto/Yakuake Steuerung über DBUS), und entschuldige die "Eigenwerbung" ☺ ) Und ja, da kann man überlegen, ob man exakt diese Befehlszeile in die sudoers einträgt. Ich empfinde es aber nicht als schlimm, wenn man das PW eingeben muss. Ich nutze das mal so, mal so. Nutzer benachrichtigen: Das kommt ein wenig darauf an, was du im Endeffekt haben möchtest und wie viel Aufwand du betreiben willst. Kurze Informationen wie "Ey, mach mal wieder Update" würde ich über das normalen notify laufen lassen, längere Informationen oder Abläufe eher nicht. Im Terminal könntest du bspw. eine Logdatei mit tail nebenbei "laufen lassen", die dann immer die aktuellen Nachrichten präsentiert. Bei GTK bin ich mir der aktuellen Möglichkeiten auch nicht so bewusst, aber da wäre eventuell ein Python-Programm mit GUI für den Nutzer leichter. Falls es da ein "Erinnerungsmodul" gibt, wie beim Kalender, könnte man das nutzen. Also ein getimtes Popup. GRUB-Konfiguration: Kann ich mangels Verwendung nichts zu sagen. Lässt sich das gut scripten? Eventuell kannst du da auch mit dkms arbeiten, um zukünftige Änderungen zu berücksichtigen. An der Stelle muss ich zugeben, dass ich das unter Ubuntu nie mache und das andere System recht leicht eigene hooks unterstützt.
Was ich mit cron, systemd, etc. meinte: Du könntest das Script ja in bspw. /root ablegen und mittels unit passend starten (also bspw. nach Userlogin, Aufbau der Internetverbindung, etc.pp.), um deine Nacharbeiten zu erledigen. Das wird ja dann automatisch mit root-Rechten ausgeführt und kleinere Eingriffe mit Nutzerrechten könntest du mittels su nutzername einbauen (zum Beispiel dessen Terminal starten und einrichten). Letzten Endes kommt es echt sehr auf deine Zielgruppe an. Falls es eher versierte Nutzer sind, kämen die auch mit Fehlern/Fehlermeldungen zurecht und könnten selbst eingreifen. Hast du es eher mit Anfängern zu tun, würde ich eher auf eine komplette GUI-gestützte Lösung abzielen. Diese könnte auch im Hintergrund nichts anderes machen, als das Script zusammenzustellen (mit den gewünschten Optionen). Falls irgendwas nicht klappt, kannst du davon ausgehen, dass das Tool ein paarmal gestartet wird, bis der Anwender aufgibt. Nuja, ist nun doch etwas mehr Text geworden. Was ich eigentlich™ noch wirklich beitragen wollte: pkexec . Mittels PolicyKit kannst du wahrscheinlich alles so fein steuern, wie du es gerne hättest und Rechte nach Bedarf geben und nehmen. (Stichwort: .pkla-Dateien)
|
TK87
(Themenstarter)
Anmeldungsdatum: 8. Juli 2019
Beiträge: 216
Wohnort: Aachen
|
Welche Zielgruppe hast du?
Komplettanfänger. Hab viele Leute im Bekanntenkreis - und auch einige Internetbekanntschaften - die bislang reine Windowsuser sind, jedoch Interesse zeigen sich auch mal Ubuntu anzugucken. Insbesondere bei denen, wo ich nicht mal eben vorbei fahren kann möchte ich das System schon mal weitestgehend konfiguriert lassen (kleinere Geschichten kann man Notfalls immer noch via Teamviewer erledigen), um ihnen anschließend Schritt für Schritt das System näher bringen zu können. Gut, Fremdquellen würde ich sowieso keine "ab Werk" einbinden wollen.
Um aktuelle Versionen einiger Standardprogramme (etwa Gimp oder sowas) installieren zu lassen ist das doch nichts verwerfliches. Gut, speziell Gimp könnte stattdessen auch als Flatpak installieren lassen, manch andere aber nicht. Zum update des Systems: [...] und mein Favorit: Ein Alias im Terminal. Ungetestetes Beispiel: alias upd='sudo apt update && sudo apt full-upgrade && sudo apt autoremove && if [ -f /var/run/reboot-required ]; then echo "Neustart nötig"; else echo "Kein Neustart nötig!"; fi'
[...]
Jup, genau sowas hatte ich da auch im Sinn 😎. (Siehe bspw. Yakuake/Howto/Yakuake Steuerung über DBUS), und entschuldige die "Eigenwerbung" ☺
Immer gerne her mit sowas... lasse mich immer gerne inspirieren 😉 Mit GTK hab ich mich bislang auch noch nicht befasst... aber mit Python lässt sich da mittels tkinter in der Tat leicht was basteln 💡. Geht ja nur um die Einrichtung für Dualboot. Sind also i.d.R. nur ganz simple Kleinigkeiten:
/etc/grub.d/30_os-prober in 09_os-prober umbenennen - damit die Einträge von Windows und Ubuntu direkt bei einander stehen in der /etc/default/grub die Zeile GRUB_TIMEOUT=-1 setzen - damit gewartet wird bis der Benutzer eine Auswahl trifft, statt nach 10Sek. die Standardauswahl zu laden ggfs. Noch GRUB_DEFAULT=1 setzen, falls gewünscht ist, dass Ubuntu die Standardauswahl ist.
Einzige Ausnahme: Ẃenn man unter Windows eine Recoverypartition eingerichtet hat, wird es ein bisschen aufwendiger. Diese führt zu einem doppelten Grub-Eintrag, den man (zumindest meiner Kenntnis nach) nur los wird, indem man den Windowseintrag in eine customdatei unter /etc/grub.d schreiben lässt und den os-prober deaktiviert. Was ich eigentlich™ noch wirklich beitragen wollte: pkexec . Mittels PolicyKit kannst du wahrscheinlich alles so fein steuern, wie du es gerne hättest und Rechte nach Bedarf geben und nehmen. (Stichwort: .pkla-Dateien)
Dass scheint mir doch genau das zu sein, wonach ich eigentlich gesucht hatte. Besten Dank. 👍
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
TK87 schrieb: Welche Zielgruppe hast du?
Komplettanfänger. Hab viele Leute im Bekanntenkreis - und auch einige Internetbekanntschaften - die bislang reine Windowsuser sind, jedoch Interesse zeigen sich auch mal Ubuntu anzugucken. Insbesondere bei denen, wo ich nicht mal eben vorbei fahren kann möchte ich das System schon mal weitestgehend konfiguriert lassen (kleinere Geschichten kann man Notfalls immer noch via Teamviewer erledigen), um ihnen anschließend Schritt für Schritt das System näher bringen zu können.
Je nach dem wie massiv der Eingriff ins System ist: Wieso erstellst du dir nicht ein eigenes ISO? Damit hättest du alles im Griff und könntest über dein eigenes PPA auch nachträglich alles auf dem Zielsystem machen, was du willst. Der Anwender müsste dann lediglich anstatt eines originalen ISO deines laden und installieren, was auch direkt weniger "Nacharbeit" erfordern würde, weil deine Programmauswahl direkt vorinstalliert ist.
Um aktuelle Versionen einiger Standardprogramme (etwa Gimp oder sowas) installieren zu lassen ist das doch nichts verwerfliches…
Verwerflich nicht, aber in 99% der Fälle unnötig, wenn du nicht gerade in einem sehr grafiklastigen Bereich unterwegs bist. Meistens wird Gimp ja nur rudimentär genutzt und das bietet die Version aus den Paketquellen ebenfalls. Und es ist weniger fehleranfällig, wenn sich der Schlüsselring mal ändert, o.ä.
Immer gerne her mit sowas... lasse mich immer gerne inspirieren 😉
D-BUS ist nen tolles "Spielzeug". Damit kann man wirklich sehr viele Informationen zusammentragen und auf Events reagieren, ohne mega Programmieraufwand.
Geht ja nur um die Einrichtung für Dualboot…schreiben lässt und den os-prober deaktiviert.
Mein letztes wirklich genutztes Windows war XP, 7 lief mal nebenbei mit (für SIMS4 - wurde gezwungen 😀), deswegen… wirklich keine Ahnung. Klingt aber machbar. Wird nicht vom Installer alles gleich so eingerichtet, dass man Win/Ubuntu parallel starten kann? Laut Wiki sollte das so sein… Interessant wäre, ob du den fastboot auch direkt bei der Installation deaktivieren kannst - oder ntfs-Partitionen direkt "sperrst", damit kein Datenaustausch stattfindet, oder der Anwender sein Windows überschreibt.
Dass scheint mir doch genau das zu sein, wonach ich eigentlich gesucht hatte. Besten Dank. 👍
Ja. Trotz des langen Textes dürfte das deine ursprüngliche Frage am besten beantworten… aber ich neige dazu mich den Gedankenspielen hinzugeben ☺
|
TK87
(Themenstarter)
Anmeldungsdatum: 8. Juli 2019
Beiträge: 216
Wohnort: Aachen
|
Je nach dem wie massiv der Eingriff ins System ist: Wieso erstellst du dir nicht ein eigenes ISO? Damit hättest du alles im Griff und könntest über dein eigenes PPA auch nachträglich alles auf dem Zielsystem machen, was du willst. Der Anwender müsste dann lediglich anstatt eines originalen ISO deines laden und installieren, was auch direkt weniger "Nacharbeit" erfordern würde, weil deine Programmauswahl direkt vorinstalliert ist.
Immer eins nach dem anderen... wie sagt man so schön: Man wächst mit seinen Aufgaben! Nach diesem Grundsatz versuche ich auch gerne mal, mir die Aufgaben bewusst ein bisschen komplizierter zu gestalten - man lernt dadurch einfach viel mehr, als wenn man immer direkt den leichtesten Weg wählt. 😛 Mein letztes wirklich genutztes Windows war XP, 7 lief mal nebenbei mit (für SIMS4 - wurde gezwungen 😀), deswegen… wirklich keine Ahnung.
Verstehe ich voll und ganz, Windows startet bei mir auch direkt in den BigPicture-Mode von Steam... weil für was anderes benutze ich das schlichtweg nicht; Als Gamer kommt man aber halt nicht um Windows herum. Wird nicht vom Installer alles gleich so eingerichtet, dass man Win/Ubuntu parallel starten kann?
So das man beide starten kann ja... jedoch taucht der Windowseintrag standardmäßig dann erst ganz unten in der liste auf (also z.B. auch noch unterhalb des Recoveryeintrags). Besser ist natürlich, wenn die beiden OS direkt untereinander stehen. Zudem wie gesagt der Timer, der sofern man 10 Sekunden lang keine Auswahl getroffen hat (i.d.R weil man etwa nachdem man den PC eingeschaltet hat noch schnell was anderes gemacht hat) das Default OS läd. Hat sich in der Praxis einfach als lästig erwiesen. Interessant wäre, ob du den fastboot auch direkt bei der Installation deaktivieren kannst
Ich denke nicht, dass das geht. Um das bewerkstelligen zu können, müsste man von Ubuntu aus in der Windowsregistry rumfummeln. Ist zwar prinzipiell möglich ( wenn auch nicht sonderlich empfehlenswert ❗ ), jedoch müsste man zu diesem Zweck die Windowspartition einhängen (und dafür müssete der fastboot eigentlich schon deaktiviert sein)... Besser ist aber ohnehin jedes System verwaltet sich selbst. Ist aber auch kein sonderliches Problem, jemandem zu sagen er soll mal in CMD den Befehl
powercfg /h off
ausführen, um den fastboot dauerhaft zu deaktivieren. - oder ntfs-Partitionen direkt "sperrst", damit kein Datenaustausch stattfindet
Nö, ich gehe inzwischen sogar oftmals hin und mache es genau umgekehrt: Wenn man in beiden OS nur je einen Benutzer hat, schreibe ich in der $HOME/.config/user-dirs.dirs die XDG-Ordner (Downloads, Dokumente, Musik usw.) so um, dass sie auf die entsprechenden Ordner des Windowsbenutzers zeigen. So braucht man die Daten nicht extra auf eine Datenpartition zu verschieben, damit man sie auch von Windows erreichen kann - und braucht auch nur eine ganz kleine Homepartition, da hier eigentlich nur noch die Benutzereinstellungen lagern. [...] Aber ich neige dazu mich den Gedankenspielen hinzugeben ☺
Das ist auch gut so 👍 . So kommt man schließlich auf Ideen, die man vorher vielleicht gar nicht in Erwägung gezogen hat - auch Yakuake war mir bisher noch nicht bekannt. Werd ich definitv noch gebrauchen können ^^
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
TK87 schrieb: Windows…
Okay. Dann bleib bei der Planung und danke für die Infos!
…auch Yakuake war mir bisher noch nicht bekannt…
Gibt es auch für GTK in Form von Guake, Tilda, Terminator…
|
TK87
(Themenstarter)
Anmeldungsdatum: 8. Juli 2019
Beiträge: 216
Wohnort: Aachen
|
Ist dir (oder jemandem anderem hier) eigentlich eine Möglichkeit bekannt, dem Installer zu sagen, dass er gparted nach einer Neuinstallation nicht deinstallieren soll?
Mir persönlich unbegreiflich, warum das nach einer Neuinstallation erst wieder nachinstalliert werden muss, obwohl es im Livesystem vorhanden ist 🙄.
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Der wird ja nicht deinstalliert, sondern ist auf der Live-CD dabei (im squashfs). Du könntest eventuell die Konfiguration von ubiquity (Der Ubuntu-Installer) beeinflussen. Da beschränkt sich mein Wissensstand auf -b - ohne Bootloader, also Grub ☺
|