Redmine

Der Projektmanager und Bugtracker Redmine hatte es Daniel und mir angetan. Also kam dieser auf einen unserer Ubuntu 14.04 Server.

apt-get install redmine redmine-sqlite libapache2-mod-passenger

Dann die Konfigurationsdateien anpassen:

# /etc/apache2/mods-available/passenger.conf
PassengerDefaultUser www-data

und

# /etc/apache2/sites-available/default-ssl.conf
<Directory /var/www/pfad/zu/redmine>
    RailsBaseURI /redmine
    PassengerResolveSymlinksInDocumentRoot on
</Directory>

Wichtig ist hier, dass der Eintrag für den DocumentRoot des bearbeiteten VirtualHost nicht ganz woanders hinzeigt, sonst fliegt PassengerResolveSymlinksInDocumentRoot auf die Nase (weitere Infos hier). Also im zugehörigen VirtualHost Eintrag prüfen, ob er stimmt:

DocumentRoot /var/www/pfad/zu

Redmine versymlinken:

ln -s /usr/share/redmine/public /var/www/pfad/zu/redmine

Die Konfigurationsdatei für Redmine an Ort und Stelle kopieren:

cp /usr/share/redmine/config/configuration.yml.example /etc/redmine/default/configuration.yml

Dort Sendmail für den Default Mode freischalten (funktioniert selbstverständlich auch mit Postfix):

# default configuration options for all environments
default:
  email_delivery:
    delivery_method: :sendmail

Bei Bedarf ebenda den Pfad für die Attachments überarbeiten. Der Default Pfad ist

/var/lib/redmine/default/files

wo dann Unterordner nach Datum des Uploads angelegt werden. Wer das anders haben will kann sich z.B. unter /var/www/pfad/zu/redmin_files anlegen, dem Apachen daran alle Rechte geben und den veränderten Pfad dann in configuration.yml eintragen:

# attachments_storage_path: /var/www/pfad/zu/redmine_files
  attachments_storage_path:

Das Apache Modul aktivieren und die Konfiguration neu laden:

sudo a2enmod passenger
sudo service apache2 restart

Leider enden hier viele Installationsanleitungen. Ich musste wie folgt weiter bauen:

Zuerst schien es mir so, als ob Ruby ohne bundler und sqlite3 Fähigkeiten nichts mit Redmine anzufangen wusste. Ich sah beim Aufruf nur eine leere Seite. Das hier half weiter:

gem install bundler sqlite3

Jetzt bekam ich wenigstens eine Fehlermeldung über eine fehlende und nicht beschreibbare Gemfile.lock Datei zu sehen. Ein

touch /usr/share/redmine/Gemfile.lock
chown www-data.www-data /usr/share/redmine/Gemfile.lock
service apache2 restart

setze die Datei an die gewünschte Stelle und machte Redmine läuffähig. Mit admin admin kann man sich anmelden und aus Redmine heraus die restliche Konfiguration anpassen.

Was dann noch fehlt war die Anbindung über LDAPs an den hausinternen Server. Redmine bringt ein LDAP Modul schon mit, also muss man nur die richtigen Einträge für einen LD-Server herausfinden. Geklappt hat es hiermit:

Name: Anbindung_LD-Server
Host: ip.adresse.des.servers
Port: 636 
BaseDN: dc=schule,dc=ort,dc=schule-bw,dc=de

On the fly Benutzererstellung: True

Login = uid
Firstname = givenName
Lastname = sn
Email = mailPrimaryAddress

Geholfen haben mir bei der Arbeit die folgenden Anleitungen: [1] [2] [3]

3ware opcode=0x85

Schweißperlen können einem RAID Statusmeldungen schon mal schnell auf die Stirn treiben. Fragt man den Status eines 3ware RAIDs so ab, dann sieht alles gut aus:

$ /usr/sbin/tw_cli /c0 show all

Fragt man genauer nach mit

