[C64]

Einzelne Frames aus VICE Aufnahme extrahieren

Und mal eine kleine Notiz an mich, wie man einzelne Frames als PNG aus VICE Ausnahmen extrahiert.

Zuerst macht man in VICE eine Screen Capture Aufnahme im ZMBV Format.

Das daraus resultierende AVI kann man dann per ffmpeg in Einzelbilder umwandeln (Parameter t = Zeit in Sekunden).


$ ffmpeg -i input.avi -t 3 -vf fps=50 output%02d.png

#C64#ffmpeg#VICE

[Linux]

Pulseaudio Focusrite Scarlett 2i4 Stereo Sink

Ich hatte das Problem, dass Pulseaudio per Default mein Scarlett 2i4 nur mit dem Profil Analog-Surround 4.0 für Output benutzt, obwohl das Gerät eigentlich nur 2 Stereo Outputs hat. In vielen Fällen ist das kein Problem, aber bei Games kommt es schon mal vor, dass Surround Sound genutzt wird, der im Spiel nicht zu Stereo umkonfiguriert werden kann.

Die Lösung ist, ein remap-sink für reinen Stereo Output anzulegen [Beispiel für Arch Linux].

in /etc/pulse/default.pa.d/ eine Config Datei mit .pa Endung mit folgendem Inhalt anlegen:


load-module module-remap-sink sink_name=simple_stereo master=alsa_output.usb-Focusrite_Scarlett_2i4_USB-00.analog-surround-40 channels=2 master_channel_map=front-left,front-right channel_map=front-left,front-right remix=no

UPDATE [4.4.2024]:
Mittlerweile hat sich der Name der Sinks unter Arch Linux geändert. Die oben genannte .pa Datei müsste nun so aussehen:


load-module module-remap-sink sink_name=simple_stereo master=alsa_output.usb-Focusrite_Scarlett_2i4_USB-00.Direct__Direct__sink channels=2 master_channel_map=front-left,front-right channel_map=front-left,front-right remix=no

Nach Pulseaudio restart kann man dann z.B. in pavucontrol den neuen sink als Default einstellen [im Screenshot gelistet als "Remapped Scarlett 2i4 Analog Surround 4.0"].


$ systemctl --user restart pulseaudio
$ pavucontrol

Wichtig ist, dass man beide Ausgabe Devices entmutet und am besten die Volume bei dem "echten" Device auf 100% stellt, damit man die Volume nur noch über den remap-sink steuert.

Das Ganze funktioniert natürlich auch für ähnliche Audio Devices mit dem selben Problem. Den entsprechenden Wert [Device Namen] für master kann man per pactl herausfinden:


$ pactl list sinks | grep 'Name:'
	Name: alsa_output.usb-Focusrite_Scarlett_2i4_USB-00.analog-surround-40
	Name: alsa_output.pci-0000_2f_00.1.hdmi-stereo

#focusrite#linux#pulseaudio

[Linux]

VirtualBox Ubuntu Gast Festplatte vergrößern

Wenn man in einer VirtualBox Ubuntu Gastmaschine die Festplatte vergrößert hat, muss man dies am Ende dem Gastsystem auch noch mitteilen.


# Increase the Physical Volume (pv) to max size
pvresize /dev/sda3

# Expand the Logical Volume (LV) to max size to match
lvresize -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv

# Expand the filesystem itself
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

#linux#ubuntu#virtualbox

[Linux]

https / ssl mit Wildcard Zertifikat für localhost

In einer Development Umgebung ist es immer lästig, wenn man kein https zur Verfügung hat. Mit ein bisschen Konfiguration lassen sich aber Zertifikate selber erstellen und können im Browser importiert werden.

Zunächst sollte man sicherstellen, dass in der /etc/hosts sowohl localhost, als auch der gewünschte Rechnername für die Wildcardzertifikate korrekt konfiguriert ist. Hier ein Beispiel meiner Config mit meinem Hauptrechner misery:


# Static table lookup for hostnames.
# See hosts(5) for details.
127.0.0.1       localhost.localdomain   localhost
::1             localhost.localdomain   localhost
127.0.0.1       misery

