<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.hostsharing.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mih17-bernhard</id>
	<title>Hostsharing Wiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.hostsharing.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mih17-bernhard"/>
	<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Spezial:Beitr%C3%A4ge/Mih17-bernhard"/>
	<updated>2026-04-25T23:48:45Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Nextcloud&amp;diff=5769</id>
		<title>Nextcloud</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Nextcloud&amp;diff=5769"/>
		<updated>2022-02-26T10:18:49Z</updated>

		<summary type="html">&lt;p&gt;Mih17-bernhard: Hinweise zur Konfiguration des data-Verzeichnisses und auf aktuelle Nextcloud-Version 23.0.2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Nextcloud =&lt;br /&gt;
&lt;br /&gt;
[https://nextcloud.com/ Nextcloud] ist eine PHP-basierte Open Source Lösung für gängige Cloud-Anwendungen, u.a.:&lt;br /&gt;
&lt;br /&gt;
* Filesharing unter Nutzern derselben Nextcloud, und mit der Öffentlichkeit&lt;br /&gt;
* Single-Sign-On Authentifizierung (SSO)&lt;br /&gt;
* Videokonferenzen (WebRTC)&lt;br /&gt;
* Online-Office Anwendung [https://www.collaboraoffice.com/ Collabora Online]&lt;br /&gt;
&lt;br /&gt;
Beispiel-Funktionalität, die über Plugins, sogenannte [https://apps.nextcloud.com/ &amp;quot;Apps&amp;quot;], bereit gestellt werden kann:&lt;br /&gt;
&lt;br /&gt;
* Kalender, Aufgabenverwaltung, Adressbuch&lt;br /&gt;
* Datei-Kollaboration (Kommentare zu Dateien, Verschlagwortung)&lt;br /&gt;
* Feedreader&lt;br /&gt;
* E-Mail-Programm&lt;br /&gt;
* Fotogalerie&lt;br /&gt;
* Musik- und Videowiedergabe&lt;br /&gt;
&lt;br /&gt;
= Nextcloud installieren =&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;hsadmin&#039;&#039;, zum Beispiel mit &#039;&#039;hsscript&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;hsadmin&#039;&#039;-Shell starten mit:&lt;br /&gt;
&lt;br /&gt;
  hsscript -u xyz00 -i&lt;br /&gt;
  Password: ********&lt;br /&gt;
&lt;br /&gt;
Dann nacheinander anlegen:&lt;br /&gt;
&lt;br /&gt;
* Linux User als Domain-Administrator&lt;br /&gt;
* Subdomain &#039;&#039;cloud.example.org&#039;&#039;&lt;br /&gt;
* PostgreSQL-User &lt;br /&gt;
* PostgreSQL Datenbank&lt;br /&gt;
&lt;br /&gt;
  xyz00@hsadmin&amp;gt; user.add({set:{name:&#039;xyz00-cloud&#039;,password:&#039;geheim&#039;,shell:&#039;/bin/bash&#039;,comment:&#039;Nextcloud&#039;}})&lt;br /&gt;
  xyz00@hsadmin&amp;gt; domain.add({set:{name:&#039;cloud.example.org&#039;,user:&#039;xyz00-cloud&#039;}})&lt;br /&gt;
  xyz00@hsadmin&amp;gt; postgresqluser.add({set:{name:&#039;xyz00_nextclusr&#039;,password:&#039;geheim&#039;}})&lt;br /&gt;
  xyz00@hsadmin&amp;gt; postgresqldb.add({set:{name:&#039;xyz00_nextcloud&#039;,owner:&#039;xyz00_nextclusr&#039;}})&lt;br /&gt;
&lt;br /&gt;
== Nextcloud installieren ==&lt;br /&gt;
&lt;br /&gt;
Anmelden als Linux-User &#039;&#039;xyz00-cloud&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
  ssh -l xyz00-cloud xyz00.hostsharing.net&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;htdocs&#039;&#039; Verzeichnis vorbereiten&lt;br /&gt;
&lt;br /&gt;
  cd&lt;br /&gt;
  mkdir nextcloud&lt;br /&gt;
  cd doms/cloud.example.org&lt;br /&gt;
  rm -rf subs/www subs-ssl/www htdocs-ssl&lt;br /&gt;
  ln -s $HOME/nextcloud htdocs-ssl&lt;br /&gt;
&lt;br /&gt;
Nextcloud herunterladen und entpacken.&lt;br /&gt;
&lt;br /&gt;
  cd &lt;br /&gt;
  wget https://download.nextcloud.com/server/releases/nextcloud-22.2.0.zip&lt;br /&gt;
  unzip nextcloud-22.2.0.zip &lt;br /&gt;
  rm nextcloud-22.2.0.zip&lt;br /&gt;
  mkdir data tmp&lt;br /&gt;
  chmod 700 data tmp&lt;br /&gt;
&lt;br /&gt;
Mit Erolg getestete neuere Versionen:&lt;br /&gt;
* nextcloud-23.0.2 (user mih17)&lt;br /&gt;
&lt;br /&gt;
== Nextcloud konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;$HOME/doms/cloud.example.org/fastcgi-ssl/&amp;quot; eine Datei &amp;quot;php.ini&amp;quot; anlegen mit folgendem Inhalt: &lt;br /&gt;
&lt;br /&gt;
  memory_limit=512M&lt;br /&gt;
  session.save_path=/home/pacs/xyz00/users/cloud/tmp&lt;br /&gt;
	&lt;br /&gt;
Dann mit einem Editor diese Datei bearbeiten: In der zweiten Zeile den korrekten Pfad des vorher angelegten tmp-Verzeichnisses eintragen.&lt;br /&gt;
&lt;br /&gt;
Im Browser auf die Seite &lt;br /&gt;
http://cloud.example.org gehen und den Anweisungen folgen.&lt;br /&gt;
&lt;br /&gt;
Auf der ersten Seite sind anzugeben:&lt;br /&gt;
&lt;br /&gt;
* Login und Passwort für den Administrator definieren&lt;br /&gt;
* PostgreSQL als Datenbanksystem&lt;br /&gt;
* PostgreSQL-User und Passwort aus dem ersten Schritt oben&lt;br /&gt;
* Name der PostgreSQL-Datenbank aus dem ersten Schritt&lt;br /&gt;
* &amp;quot;localhost&amp;quot; als Datenbankserver (Nextcloud 23.0.2 empfiehlt hier die Angabe des Ports, diesen also lt. [[PostgreSQL]] angeben)&lt;br /&gt;
* Das Verzeichnis &amp;quot;/home/pacs/xyz00/users/cloud/data/&amp;quot; als Daten-Verzeichnis (bitte beachten: das im Eingabefeld voreingestellte verweist auf das Verzeichnis &amp;quot;/home/pacs/xyz00/users/cloud/&#039;&#039;&#039;nextcloud&#039;&#039;&#039;/data/&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung!&#039;&#039;&#039; Die Felder für die Datenbank sind auf dem Startscreen hinter einem unscheinbaren Link versteckt. Um man das Formular für die Datenbank-Daten zu gelangen, muss man auf den Link klicken. Anschließend kann man die gewünschte Datenbank auswählen und die entsprechenden Daten eintragen. &#039;&#039;&#039;Das sollte geschehen, bevor man die Installation abschließt!&#039;&#039;&#039; Tut man dies nicht, wird Nextcloud mit SQLite installiert. Eine Änderung der Datenbank soll zwar laut Dokumentation auch später noch möglich sein, ging aber bei einem Test schief.&lt;br /&gt;
&lt;br /&gt;
== Nextcloud beschleunigen ==&lt;br /&gt;
&lt;br /&gt;
Dieser Teil ist optional.&lt;br /&gt;
&lt;br /&gt;
Wenn regelmäßig &#039;&#039;&#039;im Browser&#039;&#039;&#039; mit Nextcloud gearbeitet werden soll, ist Nextcloud im Browser oft sehr langsam. Um dies zu verbessern, unterstützt Nextcloud die Anwendung von unterschiedlichen Cache-Verfahren (zum Beispiel Memcache, Redis).&lt;br /&gt;
&lt;br /&gt;
Redis ist auf den Hostsharing-Servern vorinstalliert und wird von den Nextcloud-Entwicklern empfohlen. &#039;&#039;&#039;In Verbindung mit einem Managed Webspace&#039;&#039;&#039; muss Redis als eigener Server &#039;&#039;&#039;Daemon&#039;&#039;&#039; angemeldet werden und ist &#039;&#039;&#039;kostenpflichtig&#039;&#039;&#039;. Siehe zu Kosten im Webspace Konfigurator unter: https://www.hostsharing.net/angebote/managed-webspace/ – &#039;&#039;&#039;1 individueller Serverdienst&#039;&#039;&#039; (Daemons).&lt;br /&gt;
&lt;br /&gt;
Mit dem Hostsharing-Service wird ein IP-Port für die Nutzung von Redis vereinbart.&lt;br /&gt;
&lt;br /&gt;
Für den Redis-Dienst lege ich folgende Struktur an:&lt;br /&gt;
&lt;br /&gt;
  cd ~&lt;br /&gt;
  mkdir -p ~/redis/etc&lt;br /&gt;
  mkdir -p ~/redis/var&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;~/redis/etc&#039;&#039; lege ich eine Konfigurationsdatei &#039;&#039;redis.conf&#039;&#039; für den Redis-Dienst ab:&lt;br /&gt;
&lt;br /&gt;
  daemonize yes&lt;br /&gt;
  pidfile /home/pacs/xyz00/users/cloud/redis/var/redis-server.pid&lt;br /&gt;
  requirepass mein-redis-passwort                    &lt;br /&gt;
  unixsocket /home/pacs/xyz00/users/cloud/redis/var/redis-server.sock&lt;br /&gt;
  unixsocketperm 700&lt;br /&gt;
  port 0&lt;br /&gt;
  tcp-backlog 128&lt;br /&gt;
  timeout 300    &lt;br /&gt;
  loglevel notice&lt;br /&gt;
  logfile /home/pacs/xyz00/users/cloud/redis/var/redis.log&lt;br /&gt;
  databases 16&lt;br /&gt;
  save 900 1 &lt;br /&gt;
  save 300 10  &lt;br /&gt;
  save 60 10000&lt;br /&gt;
  slave-serve-stale-data yes&lt;br /&gt;
  appendonly no&lt;br /&gt;
  dbfilename dump.rdb&lt;br /&gt;
  dir /home/pacs/xyz00/users/cloud/redis/var&lt;br /&gt;
&lt;br /&gt;
Den Start und das Monitoring des Redis-Dienstes übernimmt &#039;&#039;monit&#039;&#039;. Hier eine geeignete Datei &#039;&#039;~/.monitrc&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
  set daemon 60&lt;br /&gt;
      with start delay 20&lt;br /&gt;
  set logfile /home/pacs/xyz00/users/cloud/monit/var/monit.log&lt;br /&gt;
  set idfile /home/pacs/xyz00/users/cloud/monit/var/monit.id&lt;br /&gt;
  set statefile /home/pacs/xyz00/users/cloud/monit/var/monit.state&lt;br /&gt;
  set httpd unixsocket /home/pacs/xyz00/users/cloud/monit/var/monit.sock&lt;br /&gt;
      permission 600&lt;br /&gt;
      allow monit:mein-monit-passwort&lt;br /&gt;
  check process redis with pidfile /home/pacs/xyz00/users/cloud/redis/var/redis-server.pid&lt;br /&gt;
      start program &amp;quot;/usr/bin/redis-server /home/pacs/xyz00/users/cloud/redis/etc/redis.conf&amp;quot;&lt;br /&gt;
      stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/cloud/redis/var/redis-server.pid )&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Zugriffsrechte für die Datei &#039;&#039;~/.monitrc&#039;&#039; setzen:&lt;br /&gt;
&lt;br /&gt;
  cd ~&lt;br /&gt;
  chmod 600 .monitrc&lt;br /&gt;
&lt;br /&gt;
Verzeichnis für &#039;&#039;monit&#039;&#039; anlegen:&lt;br /&gt;
&lt;br /&gt;
  cd ~&lt;br /&gt;
  mkdir -p monit/var&lt;br /&gt;
&lt;br /&gt;
In der Konfiguration der Nextcloud (in &#039;&#039;~/nextcloud/config/config.php&#039;&#039;) wird der Redis-Cache wie folgt konfiguriert:&lt;br /&gt;
&lt;br /&gt;
  &#039;memcache.local&#039; =&amp;gt; &#039;\\OC\\Memcache\\Redis&#039;,&lt;br /&gt;
  &#039;memcache.distributed&#039; =&amp;gt; &#039;\\OC\\Memcache\\Redis&#039;,&lt;br /&gt;
  &#039;memcache.locking&#039; =&amp;gt; &#039;\\OC\\Memcache\\Redis&#039;,&lt;br /&gt;
  &#039;redis&#039; =&amp;gt; &lt;br /&gt;
    array (&lt;br /&gt;
      &#039;host&#039; =&amp;gt; &#039;/home/pacs/xyz00/users/cloud/redis/var/redis-server.sock&#039;,&lt;br /&gt;
      &#039;port&#039; =&amp;gt; 0,&lt;br /&gt;
      &#039;password&#039; =&amp;gt; &#039;mein-redis-passwort&#039;,&lt;br /&gt;
      &#039;timeout&#039; =&amp;gt; 1.5,&lt;br /&gt;
    ),&lt;br /&gt;
&lt;br /&gt;
Um es perfekt zu machen, nutze ich &#039;&#039;logrotate&#039;&#039; um die Logdateien zu organisieren. Dazu die Konfiguration in &#039;&#039;~/.logrotate&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  compress&lt;br /&gt;
  /home/pacs/xyz00/users/cloud/redis/var/redis.log {&lt;br /&gt;
    rotate 5&lt;br /&gt;
    daily&lt;br /&gt;
    missingok&lt;br /&gt;
  }&lt;br /&gt;
  /home/pacs/xyz00/users/cloud/monit/var/monit.log {&lt;br /&gt;
    rotate 2&lt;br /&gt;
    weekly&lt;br /&gt;
    missingok&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Eine Crontab sorgt für den Start von Monit und das tägliche Rotieren der Logdateien:&lt;br /&gt;
&lt;br /&gt;
  # m h  dom mon dow   command&lt;br /&gt;
  HOME=/home/pacs/xyz00/users/cloud&lt;br /&gt;
  PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games&lt;br /&gt;
  MAILTO=webmaster@example.com&lt;br /&gt;
  @reboot /usr/bin/monit -c $HOME/.monitrc&lt;br /&gt;
  1 1 * * * /usr/sbin/logrotate -s $HOME/.logrotate.state $HOME/.logrotate&lt;br /&gt;
  */5 * * * * /usr/bin/php $HOME/nextcloud/cron.php&lt;br /&gt;
&lt;br /&gt;
Die letzte Zeile der &#039;&#039;crontab&#039;&#039; enthält den Cronjob für die regelmäßigen Hintergrundprozesse der Nextcloud. Durch die Erledigung dieser Aufgaben mit Cron lässt sich die Nextcloud ebenfalls etwas beschleunigen.&lt;br /&gt;
&lt;br /&gt;
== Nextcloud mit Online Office ==&lt;br /&gt;
&lt;br /&gt;
In Nextcloud können Office-Dokumente (Textverarbeitung, Tabellen und Präsentationen) im Browser bearbeitet werden. Dazu steht bei Hostsharing die Collabora Developer Version zur Verfügung. Bestellung und Konfiguration sind hier im Wiki auf der Seite [[Collabora_Online]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Nextcloud mit Nextcloud Talk ==&lt;br /&gt;
&lt;br /&gt;
Über die Nextcloud-App &amp;quot;Talk&amp;quot; können Videokonfererenzen mit Screensharing durchgeführt werden. Für die regelmäßige Nutzung kann es sinnvoll sein einen eigenen TURN Server zu betreiben. Siehe dazu [[Coturn_Installieren]]&lt;br /&gt;
&lt;br /&gt;
== Volltextsuche ==&lt;br /&gt;
&lt;br /&gt;
Über die Dokumente einer Nextcloud kann ein Volltextindex erstellt werden. Die Volltextsuche ermöglicht über den Index eine Suche über beliebige Begriffe, die in Dokumenten vorkommen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung ist der Betrieb eines Elasticsearch Servers. Der Betrieb im Managed Webspace erfodert die Buchung von zwei &amp;quot;Serverdiensten&amp;quot;. Nutzer eines Managed Server müssen mit einem spürbaren Mehrbedarf an Hauptspeicher rechnen.&lt;br /&gt;
&lt;br /&gt;
Zur Installation von Elasticsearch existiert eine eigene Wikiseite: [[Elasticsearch]].&lt;br /&gt;
&lt;br /&gt;
In der Nextcloud sind folgende &#039;&#039;Apps&#039;&#039; zu installieren:&lt;br /&gt;
* Full Text Search&lt;br /&gt;
* Full Text Search - Elasticsearch Platform&lt;br /&gt;
* Full Text Search - Files&lt;br /&gt;
&lt;br /&gt;
nach der Installation der drei Apps steht in den Einstellungen ein neuer Menüpunkt &amp;quot;Volltextsuche&amp;quot; zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Hier ist einzustellen:&lt;br /&gt;
* Suchplattform: Elasticsearch&lt;br /&gt;
* Adresse des Servlets: http://elastic:das-erzeugt-passwort@127.0.0.1:39200&lt;br /&gt;
* Index: frei-gewaehlter-name-idx&lt;br /&gt;
* Analyzer tokenizer: standard&lt;br /&gt;
&lt;br /&gt;
Die anderen Einstellung nach den eigenen Vorstellungen vornehmen.&lt;br /&gt;
&lt;br /&gt;
Der initiale Aufbau des Suchindex erfolgt über ein &amp;quot;occ&amp;quot;-Kommando auf der Shell:&lt;br /&gt;
&lt;br /&gt;
  cd nextcloud/&lt;br /&gt;
  php occ fulltextsearch:index --output&lt;br /&gt;
&lt;br /&gt;
Wenn dieser Fehler kommt:&lt;br /&gt;
  TypeError: Return value of OCA\Files_FullTextSearch\Model\MountPoint::isGlobal()&lt;br /&gt;
  must be of the type bool, null returned in [...]/apps/files_fulltextsearch/lib/Model/MountPoint.php:103&lt;br /&gt;
sollte dieser Patch angewendet werden: https://github.com/nextcloud/files_fulltextsearch/issues/125#issuecomment-877789742&lt;br /&gt;
&lt;br /&gt;
Zur Pflege des Indexes wird ein weiterer Hintergrundprozess gestartet:&lt;br /&gt;
&lt;br /&gt;
  cd nextcloud/&lt;br /&gt;
  php occ fulltextsearch:live -q&lt;br /&gt;
&lt;br /&gt;
Die Monit Konfiguration dafür sieht so aus:&lt;br /&gt;
&lt;br /&gt;
~/bin/start-fulltextsearchlive&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  export HOME=/home/pacs/xyz00/users/cloud&lt;br /&gt;
  cd $HOME&lt;br /&gt;
  mkdir -p $HOME/var&lt;br /&gt;
  cd $HOME/nextcloud&lt;br /&gt;
  exec php occ fulltextsearch:live -q &amp;amp;&lt;br /&gt;
  echo $! &amp;gt;$HOME/var/fulltextsearchlive.pid&lt;br /&gt;
&lt;br /&gt;
~/bin/stop-fulltextsearchlive&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  export HOME=/home/pacs/xyz00/users/cloud&lt;br /&gt;
  kill $( cat $HOME/var/fulltextsearchlive.pid )&lt;br /&gt;
&lt;br /&gt;
~/.monitrc (siehe oben von der Redis Installation) entsprechend ergänzen:&lt;br /&gt;
  check process fulltextsearchlive with pidfile /home/pacs/xyz00/users/cloud/var/fulltextsearchlive.pid&lt;br /&gt;
      start program &amp;quot;/home/pacs/xyz00/users/cloud/bin/start-fulltextsearchlive&amp;quot;&lt;br /&gt;
      stop program &amp;quot;/home/pacs/xyz00/users/cloud/bin/stop-fulltextsearchlive&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= Nextcloud Updates =&lt;br /&gt;
&lt;br /&gt;
== Updater über die Shell starten ==&lt;br /&gt;
&lt;br /&gt;
Wenn die NextCloud sich nicht über das Webfrontend updaten lässt, kann der Updater auch per Shell im directory /updater durch ausführen des updater.phar gestartet werden:&lt;br /&gt;
&lt;br /&gt;
  xyz00-cloud@h00:~/nextcloud/updater$ chmod u+x updater.phar&lt;br /&gt;
  xyz00-cloud@h00:~/nextcloud/updater$ ./updater.phar&lt;br /&gt;
&lt;br /&gt;
Für weitere Informationen kann auf die offizielle Doku ab Ziffer 2. zurückgegriffen werden.&lt;br /&gt;
&lt;br /&gt;
* [https://docs.nextcloud.com/server/latest/admin_manual/maintenance/update.html#using-the-command-line-based-updater https://docs.nextcloud.com]&lt;br /&gt;
&lt;br /&gt;
Wartungsmodus per Shell ein- oder ausschalten:&lt;br /&gt;
&lt;br /&gt;
 xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --on&lt;br /&gt;
 xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --off&lt;br /&gt;
&lt;br /&gt;
== Webfrontend-Updater Probleme / Lösungen ==&lt;br /&gt;
&lt;br /&gt;
=== Datenbank: Indizes | Primärschlüssel | Konvertierungen ===&lt;br /&gt;
&lt;br /&gt;
Aufgetreten nach erfolgtem Versionsupdate Nextcloud 19 auf Nextcloud 20&lt;br /&gt;
&lt;br /&gt;
Nach dem erfolgten Update lädt automatisch die Seite: &#039;&#039;&#039;Sicherheits- und Einrichtungswarnungen&#039;&#039;&#039; auf dieser wird angemerkt, dass manuelle Schritte für die Datenbank durchzuführen sind. Dies betrifft Indizes, Primärschlüssel und Konvertierungen. &lt;br /&gt;
&lt;br /&gt;
Per Shell in der directory /nextcloud folgende Kommandos ausführen:&lt;br /&gt;
&lt;br /&gt;
  xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-indices&lt;br /&gt;
  xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-primary-keys&lt;br /&gt;
  xyz00-cloud@h00:~/nextcloud$ php occ db:convert-filecache-bigint&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier dem durch Nextcloud angegebenen Kommando ein &#039;&#039;&#039;php&#039;&#039;&#039; voranzustellen.&lt;br /&gt;
&lt;br /&gt;
== Update per Skript ==&lt;br /&gt;
&lt;br /&gt;
Es ist möglich die regelmäßigen Updates weitgehend zu automatisieren. Ein Skript wäre etwa:&lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  if [ -f $HOME/nextcloud/occ ]; then &lt;br /&gt;
    echo &amp;quot;Nextcloud Update&amp;quot;; &lt;br /&gt;
    cd $HOME/nextcloud;&lt;br /&gt;
    php updater/updater.phar -vv --no-backup --no-interaction&lt;br /&gt;
    php occ maintenance:mode --on&lt;br /&gt;
    php occ db:add-missing-primary-keys --no-interaction&lt;br /&gt;
    php occ db:add-missing-columns --no-interaction&lt;br /&gt;
    php occ db:add-missing-indices --no-interaction&lt;br /&gt;
    php occ db:convert-filecache-bigint --no-interaction&lt;br /&gt;
    php occ app:update --all&lt;br /&gt;
    php occ maintenance:mode --off&lt;br /&gt;
  else &lt;br /&gt;
    echo &amp;quot;Keine Nextcloud Installation gefunden&amp;quot;; &lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
= Daten auf HDD Storage =&lt;br /&gt;
== Einrichtung des HDD Storage ==&lt;br /&gt;
&lt;br /&gt;
Um den langsameren aber günstigeren HDD Storage von Hostsharing zu nutzen, kann das data Verzeichnis von SSD auf HDD Storage verschoben werden. Über einen symbolischen Link findet Nextcloud das Verzeichnis auch weiterhin. Zur Sicherheit kann man auch den Pfad in der Nextcloud Konfigurationsdatei anpassen.&lt;br /&gt;
&lt;br /&gt;
 # Nextcloud in Wartungsmodus versetzen&lt;br /&gt;
 xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --on&lt;br /&gt;
 # Daten auf HDD Storage verschieben&lt;br /&gt;
 xyz00-cloud@h00:~/nextcloud$ mv data /home/storage/xyz00/users/cloud/&lt;br /&gt;
 # symbolischen Link anlegen&lt;br /&gt;
 xyz00-cloud@h00:~/nextcloud$ ln -s /home/storage/xyz00/users/cloud/data data&lt;br /&gt;
 # Pfad in config.php ändern&lt;br /&gt;
 nano config/config.php&lt;br /&gt;
 # Die Zeile mit &#039;datadirectory&#039; finden und entsprechend ändern:&lt;br /&gt;
 # &#039;datadirectory&#039; =&amp;gt; &#039;/home/pacs/xyz00/users/cloud/data&#039;,&lt;br /&gt;
 # Wartungsmodus beenden&lt;br /&gt;
 xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --off&lt;br /&gt;
&lt;br /&gt;
= weiterführende Links =&lt;br /&gt;
&lt;br /&gt;
* [https://docs.nextcloud.com/ Nextcloud Dokumentation]&lt;br /&gt;
* [https://apps.nextcloud.com/ Nextcloud Erweiterungen (&amp;quot;Apps&amp;quot;)]&lt;br /&gt;
* [https://ownyourbits.com/2019/06/29/understanding-and-improving-nextcloud-previews/ Optimierung des Caches für Previews]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:CalDAV]]&lt;/div&gt;</summary>
		<author><name>Mih17-bernhard</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Roundup&amp;diff=4982</id>
		<title>Roundup</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Roundup&amp;diff=4982"/>
		<updated>2019-09-07T08:25:02Z</updated>

		<summary type="html">&lt;p&gt;Mih17-bernhard: /* Menüpunkt für &amp;quot;Erledigte&amp;quot; Aufgaben ergänzen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation roundup issue tracker (cgi-bin) ==&lt;br /&gt;
&lt;br /&gt;
Die allgemeine Installationsanleitung für roundup findet man unter http://roundup-tracker.org/docs/installation.html&lt;br /&gt;
&lt;br /&gt;
Im Folgenden soll die Installation bei Hostsharing in einem WEB-Paket im cgi-bin einer Domain &#039;&#039;&#039;ohne eigene httpd.conf&#039;&#039;&#039; beschrieben werden.&lt;br /&gt;
Das Beispiel beschreibt die nötigen Schritte für den Domain-Admin innerhalb des WEB-Paketes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neueste Quellen per Mercurial besorgen ===&lt;br /&gt;
&lt;br /&gt;
hg clone http://hg.code.sf.net/p/roundup/code /home/pacs/xyz00/users/USERNAME/roundup&lt;br /&gt;
&lt;br /&gt;
=== Installation der tracker-Software ===&lt;br /&gt;
&lt;br /&gt;
 python setup.py install --prefix=/home/pacs/xyz00/users/USERNAME/roundup/install --install-scripts=/home/pacs/xyz00/users/USERNAME/roundup/bin&lt;br /&gt;
&lt;br /&gt;
=== Anpassen der Umgebungsvariablen ===&lt;br /&gt;
&lt;br /&gt;
In der bash-Umgebung:&lt;br /&gt;
&lt;br /&gt;
 export PATH=$PATH:/home/pacs/xyz00/users/USERNAME/roundup/bin&lt;br /&gt;
 export PYTHONPATH=$PYTHONPATH:/home/pacs/xyz00/users/USERNAME/roundup/install/lib/python2.5/site-packages/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am besten trägt man diese beiden Zeilen in der Datei &amp;lt;code&amp;gt;.bash_profile&amp;lt;/code&amp;gt; ein, dann stehen die Pfade beim starten der Shell direkt zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
 nano ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
=== Installation eines neuen Trackers ===&lt;br /&gt;
&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/roundup/bin/roundup-admin install&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
 roundup-admin install&lt;br /&gt;
&lt;br /&gt;
(Wenn man die Umgebungsvariablen wie im Abschnitt zuvor beschrieben konfiguriert hat.)&lt;br /&gt;
&lt;br /&gt;
Dabei werden folgende Eingaben abgefragt (Eingaben nur beispielhaft):&lt;br /&gt;
&lt;br /&gt;
 Enter tracker home: &#039;&#039;&#039;/pfad/zum/tracker/home&#039;&#039;&#039;&lt;br /&gt;
 Templates: minimal, classic&lt;br /&gt;
 Select template [classic]: &#039;&#039;&#039;classic&#039;&#039;&#039;&lt;br /&gt;
 Back ends: anydbm, mysql, sqlite, postgresql&lt;br /&gt;
 Select backend [anydbm]: &#039;&#039;&#039;sqlite&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;tracker home&amp;quot; bezeichnet dabei ein Verzeichnis das man zuvor in seinem Home angelegt hat. Man kann auch mehrere Tracker-Instanzen parallel betreiben, die eigene &amp;quot;tracker home&amp;quot; bekommen.&lt;br /&gt;
Beispiel: ~/roundup-tracker-projects/my-first-tracker&lt;br /&gt;
&lt;br /&gt;
Beim Betrieb mit Mysql (um Backups zu ermöglichen die sicher konsistent sind):   &lt;br /&gt;
* bei &amp;quot;Select backend&amp;quot; mysql angeben&lt;br /&gt;
* mit hsadmin einen DB-User erzeugen&lt;br /&gt;
* mit hsadmin eine DB erzeugen und den DB-User zuweisen&lt;br /&gt;
* DB, DB-User und Passwort des DB-Users sowie localhost als host (siehe nachfolgender Abschnitt) in config.ini in der Sektion rdbms angeben.&lt;br /&gt;
  &lt;br /&gt;
==== Tracker anpassen ====&lt;br /&gt;
&lt;br /&gt;
 nano /home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/config.ini&lt;br /&gt;
&lt;br /&gt;
Hier müssen zumindest diese Variablen angepasst werden:&lt;br /&gt;
&lt;br /&gt;
 admin_email = mail@example.com&lt;br /&gt;
 dispatcher_email = mail@example.com&lt;br /&gt;
 name = TRACKERBESCHREIBUNG&lt;br /&gt;
 web = http(s)://SUBDOMAIN.example.com/&lt;br /&gt;
 email = mail@example.com&lt;br /&gt;
 domain = example.com&lt;br /&gt;
 host = localhost&lt;br /&gt;
&lt;br /&gt;
Optional kann man das logging in eine Datei aktivieren:&lt;br /&gt;
&lt;br /&gt;
 filename = /home/pacs/xyz00/users/USERNAME/TRACKERNAME.log&lt;br /&gt;
&lt;br /&gt;
==== Datenbank initialisieren ====&lt;br /&gt;
&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/roundup/bin/roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
 roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
(Nachdem man die Umgebungsvariablen wie oben beschrieben konfiguriert hat.)&lt;br /&gt;
&lt;br /&gt;
=== Subdomain anlegen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /home/pacs/xyz00/users/USERNAME/doms/example.com/subs(-ssl)/SUBDOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein eigenes cgi-verzeichnis für die neue subdomain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi(-ssl)/SUBDOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration &#039;&#039;&#039;mit&#039;&#039;&#039; eigener httpd.conf ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!! Dieser Abschnitt ist mangels eigener httpd.conf ungetestet !!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== cgi-frontend kopieren ====&lt;br /&gt;
&lt;br /&gt;
 cp /home/pacs/xyz00/users/USERNAME/roundup/frontends/roundup.cgi /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi/SUBDOMAIN/&lt;br /&gt;
&lt;br /&gt;
==== cgi-frontend anpassen ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi/SUBDOMAIN/roundup.cgi&amp;lt;/code&amp;gt;&lt;br /&gt;
 TRACKER_HOMES = {&lt;br /&gt;
    &#039;TRACKERNAME&#039;: &#039;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME&#039;,&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== .htaccess-Datei für cgi konfigurieren ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/subs/SUBDOMAIN/.htaccess&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteRule ^(.*)      /cgi-bin/SUBDOMAIN/roundup.cgi/$1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!! ENDE ungetester Abschnitt !!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration &#039;&#039;&#039;ohne&#039;&#039;&#039; eigene httpd.conf ===&lt;br /&gt;
&lt;br /&gt;
==== WSGI-Interface einbinden ====&lt;br /&gt;
&lt;br /&gt;
Ohne eigene httpd.conf benötigt man einen Wrapper (s. [[Flup]]).&lt;br /&gt;
&lt;br /&gt;
Dies legt man in seinem cgi(-ssl) für die subdomain als &amp;lt;code&amp;gt;roundup_stub&amp;lt;/code&amp;gt; ab:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/env python&lt;br /&gt;
 import sys&lt;br /&gt;
 sys.path.append(&amp;quot;/home/pacs/&#039;&#039;&#039;xyz00&#039;&#039;&#039;/users/&#039;&#039;&#039;USERNAME&#039;&#039;&#039;/roundup/install/lib/python2.7/site-packages&amp;quot;)&lt;br /&gt;
 from flup.server.cgi import WSGIServer&lt;br /&gt;
 # obtain the WSGI request dispatcher&lt;br /&gt;
 from roundup.cgi.wsgi_handler import RequestDispatcher&lt;br /&gt;
 tracker_home = &#039;/home/pacs/&#039;&#039;&#039;xyz00&#039;&#039;&#039;/users/&#039;&#039;&#039;USERNAME&#039;&#039;&#039;/roundup/tracker/&#039;&#039;&#039;TRACKERNAME&#039;&#039;&#039;&#039;&lt;br /&gt;
 app = RequestDispatcher(tracker_home)&lt;br /&gt;
 WSGIServer(app).run()&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;hervorgehobenen Stellen&#039;&#039;&#039; sind an die eigenen Gegebenheiten anzupassen.&lt;br /&gt;
&lt;br /&gt;
Anschließend muss man den Wrapper ausführbar machen:&lt;br /&gt;
&lt;br /&gt;
 chmod 755 roundup_stub&lt;br /&gt;
&lt;br /&gt;
Wenn es Fehlern kommt, kann man debugging-Meldungen an den Browser ausgeben lassen. Dazu ergänzt man unter der Zeile &amp;quot;sys.path.append...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 import cgitb&lt;br /&gt;
 cgitb.enable()&lt;br /&gt;
&lt;br /&gt;
==== .htaccess-Datei für cgi konfigurieren ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/subs(ssl)/SUBDOMAIN/.htaccess&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteRule ^(.*)      /cgi-bin/SUBDOMAIN/roundup_stub/$1&lt;br /&gt;
&lt;br /&gt;
== Individualisierung der tracker ==&lt;br /&gt;
&lt;br /&gt;
Die Tracker kann man individuell an die eigenen Wünsche anpassen.&lt;br /&gt;
&lt;br /&gt;
Das Datenbank-Schema liegt z.B. unter&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/tracker/TRACKERNAME/schema.py&lt;br /&gt;
&lt;br /&gt;
Die Datenbank-Initialisierungs-Datei liegt unter&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/tracker/TRACKERNAME/initial_data.py&lt;br /&gt;
&lt;br /&gt;
Zum Übernehmen der Änderungen an der Datenbank muss man die Datenbank neu initialisieren. &#039;&#039;&#039;Achtung: Dabei gehen alle Daten in der DB verloren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
Details zur Individualisierung nennt die Unterseite &amp;quot;Docs&amp;quot; -&amp;gt; &amp;quot;Customising Roundup&amp;quot; (http://roundup-tracker.org/docs/customizing.html).&lt;br /&gt;
&lt;br /&gt;
=== Registrieren verhindern ===&lt;br /&gt;
&lt;br /&gt;
Um nur manuell ergänzte Benutzer zuzulassen, muss man der Rolle Anonymous das Recht &amp;quot;Register&amp;quot; nehmen. Das bewerkstelligt man durch auskommentieren der letzten Zeile in diesem Abschnitt der datei &amp;lt;code&amp;gt;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/schema.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # Assign the appropriate permissions to the anonymous user&#039;s Anonymous&lt;br /&gt;
 # Role. Choices here are:&lt;br /&gt;
 # - Allow anonymous users to register&lt;br /&gt;
 db.security.addPermissionToRole(&#039;Anonymous&#039;, &#039;Register&#039;, &#039;user&#039;)&lt;br /&gt;
&lt;br /&gt;
=== Anzeige der issues nur für eingeloggte Benutzer ===&lt;br /&gt;
&lt;br /&gt;
Damit nur eingeloggte Benutzer die issues (Aufgaben) sehen können, muss man der Rolle Anonymous das Recht &amp;quot;View&amp;quot; nehmen. Das bewerkstelligt man durch auskommentieren der letzten beiden Zeilen in diesem Abschnitt der datei &amp;lt;code&amp;gt;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/schema.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # Allow anonymous users access to view issues (and the related, linked&lt;br /&gt;
 # information)&lt;br /&gt;
 for cl in &#039;issue&#039;, &#039;file&#039;, &#039;msg&#039;, &#039;keyword&#039;, &#039;priority&#039;, &#039;status&#039;:&lt;br /&gt;
     db.security.addPermissionToRole(&#039;Anonymous&#039;, &#039;View&#039;, cl)&lt;br /&gt;
&lt;br /&gt;
=== Logo einfügen ===&lt;br /&gt;
&lt;br /&gt;
In der linken oberen Ecke ist Platz für ein eigenes Logo oder eine Überschrift.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_main.jpg]]&lt;br /&gt;
&lt;br /&gt;
Bearbeitet werden muss die Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/page.html&lt;br /&gt;
&lt;br /&gt;
in der Tabellenzelle&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;td class=&amp;quot;page-header-left&amp;quot;&amp;gt;&amp;lt;code&amp;gt;&amp;amp;amp;nbsp;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn ein Logo mit einem Link hinterlegt wird, erscheint standardmäßig ein blauer Rahmen um die Grafik. Das kann unerwünscht sein. Unterdrücken kann man diesen Rahmen mit dem Zusatz&lt;br /&gt;
&lt;br /&gt;
 a img&lt;br /&gt;
 {&lt;br /&gt;
   border: none;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/style.css&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Kategorien farblich absetzen ===&lt;br /&gt;
&lt;br /&gt;
Damit die Priorität etwas hervorsticht, kann man die Kategorien farblich absetzen. Es bietet sich an, eine Legende vor und hinter der Aufgaben (issue) Liste einzufügen. Wir formatieren die Legende später per CSS, daher geben wir ihr auch eine CSS-Klasse mit.&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies bewerkstelligt man in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/issue.index.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
an den Stellen&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tal:block tal:define=&amp;quot;batch request/batch&amp;quot; tal:condition=&amp;quot;context/is_view_ok&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;list&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
(= über der Aufgaben-Liste)&lt;br /&gt;
&lt;br /&gt;
und&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/metal:index&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;lt;a tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;,&lt;br /&gt;
            {&#039;@action&#039;:&#039;export_csv&#039;})&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Download as CSV&amp;lt;/a&amp;gt;&lt;br /&gt;
(= unter der Aufgaben-Liste)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der fertige Abschnitt &#039;&#039;&#039;über&#039;&#039;&#039; der Aufgaben-Liste sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;tal:block tal:define=&amp;quot;batch request/batch&amp;quot; tal:condition=&amp;quot;context/is_view_ok&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;list&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der fertige Abschnitt &#039;&#039;&#039;unter&#039;&#039;&#039; der Aufgaben-Liste sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt; &amp;lt;/metal:index&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;lt;a tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;,&lt;br /&gt;
            {&#039;@action&#039;:&#039;export_csv&#039;})&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Download as CSV&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit auch die Aufgaben in der entsprechenden Farbe erscheinen, passt man noch die Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/issue.index.html&lt;br /&gt;
&lt;br /&gt;
an. Die Zeilen&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td tal:condition=&amp;quot;request/show/priority&amp;quot;&lt;br /&gt;
       tal:content=&amp;quot;python:i.priority.plain() or default&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ändert man in&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tr&#039;&#039;&#039; tal:attributes=&amp;quot;class string:priority-${i/priority/plain}&amp;quot;&#039;&#039;&#039;&amp;gt;&lt;br /&gt;
   &amp;lt;td tal:condition=&amp;quot;request/show/priority&amp;quot;&lt;br /&gt;
       tal:content=&amp;quot;python:i.priority.plain() or default&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Schluss muss man noch die CSS-Formatierungen ergänzen in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/style.css&lt;br /&gt;
&lt;br /&gt;
Hier ist z.B. ein solcher Block einzufügen:&lt;br /&gt;
&lt;br /&gt;
 tr.priority-critical td, .priority-critical&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FF8989;&lt;br /&gt;
   color: #ffffff;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-critical td a:link&lt;br /&gt;
 {&lt;br /&gt;
   color: #ffffff;&lt;br /&gt;
   font-weight: bold;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-urgent td, .priority-urgent&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FFD089;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-bug td, .priority-bug&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FFFE89&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-feature td, .priority-feature&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #C0DDFF;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-wish td, .priority-wish&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #C0FFCC;&lt;br /&gt;
 }&lt;br /&gt;
 table.color-reference&lt;br /&gt;
 {&lt;br /&gt;
   margin-top: 10px;&lt;br /&gt;
   margin-bottom: 30px;&lt;br /&gt;
 }&lt;br /&gt;
 .color-reference td&lt;br /&gt;
 {&lt;br /&gt;
   width: 100px;&lt;br /&gt;
   text-align: center;&lt;br /&gt;
   font-weight: bold;&lt;br /&gt;
   border: 1px solid #ababab;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_legende.jpg]]&lt;br /&gt;
&lt;br /&gt;
=== Menüpunkt für &amp;quot;Erledigte&amp;quot; Aufgaben ergänzen ===&lt;br /&gt;
&lt;br /&gt;
In der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/page.html&lt;br /&gt;
&lt;br /&gt;
ist diese Textstelle&lt;br /&gt;
&lt;br /&gt;
 status_notresolved string:-1,1,2,3,4,5,6,7;&lt;br /&gt;
&lt;br /&gt;
um eine Zeile zu erweitern:&lt;br /&gt;
&lt;br /&gt;
 status_notresolved string:-1,1,2,3,4,5,6,7;&lt;br /&gt;
 &#039;&#039;&#039;status_resolved string:8;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Außerdem ist noch &lt;br /&gt;
&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Show All&amp;lt;/a&amp;gt;&amp;amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zu ersetzen durch:&lt;br /&gt;
&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Show All&amp;lt;/a&amp;gt;&amp;amp;lt;br&amp;gt;&lt;br /&gt;
       &amp;lt;a href=&amp;quot;#&amp;quot;&lt;br /&gt;
       tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;, {&lt;br /&gt;
      &#039;@sort&#039;: &#039;-activity&#039;,&lt;br /&gt;
      &#039;@group&#039;: &#039;priority&#039;,&lt;br /&gt;
      &#039;@filter&#039;: &#039;status&#039;,&lt;br /&gt;
      &#039;@columns&#039;: columns_showall,&lt;br /&gt;
      &#039;@search_text&#039;: &#039;&#039;,&lt;br /&gt;
      &#039;status&#039;: status_resolved,&lt;br /&gt;
      &#039;@dispname&#039;: i18n.gettext(&#039;Erledigte anzeigen&#039;),&lt;br /&gt;
     })&amp;quot;&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;erledigte anzeigen&amp;lt;/a&amp;gt;&amp;amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TODO: Kann jemand an dieser Stelle beschreiben wie man den Text unter Berücksichtigung der Internationalisierung angibt. &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_erledigte.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;br /&gt;
[[Kategorie:Software]]&lt;/div&gt;</summary>
		<author><name>Mih17-bernhard</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Roundup&amp;diff=4981</id>
		<title>Roundup</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Roundup&amp;diff=4981"/>
		<updated>2019-09-07T08:22:54Z</updated>

		<summary type="html">&lt;p&gt;Mih17-bernhard: /* Menüpunkt für &amp;quot;Erledigte&amp;quot; Aufgaben ergänzen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation roundup issue tracker (cgi-bin) ==&lt;br /&gt;
&lt;br /&gt;
Die allgemeine Installationsanleitung für roundup findet man unter http://roundup-tracker.org/docs/installation.html&lt;br /&gt;
&lt;br /&gt;
Im Folgenden soll die Installation bei Hostsharing in einem WEB-Paket im cgi-bin einer Domain &#039;&#039;&#039;ohne eigene httpd.conf&#039;&#039;&#039; beschrieben werden.&lt;br /&gt;
Das Beispiel beschreibt die nötigen Schritte für den Domain-Admin innerhalb des WEB-Paketes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neueste Quellen per Mercurial besorgen ===&lt;br /&gt;
&lt;br /&gt;
hg clone http://hg.code.sf.net/p/roundup/code /home/pacs/xyz00/users/USERNAME/roundup&lt;br /&gt;
&lt;br /&gt;
=== Installation der tracker-Software ===&lt;br /&gt;
&lt;br /&gt;
 python setup.py install --prefix=/home/pacs/xyz00/users/USERNAME/roundup/install --install-scripts=/home/pacs/xyz00/users/USERNAME/roundup/bin&lt;br /&gt;
&lt;br /&gt;
=== Anpassen der Umgebungsvariablen ===&lt;br /&gt;
&lt;br /&gt;
In der bash-Umgebung:&lt;br /&gt;
&lt;br /&gt;
 export PATH=$PATH:/home/pacs/xyz00/users/USERNAME/roundup/bin&lt;br /&gt;
 export PYTHONPATH=$PYTHONPATH:/home/pacs/xyz00/users/USERNAME/roundup/install/lib/python2.5/site-packages/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am besten trägt man diese beiden Zeilen in der Datei &amp;lt;code&amp;gt;.bash_profile&amp;lt;/code&amp;gt; ein, dann stehen die Pfade beim starten der Shell direkt zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
 nano ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
=== Installation eines neuen Trackers ===&lt;br /&gt;
&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/roundup/bin/roundup-admin install&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
 roundup-admin install&lt;br /&gt;
&lt;br /&gt;
(Wenn man die Umgebungsvariablen wie im Abschnitt zuvor beschrieben konfiguriert hat.)&lt;br /&gt;
&lt;br /&gt;
Dabei werden folgende Eingaben abgefragt (Eingaben nur beispielhaft):&lt;br /&gt;
&lt;br /&gt;
 Enter tracker home: &#039;&#039;&#039;/pfad/zum/tracker/home&#039;&#039;&#039;&lt;br /&gt;
 Templates: minimal, classic&lt;br /&gt;
 Select template [classic]: &#039;&#039;&#039;classic&#039;&#039;&#039;&lt;br /&gt;
 Back ends: anydbm, mysql, sqlite, postgresql&lt;br /&gt;
 Select backend [anydbm]: &#039;&#039;&#039;sqlite&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;tracker home&amp;quot; bezeichnet dabei ein Verzeichnis das man zuvor in seinem Home angelegt hat. Man kann auch mehrere Tracker-Instanzen parallel betreiben, die eigene &amp;quot;tracker home&amp;quot; bekommen.&lt;br /&gt;
Beispiel: ~/roundup-tracker-projects/my-first-tracker&lt;br /&gt;
&lt;br /&gt;
Beim Betrieb mit Mysql (um Backups zu ermöglichen die sicher konsistent sind):   &lt;br /&gt;
* bei &amp;quot;Select backend&amp;quot; mysql angeben&lt;br /&gt;
* mit hsadmin einen DB-User erzeugen&lt;br /&gt;
* mit hsadmin eine DB erzeugen und den DB-User zuweisen&lt;br /&gt;
* DB, DB-User und Passwort des DB-Users sowie localhost als host (siehe nachfolgender Abschnitt) in config.ini in der Sektion rdbms angeben.&lt;br /&gt;
  &lt;br /&gt;
==== Tracker anpassen ====&lt;br /&gt;
&lt;br /&gt;
 nano /home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/config.ini&lt;br /&gt;
&lt;br /&gt;
Hier müssen zumindest diese Variablen angepasst werden:&lt;br /&gt;
&lt;br /&gt;
 admin_email = mail@example.com&lt;br /&gt;
 dispatcher_email = mail@example.com&lt;br /&gt;
 name = TRACKERBESCHREIBUNG&lt;br /&gt;
 web = http(s)://SUBDOMAIN.example.com/&lt;br /&gt;
 email = mail@example.com&lt;br /&gt;
 domain = example.com&lt;br /&gt;
 host = localhost&lt;br /&gt;
&lt;br /&gt;
Optional kann man das logging in eine Datei aktivieren:&lt;br /&gt;
&lt;br /&gt;
 filename = /home/pacs/xyz00/users/USERNAME/TRACKERNAME.log&lt;br /&gt;
&lt;br /&gt;
==== Datenbank initialisieren ====&lt;br /&gt;
&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/roundup/bin/roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
 roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
(Nachdem man die Umgebungsvariablen wie oben beschrieben konfiguriert hat.)&lt;br /&gt;
&lt;br /&gt;
=== Subdomain anlegen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /home/pacs/xyz00/users/USERNAME/doms/example.com/subs(-ssl)/SUBDOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein eigenes cgi-verzeichnis für die neue subdomain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi(-ssl)/SUBDOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration &#039;&#039;&#039;mit&#039;&#039;&#039; eigener httpd.conf ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!! Dieser Abschnitt ist mangels eigener httpd.conf ungetestet !!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== cgi-frontend kopieren ====&lt;br /&gt;
&lt;br /&gt;
 cp /home/pacs/xyz00/users/USERNAME/roundup/frontends/roundup.cgi /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi/SUBDOMAIN/&lt;br /&gt;
&lt;br /&gt;
==== cgi-frontend anpassen ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi/SUBDOMAIN/roundup.cgi&amp;lt;/code&amp;gt;&lt;br /&gt;
 TRACKER_HOMES = {&lt;br /&gt;
    &#039;TRACKERNAME&#039;: &#039;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME&#039;,&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== .htaccess-Datei für cgi konfigurieren ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/subs/SUBDOMAIN/.htaccess&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteRule ^(.*)      /cgi-bin/SUBDOMAIN/roundup.cgi/$1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!! ENDE ungetester Abschnitt !!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration &#039;&#039;&#039;ohne&#039;&#039;&#039; eigene httpd.conf ===&lt;br /&gt;
&lt;br /&gt;
==== WSGI-Interface einbinden ====&lt;br /&gt;
&lt;br /&gt;
Ohne eigene httpd.conf benötigt man einen Wrapper (s. [[Flup]]).&lt;br /&gt;
&lt;br /&gt;
Dies legt man in seinem cgi(-ssl) für die subdomain als &amp;lt;code&amp;gt;roundup_stub&amp;lt;/code&amp;gt; ab:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/env python&lt;br /&gt;
 import sys&lt;br /&gt;
 sys.path.append(&amp;quot;/home/pacs/&#039;&#039;&#039;xyz00&#039;&#039;&#039;/users/&#039;&#039;&#039;USERNAME&#039;&#039;&#039;/roundup/install/lib/python2.7/site-packages&amp;quot;)&lt;br /&gt;
 from flup.server.cgi import WSGIServer&lt;br /&gt;
 # obtain the WSGI request dispatcher&lt;br /&gt;
 from roundup.cgi.wsgi_handler import RequestDispatcher&lt;br /&gt;
 tracker_home = &#039;/home/pacs/&#039;&#039;&#039;xyz00&#039;&#039;&#039;/users/&#039;&#039;&#039;USERNAME&#039;&#039;&#039;/roundup/tracker/&#039;&#039;&#039;TRACKERNAME&#039;&#039;&#039;&#039;&lt;br /&gt;
 app = RequestDispatcher(tracker_home)&lt;br /&gt;
 WSGIServer(app).run()&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;hervorgehobenen Stellen&#039;&#039;&#039; sind an die eigenen Gegebenheiten anzupassen.&lt;br /&gt;
&lt;br /&gt;
Anschließend muss man den Wrapper ausführbar machen:&lt;br /&gt;
&lt;br /&gt;
 chmod 755 roundup_stub&lt;br /&gt;
&lt;br /&gt;
Wenn es Fehlern kommt, kann man debugging-Meldungen an den Browser ausgeben lassen. Dazu ergänzt man unter der Zeile &amp;quot;sys.path.append...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 import cgitb&lt;br /&gt;
 cgitb.enable()&lt;br /&gt;
&lt;br /&gt;
==== .htaccess-Datei für cgi konfigurieren ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/subs(ssl)/SUBDOMAIN/.htaccess&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteRule ^(.*)      /cgi-bin/SUBDOMAIN/roundup_stub/$1&lt;br /&gt;
&lt;br /&gt;
== Individualisierung der tracker ==&lt;br /&gt;
&lt;br /&gt;
Die Tracker kann man individuell an die eigenen Wünsche anpassen.&lt;br /&gt;
&lt;br /&gt;
Das Datenbank-Schema liegt z.B. unter&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/tracker/TRACKERNAME/schema.py&lt;br /&gt;
&lt;br /&gt;
Die Datenbank-Initialisierungs-Datei liegt unter&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/tracker/TRACKERNAME/initial_data.py&lt;br /&gt;
&lt;br /&gt;
Zum Übernehmen der Änderungen an der Datenbank muss man die Datenbank neu initialisieren. &#039;&#039;&#039;Achtung: Dabei gehen alle Daten in der DB verloren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
Details zur Individualisierung nennt die Unterseite &amp;quot;Docs&amp;quot; -&amp;gt; &amp;quot;Customising Roundup&amp;quot; (http://roundup-tracker.org/docs/customizing.html).&lt;br /&gt;
&lt;br /&gt;
=== Registrieren verhindern ===&lt;br /&gt;
&lt;br /&gt;
Um nur manuell ergänzte Benutzer zuzulassen, muss man der Rolle Anonymous das Recht &amp;quot;Register&amp;quot; nehmen. Das bewerkstelligt man durch auskommentieren der letzten Zeile in diesem Abschnitt der datei &amp;lt;code&amp;gt;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/schema.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # Assign the appropriate permissions to the anonymous user&#039;s Anonymous&lt;br /&gt;
 # Role. Choices here are:&lt;br /&gt;
 # - Allow anonymous users to register&lt;br /&gt;
 db.security.addPermissionToRole(&#039;Anonymous&#039;, &#039;Register&#039;, &#039;user&#039;)&lt;br /&gt;
&lt;br /&gt;
=== Anzeige der issues nur für eingeloggte Benutzer ===&lt;br /&gt;
&lt;br /&gt;
Damit nur eingeloggte Benutzer die issues (Aufgaben) sehen können, muss man der Rolle Anonymous das Recht &amp;quot;View&amp;quot; nehmen. Das bewerkstelligt man durch auskommentieren der letzten beiden Zeilen in diesem Abschnitt der datei &amp;lt;code&amp;gt;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/schema.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # Allow anonymous users access to view issues (and the related, linked&lt;br /&gt;
 # information)&lt;br /&gt;
 for cl in &#039;issue&#039;, &#039;file&#039;, &#039;msg&#039;, &#039;keyword&#039;, &#039;priority&#039;, &#039;status&#039;:&lt;br /&gt;
     db.security.addPermissionToRole(&#039;Anonymous&#039;, &#039;View&#039;, cl)&lt;br /&gt;
&lt;br /&gt;
=== Logo einfügen ===&lt;br /&gt;
&lt;br /&gt;
In der linken oberen Ecke ist Platz für ein eigenes Logo oder eine Überschrift.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_main.jpg]]&lt;br /&gt;
&lt;br /&gt;
Bearbeitet werden muss die Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/page.html&lt;br /&gt;
&lt;br /&gt;
in der Tabellenzelle&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;td class=&amp;quot;page-header-left&amp;quot;&amp;gt;&amp;lt;code&amp;gt;&amp;amp;amp;nbsp;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn ein Logo mit einem Link hinterlegt wird, erscheint standardmäßig ein blauer Rahmen um die Grafik. Das kann unerwünscht sein. Unterdrücken kann man diesen Rahmen mit dem Zusatz&lt;br /&gt;
&lt;br /&gt;
 a img&lt;br /&gt;
 {&lt;br /&gt;
   border: none;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/style.css&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Kategorien farblich absetzen ===&lt;br /&gt;
&lt;br /&gt;
Damit die Priorität etwas hervorsticht, kann man die Kategorien farblich absetzen. Es bietet sich an, eine Legende vor und hinter der Aufgaben (issue) Liste einzufügen. Wir formatieren die Legende später per CSS, daher geben wir ihr auch eine CSS-Klasse mit.&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies bewerkstelligt man in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/issue.index.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
an den Stellen&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tal:block tal:define=&amp;quot;batch request/batch&amp;quot; tal:condition=&amp;quot;context/is_view_ok&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;list&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
(= über der Aufgaben-Liste)&lt;br /&gt;
&lt;br /&gt;
und&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/metal:index&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;lt;a tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;,&lt;br /&gt;
            {&#039;@action&#039;:&#039;export_csv&#039;})&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Download as CSV&amp;lt;/a&amp;gt;&lt;br /&gt;
(= unter der Aufgaben-Liste)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der fertige Abschnitt &#039;&#039;&#039;über&#039;&#039;&#039; der Aufgaben-Liste sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;tal:block tal:define=&amp;quot;batch request/batch&amp;quot; tal:condition=&amp;quot;context/is_view_ok&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;list&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der fertige Abschnitt &#039;&#039;&#039;unter&#039;&#039;&#039; der Aufgaben-Liste sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt; &amp;lt;/metal:index&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;lt;a tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;,&lt;br /&gt;
            {&#039;@action&#039;:&#039;export_csv&#039;})&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Download as CSV&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit auch die Aufgaben in der entsprechenden Farbe erscheinen, passt man noch die Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/issue.index.html&lt;br /&gt;
&lt;br /&gt;
an. Die Zeilen&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td tal:condition=&amp;quot;request/show/priority&amp;quot;&lt;br /&gt;
       tal:content=&amp;quot;python:i.priority.plain() or default&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ändert man in&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tr&#039;&#039;&#039; tal:attributes=&amp;quot;class string:priority-${i/priority/plain}&amp;quot;&#039;&#039;&#039;&amp;gt;&lt;br /&gt;
   &amp;lt;td tal:condition=&amp;quot;request/show/priority&amp;quot;&lt;br /&gt;
       tal:content=&amp;quot;python:i.priority.plain() or default&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Schluss muss man noch die CSS-Formatierungen ergänzen in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/style.css&lt;br /&gt;
&lt;br /&gt;
Hier ist z.B. ein solcher Block einzufügen:&lt;br /&gt;
&lt;br /&gt;
 tr.priority-critical td, .priority-critical&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FF8989;&lt;br /&gt;
   color: #ffffff;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-critical td a:link&lt;br /&gt;
 {&lt;br /&gt;
   color: #ffffff;&lt;br /&gt;
   font-weight: bold;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-urgent td, .priority-urgent&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FFD089;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-bug td, .priority-bug&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FFFE89&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-feature td, .priority-feature&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #C0DDFF;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-wish td, .priority-wish&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #C0FFCC;&lt;br /&gt;
 }&lt;br /&gt;
 table.color-reference&lt;br /&gt;
 {&lt;br /&gt;
   margin-top: 10px;&lt;br /&gt;
   margin-bottom: 30px;&lt;br /&gt;
 }&lt;br /&gt;
 .color-reference td&lt;br /&gt;
 {&lt;br /&gt;
   width: 100px;&lt;br /&gt;
   text-align: center;&lt;br /&gt;
   font-weight: bold;&lt;br /&gt;
   border: 1px solid #ababab;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_legende.jpg]]&lt;br /&gt;
&lt;br /&gt;
=== Menüpunkt für &amp;quot;Erledigte&amp;quot; Aufgaben ergänzen ===&lt;br /&gt;
&lt;br /&gt;
In der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/page.html&lt;br /&gt;
&lt;br /&gt;
ist diese Textstelle&lt;br /&gt;
&lt;br /&gt;
 status_notresolved string:-1,1,2,3,4,5,6,7;&lt;br /&gt;
&lt;br /&gt;
um eine Zeile zu erweitern:&lt;br /&gt;
&lt;br /&gt;
 status_notresolved string:-1,1,2,3,4,5,6,7;&lt;br /&gt;
 &#039;&#039;&#039;status_resolved string:8;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Außerdem ist noch &lt;br /&gt;
&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Show All&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zu ersetzen durch:&lt;br /&gt;
&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Show All&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
       &amp;lt;a href=&amp;quot;#&amp;quot;&lt;br /&gt;
       tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;, {&lt;br /&gt;
      &#039;@sort&#039;: &#039;-activity&#039;,&lt;br /&gt;
      &#039;@group&#039;: &#039;priority&#039;,&lt;br /&gt;
      &#039;@filter&#039;: &#039;status&#039;,&lt;br /&gt;
      &#039;@columns&#039;: columns_showall,&lt;br /&gt;
      &#039;@search_text&#039;: &#039;&#039;,&lt;br /&gt;
      &#039;status&#039;: status_resolved,&lt;br /&gt;
      &#039;@dispname&#039;: i18n.gettext(&#039;Erledigte anzeigen&#039;),&lt;br /&gt;
     })&amp;quot;&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;erledigte anzeigen&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TODO: Kann jemand an dieser Stelle beschreiben wie man den Text unter Berücksichtigung der Internationalisierung angibt. &lt;br /&gt;
&lt;br /&gt;
Das Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_erledigte.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;br /&gt;
[[Kategorie:Software]]&lt;/div&gt;</summary>
		<author><name>Mih17-bernhard</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Roundup&amp;diff=4980</id>
		<title>Roundup</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Roundup&amp;diff=4980"/>
		<updated>2019-09-07T08:17:46Z</updated>

		<summary type="html">&lt;p&gt;Mih17-bernhard: /* .htaccess-Datei für cgi konfigurieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation roundup issue tracker (cgi-bin) ==&lt;br /&gt;
&lt;br /&gt;
Die allgemeine Installationsanleitung für roundup findet man unter http://roundup-tracker.org/docs/installation.html&lt;br /&gt;
&lt;br /&gt;
Im Folgenden soll die Installation bei Hostsharing in einem WEB-Paket im cgi-bin einer Domain &#039;&#039;&#039;ohne eigene httpd.conf&#039;&#039;&#039; beschrieben werden.&lt;br /&gt;
Das Beispiel beschreibt die nötigen Schritte für den Domain-Admin innerhalb des WEB-Paketes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neueste Quellen per Mercurial besorgen ===&lt;br /&gt;
&lt;br /&gt;
hg clone http://hg.code.sf.net/p/roundup/code /home/pacs/xyz00/users/USERNAME/roundup&lt;br /&gt;
&lt;br /&gt;
=== Installation der tracker-Software ===&lt;br /&gt;
&lt;br /&gt;
 python setup.py install --prefix=/home/pacs/xyz00/users/USERNAME/roundup/install --install-scripts=/home/pacs/xyz00/users/USERNAME/roundup/bin&lt;br /&gt;
&lt;br /&gt;
=== Anpassen der Umgebungsvariablen ===&lt;br /&gt;
&lt;br /&gt;
In der bash-Umgebung:&lt;br /&gt;
&lt;br /&gt;
 export PATH=$PATH:/home/pacs/xyz00/users/USERNAME/roundup/bin&lt;br /&gt;
 export PYTHONPATH=$PYTHONPATH:/home/pacs/xyz00/users/USERNAME/roundup/install/lib/python2.5/site-packages/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am besten trägt man diese beiden Zeilen in der Datei &amp;lt;code&amp;gt;.bash_profile&amp;lt;/code&amp;gt; ein, dann stehen die Pfade beim starten der Shell direkt zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
 nano ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
=== Installation eines neuen Trackers ===&lt;br /&gt;
&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/roundup/bin/roundup-admin install&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
 roundup-admin install&lt;br /&gt;
&lt;br /&gt;
(Wenn man die Umgebungsvariablen wie im Abschnitt zuvor beschrieben konfiguriert hat.)&lt;br /&gt;
&lt;br /&gt;
Dabei werden folgende Eingaben abgefragt (Eingaben nur beispielhaft):&lt;br /&gt;
&lt;br /&gt;
 Enter tracker home: &#039;&#039;&#039;/pfad/zum/tracker/home&#039;&#039;&#039;&lt;br /&gt;
 Templates: minimal, classic&lt;br /&gt;
 Select template [classic]: &#039;&#039;&#039;classic&#039;&#039;&#039;&lt;br /&gt;
 Back ends: anydbm, mysql, sqlite, postgresql&lt;br /&gt;
 Select backend [anydbm]: &#039;&#039;&#039;sqlite&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;tracker home&amp;quot; bezeichnet dabei ein Verzeichnis das man zuvor in seinem Home angelegt hat. Man kann auch mehrere Tracker-Instanzen parallel betreiben, die eigene &amp;quot;tracker home&amp;quot; bekommen.&lt;br /&gt;
Beispiel: ~/roundup-tracker-projects/my-first-tracker&lt;br /&gt;
&lt;br /&gt;
Beim Betrieb mit Mysql (um Backups zu ermöglichen die sicher konsistent sind):   &lt;br /&gt;
* bei &amp;quot;Select backend&amp;quot; mysql angeben&lt;br /&gt;
* mit hsadmin einen DB-User erzeugen&lt;br /&gt;
* mit hsadmin eine DB erzeugen und den DB-User zuweisen&lt;br /&gt;
* DB, DB-User und Passwort des DB-Users sowie localhost als host (siehe nachfolgender Abschnitt) in config.ini in der Sektion rdbms angeben.&lt;br /&gt;
  &lt;br /&gt;
==== Tracker anpassen ====&lt;br /&gt;
&lt;br /&gt;
 nano /home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/config.ini&lt;br /&gt;
&lt;br /&gt;
Hier müssen zumindest diese Variablen angepasst werden:&lt;br /&gt;
&lt;br /&gt;
 admin_email = mail@example.com&lt;br /&gt;
 dispatcher_email = mail@example.com&lt;br /&gt;
 name = TRACKERBESCHREIBUNG&lt;br /&gt;
 web = http(s)://SUBDOMAIN.example.com/&lt;br /&gt;
 email = mail@example.com&lt;br /&gt;
 domain = example.com&lt;br /&gt;
 host = localhost&lt;br /&gt;
&lt;br /&gt;
Optional kann man das logging in eine Datei aktivieren:&lt;br /&gt;
&lt;br /&gt;
 filename = /home/pacs/xyz00/users/USERNAME/TRACKERNAME.log&lt;br /&gt;
&lt;br /&gt;
==== Datenbank initialisieren ====&lt;br /&gt;
&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/roundup/bin/roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
 roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
(Nachdem man die Umgebungsvariablen wie oben beschrieben konfiguriert hat.)&lt;br /&gt;
&lt;br /&gt;
=== Subdomain anlegen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /home/pacs/xyz00/users/USERNAME/doms/example.com/subs(-ssl)/SUBDOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein eigenes cgi-verzeichnis für die neue subdomain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi(-ssl)/SUBDOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration &#039;&#039;&#039;mit&#039;&#039;&#039; eigener httpd.conf ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!! Dieser Abschnitt ist mangels eigener httpd.conf ungetestet !!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== cgi-frontend kopieren ====&lt;br /&gt;
&lt;br /&gt;
 cp /home/pacs/xyz00/users/USERNAME/roundup/frontends/roundup.cgi /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi/SUBDOMAIN/&lt;br /&gt;
&lt;br /&gt;
==== cgi-frontend anpassen ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi/SUBDOMAIN/roundup.cgi&amp;lt;/code&amp;gt;&lt;br /&gt;
 TRACKER_HOMES = {&lt;br /&gt;
    &#039;TRACKERNAME&#039;: &#039;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME&#039;,&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== .htaccess-Datei für cgi konfigurieren ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/subs/SUBDOMAIN/.htaccess&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteRule ^(.*)      /cgi-bin/SUBDOMAIN/roundup.cgi/$1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!! ENDE ungetester Abschnitt !!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration &#039;&#039;&#039;ohne&#039;&#039;&#039; eigene httpd.conf ===&lt;br /&gt;
&lt;br /&gt;
==== WSGI-Interface einbinden ====&lt;br /&gt;
&lt;br /&gt;
Ohne eigene httpd.conf benötigt man einen Wrapper (s. [[Flup]]).&lt;br /&gt;
&lt;br /&gt;
Dies legt man in seinem cgi(-ssl) für die subdomain als &amp;lt;code&amp;gt;roundup_stub&amp;lt;/code&amp;gt; ab:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/env python&lt;br /&gt;
 import sys&lt;br /&gt;
 sys.path.append(&amp;quot;/home/pacs/&#039;&#039;&#039;xyz00&#039;&#039;&#039;/users/&#039;&#039;&#039;USERNAME&#039;&#039;&#039;/roundup/install/lib/python2.7/site-packages&amp;quot;)&lt;br /&gt;
 from flup.server.cgi import WSGIServer&lt;br /&gt;
 # obtain the WSGI request dispatcher&lt;br /&gt;
 from roundup.cgi.wsgi_handler import RequestDispatcher&lt;br /&gt;
 tracker_home = &#039;/home/pacs/&#039;&#039;&#039;xyz00&#039;&#039;&#039;/users/&#039;&#039;&#039;USERNAME&#039;&#039;&#039;/roundup/tracker/&#039;&#039;&#039;TRACKERNAME&#039;&#039;&#039;&#039;&lt;br /&gt;
 app = RequestDispatcher(tracker_home)&lt;br /&gt;
 WSGIServer(app).run()&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;hervorgehobenen Stellen&#039;&#039;&#039; sind an die eigenen Gegebenheiten anzupassen.&lt;br /&gt;
&lt;br /&gt;
Anschließend muss man den Wrapper ausführbar machen:&lt;br /&gt;
&lt;br /&gt;
 chmod 755 roundup_stub&lt;br /&gt;
&lt;br /&gt;
Wenn es Fehlern kommt, kann man debugging-Meldungen an den Browser ausgeben lassen. Dazu ergänzt man unter der Zeile &amp;quot;sys.path.append...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 import cgitb&lt;br /&gt;
 cgitb.enable()&lt;br /&gt;
&lt;br /&gt;
==== .htaccess-Datei für cgi konfigurieren ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/subs(ssl)/SUBDOMAIN/.htaccess&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteRule ^(.*)      /cgi-bin/SUBDOMAIN/roundup_stub/$1&lt;br /&gt;
&lt;br /&gt;
== Individualisierung der tracker ==&lt;br /&gt;
&lt;br /&gt;
Die Tracker kann man individuell an die eigenen Wünsche anpassen.&lt;br /&gt;
&lt;br /&gt;
Das Datenbank-Schema liegt z.B. unter&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/tracker/TRACKERNAME/schema.py&lt;br /&gt;
&lt;br /&gt;
Die Datenbank-Initialisierungs-Datei liegt unter&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/tracker/TRACKERNAME/initial_data.py&lt;br /&gt;
&lt;br /&gt;
Zum Übernehmen der Änderungen an der Datenbank muss man die Datenbank neu initialisieren. &#039;&#039;&#039;Achtung: Dabei gehen alle Daten in der DB verloren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
Details zur Individualisierung nennt die Unterseite &amp;quot;Docs&amp;quot; -&amp;gt; &amp;quot;Customising Roundup&amp;quot; (http://roundup-tracker.org/docs/customizing.html).&lt;br /&gt;
&lt;br /&gt;
=== Registrieren verhindern ===&lt;br /&gt;
&lt;br /&gt;
Um nur manuell ergänzte Benutzer zuzulassen, muss man der Rolle Anonymous das Recht &amp;quot;Register&amp;quot; nehmen. Das bewerkstelligt man durch auskommentieren der letzten Zeile in diesem Abschnitt der datei &amp;lt;code&amp;gt;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/schema.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # Assign the appropriate permissions to the anonymous user&#039;s Anonymous&lt;br /&gt;
 # Role. Choices here are:&lt;br /&gt;
 # - Allow anonymous users to register&lt;br /&gt;
 db.security.addPermissionToRole(&#039;Anonymous&#039;, &#039;Register&#039;, &#039;user&#039;)&lt;br /&gt;
&lt;br /&gt;
=== Anzeige der issues nur für eingeloggte Benutzer ===&lt;br /&gt;
&lt;br /&gt;
Damit nur eingeloggte Benutzer die issues (Aufgaben) sehen können, muss man der Rolle Anonymous das Recht &amp;quot;View&amp;quot; nehmen. Das bewerkstelligt man durch auskommentieren der letzten beiden Zeilen in diesem Abschnitt der datei &amp;lt;code&amp;gt;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/schema.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # Allow anonymous users access to view issues (and the related, linked&lt;br /&gt;
 # information)&lt;br /&gt;
 for cl in &#039;issue&#039;, &#039;file&#039;, &#039;msg&#039;, &#039;keyword&#039;, &#039;priority&#039;, &#039;status&#039;:&lt;br /&gt;
     db.security.addPermissionToRole(&#039;Anonymous&#039;, &#039;View&#039;, cl)&lt;br /&gt;
&lt;br /&gt;
=== Logo einfügen ===&lt;br /&gt;
&lt;br /&gt;
In der linken oberen Ecke ist Platz für ein eigenes Logo oder eine Überschrift.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_main.jpg]]&lt;br /&gt;
&lt;br /&gt;
Bearbeitet werden muss die Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/page.html&lt;br /&gt;
&lt;br /&gt;
in der Tabellenzelle&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;td class=&amp;quot;page-header-left&amp;quot;&amp;gt;&amp;lt;code&amp;gt;&amp;amp;amp;nbsp;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn ein Logo mit einem Link hinterlegt wird, erscheint standardmäßig ein blauer Rahmen um die Grafik. Das kann unerwünscht sein. Unterdrücken kann man diesen Rahmen mit dem Zusatz&lt;br /&gt;
&lt;br /&gt;
 a img&lt;br /&gt;
 {&lt;br /&gt;
   border: none;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/style.css&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Kategorien farblich absetzen ===&lt;br /&gt;
&lt;br /&gt;
Damit die Priorität etwas hervorsticht, kann man die Kategorien farblich absetzen. Es bietet sich an, eine Legende vor und hinter der Aufgaben (issue) Liste einzufügen. Wir formatieren die Legende später per CSS, daher geben wir ihr auch eine CSS-Klasse mit.&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies bewerkstelligt man in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/issue.index.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
an den Stellen&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tal:block tal:define=&amp;quot;batch request/batch&amp;quot; tal:condition=&amp;quot;context/is_view_ok&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;list&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
(= über der Aufgaben-Liste)&lt;br /&gt;
&lt;br /&gt;
und&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/metal:index&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;lt;a tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;,&lt;br /&gt;
            {&#039;@action&#039;:&#039;export_csv&#039;})&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Download as CSV&amp;lt;/a&amp;gt;&lt;br /&gt;
(= unter der Aufgaben-Liste)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der fertige Abschnitt &#039;&#039;&#039;über&#039;&#039;&#039; der Aufgaben-Liste sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;tal:block tal:define=&amp;quot;batch request/batch&amp;quot; tal:condition=&amp;quot;context/is_view_ok&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;list&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der fertige Abschnitt &#039;&#039;&#039;unter&#039;&#039;&#039; der Aufgaben-Liste sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt; &amp;lt;/metal:index&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;lt;a tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;,&lt;br /&gt;
            {&#039;@action&#039;:&#039;export_csv&#039;})&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Download as CSV&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit auch die Aufgaben in der entsprechenden Farbe erscheinen, passt man noch die Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/issue.index.html&lt;br /&gt;
&lt;br /&gt;
an. Die Zeilen&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td tal:condition=&amp;quot;request/show/priority&amp;quot;&lt;br /&gt;
       tal:content=&amp;quot;python:i.priority.plain() or default&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ändert man in&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tr&#039;&#039;&#039; tal:attributes=&amp;quot;class string:priority-${i/priority/plain}&amp;quot;&#039;&#039;&#039;&amp;gt;&lt;br /&gt;
   &amp;lt;td tal:condition=&amp;quot;request/show/priority&amp;quot;&lt;br /&gt;
       tal:content=&amp;quot;python:i.priority.plain() or default&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Schluss muss man noch die CSS-Formatierungen ergänzen in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/style.css&lt;br /&gt;
&lt;br /&gt;
Hier ist z.B. ein solcher Block einzufügen:&lt;br /&gt;
&lt;br /&gt;
 tr.priority-critical td, .priority-critical&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FF8989;&lt;br /&gt;
   color: #ffffff;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-critical td a:link&lt;br /&gt;
 {&lt;br /&gt;
   color: #ffffff;&lt;br /&gt;
   font-weight: bold;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-urgent td, .priority-urgent&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FFD089;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-bug td, .priority-bug&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FFFE89&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-feature td, .priority-feature&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #C0DDFF;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-wish td, .priority-wish&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #C0FFCC;&lt;br /&gt;
 }&lt;br /&gt;
 table.color-reference&lt;br /&gt;
 {&lt;br /&gt;
   margin-top: 10px;&lt;br /&gt;
   margin-bottom: 30px;&lt;br /&gt;
 }&lt;br /&gt;
 .color-reference td&lt;br /&gt;
 {&lt;br /&gt;
   width: 100px;&lt;br /&gt;
   text-align: center;&lt;br /&gt;
   font-weight: bold;&lt;br /&gt;
   border: 1px solid #ababab;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_legende.jpg]]&lt;br /&gt;
&lt;br /&gt;
=== Menüpunkt für &amp;quot;Erledigte&amp;quot; Aufgaben ergänzen ===&lt;br /&gt;
&lt;br /&gt;
In der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/page.html&lt;br /&gt;
&lt;br /&gt;
ist diese Textstelle&lt;br /&gt;
&lt;br /&gt;
 status_notresolved string:-1,1,2,3,4,5,6,7;&lt;br /&gt;
&lt;br /&gt;
um eine Zeile zu erweitern:&lt;br /&gt;
&lt;br /&gt;
 status_notresolved string:-1,1,2,3,4,5,6,7;&lt;br /&gt;
 &#039;&#039;&#039;status_resolved string:8;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Außerdem ist noch &lt;br /&gt;
&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Show All&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;issue?@template=search&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Search&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zu ersetzen durch:&lt;br /&gt;
&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Show All&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
       &amp;lt;a href=&amp;quot;#&amp;quot;&lt;br /&gt;
       tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;, {&lt;br /&gt;
      &#039;@sort&#039;: &#039;-activity&#039;,&lt;br /&gt;
      &#039;@group&#039;: &#039;priority&#039;,&lt;br /&gt;
      &#039;@filter&#039;: &#039;status&#039;,&lt;br /&gt;
      &#039;@columns&#039;: columns_showall,&lt;br /&gt;
      &#039;@search_text&#039;: &#039;&#039;,&lt;br /&gt;
      &#039;status&#039;: status_resolved,&lt;br /&gt;
      &#039;@dispname&#039;: i18n.gettext(&#039;Erledigte anzeigen&#039;),&lt;br /&gt;
     })&amp;quot;&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Erledigte anzeigen&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;issue?@template=search&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Search&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_erledigte.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;br /&gt;
[[Kategorie:Software]]&lt;/div&gt;</summary>
		<author><name>Mih17-bernhard</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Roundup&amp;diff=4979</id>
		<title>Roundup</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Roundup&amp;diff=4979"/>
		<updated>2019-09-07T08:17:19Z</updated>

		<summary type="html">&lt;p&gt;Mih17-bernhard: /* WSGI-Interface einbinden */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation roundup issue tracker (cgi-bin) ==&lt;br /&gt;
&lt;br /&gt;
Die allgemeine Installationsanleitung für roundup findet man unter http://roundup-tracker.org/docs/installation.html&lt;br /&gt;
&lt;br /&gt;
Im Folgenden soll die Installation bei Hostsharing in einem WEB-Paket im cgi-bin einer Domain &#039;&#039;&#039;ohne eigene httpd.conf&#039;&#039;&#039; beschrieben werden.&lt;br /&gt;
Das Beispiel beschreibt die nötigen Schritte für den Domain-Admin innerhalb des WEB-Paketes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neueste Quellen per Mercurial besorgen ===&lt;br /&gt;
&lt;br /&gt;
hg clone http://hg.code.sf.net/p/roundup/code /home/pacs/xyz00/users/USERNAME/roundup&lt;br /&gt;
&lt;br /&gt;
=== Installation der tracker-Software ===&lt;br /&gt;
&lt;br /&gt;
 python setup.py install --prefix=/home/pacs/xyz00/users/USERNAME/roundup/install --install-scripts=/home/pacs/xyz00/users/USERNAME/roundup/bin&lt;br /&gt;
&lt;br /&gt;
=== Anpassen der Umgebungsvariablen ===&lt;br /&gt;
&lt;br /&gt;
In der bash-Umgebung:&lt;br /&gt;
&lt;br /&gt;
 export PATH=$PATH:/home/pacs/xyz00/users/USERNAME/roundup/bin&lt;br /&gt;
 export PYTHONPATH=$PYTHONPATH:/home/pacs/xyz00/users/USERNAME/roundup/install/lib/python2.5/site-packages/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am besten trägt man diese beiden Zeilen in der Datei &amp;lt;code&amp;gt;.bash_profile&amp;lt;/code&amp;gt; ein, dann stehen die Pfade beim starten der Shell direkt zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
 nano ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
=== Installation eines neuen Trackers ===&lt;br /&gt;
&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/roundup/bin/roundup-admin install&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
 roundup-admin install&lt;br /&gt;
&lt;br /&gt;
(Wenn man die Umgebungsvariablen wie im Abschnitt zuvor beschrieben konfiguriert hat.)&lt;br /&gt;
&lt;br /&gt;
Dabei werden folgende Eingaben abgefragt (Eingaben nur beispielhaft):&lt;br /&gt;
&lt;br /&gt;
 Enter tracker home: &#039;&#039;&#039;/pfad/zum/tracker/home&#039;&#039;&#039;&lt;br /&gt;
 Templates: minimal, classic&lt;br /&gt;
 Select template [classic]: &#039;&#039;&#039;classic&#039;&#039;&#039;&lt;br /&gt;
 Back ends: anydbm, mysql, sqlite, postgresql&lt;br /&gt;
 Select backend [anydbm]: &#039;&#039;&#039;sqlite&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;tracker home&amp;quot; bezeichnet dabei ein Verzeichnis das man zuvor in seinem Home angelegt hat. Man kann auch mehrere Tracker-Instanzen parallel betreiben, die eigene &amp;quot;tracker home&amp;quot; bekommen.&lt;br /&gt;
Beispiel: ~/roundup-tracker-projects/my-first-tracker&lt;br /&gt;
&lt;br /&gt;
Beim Betrieb mit Mysql (um Backups zu ermöglichen die sicher konsistent sind):   &lt;br /&gt;
* bei &amp;quot;Select backend&amp;quot; mysql angeben&lt;br /&gt;
* mit hsadmin einen DB-User erzeugen&lt;br /&gt;
* mit hsadmin eine DB erzeugen und den DB-User zuweisen&lt;br /&gt;
* DB, DB-User und Passwort des DB-Users sowie localhost als host (siehe nachfolgender Abschnitt) in config.ini in der Sektion rdbms angeben.&lt;br /&gt;
  &lt;br /&gt;
==== Tracker anpassen ====&lt;br /&gt;
&lt;br /&gt;
 nano /home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/config.ini&lt;br /&gt;
&lt;br /&gt;
Hier müssen zumindest diese Variablen angepasst werden:&lt;br /&gt;
&lt;br /&gt;
 admin_email = mail@example.com&lt;br /&gt;
 dispatcher_email = mail@example.com&lt;br /&gt;
 name = TRACKERBESCHREIBUNG&lt;br /&gt;
 web = http(s)://SUBDOMAIN.example.com/&lt;br /&gt;
 email = mail@example.com&lt;br /&gt;
 domain = example.com&lt;br /&gt;
 host = localhost&lt;br /&gt;
&lt;br /&gt;
Optional kann man das logging in eine Datei aktivieren:&lt;br /&gt;
&lt;br /&gt;
 filename = /home/pacs/xyz00/users/USERNAME/TRACKERNAME.log&lt;br /&gt;
&lt;br /&gt;
==== Datenbank initialisieren ====&lt;br /&gt;
&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/roundup/bin/roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
 roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
(Nachdem man die Umgebungsvariablen wie oben beschrieben konfiguriert hat.)&lt;br /&gt;
&lt;br /&gt;
=== Subdomain anlegen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /home/pacs/xyz00/users/USERNAME/doms/example.com/subs(-ssl)/SUBDOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein eigenes cgi-verzeichnis für die neue subdomain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi(-ssl)/SUBDOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration &#039;&#039;&#039;mit&#039;&#039;&#039; eigener httpd.conf ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!! Dieser Abschnitt ist mangels eigener httpd.conf ungetestet !!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== cgi-frontend kopieren ====&lt;br /&gt;
&lt;br /&gt;
 cp /home/pacs/xyz00/users/USERNAME/roundup/frontends/roundup.cgi /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi/SUBDOMAIN/&lt;br /&gt;
&lt;br /&gt;
==== cgi-frontend anpassen ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi/SUBDOMAIN/roundup.cgi&amp;lt;/code&amp;gt;&lt;br /&gt;
 TRACKER_HOMES = {&lt;br /&gt;
    &#039;TRACKERNAME&#039;: &#039;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME&#039;,&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== .htaccess-Datei für cgi konfigurieren ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/subs/SUBDOMAIN/.htaccess&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteRule ^(.*)      /cgi-bin/SUBDOMAIN/roundup.cgi/$1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!! ENDE ungetester Abschnitt !!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration &#039;&#039;&#039;ohne&#039;&#039;&#039; eigene httpd.conf ===&lt;br /&gt;
&lt;br /&gt;
==== WSGI-Interface einbinden ====&lt;br /&gt;
&lt;br /&gt;
Ohne eigene httpd.conf benötigt man einen Wrapper (s. [[Flup]]).&lt;br /&gt;
&lt;br /&gt;
Dies legt man in seinem cgi(-ssl) für die subdomain als &amp;lt;code&amp;gt;roundup_stub&amp;lt;/code&amp;gt; ab:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/env python&lt;br /&gt;
 import sys&lt;br /&gt;
 sys.path.append(&amp;quot;/home/pacs/&#039;&#039;&#039;xyz00&#039;&#039;&#039;/users/&#039;&#039;&#039;USERNAME&#039;&#039;&#039;/roundup/install/lib/python2.7/site-packages&amp;quot;)&lt;br /&gt;
 from flup.server.cgi import WSGIServer&lt;br /&gt;
 # obtain the WSGI request dispatcher&lt;br /&gt;
 from roundup.cgi.wsgi_handler import RequestDispatcher&lt;br /&gt;
 tracker_home = &#039;/home/pacs/&#039;&#039;&#039;xyz00&#039;&#039;&#039;/users/&#039;&#039;&#039;USERNAME&#039;&#039;&#039;/roundup/tracker/&#039;&#039;&#039;TRACKERNAME&#039;&#039;&#039;&#039;&lt;br /&gt;
 app = RequestDispatcher(tracker_home)&lt;br /&gt;
 WSGIServer(app).run()&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;hervorgehobenen Stellen&#039;&#039;&#039; sind an die eigenen Gegebenheiten anzupassen.&lt;br /&gt;
&lt;br /&gt;
Anschließend muss man den Wrapper ausführbar machen:&lt;br /&gt;
&lt;br /&gt;
 chmod 755 roundup_stub&lt;br /&gt;
&lt;br /&gt;
Wenn es Fehlern kommt, kann man debugging-Meldungen an den Browser ausgeben lassen. Dazu ergänzt man unter der Zeile &amp;quot;sys.path.append...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 import cgitb&lt;br /&gt;
 cgitb.enable()&lt;br /&gt;
&lt;br /&gt;
==== .htaccess-Datei für cgi konfigurieren ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/subs/SUBDOMAIN/.htaccess&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteRule ^(.*)      /cgi-bin/SUBDOMAIN/roundup_stub/$1&lt;br /&gt;
&lt;br /&gt;
== Individualisierung der tracker ==&lt;br /&gt;
&lt;br /&gt;
Die Tracker kann man individuell an die eigenen Wünsche anpassen.&lt;br /&gt;
&lt;br /&gt;
Das Datenbank-Schema liegt z.B. unter&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/tracker/TRACKERNAME/schema.py&lt;br /&gt;
&lt;br /&gt;
Die Datenbank-Initialisierungs-Datei liegt unter&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/tracker/TRACKERNAME/initial_data.py&lt;br /&gt;
&lt;br /&gt;
Zum Übernehmen der Änderungen an der Datenbank muss man die Datenbank neu initialisieren. &#039;&#039;&#039;Achtung: Dabei gehen alle Daten in der DB verloren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
Details zur Individualisierung nennt die Unterseite &amp;quot;Docs&amp;quot; -&amp;gt; &amp;quot;Customising Roundup&amp;quot; (http://roundup-tracker.org/docs/customizing.html).&lt;br /&gt;
&lt;br /&gt;
=== Registrieren verhindern ===&lt;br /&gt;
&lt;br /&gt;
Um nur manuell ergänzte Benutzer zuzulassen, muss man der Rolle Anonymous das Recht &amp;quot;Register&amp;quot; nehmen. Das bewerkstelligt man durch auskommentieren der letzten Zeile in diesem Abschnitt der datei &amp;lt;code&amp;gt;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/schema.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # Assign the appropriate permissions to the anonymous user&#039;s Anonymous&lt;br /&gt;
 # Role. Choices here are:&lt;br /&gt;
 # - Allow anonymous users to register&lt;br /&gt;
 db.security.addPermissionToRole(&#039;Anonymous&#039;, &#039;Register&#039;, &#039;user&#039;)&lt;br /&gt;
&lt;br /&gt;
=== Anzeige der issues nur für eingeloggte Benutzer ===&lt;br /&gt;
&lt;br /&gt;
Damit nur eingeloggte Benutzer die issues (Aufgaben) sehen können, muss man der Rolle Anonymous das Recht &amp;quot;View&amp;quot; nehmen. Das bewerkstelligt man durch auskommentieren der letzten beiden Zeilen in diesem Abschnitt der datei &amp;lt;code&amp;gt;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/schema.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # Allow anonymous users access to view issues (and the related, linked&lt;br /&gt;
 # information)&lt;br /&gt;
 for cl in &#039;issue&#039;, &#039;file&#039;, &#039;msg&#039;, &#039;keyword&#039;, &#039;priority&#039;, &#039;status&#039;:&lt;br /&gt;
     db.security.addPermissionToRole(&#039;Anonymous&#039;, &#039;View&#039;, cl)&lt;br /&gt;
&lt;br /&gt;
=== Logo einfügen ===&lt;br /&gt;
&lt;br /&gt;
In der linken oberen Ecke ist Platz für ein eigenes Logo oder eine Überschrift.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_main.jpg]]&lt;br /&gt;
&lt;br /&gt;
Bearbeitet werden muss die Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/page.html&lt;br /&gt;
&lt;br /&gt;
in der Tabellenzelle&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;td class=&amp;quot;page-header-left&amp;quot;&amp;gt;&amp;lt;code&amp;gt;&amp;amp;amp;nbsp;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn ein Logo mit einem Link hinterlegt wird, erscheint standardmäßig ein blauer Rahmen um die Grafik. Das kann unerwünscht sein. Unterdrücken kann man diesen Rahmen mit dem Zusatz&lt;br /&gt;
&lt;br /&gt;
 a img&lt;br /&gt;
 {&lt;br /&gt;
   border: none;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/style.css&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Kategorien farblich absetzen ===&lt;br /&gt;
&lt;br /&gt;
Damit die Priorität etwas hervorsticht, kann man die Kategorien farblich absetzen. Es bietet sich an, eine Legende vor und hinter der Aufgaben (issue) Liste einzufügen. Wir formatieren die Legende später per CSS, daher geben wir ihr auch eine CSS-Klasse mit.&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies bewerkstelligt man in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/issue.index.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
an den Stellen&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tal:block tal:define=&amp;quot;batch request/batch&amp;quot; tal:condition=&amp;quot;context/is_view_ok&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;list&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
(= über der Aufgaben-Liste)&lt;br /&gt;
&lt;br /&gt;
und&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/metal:index&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;lt;a tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;,&lt;br /&gt;
            {&#039;@action&#039;:&#039;export_csv&#039;})&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Download as CSV&amp;lt;/a&amp;gt;&lt;br /&gt;
(= unter der Aufgaben-Liste)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der fertige Abschnitt &#039;&#039;&#039;über&#039;&#039;&#039; der Aufgaben-Liste sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;tal:block tal:define=&amp;quot;batch request/batch&amp;quot; tal:condition=&amp;quot;context/is_view_ok&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;list&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der fertige Abschnitt &#039;&#039;&#039;unter&#039;&#039;&#039; der Aufgaben-Liste sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt; &amp;lt;/metal:index&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;lt;a tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;,&lt;br /&gt;
            {&#039;@action&#039;:&#039;export_csv&#039;})&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Download as CSV&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit auch die Aufgaben in der entsprechenden Farbe erscheinen, passt man noch die Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/issue.index.html&lt;br /&gt;
&lt;br /&gt;
an. Die Zeilen&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td tal:condition=&amp;quot;request/show/priority&amp;quot;&lt;br /&gt;
       tal:content=&amp;quot;python:i.priority.plain() or default&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ändert man in&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tr&#039;&#039;&#039; tal:attributes=&amp;quot;class string:priority-${i/priority/plain}&amp;quot;&#039;&#039;&#039;&amp;gt;&lt;br /&gt;
   &amp;lt;td tal:condition=&amp;quot;request/show/priority&amp;quot;&lt;br /&gt;
       tal:content=&amp;quot;python:i.priority.plain() or default&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Schluss muss man noch die CSS-Formatierungen ergänzen in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/style.css&lt;br /&gt;
&lt;br /&gt;
Hier ist z.B. ein solcher Block einzufügen:&lt;br /&gt;
&lt;br /&gt;
 tr.priority-critical td, .priority-critical&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FF8989;&lt;br /&gt;
   color: #ffffff;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-critical td a:link&lt;br /&gt;
 {&lt;br /&gt;
   color: #ffffff;&lt;br /&gt;
   font-weight: bold;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-urgent td, .priority-urgent&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FFD089;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-bug td, .priority-bug&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FFFE89&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-feature td, .priority-feature&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #C0DDFF;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-wish td, .priority-wish&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #C0FFCC;&lt;br /&gt;
 }&lt;br /&gt;
 table.color-reference&lt;br /&gt;
 {&lt;br /&gt;
   margin-top: 10px;&lt;br /&gt;
   margin-bottom: 30px;&lt;br /&gt;
 }&lt;br /&gt;
 .color-reference td&lt;br /&gt;
 {&lt;br /&gt;
   width: 100px;&lt;br /&gt;
   text-align: center;&lt;br /&gt;
   font-weight: bold;&lt;br /&gt;
   border: 1px solid #ababab;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_legende.jpg]]&lt;br /&gt;
&lt;br /&gt;
=== Menüpunkt für &amp;quot;Erledigte&amp;quot; Aufgaben ergänzen ===&lt;br /&gt;
&lt;br /&gt;
In der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/page.html&lt;br /&gt;
&lt;br /&gt;
ist diese Textstelle&lt;br /&gt;
&lt;br /&gt;
 status_notresolved string:-1,1,2,3,4,5,6,7;&lt;br /&gt;
&lt;br /&gt;
um eine Zeile zu erweitern:&lt;br /&gt;
&lt;br /&gt;
 status_notresolved string:-1,1,2,3,4,5,6,7;&lt;br /&gt;
 &#039;&#039;&#039;status_resolved string:8;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Außerdem ist noch &lt;br /&gt;
&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Show All&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;issue?@template=search&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Search&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zu ersetzen durch:&lt;br /&gt;
&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Show All&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
       &amp;lt;a href=&amp;quot;#&amp;quot;&lt;br /&gt;
       tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;, {&lt;br /&gt;
      &#039;@sort&#039;: &#039;-activity&#039;,&lt;br /&gt;
      &#039;@group&#039;: &#039;priority&#039;,&lt;br /&gt;
      &#039;@filter&#039;: &#039;status&#039;,&lt;br /&gt;
      &#039;@columns&#039;: columns_showall,&lt;br /&gt;
      &#039;@search_text&#039;: &#039;&#039;,&lt;br /&gt;
      &#039;status&#039;: status_resolved,&lt;br /&gt;
      &#039;@dispname&#039;: i18n.gettext(&#039;Erledigte anzeigen&#039;),&lt;br /&gt;
     })&amp;quot;&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Erledigte anzeigen&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;issue?@template=search&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Search&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_erledigte.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;br /&gt;
[[Kategorie:Software]]&lt;/div&gt;</summary>
		<author><name>Mih17-bernhard</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Roundup&amp;diff=4978</id>
		<title>Roundup</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Roundup&amp;diff=4978"/>
		<updated>2019-09-07T08:16:04Z</updated>

		<summary type="html">&lt;p&gt;Mih17-bernhard: /* Subdomain anlegen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation roundup issue tracker (cgi-bin) ==&lt;br /&gt;
&lt;br /&gt;
Die allgemeine Installationsanleitung für roundup findet man unter http://roundup-tracker.org/docs/installation.html&lt;br /&gt;
&lt;br /&gt;
Im Folgenden soll die Installation bei Hostsharing in einem WEB-Paket im cgi-bin einer Domain &#039;&#039;&#039;ohne eigene httpd.conf&#039;&#039;&#039; beschrieben werden.&lt;br /&gt;
Das Beispiel beschreibt die nötigen Schritte für den Domain-Admin innerhalb des WEB-Paketes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neueste Quellen per Mercurial besorgen ===&lt;br /&gt;
&lt;br /&gt;
hg clone http://hg.code.sf.net/p/roundup/code /home/pacs/xyz00/users/USERNAME/roundup&lt;br /&gt;
&lt;br /&gt;
=== Installation der tracker-Software ===&lt;br /&gt;
&lt;br /&gt;
 python setup.py install --prefix=/home/pacs/xyz00/users/USERNAME/roundup/install --install-scripts=/home/pacs/xyz00/users/USERNAME/roundup/bin&lt;br /&gt;
&lt;br /&gt;
=== Anpassen der Umgebungsvariablen ===&lt;br /&gt;
&lt;br /&gt;
In der bash-Umgebung:&lt;br /&gt;
&lt;br /&gt;
 export PATH=$PATH:/home/pacs/xyz00/users/USERNAME/roundup/bin&lt;br /&gt;
 export PYTHONPATH=$PYTHONPATH:/home/pacs/xyz00/users/USERNAME/roundup/install/lib/python2.5/site-packages/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am besten trägt man diese beiden Zeilen in der Datei &amp;lt;code&amp;gt;.bash_profile&amp;lt;/code&amp;gt; ein, dann stehen die Pfade beim starten der Shell direkt zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
 nano ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
=== Installation eines neuen Trackers ===&lt;br /&gt;
&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/roundup/bin/roundup-admin install&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
 roundup-admin install&lt;br /&gt;
&lt;br /&gt;
(Wenn man die Umgebungsvariablen wie im Abschnitt zuvor beschrieben konfiguriert hat.)&lt;br /&gt;
&lt;br /&gt;
Dabei werden folgende Eingaben abgefragt (Eingaben nur beispielhaft):&lt;br /&gt;
&lt;br /&gt;
 Enter tracker home: &#039;&#039;&#039;/pfad/zum/tracker/home&#039;&#039;&#039;&lt;br /&gt;
 Templates: minimal, classic&lt;br /&gt;
 Select template [classic]: &#039;&#039;&#039;classic&#039;&#039;&#039;&lt;br /&gt;
 Back ends: anydbm, mysql, sqlite, postgresql&lt;br /&gt;
 Select backend [anydbm]: &#039;&#039;&#039;sqlite&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;tracker home&amp;quot; bezeichnet dabei ein Verzeichnis das man zuvor in seinem Home angelegt hat. Man kann auch mehrere Tracker-Instanzen parallel betreiben, die eigene &amp;quot;tracker home&amp;quot; bekommen.&lt;br /&gt;
Beispiel: ~/roundup-tracker-projects/my-first-tracker&lt;br /&gt;
&lt;br /&gt;
Beim Betrieb mit Mysql (um Backups zu ermöglichen die sicher konsistent sind):   &lt;br /&gt;
* bei &amp;quot;Select backend&amp;quot; mysql angeben&lt;br /&gt;
* mit hsadmin einen DB-User erzeugen&lt;br /&gt;
* mit hsadmin eine DB erzeugen und den DB-User zuweisen&lt;br /&gt;
* DB, DB-User und Passwort des DB-Users sowie localhost als host (siehe nachfolgender Abschnitt) in config.ini in der Sektion rdbms angeben.&lt;br /&gt;
  &lt;br /&gt;
==== Tracker anpassen ====&lt;br /&gt;
&lt;br /&gt;
 nano /home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/config.ini&lt;br /&gt;
&lt;br /&gt;
Hier müssen zumindest diese Variablen angepasst werden:&lt;br /&gt;
&lt;br /&gt;
 admin_email = mail@example.com&lt;br /&gt;
 dispatcher_email = mail@example.com&lt;br /&gt;
 name = TRACKERBESCHREIBUNG&lt;br /&gt;
 web = http(s)://SUBDOMAIN.example.com/&lt;br /&gt;
 email = mail@example.com&lt;br /&gt;
 domain = example.com&lt;br /&gt;
 host = localhost&lt;br /&gt;
&lt;br /&gt;
Optional kann man das logging in eine Datei aktivieren:&lt;br /&gt;
&lt;br /&gt;
 filename = /home/pacs/xyz00/users/USERNAME/TRACKERNAME.log&lt;br /&gt;
&lt;br /&gt;
==== Datenbank initialisieren ====&lt;br /&gt;
&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/roundup/bin/roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
 roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
(Nachdem man die Umgebungsvariablen wie oben beschrieben konfiguriert hat.)&lt;br /&gt;
&lt;br /&gt;
=== Subdomain anlegen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /home/pacs/xyz00/users/USERNAME/doms/example.com/subs(-ssl)/SUBDOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein eigenes cgi-verzeichnis für die neue subdomain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi(-ssl)/SUBDOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration &#039;&#039;&#039;mit&#039;&#039;&#039; eigener httpd.conf ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!! Dieser Abschnitt ist mangels eigener httpd.conf ungetestet !!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== cgi-frontend kopieren ====&lt;br /&gt;
&lt;br /&gt;
 cp /home/pacs/xyz00/users/USERNAME/roundup/frontends/roundup.cgi /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi/SUBDOMAIN/&lt;br /&gt;
&lt;br /&gt;
==== cgi-frontend anpassen ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi/SUBDOMAIN/roundup.cgi&amp;lt;/code&amp;gt;&lt;br /&gt;
 TRACKER_HOMES = {&lt;br /&gt;
    &#039;TRACKERNAME&#039;: &#039;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME&#039;,&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== .htaccess-Datei für cgi konfigurieren ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/subs/SUBDOMAIN/.htaccess&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteRule ^(.*)      /cgi-bin/SUBDOMAIN/roundup.cgi/$1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!! ENDE ungetester Abschnitt !!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration &#039;&#039;&#039;ohne&#039;&#039;&#039; eigene httpd.conf ===&lt;br /&gt;
&lt;br /&gt;
==== WSGI-Interface einbinden ====&lt;br /&gt;
&lt;br /&gt;
Ohne eigene httpd.conf benötigt man einen Wrapper (s. [[Flup]]).&lt;br /&gt;
&lt;br /&gt;
Dies legt man in seinem cgi-bin für die subdomain als &amp;lt;code&amp;gt;roundup_stub&amp;lt;/code&amp;gt; ab:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/env python&lt;br /&gt;
 import sys&lt;br /&gt;
 sys.path.append(&amp;quot;/home/pacs/&#039;&#039;&#039;xyz00&#039;&#039;&#039;/users/&#039;&#039;&#039;USERNAME&#039;&#039;&#039;/roundup/install/lib/python2.5/site-packages&amp;quot;)&lt;br /&gt;
 from flup.server.cgi import WSGIServer&lt;br /&gt;
 # obtain the WSGI request dispatcher&lt;br /&gt;
 from roundup.cgi.wsgi_handler import RequestDispatcher&lt;br /&gt;
 tracker_home = &#039;/home/pacs/&#039;&#039;&#039;xyz00&#039;&#039;&#039;/users/&#039;&#039;&#039;USERNAME&#039;&#039;&#039;/roundup/tracker/&#039;&#039;&#039;TRACKERNAME&#039;&#039;&#039;&#039;&lt;br /&gt;
 app = RequestDispatcher(tracker_home)&lt;br /&gt;
 WSGIServer(app).run()&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;hervorgehobenen Stellen&#039;&#039;&#039; sind an die eigenen Gegebenheiten anzupassen.&lt;br /&gt;
&lt;br /&gt;
Anschließend muss man den Wrapper ausführbar machen:&lt;br /&gt;
&lt;br /&gt;
 chmod 755 roundup_stub&lt;br /&gt;
&lt;br /&gt;
Wenn es Fehlern kommt, kann man debugging-Meldungen an den Browser ausgeben lassen. Dazu ergänzt man unter der Zeile &amp;quot;sys.path.append...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 import cgitb&lt;br /&gt;
 cgitb.enable()&lt;br /&gt;
&lt;br /&gt;
==== .htaccess-Datei für cgi konfigurieren ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/subs/SUBDOMAIN/.htaccess&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteRule ^(.*)      /cgi-bin/SUBDOMAIN/roundup_stub/$1&lt;br /&gt;
&lt;br /&gt;
== Individualisierung der tracker ==&lt;br /&gt;
&lt;br /&gt;
Die Tracker kann man individuell an die eigenen Wünsche anpassen.&lt;br /&gt;
&lt;br /&gt;
Das Datenbank-Schema liegt z.B. unter&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/tracker/TRACKERNAME/schema.py&lt;br /&gt;
&lt;br /&gt;
Die Datenbank-Initialisierungs-Datei liegt unter&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/tracker/TRACKERNAME/initial_data.py&lt;br /&gt;
&lt;br /&gt;
Zum Übernehmen der Änderungen an der Datenbank muss man die Datenbank neu initialisieren. &#039;&#039;&#039;Achtung: Dabei gehen alle Daten in der DB verloren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
Details zur Individualisierung nennt die Unterseite &amp;quot;Docs&amp;quot; -&amp;gt; &amp;quot;Customising Roundup&amp;quot; (http://roundup-tracker.org/docs/customizing.html).&lt;br /&gt;
&lt;br /&gt;
=== Registrieren verhindern ===&lt;br /&gt;
&lt;br /&gt;
Um nur manuell ergänzte Benutzer zuzulassen, muss man der Rolle Anonymous das Recht &amp;quot;Register&amp;quot; nehmen. Das bewerkstelligt man durch auskommentieren der letzten Zeile in diesem Abschnitt der datei &amp;lt;code&amp;gt;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/schema.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # Assign the appropriate permissions to the anonymous user&#039;s Anonymous&lt;br /&gt;
 # Role. Choices here are:&lt;br /&gt;
 # - Allow anonymous users to register&lt;br /&gt;
 db.security.addPermissionToRole(&#039;Anonymous&#039;, &#039;Register&#039;, &#039;user&#039;)&lt;br /&gt;
&lt;br /&gt;
=== Anzeige der issues nur für eingeloggte Benutzer ===&lt;br /&gt;
&lt;br /&gt;
Damit nur eingeloggte Benutzer die issues (Aufgaben) sehen können, muss man der Rolle Anonymous das Recht &amp;quot;View&amp;quot; nehmen. Das bewerkstelligt man durch auskommentieren der letzten beiden Zeilen in diesem Abschnitt der datei &amp;lt;code&amp;gt;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/schema.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # Allow anonymous users access to view issues (and the related, linked&lt;br /&gt;
 # information)&lt;br /&gt;
 for cl in &#039;issue&#039;, &#039;file&#039;, &#039;msg&#039;, &#039;keyword&#039;, &#039;priority&#039;, &#039;status&#039;:&lt;br /&gt;
     db.security.addPermissionToRole(&#039;Anonymous&#039;, &#039;View&#039;, cl)&lt;br /&gt;
&lt;br /&gt;
=== Logo einfügen ===&lt;br /&gt;
&lt;br /&gt;
In der linken oberen Ecke ist Platz für ein eigenes Logo oder eine Überschrift.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_main.jpg]]&lt;br /&gt;
&lt;br /&gt;
Bearbeitet werden muss die Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/page.html&lt;br /&gt;
&lt;br /&gt;
in der Tabellenzelle&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;td class=&amp;quot;page-header-left&amp;quot;&amp;gt;&amp;lt;code&amp;gt;&amp;amp;amp;nbsp;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn ein Logo mit einem Link hinterlegt wird, erscheint standardmäßig ein blauer Rahmen um die Grafik. Das kann unerwünscht sein. Unterdrücken kann man diesen Rahmen mit dem Zusatz&lt;br /&gt;
&lt;br /&gt;
 a img&lt;br /&gt;
 {&lt;br /&gt;
   border: none;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/style.css&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Kategorien farblich absetzen ===&lt;br /&gt;
&lt;br /&gt;
Damit die Priorität etwas hervorsticht, kann man die Kategorien farblich absetzen. Es bietet sich an, eine Legende vor und hinter der Aufgaben (issue) Liste einzufügen. Wir formatieren die Legende später per CSS, daher geben wir ihr auch eine CSS-Klasse mit.&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies bewerkstelligt man in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/issue.index.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
an den Stellen&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tal:block tal:define=&amp;quot;batch request/batch&amp;quot; tal:condition=&amp;quot;context/is_view_ok&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;list&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
(= über der Aufgaben-Liste)&lt;br /&gt;
&lt;br /&gt;
und&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/metal:index&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;lt;a tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;,&lt;br /&gt;
            {&#039;@action&#039;:&#039;export_csv&#039;})&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Download as CSV&amp;lt;/a&amp;gt;&lt;br /&gt;
(= unter der Aufgaben-Liste)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der fertige Abschnitt &#039;&#039;&#039;über&#039;&#039;&#039; der Aufgaben-Liste sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;tal:block tal:define=&amp;quot;batch request/batch&amp;quot; tal:condition=&amp;quot;context/is_view_ok&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;list&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der fertige Abschnitt &#039;&#039;&#039;unter&#039;&#039;&#039; der Aufgaben-Liste sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt; &amp;lt;/metal:index&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;lt;a tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;,&lt;br /&gt;
            {&#039;@action&#039;:&#039;export_csv&#039;})&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Download as CSV&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit auch die Aufgaben in der entsprechenden Farbe erscheinen, passt man noch die Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/issue.index.html&lt;br /&gt;
&lt;br /&gt;
an. Die Zeilen&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td tal:condition=&amp;quot;request/show/priority&amp;quot;&lt;br /&gt;
       tal:content=&amp;quot;python:i.priority.plain() or default&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ändert man in&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tr&#039;&#039;&#039; tal:attributes=&amp;quot;class string:priority-${i/priority/plain}&amp;quot;&#039;&#039;&#039;&amp;gt;&lt;br /&gt;
   &amp;lt;td tal:condition=&amp;quot;request/show/priority&amp;quot;&lt;br /&gt;
       tal:content=&amp;quot;python:i.priority.plain() or default&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Schluss muss man noch die CSS-Formatierungen ergänzen in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/style.css&lt;br /&gt;
&lt;br /&gt;
Hier ist z.B. ein solcher Block einzufügen:&lt;br /&gt;
&lt;br /&gt;
 tr.priority-critical td, .priority-critical&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FF8989;&lt;br /&gt;
   color: #ffffff;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-critical td a:link&lt;br /&gt;
 {&lt;br /&gt;
   color: #ffffff;&lt;br /&gt;
   font-weight: bold;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-urgent td, .priority-urgent&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FFD089;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-bug td, .priority-bug&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FFFE89&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-feature td, .priority-feature&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #C0DDFF;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-wish td, .priority-wish&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #C0FFCC;&lt;br /&gt;
 }&lt;br /&gt;
 table.color-reference&lt;br /&gt;
 {&lt;br /&gt;
   margin-top: 10px;&lt;br /&gt;
   margin-bottom: 30px;&lt;br /&gt;
 }&lt;br /&gt;
 .color-reference td&lt;br /&gt;
 {&lt;br /&gt;
   width: 100px;&lt;br /&gt;
   text-align: center;&lt;br /&gt;
   font-weight: bold;&lt;br /&gt;
   border: 1px solid #ababab;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_legende.jpg]]&lt;br /&gt;
&lt;br /&gt;
=== Menüpunkt für &amp;quot;Erledigte&amp;quot; Aufgaben ergänzen ===&lt;br /&gt;
&lt;br /&gt;
In der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/page.html&lt;br /&gt;
&lt;br /&gt;
ist diese Textstelle&lt;br /&gt;
&lt;br /&gt;
 status_notresolved string:-1,1,2,3,4,5,6,7;&lt;br /&gt;
&lt;br /&gt;
um eine Zeile zu erweitern:&lt;br /&gt;
&lt;br /&gt;
 status_notresolved string:-1,1,2,3,4,5,6,7;&lt;br /&gt;
 &#039;&#039;&#039;status_resolved string:8;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Außerdem ist noch &lt;br /&gt;
&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Show All&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;issue?@template=search&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Search&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zu ersetzen durch:&lt;br /&gt;
&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Show All&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
       &amp;lt;a href=&amp;quot;#&amp;quot;&lt;br /&gt;
       tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;, {&lt;br /&gt;
      &#039;@sort&#039;: &#039;-activity&#039;,&lt;br /&gt;
      &#039;@group&#039;: &#039;priority&#039;,&lt;br /&gt;
      &#039;@filter&#039;: &#039;status&#039;,&lt;br /&gt;
      &#039;@columns&#039;: columns_showall,&lt;br /&gt;
      &#039;@search_text&#039;: &#039;&#039;,&lt;br /&gt;
      &#039;status&#039;: status_resolved,&lt;br /&gt;
      &#039;@dispname&#039;: i18n.gettext(&#039;Erledigte anzeigen&#039;),&lt;br /&gt;
     })&amp;quot;&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Erledigte anzeigen&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;issue?@template=search&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Search&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_erledigte.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;br /&gt;
[[Kategorie:Software]]&lt;/div&gt;</summary>
		<author><name>Mih17-bernhard</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Roundup&amp;diff=4977</id>
		<title>Roundup</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Roundup&amp;diff=4977"/>
		<updated>2019-09-07T08:14:56Z</updated>

		<summary type="html">&lt;p&gt;Mih17-bernhard: /* Installation eines neuen Trackers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation roundup issue tracker (cgi-bin) ==&lt;br /&gt;
&lt;br /&gt;
Die allgemeine Installationsanleitung für roundup findet man unter http://roundup-tracker.org/docs/installation.html&lt;br /&gt;
&lt;br /&gt;
Im Folgenden soll die Installation bei Hostsharing in einem WEB-Paket im cgi-bin einer Domain &#039;&#039;&#039;ohne eigene httpd.conf&#039;&#039;&#039; beschrieben werden.&lt;br /&gt;
Das Beispiel beschreibt die nötigen Schritte für den Domain-Admin innerhalb des WEB-Paketes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neueste Quellen per Mercurial besorgen ===&lt;br /&gt;
&lt;br /&gt;
hg clone http://hg.code.sf.net/p/roundup/code /home/pacs/xyz00/users/USERNAME/roundup&lt;br /&gt;
&lt;br /&gt;
=== Installation der tracker-Software ===&lt;br /&gt;
&lt;br /&gt;
 python setup.py install --prefix=/home/pacs/xyz00/users/USERNAME/roundup/install --install-scripts=/home/pacs/xyz00/users/USERNAME/roundup/bin&lt;br /&gt;
&lt;br /&gt;
=== Anpassen der Umgebungsvariablen ===&lt;br /&gt;
&lt;br /&gt;
In der bash-Umgebung:&lt;br /&gt;
&lt;br /&gt;
 export PATH=$PATH:/home/pacs/xyz00/users/USERNAME/roundup/bin&lt;br /&gt;
 export PYTHONPATH=$PYTHONPATH:/home/pacs/xyz00/users/USERNAME/roundup/install/lib/python2.5/site-packages/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am besten trägt man diese beiden Zeilen in der Datei &amp;lt;code&amp;gt;.bash_profile&amp;lt;/code&amp;gt; ein, dann stehen die Pfade beim starten der Shell direkt zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
 nano ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
=== Installation eines neuen Trackers ===&lt;br /&gt;
&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/roundup/bin/roundup-admin install&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
 roundup-admin install&lt;br /&gt;
&lt;br /&gt;
(Wenn man die Umgebungsvariablen wie im Abschnitt zuvor beschrieben konfiguriert hat.)&lt;br /&gt;
&lt;br /&gt;
Dabei werden folgende Eingaben abgefragt (Eingaben nur beispielhaft):&lt;br /&gt;
&lt;br /&gt;
 Enter tracker home: &#039;&#039;&#039;/pfad/zum/tracker/home&#039;&#039;&#039;&lt;br /&gt;
 Templates: minimal, classic&lt;br /&gt;
 Select template [classic]: &#039;&#039;&#039;classic&#039;&#039;&#039;&lt;br /&gt;
 Back ends: anydbm, mysql, sqlite, postgresql&lt;br /&gt;
 Select backend [anydbm]: &#039;&#039;&#039;sqlite&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;tracker home&amp;quot; bezeichnet dabei ein Verzeichnis das man zuvor in seinem Home angelegt hat. Man kann auch mehrere Tracker-Instanzen parallel betreiben, die eigene &amp;quot;tracker home&amp;quot; bekommen.&lt;br /&gt;
Beispiel: ~/roundup-tracker-projects/my-first-tracker&lt;br /&gt;
&lt;br /&gt;
Beim Betrieb mit Mysql (um Backups zu ermöglichen die sicher konsistent sind):   &lt;br /&gt;
* bei &amp;quot;Select backend&amp;quot; mysql angeben&lt;br /&gt;
* mit hsadmin einen DB-User erzeugen&lt;br /&gt;
* mit hsadmin eine DB erzeugen und den DB-User zuweisen&lt;br /&gt;
* DB, DB-User und Passwort des DB-Users sowie localhost als host (siehe nachfolgender Abschnitt) in config.ini in der Sektion rdbms angeben.&lt;br /&gt;
  &lt;br /&gt;
==== Tracker anpassen ====&lt;br /&gt;
&lt;br /&gt;
 nano /home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/config.ini&lt;br /&gt;
&lt;br /&gt;
Hier müssen zumindest diese Variablen angepasst werden:&lt;br /&gt;
&lt;br /&gt;
 admin_email = mail@example.com&lt;br /&gt;
 dispatcher_email = mail@example.com&lt;br /&gt;
 name = TRACKERBESCHREIBUNG&lt;br /&gt;
 web = http(s)://SUBDOMAIN.example.com/&lt;br /&gt;
 email = mail@example.com&lt;br /&gt;
 domain = example.com&lt;br /&gt;
 host = localhost&lt;br /&gt;
&lt;br /&gt;
Optional kann man das logging in eine Datei aktivieren:&lt;br /&gt;
&lt;br /&gt;
 filename = /home/pacs/xyz00/users/USERNAME/TRACKERNAME.log&lt;br /&gt;
&lt;br /&gt;
==== Datenbank initialisieren ====&lt;br /&gt;
&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/roundup/bin/roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
 roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
(Nachdem man die Umgebungsvariablen wie oben beschrieben konfiguriert hat.)&lt;br /&gt;
&lt;br /&gt;
=== Subdomain anlegen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /home/pacs/xyz00/users/USERNAME/doms/example.com/subs/SUBDOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein eigenes cgi-verzeichnis für die neue subdomain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi/SUBDOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration &#039;&#039;&#039;mit&#039;&#039;&#039; eigener httpd.conf ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!! Dieser Abschnitt ist mangels eigener httpd.conf ungetestet !!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== cgi-frontend kopieren ====&lt;br /&gt;
&lt;br /&gt;
 cp /home/pacs/xyz00/users/USERNAME/roundup/frontends/roundup.cgi /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi/SUBDOMAIN/&lt;br /&gt;
&lt;br /&gt;
==== cgi-frontend anpassen ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi/SUBDOMAIN/roundup.cgi&amp;lt;/code&amp;gt;&lt;br /&gt;
 TRACKER_HOMES = {&lt;br /&gt;
    &#039;TRACKERNAME&#039;: &#039;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME&#039;,&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== .htaccess-Datei für cgi konfigurieren ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/subs/SUBDOMAIN/.htaccess&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteRule ^(.*)      /cgi-bin/SUBDOMAIN/roundup.cgi/$1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!! ENDE ungetester Abschnitt !!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration &#039;&#039;&#039;ohne&#039;&#039;&#039; eigene httpd.conf ===&lt;br /&gt;
&lt;br /&gt;
==== WSGI-Interface einbinden ====&lt;br /&gt;
&lt;br /&gt;
Ohne eigene httpd.conf benötigt man einen Wrapper (s. [[Flup]]).&lt;br /&gt;
&lt;br /&gt;
Dies legt man in seinem cgi-bin für die subdomain als &amp;lt;code&amp;gt;roundup_stub&amp;lt;/code&amp;gt; ab:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/env python&lt;br /&gt;
 import sys&lt;br /&gt;
 sys.path.append(&amp;quot;/home/pacs/&#039;&#039;&#039;xyz00&#039;&#039;&#039;/users/&#039;&#039;&#039;USERNAME&#039;&#039;&#039;/roundup/install/lib/python2.5/site-packages&amp;quot;)&lt;br /&gt;
 from flup.server.cgi import WSGIServer&lt;br /&gt;
 # obtain the WSGI request dispatcher&lt;br /&gt;
 from roundup.cgi.wsgi_handler import RequestDispatcher&lt;br /&gt;
 tracker_home = &#039;/home/pacs/&#039;&#039;&#039;xyz00&#039;&#039;&#039;/users/&#039;&#039;&#039;USERNAME&#039;&#039;&#039;/roundup/tracker/&#039;&#039;&#039;TRACKERNAME&#039;&#039;&#039;&#039;&lt;br /&gt;
 app = RequestDispatcher(tracker_home)&lt;br /&gt;
 WSGIServer(app).run()&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;hervorgehobenen Stellen&#039;&#039;&#039; sind an die eigenen Gegebenheiten anzupassen.&lt;br /&gt;
&lt;br /&gt;
Anschließend muss man den Wrapper ausführbar machen:&lt;br /&gt;
&lt;br /&gt;
 chmod 755 roundup_stub&lt;br /&gt;
&lt;br /&gt;
Wenn es Fehlern kommt, kann man debugging-Meldungen an den Browser ausgeben lassen. Dazu ergänzt man unter der Zeile &amp;quot;sys.path.append...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 import cgitb&lt;br /&gt;
 cgitb.enable()&lt;br /&gt;
&lt;br /&gt;
==== .htaccess-Datei für cgi konfigurieren ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/subs/SUBDOMAIN/.htaccess&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteRule ^(.*)      /cgi-bin/SUBDOMAIN/roundup_stub/$1&lt;br /&gt;
&lt;br /&gt;
== Individualisierung der tracker ==&lt;br /&gt;
&lt;br /&gt;
Die Tracker kann man individuell an die eigenen Wünsche anpassen.&lt;br /&gt;
&lt;br /&gt;
Das Datenbank-Schema liegt z.B. unter&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/tracker/TRACKERNAME/schema.py&lt;br /&gt;
&lt;br /&gt;
Die Datenbank-Initialisierungs-Datei liegt unter&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/tracker/TRACKERNAME/initial_data.py&lt;br /&gt;
&lt;br /&gt;
Zum Übernehmen der Änderungen an der Datenbank muss man die Datenbank neu initialisieren. &#039;&#039;&#039;Achtung: Dabei gehen alle Daten in der DB verloren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
Details zur Individualisierung nennt die Unterseite &amp;quot;Docs&amp;quot; -&amp;gt; &amp;quot;Customising Roundup&amp;quot; (http://roundup-tracker.org/docs/customizing.html).&lt;br /&gt;
&lt;br /&gt;
=== Registrieren verhindern ===&lt;br /&gt;
&lt;br /&gt;
Um nur manuell ergänzte Benutzer zuzulassen, muss man der Rolle Anonymous das Recht &amp;quot;Register&amp;quot; nehmen. Das bewerkstelligt man durch auskommentieren der letzten Zeile in diesem Abschnitt der datei &amp;lt;code&amp;gt;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/schema.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # Assign the appropriate permissions to the anonymous user&#039;s Anonymous&lt;br /&gt;
 # Role. Choices here are:&lt;br /&gt;
 # - Allow anonymous users to register&lt;br /&gt;
 db.security.addPermissionToRole(&#039;Anonymous&#039;, &#039;Register&#039;, &#039;user&#039;)&lt;br /&gt;
&lt;br /&gt;
=== Anzeige der issues nur für eingeloggte Benutzer ===&lt;br /&gt;
&lt;br /&gt;
Damit nur eingeloggte Benutzer die issues (Aufgaben) sehen können, muss man der Rolle Anonymous das Recht &amp;quot;View&amp;quot; nehmen. Das bewerkstelligt man durch auskommentieren der letzten beiden Zeilen in diesem Abschnitt der datei &amp;lt;code&amp;gt;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/schema.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # Allow anonymous users access to view issues (and the related, linked&lt;br /&gt;
 # information)&lt;br /&gt;
 for cl in &#039;issue&#039;, &#039;file&#039;, &#039;msg&#039;, &#039;keyword&#039;, &#039;priority&#039;, &#039;status&#039;:&lt;br /&gt;
     db.security.addPermissionToRole(&#039;Anonymous&#039;, &#039;View&#039;, cl)&lt;br /&gt;
&lt;br /&gt;
=== Logo einfügen ===&lt;br /&gt;
&lt;br /&gt;
In der linken oberen Ecke ist Platz für ein eigenes Logo oder eine Überschrift.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_main.jpg]]&lt;br /&gt;
&lt;br /&gt;
Bearbeitet werden muss die Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/page.html&lt;br /&gt;
&lt;br /&gt;
in der Tabellenzelle&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;td class=&amp;quot;page-header-left&amp;quot;&amp;gt;&amp;lt;code&amp;gt;&amp;amp;amp;nbsp;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn ein Logo mit einem Link hinterlegt wird, erscheint standardmäßig ein blauer Rahmen um die Grafik. Das kann unerwünscht sein. Unterdrücken kann man diesen Rahmen mit dem Zusatz&lt;br /&gt;
&lt;br /&gt;
 a img&lt;br /&gt;
 {&lt;br /&gt;
   border: none;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/style.css&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Kategorien farblich absetzen ===&lt;br /&gt;
&lt;br /&gt;
Damit die Priorität etwas hervorsticht, kann man die Kategorien farblich absetzen. Es bietet sich an, eine Legende vor und hinter der Aufgaben (issue) Liste einzufügen. Wir formatieren die Legende später per CSS, daher geben wir ihr auch eine CSS-Klasse mit.&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies bewerkstelligt man in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/issue.index.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
an den Stellen&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tal:block tal:define=&amp;quot;batch request/batch&amp;quot; tal:condition=&amp;quot;context/is_view_ok&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;list&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
(= über der Aufgaben-Liste)&lt;br /&gt;
&lt;br /&gt;
und&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/metal:index&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;lt;a tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;,&lt;br /&gt;
            {&#039;@action&#039;:&#039;export_csv&#039;})&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Download as CSV&amp;lt;/a&amp;gt;&lt;br /&gt;
(= unter der Aufgaben-Liste)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der fertige Abschnitt &#039;&#039;&#039;über&#039;&#039;&#039; der Aufgaben-Liste sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;tal:block tal:define=&amp;quot;batch request/batch&amp;quot; tal:condition=&amp;quot;context/is_view_ok&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;list&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der fertige Abschnitt &#039;&#039;&#039;unter&#039;&#039;&#039; der Aufgaben-Liste sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt; &amp;lt;/metal:index&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;lt;a tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;,&lt;br /&gt;
            {&#039;@action&#039;:&#039;export_csv&#039;})&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Download as CSV&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit auch die Aufgaben in der entsprechenden Farbe erscheinen, passt man noch die Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/issue.index.html&lt;br /&gt;
&lt;br /&gt;
an. Die Zeilen&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td tal:condition=&amp;quot;request/show/priority&amp;quot;&lt;br /&gt;
       tal:content=&amp;quot;python:i.priority.plain() or default&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ändert man in&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tr&#039;&#039;&#039; tal:attributes=&amp;quot;class string:priority-${i/priority/plain}&amp;quot;&#039;&#039;&#039;&amp;gt;&lt;br /&gt;
   &amp;lt;td tal:condition=&amp;quot;request/show/priority&amp;quot;&lt;br /&gt;
       tal:content=&amp;quot;python:i.priority.plain() or default&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Schluss muss man noch die CSS-Formatierungen ergänzen in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/style.css&lt;br /&gt;
&lt;br /&gt;
Hier ist z.B. ein solcher Block einzufügen:&lt;br /&gt;
&lt;br /&gt;
 tr.priority-critical td, .priority-critical&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FF8989;&lt;br /&gt;
   color: #ffffff;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-critical td a:link&lt;br /&gt;
 {&lt;br /&gt;
   color: #ffffff;&lt;br /&gt;
   font-weight: bold;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-urgent td, .priority-urgent&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FFD089;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-bug td, .priority-bug&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FFFE89&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-feature td, .priority-feature&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #C0DDFF;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-wish td, .priority-wish&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #C0FFCC;&lt;br /&gt;
 }&lt;br /&gt;
 table.color-reference&lt;br /&gt;
 {&lt;br /&gt;
   margin-top: 10px;&lt;br /&gt;
   margin-bottom: 30px;&lt;br /&gt;
 }&lt;br /&gt;
 .color-reference td&lt;br /&gt;
 {&lt;br /&gt;
   width: 100px;&lt;br /&gt;
   text-align: center;&lt;br /&gt;
   font-weight: bold;&lt;br /&gt;
   border: 1px solid #ababab;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_legende.jpg]]&lt;br /&gt;
&lt;br /&gt;
=== Menüpunkt für &amp;quot;Erledigte&amp;quot; Aufgaben ergänzen ===&lt;br /&gt;
&lt;br /&gt;
In der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/page.html&lt;br /&gt;
&lt;br /&gt;
ist diese Textstelle&lt;br /&gt;
&lt;br /&gt;
 status_notresolved string:-1,1,2,3,4,5,6,7;&lt;br /&gt;
&lt;br /&gt;
um eine Zeile zu erweitern:&lt;br /&gt;
&lt;br /&gt;
 status_notresolved string:-1,1,2,3,4,5,6,7;&lt;br /&gt;
 &#039;&#039;&#039;status_resolved string:8;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Außerdem ist noch &lt;br /&gt;
&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Show All&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;issue?@template=search&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Search&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zu ersetzen durch:&lt;br /&gt;
&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Show All&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
       &amp;lt;a href=&amp;quot;#&amp;quot;&lt;br /&gt;
       tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;, {&lt;br /&gt;
      &#039;@sort&#039;: &#039;-activity&#039;,&lt;br /&gt;
      &#039;@group&#039;: &#039;priority&#039;,&lt;br /&gt;
      &#039;@filter&#039;: &#039;status&#039;,&lt;br /&gt;
      &#039;@columns&#039;: columns_showall,&lt;br /&gt;
      &#039;@search_text&#039;: &#039;&#039;,&lt;br /&gt;
      &#039;status&#039;: status_resolved,&lt;br /&gt;
      &#039;@dispname&#039;: i18n.gettext(&#039;Erledigte anzeigen&#039;),&lt;br /&gt;
     })&amp;quot;&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Erledigte anzeigen&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;issue?@template=search&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Search&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_erledigte.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;br /&gt;
[[Kategorie:Software]]&lt;/div&gt;</summary>
		<author><name>Mih17-bernhard</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Roundup&amp;diff=4976</id>
		<title>Roundup</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Roundup&amp;diff=4976"/>
		<updated>2019-09-07T08:09:28Z</updated>

		<summary type="html">&lt;p&gt;Mih17-bernhard: /* Installation eines neuen Trackers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation roundup issue tracker (cgi-bin) ==&lt;br /&gt;
&lt;br /&gt;
Die allgemeine Installationsanleitung für roundup findet man unter http://roundup-tracker.org/docs/installation.html&lt;br /&gt;
&lt;br /&gt;
Im Folgenden soll die Installation bei Hostsharing in einem WEB-Paket im cgi-bin einer Domain &#039;&#039;&#039;ohne eigene httpd.conf&#039;&#039;&#039; beschrieben werden.&lt;br /&gt;
Das Beispiel beschreibt die nötigen Schritte für den Domain-Admin innerhalb des WEB-Paketes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neueste Quellen per Mercurial besorgen ===&lt;br /&gt;
&lt;br /&gt;
hg clone http://hg.code.sf.net/p/roundup/code /home/pacs/xyz00/users/USERNAME/roundup&lt;br /&gt;
&lt;br /&gt;
=== Installation der tracker-Software ===&lt;br /&gt;
&lt;br /&gt;
 python setup.py install --prefix=/home/pacs/xyz00/users/USERNAME/roundup/install --install-scripts=/home/pacs/xyz00/users/USERNAME/roundup/bin&lt;br /&gt;
&lt;br /&gt;
=== Anpassen der Umgebungsvariablen ===&lt;br /&gt;
&lt;br /&gt;
In der bash-Umgebung:&lt;br /&gt;
&lt;br /&gt;
 export PATH=$PATH:/home/pacs/xyz00/users/USERNAME/roundup/bin&lt;br /&gt;
 export PYTHONPATH=$PYTHONPATH:/home/pacs/xyz00/users/USERNAME/roundup/install/lib/python2.5/site-packages/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am besten trägt man diese beiden Zeilen in der Datei &amp;lt;code&amp;gt;.bash_profile&amp;lt;/code&amp;gt; ein, dann stehen die Pfade beim starten der Shell direkt zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
 nano ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
=== Installation eines neuen Trackers ===&lt;br /&gt;
&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/roundup/bin/roundup-admin install&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
 roundup-admin install&lt;br /&gt;
&lt;br /&gt;
(Wenn man die Umgebungsvariablen wie im Abschnitt zuvor beschrieben konfiguriert hat.)&lt;br /&gt;
&lt;br /&gt;
Dabei werden folgende Eingaben abgefragt (Eingaben nur beispielhaft):&lt;br /&gt;
&lt;br /&gt;
 Enter tracker home: &#039;&#039;&#039;/pfad/zum/tracker/home&#039;&#039;&#039;&lt;br /&gt;
 Templates: minimal, classic&lt;br /&gt;
 Select template [classic]: &#039;&#039;&#039;classic&#039;&#039;&#039;&lt;br /&gt;
 Back ends: anydbm, mysql, sqlite, postgresql&lt;br /&gt;
 Select backend [anydbm]: &#039;&#039;&#039;sqlite&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;tracker home&amp;quot; bezeichnet dabei ein Verzeichnis das man zuvor in seinem Home angelegt hat. Man kann auch mehrere Tracker-Instanzen parallel betreiben, die ein jeder sein eigenes &amp;quot;tracker home&amp;quot; bekommen.&lt;br /&gt;
Beispiel: ~/roundup-tracker-projects/my-first-tracker&lt;br /&gt;
&lt;br /&gt;
Beim Betrieb mit Mysql (um Backups zu ermöglichen die sicher konsistent sind)    &lt;br /&gt;
* bei &amp;quot;Select backend&amp;quot; mysql angeben&lt;br /&gt;
* mit hsadmin einen DB-User erzeugen&lt;br /&gt;
* mit hsadmin eine DB erzeugen und den DB-User zuweisen&lt;br /&gt;
* DB, DB-User und Passwort des DB-Users sowie localhost als host (siehe weiter unten) in config.ini in der Sektion rdbms angeben.&lt;br /&gt;
  &lt;br /&gt;
==== Tracker anpassen ====&lt;br /&gt;
&lt;br /&gt;
 nano /home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/config.ini&lt;br /&gt;
&lt;br /&gt;
Hier müssen zumindest diese Variablen angepasst werden:&lt;br /&gt;
&lt;br /&gt;
 admin_email = mail@example.com&lt;br /&gt;
 dispatcher_email = mail@example.com&lt;br /&gt;
 name = TRACKERBESCHREIBUNG&lt;br /&gt;
 web = http://SUBDOMAIN.example.com/&lt;br /&gt;
 email = mail@example.com&lt;br /&gt;
 domain = example.com&lt;br /&gt;
 host = localhost&lt;br /&gt;
&lt;br /&gt;
Optional kann man das logging in eine Datei aktivieren:&lt;br /&gt;
&lt;br /&gt;
 filename = /home/pacs/xyz00/users/USERNAME/TRACKERNAME.log&lt;br /&gt;
&lt;br /&gt;
Falls man sich für ein RDBMS-Backend als Datenbank entscheidet, sollte man sicherheitshalber auch Benutzername und Passwort für die Datenbank ändern&lt;br /&gt;
&lt;br /&gt;
 user = &#039;&#039;&#039;DBBENUTZERNAME&#039;&#039;&#039;&lt;br /&gt;
 password = &#039;&#039;&#039;DBPASSWORT&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Datenbank initialisieren ====&lt;br /&gt;
&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/roundup/bin/roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
 roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
(Wenn man die Umgebungsvariablen wie oben beschrieben konfiguriert hat.)&lt;br /&gt;
&lt;br /&gt;
=== Subdomain anlegen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /home/pacs/xyz00/users/USERNAME/doms/example.com/subs/SUBDOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein eigenes cgi-verzeichnis für die neue subdomain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi/SUBDOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration &#039;&#039;&#039;mit&#039;&#039;&#039; eigener httpd.conf ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!! Dieser Abschnitt ist mangels eigener httpd.conf ungetestet !!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== cgi-frontend kopieren ====&lt;br /&gt;
&lt;br /&gt;
 cp /home/pacs/xyz00/users/USERNAME/roundup/frontends/roundup.cgi /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi/SUBDOMAIN/&lt;br /&gt;
&lt;br /&gt;
==== cgi-frontend anpassen ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi/SUBDOMAIN/roundup.cgi&amp;lt;/code&amp;gt;&lt;br /&gt;
 TRACKER_HOMES = {&lt;br /&gt;
    &#039;TRACKERNAME&#039;: &#039;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME&#039;,&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== .htaccess-Datei für cgi konfigurieren ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/subs/SUBDOMAIN/.htaccess&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteRule ^(.*)      /cgi-bin/SUBDOMAIN/roundup.cgi/$1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!! ENDE ungetester Abschnitt !!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration &#039;&#039;&#039;ohne&#039;&#039;&#039; eigene httpd.conf ===&lt;br /&gt;
&lt;br /&gt;
==== WSGI-Interface einbinden ====&lt;br /&gt;
&lt;br /&gt;
Ohne eigene httpd.conf benötigt man einen Wrapper (s. [[Flup]]).&lt;br /&gt;
&lt;br /&gt;
Dies legt man in seinem cgi-bin für die subdomain als &amp;lt;code&amp;gt;roundup_stub&amp;lt;/code&amp;gt; ab:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/env python&lt;br /&gt;
 import sys&lt;br /&gt;
 sys.path.append(&amp;quot;/home/pacs/&#039;&#039;&#039;xyz00&#039;&#039;&#039;/users/&#039;&#039;&#039;USERNAME&#039;&#039;&#039;/roundup/install/lib/python2.5/site-packages&amp;quot;)&lt;br /&gt;
 from flup.server.cgi import WSGIServer&lt;br /&gt;
 # obtain the WSGI request dispatcher&lt;br /&gt;
 from roundup.cgi.wsgi_handler import RequestDispatcher&lt;br /&gt;
 tracker_home = &#039;/home/pacs/&#039;&#039;&#039;xyz00&#039;&#039;&#039;/users/&#039;&#039;&#039;USERNAME&#039;&#039;&#039;/roundup/tracker/&#039;&#039;&#039;TRACKERNAME&#039;&#039;&#039;&#039;&lt;br /&gt;
 app = RequestDispatcher(tracker_home)&lt;br /&gt;
 WSGIServer(app).run()&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;hervorgehobenen Stellen&#039;&#039;&#039; sind an die eigenen Gegebenheiten anzupassen.&lt;br /&gt;
&lt;br /&gt;
Anschließend muss man den Wrapper ausführbar machen:&lt;br /&gt;
&lt;br /&gt;
 chmod 755 roundup_stub&lt;br /&gt;
&lt;br /&gt;
Wenn es Fehlern kommt, kann man debugging-Meldungen an den Browser ausgeben lassen. Dazu ergänzt man unter der Zeile &amp;quot;sys.path.append...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 import cgitb&lt;br /&gt;
 cgitb.enable()&lt;br /&gt;
&lt;br /&gt;
==== .htaccess-Datei für cgi konfigurieren ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/subs/SUBDOMAIN/.htaccess&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteRule ^(.*)      /cgi-bin/SUBDOMAIN/roundup_stub/$1&lt;br /&gt;
&lt;br /&gt;
== Individualisierung der tracker ==&lt;br /&gt;
&lt;br /&gt;
Die Tracker kann man individuell an die eigenen Wünsche anpassen.&lt;br /&gt;
&lt;br /&gt;
Das Datenbank-Schema liegt z.B. unter&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/tracker/TRACKERNAME/schema.py&lt;br /&gt;
&lt;br /&gt;
Die Datenbank-Initialisierungs-Datei liegt unter&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/tracker/TRACKERNAME/initial_data.py&lt;br /&gt;
&lt;br /&gt;
Zum Übernehmen der Änderungen an der Datenbank muss man die Datenbank neu initialisieren. &#039;&#039;&#039;Achtung: Dabei gehen alle Daten in der DB verloren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
Details zur Individualisierung nennt die Unterseite &amp;quot;Docs&amp;quot; -&amp;gt; &amp;quot;Customising Roundup&amp;quot; (http://roundup-tracker.org/docs/customizing.html).&lt;br /&gt;
&lt;br /&gt;
=== Registrieren verhindern ===&lt;br /&gt;
&lt;br /&gt;
Um nur manuell ergänzte Benutzer zuzulassen, muss man der Rolle Anonymous das Recht &amp;quot;Register&amp;quot; nehmen. Das bewerkstelligt man durch auskommentieren der letzten Zeile in diesem Abschnitt der datei &amp;lt;code&amp;gt;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/schema.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # Assign the appropriate permissions to the anonymous user&#039;s Anonymous&lt;br /&gt;
 # Role. Choices here are:&lt;br /&gt;
 # - Allow anonymous users to register&lt;br /&gt;
 db.security.addPermissionToRole(&#039;Anonymous&#039;, &#039;Register&#039;, &#039;user&#039;)&lt;br /&gt;
&lt;br /&gt;
=== Anzeige der issues nur für eingeloggte Benutzer ===&lt;br /&gt;
&lt;br /&gt;
Damit nur eingeloggte Benutzer die issues (Aufgaben) sehen können, muss man der Rolle Anonymous das Recht &amp;quot;View&amp;quot; nehmen. Das bewerkstelligt man durch auskommentieren der letzten beiden Zeilen in diesem Abschnitt der datei &amp;lt;code&amp;gt;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/schema.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # Allow anonymous users access to view issues (and the related, linked&lt;br /&gt;
 # information)&lt;br /&gt;
 for cl in &#039;issue&#039;, &#039;file&#039;, &#039;msg&#039;, &#039;keyword&#039;, &#039;priority&#039;, &#039;status&#039;:&lt;br /&gt;
     db.security.addPermissionToRole(&#039;Anonymous&#039;, &#039;View&#039;, cl)&lt;br /&gt;
&lt;br /&gt;
=== Logo einfügen ===&lt;br /&gt;
&lt;br /&gt;
In der linken oberen Ecke ist Platz für ein eigenes Logo oder eine Überschrift.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_main.jpg]]&lt;br /&gt;
&lt;br /&gt;
Bearbeitet werden muss die Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/page.html&lt;br /&gt;
&lt;br /&gt;
in der Tabellenzelle&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;td class=&amp;quot;page-header-left&amp;quot;&amp;gt;&amp;lt;code&amp;gt;&amp;amp;amp;nbsp;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn ein Logo mit einem Link hinterlegt wird, erscheint standardmäßig ein blauer Rahmen um die Grafik. Das kann unerwünscht sein. Unterdrücken kann man diesen Rahmen mit dem Zusatz&lt;br /&gt;
&lt;br /&gt;
 a img&lt;br /&gt;
 {&lt;br /&gt;
   border: none;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/style.css&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Kategorien farblich absetzen ===&lt;br /&gt;
&lt;br /&gt;
Damit die Priorität etwas hervorsticht, kann man die Kategorien farblich absetzen. Es bietet sich an, eine Legende vor und hinter der Aufgaben (issue) Liste einzufügen. Wir formatieren die Legende später per CSS, daher geben wir ihr auch eine CSS-Klasse mit.&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies bewerkstelligt man in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/issue.index.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
an den Stellen&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tal:block tal:define=&amp;quot;batch request/batch&amp;quot; tal:condition=&amp;quot;context/is_view_ok&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;list&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
(= über der Aufgaben-Liste)&lt;br /&gt;
&lt;br /&gt;
und&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/metal:index&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;lt;a tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;,&lt;br /&gt;
            {&#039;@action&#039;:&#039;export_csv&#039;})&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Download as CSV&amp;lt;/a&amp;gt;&lt;br /&gt;
(= unter der Aufgaben-Liste)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der fertige Abschnitt &#039;&#039;&#039;über&#039;&#039;&#039; der Aufgaben-Liste sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;tal:block tal:define=&amp;quot;batch request/batch&amp;quot; tal:condition=&amp;quot;context/is_view_ok&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;list&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der fertige Abschnitt &#039;&#039;&#039;unter&#039;&#039;&#039; der Aufgaben-Liste sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt; &amp;lt;/metal:index&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;lt;a tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;,&lt;br /&gt;
            {&#039;@action&#039;:&#039;export_csv&#039;})&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Download as CSV&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit auch die Aufgaben in der entsprechenden Farbe erscheinen, passt man noch die Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/issue.index.html&lt;br /&gt;
&lt;br /&gt;
an. Die Zeilen&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td tal:condition=&amp;quot;request/show/priority&amp;quot;&lt;br /&gt;
       tal:content=&amp;quot;python:i.priority.plain() or default&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ändert man in&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tr&#039;&#039;&#039; tal:attributes=&amp;quot;class string:priority-${i/priority/plain}&amp;quot;&#039;&#039;&#039;&amp;gt;&lt;br /&gt;
   &amp;lt;td tal:condition=&amp;quot;request/show/priority&amp;quot;&lt;br /&gt;
       tal:content=&amp;quot;python:i.priority.plain() or default&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Schluss muss man noch die CSS-Formatierungen ergänzen in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/style.css&lt;br /&gt;
&lt;br /&gt;
Hier ist z.B. ein solcher Block einzufügen:&lt;br /&gt;
&lt;br /&gt;
 tr.priority-critical td, .priority-critical&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FF8989;&lt;br /&gt;
   color: #ffffff;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-critical td a:link&lt;br /&gt;
 {&lt;br /&gt;
   color: #ffffff;&lt;br /&gt;
   font-weight: bold;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-urgent td, .priority-urgent&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FFD089;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-bug td, .priority-bug&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FFFE89&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-feature td, .priority-feature&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #C0DDFF;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-wish td, .priority-wish&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #C0FFCC;&lt;br /&gt;
 }&lt;br /&gt;
 table.color-reference&lt;br /&gt;
 {&lt;br /&gt;
   margin-top: 10px;&lt;br /&gt;
   margin-bottom: 30px;&lt;br /&gt;
 }&lt;br /&gt;
 .color-reference td&lt;br /&gt;
 {&lt;br /&gt;
   width: 100px;&lt;br /&gt;
   text-align: center;&lt;br /&gt;
   font-weight: bold;&lt;br /&gt;
   border: 1px solid #ababab;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_legende.jpg]]&lt;br /&gt;
&lt;br /&gt;
=== Menüpunkt für &amp;quot;Erledigte&amp;quot; Aufgaben ergänzen ===&lt;br /&gt;
&lt;br /&gt;
In der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/page.html&lt;br /&gt;
&lt;br /&gt;
ist diese Textstelle&lt;br /&gt;
&lt;br /&gt;
 status_notresolved string:-1,1,2,3,4,5,6,7;&lt;br /&gt;
&lt;br /&gt;
um eine Zeile zu erweitern:&lt;br /&gt;
&lt;br /&gt;
 status_notresolved string:-1,1,2,3,4,5,6,7;&lt;br /&gt;
 &#039;&#039;&#039;status_resolved string:8;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Außerdem ist noch &lt;br /&gt;
&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Show All&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;issue?@template=search&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Search&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zu ersetzen durch:&lt;br /&gt;
&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Show All&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
       &amp;lt;a href=&amp;quot;#&amp;quot;&lt;br /&gt;
       tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;, {&lt;br /&gt;
      &#039;@sort&#039;: &#039;-activity&#039;,&lt;br /&gt;
      &#039;@group&#039;: &#039;priority&#039;,&lt;br /&gt;
      &#039;@filter&#039;: &#039;status&#039;,&lt;br /&gt;
      &#039;@columns&#039;: columns_showall,&lt;br /&gt;
      &#039;@search_text&#039;: &#039;&#039;,&lt;br /&gt;
      &#039;status&#039;: status_resolved,&lt;br /&gt;
      &#039;@dispname&#039;: i18n.gettext(&#039;Erledigte anzeigen&#039;),&lt;br /&gt;
     })&amp;quot;&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Erledigte anzeigen&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;issue?@template=search&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Search&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_erledigte.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;br /&gt;
[[Kategorie:Software]]&lt;/div&gt;</summary>
		<author><name>Mih17-bernhard</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Roundup&amp;diff=4975</id>
		<title>Roundup</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Roundup&amp;diff=4975"/>
		<updated>2019-09-07T07:55:23Z</updated>

		<summary type="html">&lt;p&gt;Mih17-bernhard: /* Neueste Quellen per Mercurial besorgen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation roundup issue tracker (cgi-bin) ==&lt;br /&gt;
&lt;br /&gt;
Die allgemeine Installationsanleitung für roundup findet man unter http://roundup-tracker.org/docs/installation.html&lt;br /&gt;
&lt;br /&gt;
Im Folgenden soll die Installation bei Hostsharing in einem WEB-Paket im cgi-bin einer Domain &#039;&#039;&#039;ohne eigene httpd.conf&#039;&#039;&#039; beschrieben werden.&lt;br /&gt;
Das Beispiel beschreibt die nötigen Schritte für den Domain-Admin innerhalb des WEB-Paketes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neueste Quellen per Mercurial besorgen ===&lt;br /&gt;
&lt;br /&gt;
hg clone http://hg.code.sf.net/p/roundup/code /home/pacs/xyz00/users/USERNAME/roundup&lt;br /&gt;
&lt;br /&gt;
=== Installation der tracker-Software ===&lt;br /&gt;
&lt;br /&gt;
 python setup.py install --prefix=/home/pacs/xyz00/users/USERNAME/roundup/install --install-scripts=/home/pacs/xyz00/users/USERNAME/roundup/bin&lt;br /&gt;
&lt;br /&gt;
=== Anpassen der Umgebungsvariablen ===&lt;br /&gt;
&lt;br /&gt;
In der bash-Umgebung:&lt;br /&gt;
&lt;br /&gt;
 export PATH=$PATH:/home/pacs/xyz00/users/USERNAME/roundup/bin&lt;br /&gt;
 export PYTHONPATH=$PYTHONPATH:/home/pacs/xyz00/users/USERNAME/roundup/install/lib/python2.5/site-packages/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am besten trägt man diese beiden Zeilen in der Datei &amp;lt;code&amp;gt;.bash_profile&amp;lt;/code&amp;gt; ein, dann stehen die Pfade beim starten der Shell direkt zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
 nano ~/.bash_profile&lt;br /&gt;
&lt;br /&gt;
=== Installation eines neuen Trackers ===&lt;br /&gt;
&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/roundup/bin/roundup-admin install&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
 roundup-admin install&lt;br /&gt;
&lt;br /&gt;
(Wenn man die Umgebungsvariablen wie im Abschnitt zuvor beschrieben konfiguriert hat.)&lt;br /&gt;
&lt;br /&gt;
Dabei werden folgende Eingaben abgefragt (Eingaben nur beispielhaft):&lt;br /&gt;
&lt;br /&gt;
 Enter tracker home: &#039;&#039;&#039;/pfad/zum/tracker/home&#039;&#039;&#039;&lt;br /&gt;
 Templates: minimal, classic&lt;br /&gt;
 Select template [classic]: &#039;&#039;&#039;classic&#039;&#039;&#039;&lt;br /&gt;
 Back ends: anydbm, mysql, sqlite, postgresql&lt;br /&gt;
 Select backend [anydbm]: &#039;&#039;&#039;sqlite&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Tracker anpassen ====&lt;br /&gt;
&lt;br /&gt;
 nano /home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/config.ini&lt;br /&gt;
&lt;br /&gt;
Hier müssen zumindest diese Variablen angepasst werden:&lt;br /&gt;
&lt;br /&gt;
 admin_email = mail@example.com&lt;br /&gt;
 dispatcher_email = mail@example.com&lt;br /&gt;
 name = TRACKERBESCHREIBUNG&lt;br /&gt;
 web = http://SUBDOMAIN.example.com/&lt;br /&gt;
 email = mail@example.com&lt;br /&gt;
 domain = example.com&lt;br /&gt;
 host = localhost&lt;br /&gt;
&lt;br /&gt;
Optional kann man das logging in eine Datei aktivieren:&lt;br /&gt;
&lt;br /&gt;
 filename = /home/pacs/xyz00/users/USERNAME/TRACKERNAME.log&lt;br /&gt;
&lt;br /&gt;
Falls man sich für ein RDBMS-Backend als Datenbank entscheidet, sollte man sicherheitshalber auch Benutzername und Passwort für die Datenbank ändern&lt;br /&gt;
&lt;br /&gt;
 user = &#039;&#039;&#039;DBBENUTZERNAME&#039;&#039;&#039;&lt;br /&gt;
 password = &#039;&#039;&#039;DBPASSWORT&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Datenbank initialisieren ====&lt;br /&gt;
&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/roundup/bin/roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
 roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
(Wenn man die Umgebungsvariablen wie oben beschrieben konfiguriert hat.)&lt;br /&gt;
&lt;br /&gt;
=== Subdomain anlegen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /home/pacs/xyz00/users/USERNAME/doms/example.com/subs/SUBDOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein eigenes cgi-verzeichnis für die neue subdomain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi/SUBDOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration &#039;&#039;&#039;mit&#039;&#039;&#039; eigener httpd.conf ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!! Dieser Abschnitt ist mangels eigener httpd.conf ungetestet !!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== cgi-frontend kopieren ====&lt;br /&gt;
&lt;br /&gt;
 cp /home/pacs/xyz00/users/USERNAME/roundup/frontends/roundup.cgi /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi/SUBDOMAIN/&lt;br /&gt;
&lt;br /&gt;
==== cgi-frontend anpassen ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/cgi/SUBDOMAIN/roundup.cgi&amp;lt;/code&amp;gt;&lt;br /&gt;
 TRACKER_HOMES = {&lt;br /&gt;
    &#039;TRACKERNAME&#039;: &#039;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME&#039;,&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== .htaccess-Datei für cgi konfigurieren ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/subs/SUBDOMAIN/.htaccess&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteRule ^(.*)      /cgi-bin/SUBDOMAIN/roundup.cgi/$1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;!! ENDE ungetester Abschnitt !!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration &#039;&#039;&#039;ohne&#039;&#039;&#039; eigene httpd.conf ===&lt;br /&gt;
&lt;br /&gt;
==== WSGI-Interface einbinden ====&lt;br /&gt;
&lt;br /&gt;
Ohne eigene httpd.conf benötigt man einen Wrapper (s. [[Flup]]).&lt;br /&gt;
&lt;br /&gt;
Dies legt man in seinem cgi-bin für die subdomain als &amp;lt;code&amp;gt;roundup_stub&amp;lt;/code&amp;gt; ab:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/env python&lt;br /&gt;
 import sys&lt;br /&gt;
 sys.path.append(&amp;quot;/home/pacs/&#039;&#039;&#039;xyz00&#039;&#039;&#039;/users/&#039;&#039;&#039;USERNAME&#039;&#039;&#039;/roundup/install/lib/python2.5/site-packages&amp;quot;)&lt;br /&gt;
 from flup.server.cgi import WSGIServer&lt;br /&gt;
 # obtain the WSGI request dispatcher&lt;br /&gt;
 from roundup.cgi.wsgi_handler import RequestDispatcher&lt;br /&gt;
 tracker_home = &#039;/home/pacs/&#039;&#039;&#039;xyz00&#039;&#039;&#039;/users/&#039;&#039;&#039;USERNAME&#039;&#039;&#039;/roundup/tracker/&#039;&#039;&#039;TRACKERNAME&#039;&#039;&#039;&#039;&lt;br /&gt;
 app = RequestDispatcher(tracker_home)&lt;br /&gt;
 WSGIServer(app).run()&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;hervorgehobenen Stellen&#039;&#039;&#039; sind an die eigenen Gegebenheiten anzupassen.&lt;br /&gt;
&lt;br /&gt;
Anschließend muss man den Wrapper ausführbar machen:&lt;br /&gt;
&lt;br /&gt;
 chmod 755 roundup_stub&lt;br /&gt;
&lt;br /&gt;
Wenn es Fehlern kommt, kann man debugging-Meldungen an den Browser ausgeben lassen. Dazu ergänzt man unter der Zeile &amp;quot;sys.path.append...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 import cgitb&lt;br /&gt;
 cgitb.enable()&lt;br /&gt;
&lt;br /&gt;
==== .htaccess-Datei für cgi konfigurieren ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano /home/pacs/xyz00/users/USERNAME/doms/example.com/subs/SUBDOMAIN/.htaccess&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteRule ^(.*)      /cgi-bin/SUBDOMAIN/roundup_stub/$1&lt;br /&gt;
&lt;br /&gt;
== Individualisierung der tracker ==&lt;br /&gt;
&lt;br /&gt;
Die Tracker kann man individuell an die eigenen Wünsche anpassen.&lt;br /&gt;
&lt;br /&gt;
Das Datenbank-Schema liegt z.B. unter&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/tracker/TRACKERNAME/schema.py&lt;br /&gt;
&lt;br /&gt;
Die Datenbank-Initialisierungs-Datei liegt unter&lt;br /&gt;
 /home/pacs/xyz00/users/USERNAME/tracker/TRACKERNAME/initial_data.py&lt;br /&gt;
&lt;br /&gt;
Zum Übernehmen der Änderungen an der Datenbank muss man die Datenbank neu initialisieren. &#039;&#039;&#039;Achtung: Dabei gehen alle Daten in der DB verloren!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 roundup-admin initialise&lt;br /&gt;
&lt;br /&gt;
Details zur Individualisierung nennt die Unterseite &amp;quot;Docs&amp;quot; -&amp;gt; &amp;quot;Customising Roundup&amp;quot; (http://roundup-tracker.org/docs/customizing.html).&lt;br /&gt;
&lt;br /&gt;
=== Registrieren verhindern ===&lt;br /&gt;
&lt;br /&gt;
Um nur manuell ergänzte Benutzer zuzulassen, muss man der Rolle Anonymous das Recht &amp;quot;Register&amp;quot; nehmen. Das bewerkstelligt man durch auskommentieren der letzten Zeile in diesem Abschnitt der datei &amp;lt;code&amp;gt;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/schema.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # Assign the appropriate permissions to the anonymous user&#039;s Anonymous&lt;br /&gt;
 # Role. Choices here are:&lt;br /&gt;
 # - Allow anonymous users to register&lt;br /&gt;
 db.security.addPermissionToRole(&#039;Anonymous&#039;, &#039;Register&#039;, &#039;user&#039;)&lt;br /&gt;
&lt;br /&gt;
=== Anzeige der issues nur für eingeloggte Benutzer ===&lt;br /&gt;
&lt;br /&gt;
Damit nur eingeloggte Benutzer die issues (Aufgaben) sehen können, muss man der Rolle Anonymous das Recht &amp;quot;View&amp;quot; nehmen. Das bewerkstelligt man durch auskommentieren der letzten beiden Zeilen in diesem Abschnitt der datei &amp;lt;code&amp;gt;/home/pacs/xyz00/users/USERNAME/roundup/tracker/TRACKERNAME/schema.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # Allow anonymous users access to view issues (and the related, linked&lt;br /&gt;
 # information)&lt;br /&gt;
 for cl in &#039;issue&#039;, &#039;file&#039;, &#039;msg&#039;, &#039;keyword&#039;, &#039;priority&#039;, &#039;status&#039;:&lt;br /&gt;
     db.security.addPermissionToRole(&#039;Anonymous&#039;, &#039;View&#039;, cl)&lt;br /&gt;
&lt;br /&gt;
=== Logo einfügen ===&lt;br /&gt;
&lt;br /&gt;
In der linken oberen Ecke ist Platz für ein eigenes Logo oder eine Überschrift.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_main.jpg]]&lt;br /&gt;
&lt;br /&gt;
Bearbeitet werden muss die Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/page.html&lt;br /&gt;
&lt;br /&gt;
in der Tabellenzelle&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;td class=&amp;quot;page-header-left&amp;quot;&amp;gt;&amp;lt;code&amp;gt;&amp;amp;amp;nbsp;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn ein Logo mit einem Link hinterlegt wird, erscheint standardmäßig ein blauer Rahmen um die Grafik. Das kann unerwünscht sein. Unterdrücken kann man diesen Rahmen mit dem Zusatz&lt;br /&gt;
&lt;br /&gt;
 a img&lt;br /&gt;
 {&lt;br /&gt;
   border: none;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/style.css&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Kategorien farblich absetzen ===&lt;br /&gt;
&lt;br /&gt;
Damit die Priorität etwas hervorsticht, kann man die Kategorien farblich absetzen. Es bietet sich an, eine Legende vor und hinter der Aufgaben (issue) Liste einzufügen. Wir formatieren die Legende später per CSS, daher geben wir ihr auch eine CSS-Klasse mit.&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies bewerkstelligt man in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/issue.index.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
an den Stellen&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tal:block tal:define=&amp;quot;batch request/batch&amp;quot; tal:condition=&amp;quot;context/is_view_ok&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;list&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
(= über der Aufgaben-Liste)&lt;br /&gt;
&lt;br /&gt;
und&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/metal:index&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;lt;a tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;,&lt;br /&gt;
            {&#039;@action&#039;:&#039;export_csv&#039;})&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Download as CSV&amp;lt;/a&amp;gt;&lt;br /&gt;
(= unter der Aufgaben-Liste)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der fertige Abschnitt &#039;&#039;&#039;über&#039;&#039;&#039; der Aufgaben-Liste sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;tal:block tal:define=&amp;quot;batch request/batch&amp;quot; tal:condition=&amp;quot;context/is_view_ok&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;list&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der fertige Abschnitt &#039;&#039;&#039;unter&#039;&#039;&#039; der Aufgaben-Liste sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt; &amp;lt;/metal:index&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;amp;lt;table class=&amp;quot;color-reference&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td&amp;gt;Legende:&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-critical&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;critical&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-urgent&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;urgent&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-bug&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;bug&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-feature&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;feature&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td class=&amp;quot;priority-wish&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;wish&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;lt;a tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;,&lt;br /&gt;
            {&#039;@action&#039;:&#039;export_csv&#039;})&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Download as CSV&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit auch die Aufgaben in der entsprechenden Farbe erscheinen, passt man noch die Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/issue.index.html&lt;br /&gt;
&lt;br /&gt;
an. Die Zeilen&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td tal:condition=&amp;quot;request/show/priority&amp;quot;&lt;br /&gt;
       tal:content=&amp;quot;python:i.priority.plain() or default&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ändert man in&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tr&#039;&#039;&#039; tal:attributes=&amp;quot;class string:priority-${i/priority/plain}&amp;quot;&#039;&#039;&#039;&amp;gt;&lt;br /&gt;
   &amp;lt;td tal:condition=&amp;quot;request/show/priority&amp;quot;&lt;br /&gt;
       tal:content=&amp;quot;python:i.priority.plain() or default&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Schluss muss man noch die CSS-Formatierungen ergänzen in der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/style.css&lt;br /&gt;
&lt;br /&gt;
Hier ist z.B. ein solcher Block einzufügen:&lt;br /&gt;
&lt;br /&gt;
 tr.priority-critical td, .priority-critical&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FF8989;&lt;br /&gt;
   color: #ffffff;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-critical td a:link&lt;br /&gt;
 {&lt;br /&gt;
   color: #ffffff;&lt;br /&gt;
   font-weight: bold;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-urgent td, .priority-urgent&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FFD089;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-bug td, .priority-bug&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #FFFE89&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-feature td, .priority-feature&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #C0DDFF;&lt;br /&gt;
 }&lt;br /&gt;
 tr.priority-wish td, .priority-wish&lt;br /&gt;
 {&lt;br /&gt;
   background-color: #C0FFCC;&lt;br /&gt;
 }&lt;br /&gt;
 table.color-reference&lt;br /&gt;
 {&lt;br /&gt;
   margin-top: 10px;&lt;br /&gt;
   margin-bottom: 30px;&lt;br /&gt;
 }&lt;br /&gt;
 .color-reference td&lt;br /&gt;
 {&lt;br /&gt;
   width: 100px;&lt;br /&gt;
   text-align: center;&lt;br /&gt;
   font-weight: bold;&lt;br /&gt;
   border: 1px solid #ababab;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_legende.jpg]]&lt;br /&gt;
&lt;br /&gt;
=== Menüpunkt für &amp;quot;Erledigte&amp;quot; Aufgaben ergänzen ===&lt;br /&gt;
&lt;br /&gt;
In der Datei&lt;br /&gt;
&lt;br /&gt;
 /pfad/zum/tracker/html/page.html&lt;br /&gt;
&lt;br /&gt;
ist diese Textstelle&lt;br /&gt;
&lt;br /&gt;
 status_notresolved string:-1,1,2,3,4,5,6,7;&lt;br /&gt;
&lt;br /&gt;
um eine Zeile zu erweitern:&lt;br /&gt;
&lt;br /&gt;
 status_notresolved string:-1,1,2,3,4,5,6,7;&lt;br /&gt;
 &#039;&#039;&#039;status_resolved string:8;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Außerdem ist noch &lt;br /&gt;
&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Show All&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;issue?@template=search&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Search&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zu ersetzen durch:&lt;br /&gt;
&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Show All&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
       &amp;lt;a href=&amp;quot;#&amp;quot;&lt;br /&gt;
       tal:attributes=&amp;quot;href python:request.indexargs_url(&#039;issue&#039;, {&lt;br /&gt;
      &#039;@sort&#039;: &#039;-activity&#039;,&lt;br /&gt;
      &#039;@group&#039;: &#039;priority&#039;,&lt;br /&gt;
      &#039;@filter&#039;: &#039;status&#039;,&lt;br /&gt;
      &#039;@columns&#039;: columns_showall,&lt;br /&gt;
      &#039;@search_text&#039;: &#039;&#039;,&lt;br /&gt;
      &#039;status&#039;: status_resolved,&lt;br /&gt;
      &#039;@dispname&#039;: i18n.gettext(&#039;Erledigte anzeigen&#039;),&lt;br /&gt;
     })&amp;quot;&lt;br /&gt;
       i18n:translate=&amp;quot;&amp;quot;&amp;gt;Erledigte anzeigen&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;issue?@template=search&amp;quot; i18n:translate=&amp;quot;&amp;quot;&amp;gt;Search&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Roundup_erledigte.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;br /&gt;
[[Kategorie:Software]]&lt;/div&gt;</summary>
		<author><name>Mih17-bernhard</name></author>
	</entry>
</feed>