staging.inyokaproject.org

[ ! -d $FALKON_SRC/.git ] && git clone https://invent.kde.org/network/falkon.git $FALKON_SRC

Status: Gelöst | Ubuntu-Version: Kubuntu 24.04 (Noble Numbat)
Antworten |

trollsportverein

Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 5232

Wenn das Verzeichnis noch nicht vorhanden ist, dann soll git clone ausgeführt werden.

Merkwürdigerweise funktioniert das bei invent.kde.org Git nicht, oder nicht immer, das da oben der Überschrift ist solch ein Fall bei mir.

Der ganze Sermon, den ich euch nicht vorenthalten möchte, ein Bash alias, der den Falkon Browser baut (das DEB-Fertigpaket ist bekannt, aber darum geht es nicht):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
alias falkonneu='INSTALLATIONSDISK=$HOME/Installationsdisk && \
                                KDEDIR=$INSTALLATIONSDISK/KDE && \
                                FALKON_BASE=$KDEDIR/Falkon && \
                                FALKON_SRC=$FALKON_BASE/falkon && \
                                [ ! -d $INSTALLATIONSDISK ] && mkdir -pv $INSTALLATIONSDISK && \
                                [ ! -d $KDEDIR ] && mkdir -pv $KDEDIR && \
                                [ ! -d $FALKON_BASE ] && mkdir -pv $FALKON_BASE && \
                                [ ! -d $FALKON_SRC/.git ] && git clone https://invent.kde.org/network/falkon.git $FALKON_SRC && \
                                printf "\n \033[45m\033[1;36m==> Falkon Sourcecode cloned. \033[0m\033[42m\033[1;36m  ==> ... \033[0m \n \n" || \
                                printf "\n \033[45m\033[1;36m==> Falkon Sourcecode found. \033[0m\033[42m\033[1;36m  ==> ... \033[0m \n \n"
                                printf "\n \033[45m\033[1;36m==> Update Falkon Sourcecode. \033[0m\033[42m\033[1;36m  ==> ... \033[0m \n \n" && \
                                git -C $FALKON_SRC checkout 4f953aa0aa47211fa3e7f26ef4427237c0a36da5 && echo "git pull done." || echo "No git pull." && \
                                printf "\n \033[45m\033[1;36m==> Config Falkon for build. \033[0m\033[42m\033[1;36m  ==> ... \033[0m \n \n" && \
                                [ -d $FALKON_SRC/build ] && yes | sudo rm -rf $FALKON_SRC/build && echo "Builddir cleaned." || echo "Bulddir was clean." && \
                                [ ! -d $FALKON_SRC/build ] && mkdir -pv $FALKON_SRC/build && \
                                sudo mount -v tmpfs $FALKON_SRC/build -t tmpfs -o mode=777 && \
                                cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=TRUE -S $FALKON_SRC -B $FALKON_SRC/build -G Ninja && \
                                printf "\n \033[45m\033[1;36m==> Compile Falkon. \033[0m\033[42m\033[1;36m  ==> ... \033[0m \n \n" && \
                                time ninja -j $(nproc --all) -C $FALKON_SRC/build && \
                                printf "\n \033[45m\033[1;36m==> Remove old Falkon files. \033[0m\033[42m\033[1;36m  ==> ... \033[0m \n \n" && \
                                [ -f $FALKON_BASE/install_manifest.txt ] && xargs sudo rm -fv < $FALKON_BASE/install_manifest.txt && \
                                echo "Old files cleaned." || echo "No install_manifest.txt found." && \
                                printf "\n \033[45m\033[1;36m==> Install Falkon. \033[0m\033[42m\033[1;36m  ==> ... \033[0m \n \n" && \
                                sudo porg -lp falkon "ninja -j $(nproc --all) -C $FALKON_SRC/build install" && \
                                cp -v $FALKON_SRC/build/install_manifest.txt $FALKON_BASE/install_manifest.txt && \
                                printf "\n \033[45m\033[1;36m==> Falkon successful install. \033[0m\033[42m\033[1;36m  ==> Done.\033[0m \n \n" && \
                                printf "\n \033[45m\033[1;36m==> Falkon deinstall: \033[0m\033[43m\033[1;36m sudo porg -rv falkon   <== \033[0m \n \n" || \
                                printf "\n \033[41m\033[1;36m==> Falkon build or install failed.\033[0m \n \n" ; \
                                cd $HOME ; \
                                sudo umount -fv $FALKON_SRC/build ; \
                                [ -d $FALKON_SRC/build ] && yes | sudo rm -rf $FALKON_SRC/build && echo "Builddir cleaned." || echo "Bulddir was clean." ; \
                                cd $HOME'

