Server Installation/trac: Unterschied zwischen den Versionen

Aus Opennet
Wechseln zu: Navigation, Suche
(Buildumgebung neu initialisieren)
 
Zeile 220: Zeile 220:
  
 
=== Buildumgebung neu initialisieren ===
 
=== Buildumgebung neu initialisieren ===
Es kann bei größeren Commits vorkommen, dass das Bauen der Firmware nach einem "git pull" Fehler hervorbringt. Typischerweise passiert das, wenn eines der Git Submodule aktualisiert wurde (z.B. OpenWRT). An dieser Stelle muss ein komplett neuer Build angestoßen werden. Mit trac-bitten muss folgendes durchgeführt werden:
+
Es kann bei größeren Commits vorkommen, dass das Bauen der Firmware nach einem "git pull" Fehler hervorbringt. Typischerweise passiert das, wenn eines der Git Submodule aktualisiert wurde (z.B. OpenWrt). An dieser Stelle muss ein komplett neuer Build angestoßen werden. Mit trac-bitten muss folgendes durchgeführt werden:
 
* build clean - dafür nur "on_firmware.ar71xx-clean" auswählen und warten bis slave Recipe ausgeführt hat. Die Option "on_firmware.ar71xx-clean" ist nur zugänglich, wenn der Nutzer in der trac-admin Gruppe ist. Dann gibt es auf der Trac-Webseite einen Menüpunkt "Admin". Auf der nächsten Seite "Configurations" auswählen und nun ist auch "on_firmware.ar71xx-clean" auswählbar.
 
* build clean - dafür nur "on_firmware.ar71xx-clean" auswählen und warten bis slave Recipe ausgeführt hat. Die Option "on_firmware.ar71xx-clean" ist nur zugänglich, wenn der Nutzer in der trac-admin Gruppe ist. Dann gibt es auf der Trac-Webseite einen Menüpunkt "Admin". Auf der nächsten Seite "Configurations" auswählen und nun ist auch "on_firmware.ar71xx-clean" auswählbar.
 
* den bestehenden, bisher fehlerhaften Build, invalidieren (Tab "Build Status" -> dort auf den Build klicken -> "Invalidate build" klicken). Und zusätzlich die Auswahl der Recipes wieder auf Ausgangslage zurücksetzen, sodass "clean" nicht aktiviert ist.
 
* den bestehenden, bisher fehlerhaften Build, invalidieren (Tab "Build Status" -> dort auf den Build klicken -> "Invalidate build" klicken). Und zusätzlich die Auswahl der Recipes wieder auf Ausgangslage zurücksetzen, sodass "clean" nicht aktiviert ist.

Aktuelle Version vom 7. Januar 2020, 07:04 Uhr

Software zum Betrieb von Opennet DEV trac Umgebung (Hilfsmittel für Entwickler).

Inhaltsverzeichnis

[Bearbeiten] Installation

  • Installation trac (incl. subversion)
  • Installation trac-git (git Plugin)
  • Installation trac-bitten trac-bitten-slave (Continuous Integration)
  • Installation trac-announcer (Benachrichtigungssystem)
  • Installation trac-xmlrpc (Externe Schnittstelle)
  • Installation libapache2-mod-wsgi (Apache Modul)
  • Vorbereitung Verzeichnisse: mkdir /var/www/trac

[Bearbeiten] Konfiguration

  • Anlegen einer neuen Projektumgebung:
trac-admin /var/www/trac/ initenv
 Project name [My Project]> Opennet Development
 Database connection string [sqlite:db/trac.db]>
