Created:      2004-04-22  fm
Last updated: $Id$

Beschreibung der verschiedenen Scripte zur Paketerstellung
----------------------------------------------------------

SVN-Struktur
------------

/repo/eis/trunk
          |
          + _ADMIN/    - folder-list.txt
          |              create-list.sh
          |              check-files.sh
          |              mktarball.sh
          |              mkship.sh
          |
          + updates/    - update-1.0.5.tar.gz
          |      |        update-1.0.5.tar.gz.info
          |      |        ...
          |      |
          |      + update-1.0.6/
          |                  |
          |                  + _ADMIN/    - update-1.0.6-files.txt
          |        ...
          |
          + inet-mail-news/     - mail.tar.gz
                         |        mail.tar.gz.info
                         |        ...
                         |
                         + mail/
                         |   |
                         |   + _ADMIN/    - mail-files.txt
                         |                  mk_mail.sh (optional)
                         |
                         ...


folder-list.txt
---------------

    Diese Datei enthaelt eine Liste der Pakete und deren Ablageort in der
    Verzeichnisstruktur, ausgehend von /repo/eis/trunk. Sie soll in Zukunft dazu
    dienen automatisierte Systemfunktionen zur Verfuegung zu stellen, die
    z.B. die Dateiberechtigungen wieder herstellen oder die Deinstallation
    eines Paketes durchführen.

    Beispiel:

    #----------------------------------------------------------------------------
    # folder-list.txt - list all sub folders of eis structure
    #
    # Creation:     2004-05-10  jed
    # Last update:  \$Id\$
    #----------------------------------------------------------------------------

    #package:folder:package_folder

    mail:inet-mail-news
    update-1.0.5:updates
    update-1.0.6:updates


    2006-11-25

    !! Neu ist der 3. Parameter, daraus erschliesst sich in welchem $package_folder
    das $package abgelegt wird. So ist es moeglich aus einem $package_folder z.B.
    libtiff, ein package 'libtiff' und 'libtiff-dev' zu erzeugen.

    die syntax

    libtiff:lib:libtiff
    libtiff-dev:lib:libtiff


create-list.sh
--------------

    Dieses Script dient dem initialen Anlegen der fuer die Paketerstellung benoetigten
    Datei <package>-files.txt. In diese Datei werden alle Dateien aufgenommen, die
    sich im Unterverzeichnis <package> befinden. Ablageort fuer diese Datei ist das
    Verzeichnis <package>/_ADMIN/ .

    Damit binaries korrekt erkannt werden, ist es erforderlich das ganze Projekt zu importieren/adden und anschliessend einen checkout auszufuehren.

    Diese Datei muß dann mit einem Editor, z.B. vi, bearbeitet und die entsprechenden
    Dateirechte gesetzt werden. Folgende Dateikategorien (erste Spalte) wurden bisher
    definiert:

    # - Kommentar

    b - Binärdatei, bei Dateien diesen Typs wird der Inhalt nicht veraendert.
        wird automatisch erkannt und richtig gesetzt

    d - Dosdatei, dies soll zukuenftig ein 'unix2dos' ermöglichen.
        muss von Hand gesetzt werden

    f - Dateiordner bzw. -verzeichnis, dies soll die Angabe von
        Verzeichnissen ermoeglichen.
        wird automatisch richtiog gesetzt

    i - Datei wird ignoriert und nicht in das Paket aufgenommen.
        muss von Hand gesetzt werden

    u - Unixdatei, bei Dateien diesen Typs werden Tags wie z.B. '$Id$' aktualisert.
        wenn 'svn propset svn:keywords "Id" <Datei>' gesetzt ist  und dann einen commit durchfuehren.
        wird automatisch erkannt und richtig gesetzt

    Aufruf:

    create-list.sh
                -q, --quiet            no question and now messages showing
                -p, --setproject       name from project
                PACKAGE


    resultierende Datei:

    #----------------------------------------------------------------------------
    # mail-files.txt - list all files of package 'mail'
    #
    # Creation:     2005-05-01  jed
    # Last update:  \$Id\$
    #----------------------------------------------------------------------------
    u 0644 root root mail etc/aliases.std
    u 0644 root root mail etc/check.d/mail
    u 0644 root root mail etc/check.d/mail.basic
    u 0644 root root mail etc/check.d/mail.exp
    u 0644 root root mail etc/check.d/mail.ext
    u 0644 root root mail etc/default.d/mail


    2006-11-25

    !! Neu ist der Parameter  -p, --setproject   damit lassen sich fuer die
    Teilprojekte eines $packages die erforderlichen $package-files.txt erzeugen

    Example:  create-list.sh -p bin_file_tmp_0_17 perl
    Example:  create-list.sh  perl                 # for old package_folder syntax


    !!PACKAGE PACKAGE ist nicht mehr moeglich!!