Das invent.kde.org Git scheint ein paar Gedenkmomente zu brauchen und kreiert ein leeres Verzeichnis, woraufhin dann via && der nächste Befehl aufgerufen wird und dann geht das schief. Mit Github klappt das Konstrukt der Abfrage, ob das Verzeichnis vorhanden ist, oder nicht, und dann im Bedarfsfall erfolgreiches git clonen sonst gut.

Merkwürdigerweise funktioniert aber das manuelle Git clonen im Terminal dann so (wenn das Verzeichnis $FALKON_SRC, also $HOME/Installationsdisk/KDE/Falkon/falkon leer ist):

1
git clone https://invent.kde.org/network/falkon.git $HOME/Installationsdisk/KDE/Falkon/falkon

Ist der Sourcecode erst einmal cloned, funktioniert natürlich auch der Bash alias. Aber genau das sollte der Bash alias auch können, wenn das Git zuvor noch nicht cloned war.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Wer so etwas als Alias definiert, sollte mit csh nicht unter 6 Monaten bestraft werden.

trollsportverein

(Themenstarter)
Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 5232

rklm schrieb:

Wer so etwas als Alias definiert, sollte mit csh nicht unter 6 Monaten bestraft werden.

Die Tennex C-Shell habe ich rund 10 Jahre benutzt und mir hat das gefallen. 😇 Ich meine die Tennex C-Shell war sogar etwas schneller, schließlich wollte damals™ alle Software, auch Kernel und World gebaut werden. Aber mit der Bash gefällt es mir jetzt auch. Bloß verstehe ich nicht, wie die Bash übergehen kann, dass das invent.kde.org Git Repository noch gar nicht geklont ist. Eigentlich müsste die Bash doch warten, bis git clone durchgelaufen ist, und erst dann den nächsten Befehl ausführen, der nach dem && kommt.

fleet_street

Top-Wikiautor
Avatar von fleet_street

Anmeldungsdatum:
30. August 2016

Beiträge: 2400

trollsportverein schrieb:

Merkwürdigerweise funktioniert das bei invent.kde.org Git nicht, oder nicht immer, das da oben der Überschrift ist solch ein Fall bei mir.

Eine sehr umfassende Beschreibung! 😉 Du supportest doch auch. Wäre dir das als Beschreibung genug? Wie ist die Ausgangsbedingung, wenn es funktioniert? Und wie sieht es zuvor aus, wenn es nicht funktioniert?

Dein alias ist für das Lesen eine Zumutung. (Vermutlich auch für dich, sonst hättest du den Fehler selbst gefunden.) Ich musste den Browser nach links aus dem Bildschirm schieben, rechts verbreitern, nur um deinen Text auf den Bildschirm zu bekommen. Klar, dass man da den Überblick verliert.

Außerdem stelle ich dabei fest, dass ich ein Freund von ausgeschriebenen if … then … elif … else … fi bin. Da ist die Logik klar ersichtlich. Bei deiner Schreibweise nicht.

Mal eine bescheidene Frage. Du hast da eine Struktur:

  • Verzeichnis

    • Unterverzeichnis

      • weiteres_Unterverzeichnis

        • noch_ein_Unterverzeichnis

