Kategorien
Allgemein

gemini server

Ich möchte einen eigenen gemini server mit geminid betreiben. Leider habe ich keine schöne (kurze) Anleitung gefunden mit der ich einen geminid-Server schnell unter Debian zum laufen bekomme.

Leider existiert zur Zeit kein Debian Paket für geminid, daher muss geminid aus dem Quellen installiert werden.

sudo apt install git libconfig-dev libmagic-dev flex make gcc libssl-dev
cd /usr/src
sudo git clone https://github.com/jovoro/geminid.git
cd geminid
make
mkdir /var/log/geminid
mkdir -p /etc/geminid/certs/
mkdir -p /etc/geminid/keys
mkdir -p /srv/geminid/{loteks,bin}
echo "hello gemini" > /srv/geminid/loteks/index.gmi
echo '// geminid configuration file

// Global configuration
global = {
        serverroot = "/srv/geminid";
        logdir = "/var/log/geminid";
        loglocaltime = true;
        logtimeformat = "[%d/%b/%Y:%H:%M:%S %z]";
        port = 1965;
        ipv6_enable = true;
};

// vHost definitions
vhost = (
        {
                name = "gemini.loteks.de";
                docroot = "loteks";
                accesslog = "loteks_access.log";
                errorlog = "loteks_error.log";
                cert = "/etc/geminid/certs/gemini.loteks.de.pem";
                key = "/etc/geminid/keys/gemini.loteks.de.pem";
                index = "index.gmi";
        }
);' > /etc/geminid/hosts.conf

mkdir cert && cd cert
openssl req -new > server.cert.csr
openssl rsa -in privkey.pem -out server.cert.key
openssl x509 -in server.cert.csr -out server.cert.crt  -req -signkey privkey.pem -days 9000
cat privkey.pem server.cert.crt > pw_gemini.loteks.de.pem
openssl rsa -in pw_gemini.loteks.de.pem -out /etc/geminid/keys/gemini.loteks.de.pem # remove password
cat server.cert.crt > /etc/geminid/certs/gemini.loteks.de.pem
cd ..
./geminid -c /etc/geminid/hosts.conf

Einen neuen Benutzer für gemini anlegen.
Die UserID 32 ist, genau wie die GroupID 32 noch nicht belegt. Da die UserID und GroupoID 33 dem Benutzer www-data gehört, der für den Apache Webserver verwendet wird nutze ich diese.

sudo groupadd --gid 32 -r gemini
sudo useradd --uid 32 --gid 32 --system gemini
sudo cp geminid /srv/geminid/bin/
sudo chown gemini:gemini -R /etc/geminid
sudo chown gemini:gemini -R /srv/geminid

Systemd Dienst anlegen

sudo vi /etc/systemd/system/gemini.service
[Unit]
Description=geminid service
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=gemini
ExecStart=/srv/geminid/bin/geminid -c /etc/geminid/hosts.conf

[Install]
WantedBy=multi-user.target

jetzt muss der Gemini-Dienst nur noch ein Logfile in das es schreiben kann. Am schönsten geht das mit Logrotate.

cat <<EOF | sudo tee -a /etc/logrotate.d/geminid
"/var/log/geminid/loteks_access.log"
"/var/log/geminid/loteks_error.log"
{
  su gemini gemini
  rotate 5
  daily
  notifempty
  compress
  delaycompress
  create 644 gemini gemini
}
EOF
sudo mkdir /var/log/geminid
sudo chown gemini:gemini /var/log/geminid -R
sudo logrotate --force /etc/logrotate.d/geminid

Abschließend muss der neue Service nur noch aktiviert und gestartet werden.

sudo systemctl start gemini.service
sudo systemctl enable gemini.service

Das war es auch schon, jetzt haben wir einen laufenden Gemini-Server

Kategorien
Linux Programmieren

Bash mit Rest

Die Division mit Rest ist in der Bash sehr einfach möglich.


#!/bin/bash
for i in {1..22}; do
 echo "$i / 5 Rest $(($i % 5))"
done

In der Schleife werden die Zahlen von 1 bis 22 durchgezählt. Die Modulo Rechnung erfolgt via $i % 5 und die Ausgabe ist der Rest.
Mit einer Prüfung if [ $(($i % 5)) -eq 0 ]; then läst sich auf Teilbarkeit prüfen.
Das folgende Skript gibt ausschließlich die durch 512 teilbaren Zahlen zwischen 0 und 49152 aus.:

#!/bin/bash
for i in {1..49152}; do
 if [ $(($i % 512)) -eq 0 ]; then
   echo "$i"
 fi
done

Kategorien
IPTables Linux security

Wie verheimliche ich zusätzliche Router

Internetanbieter können feststellen wie viele Router Du betreibst, nicht das das irgend jemanden außer dich selbst etwas angehen würde.

Wie stellen Internetanbieter einen Router fest? an dem TTL (Time to Live) der TCP-Pakete Die du an sie weiter gibst.

Die TTL Kannst Du in einem vernünftigen* Router jedoch ändern.

Setze in der Firewall für das POSTROUTING einfach eine neue TTL.:

iptables -t mangle -I POSTROUTING 1 -j TTL --ttl-set 64

Die TTL von 64 wird von Unix Geräten, wie zum Beispiel Android Telefonen verwendet. Wenn Alle Pakete als direkt von einem Windows Gerät stammend wirken sollen wäre der richtige Wert 128.

Kategorien
Grafik Video

Videoformate und Auflösungen

CINEMA DCP 4k

  • 1.85:1 (Flat) / 3996×2160
  • 2.39:1 (Scope) / 4096×1716
  • 16:9 (QuadHD) / 3840×2160
  • Full Container / 4096×2160

CINEMA DCP 2k

  • 1.85:1 (Flat) / 1998×1080
  • 2.39:1 (Scope) / 2048×858
  • 16:9 (QuadHD) / 1920×1080
  • Full Container / 2048×1080

5k

  • 1.33:1 (4:3) / 5120×3840
  • 1.66:1 (5:3) / 5120×3072
  • 1.77:1 (16:9) / 5120×2880
  • 1.85:1 / 5120×2768
  • 1.9:1 / 5120×2700
  • 2:1 / 5120×2560
  • 2.37:1/ 5120×2160
  • 2.4:1 / 5120×2142
  • 2.44 / 5120×2098
  • 2.35:1 / 5120×2179

4k

  • 1.33:1 (4:3) / 4096×3072
  • 1.66:1 (5:3) / 4096×2458
  • 1.77:1 (16:9) / 4096×2304
  • 1.85:1 / 4096×2214
  • 1.9:1 / 4096×2160
  • 2:1 / 4096×2048
  • 2.35:1 / 4096×1679
  • 2.37:1 / 4096×1743
  • 2.4:1 / 4096×1728
  • 2.44 / 4096×1714

4kHD

  • 1.33:1 (4:3) / 3840×2880
  • 1.66:1 (5:3) / 3840×2304
  • 1.77:1 (16:9) / 3840×2160
  • 1.85:1 / 3840×2076
  • 2:1 / 3840×1920
  • 2.35:1 / 3840×1634
  • 2.37:1 / 3840×1620
  • 2.4:1 / 3840×1607
  • 2.44 / 3840×1574

2k

  • 1.33:1 (4:3) / 2048×1536
  • 1.66:1 (5:3) / 2048×1229
  • 1.77:1 (16:9) / 2048×1152
  • 1.85:1 / 2048×1107
  • 2:1 / 2048×1024
  • 2.35:1 / 2048×871
  • 2.37:1 / 2048×864
  • 2.4:1 / 2048×858
  • 2.44 / 2048×839

1080p

  • 1.66:1 (5:3) / 1920×1152
  • 1.77:1 (16:9) / 1920×1080
  • 1.85:1 / 1920×1038
  • 2:1 / 1920×960
  • 2.35:1 / 1920×817
  • 2.37:1 / 1920×810
  • 2.4:1 / 1920×803
  • 2.40:1 / 1920×800
  • 2.44 / 1920×787
  • 1.33:1 (4:3) / 1920×1440

720p

  • 1.33:1 (4:3) / 1280×962
  • 1.66:1 (5:3) / 1280×768
  • 1.77:1 (16:9) / 1280×720
  • 1.85:1 / 1280×692
  • 2:1 / 1280×640
  • 2.35:1 / 1280×545
  • 2.37:1 / 1280×540
  • 2.4:1 / 1280×536
  • 2.44 / 1280×525
Kategorien
Allgemein

rsync für faule

Rsync ist ein wunderbares Werkzeug für für mich, denn was die Datensicherung angeht gehöre ich leider zu den leuten die zu faul sind oder besser ihre Zeit lieber mit anderen Dingen zubringen.
Es Fehlt immer der Passende Zeitpunkt um ein Backup anzulegen und mache es immer erst nach dem Datenverlust.
Das Werkzeug rsync gleicht den Inhalt zweier Verzeichnisse, oder einer Externen Quelle und eines Verzeichnisses, ab.