Folgende Schritte sollte man alle als root durchführen. Denn auch wenn die Zertifikate die erstellt werden ohnehin nirgends gültig sind und es daher kein Problem wäre, wenn die Schlüssel öffentlich werden würden, arbeitet unser Apache und Linux ja genauso, als wäre es ein öffentlicher Server.

Als erstes legt man eine Textdatei domains.ext an für die Domains, die man zertifizieren möchte. Wichtig hierbei ist, dass man für Wildcard Zertifikate immer drei (3!) Stellen braucht, damit diese in einer lokalen Umgebung funktionieren. Man kann natürlich auch jede Subdomain einzeln auflisten. Das ist aber sehr lästig, weil man sonst die Keys immer wieder neu erstellen müsste, sobald eine Domain hinzu kommt. Ich bevorzuge die Form *.dev.rechnername. Hier ein Beispiel mit meinem Hauptrechner misery:


# domains.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = misery
DNS.3 = *.dev.misery

Dann erstellen wir die SSL Zertifikate und die dazugehörigen Keys:


openssl req -x509 -nodes -new -sha256 -days 1024 -newkey rsa:2048 -keyout MiseryRootCA.key -out MiseryRootCA.pem -subj "/C=US/CN=Misery-Root-CA"
openssl x509 -outform pem -in MiseryRootCA.pem -out MiseryRootCA.crt
openssl req -new -nodes -newkey rsa:2048 -keyout localhost.key -out localhost.csr -subj "/C=US/O=Misery-Certificates/CN=localhost.misery"
openssl x509 -req -sha256 -days 1024 -in localhost.csr -CA MiseryRootCA.pem -CAkey MiseryRootCA.key -CAcreateserial -extfile domains.ext -out localhost.crt

Alle Stellen, an denen mein Rechnername (misery) eingetragen ist, sind natürlich frei konfigurierbar und sollten mit dem eigenen Rechnernamen ersetzt werden.

Konfiguration des Apache Servers

Die Keys für Apache werden dann am besten in den Ordner, in dem sich auch die httpd.conf (oder apache2.conf unter Ubuntu) befindet kopiert. Unter Arch Linux wäre das:


cp localhost.crt /etc/httpd/conf/
cp localhost.key /etc/httpd/conf/

Und unter Ubuntu:


cp localhost.crt /etc/apache2/conf/
cp localhost.key /etc/apache2/conf/

Die Pfade zu diesen beiden Dateien müssen nun in der Apache Config für den default Virtualhost auf SSL Port 443 eingetragen werden. Standardmäßig ist die Config hier zu finden:

Arch Linux/etc/httpd/conf/extra/httpd-ssl.conf
Ubuntu/etc/apache2/sites-available/default-ssl.conf

Innerhalb des VirtualHost Tags müssen dann folgende Zeilen hinzugefügt werden oder die bestehenden Zeilen in der Vorlage editiert und auskommentiert werden.


# Arch Linux
SSLCertificateFile "/etc/httpd/conf/localhost.crt"
SSLCertificateKeyFile "/etc/httpd/conf/localhost.key"

# Ubuntu
SSLCertificateFile "/etc/apache2/conf/localhost.crt"
SSLCertificateKeyFile "/etc/apache2/conf/localhost.key"

Nach dem Neustarten des Apache sollte dieser nun korrekt konfiguriert sein. Da oben ein Wildcard Zertifikat auf die Domain *.dev.misery erstellt wurde, können die Zertifikate auch für weitere VirtualHosts verwendet werden. z.B. für die domain geilomat.dev.misery:


# Arch Linux
<VirtualHost *:443>
    DocumentRoot "/srv/http/geilomat/public"
    ServerName geilomat.dev.misery
    SSLCertificateFile "/etc/httpd/conf/localhost.crt"
    SSLCertificateKeyFile "/etc/httpd/conf/localhost.key"
    ErrorLog "/var/log/httpd/geilomat.dev.misery-error_log"
    CustomLog "/var/log/httpd/geilomat.dev.misery-access_log" common
</VirtualHost>