trac-admin /var/www/trac/ deploy /tmp/trac
mv /tmp/trac/* /var/www/trac/
chown -R www-data:www-data /var/www/trac/
  • Konfiguration der Projektumgebung in /var/www/trac/conf/trac.ini
[components]
#webadmin.* = enabled
#tracext.git.* = enabled
bitten.* = enabled
announcer.* = enabled
#tracrpc.* = enabled 
[notification]
always_notify_owner = false
always_notify_reporter = false
always_notify_updater = false
email_sender = SendmailEmailSender
sendmail_path = /usr/sbin/sendmail
smtp_enabled = true
smtp_from = dev@opennet-initiative.de 
smtp_from_name = Opennet Development
smtp_replyto = admin@opennet-initiative.de
[project]
descr = Opennet Development
footer = <a href="https://www.opennet-iniative.de/">Opennet Initiative e.V.</a>
icon = site/favicon.ico
url = https://dev.opennet-initiative.de
[ticket]
default_component = on_test
default_type = task
[header_logo]
alt = Opennet Development
link = /
src = site/Opennet_logo_quer.gif
[timeline]
ticket_show_details = true
[trac]
base_url = https://dev.opennet-initiative.de/
[wiki]
ignore_missing_pages = true
[announcer]
email_enabled = true
use_threaded_delivery = true
always_notify_owner = true
always_notify_reporter = true
always_notify_updater = true
always_notify_cc = true
always_notify_component_owner = true
email_from = dev@opennet-initiative.de
email_from_name = Opennet Development
email_to = dev
email_replyto =
email_address_resolvers = SpecifiedEmailResolver, SessionEmailResolver
email_subject_prefix = Opennet DEV-
[git]
cached_repository = true
persistent_cache = true
  • Admin Nutzer für Projektumgebung:
trac-admin /var/www/trac/
 > permission add <adminname>.client.on TRAC_ADMIN
 > exit
  • Einbindung in Apache Webserver:
# robots
Alias /robots.txt /var/www/htdocs/dev.opennet-initiative.de/robots.txt
# trac
WSGIScriptAlias /trac /var/www/trac/cgi-bin/trac.wsgi
Alias /trac/chrome/ /var/www/trac/htdocs/
<Directory /var/www/trac/cgi-bin/trac.wsgi>
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all
</Directory>
  • Login in Apache Webserver (HTTP als HTTPS-Redirect)
Redirect permanent /login https://dev.opennet-initiative.de/login
  • Login in Apache Webserver (HTTPS mit Client-Zertifikat)
<Location "/login">
    # client cert auth
    SSLVerifyClient optional
    SSLVerifyDepth 3
    # forward auth to cgi
    SSLUserName SSL_CLIENT_S_DN_CN
    # allow specific cert CN
    #check disabled, rights granted inside trac - mathias mahnke 2014/04/26
    #SSLRequire %{SSL_CLIENT_S_DN_CN} in {"<adminname1>.client.on","<adminname2>.client.on"}
    # client cert error handling
    RewriteEngine on
    RewriteCond %{SSL:SSL_CLIENT_VERIFY} !=SUCCESS
    RewriteRule .? - [F]
    ErrorDocument 403 "You need a certificate issued by Opennet Client Sub-CA to access this site."
</Location>
  • Anlegen eines Git Repositories:
mkdir /var/git/repositories/<on_projectname>
cd /var/git/repositories/<on_projectname>
git --bare init
git update-server-info
cd hooks 
mv post-update.sample post-update
  • nun via Trac Admin Webinterface in Projektumgebung einbinden sowie:
trac-admin /var/www/trac/ changeset added "<on_projectname>"
echo "exec trac-admin /var/www/trac/ changeset added \"<on_projectname>\"" >> /var/git/repositories/<on_projectname>/hooks/post-update
  • sonstige Trac Nacharbeiten:
    • Berechtigungen TICKET_CREATE u. TICKET_APPEND für Anonymous erlauben
    • Berechtigungen TICKET_EDIT_COMMENT u. TICKET_MODIFY für Ticket-Verwalter erlauben
    • Berechtigungen BUILD_ADMIN, MILESTONE_ADMIN, PERMISSION_ADMIN, REPORT_ADMIN, TICKET_ADMIN für weitere Administratoren setzen
    • Site Logo setzen, Wiki Startseite bearbeiten
  • Einbinden von Bitten u. Trac-Announcer, Projektumgebung aktualisieren:
trac-admin /var/www/trac/ upgrade
trac-admin /var/www/trac wiki upgrade
trac-admin /var/www/trac/ deploy /tmp/trac
cp -R /tmp/trac/* /var/www/trac/
chown -R www-data:www-data /var/www/trac/
ln -s /usr/share/javascript/flot/jquery.flot.js /var/www/trac/htdocs/bitten/
ln -s /usr/share/javascript/excanvas/excanvas.js /var/www/trac/htdocs/bitten/
  • Einbindung von Bitten, Repository Alias "(default") setzen sowie Rechte BUILD_ADMIN an Nutzer und BUILD_VIEW an Anonymous nach Bedarf vergeben
  • trac-bitten-slave als Deamon (auf separatem Build Server):
mkdir /home/trac-bitten-slave
useradd --home-dir /home/trac-bitten-slave --comment "bitten service user" --system --shell /bin/false trac-bitten-slave
chown -R trac-bitten-slave: /home/trac-bitten-slave
cp /usr/share/doc/trac-bitten-slave/examples/trac-bitten-slave.default /etc/default/trac-bitten-slave
cp /usr/share/doc/trac-bitten-slave/examples/trac-bitten-slave.init /etc/init.d/trac-bitten-slave
chmod +x /etc/init.d/trac-bitten-slave
cat >>/etc/default/trac-bitten-slave <<-EOF
	DAEMON_ARGS="--work-dir=/home/trac-bitten-slave/build --build-dir=/home/trac-bitten-slave/build --keep-files --log=/home/trac-bitten-slave/log/bitten-slave.log"
	URLS="https://dev.opennet-initiative.de/builds"
EOF
update-rc.d trac-bitten-slave defaults

[Bearbeiten] Betrieb

[Bearbeiten] Allgemenes

  • Nutzer anlegen: Anmeldung erfolgt über Opennet CA Zertifikate der Client Sub-CA. Rechtevergabe per trac-admin.
  • Repository anlegen: Git anlegen siehe Server Installation/gitolite, Einbindung per Trac Webadmin GUI sowie Veröffentlichung via Apache Config vornehmen.
  • Bitten-Slave ausführen: bitten-slave https://dev.opennet-initiative.de/builds -vv --work-dir=. --build-dir=. --keep-files
  • Die Build-Recipes können im trac über den Tab "Admin" - "Build, Configurations" ausgewählt werden. Um den Punkt "Build, Configurations" zu sehen, muss man entsprechende Admin-Rechte im trac haben/bekommen.

Build-Recipe "on_firmware.ar71xx" for continuous builds:

<build description="Build system"
 xmlns:sh="http://bitten.edgewall.org/tools/sh"
 xmlns:c="http://bitten.edgewall.org/tools/c"
>
<step id="Checkout">
 <sh:exec file="git" dir="on_firmware" args="pull" />
</step>
<step id="Init">
 <c:make target="init" file="on_firmware/Makefile" directory="on_firmware" args="" />
</step>
<step id="Make">
 <c:make target="ar71xx" file="on_firmware/Makefile" directory="on_firmware" args="V=s" />
</step>
</build>

Build-Recipe "on_firmware.ar71xx-clean"

<build description="Build system"
 xmlns:sh="http://bitten.edgewall.org/tools/sh"
 xmlns:c="http://bitten.edgewall.org/tools/c"
>
<step id="Clean">
 <sh:exec file="rm" args="-rf on_firmware" />
</step>
<step id="Checkout">
 <sh:exec file="git" args="clone https://dev.opennet-initiative.de/git/on_firmware" />
</step>
<step id="Init">
 <c:make target="init" file="on_firmware/Makefile" directory="on_firmware" args="" />
</step>
<step id="Make-ar71xx">
 <c:make target="ar71xx" file="on_firmware/Makefile" directory="on_firmware" args="V=s" />
</step>
</build>

Logrotate trac-bitten-slave:

/home/trac-bitten-slave/log/*.log {
  rotate 10
  weekly
  compress
  missingok
  notifempty
}

[Bearbeiten] Build erneut auslösen

  • beim Experimentieren mit einer Build-Konfiguration ist es manchmal sinnvoll, einen Build erneut durchzuführen
  • das pushen eines neuen Commits zum Triggern des Auto-Builders ist mit einiger Verzögerung verbunden
  • verzögerungsfreie Alternative: den Build anklicken und Invalidate Build zu wählen
  • kurz darauf wird der Build-Vorgang auf dem Slave erneut ausgeführt

[Bearbeiten] Buildumgebung neu initialisieren

Es kann bei größeren Commits vorkommen, dass das Bauen der Firmware nach einem "git pull" Fehler hervorbringt. Typischerweise passiert das, wenn eines der Git Submodule aktualisiert wurde (z.B. OpenWrt). An dieser Stelle muss ein komplett neuer Build angestoßen werden. Mit trac-bitten muss folgendes durchgeführt werden:

  • build clean - dafür nur "on_firmware.ar71xx-clean" auswählen und warten bis slave Recipe ausgeführt hat. Die Option "on_firmware.ar71xx-clean" ist nur zugänglich, wenn der Nutzer in der trac-admin Gruppe ist. Dann gibt es auf der Trac-Webseite einen Menüpunkt "Admin". Auf der nächsten Seite "Configurations" auswählen und nun ist auch "on_firmware.ar71xx-clean" auswählbar.
  • den bestehenden, bisher fehlerhaften Build, invalidieren (Tab "Build Status" -> dort auf den Build klicken -> "Invalidate build" klicken). Und zusätzlich die Auswahl der Recipes wieder auf Ausgangslage zurücksetzen, sodass "clean" nicht aktiviert ist.

Jetzt sollte automatisch der Slave beginnen alles neu zu bauen.

[Bearbeiten] Fehlersuche

[Bearbeiten] trac-Interface reagiert nicht / hunderte git-Prozesse

  • Wenn in einer Build-Konfiguration keine Zielplattform (z.B. name ~= minato#') angegeben ist, dann hängt das bitten-Plugin.
  • Gleichzeitig werden hunderte git-Prozesse gestartet, die kein Ende finden.

[Bearbeiten] Logfile

  • das trac Logfile befindet sich unter /var/www/trac/log/trac.log (Dev-Server)
  • das bitten-slave Logfile findet sich unter /home/trac-bitten-slave/log/bitten-slave.log (Build-Server)
  • unser Loglevel steht standardmäßig auf WARNING, muss ggf. erhöht werden
Meine Werkzeuge
Namensräume

Varianten
Aktionen
Start
Opennet
Kommunikation
Karten
Werkzeuge