Automatische Lazarus-installation: Installationsassistent

Für Installationen unter Linux-Systemen
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von corpsman »

Respekt Theo,

Eine Kleinigkeit habe ich noch in dein Skript eingebaut. Es Prüft nun ob die svn Protokoll Datei schon existiert und zeigt die vorherige SVN Revision an, das ist dann nützlich wenn der Build nicht geklappt hat, dann weis man welche alte Revisionsnummer man nehmen kann. Evtl. Kriege ich auch noch raus, wie man das Skript so macht, dass man die Revisionsnummer mit übergeben kann auf die man Aktualisieren will.

Code: Alles auswählen

#bin/sh
    echo "This script downloads the newest SVN revision and recompiles the IDE"
    # Type here the Path where your lazarus is located to.
    LAZPATH=$HOME"/lazarus/"
 
    STRIPCMD="/usr/bin/strip --strip-all "
    SVNPROTOFILE="svnprotocol.txt"
    BUILDPROTOFILE="buildprotocol.txt"
    FULL=false
    STRIP=true
    ALWAYSBUILD=false
 
    while getopts ":fnap:?" optname
      do
        case "$optname" in
          "f")
            FULL=true
            ;;
          "n")
            STRIP=false
            ;;
          "p")
            LAZPATH=$OPTARG
            ;;
          "a")
            ALWAYSBUILD=true
            ;;
          "?")
            echo -e "Usage:\n -p<Path>: Path to Lazarus\n -f      : Full make\n -n      : Do not strip\n -a      : Always build"
            exit
            ;;
          ":")
            echo "No argument value for option $OPTARG"
            exit
            ;;
          *)
          # Should not occur
            echo "Unknown error while processing options"
            exit
            ;;
        esac
      done
 
 
    # Switch to lazarus path
    echo "CD to ".$LAZPATH
    cd $LAZPATH
 
    # make the svn update and rewrite SVNPROTOFILE
 
    if [ -f $SVNPROTOFILE ]; then
      counter=$(wc -l < $SVNPROTOFILE)
      LASTLINE=`tail -1 $SVNPROTOFILE`
      len=`expr length "$LASTLINE"`
      echo "Update from old SVN-Revision : "  ${LASTLINE:len-7:7}
    else
      echo "Update from SVN"
    fi
 
    svn update > $SVNPROTOFILE
 
    counter=$(wc -l < $SVNPROTOFILE)
    LASTLINE=`tail -1 $SVNPROTOFILE`
    if [ $counter == 1 ]; then
     echo "Your version is up to date "$LASTLINE
     if [ $ALWAYSBUILD == false ]; then
       exit
     fi
    else
     echo $LASTLINE
    fi
 
    # clean old files and rewrite BUILDPROTOFILE
    echo "Clean everything"
    make clean > $BUILDPROTOFILE
 
    # Compile the tools
    echo "Compile the tools"
 
    if [ $FULL == true ]; then
     echo "Full"
     make lazbuild lcl ideintf components tools starter >> $BUILDPROTOFILE
     if [ $STRIP == true ]; then
      echo "Strip starter lazbuild tools"
      $STRIPCMD"$LAZPATH"startlazarus
      $STRIPCMD"$LAZPATH"lazbuild
      $STRIPCMD"$LAZPATH"tools/lazres
      $STRIPCMD"$LAZPATH"tools/lrstolfm
      $STRIPCMD"$LAZPATH"tools/svn2revisioninc
      $STRIPCMD"$LAZPATH"tools/updatepofiles
     fi
    else
     echo "Partial"
     make lazbuild lcl ideintf components >> $BUILDPROTOFILE
     if [ $STRIP == true ]; then
      echo "Strip lazbuild"
      $STRIPCMD"$LAZPATH"lazbuild
     fi
    fi
 
    # Compile the IDE with all packages ( Myprofile )
    echo "Compile the IDE"
    EXECCOMMAND="lazbuild --build-ide= --build-mode="
    "$LAZPATH"$EXECCOMMAND  >> $BUILDPROTOFILE
 
    if [ $STRIP == true ]; then
    echo "Strip lazarus"
     $STRIPCMD"$LAZPATH"lazarus
    fi
 
    echo "Finished."
--
Just try it

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von theo »

