Manjaro Pakete/Konfigurationen speichern und bei Neuinstallation einfach installieren lassen

Hallo liebe Leute :wink:

Jetzt hab ich auch mal eine Frage


Gibt es bequeme Tools oder einfache Scripte, die eine Neuinstallation vereinfachen?

So was wie: Speichere alle Pakete in eine Textdatei und installiere es auf einem neuen System
 das vielleicht auch gleich alle Konfigurationen mit nimmt?

Timeshift oder rsync sind schön und gut, aber nehmen wir mal an, da will jemand eine Konfiguration genauso wie ich haben, dann sind rsync backups eher contra produktiv


Und ich wĂŒrde gerne vermeiden eine eigene ISO erstellen zu mĂŒssen


Ich weiß :roll_eyes:, das lĂ€sst sich mit ein paar Zeilen Bash Skript erledigen, aber gibt es was schon in der Richtung?

Hat jemand was schon was geschrieben?

Man muss das Rad ja nicht immer neu erfinden :slight_smile:

Bedanke mich fĂŒr jede Antwort :bowing_man:

Elektrisierende GrĂŒĂŸe,
Megavolt

Hallo Megavolt,
hier gibt es schon mal zwei AnsÀtze, die die Richtung vorgeben:
https://wiki.archlinux.de/title/Paketliste_archivieren
https://de.manjaro.org/index.php?topic=1227.0
der letztere Beitrag ist sehr alt, aber IMHO immer noch brauchbar. Aber ausprobiert habe ich keinen davon.

viele GrĂŒĂŸe gosia

1 Like

Danke @gosia :wink:

Also gibt es nur Schritt fĂŒr Schritt Anleitungen dafĂŒr
 Schade


Ich hab eher an sowas wie eine einfache GUI, zumindest mit zenity, kdialog oder yard, gehofft.

Dann ist das eine MarktlĂŒcke die man schliessen sollte.

Ich lass das hier noch offen, falls jemand so nett ist, falls man was geskriptet hat, hier zu posten :slight_smile:

Ansonsten werde ich dann mal einen GUI Prototypen erstellen in den nĂ€chsten Tagen. Dachte ich könnte mir das ersparen
 xD

1 Like

Hallo megavolt,

das wĂŒrde ich nun nicht so sagen. Dass mir nur das eingefallen ist, bedeutet ja noch lange nicht, daß in den Tiefen des Netzes nicht schon irgendwas vorhanden ist. Aber das muss ich dir ja eigentlich nicht sagen


bin schon ganz gespannt drauf.

viele GrĂŒĂŸe und viel Erfolg dabei gosia

@gosia @GaVenga

Es ist soweit
 der erster Prototyp
 xD

Im Moment wird es nur simuliert.

Was es macht:

  1. PrĂŒft auf AbhĂ€ngigkeiten fĂŒr das Skript
  2. Sichert die installierten Pakete in eine Textdatei.
  3. Simuliert eine Installation der Pakete aus der Textdatei.

Viel Spaß beim Testen :wink:

Falls jemand konkrete VorschlÀge hat, was verbessert werden sollte, gerne mal hier posten :wink:

#!/bin/bash -e
exec 2>/dev/null	# nervige Fehlermeldungen entfernen...

# /////////////////////////////////////////////////////////////// #
# Zenity Funktionen
# /////////////////////////////////////////////////////////////// #
warnung() {
zenity --warning --width="$warnung_breite" --height="$warnung_hoehe" \
--text="$warnung_text" --title="$warnung_titel" "$@"
}

info() {
zenity --info --width="$info_breite" --height="$info_hoehe" \
--text="$info_text" --ok-label="$info_ok" "$@"
}

checkliste() {
zenity --list --checklist --width="$checkliste_breite" --height="$checkliste_hoehe" \
--column="$checkliste_spalte1" --column="$checkliste_spalte2" --title="$checkliste_titel" \
--ok-label="$checkliste_ok" $checkliste_text "$@"
}

radio() {
zenity --list --radiolist --width="$radio_breite" --height="$radio_hoehe" --title="$radio_titel" \
--text="$radio_text" --column="$radio_spalte1" --column="$radio_spalte2" \
$(echo $radio_optionen) "$@"
}

