Ich sammle hier mal ein paar Punkte die ich bei meinem OpenMediaVault verändert habe um etwas zu optimieren oder zu verbessern.
OpenMediaVault Tweaks weiterlesenKategorie: Tips&Tricks
Monitoring mit updo und ntfy
Ich nutze seit einiger Zeit ntfy für Benachrichtigungen von einigen Apps auf meinem Smartphone mit GrapheneOS, da lag es nahe das auch für Benachrichtigungen vom Monitoring zu verwenden. Irgendwo stolperte ich über das Monitoring-Tool updo, das auf den ersten Blick einen leichtgewichtigen Eindruck machte und custom Webhooks unterstützt. ntfy unterstützt ebenfalls Webhooks, sollte also ein Kinderspiel sein.
Monitoring mit updo und ntfy weiterlesenAudiospuren von zwei Videodateien in einer speichern
Recht häufig findet man in der Mediathek der Öffentlich-Rechtlichen einen Film oder eine Serie einmal auf Deutsch und einmal in der Originalfassung. Da mich manchmal beides reizt, ich aber keine zwei Videodateien aufheben möchte habe ich schon länger vor die Tonspuren in nur einer Datei abzulegen. Jetzt habe ich mir die dafür nötigen Befehle endlich mal zusammengestellt, hier meine Notizen dazu.
Audiospuren von zwei Videodateien in einer speichern weiterlesenSCM-Manager Repositories von Usern finden
Ich brauchte eine Übersicht aller Repositories, bei denen eine Gruppe von Usern direkt oder indirekt (über Gruppen) als Owner eingetragen waren.
Die User holte ich mir mit Powershell aus dem Active Directory:
$users = Get-AdGroup Hauptgruppe | Get-AdGroupMember -Recursive | Get-AdUser -Properties memberof
Die Gruppen, in der die User Mitglieder waren holte ich mir auf ähnliche Weise:
$users.memberof | Sort | Unique | Foreach-Object { $_ -Replace 'CN=(.+?),.+','$1' }
Damit hatte ich eine simple Liste aller User und ihrer Gruppen die ich als Textdatei abspeichern konnte.
Für den SCM-Manager gibt es einen Command Line client. Leider ist er inzwischen nicht so einfach zu finden, auch die Doku dazu ist extrem dürftig. Aktuell war er hier zu finden.
Die Usernames und die Gruppennamen speicherte ich in zwei Textdateien, dann erstellte ich noch ein Template für die Ausgabe von scm-cli-client anzupassen. Als Templates wird hier FreeMarker verwendet.
#!/bin/bash
SERVER=https://scm.example.com/scm/
USERNAME=admin
PASSWORD=GEHEIM
CLI="java -jar /opt/scm-cli-client-1.60-jar-with-dependencies.jar --server $SERVER --user $USERNAME --password $PASSWORD"
# Nutzt FreeMarker Templates https://www.vogella.com/tutorials/FreeMarker/article.html
REPOS=`$CLI list-repositories --template-file ./grouptemplate.tpl`
GROUPNAMES=$(<groupnames.txt)
USERNAMES=$(<usernames.txt)
for GROUPNAME in "$GROUPNAMES"; do
echo "$REPOS" |grep "$GROUPNAME"
done;
for USERNAME in "$USERNAMES"; do
echo "$REPOS" |grep "$USERNAME"
done;
Das Template das ich dafür erstellt habe sieht folgendermaßen aus:
<#list repositories as repository>${repository.name}<#if repository.permissions??> <#list repository.permissions as permission><#if permission.type?starts_with("OWNER")>${permission.name} </#if></#list>
</#if>
</#list>
Damit wird schlicht und einfach der Name des Repositorys ausgegeben, gefolgt von allen Ownern. Das lässt sich einfach mittels grep filtern. Die Ausgabe davon habe ich dann noch gefiltert um jedes Repository nur einmal zu bekommen, für den Fall das jemand sowohl über eine Gruppe als auch über seinen Username Rechte hat
./findrepos.sh | sort | uniq
Voilá, alle Repositories in denen die User direkt oder indirekt Owner-Rechte haben.
PHP Fehlerdiagnose
Bei PHP-Installationen ist meistens die Fehlerausgabe deaktiviert, was bei Produktivumgebungen in der Regel auch sinnvoll ist. Während der Entwicklung oder bei der Fehlerdiagnose ist das jedoch eher hinderlich.
error_reporting(E_ALL ^ E_NOTICE); // Alle Fehler ausser Hinweisen anzeigen
ini_set("display_errors", 1); // Fehler im Script selbst anzeigen
Wenn man die Fehler nicht ausgeben möchte (z.B. in einem Produktivsystem) kann man sie auch im Fehlerprotokoll des Webservers sehen.
Bei manchen Webspace Hostern hat man allerdings keine Möglichkeit auf das Fehlerprotokoll des Webservers zuzugreifen. Möchte man trotzdem PHP Fehlermeldungen sehen kann man das Log auf eine eigene Datei umbiegen:
ini_set("log_errors", 1); // Fehler ins Protokoll schreiben
ini_set("error_log", "/path/to/php_errorlog.log"); // Pfad zu eigenem Fehlerprotokoll setzen
Natürlich funktioniert das nur wenn der Hoster die Benutzung des
ini_set
Befehls erlaubt, einige Hoster verbieten das.
Verzögerung bei Spielen am Fernseher
Gestern Abend habe ich das erste Mal per PC am Fernseher etwas gespielt das präzise Reaktionen erfordert und dabei festgestellt dass es bei jedem Tastendruck am Gamepad ein leichtes Delay gab bis die Aktion zu sehen war. Auf Dauer etwas frustrierend. Daraufhin habe ich nahezu eine Stunde versucht herauszufinden woran es liegt: Andere Auflösung, weniger Details, VGA- statt Displayport/HDMI-Kabel, Entfernung vom Gamepad zum Funkempfänger, neue Batterien ins Gamepad, hat alles nichts gebracht. Irgendwann habe ich genervt aufgegeben und heute nochmal einen anderen PC probiert, der normalerweise nur als Mediacenter genutzt wird und immer daran angeschlossen ist. Gleiches Problem, wenn auch nicht ganz so stark ausgeprägt.
Deutsches Datum in MySQL-Format konvertieren
Mit einem SQL-Einzeiler lassen sich Daten im deutschen Format in das MySQL DateTime-Format umschreiben.
UPDATE `table` SET `DateSQL`=STR_TO_DATE(`DateDeutsch`, "%d.%m.%Y");
Der zweite Parameter von STR_TO_DATE gibt dabei an in welchem Format das Datum im Feld DateDeutsch steht. %d steht für den Tag, %m für den Monat und %Y für das (4-stellige) Jahr.
Active Directory LDAP-Zugriffe mit mehreren Domain Controllern
Auch in einer Windows-Domänen Umgebung kommt man früher oder später darauf, dass es eine Anwendung gibt die nicht auf Windows und IIS, sondern auf einem Apache läuft, vielleicht mit PHP oder einer anderen Skriptsprache. Sowohl PHP als auch der Apache direkt bieten über LDAP die Möglichkeit einen Domain Controller abzufragen, Beispielsweise zur Authentifizierung.
Spätestens wenn ausgerechnet der Domain-Controller ausgefallen (oder wegen Wartungsarbeiten nicht erreichbar) ist, den die PHP-Scripte zur Authentifizierung benutzen, stellt sich die Frage wie man es einrichtet dass irgend ein verfügbarer Domain Controller genutzt wird. Glücklicherweise sind sowohl PHP als auch das Apache-Modul für diesen Fall vorbereitet, und nutzen sogar das gleiche Prinzip dafür. Man muss lediglich an der Stelle wo der Servername steht mehrere Adressen durch Leerzeichen getrennt eintragen.
PHP-Aufruf:
$conn = ldap_connect("dc01.domain.local dc02.domain.local");
ldap_bind($conn, $username, $password);
Eintrag in der Apache-Konfiguration:
AuthLDAPUrl "ldap://dc01.domain.local:3268 dc02.domain.local:3268/dc=domain,dc=local?sAMAccountName?sub?(objectClass=*)" STARTTLS
Hier muss man darauf achten dass der LDAP-String in Anführungszeichen steht (solange kein Leerzeichen vorkommt funktioniert es auch ohne).
Auf diese Art werden alle angegebenen Server durchprobiert bis einer gefunden wird der erreichbar ist.
Quellen: mod_auth_ldap Dokumentation, Kommentar in der PHP-Dokumentation zu ldap_connect()
Confluence Seite mit Unterseiten in anderen Space kopieren [Update]
Confluence bietet zwar die Möglichkeit einzelne Seiten in andere Spaces zu kopieren, aber dabei bleiben Anhänge und Unterseiten auf der Strecke. Mit dem Atlassian Command Line Interface lassen sich eine Menge netter Befehle auf der Kommandozeile ausführen, darunter auch dieser:
./confluence.sh -s https://server.local/confluence/ -u username -p secret \
-a copyPage --space currentSpace --title pageTitle --newSpace newSpace \
--parent newParentPage --descendents --copyAttachments --copyComments --copyLabels
Der Befehl verbindet sich mit dem Server und kopiert die Seite pageTitle im Space currentSpace mit all ihren Unterseiten, Dateianhängen und Kommentaren in den Space newSpace als Unterseite von newParentPage.
Die aktuelle Version des Command Line Interface kostet zwar mittlerweile Geld, die letzte freie Version (unter BSD Lizenz) ist jedoch immer noch zum Download verfügbar und kann auch schon eine ganze Menge.
Quelle: (The pain of) managing content in Confluence
Ergänzung 29.10.2012
Mit der hier beschriebenen Methode konnte ich die meisten Seiten migrieren, leider gab es in einem Punkt Probleme: Die Confluence Remote Schnittstelle kommt mit dem Upload von größeren Dateien nicht klar, die Grenze scheint irgendwo bei 5MB oder so zu liegen. Der Fehler ist bereits seit einem Jahr bekannt, hier hat sich jedoch noch nichts getan.
Dafür hat mich die Dokumentation von Confluence zum Löschen von Seiten auf eine Idee gebracht:
- Seite aus dem alten Space in einen neuen, temporären Space 1 verschieben
- temporären Space kopieren
- Seite aus temporärem Space 1 zurück in den alten Space verschieben
- Seite aus temporärem Space 2 in den Ziel-Space verschieben
- beide temporäre Spaces löschen
Die Prozedur habe ich noch nicht getestet, ich sehe allerdings keinen Grund wieso es nicht funktionieren sollte.
Facebook-Anwendung blockieren [Update #5]
Vor kurzem ist mir aufgefallen dass ich keine Möglichkeit mehr habe Facebook-Anwendungen zu blockieren. Bisher konnte ich immer auf die Profilseite der Anwendung gehen, dort gab es links in der Spalte unten einen Link “Anwendung blockieren”. Das Blockieren der Anwendung hat den Vorteil dass ich keine Anfragen mehr dazu bekomme und dass ich den Zugriff des Programms auf Daten von mir verhindere, auch wenn Freunde die Anwendung nutzen. Neuerdings kommt man nicht mehr auf die Profilseiten, man wird direkt zur Anwendung weitergeleitet.
Im Dezember 2011 hat Facebook angekündigt dass ab Anfang Februar 2012 die Profilseiten eingestellt werden. Stattdessen kann jede Anwendung eine dazugehörige Seite anlegen, bei der dann zusätzliche Anwendungsspezifische Optionen vorhanden sind, darunter ein Link zur Anwendung und die Option zum Blockieren. Facebook-Anwendung blockieren [Update #5] weiterlesen