Server Installation/trac: Unterschied zwischen den Versionen

Aus Opennet
Wechseln zu: Navigation, Suche
(Betrieb: delaycompress für Logrotate nach Analyse auf DEV-Liste)
 
(28 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
Software zum Betrieb von [[Opennet DEV]] trac Umgebung (Hilfsmittel für Entwickler).
 
Software zum Betrieb von [[Opennet DEV]] trac Umgebung (Hilfsmittel für Entwickler).
  
=== Installation ===
+
== Installation ==
  
 
* Installation trac (incl. subversion)
 
* Installation trac (incl. subversion)
Zeile 7: Zeile 7:
 
* Installation trac-bitten trac-bitten-slave (Continuous Integration)
 
* Installation trac-bitten trac-bitten-slave (Continuous Integration)
 
* Installation trac-announcer (Benachrichtigungssystem)
 
* Installation trac-announcer (Benachrichtigungssystem)
 +
* Installation trac-xmlrpc (Externe Schnittstelle)
 
* Installation libapache2-mod-wsgi (Apache Modul)
 
* Installation libapache2-mod-wsgi (Apache Modul)
 
* Vorbereitung Verzeichnisse: ''mkdir /var/www/trac
 
* Vorbereitung Verzeichnisse: ''mkdir /var/www/trac
  
=== Konfiguration ===
+
== Konfiguration ==
  
 
* Anlegen einer neuen Projektumgebung:
 
* Anlegen einer neuen Projektumgebung:
Zeile 22: Zeile 23:
 
* Konfiguration der Projektumgebung in ''/var/www/trac/conf/trac.ini''
 
* Konfiguration der Projektumgebung in ''/var/www/trac/conf/trac.ini''
 
  [components]
 
  [components]
  webadmin.* = enabled
+
  #webadmin.* = enabled
  tracext.git.* = enabled
+
  #tracext.git.* = enabled
 
  bitten.* = enabled
 
  bitten.* = enabled
 
  announcer.* = enabled
 
  announcer.* = enabled
  [notifications]
+
#tracrpc.* = enabled
 +
  [notification]
 
  always_notify_owner = false
 
  always_notify_owner = false
 
  always_notify_reporter = false
 
  always_notify_reporter = false
Zeile 68: Zeile 70:
 
  email_address_resolvers = SpecifiedEmailResolver, SessionEmailResolver
 
  email_address_resolvers = SpecifiedEmailResolver, SessionEmailResolver
 
  email_subject_prefix = Opennet DEV-
 
  email_subject_prefix = Opennet DEV-
 +
[git]
 +
cached_repository = true
 +
persistent_cache = true
  
 
* Admin Nutzer für Projektumgebung:
 
* Admin Nutzer für Projektumgebung:
Zeile 75: Zeile 80:
  
 
* Einbindung in Apache Webserver:
 
* 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
 
  WSGIScriptAlias /trac /var/www/trac/cgi-bin/trac.wsgi
 
  Alias /trac/chrome/ /var/www/trac/htdocs/
 
  Alias /trac/chrome/ /var/www/trac/htdocs/
Zeile 104: Zeile 112:
  
 
* Anlegen eines Git Repositories:
 
* Anlegen eines Git Repositories:
  mkdir /var/git/<on_projectname>
+
  mkdir /var/git/repositories/<on_projectname>
  cd /var/git/<on_projectname>
+
  cd /var/git/repositories/<on_projectname>
 
  git --bare init
 
  git --bare init
 
  git update-server-info
 
  git update-server-info
Zeile 113: Zeile 121:
 
* nun via Trac Admin Webinterface in Projektumgebung einbinden sowie:
 
* nun via Trac Admin Webinterface in Projektumgebung einbinden sowie:
 
  trac-admin /var/www/trac/ changeset added "<on_projectname>"
 
  trac-admin /var/www/trac/ changeset added "<on_projectname>"
  echo "exec trac-admin /var/www/trac/ changeset added \"<on_projectname>\"" >> /var/git/<on_projectname>/hooks/post-update
+
  echo "exec trac-admin /var/www/trac/ changeset added \"<on_projectname>\"" >> /var/git/repositories/<on_projectname>/hooks/post-update
  
 
* sonstige Trac Nacharbeiten:
 
* sonstige Trac Nacharbeiten:
 
** Berechtigungen TICKET_CREATE u. TICKET_APPEND für Anonymous erlauben
 
** 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
 
** Site Logo setzen, Wiki Startseite bearbeiten
  
Zeile 133: Zeile 143:
  
 
* trac-bitten-slave als Deamon (auf separatem Build Server):
 
* trac-bitten-slave als Deamon (auf separatem Build Server):
  mkdir /var/bitten
+
  mkdir /home/trac-bitten-slave
  useradd -d /var/bitten -c "bitten service user" -r -s /bin/false 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:trac-bitten-slave /var/bitten
+
  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.default /etc/default/trac-bitten-slave
 
  cp /usr/share/doc/trac-bitten-slave/examples/trac-bitten-slave.init /etc/init.d/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
 
  chmod +x /etc/init.d/trac-bitten-slave
  vi /etc/default/trac-bitten-slave
+
  cat >>/etc/default/trac-bitten-slave <<-EOF
  DAEMON_HOME="/var/bitten"
+
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"
  DAEMON_ARGS="--work-dir=$DAEMON_HOME --build-dir=$DAEMON_HOME --keep-files"
+
URLS="https://dev.opennet-initiative.de/builds"
  URLS="https://dev.opennet-initiative.de/builds"
+
EOF
 
  update-rc.d trac-bitten-slave defaults
 
  update-rc.d trac-bitten-slave defaults
  
=== Betrieb ===
+
== Betrieb ==
 +
=== Allgemenes ===
  
 
* Nutzer anlegen: Anmeldung erfolgt über [[Opennet CA]] Zertifikate der Client Sub-CA. Rechtevergabe per ''trac-admin''.
 
* 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.
 
* 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''
 
* 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-continuous":
+
Build-Recipe "on_firmware.ar71xx" for continuous builds:
 
<pre>
 
<pre>
 
<build description="Build system"
 
<build description="Build system"
Zeile 189: Zeile 201:
 
</build>
 
</build>
 
</pre>
 
</pre>
 +
 +
Logrotate trac-bitten-slave:
 +
<pre>
 +
/home/trac-bitten-slave/log/*.log {
 +
  rotate 10
 +
  weekly
 +
  compress
 +
  delaycompress
 +
  missingok
 +
  notifempty
 +
}
 +
</pre>
 +
 +
=== 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
 +
 +
=== 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.clean" auswählen und warten bis slave Recipe ausgeführt hat. Die Option "on_firmware.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.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.
 +
 +
== Fehlersuche ==
 +
=== 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.
 +
 +
=== 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
  
 
[[Kategorie:Server]]
 
[[Kategorie:Server]]

Aktuelle Version vom 23. Februar 2022, 20:37 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
  delaycompress
  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.clean" auswählen und warten bis slave Recipe ausgeführt hat. Die Option "on_firmware.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.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