fortschritt(){
zenity --progress --auto-close --auto-kill --width="$fortschritt_breite" --height="$fortschritt_hoehe" \
--text="$fortschritt_text" --title="$fortschritt_titel" --ok-label="$fortschritt_ok" "$@"
}

# /////////////////////////////////////////////////////////////// #
# ÜBERPRÜFE ABHÄNGIKEITEN FÜR DIESES SKTIPT
# /////////////////////////////////////////////////////////////// #
ueberpruefe_abhaengingkeiten(){

if [ -z $(which zenity) ]; then echo "Installiere zuerst zenity."; exit 1 ; fi

local fortschritt_hoehe="100"
local fortschritt_breite="400"
local fortschritt_titel="Bitte warten..."
local fortschritt_text="AbhĂ€ngigkeiten werden ĂŒberprĂŒft"
local fortschritt_ok="Weiter"

local pakete=("tr" "sed" "pamac" )
(
for x in ${pakete[@]}
	do
		echo "# ÜberprĂŒfe $x"; sleep 1.5
		echo "# $x : $(which $x)"; sleep 1.5
done
) | fortschritt --pulsate


}


# /////////////////////////////////////////////////////////////// #
# SICHERUNG
# /////////////////////////////////////////////////////////////// #
sicherung() {

	ueberpruefe_abhaengingkeiten

local warnung_titel="Auflisten der Pakete"
local warnung_text="Deine Pakete werden hier gleich aufgelistet."
local warnung_hoehe="80"
local warnung_breite="300"

	warnung

local checkliste_spalte1="Auswahl"
local checkliste_spalte2="Pakete"
local checkliste_titel="Paketliste"
local checkliste_ok="Sichern"
local checkliste_hoehe="400"
local checkliste_breite="400"
local checkliste_text=$(echo "$(pamac list --installed --quiet)" | sed -e "s/^/TRUE /g" | tr "\n" " ")

	checkliste > $HOME/paket-liste.txt

local info_breite="300"
local info_hoehe="80"
local info_text="Die Paketliste wurde in $HOME/paket-liste.txt gesichert."
local info_ok="HauptmenĂŒ"

	info

}
# /////////////////////////////////////////////////////////////// #
# INSTALLIEREN
# /////////////////////////////////////////////////////////////// #
installieren() {

	ueberpruefe_abhaengingkeiten

local warnung_titel="Pakete installieren"
local warnung_text="Deine Pakete werden hier gleich aufgelistet."
local warnung_hoehe="80"
local warnung_breite="300"

	warnung

local checkliste_spalte1="Auswahl"
local checkliste_spalte2="Pakete"
local checkliste_titel="Paketliste"
local checkliste_ok="Installieren"
local checkliste_hoehe="400"
local checkliste_breite="400"
local checkliste_text=$(cat $HOME/paket-liste.txt | tr "|" "\n"| sed -e "s/^/TRUE /g" | tr "\n" " ")

local fortschritt_hoehe="100"
local fortschritt_breite="400"
local fortschritt_titel="Bitte warten..."
local fortschritt_text="Pakete werden installiert"
local fortschritt_ok="HauptmenĂŒ"

(
local paketanzahl=$(cat $HOME/paket-liste.txt | tr "|" "\n" | wc -l)
	for x in $(echo "$(checkliste)" | tr "|" " " | sed -r "s/([a-z0-9-]+)/\"\\1\"/g")
		do
			echo "# Installiere $x"; sleep 0.7
			echo "# pamac install --noconfirm $x"; sleep 0.3
	done

) | fortschritt --pulsate

local info_breite="300"
local info_hoehe="80"
local info_text="Alle Pakete wurde erfolgreich installiert."
local info_ok="HauptmenĂŒ"

	info

}

#case $1 in
#	-i) installieren;;
#	-s) sicherung;;
#	*) echo "NIX"; exit1 ;;
#esac