$ /usr/sbin/tw_cli /c0 show diag

dann bekommt man Dinge zu sehen, die erst einmal erschrecken lassen. Ich fand heute unter anderem Folgendes:

Error, Unit 0: Invalid command opcode
(EC:0x101, SK=0x05, ASC=0x20, ASCQ=0x00, SEV=01, Type=0x70)
opcode=0x85

Thomas Krenn listet den Fehler nicht auf seiner sonst sehr guten Übersichtsseite zu 3ware Meldungen. Man kommt aber schon dort auf die Idee, dass es sich um ein Kommunikationsproblem handeln könnte, weil der Controller SMART Werte nicht von der Platte, sondern vom Array holen will. Das ist nicht ganz zutreffend.

Sucht man weiter, findet man noch diese Quelle bei Launchpad und das hier im IPFire Forum. Am Ende scheint es darauf hinaus zu laufen, dass SMART versucht von den Platten Temperaturwerte zu erhalten, damit aber nicht durchkommt. Man darf den Fehler wohl tatsächlich ignorieren.

Anders sieht es hiermit aus:

BBU comm error 0x241 while writing packet : I2C transaction aborted

Hierzu klärt der folgende Beitrag bei Serverfault auf, dass 3ware in den default Einstellungen den Schreibcache der Platten im RAID ausschaltet. Das erklärt für mich auch gleich, warum unser RAID so schnarch langsam ist – aber ich trau mich an

$ tw_cli /c1/u0 set cache=on

etc. ohne ein aktuelles Backup und Ferien im Hintergrund, um Katastrophen reparieren zu können, schlicht nicht ran. Eine BBU würde unabhängig von den Geschwindigkeitsproblemen für uns wirklich Sinn machen.

Etherpad Canvas

Verbinde ich mich mit meinem Firefox auf das schulische Etherpad-Lite erhalte ich zuerst eine schnell vorüberziehende Fehlermeldung, dann erscheint der Inhalt des Pads und will ich dann einen Eintrag vornehmen, meldet mir dieses:

Pad-Server nicht erreichbar.
Es konnte keine Verbindung zum Pad-Server hergestellt werden.
Dies könnte an Ihrem Browser oder Ihrer Internet-Verbindung liegen.

Mit Chromium oder Rekonq funktioniert es jedoch.

Bei mir lag das an einem Firefox Addon zum Blockieren von Canvas Skripts:

https://addons.mozilla.org/de/firefox/addon/canvasblocker/?src=api

Trage ich in diesem Addon die schulische Etherpad-Installation in die Whitelist ein, dann läuft das Ganze auch wieder in Firefox.

LD-Server und HTTPS

Webseiten und Dienste auf einem LD-Server laufen intern in LXC Containern oder auf einem Apache, sind jedoch nach Außen über Pound angebunden – und da ist die mitgelieferte Version ein Stück Softwaregeschichte. „Aktuell“ auf LD-Servern ist Version 2.5-1, der in der Default-Konfiguration eine ganze Reihe von Sicherheitsproblemen mit sich bringt. Nicht umsonst erhält man bei SSLLabs für eine nicht-angepasste LD-Server-Installation ein schlichtes F-Rating.

Man muss sich selbst helfen. Support oder Hilfe über die Foren darf man bei einem „Hauptsacheestutsystem“ nicht erwarten.

Mit dem folgenden Eintrag in die /etc/pound/pound.cfg stellt man sich zumindest bezogen auf das SSLLabs-Rating schon einmal viel besser auf und erhält ein C.

# Listen HTTPS
Ciphers "ALL:!ADH:!EXPORT56:RC4+RSA:HIGH:MEDIUM:!LOW:!SSLv2:+EXP:!eNUL:!EXP-DES-CBC-SHA:!EXP-RC2-CBC-MD5:!EXP-RC4-MD5:!EXP-DES-CBC-SHA:!EXP-RC2-CBC-MD5:!EXP"