check-files.txt
---------------

    Dieses Script prueft, ob die in der Datei <package>-files.txt aufgefuehrten Dateien
    im Unterverzeichnis <package> vorliegen bzw. ob alle im Unterverzeichnis <package>
    enthaltenen Dateien auch in der Datei <package>-files.txt enthalten sind.
    Sofern der Switch '-no-checktype' nicht verwendet wird, so wird zusaetzlich der
    gesetze Dateityp gegen das svn geprueft.


    Aufruf:

    check-files.sh
                -checktype|-no-checktype|-checktype-soft
                -q, --quiet            no question and now messages showing
                -p, --setproject       name from project
                PACKAGE                PACKAGE ... (only for old package_folder syntax)

    2006-11-25

    !! Neu ist der Parameter -setproject name, dies wird von mktarball.sh intern
    behandelt und bedarf keiner weiteren Handlung.

    Example:  check-files.sh -p bin_file_tmp_0_17 perl
    Example:  check-files.sh inet squid           # for old package_folder syntax


mktarball.sh
------------

    Dieses Script erstellt ein oder mehrere neue Paketarchiv <package>.tar.gz, basierend
    auf den in der Datei <package>-files.txt gelisteten Dateien. Vor der Erstellung der
    Archivdateien wird das Script check-files.sh aufgerufen um die Vollstaendigkeit der
    <package>-files.txt-Datei zu prüfen.
    Vor dem Erstellen der Archivdatei wird in die Paketbeschreibungsdatei
    var/install/packages/<packages> das aktuelle Datum, bzw. optional über die
    Optionen '-setversion' bzw. '-setstatus' eingesetzt und dann als Basis
    für die <package>.tar.gz.info-Datei verwendet. Außerdem wird eine eventuell
    existierende Scriptdatei 'mk_<package>.sh' im Verzeichnis <package>/_ADMIN/
    ausgefuehrt. Wird die Option '-all' verwendet, so werden alle in der Datei
    folder-list.txt aufgefuehrten Paketarchive neu erzeugt.

    Dateien mit dem Dateityp i (=ignore) werden nicht ins Paketarchiv übernommen.


    Aufruf:

    mktarball.sh -all
                 [-quiet]
                 [-checktype|-no-checktype|-checktype-soft]
                 [-setversion svn]
                 [-setdate svn|now|keep|date]
                 [-setstatus svn]

    oder

    mktarball.sh
                 [-quiet]
                 [-checktype|-no-checktype|-checktype-soft]
                 [-setversion svn|version_number]
                 [-setstatus status]
                 [-setdate svn|now|keep|date]
                 [-touch YYYYMMDDhhmm]
                 [-home]
                 [-hometest] ergibt einen version tag <version>1.3.4svn09-1220:30</version>
                 PACKAGE1 PACKAGE2 ...

    oder

    mktarball.sh -testteam PACKAGE

          Dieser Aufruf erzeugt eine svn-Version mit Status "testing"
          und kopiert das Paket nach /project/eis/www/tarballs_tteam/


    oder

    mktarball.sh -release version_number PACKAGE

          Dieser Aufruf erzeugt ein stable Release eines Pakets, commitet
          den aktuellen Stand ins svn, tagged diese Version und
          kopiert das Paket nach /project/eis/www/tarballs_tteam/.
          Das Paket kann dann über die Angabe der URL
          https://eisler.nettworks.org/t-team_eis/tarballs/PACKAGE
          auf Pack-Eis hochgeladen werden.


    Bei angabe einer version_number wird /var/install/packages/$package
    ins repo commitet.
    Ebenfalls wird, sofern vorhanden, /usr/share/doc/$packages/version
    aktualisiert und ins repo commitet.

    Dadurch entfaellt das manuelle aendern der Versionsnummer und gleichzeitig
    werden status und Datum mit aktualisiert.


    2006-11-25

    Fuer mktarball.sh sind keine weiteren Aenderungen hinzugekommen die einer
    Handlung beduerfen.

    2007-02-24

    -home

    bei Angabe des Parameter -home wird/werden die erzeugten $packages nach
    /home/$user/public_html/packages verschoben und eine eis-list.txt und ein
    index.txt erzeugt.

    2007-02-26

    -touch

    versteht nun den zusatz 'no'  '-touch no'  dann wird kein touch ausgefuehrt.



