Kurzanleitungen/Howtos

Apps für UCS testen und veröffentlichen

17.05.2017

Das Univention App Provider Portal bietet für App-Entwickler die Möglichkeit, eigene Apps für den Univention Corporate Server (UCS) zu erstellen und zu verwalten. Alternativ dazu gibt es ein Skript, über das einige Funktionen der Webseite verfügbar sind.
Im folgenden Howto finden Sie Nützliches, das ich erst durch Ausprobieren oder durch die Unterstützung des Univention-Teams herausbekommen habe.

Verwaltung über die Weboberfläche

Um zu den eigenen Apps zu kommen, klickt man nicht auf "App Center", was zu einer Fehlermeldung führt, sondern auf "Software"

UCS

und anschließend auf "Apps".

UCS

Anlegen und Löschen von (neuen) App-Versionen

Beim Bewegen des Mauszeigers über das Symbol der eigenen App (im Beispiel "m23 Softwareverteilung") wird ein Icon eingeblendet, über das, nach einem Klick, Werkeuge zum Editieren, Anlegen und Löschen von (neuen) App-Versionen aufgelistet werden. Ein Klick auf das App-Symbol öffnet einen Dialog zum Editieren der App-Informationen.

UCS

Skripten ohne Paßwortabfrage

Das Skript, das zum Automatisieren von Aufgaben bei der App-Freigabe verwendet werden kann, fragt standardmäßig nach Benutzernamen und Paßwort, was einer wirklichen Automatisierung widerspricht. Glücklicherweise ist es möglich, die Zugangsdaten per Kommandozeilenparameter und Paßwortdatei zu übergeben.

Das folgende Wrapper-Skript reicht alle Parameter an das Originalskript weiter, welches als /usr/bin/univention-appcenter-control gespeichert wurde, und übernimmt gleichzeitig die Benutzerauthentifizierung:

#!/bin/bash

/usr/bin/univention-appcenter-control $@ --username <mein Benutzername> --pwdfile /etc/UAPP.pwd
"<mein Benutzername>" wird hierbei durch den eigenen Benutzernamen ersetzt. In der Datei /etc/UAPP.pwd steht alleinig das dazugehörige Paßwort.

Testen von unveröffentlichten Apps

Bevor man eine App veröffentlicht, sollte man diese natürlich testen. Dazu gibt es prinzipiell zwei Möglichkeiten:

  1. Testen mit einer lokalen Paketquelle
  2. Testen über das appcenter-test-Repository von Univention

Lokale Paketquelle

Hierzu legt man auf dem UCS eine neue Datei unter /etc/apt/sources.list.d/ mit der Dateiendung ".list" an, in die man die lokale Paketquelle einträgt. Dies geschieht nach folgendem Schema:

deb http://192.168.1.2 ./
Nach einem
apt-get update
sollten die eigenen Pakete per APT installierbar sein. Im UCS-App-Center taucht die eigene App dann allerdings nicht auf.

appcenter-test-Repository

Bei dieser Variante muß man zuerst die eigenen Pakete auf den Univention-Server (per Skript oder Univention App Provider Portal) hochladen und weitere Informationen angeben. Um auf dem eigenen UCS Apps angezeigt zu bekommen, die noch nicht freigegeben (unpublished) sind, muß man die Test-Paketquellen freischalten:

ucr set repository/app_center/server=appcenter-test.software-univention.de
ucr set update/secure_apt=no
ucr set appcenter/index/verify=no
univention-install univention-appcenter-dev
univention-app dev-use-test-appcenter
Anschließend sollte die eigene App im UCS-App-Center auftauchen und sich installieren lassen.

Probleme beim Testen über das App-Center

UCS
APP-Nummer ermitteln
UCS

Beim Installieren über das Test-App-Center werden Paketquellen dynamisch in die Dateien unter /etc/apt/sources.list.d eingetragen.
Die App ist also erst nach der Installation über das App-Center durch APT sichtbar. Sollte es zu einem Fehler kommen (z.B. aufgrund nicht verfügbarer unmaintained-Pakete (s.u.)), ist es zum Finden des Fehlers ggf. erforderlich, die nötigen Zeilen für die bereits hochgeladenen Testpakete zur sources.list hinzuzufügen.