Der Weisheit letzter Schluss ist das nicht: Die Konfiguration wird nach Systemupdates immer mal wieder überschrieben, so dass man hier gelegentlich vorbei schauen sollte. Außerdem hinterlässt auch die Zeile oben noch das eine oder andere Leck.

Aber es ist besser als vorher.

PS: Ein aktuelles Ubuntu Trusty hätte einen Pound 2.6-3 an Bord. Siehe http://packages.ubuntu.com/trusty/pound Der 2.5-1er Pound auf dem LD-Server scheint aus Oneiric zu stammen. Das war im Jahr 2011.

Wiedergänger

Direkt nach dem Umstieg von Ubuntu 12.04 auf 14.04 wollte sich die Horde-Installation meiner Schule nicht auf den neuesten Stand bringen lassen. Das übliche und sonst erfolgreiche

pear upgrade -a -B -c horde

brachte Fehlermeldungen nach dem folgenden Schema

downloading Horde_ActiveSync-2.25.0.tgz ...
Starting to download Horde_ActiveSync-2.25.0.tgz (345,324 bytes)
......................................................................done: 345,324 bytes
could not extract the package.xml file from "/build/buildd/php5-5.5.9+dfsg/pear-build-download/Horde_ActiveSync-2.25.0.tgz"
Download of "horde/horde_activesync" succeeded, but it is not a valid package archive
Error: cannot download "horde/Horde_ActiveSync"
downloading Horde_Compress-2.1.0.tgz ...
Starting to download Horde_Compress-2.1.0.tgz (2,187,446 bytes)
...done: 2,187,446 bytes
could not extract the package.xml file from "/build/buildd/php5-5.5.9+dfsg/pear-build-download/Horde_Compress-2.1.0.tgz"
Download of "horde/horde_compress" succeeded, but it is not a valid package archive
Error: cannot download "horde/Horde_Compress"
Download failed
upgrade failed

Damals half mir der folgende Bugreport bei launchpad weiter, der mich im Beitrag #9 auf die richtige Spur brachte. Der Fehler sitzt in der Datei

/usr/share/php/Archive/Tar.php

Hier muss gzopen durch gzopen64 ersetzt werden und gztell durch gztell64 und gzseek durch gzseek64.

Irgendwann im Laufe der letzten Woche muss ein Update gekommen sein, das die Tar.php ersetzte. Aktuell befinden sich die zu ändernden Zeilen samt angepasstem Inhalt in der Tar.php hier:

679:  if ($this->_compress_type == 'gz' && function_exists('gzopen64'))
680:  $this->_file = @gzopen64($this->_tarname, "wb9");
734:  if ($this->_compress_type == 'gz' && function_exists('gzopen64'))
735:  $this->_file = @gzopen64($v_filename, "rb");
759:  $this->_file = @gzopen64($this->_tarname, "r+b");
1782: $v_temp_tar = @gzopen64($this->_tarname.".tmp", "rb");
889:  @gzseek64($this->_file, gztell64($this->_file)+($p_len*512));

Dann läuft das Upgrade von Horde brav durch:

downloading Horde_ActiveSync-2.25.0.tgz ...
Starting to download Horde_ActiveSync-2.25.0.tgz (345,324 bytes)
......................................................................done: 345,324 bytes
downloading Horde_Compress-2.1.0.tgz ...
Starting to download Horde_Compress-2.1.0.tgz (2,187,446 bytes)
...done: 2,187,446 bytes
upgrade ok: channel://pear.horde.org/Horde_Compress-2.1.0
upgrade ok: channel://pear.horde.org/Horde_ActiveSync-2.25.0

Bis zum nächsten Mal.

Alteschbühl II