Warum prüfst du die Existenz jedes einzelnen Verzeichnisses ab und legst es ggf. mit mkdir -p an. Das vorletzte Verzeichnis prüfen und damit ggf. alle anlegen würde doch reichen. Oder nicht?

Wenn das Verzeichnis noch nicht vorhanden ist, dann soll git clone ausgeführt werden.

Da könnte der springende Punkt sein. Was passiert, wenn eines deiner Verzeichnisse bereits existiert? Dann landest du nach meiner Denkweise nach if nicht im then, sondern else. Das wäre bei dir also nicht etwa das übernächste &&, sondern das nächste ||, hinter dem weitergemacht wird.

trollsportverein

(Themenstarter)
Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 5232

fleet_street schrieb:

trollsportverein schrieb:

Wenn das Verzeichnis noch nicht vorhanden ist, dann soll git clone ausgeführt werden.

Da könnte der springende Punkt sein. Was passiert, wenn eines deiner Verzeichnisse bereits existiert? Dann landest du nach meiner Denkweise nach if nicht im then, sondern else. Das wäre bei dir also nicht etwa das übernächste &&, sondern das nächste ||, hinter dem weitergemacht wird.

Keiner der mkdir Befehle macht das Verzeichnis $FALKON_SRC. Nur git clone macht das Verzeichnis $FALKON_SRC, was ja auch ganz fein wäre, wenn git clone dann auch den erwünschten Sourcecode hinein clonen würde. Denn das ist das merkwürdige daran, git clone macht ein leeres Verzeichnis, und die Bash bekommt offensichtlich signalisiert, dass git clone fertig sei, mit dem clonen.

Aber Du hast recht, ich sollte die Tests auf das Vorhandensein der Verzeichnisse abfangen, wenn sie schon existieren, oder einfach mit einem ";" überspringen lassen.

fleet_street

Top-Wikiautor
Avatar von fleet_street

Anmeldungsdatum:
30. August 2016

Beiträge: 2400

Ja, habe schlecht zitiert.

Du hast noch nicht verstanden, worauf ich hinaus möchte. Ich glaube deine Absicht in dem Code zu erkennen. Aber das was der Code bedeutet ist m. E. dies:

if [ ! -d $INSTALLATIONSDISK ] 
  then mkdir -pv $INSTALLATIONSDISK  
    if
      …
      if
        …
  else
    echo "No git pull." 
    …

Strukturiert schreiben hilft. 😉

trollsportverein

(Themenstarter)
Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 5232

fleet_street schrieb:

Du hast noch nicht verstanden, worauf ich hinaus möchte.

Doch, doch. Ich habs verstanden und bin nun auch nach einem Mittagsschläfchen drauf gekommen, was $FALKON_SRC erstellt, obwohl git clone den Sourcecode nicht holt. Es war der Mountpoint, der für einhängen vom TMPFS nötig ist, der wird vom "mkdir -pv $FALKON_SRC/build" gemacht, macht aber auch das $FALKON_SRC Verzeichnis gleich mit, obwohl noch kein Sourcecode drin ist.