# Ubuntu
<VirtualHost *:443>
    DocumentRoot "/var/www/geilomat/public"
    ServerName geilomat.dev.misery
    SSLCertificateFile "/etc/apache2/conf/localhost.crt"
    SSLCertificateKeyFile "/etc/apache2/conf/localhost.key"
    ErrorLog "/var/log/apache2/geilomat.dev.misery-error_log"
    CustomLog "/var/log/apache2/geilomat.dev.misery-access_log" common
</VirtualHost>

Verwendung des Zertifikats im Browser

Für diesen Schritt müssen zunächst noch die Zertifikate der "virtuellen" Zertifizierungsstelle in einen Ordner unterhalb der HOME Directory unseres Standardbenutzers kopiert und diesem freigegeben werden:


mkdir /home/username/certificates
cp MiseryRootCA.crt /home/username/certificates/
cp MiseryRootCA.key /home/username/certificates/
cp MiseryRootCA.pem /home/username/certificates/
chown -R username:users /home/username/certificates

Damit der Browser das selbst erstellte Zertifikat auch akzeptiert, muss dieses manuell hinzugefügt werden. z.B. im Firefox:

  • in about:config die Option security.enterprise_roots.enabled auf true setzen
  • in den Einstellungen zur Datenschutz & Sicherheit (about:preferences#privacy) unter "Zertifikate anzeigen" die MiseryRootCA.pem importieren.

oder im Chrome / Chromium:

  • unter chrome://settings/certificates im Reiter "Zertifizierungsstellen" die MiseryRootCA.pem importieren

#apache#linux

[Webdesign]

Font Schnitte in font-weight Zahlen

Wieder etwas, was ich nicht mehr suchen möchte, da ich mir das einfach nicht merken kann. Hier eine Liste, welche Schriftschnitte welchem font-weight Zahlenwert im CSS entsprechen:

Thin100
Extra Light200
Light300
Regular400
Medium500
Semi-Bold600
Bold700
Extra-Bold800
Black900

#css#webdesign

[Linux]

Random Dummy Dateien generieren

Manchmal braucht man zum Testen einfach Dateien einer bestimmten Größe. Diese kann man einfach mit Hilfe von /dev/random/ generieren. Folgender Code erzeugt z.B. eine 128 Megabyte Große Textdatei.


$ base64 /dev/urandom | head -c 128000000 > 128mb.txt

Für andere Dateigrößen muss man einfach den entsprechenden Parameter von head ändern.

#linux

[Linux]

sshd Geoblocking unter Ubuntu

Wer einen Server betreibt, muss sich leider auch mit drölftausend Bots herumschlagen. Um für ein bisschen mehr Ruhe in seinen Logs zu sorgen, kann Geoblocking ganz hilfreich sein. Sprich: nur IPs aus bestimmten Ländern überhaupt für den SSH Login Versuch zu zu lassen.

Um dies auf einem Ubuntu Server einzurichten, sind folgende Schritte nötig:

1.) Auf dem Server die nötigen Pakete installieren:


$ apt install mmdb-bin geoipupdate

2.) sich bei maxmind.com einen Account für den Zugriff auf die Geo-Datenbanken zu beschaffen:
https://www.maxmind.com/en/geolite2/signup

Dort muss man sich dann einen License Key anlegen und in der Datei /etc/GeoIp.conf seine Credentials hinterlegen.
https://dev.maxmind.com/geoip/geoipupdate/

3.) Auf dem Server geoipupdate starten:


$ geoipupdate -v

4.) Ein Shell Skript erstellen, dass man über die /etc/hosts.deny aufrufen kann. Für meinen Ubuntu Server habe ich das Skript von hier verwendet und an meine Bedürfnisse angepasst unter /usr/local/bin/check_country.sh abgespeichert.


#!/bin/bash
# Requires mmdblookup and the new db type "mmdb".
# exit 1 = allow (false)
# exit 0 = block (true)
# use with tcpwrap in /etc/hosts.deny

GEODB='/var/lib/GeoIP/GeoLite2-Country.mmdb'
ALLOW=('DE')