rsync -uvrh ./Quelle/ ./Ziel/

-u überspringt Dateien die im Ziel neuer sind als in der Quelle
-v erhöht die Geschwätzigkeit, rsync gibt mehr Meldungen aus
-r (recursive) nimmt Unterverzeichnisse mit
-h (human-readable) die Ausgabe soll für Menschen lesbar formatiert werden

Kategorien
Allgemein

Eingehenden Traffic an eine andere IP-Addresse weiterleiten

iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination 10.2.3.4:1235
iptables -t nat -A POSTROUTING -j MASQUERADE

Leite den auf Port 1234 eingehenden Traffic auf einen Dienst um der auf dem Port 1235 auf der IP-Addresse 10.2.3.4 erreichbar ist.
Dies kann notwendig sein wenn ein System den Port 1235 oder die IP-Adresse 10.2.3.4 nicht erreichen kann.

Erläuterung

iptables -t nat -A PREROUTING -p tcp –dport 1234 -j DNAT –to-destination 10.2.3.4:1235
Leitet alle eingehenden TCP Pakete aller Netzwerkkarten von Port 1234 auf den Port 1235 zur IP-Addresse 10.2.3.4 um.
Es kann jeder beliebige Port und jede beliebige IP-Addresse angegeben werden die von dem aktuellen System aus erreichbar ist.

iptables -t nat -A POSTROUTING -j MASQUERADE
Wir setzen MASQUERADE so, dass die IP-Adresse des Verbindungssystems maskiert wird und verwenden stattdessen die Gateway-IP-Adresse. Dies ist erforderlich um die Kommunikation mit dem Gateway und folgend mit dem Client zu ermöglichen.

Kategorien
Allgemein

git: zurücksetzen (revert, reset) einer einzelnen Datei

Nach einiger erfolglosen Suche im Internet und wühlen in der Manpage, biete ich an dieser Stelle, auffindbar, die Lösung zum zurücksetzen von Änderungen in einer einzelnen Datei.

Um eine einzelne Datei aus dem master Brunch in den aktuellen branch zu holen:

git checkout name_der_datei.ext

Um die Datei aus einem anderen Branch zu holen, in meinem Beispiel aus dem Branch „testbranch“. Diese Variante ermöglicht es auch die Datei auszuchecken falls es einen Branch mit dem Dateinamen gibt:

git checkout testbranch name_der_datei.ext

Anschließend kann via „git commit -a“ und „git push“ die Datei im Aktuellen Branch fixiert werden.

Kategorien
Allgemein

Einen SSH-public-key vom SSH-private-key neu generieren.

Wenn der SSH public-key verloren geht oder ein Webservice einen privaten SSH-Schlüssel generiert, ohne den public-key anzubieten kann dieser auch manuell erstellt werden.

Um den public-key vom private-key zu generieren kann der folgende Befehl verwendet werden:

ssh-keygen -y -f ~/.ssh/id_rsa

Die Option -y gibt den public-key zu dem angegenenen private-key aus.
Der public-key kann mit dem Zusatz „> ~/.ssh/id_rsa.pub“ in eine Datei umgeleitet werden.

Um den public-key zu prüfen kann dieser mit dem folgenen Aufruf validiert werden.

ssh-keygen -l -f ~/.ssh/id_rsa
2048 SHA256:ILuUR0iuoieWJCdoCEE44rKqMDvYUrVC15lH1mVq8To Kuehnel (RSA)

Die Ausgabe zeigt die Schlüsselgröße im ersten Textblock, anschließend das Format und den Fingerabdruck des öffentlichen Schlüssels, den im Key gespeicherten Namen und am ende, in Klammern, den q
Der Fingerabdruck kann sowohl als MD5 (-E md5) als auch als SHA256 (-E sha256) angezeigt werden.

Kategorien
MySQL

MySQL Prozessliste, ohne ruhende Prozesse, anzeigen

Leider erlaubt MySQL keine Filter für SHOW PROCESSLIST. Hierdurch wird die Übersicht der laufenden Prozesse schnell unübersichtlich.

Ab PHP 5.1 kann ich die laufenden MySQL Anfragen mit dem folgenden Befehl anzeigen:

SELECT * FROM information_schema.processlist;