Der zweite Versuch die Alteschbühlhöhle zu finden. Ich dachte, dass der Schnee an der Stelle geschmolzen sein könnte, an der nur Stangen den Eingang abdecken. Gefunden habe ich nichts – weder in den Dolinenfeldern im Wald noch um das Wäldchen herum. Der Schnee lag wohl zu dick – oder über den Stangen liegt schon so viel Humus, dass dieser isolierend wirkt und so das Schmelzen verhindert.

OSM mit Routenplaner

osmroute

(C) Openstreetmap und Mitwirkende; https://www.openstreetmap.org/copyright

Openstreetmap enthält seit kurzem einen Routenplaner, der zumindest bei meinen ersten Tests, keinen totalen Blödsinn plant: OSM würde mich auf meine Standardstrecke nach Biberach ebenso schicken wie auf meine liebste Strecke nach Esslingen-Zell. Auch im näheren Umfeld scheint auf den ersten Blick alles zu passen.

km

(C) Openstreetmap und Mitwirkende; https://www.openstreetmap.org/copyright

Etwas wild scheint mir die Planung innerhalb von Stuttgart auf dem Weg zum KM zu sein: Einfacher wäre es hier, in die Kronenstraße einzubiegen und dann über die Lautenschlägerstraße zur Thouretstraße zu fahren. Ich muss mir die Daten einmal vor Ort ansehen – evtl. fehlen da ein paar Knoten auf der Karte.

offroad

(C) Openstreetmap und Mitwirkende; https://www.openstreetmap.org/copyright

Etwas verwunderlich für mich: Will man zu Fuß z.B. vom Öschinger Freibad zur Öschinger Klufthöhle, dann endet die Wegbeschreibung zusammen mit dem Weg. Man kommt also in die Nähe, aber nicht ans Ziel 🙂 Ein Phänomen, das mir gerade im Fall dieses Lochs wohl vertraut ist.

Im Moment ist die Routenplanung auf Start und Ziel beschränkt – Zwischenstops werden noch nicht unterstützt.

Mehr Infos bei OSM im Blog schon am 16/02.

Locale Probleme mit Dudle auf 14.04

Sollten sich bei einer Dudle Installation auf 14.04 die Apache error.logs mit Meldungen in der folgenden Art füllen