if [ $# -ne 1 ]
then
  exit 1
fi

if [ ! -f $GEODB ]
then
  exit 1
fi

IP4PAT='^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$'
IP6PAT='^[0-9a-f]{1,4}:[0-9a-f]{1,4}:[0-9a-f]{1,4}:[0-9a-f]{1,4}:[0-9a-f:]+$'
VALID=$(echo $1 | grep -E "(${IP4PAT}|${IP6PAT})")
if [ -z "$VALID" ]
then
  exit 1
fi

CNTRY=$(mmdblookup -f $GEODB -i $1 country iso_code 2>/dev/null| grep utf8_string | cut -d '"' -f 2)

if [ -z "$CNTRY" ]
then
  exit 1
fi

for i in "${ALLOW[@]}"
do
  if [ "$i" == "$CNTRY" ]
  then
    logger -t 'CheckCountry' "Permitting $1 ($CNTRY) to authenticate."
    exit 1
  fi
done

# allowed and unknown got sortet out, slow down and block the rest
sleep 1
exit 0

5.) In der Datei /etc/hosts.deny folgende Zeile hinzufügen:


sshd: ALL : aclexec /usr/local/bin/check_country.sh %a

Danach ist dann erst einmal Ruhe im Karton, bzw. IPs aus anderen Ländern werden grundsätzlich von der Nutzung des SSH Zugangs ausgeschlossen. Bzw. weitere Hacking Versuche irgendwelcher Bots werden im Log in einer Zeile abgefrühstückt. Den Erfolg der Aktion kann man im Log begutachten:


$ cat /var/log/auth.log | grep 'refused'

#linux#ssh

[Linux]

Apache User umask setzen (systemd)

Möchte man die Zugriffsrechte ändern, mit denen der Apache Webserver User Dateien und Verzeichnisse erstellt, kann man das bei Systemen, die systemd benutzen in der Datei /etc/systemd/system/httpd.service.d/override.conf, bzw. /etc/systemd/system/apache2.service.d/override.conf konfigurieren.

Man braucht die Datei nicht selbst manuell anlegen / direkt editieren, sondern kann das über die edit Funktion von systemd erledigen:


$ sudo systemctl edit httpd

bzw.:


$ sudo systemctl edit apache2

Der Befehl öffnet eine tempörare Kopie der Datei mit dem in der EDITOR Umgebungsvariable konfigurierten Texteditor. Hier kann man den umask Wert dann wie folgt einstellen:


[Service]
UMask=0002

Ich nutze gerne 0002, damit mein "normaler" Benutzer, der in der Webserver Gruppe ist alle Dateien bearbeiten kann. Je nachdem, ob man einen Server für sich alleine hat kann ggf. zu dem Zweck noch 0007 sinnvoll sein, um anderen Benutzern und Gruppen komplett den Lesezugriff zu entziehen.

#apache#linux#systemd#umask

[CSS]

SVG Icons Farbe ändern

Wenn man farbige SVG Dateien als IMG einbindet, kann man ja leider nicht per CSS auf das SVG direkt zugreifen.

Hier ein kleiner Workaround, den ich auf Codepen gefunden und sicherheitshalber mal hier gemirrored habe:
CSS filter generator to convert from black to target hex color

Der Code generiert dann den CSS filter von schwarz zur Zielfarbe. Hat man bereits farbige SVG Icons, müssen diese vorher noch erst einmal schwarz gefärbt werden per brightness(0) saturate(100%).


img {
    filter: brightness(0) saturate(100%);
}

#css

[Linux]

Apache File- und Directory-Permissions

Wieder 'ne Kleinigkeit, die ich nicht mehr googlen will…

http / apache ist user und group:


$ find . -type d -exec chmod 0755 {} \;
$ find . -type f -exec chmod 0644 {} \;

user ist normaler Benutzer und http ist group:


$ find . -type d -exec chmod 0775 {} \;
$ find . -type f -exec chmod 0664 {} \;

Bei der Config mit dem normalen Benutzer ist es eventuell auch schlau g+s zu setzen bei Directories, also:


$ find . -type d -exec chmod 2775 {} \;

Shared Hosting


$ find . -type d -exec chmod 0750 {} \;
$ find . -type f -exec chmod 0640 {} \;

#apache#chmod#linux

L16HT|D@RK
Top