Die benötigte "APP-Nummer" kann über das Test-App-Center, nach "Überfahren" des App-Icons und Auswahl von "Edit app version" aus dem Menü ermittelt werden (im Beispiel "m23_20170112112100"). Diese tragen Sie statt "<UCS-Version>" in der neuen Datei /etc/apt/sources.list.d/ucs-test.list folgendermaßen ein:

deb http://appcenter-test.software-univention.de/univention-repository/<UCS-Version>/maintained/component/ <APP-Nummer>/all/
deb http://appcenter-test.software-univention.de/univention-repository/<UCS-Version>/maintained/component/ <APP-Nummer>/amd64/

"<UCS-Version>" ersetzen Sie durch die Version Ihrer UCS-Installation (z.B. 4.2) und falls Sie eine andere Architektur als amd64 verwenden, tauschen Sie "amd64" durch die betreffende (z.B. i386).

Alternativ funcktioniert dies auch über (wobei Sie "m23" durch den Namen Ihrer Paketes und "17.1" durch die zu installierende App-Version ersetzen:

univention-app register m23=17.1 --component
apt-get install -s m23

App auf neuere UCS-Version anpassen

Nach dem Upload der neuen Pakete muß zusätzlich im Univention App Provider Portal die Versionsnummer unter "Software" ↠ "Advanded software settings" ↠ "Required UCS version for App" geändert werden.

Besonders wichtig ist auch, daß die App-Versionsnummer für die alte und neue UCS-Version identisch ist. Dies kann durch Kopieren der App von der alten zur neuen UCS-Version über das "Univention App Provider Portal" sichergestellt werden.

Ungewartete Pakete

Sollten sich die Pakete Ihrer App nicht installieren lassen, da diese Abhängigkeiten auf Pakete haben, die von Univention nicht offiziell gepflegt ("unmaintained") sind, so müssen Sie diese zu den Paketen Ihrer App hinzufügen und zusammen mit diesen hochladen.

Schalten Sie zuallererst die unmaintained-Paketquelle frei:

ucr set repository/online/unmaintained="yes"
Entfernen Sie anschließend bereits heruntergeladene Paketdateien, damit nur die Paketdateien im Cache liegen, die zusammen mit Ihren App-Paketen installiert werden:
apt-get clean
Installieren Sie nun Ihre App aus dem appcenter-test-Repository oder lokalen Paketquellen.

unmaintained-Pakete herunterladen

Anschließend können Sie die benötigten Debian-Pakete aus dem unmaintained-Zweig in allen Architekturen (amd64, i386 und all) mittels des Skriptes check-UCS-unmaintained herunterladen:
#!/bin/bash

# Source the architecture of the Debian packages to variable $DEB_HOST_ARCH_CPU
dpkg-architecture 2> /dev/null > /tmp/arch
. /tmp/arch
rm /tmp/arch

# Run thru the just downloaded packages and check, if there are any of unmaintained branch
ls /var/cache/apt/archives | while read pkg
do
  # Get information about the download source
  apt-cache policy $(echo $pkg | cut -d'_' -f1) > /tmp/chkunmain.pol

  # Check, if the package was downloaded from unmaintained tree  
  if [ $(grep unmaintained -c /tmp/chkunmain.pol) -gt 0 ]
  then
    # Get the base url of the unmaintained repo
    baseURL=$(grep unmaintained /tmp/chkunmain.pol | head -1 | sed -e 's/[^h]*//' -e 's#/ Packages#/#' -e 's# ##')

    # Try to get the packages for all architectures
    for debarch in amd64 i386 all
    do
      url=$(echo $baseURL/$pkg | sed "s/$DEB_HOST_ARCH_CPU/$debarch/g")
      echo $url
      wget $url
    done
  fi
done

# Remove duplicated packages with "all" architecture that were downloaded multiple times
rm *.deb.*

rm /tmp/chkunmain.pol
Achtung! Achtung! Die folgenden Anweisungen richten sich ausschließlich an fachkundige Personen. Bei jedem Schritt kann es zum kompletten Datenverlust kommen. Alle Angaben ohne Gewähr! Die Anweisungen, Skripte, etc. sind ausschließlich für Lernzwecke auf Lernsystemen und nicht für Produktivumgebungen bestimmt!