create-targz.sh
---------------

     Diese Script erzeugt aus den Angaben die in z.B. -/ADMIN/_do_$package
     gelistet sind, on the fly beim erzeugen des tarballs, ein internes
     xx.targz archiv und kopiert es an die angegebene Stelle.

     Dieses 'tar' archiv muss in der $package-files.txt eingetragen sein
     und es muss ein 'svn add' durchgefuehrt werden, da check-files.sh sonst
     auf die Nase faellt, mit der Pfad Angabe, an der es nach erstellen des
     tarballs zu liegen kommt.


     Die Syntax

     create-targz.sh
                basic for path is 'package-folder' given
                [-from  folder (bin_foo_2_3_6)]
                [-to    a/b/c  (eis/var/lib/bar)]
                [-tar   name   (foo)]
                [-quiet]
                PACKAGE
                YYYYMMDDhhmm   (touch -> optional)

     Die Ausfuehrung und das Ergebnis ist z.Z. im package 'subversion-tools'
     zusehen.



create-tag.sh
-------------

     Dieses Script erzeugt einen tag im SVN

     Die Syntax

     create-tag.sh

           -t, --svntag    xyz-1.2_3|1.2-3|what_ever.you-want (without space)
           -r, --revision  revisions number (optional) or when tag creation later
           -u, --update
           PACKAGE

     Example:  create-tag.sh -t testing-1.2.0 perl
     Example:  create-tag.sh -t testing-1.2.0 -u perl       # when old tag exists
     Example:  create-tag.sh -t testing-1.2.0 -r 7551 perl  # when taggen later

     Mit dem Parameter -r $revisons_number laesst sich auch spaeter noch eine Revison taggen


mkship.sh
---------

    Dieses Script erstellt aus den mittels mktarball.sh erstellten Packages,
    basierend auf den in der Datei <package>-files.txt gelisteten Dateien, die
    Struktur fuer den Server (eis-list.txt + $subdir.txt...).

    Aufruf:

    mkship.sh [-quiet] DESTINATION_DIRECTORY


list-tag.sh
-----------

    Dieses Skript ermöglich das bequeme Anzeigen vpn SVN-Tags:
    Folgende Optionen stehen zur Verfügung:

    Aufruf:

    list-tag.sh                           - Zeigt das Tag-Root-Verzeichnis an.
    list-tag.sh [--help]                  - Zeigt die Hilfe an.
    list-tag.sh [-path specific-tag-path] - Zeigt einen speziellen Tag-Pfad an.
    list-tag.sh PACKAGE                   - Zeigt alle Tags eines Paketes an.