[cgi:error] [pid 20502] AH01215: /var/www/pfad/zu/dudle/vcs_git.rb:53:in `split': invalid byte sequence in US-ASCII (ArgumentError), referer: https://pfad.zu/dudle/
[cgi:error] [pid 20502] AH01215: \tfrom /var/www/pfad/zu/dudle/vcs_git.rb:53:in `history', referer: https://pfad.zu/dudle/
[cgi:error] [pid 20502] AH01215: \tfrom /var/www/pfad/zu/dudle/giykf19s/edit_columns.cgi:47:in `<main>', referer: https://pfad.zu/dudle/
[cgi:error] [pid 20502] End of script output before headers: edit_columns.cgi, referer: https://pfad.zu/dudle/

und Dudle einen bei der Eingabe von Worten mit Umlauten und / oder Ligaturen wieder auf seine Startseite werfen, dann hilft das Folgende: Zuerst ausschließen, dass man auf dem Server ein generelles Problem mit seinem locales hat. Es hilft ein

dpkg-reconfigure locales

Ein kontrollierender Blick in die folgenden Systemdateien sollte auch nicht schaden. Hier werden die Defaults gesetzt:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
LC_ALL="de_DE.UTF-8"
LANG="de_DE.UTF-8"
/etc/environment (END)

und

LANG="de_DE.UTF-8"
LC_ALL="de_DE.UTF-8"
/etc/default/locale (END)

Ist hier alles in Ordnung, dann kann der  folgende Eintrag in die dudle.rb helfen:

# /var/www/pfad/zu/dudle/dudle.rb

# coding: utf-8
Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8

Nach einigem Hin und Her haben mir vor allem diese Einträge bei stackoverflow geholfen auf die richtige Spur zu kommen.

Wer unter CentOS und damit ruby 1.8 arbeitet hat noch Glück: Der Fehler geht an einem vorbei, scheint demnach ein Ubuntu Server und ruby 1.9.x Problemchen zu sein.

Pydio auf LD-Server über HTTPS

Pydio wird vom LD-Server in einem LXC Container als Virtuallisierungsschicht mitgeliefert. Nur dumm, dass die gesamte Konfiguration des LD-Servers immer über Subdomains läuft, was den Einsatz eines günstigen Zertifikats für nur eine Domain unmöglich macht, will man nicht auf self-signed zurückgreifen. Self-signed verbietet sich jedoch im schulischen Umfeld für die Dienste, die alle nutzen können sollten, weil man so die LuL und SuS dazu erzieht, Zertifikatswarnungen nicht ernst zu nehmen. Meine Lösung verwendet nun einen Apache Reverse Proxy [1], um die interne Pydio Domain extern in einem Unterverzeichnis der SSL-verschlüsselbaren Schuldomain einzublenden. Damit das klappt, müssen der Reverse Proxy Pound des LD-Servers mit dem Reverse Proxy Apache und dem NGinx im LXC-Container in Reihe geschaltet werden. Das geht so:

1. Kontrollieren ob der Symlink auf /etc/apache2/sites-available/pydio in /etc/apache2/sites-enabled weg ist (die Konfiguration findet an anderer Stelle statt).

2. In der /etc/apache2/sites-enabled/000-default die folgenden Einträge in den Abschnitt für VirtualHost * und auch in den Abschnitt für VirtualHost *:443 vornehmen:

ProxyRequests Off
   <Proxy *>
    Order allow,deny
    Allow from all
  </Proxy>
ProxyPass /pydio http://pydio/
ProxyPassReverse /pydio http://pydio/

3. In der /etc/logodidact/service.conf Pydio für die Domain, die man schon mit SSL versorgt, einschalten:

[Pydio]
Host sub.domain.tld
Alias pydio.sub.domain.tld
AllowExternalHTTPS yes
URL sub.domain.tld/pydio
RedirectExternalHTTP https://sub.domain.tld/pydio

4. Die beteiligten Dienste neu starten:

ldfirewall restart
update_pound_config -r
/etc/init.d/apache2 restart

Ein

host pydio

auf dem LD-Server muss eine Antwort liefern, sonst braucht man nicht weiterforschen, sondern muss die DNS Probleme in den Griff bekommen. Auch ein

links2 http://pydio
links2 https://pydio # weniger relevant, s.U.

sollte Ergebnisse liefern – mindestens eine Zeile HTML Code sollte zu sehen sein, mehr schafft links2 nicht, weil es kein JavaScript kann.

Der Aufruf von Pydio funktioniert dann reibungslos, wenn man den „trailing slash“ im URI zu Pydio nicht vergisst. Ohne diesen sieht man nur ein leeres Fenster. Alle Links für die Kolleg/innen und Schüler/innen sollten also so aussehen:

https://sub.domain.tld/pydio/

Jetzt funktioniert das Setup durchgehend ohne Zertifikatswarnungen und zumindest bis zum internen Reverse Proxy Pound auch verschlüsselt.

Wie und ob Pound dann dem Apache Reverse Proxy (als Übersetzer zwischen Internet und virtueller Pydio Maschine m LXC Container) die Daten verschlüsselt weiterreicht habe ich nicht geprüft. Ich vermute aber, auf Grund der Konfiguration, dass dem nicht so ist. Das sollte aber kein Problem darstellen, da an diesen Datenstrom nur root direkt auf dem Server rankommt.

Zu empfehlen ist eine Konfiguration von Pydio durch den Benutzer admin. Auf Pydio ist dieser mit den nötigen Rechten ausgestattet, weil der LXC Container über LDAP am LD-Server hängt. Hier sollte man alles abschalten was geht – vor allem die Funktionen zum unbegrenzten Teilen per Link und ohne Passwort. Denn: LD stellt Pydio extrem offen zur Verfügung. So offen, dass man aus Urheberrechts- und Datenschutzsicht Einschränkungen vornehmen muss, will man seine Schule und Schüler nicht ausliefern.

Weiter ist die Pydio Installation auch komplett veraltet (Version 5.0.4 – aktuell ist 6). Damit muss man wohl leben bei dieser Schulserverlösung. Deren Marketingabteilung wird das Konzept sicherlich als „bewährte Software“ verticken. Auf den bekannteren Exploit-DBs fand ich aktuell aber nichts, was Skript-Kiddies auf die Schnelle gegen Pydio einsetzen könnten.

Ratte 3

L1070024

Lewin hat sich zu Weihnachten eine Madcatz Mad Catz R.A.T.3 Mouse besorgt. Die wollte aber an seinem Rechner nicht funktionieren. Je nachdem, wann man sie einsteckte, funktionierte sie zuerst wie jede andere Maus auch – dann aber bald überhaupt nicht mehr. Zickig war vor allem die linke Maustaste.

Eine Recherche im Netz brachte immer wieder den Tipp, in die xorg.conf Einträge zu dieser Maus vorzunehmen [1, 2]. Das ist im Prinzip auch richtig, passt aber auf Lewins Rechner nicht, weil er Dank proprietärem Nvidia-Treiber schon eine ausgewachsene /etc/X11/xorg.conf hat, die bei den vorgeschlagenen Erweiterungen den X-Server am Start hindern. Copy and Paste nach Online-Anleitung half ihm demnach nicht weiter.

Das folgende Vorgehen brachte die Maus zu Laufen und X wurde nicht behindert: Mit xinput wird der exakte Name der Maus ausgelesen, damit die MatchProduct Zeile (siehe unten) später funktioniert:

dirk@lewin:~$ xinput
? Virtual core pointer                          id=2    [master pointer  (3)]
?   ? Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
?   ? Madcatz Mad Catz R.A.T.3 Mouse            id=11   [slave  pointer  (2)]
?   ? AlpsPS/2 ALPS DualPoint TouchPad          id=13   [slave  pointer  (2)]
?   ? DualPoint Stick                           id=14   [slave  pointer  (2)]
? Virtual core keyboard                         id=3    [master keyboard (2)]
    ? Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ? Power Button                              id=6    [slave  keyboard (3)]
    ? Video Bus                                 id=7    [slave  keyboard (3)]
    ? Power Button                              id=8    [slave  keyboard (3)]
    ? Sleep Button                              id=9    [slave  keyboard (3)]
    ? Laptop_Integrated_Webcam_3M               id=10   [slave  keyboard (3)]
    ? AT Translated Set 2 keyboard              id=12   [slave  keyboard (3)]
    ? Dell WMI hotkeys                          id=15   [slave  keyboard (3)]

Unter Kubuntu 14.04 wird sodann die Datei /usr/share/X11/xorg.conf.d/50-vmmouse.conf überarbeitet:

#Section "InputClass"
#       Identifier      "vmmouse"
#       MatchIsPointer  "on"
#       MatchTag        "vmmouse"
#       Driver          "vmmouse"
#EndSection
Section "InputClass"
        Identifier "Mouse Remap"
        MatchProduct "Madcatz Mad Catz R.A.T.3 Mouse"
        MatchDevicePath "/dev/input/event*"
        Option "ButtonMapping" "1 2 3 4 5 6 7 8 9 0 0 0 0 0 0"
EndSection

Die /etc/X11/xorg.conf bleibt demnach unangetastet.

Den Rechner einmal neu gebootet (evtl. reicht auch ein Neustart des X-Servers), eingeloggt, erst dann die Maus angesteckt, damit X eine Chance hat, den event zu registrieren, und sie funktioniert.

Wozu Lewin 14 Tasten auf ner Maus benötigt? Ich weiß es nicht. Ist aber sein Problem.