So tut es jetzt wie es soll. 😎

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
alias falkonneu='INSTALLATIONSDISK=$HOME/Installationsdisk && \
                                KDEDIR=$INSTALLATIONSDISK/KDE && \
                                FALKON_BASE=$KDEDIR/Falkon && \
                                FALKON_SRC=$FALKON_BASE/falkon && \
                                [ ! -d $INSTALLATIONSDISK ] && mkdir -pv $INSTALLATIONSDISK || echo "$INSTALLATIONSDISK exists" && \
                                [ ! -d $KDEDIR ] && mkdir -pv $KDEDIR || echo "$KDEDIR exists" && \
                                [ ! -d $FALKON_BASE ] && mkdir -pv $FALKON_BASE || echo "$FALKON_BASE exists" && \
                                [ ! -d $FALKON_SRC/.git ] && git clone https://invent.kde.org/network/falkon.git $FALKON_SRC && \
                                printf "\n \033[45m\033[1;36m==> Falkon Sourcecode cloned. \033[0m\033[42m\033[1;36m  ==> ... \033[0m \n \n" || \
                                printf "\n \033[45m\033[1;36m==> Falkon Sourcecode found. \033[0m\033[42m\033[1;36m  ==> ... \033[0m \n \n" && \
                                printf "\n \033[45m\033[1;36m==> Update Falkon Sourcecode. \033[0m\033[42m\033[1;36m  ==> ... \033[0m \n \n" && \
                                git -C $FALKON_SRC checkout 4f953aa0aa47211fa3e7f26ef4427237c0a36da5 && echo "git pull done." || echo "No git pull." && \
                                printf "\n \033[45m\033[1;36m==> Config Falkon for build. \033[0m\033[42m\033[1;36m  ==> ... \033[0m \n \n" && \
                                [ -d $FALKON_SRC/build ] && yes | sudo rm -rf $FALKON_SRC/build && echo "Builddir cleaned." || echo "Bulddir was clean." && \
                                [ ! -d $FALKON_SRC/build ] && mkdir -pv $FALKON_SRC/build && \
                                sudo mount -v tmpfs $FALKON_SRC/build -t tmpfs -o mode=777 && \
                                cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=TRUE -S $FALKON_SRC -B $FALKON_SRC/build -G Ninja && \
                                printf "\n \033[45m\033[1;36m==> Compile Falkon. \033[0m\033[42m\033[1;36m  ==> ... \033[0m \n \n" && \
                                time ninja -j $(nproc --all) -C $FALKON_SRC/build && \
                                printf "\n \033[45m\033[1;36m==> Remove old Falkon files. \033[0m\033[42m\033[1;36m  ==> ... \033[0m \n \n" && \
                                [ -f $FALKON_BASE/install_manifest.txt ] && xargs sudo rm -fv < $FALKON_BASE/install_manifest.txt && \
                                echo "Old files cleaned." || echo "No install_manifest.txt found." && \
                                printf "\n \033[45m\033[1;36m==> Install Falkon. \033[0m\033[42m\033[1;36m  ==> ... \033[0m \n \n" && \
                                sudo porg -lp falkon "ninja -j $(nproc --all) -C $FALKON_SRC/build install" && \
                                cp -v $FALKON_SRC/build/install_manifest.txt $FALKON_BASE/install_manifest.txt && \
                                printf "\n \033[45m\033[1;36m==> Falkon successful install. \033[0m\033[42m\033[1;36m  ==> Done.\033[0m \n \n" && \
                                printf "\n \033[45m\033[1;36m==> Falkon deinstall: \033[0m\033[43m\033[1;36m sudo porg -rv falkon   <== \033[0m \n \n" || \
                                printf "\n \033[41m\033[1;36m==> Falkon build or install failed.\033[0m \n \n" ; \
                                cd $HOME ; \
                                sudo umount -fv $FALKON_SRC/build ; \
                                [ -d $FALKON_SRC/build ] && yes | sudo rm -rf $FALKON_SRC/build && echo "Builddir cleaned." || echo "Bulddir was clean." ; \
                                cd $HOME'

Dankeschön für den Denkanstoß.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Und es ist immer noch ungut, das mit einem Alias zu machen. Nimm wenigstens eine Shell-Funktion oder gleich ein Skript. Im letzeren Fall kannst Du vermutlich die Kaskade aus && mit set -e abdecken.

trollsportverein

(Themenstarter)
Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 5232

Es ist ja bloß als Hilfe für meine Bequemlichhkeit gedacht. Schöner wäre es natürlich. das so zu strukturieren, wie etwa die Ports-Kollektion von FreeBSD. Aber so viel Aufwand will ich dann doch nicht betreiben. Ich habe ja nicht wirklich vor, noch eine zusätzliche Linux-Distribution zu den bereits unzähligen Distributionen in die Welt zu setzen. Ich schätze mal, die Pinguinfamilie ist auch so schon bereits längst groß genug.

Antworten |