# /////////////////////////////////////////////////////////////// #
# Menu
# /////////////////////////////////////////////////////////////// #
while [ 1 ]
	do
		radio_titel="HauptmenĂŒ"
		radio_text="WĂ€hle..."
		radio_spalte1="Auswahl"
		radio_spalte2="Aktion"
		radio_optionen="FALSE Sicherung FALSE Installieren FALSE Beenden"
		radio_hoehe="180"
		radio_breite="100"

			menu=$(radio)

		if [ $? -eq 1 ]; then break; fi

		info_breite="300"
		info_hoehe="80"
		info_text="Entschuldigung, was wolltest du nochmal?"
		info_ok="HauptmenĂŒ"

		case $menu in
			"Sicherung") sicherung ;;
			"Installieren") installieren ;;
			Beenden) break ;;
			*) info ;;
		esac
done

4 Likes

Hallo megavolt,
danke, sehr schön. Vor einem umfangreicheren Test habe ich aber noch zwei Fragen:

  1. ueberpruefe_abhaengingkeiten() ist ja bis auf die ÜberprĂŒfung von zenity noch relativ wirkungslos. Also wirkungslos in dem Sinne, daß es zwar abprĂŒft, ob tr, sed und pamac vorhanden sind, aber bei nichtvorhandensein wirft es keinen Fehler.
    Das ist wohl noch dem beta-Stadium geschuldet?
  2. das zweimalige Aufrufen von ueberpruefe_abhaengingkeiten(), einmal in sicherung() und nochmals in installieren() halte ich fĂŒr “zuviel”.
    Wenn schon, dann wĂŒrde ich es nur einmal in Menu aufrufen, vor der while [ 1 ] Endlosschleife, denn wenn da was fehlt kann man eigentlich gleich abbrechen.
    FĂŒr solche Endlosschleifen bevorzuge ich
    while true
    aber das ist dann wirklich persönliche Geschmacksfrage.

viele GrĂŒĂŸe gosia

Hallo @gosia,

danke fĂŒr die RĂŒckmeldung :wink:

  1. Um ehrlich zu sein, hab ich ueberpruefe_abhaengingkeiten() am Ende nur so dahin geschmiert. Muss da eine Bedingung mit einbauen, hast du schon Recht, sonst erfĂŒllt die Funktion ihren Zweck nicht :blush:

  2. Naja
 das ÜberprĂŒfen dauert ja nichtmal 1sec, wenn es wirklich lĂ€uft. Hier hab ich 2x 1.5sek Wartezeit mit eingebaut, damit man den Text auch lesen kann xD Normalerweise wĂŒrde man ja auf dem einen System sichern und auf einem anderen System wiederherstellen. Also bei 2 Systemen machen 2 ÜberprĂŒfungen schon Sinn


Tja, die Funktion ueberpruefe_abhaengingkeiten() ist ausbaufÀhig
 und wie gesagt, das hab ich innerhalb eines Abends geschrieben. Man sollte da keine Wunder erwarten :smiley: Ohne GUI wÀre das schon lÀngst fertig xD

@gosia @caho @kisun @Goldhahn

So hab das Skript um eine Dateiauswahl erweitert, AbhĂ€ngigkeiten werden jetzt bei jedem Aufruf des HauptmenĂŒs geprĂŒft, wenn Eine fehlt, ein Fehler angezeigt und nicht nur bei Auswahl von Sicherung oder Installieren (wie von @gosia vorgeschlagen :wink: )

Falls jemand konkrete VorschlÀge hat, was verbessert werden sollte, gerne mal hier posten :wink:

#!/bin/bash -x
#exec 2>/dev/null	# nervige Fehlermeldungen entfernen...
# /////////////////////////////////////////////////////////////// #
# In Planung
# /////////////////////////////////////////////////////////////// #
# > Paketliste vergleichen, damit nur nicht vorhandene Pakete installierten werden.
# > Methode suchen, wie die Pamac Routine ausgelesen und gefiltert werden kann.
# > Funktion um Konfigurationsdateien zu speichern und Pfade aus einer Datei zu lesen.
# > Bei Abbrechen nicht zum HauptmenĂŒ gehen, sondern Beenden.

# /////////////////////////////////////////////////////////////// #
# Zenity Funktionen
# /////////////////////////////////////////////////////////////// #
warnung() {
zenity --warning \
--width="$warnung_breite" \
--height="$warnung_hoehe" \
--text="$warnung_text" \
--title="$warnung_titel" \
"$@"
}

