#savetheinternet
- Details
Die geplante Urheberrechtsreform der EU wird die Freiheit des Internet einschränken.
Aus Protest gegen diese Reform gab es in den letzten Tagen bereits europaweit Demonstrationen. Wikipedia schließt sich den Protesten an und wird am 21.03.2019 die Seite für den ganzen Tag schließen.
Für Joomla habe ich leider kein Tool gefunden, dass einen zeitbasierten Wartungsmodus möglich machen würde. Alternativ kann man seine Seite aber auch per htaccess an diesem Tag auf eine Infoseite umleiten.
RewriteCond %{TIME_YEAR} =2019 RewriteCond %{TIME_MON} =03 RewriteCond %{TIME_DAY} =21 RewriteRule .* savetheinternet.html [L] #RewriteRule .* https://timokoessler.gitlab.io/savetheinternet/ [R=302,L]
Alternativ zu einer eigenen Infomationsseite, kann auch auf eine externe Seite umgeleitet werden. Im obigen Beispiel ist die zugehörige Regel jedoch deaktiviert.
Keine Sicherheitsupdate mehr für Windows XP
- Details
Zum 8. April 2014 endet der 12-jährige Support von Microsoft für Windows XP¹.
Ab diesem Zeitpunkt werden keine automatischen Updates mehr bereitgestellt und neu-entdeckte Sicherheitslücken werden nicht mehr automatisch geschlossen.
Einige Hersteller von Antivirensoftware haben bereits angekündigt Windows XP auch weiterhin zu unterstützen. Einen Freifahrtschein zur Virenabwehr stellt das aber mitnichten dar, da Angriffe per Trojaner, Viren und sonstiger Malware unter Umständen auch an der Antivirensoftware vorbei erfolgt.
Wechseln Sie daher Ihr Betriebssystems in nächster Zeit.
Ob Windows 7/8/8.1 oder ein Umstieg auf Linux für Sie am sinnvollsten ist, lässt sich meist in einer kurzer Beratung klären.
Schreiben Sie uns eine kurze Nachricht über das Kontaktformular und wir setzen uns mit Ihnen in Verbindung.
Startseite
- Details
Wenn Sie einen Ansprechpartner für Ihre Webseite, für die Betreuung Ihrer Bürohard- und Software suchen oder allgemeine Fragen rund um das Thema Computer und Technik haben, dann sind Sie hier richtig.
Für die Umsetzung von Webseiten greifen wir vornehmlich auf das freie Content Management System (CMS) Joomla zurück, dass auch für Nicht-Techniker die Pflege von Webseiteninhalten sehr einfach macht.
Für den grafischen Entwurf von Webseiten arbeiten wir mit lokalen Mediendesignern zusammen, die in der Lage sind, den kompletten Nicht-Internetbereich abzudecken. Von der Erstellung von Corporate Design bis hin zu Großformatdruck ist alles aus einer Hand möglich.
Sortierung der Lieder auf MP3-Stick
- Details
Manche ältere MP3-Sticks scheinen keine Sortierung nach Dateinamen oder MP3-Tags zu unterstützen.
Stattdessen wird als einzige Sortiervorgabe das Dateialter auf dem Datenträger verwendet.
Beim Kopieren ganzer Ordner und ggf. parallelen Zugriffen bzw. unterschiedlichen Abarbeitungsreihenfolgen, ist damit die gewünschte Sortierung auf dem Stick nicht mehr vorhanden. Das Umbenennen der einzelnen Daten bringt keinen Erfolg.
Lösung
cd "[Herkunftsordner]" find . | sort | xargs -I % sh -c '{ echo "$@"; cp "$@" --parents --target-directory=[Zielordner]; sleep 1; }'
Durch das Hinzufügen einer 1-sekündigen Wartezeit wird die Skriptlaufzeit verlängert, mögliche Doppelkopien (Verdrehungen) innerhalb einer Sekunde aber ausgeschlossen.
Beispielgeräte
- Micropix IM-1LN3-EZWO
Diff/Patch zur Quellcodewartung
- Details
Anlegen/Sichern der Originaldateien
mkdir -p /tmp/osg_courts/admin/ /tmp/osg_courts/front/ cp -r /var/www/html/veranstaltungen.gera.de/administrator/components/com_osgcourts/* /tmp/osg_courts/admin/ cp -r /var/www/html/veranstaltungen.gera.de/components/com_osgcourts/* /tmp/osg_courts/front/ cp /var/www/html/veranstaltungen.gera.de/language/de-DE/de-DE.com_osgcourts.ini /tmp/osg_courts/front_de-DE_osg_courts.ini cp /var/www/html/veranstaltungen.gera.de/administrator/language/de-DE/de-DE.com_osgcourts.ini /tmp/osg_courts/admin_de-DE_osg_courts.ini
Anpassungen vornehmen
Stellvertretend für andere Änderungen wird das "JURI" durch "JUri" ersetzt. Dies geschieht rekursiv beginnend am aktuellen Verzeichnis und wird direkt in die Datei zurückgespielt.
Wenn hier ein Fehler auftritt, kann es sein, dass die Ausgabedatei anschließend leer ist. Ein Backup ist also sinnvoll.
find . -name "*.php" -exec sed -ri "s|JURI::|JUri::|" {} \;
Patch erstellen
Die oben gesicherten Verzeichnisse bzw. Dateien werden jetzt mit den aktuellen, geänderten Versionen verglichen und daraus Patch-Dateien erstellt.
diff -crB /tmp/osg_courts/admin /var/www/html/veranstaltungen.gera.de/administrator/components/com_osgcourts/ > /tmp/osg_courts_admin.patch diff -crB /tmp/osg_courts/front /var/www/html/veranstaltungen.gera.de/components/com_osgcourts/ > /tmp/osg_courts_front.patch diff -Naru /tmp/osg_courts/front_de-DE_osg_courts.ini /var/www/html/veranstaltungen.gera.de/language/de-DE/de-DE.com_osgcourts.ini > /tmp/front_de-DE.com_osgcourts.ini.patch diff -Naru /tmp/osg_courts/admin_de-DE_osg_courts.ini /var/www/html/veranstaltungen.gera.de/administrator/language/de-DE/de-DE.com_osgcourts.ini > /tmp/admin_de-DE.com_osgcourts.ini.patch
Patch einspielen
cd /var/www/html/veranstaltungen.gera.de/administrator/components/com_osgcourts/ patch < /tmp/osg_courts_admin.patch cd /var/www/html/veranstaltungen.gera.de/components/com_osgcourts/ patch < /tmp/osg_courts_front.patch cd /var/www/html/veranstaltungen.gera.de/administrator/language/de-DE/ patch < /tmp/admin_de-DE.com_osgcourts.ini.patch cd /var/www/html/veranstaltungen.gera.de/language/de-DE/ patch < /tmp/front_de-DE.com_osgcourts.ini.patch
Zabbix-Alarme mit dynamischen Items
- Details
Mit der Monitoringlösung Zabbix ist es relativ einfach möglich, bei der Über-/Unterschreitung bestimmter Grenzwerte Alarme zu erstellen und diese auf verschiedenen Wegen versenden zu lassen. Zabbix verfügt dabei über eine relativ einfache Struktur.
Zabbix-Grundstruktur
- Geräte sind "hosts".
- "hosts" haben "items", also einzeln überwachte Variablen mit Werten "values".
- Grenzwerte eines "items" heißen "trigger".
- Wenn ein Grenzwert über-/unterschritten wird, wird ein "event" ausgelöst.
- Eine "action" startet einen (Benachrichtigungs-) Prozess, nachdem ein "event" ausgelöst wurde.
- Eine Benachrichtigung wird an Nutzer oder Nutzergruppen geschickt über unterschiedliche Wege ("media") geschickt.
- Das Ziel der Benachrichtigung wird in der "action" anhand des zu alarmierenden Nutzers ermittelt. Über "macros"1 lassen sich die Texte anpassen.
- Diese "macros" können auch verschiedene Werte des host-Objektes annehmen.
Es ist nicht möglich, jede Art von item-Wert für die Benachrichtigung zu nutzen.
Wie man das dennoch dynamisieren kann, zeigt dieses Beispiel.
Beispiel
- Es wird ein Emailzugang angelegt, der die Daten nur dem lokalen Benutzer (auf dem Zabbix-Server) zustellt.
- Auf dem Server sind Zusatzprogramme notwendig.
- fetchmail (Zum Abholen der Email.)
- procmail (Zum Verarbeiten der Email.)
- formail (Zum Umformatieren der Emaildatei.)
Über die systemd-Services (analog cronjob) werden die Emails regelmäßig abgeholt und die Weiterverarbeitung gestartet.
nano /etc/systemd/system/multi-user.target.wants/mailrelay.service [Unit] Description=Mail relay (service) [Service] Type=simple ExecStart=/bin/sh -c '/bin/mv /var/mail/zabbix /var/mail/zabbix.tmp && /usr/bin/formail -s /usr/bin/procmail < /var/mail/zabbix.tmp && /bin/rm /var/mail/zabbix.tmp' [Install] WantedBy=multi-user.target
nano /etc/systemd/system/multi-user.target.wants/mailrelay.timer [Unit] Description=Mail relay [Timer] OnCalendar=*:0/5 Persistent=true [Install] WantedBy=multi-user.target
fetchmail startet procmail
nano /root/.fetchmailrc set no bouncemail defaults: batchlimit 100 poll localhost with protocol imap user "zabbix" password "[PASSWORT]" is zabbix ssl fetchall # keep no rewrite mda "/usr/bin/procmail -f %F -d %T";
procmail verarbeitet die Email
nano /root/.procmailrc SHELL=/bin/sh PATH=/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin MAILDIR=$HOME DEFAULT=/dev/null LOGFILE=/var/log/procmail.log LOG="" VERBOSE="yes" SUBJ=`formail -xSubject: ` NEW_SUBJ=`echo "${SUBJ}" | expand | /bin/sed -e 's|#[^# ]*#||g' -e 's|^\s*||g'` NEW_TO=`echo "${SUBJ}" | expand | /bin/sed -n 's/.*#\([^# ]*\)#.*/\1/p' | /bin/grep -E "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,63}$"` :0 bfhw * ^To: <zabbix@localhost> * !^X-Loop: This email address is being protected from spambots. You need JavaScript enabled to view it. * !^Subject:.*Re: * !^FROM_DAEMON | formail -k -X "Content-Type:" -X "Content-Transfer-Encoding:" -X "Subject:" -X "From:" -X "Subject:" -X "Message-Id:" -X "Date:" -X "To:" -I "Content-Transfer-Encoding: base64" -I "From: This email address is being protected from spambots. You need JavaScript enabled to view it." -A "X-Loop: This email address is being protected from spambots. You need JavaScript enabled to view it." -I "To: ${NEW_TO}" -I "Subject: ${NEW_SUBJ}" | $SENDMAIL -oi ${NEW_TO}
{phocagallery view=category|categoryid=30|imageid=44|float=left}
{phocagallery view=category|categoryid=30|imageid=45|float=left}
Rekursive Darstellung eines Verzeichnisbaums als Liste
- Details
$startdir = "[Startverzeichnis]"; $files = glob_recursive("*", GLOB_NOSORT|GLOB_MARK, $startdir); sort($files); $prev_level = -1; for($i=0; $i<count($files); $i++) { $files[$i] = str_replace($startdir,"", $files[$i]); $curr_level = substr_count(substr($files[$i],0,-1),"/"); $dir = (substr($files[$i],-1)=="/"); if($prev_level<$curr_level) { echo "<ol>"; } else if ($prev_level>$curr_level) { echo str_repeat("</ol></li>", $prev_level-$curr_level); } echo "<li>".$files[$i]; if(!$dir) { echo "</li>"; } else { echo "<ol>"; $curr_level++; } $prev_level = $curr_level; } echo str_repeat("</ol></li>", $prev_level); echo "</ol>"; function glob_recursive($pattern, $flags = 0, $startdir = ''){ $files = glob($startdir.$pattern, $flags); foreach (glob($startdir.'*', GLOB_ONLYDIR|GLOB_NOSORT|GLOB_MARK) as $dir){ $files = array_merge($files, glob_recursive($pattern, $flags, $dir)); } return $files; }
OpenWRT als WLAN-Repeater
- Details
TP-Link 841D, die unter OpenWRT laufen, sind relativ einfach als Repeater-Ersatz nutzbar.
Dafür wird allerdings nicht das Originalnetz weiter verteilt, sondern es erfolgt ein Routing eines lokalen Netzes in das Original-WAN-Netz.
Mit dieser Variante umgeht man einige Fallstricke, die bei einem reinen Repeater-Einsatz zu meistern sind. Zum Dauerbetrieb sollte die WLAN-Struktur allerdings angepasst und verbessert werden.
Die Konfiguration kann auch per WLAN durchgeführt werden. Dafür sind Vorbereitungen notwendig, die einem dann bspw. im Urlaub die Mitnahme eines Laptops ersparen.
Zentralisierte Backups mit BURP
- Details
Vor einiger Zeit musste ich mehrfach hintereinander meine Systemlandschaft neu ausetzen.
Jedes einzelne Mal habe ich mir dabei vorgenommen:
"Gleich wenn ich fertig bin, kümmere ich mich um die Backups!"
Meist habe ich jedoch stattdessen anschließend wieder neu aufgesetzt, weil meine Hardwareplattform (Odroid C1) schon wieder die Daten auf den USB-Sticks zerstört hatte.
Ich habe mir während der Recherche verschiedene Backuptools angeschaut und mit dem verglichen, was ich nutzen wollte und was KO-Kriterien für den Einsatz waren.
Meine Anforderungen
- Client-/Serverarchitektur
- zentralisiertes Backup zur einfachen Administration
- Clients für verschiedene Betriebssysteme (Windows und Linux ist zwingend, Android, IOS wäre schön)
- Server unter Linux lauffähig
- Web-basierte Verwaltung
Nach einigen Abwägungen kamen BURP und UrBackup in den Test. Dort gefiel mir die Optik und das Handling von BURP einfach besser.
Installation
apt-get update apt-get install burp
An den Einstellungen in /etc/burp/burp-server.conf habe ich nur die SSL-Pfade angepasst.
ssl_key = /etc/burp/ssl_cert_backup.key ssl_cert = /etc/burp/ssl_cert_backup.crt ssl_cert_ca = /etc/burp/CA/CA_ca.mydomain.crt ca_name = ca.mydomain ca_server_name = ca.mydomain
Der Speicherort ist auf eine nach /var/spool/burp eingebundene USB-Festplatte ausgelagert.
Zum einfachen Hinzufügen von Clients habe ich mir eine kleine Bash-Datei geschrieben, die neue Clients anlegt (Zertifikate generiert) und die Client-Konfiguration auf den Geräte gleich anpasst.
nano /root/burp-add-client.sh
#!/bin/bash SERVER="backup.mydomain" HOSTNAME=$1 PASSWORD=`< /dev/urandom tr -dc a-zA-Z-0-9 | head -c 16 ; ` CANAME="ca.mydomain" CACERT="CA_ca.mydomain.crt" if [ $2 = "sent" ]; then echo "use existing certificates"; else # create client certs burp_ca --name ${HOSTNAME} --ca ${CANAME} --key --request --sign --batch fi scp /etc/burp/CA/${HOSTNAME}.key root@${HOSTNAME}:/etc/burp/ssl_cert_${HOSTNAME}.key scp /etc/burp/CA/${HOSTNAME}.crt root@${HOSTNAME}:/etc/burp/ssl_cert_${HOSTNAME}.crt scp /etc/burp/CA/${CACERT} root@${HOSTNAME}:/etc/burp/${CACERT} # create client config on server echo "cname = ${HOSTNAME}" > /etc/burp/clientconfdir/${HOSTNAME} echo "password = ${PASSWORD}" >> /etc/burp/clientconfdir/${HOSTNAME} echo "server = ${SERVER}" >> /etc/burp/clientconfdir/${HOSTNAME} # create client config on client ssh root@${HOSTNAME} "echo \"\ mode = client ssl_peer_cn = ${SERVER} server = ${SERVER} password = ${PASSWORD} cname = ${HOSTNAME} port = 4971 pidfile = /var/run/burp.client.pid # SSL certificate authority - same file on both server and client ssl_cert_ca = /etc/burp/${CACERT} # Client SSL certificate ssl_cert = /etc/burp/ssl_cert_${HOSTNAME}.crt # Client SSL key ssl_key = /etc/burp/ssl_cert_${HOSTNAME}.key #backup_script_pre=/BACKUP/preBackup.sh #backup_script_post=/BACKUP/postBackup.sh #restore_script_pre=/BACKUP/preRestore.sh #restore_script_post=/BACKUP/postRestore.sh \" > /etc/burp/burp.conf"
Die Pfade, die von den Clients gesichert werden sollen, werden per "include = /PFAD/" hinzugefügt. Unerwünschte Unterordner können per "exclude = /PFAD/" ausgeschlossen werden.
Hinzufügen eines Clients
(Linux-)Client
Installation
apt-get update
apt-get install burp
Anpassung des daemons
nano /etc/default/burp RUN=yes
Start per cronjob
crontab -e */20 * * * * /usr/sbin/burp -a t
Server
sh /root/burp-add-client.sh [HOSTNAME]
Client (nochmal)
nano /etc/burp/burp.conf include = /opt/fhem/ exclude = /opt/fhem/backup/ exclude = /opt/fhem/demolog/ exclude = /opt/fhem/log/ exclude = /opt/fhem/restoreDir/ include = /root/ include = /etc/ include = /var/spool/cron/ include = /BACKUP/ include = /usr/local/share/zabbix/
Quellen:
Fehlendes json-Modul in lxc
- Details
Plötzlich (vermutlich nach einem normalen Update) liefen die lxc-Befehle nicht mehr.
root@lxc:# lxc-ls Traceback (most recent call last): File "/usr/bin/lxc-ls", line 30, in <module> import json ImportError: No module named 'json'
Über "pip" wurde das json-Modul nicht gefunden. Ein simplejson-Modul war jedoch verfügbar.
root@lxc:# pip install simplejson Requirement already satisfied (use --upgrade to upgrade): simplejson in /usr/local/lib/python2.7/dist-packages Cleaning up...
Der angezeigte Modulpfad wurde in die aktuelle Sitzung exportiert...
root@lxc:# export PYTHONPATH=/usr/local/lib/python2.7/dist-packages
...und lxc-ls an den geänderten Modulnamen angepasst.
root@lxc:# nano /usr/bin/lxc-ls #import json import simplejson
Ein anschließendes Ausführen der geänderten lxc-ls war wieder problemlos möglich.
Bereitstellung von Bildern per Phocagallery
- Details
Die Reihenfolge der Ausführungen der nachfolgenden Anleitung ist nicht zwingend so einzuhalten.
Für einen sinnvollen Arbeitsablauf haben sich diese Schritte allerdings bewährt.
- Hochladen der Bilder per FTP (z.B. mit Filezilla)
- Unterordner unter "images/phocagallery" anlegen
- sinnvollen Namen verwenden, keine Leerzeichen, keine Sonderzeichen (z.B. island)
- Bis hier sind es normale Dateioperationen. (Wie am PC, wenn man Dateien im Explorer verschiebt.)
- Im Joomla-Administrator anmelden
- http://IHRESEITE/administrator/
- In der Kategorieliste eine neue Kategorie anlegen
- Komponenten -> Phocagallery -> Kategorien
- Neu
- Die Kategorie ggf. "unter" eine andere hängen. (z.B. "Europa").
- Bilder hinzufügen
- Komponenten -> Phocagallery -> Bilder
- Zum passenden Verzeichnis navigieren
- Alle Bilder auswählen
- Passende Kategorie auswählen
- Speichern & Schließen
- Komponenten -> Phocagallery -> Bilder
- Die Vorschaubilder werden jetzt automatisch erstellt.
- Falls die neue Kategorie auch über die Navigation erreichbar sein soll, dann muss noch ein Menüpunkt dafür angelegt werden.