corpsman hat geschrieben:Eine Kleinigkeit habe ich noch in dein Skript eingebaut. Es Prüft nun ob die svn Protokoll Datei schon existiert und zeigt die vorherige SVN Revision an, das ist dann nützlich wenn der Build nicht geklappt hat, dann weis man welche alte Revisionsnummer man nehmen kann. Evtl. Kriege ich auch noch raus, wie man das Skript so macht, dass man die Revisionsnummer mit übergeben kann auf die man Aktualisieren will.


Ja schön. Die Zeile mit dem counter braucht's dort aber nicht, oder?
Das mit der Revisionsnummer wäre ganz praktisch.
Man könnte nat. noch vieles verbessern. z.B. dass es abbricht, wenn ein Teil nicht funktioniert hat.
Also v.a. wenn
make lazbuild lcl ...
nicht kompiliert, dass es dann nicht trotzdem weiterfährt.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von corpsman »

*g*

Besser geht immer,

Ich hab das Skript nun auch schon ein bischen erweitert nur scheint es den Parameter hinter "-s" nicht aus zu lesen :

Code: Alles auswählen

while getopts ":fnasp:?" optname
      do
        case "$optname" in
          "s")
            echo $OPTARG
            REVISIONID2=$OPTARG
            echo "Update to Revision : "$REVISIONID2             
            REVISIONID=" -r "
            ;;


REVISIONID2 ist immer leer

ich rufe das Skript auf mittels : "./update.sh -s 12345"
--
Just try it

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von theo »

while getopts ":fnas:p:?" optname

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von corpsman »

Cool, nu gehts danke :

Code: Alles auswählen