info() {
zenity --info \
--width="$info_breite" \
--height="$info_hoehe" \
--text="$info_text" \
--ok-label="$info_ok" \
"$@"
}

frage() {
zenity --question \
--width="$frage_breite" \
--height="$frage_hoehe" \
--title="$frage_titel" \
--text="$frage_text" \
--ok-label="$frage_ok" \
--cancel-label="$frage_abbrechen" \
"$@"
}

checkliste() {
zenity --list --checklist \
--width="$checkliste_breite" \
--height="$checkliste_hoehe" \
--column="$checkliste_spalte1" \
--column="$checkliste_spalte2" \
--title="$checkliste_titel" \
--ok-label="$checkliste_ok" \
$checkliste_text \
"$@"
}

radio() {
zenity --list --radiolist \
--width="$radio_breite" \
--height="$radio_hoehe" \
--title="$radio_titel" \
--text="$radio_text" \
--column="$radio_spalte1" \
--column="$radio_spalte2" \
$(echo $radio_optionen) \
"$@"
}

datei() {
if [[ "$datei_speichern" == "ja" ]]
	then
		local speichern="--save"
elif [[ "$datei_speichern" == "nein" ]]
	then
		local speichern=" "
fi

if [[ "$datei_mehrmals" == "ja" ]]
	then
		local mehrmals="--multiple"
elif [[ "$datei_mehrmals" == "nein" ]]
	then
		local mehrmals=" "
fi

if [[ "$datei_ueberschreiben" == "ja" ]]
	then
		local ueberschreiben="--confirm-overwrite"
elif [[ "$datei_ueberschreiben" == "nein" ]]
	then
		local ueberschreiben=" "
fi

if [[ "$datei_verzeichnis" == "ja" ]]
	then
		local verzeichnis="--directory"
elif [[ "$datei_verzeichnis" == "nein" ]]
	then
		local verzeichnis=" "
fi

zenity --file-selection \
$speichern \
$ueberschreiben \
$verzeichnis \
--title="$datei_titel" \
--filename="$datei_dateiname" \
"$@"
}

fortschritt(){
if [[ "$fortschritt_automatisch_schliessen" == "ja" ]]
	then
		local automatisch_schliessen="--auto-close"
elif [[ "$fortschritt_automatisch_schliessen" == "nein" ]]
	then
		local automatisch_schliessen=""
fi

if [[ "$fortschritt_automatisch_toeten" == "ja" ]]
	then
		local automatisch_toeten="--auto-kill"
elif [[ "$fortschritt_automatisch_toeten" == "nein" ]]
	then
		local automatisch_toeten=""
fi

zenity --progress \
$automatisch_schliessen \
$automatisch_toeten \
--width="$fortschritt_breite" \
--height="$fortschritt_hoehe" \
--text="$fortschritt_text" \
--title="$fortschritt_titel" \
--ok-label="$fortschritt_ok" \
"$@"
}