Hierbei werden alle Prozesse, genau wie mit SHOW PROCESSLIST angezeigt, es ist aber auch eine Filterung möglich. Mit dem folgenden Befehl können alle laufenden MySQL Anfragen ohne die ruhenden Prozesse angezeigt werden.:

SELECT * FROM information_schema.processlist WHERE command != 'Sleep';

Die Ausgabe kann auch sortiert werden und weiter eingeschränkt werden. Mit dem folgenden Befehl werden dir MySQL Prozesse nach laufzeit sortiert und nur die Prozesse angezeigt die länger als zwei Sekunden laufen.:

SELECT user, time, state, info FROM information_schema.processlist WHERE command != 'Sleep' AND time >= 2 ORDER BY time DESC, id;

Die zur verfügung stehenden Felder sind ID, USER, HOST, DB, COMMAND, TIME, STATE, INFO, TIME_MS, STAGE, MAX_STAGE, PROGRESS, MEMORY_USED, EXAMINED_ROWS, QUERY_ID, INFO_BINARY und TID.

ColumnBeschreibung
ID Verbindungskennung
USERDer Benutzer der diesen Prozess gestartet hat
HOSTServer von dem die Verbindung eingeht
DBBenutzte Datenbanbk oder NULL wenn keine
COMMAND Art des ausgeführten Befehls
TIME Sekunden, seit der dieser Prozess in seinem aktuellen Zustand ist
STATE Aktueller Status des Prozesses
INFO Anweisung, die in diesem Prozess ausführt wird , oder NULL wenn keine
TIME_MSZeit in Millisekunden seit dem sich der Prozess im aktuellen Status befindet
STAGE Die Phase, in der sich der Prozess derzeit befindet
MAX_STAGE Die maximale Anzahl von Stufen
PROGRESS Der Fortschritt des Prozesses in der aktuellen Phase (0-100%)
MEMORY_USED Speicher in Bytes, der von diesem Prozess verwendet wird
EXAMINED_ROWSTabellenzeilen die von diesem Prozess gelesen wurden.
Nur bei UPDATE-, DELETE- und ähnliche Anweisungen. Bei SELECT- und ähnlichen Anweisungen bleibt der Wert Null
QUERY_IDID.
INFO_BINARY Informationen zu Binärdaten
Kategorien
Linux NAS

autossh als Dienst einrichten

So nutze ich AutoSSH aum meinem Gnubee 2 NAS um von überall an die Daten auf meinem NAS zu gelangen!
Die verwendung von autossh wurde auf meinem NAS notwendig da sie sonst nicht mehr über das Internet erreichbar ist. Mein Internetprovider bietet nur noch DS-Light an. 🙁

autossh?

Autossh ist ein Programm das einen Open-SSH Tunnel bei Verbindungsabbrüchen automatisch wiederherstellt.

Verbindung zum Server etablieren

Meine NAS muss eine Passwortlose Verbindung zu meinem Server aufbauen können.
Hiezu generiere ich einen SSH-Key und übertrage den Public-Key auf den Server.:

ssh-keygen -t rsa -b 2048
mv ~/.ssh/id_rsa.pub ~/.ssh/autossh-key.pub
mv ~/.ssh/id_rsa ~/.ssh/autossh-key
ssh-copy-id -i autossh-key benutzername@example.org

Verbindung testen

ssh benutzername@example.org

Dienst anlegen

Um den Tunnel beim Systemstart automatisch wieder herstellen zu lassen lege ich die Datei /etc/systemd/system/sshtunnel.service mit dem folgenden Inhalt an:

[Unit]
Description=Keeps a tunnel to 'example.org' open
After=network-online.target ssh.service

[Service]
User=root
Environment="AUTOSSH_PORT=0"
Environment="AUTOSSH_GATETIME=0"
RestartSec=30
Restart=always

ExecStart=/usr/bin/autossh -NT -o "ExitOnForwardFailure=yes" -R 17777:127.0.0.1:22 -p 22 -l benutzername example.org -i /root/.ssh/autossh-key
ExecStop=killall -s KILL autossh
TimeoutStopSec=10

[Install]
WantedBy=multi-user.target

example.org ist durch den Hostnamen des Servers zu ersetzen, benutzername durch den verwendeten Benutzernamen.

Dienst aktivieren

Um den neu angelegten Dienst sshtunnel zu aktivieren muss dieser noch aktiviert und gestartet werden.

sudo systemctl enable sshtunnel.service
sudo systemctl start sshtunnel.service