make-doc.sh
-----------

    Diese Skript erstellt aus einer im SVN befindlichen Paketdokumentation eine
    PDF-,TXT- oder HTML-Datei. Die Dokumentation wird mittels eines Remote-Zugriffs,
    unter Verwendung des angegebenen Accounts (-user ...), auf eisler.eisfair.net
    erstellt und dann auf die lokale Festplatte, in das angegebene Verzeichnis
    (-dest ...) übertragen.
    Für eine eventuelle Fehleranalyse werden die bei der Generierung der Datei
    aufgelaufenen Meldugen in eine Logdatei 'package-name.log' abgelegt.

    Aufruf:

    make-doc.sh -dest destination-directory -user username -pdf|-txt|-html document-name


create-testteam-eislist
-----------------------

    Diese Script erstellt fuer das Test-Team die eis-list.txt und den Index.
    Alle Parameter sind im Script gesetzt

    Aufruf einfach in _ADMIN:

    entweder direkt mit dem 'mc' und Enter oder
    ./create-testteam-eislist

    2007-09-13
                   -q, --quiet            no question and no messages showing

    Example:  create-testteam-eislist -q
    Example:  create-testteam-eislist     give a short menu that you can
                                          select your action,

                                          "Create testteam eis-list"
                                          "Remove package from testteam eis-list"

    Bei Verwendung des Parameters -testteam mit mktarball.sh wird create-testteam-eislist
    direkt ausgefuehrt.

    Wenn extern gebaute Pakete dem Test-Team zur Verfuegung gestellt werden sollen, sind
    Archiv und info-Datei nach /project/eis/www/tarballs_tteam zu kopieren.
    Danach muss ./create-testteam-eislist aufgerufen werden.


create-home-eislist
-------------------

    2007-09-12

    Diese Script erstellt im ~home/packages eis-list.txt und den Index.
    Alle Parameter sind im Script gesetzt

    Aufruf einfach in _ADMIN:

    entweder direkt mit dem 'mc' und Enter oder
    ./create-home-eislist

                   -q, --quiet            no question and no messages showing

    Example:  create-home-eislist -q
    Example:  create-home-eislist         give a short menu that you can
                                          select your action,

                                          "Create home eis-list"
                                          "Create Pack-Eis upload Url"
                                          "Remove package from home eis-list"

    Bei verwendung der Parameter -home|-hometest mit mktarball.sh wird create-home-eislist
    direkt ausgefuehrt.


eislerlib
---------

    2007-09-12

    Hier sind einige Funktionen zusammengefasst die auch auf 'eisler' einen 'eisfair' Hauch
    verspueren lassen.

    Naehere Infos bitte direkt der lib entnehmen.

Anhang
------

    /var/install/bin/set-access-rights - Basierend auf der Datei <package>-files.txt wurde
    dem eisfair-base-Package das genannte Script hinzugefuegt, welches es einem Paket erlaubt
    die Dateizugriffsrechte automatisiert setzen zu koennen.
    Die Quelldatei muß im Verzeichnis /etc/filelist.d liegen um gefunden zu werden.
    Aufgerufen wird das Script wie folgt:

      set-access.sh [-quiet] [-dir file-list-dir] [-file file-to-change] PACKAGE1 PACKAGE2 ...

      -quiet  - Alle Bildschirmausgaben werden unterdrueckt
      -dir    - Ein von /etc/filelist.d abweichendes Verzeichnis kann angegeben werden.
      -file   - Es kann eine Datei angegeben werden dessen Rechte, basierend auf den
                Informationen in der Datei <package>-files.txt,  umgesetzt werden sollen.

      PACKAGE1 PACKAGE2 ...  - Namen des bzw. dir zu bearbeitenden Packages.

*ENDE*