# /////////////////////////////////////////////////////////////// #
# SICHERUNG
# /////////////////////////////////////////////////////////////// #
sicherung() {

local checkliste_spalte1="Auswahl"
local checkliste_spalte2="Pakete"
local checkliste_titel="Paketliste"
local checkliste_ok="Sichern"
local checkliste_hoehe="400"
local checkliste_breite="400"
local checkliste_text=$(echo "$(pamac list --installed --quiet)" | sed -e "s/^/TRUE /g" | tr "\n" " ")

local datum=$(date +%Y-%m-%d-%H:%M:%S)
local codename=$(lsb_release -c | sed -r "s/.+:\s+//g")
local version=$(lsb_release -r | sed -r "s/.+:\s+//g")

local datei_dateiname="$datum-$version-$codename-paketliste.txt"
local datei_titel="Wo willst du deine Paketliste speichern?"
local datei_ueberschreiben="ja"
local datei_verzeichnis="nein"
local datei_mehrmals="nein"
local datei_speichern="ja"

local pakete=$(checkliste)
local dateipfad=$(datei)

	echo "$pakete" > $dateipfad

}
# /////////////////////////////////////////////////////////////// #
# INSTALLIEREN
# /////////////////////////////////////////////////////////////// #
installieren() {
local datei_titel="WĂ€hle deine Paketliste..."
local datei_ueberschreiben="nein"
local datei_verzeichnis="nein"
local datei_mehrmals="nein"
local datei_speichern="nein"

local dateipfad=$(datei)
local pakete=$(echo "$dateipfad")

local checkliste_spalte1="Auswahl"
local checkliste_spalte2="Pakete"
local checkliste_titel="Paketliste"
local checkliste_ok="Installieren"
local checkliste_hoehe="400"
local checkliste_breite="400"
local checkliste_text=$(cat $pakete | tr "|" "\n"| sed -e "s/^/TRUE /g" | tr "\n" " ")

local fortschritt_automatisch_schliessen="ja"
local fortschritt_automatisch_toeten="ja"
local fortschritt_hoehe="100"
local fortschritt_breite="400"
local fortschritt_titel="Bitte warten..."
local fortschritt_text="Pakete werden installiert"
local fortschritt_ok="HauptmenĂŒ"

(
	for x in $(checkliste | tr "|" " " | sed -r "s/([a-z0-9-]+)/\"\\1\"/g")
		do
			echo "# Installiere $x"; sleep 0.3
			echo "# pamac install --noconfirm $x"; sleep 0.2
	done

) | fortschritt --pulsate
}

#case $1 in
#	-i) installieren;;
#	-s) sicherung;;
#	*) echo "NIX"; exit1 ;;
#esac

# /////////////////////////////////////////////////////////////// #
# ÜBERPRÜFE ABHÄNGIKEITEN FÜR DIESES SKTIPT
# /////////////////////////////////////////////////////////////// #
ueberpruefe_abhaengingkeiten(){

if [ -z $(which zenity) ]; then echo "Installiere zuerst zenity." && break ; fi

local fortschritt_automatisch_schliessen="ja"
local fortschritt_automatisch_toeten="ja"
local fortschritt_hoehe="100"
local fortschritt_breite="400"
local fortschritt_titel="Bitte warten..."
local fortschritt_text="AbhĂ€ngigkeiten werden ĂŒberprĂŒft"
local fortschritt_ok="Weiter"

(
local programme=("tr" "sed" "pamac")
for x in ${programme[@]}
	do
			echo "# ÜberprĂŒfe $x"; sleep 0.3
			echo "# $x : $(which $x)"; sleep 0.2

		local info_breite="300"
		local info_hoehe="80"
		local info_text="Installiere zuerst <b>$x</b>"
		local info_ok="Beenden"

			if [ -z $(which $x) ]; then info && exit && break; fi

done
) | fortschritt --pulsate
}

# /////////////////////////////////////////////////////////////// #
# Menu
# /////////////////////////////////////////////////////////////// #
while [ 1 ]
	do
		ueberpruefe_abhaengingkeiten

		radio_titel="HauptmenĂŒ"
		radio_text="WĂ€hle..."
		radio_spalte1="Auswahl"
		radio_spalte2="Aktion"
		radio_optionen="FALSE Sicherung FALSE Installieren FALSE Beenden"
		radio_hoehe="180"
		radio_breite="100"

			menu=$(radio)

		if [ $? -eq 1 ]; then break; fi

		info_breite="300"
		info_hoehe="80"
		info_text="Entschuldigung, was wolltest du nochmal?"
		info_ok="HauptmenĂŒ"

		case $menu in
			"Sicherung") sicherung ;;
			"Installieren") installieren ;;
			"Beenden") break ;;
			*) info ;;
		esac
done

Hi, vielleicht ist es nicht ganz das was du suchst, ich hinterlasse das aber hier mal als Idee:

Da ich mehrere Rechner habe, betreue und auf allen möglichst immer die gleichen base packages und settings haben möchte, habe ich mir Pakete und Skripte erstellt, welche das fĂŒr mich ĂŒbernehmen.