#bin/sh
    echo "This script downloads the newest SVN revision and recompiles the IDE"
    # Type here the Path where your lazarus is located to.
    LAZPATH=$HOME"/lazarus/"
 
    STRIPCMD="/usr/bin/strip --strip-all "
    SVNPROTOFILE="svnprotocol.txt"
    BUILDPROTOFILE="buildprotocol.txt"
    FULL=false
    STRIP=true
    ALWAYSBUILD=false
    REVISIONID=""
    REVISIONID2=""
    while getopts ":fnas:p:?" optname
      do
        case "$optname" in
          "f")
            FULL=true
            ;;
          "n")
            STRIP=false
            ;;
          "p")
            LAZPATH=$OPTARG
            ;;
          "a")
            ALWAYSBUILD=true
            ;;
          "s")           
            REVISIONID2=$OPTARG
            echo "Update to Revision : "$REVISIONID2             
            REVISIONID=" -r "
            ;;
          "?")
            echo -e "Usage:\n -s<Number>: Revision number to compile to\n -p<Path>  : Path to Lazarus\n -f        : Full make\n -n        : Do not strip\n -a        : Always build"
            exit
            ;;
          ":")
            echo "No argument value for option $OPTARG"
            exit
            ;;
          *)
          # Should not occur
            echo "Unknown error while processing options"
            exit
            ;;
        esac
      done
 
 
    # Switch to lazarus path
    echo "CD to ".$LAZPATH
    cd $LAZPATH
 
    # make the svn update and rewrite SVNPROTOFILE
 
    if [ -f $SVNPROTOFILE ]; then
      # mittels String Operatoren die Aktuelle Versionsnummer Extrahieren
      LASTLINE=`tail -1 $SVNPROTOFILE`     
      len=${#LASTLINE}
      echo "Update from old SVN-Revision : "  ${LASTLINE:len-7:7}
    else
      echo "Update from SVN"
    fi
 
    #echo "svn update"$REVISIONID$REVISIONID2" > "$SVNPROTOFILE
    svn update $REVISIONID$REVISIONID2 > $SVNPROTOFILE
 
    counter=$(wc -l < $SVNPROTOFILE)
    LASTLINE=`tail -1 $SVNPROTOFILE`
    if [ $counter == 1 ]; then
     echo "Your version is up to date "$LASTLINE
     if [ $ALWAYSBUILD == false ]; then
       exit
     fi
    else
     echo $LASTLINE
    fi
 
    # clean old files and rewrite BUILDPROTOFILE
    echo "Clean everything"
    make clean > $BUILDPROTOFILE
 
    # Compile the tools
    echo "Compile the tools"
 
    if [ $FULL == true ]; then
     echo "Full"
     make lazbuild lcl ideintf components tools starter >> $BUILDPROTOFILE
     if [ $STRIP == true ]; then
      echo "Strip starter lazbuild tools"
      $STRIPCMD"$LAZPATH"startlazarus
      $STRIPCMD"$LAZPATH"lazbuild
      $STRIPCMD"$LAZPATH"tools/lazres
      $STRIPCMD"$LAZPATH"tools/lrstolfm
      $STRIPCMD"$LAZPATH"tools/svn2revisioninc
      $STRIPCMD"$LAZPATH"tools/updatepofiles
     fi
    else
     echo "Partial"
     make lazbuild lcl ideintf components >> $BUILDPROTOFILE
     if [ $STRIP == true ]; then
      echo "Strip lazbuild"
      $STRIPCMD"$LAZPATH"lazbuild
     fi
    fi
 
    # Compile the IDE with all packages ( Myprofile )
    echo "Compile the IDE"
    EXECCOMMAND="lazbuild --build-ide= --build-mode="
    "$LAZPATH"$EXECCOMMAND  >> $BUILDPROTOFILE
 
    if [ $STRIP == true ]; then
    echo "Strip lazarus"
     $STRIPCMD"$LAZPATH"lazarus
    fi
 
    echo "Finished."
--
Just try it

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von theo »

Praktisch. :D

Hast du das mit dem Abbruch noch angeschaut?
Gibt make irgend einen Exitcode zurück, wenn's nicht geklappt hat?

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von mse »

theo hat geschrieben:Gibt make irgend einen Exitcode zurück, wenn's nicht geklappt hat?

make gibt 0 zurück falls es geklappt hat, anderenfalls ein undefinierter Wert <> null. Kann mit "if" abgefragt werden.

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von theo »

mse hat geschrieben:
theo hat geschrieben:Gibt make irgend einen Exitcode zurück, wenn's nicht geklappt hat?

make gibt 0 zurück falls es geklappt hat, anderenfalls ein undefinierter Wert <> null. Kann mit "if" abgefragt werden.


Danke mse. Schneit's z'Züri au? :wink:

Baust du das noch ein corpsman? Oder soll ich?

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von mse »

theo hat geschrieben:Danke mse. Schneit's z'Züri au? :wink:

Wir haben schon bald 10 cm auf 700m über Meer.

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von theo »

Bei uns ist der Winter auch zurück:
http://www.lakelucerne.ch/fileadmin/tww ... _00001.jpg

Ostern und ideales Wetter um FPC von SVN zu bauen. :wink:
viewtopic.php?f=19&t=5845

Fällt dir dazu was ein? Ist FPC im Moment in einem besonders instabilen Zustand?

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von mse »

theo hat geschrieben:Fällt dir dazu was ein? Ist FPC im Moment in einem besonders instabilen Zustand?

Die "cpstrnew" branch ist seit einiger Zeit gemerged. Wie du dich vielleicht erinnern kannst , habe ich mich mit Händen und Füssen dagegen gewehrt, es hat nichts genutzt. Darum lasse ich die Finger von 2.7.1, sollen die Leute das Schlamassel ausbaden, die diesen Delphi Mist unbedingt wollten.
Gelesen habe ich, es gebe überhaupt keine Probleme mit Lazarus und cpstrnew, also liegt das Problem vielleicht anderswo. Compiler Abstürze habe ich häufig ohne -B aber das ist bei deinen build Optionen vermutlich drin.

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von theo »

Mit Fehler-Exits drin.

Code: Alles auswählen

#bin/sh
    echo "This script downloads the newest SVN revision and recompiles the IDE"
    # Type here the Path where your lazarus is located to.
    LAZPATH=$HOME"/lazarus/"
 
    STRIPCMD="/usr/bin/strip --strip-all "
    SVNPROTOFILE="svnprotocol.txt"
    BUILDPROTOFILE="buildprotocol.txt"
    FULL=false
    STRIP=true
    ALWAYSBUILD=false
    REVISIONID=""
    REVISIONID2=""
 
    CheckError() {
    if [ ! $? == 0 ];
   then
    echo "Exiting"
    exit;
   fi
    }
 
    while getopts ":fnas:p:?" optname
      do
        case "$optname" in
          "f")
            FULL=true
            ;;
          "n")
            STRIP=false
            ;;
          "p")
            LAZPATH=$OPTARG
            ;;
          "a")
            ALWAYSBUILD=true
            ;;
          "s")           
            REVISIONID2=$OPTARG
            echo "Update to Revision : "$REVISIONID2             
            REVISIONID=" -r "
            ;;
          "?")
            echo -e "Usage:\n -s<Number>: Revision number to compile to\n -p<Path>  : Path to Lazarus\n -f        : Full make\n -n        : Do not strip\n -a        : Always build"
            exit
            ;;
          ":")
            echo "No argument value for option $OPTARG"
            exit
            ;;
          *)
          # Should not occur
            echo "Unknown error while processing options"
            exit
            ;;
        esac
      done
 
 
    # Switch to lazarus path
    echo "CD to ".$LAZPATH
    cd $LAZPATH
 
    # make the svn update and rewrite SVNPROTOFILE
 
    if [ -f $SVNPROTOFILE ]; then
      # mittels String Operatoren die Aktuelle Versionsnummer Extrahieren
      LASTLINE=`tail -1 $SVNPROTOFILE`     
      len=${#LASTLINE}
      echo "Update from old SVN-Revision : "  ${LASTLINE:len-7:7}
    else
      echo "Update from SVN"
    fi
 
    #echo "svn update"$REVISIONID$REVISIONID2" > "$SVNPROTOFILE
    svn update $REVISIONID$REVISIONID2 > $SVNPROTOFILE
    CheckError
 
    counter=$(wc -l < $SVNPROTOFILE)
    LASTLINE=`tail -1 $SVNPROTOFILE`
    if [ $counter == 1 ]; then
     echo "Your version is up to date "$LASTLINE
     if [ $ALWAYSBUILD == false ]; then
       exit
     fi
    else
     echo $LASTLINE
    fi
 
    # clean old files and rewrite BUILDPROTOFILE
    echo "Clean everything"
    make clean > $BUILDPROTOFILE
    CheckError
 
    # Compile the tools
    echo "Compile the tools"
 
    if [ $FULL == true ]; then
     echo "Full"
     make lazbuild lcl ideintf components tools starter >> $BUILDPROTOFILE
     CheckError
     if [ $STRIP == true ]; then
      echo "Strip starter lazbuild tools"
      $STRIPCMD"$LAZPATH"startlazarus
      $STRIPCMD"$LAZPATH"lazbuild
      $STRIPCMD"$LAZPATH"tools/lazres
      $STRIPCMD"$LAZPATH"tools/lrstolfm
      $STRIPCMD"$LAZPATH"tools/svn2revisioninc
      $STRIPCMD"$LAZPATH"tools/updatepofiles
     fi
    else
     echo "Partial"
     make lazbuild lcl ideintf components >> $BUILDPROTOFILE
     CheckError
     if [ $STRIP == true ]; then
      echo "Strip lazbuild"
      $STRIPCMD"$LAZPATH"lazbuild
     fi
    fi
 
    # Compile the IDE with all packages ( Myprofile )
    echo "Compile the IDE"
    EXECCOMMAND="lazbuild --build-ide= --build-mode="
    "$LAZPATH"$EXECCOMMAND  >> $BUILDPROTOFILE
    CheckError
    if [ $STRIP == true ]; then
    echo "Strip lazarus"
     $STRIPCMD"$LAZPATH"lazarus
    fi
 
    echo "Finished."
Zuletzt geändert von theo am So 8. Apr 2012, 12:36, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von theo »

mse hat geschrieben:Die "cpstrnew" branch ist seit einiger Zeit gemerged. Wie du dich vielleicht erinnern kannst , habe ich mich mit Händen und Füssen dagegen gewehrt, es hat nichts genutzt. Darum lasse ich die Finger von 2.7.1, sollen die Leute das Schlamassel ausbaden, die diesen Delphi Mist unbedingt wollten.


Ich stecke da nicht so drin, dass ich das wirklich beurteilen könnte, aber befürchtet, dass es eine "Verschlimmbesserung" werden könnte, habe ich immer.

mse hat geschrieben:Compiler Abstürze habe ich häufig ohne -B aber das ist bei deinen build Optionen vermutlich drin.


Habe eigentlich nichts besonderes geschraubt, praktisch nur make clean all.
fpc.cfg habe ich von /etc nach ~/.fpc.cfg kopiert und die Pfade angepasst.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von mse »

Soviel ich weiss kann auf "geklappt" auch einfach mit

Code: Alles auswählen

if daskomando mit parametern
then
fi

geprüft werden.

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von theo »

mse hat geschrieben:Soviel ich weiss kann auf "geklappt" auch einfach mit

Code: Alles auswählen

if daskomando mit parametern
then
fi

geprüft werden.


Habe ich versucht, hat aber nicht geklappt. (War vllt auch ein Syntax-Fehler von mir).
Ich finde es mit prüfen von $?==0 aber eigentlich übersichtlicher.

Edit: hat sich mit CheckError erledigt s. oben

Antworten