Mache ich eine Änderung an meinem System, z.B. eine Paketinstallation, trage ich dieses Paket als AbhĂ€ngigkeit in mein setup package ein. Dann nur noch das neue package in meine Paketquelle hochladen, welche sich mit dem install Skript automatisch auf allen Rechnern hinzugefĂŒgt hat und alle bekommen bei dem nĂ€chsten Update automatisch die neuen Änderungen / Pakete.

Eine Neuinstallation ist damit auch recht einfach. Nach der frischen Manjaro Installation fĂŒhre ich mein install script aus, welches meine Paketquelle und mein Setup Paket installiert. Damit richtet sich das meiste auf System Ebene automatisch ein und es ist wie zuvor.
(installierte Pakete, Hotkeys, Änderungen in Konfigurationsdateien, 
 alles ist möglich :slight_smile: )

Hier findest du meinen code, vielleicht hilft es dir dabei, etwas fĂŒr deine Zwecke zu bauen:

2 Likes

Danke @Bleuzen 
 stimmt hast du mir ja mal erzÀhlt, dass du es so verwaltest. Eigentlich sehr schlau gemacht. Eine Neuinstallation und mit Meta-Paketen und einer eigenen Repo zu machen, die dann auch noch weiter aktualisiert werden kann. Da es nur Text-Dateien sind reicht eine Github Account aus.

Hab es mir jetzt mal grĂŒndlich angesehen und mir Gedanken gemacht. Man kann es so machen, wenn man nur auf Arch-basierten Systemen arbeitet, aber ich wĂŒrde es doch gerne ein wenig einfacher machen. Wenn ich mich nur auf die Paketnamen konzentriere und eine Distro-Erkennung einbaue, wĂŒrde es auch mit anderen Paket-Managern wie apt oder dnf laufen.

Auch wĂŒrde ich das lieber lokal sichern. Es soll nur eine “Datenbank-Datei” sein.

Grossartig. Ich habe das Script auf meinem Testrechner laufen lassen. Das lĂ€uft fehlerfrei durch und gefĂ€llt. Nun die Herkulesfrage. Ich möchte dieses Script auf Eigene Gefahr produktiv nutzen. Kannst Du mir die Zeilen hinzufĂŒgen/Ă€ndern, damit dieses Script auf dem neuen Rechner dann auch wirklich Daten auf die Platte schreibt. ?
DafĂŒr wĂ€re ich Dir sehr dankbar.

Haha, ich hab das “wird nur simuliert” irgenwie ganz ĂŒberlesen! :grinning:

Hab gestern mein System neu aufgesetzt und mir vorher ja so gedacht ich hab ja das coole Skript von @megavolt. Nach der Neuinstallaion hab ich dem Skript gespannt beim installieren zugesehen und mit der Zeit erst gemerkt das es nix installiert. :joy:

Naja zumindest hatte ich ne schöne Liste mit den Paketen die installiert waren (1944 StĂŒck) und musste die nur noch mit den Paketen vergleichen die nach der Neuinstallation schon installiert waren (1242 StĂŒck). Mit nem Editor macht das keinen Spaß. Und mit dem bash-scripting bin ich auch noch nicht so firm.

Daher hab ich hier mal fĂŒr den Fall ein php-Skript zusammen geschustert:

#!/usr/bin/php
<?php

$user = get_current_user();
    
$workingDir		= "/home/".$user."/";
$fileOldInstall = "2021-befor.txt";
$fileNewInstall = "2021-after.txt";
$intCountEqual	= 0;
$intCountNeeded	= 0;
$strNeededPkg	= "";
$date 			= date("Y-m-d-H:i:s");
$fileNeededPkg	= $date."-StillToInstall.txt";
    
$hOldInstall = fopen( $workingDir.$fileOldInstall, "r" );
$hNewInstall = fopen( $workingDir.$fileNewInstall, "r" );

$strOldInstall = fgets( $hOldInstall );
$strNewInstall = fgets( $hNewInstall );

fclose( $hOldInstall );
fclose( $hNewInstall );

$arrOldInstall = explode("|", $strOldInstall);

foreach ($arrOldInstall as $value) {

	if (str_contains( $strNewInstall, $value)) {

		$intCountEqual++;

    } else {

	$strNeededPkg = $strNeededPkg.$value."|";
	$intCountNeeded++;

    }	

}

$strNeededPkg = trim( $strNeededPkg, "\n|");

$hNeededPkg = fopen( $workingDir.$fileNeededPkg, "w");
fwrite($hNeededPkg, $strNeededPkg);
fclose($hNeededPkg);

echo "Already installed Packages: ".$intCountEqual."\n";
echo "Still needed Packages: ".$intCountNeeded."\n\n";
echo "Needed Packages are saved in this file:\n";
echo "--> ".$workingDir.$fileNeededPkg."\n\n";

?>

Vielleicht hilft es jemanden weiter. Es muss dann nur noch eine Sicherungsdatei mit @megavolts Skript von der neuen Installation gemacht werden und der Dateiname im Skript angepasst werden($file(Old/New)Install). Es arbeitet im home-Verzeichnis des ausfĂŒhrenden Benutzers und Speichert auch dort die Ausgabe.

Achso, die Ausgabedatei zeigt nur die Pakete die noch zur vorherigen Installation fehlen. Im selben Format wie @megavolts Sicherungsdatei.

P.S. Wer eine Liste mit ZeilenumbrĂŒchen braucht anstatt | als Trenner muss folgendes Ă€ndern:

$strNeededPkg = $strNeededPkg.$value."|";

in

$strNeededPkg = $strNeededPkg.$value."\n";

Sollte Zeile 34 sein in der if-else Schleife. :grin:

Hallo @ondara :smiley:

Schön, dass es dir gefÀllt. Aber im Moment bin ich leider schwer beschÀftigt (und auch nicht Zuhause). Ich habe hier und da an dem Script weitergearbeitet, wenn ich Zeit hatte, aber fertig ist es nicht.

War dabei eine libzenity zu schreiben, die das schreiben von zenity GUIs vereinfachen soll.

Ja hast Recht, ich war auf der Suche nach eine einfachen Methode zwei Listen zu vergleichen. Wenn das fertig ist, dann lÀsst sich der Rest der Installation auch einfach implementieren. Werde dann erneut ein Update machen.

@kisun Haha ich habe eher an diff gedacht wegen dem Vergleichen aber ein for loop sollte auch klappen :smiley: Man, hab da nicht dran gedacht
 Danke fĂŒr dein inspirierenden PHP-Skript :+1:

Jedenfalls @kisun und @ondara, wenn ich wieder daheim bin (was wahrscheinlich nĂ€chste Woche sein wird), dann werde ich das Skript vervollstĂ€ndigen, damit es zumindest die Basis-Funktion erfĂŒllt: Paketliste speichern und Paketliste installieren :smiley:

Und danke fĂŒr euer Interesse. Das motiviert mich jetzt doch, das mal fertig zu schreiben :grin:

Ja wie gesagt bei bash bin ich noch nicht so fit.

Aber ich hĂ€tte da noch eine Idee. Man könnte noch ein ‘chroot’ einbauen. Damit man nach der Neuinstallation und vor dem Neustart das Skript noch durchlaufen lĂ€sst und fehlendes installiert.

Somit wÀre dann nach dem Neustart schon alles erledigt. :grinning:

Möglich, aber das sollte aber in erste Linie ein grafisches Werkzeug sein. Wenn du was fĂŒr die Kommandozeile brauchst, dann schau dir ALIS. Ist zwar fĂŒr Archlinux geschrieben, aber sollte mit wenigen VerĂ€nderungen auch unter Manjaro funktionieren:

:wink:

1 Like

Ich hab den Thread hier nicht vergessen, aber wenn einen die Lust daran vergangen ist, dann fehlt einfach die Motivation weiter zu machen. Es ist auch nur ein Hobby-Projekt in meiner Freizeit.

Es gibt keine weiteren Aktualisierungen zu dem Skript, aber ich hab mich entschieden ein Repo zu erstellen.

Planung fĂŒrs erste:

  1. Script in Englisch ĂŒbersetzen
  2. Gettext fĂŒr Spracheausgabe implementieren.

Werde hier auch in Zukunft denke ich mal weiter Bestrebungen veröffentlichen, wenn Zeit und Lust da ist. Falls jemand mitarbeiten will, der kann sich ja melden. :wink:

2 Likes