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
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
Allgemein

Wie lange dauert etwas unter Linux

Ich verwende normalerweise den Linux befehl Time um die Dauer für einen Prozess unter Linux nachzuvollziehen.

time make -j4

real    0m2,587s
user    0m0,001s
sys     0m0,027s

Die Bash führt aber auch die wirklich praktische Variable SECONDS die die vergangenen Sekunden seit dem Start der Shell enthält. SECONDS führt die zählung auch fort wenn die Variable verändert wird. Die Variable enthält nach einer Änderung die zugewiesene Zahl zusätzlich zu der Anzahl Sekunden die nach der Änderung vergangen sind.
Wieso also nich eine Null Zuweisen um zu erfahren wie lange ein Prozess braucht.:

SECONDS=0; make; echo $SECONDS

viel Schöner geht es jedoch wenn ich mir in Anschluss noch ausrechne wie viele Minuten und Stunden es wahren.:

SECONDS=0
# Hier kommt die Ausführung des Befehls
DAUER=$SECONDS
echo "$(($DAUER / 3600)) Stunden, $((($DAUER / 60) % 60)) Minuten und $(($duration % 60)) Sekunden vergangen."

In einer Einzigen Zeile, zum Compillieren eines Programms bedeutet dies:

SECONDS=0 ; make -j4 ; DAUER=$SECONDS; echo "$(($DAUER / 3600)) Stunden, $((($DAUER / 60) % 60)) Minuten und $(($DAUER % 60)) Sekunden vergangen."

Libe Grüße,
Jan

Kategorien
Allgemein

The Final Cartridge 3.33 rebuild – that I could build

Vor einigen Jahren besaß ich ein „Frezer-Modul für meinen C64. Ich hatte noch, kurz bevor ich den C64 durch einen Amiga 500 ersetzt habe ein Action Replay IV von einem meiner Bekannten für 100 DM gekauft. Zuerst wollte ich mir ein Final Cartridge zulegen, leider kostete es damals noch 146 DM und als Schüler konnte es mir damals noch nicht leisten.

In den wirren der folgenden Jahre und Umzüge habe ich meinen C64 irgendwann weggegeben.

In den frühen 2010er Jahren habe ich mir wieder einen neuen C64, mit 1541-II und Datasette zugelegt. Leider konnte ich auch nach längerer Suche kein Final Cartridge III oder Action Replay-IV finden das meinen Vorstellungen entsprach.

Ich stolperte vor kurzem auf ein YouTube-Video von Greisis Workbench in dem er ein Final Cartridge via Reverse Engeniering wieder zum Leben erweckte. (dieses Video hier!)

Nach einer kurzen Prüfung meiner „Vorräte“ musste ich leider festgestellen das mir, ausser dem C64 selbst und meinem Lötkolben alles fehlte was ich für den Nachbau des The Final Cartridge 3.33 von Greisis Workbench benötige.

1. Vorräte auffüllen

Da Greisis auf seinem Google Drive die Dateien zum Projekt bereitgestellt hat (vielen Dank) brauche ich das PCB nicht aus dem Video nachkonstruieren sondern kann Gerber File und BOM direkt hier herunterladen. zusätzlich benötige ich noch einen EEPROM Brenner.

Auf dem YouTube-Kanal von EEVblog wurde vor wenigen Jahren der MiniPro TL866 Universal Programmer vorgestellt. (Video hier!) Eine kurze Installation des zugehörigen Brenner-Programms zeigte mir das dieser EEPROM Brenner den auf dem Modul verwendeten EEPROM „SST39SF010A PLCC-32“ unterstützt. Bei einem Preis von 50€ und der guten bewertung von EEVBlog ist das Ding gekauft.

11.06.2018 Bestellung des EEPROM Programmers über eBay für 50,67€
14.06.2018 Bestellung der Bauteile bei Conrad für 18,20€
14.06.2018 Bestellung des PCBs bei JLCPCB für 7,04€ (8 US$)
Bei meiner ersten Bestellung bei JLCPCB habe ich zuvor nicht in die XGerber.zip Datei geschaut und diese als Gerberfile hochgeladen.
Hierdurch wurde meine Bestellung nach wenigen Minuten von Seiten des Anbieters wieder Storniert. Die Datei XGerber.zip enthält zusätzlich den Gerber-File namens TFC3_V1_0.zip. Dieser Gerber-File muss bei dem Upload zu JLCPCB angegeben werden!

2. Warten auf die Post

JLCPCB Bestellbearbeitung

Conrad kündigt die erste Teillieferung der bestellten Bauteile am 15.06.2018 für Samstag den 16.06. an. Da die Lieferung via DHL in Berlin erfolgte hatte ich selbstverständlich erst am 19.06. die Abholkarte für das Päckchen in der Post. Die letzter 4 Logic ICs sollen laut Begleitkarte in zwei Wochen nachgeliefert werden. (das ist dann der der 03.07.)
JLCPCB gibt am 17.06.2018 den Versand des PCB bekannt.:

Die zweite Conrad Lieferung, die fehlenden 4 ICs, wurde mir am 26.06. gegen 5:00 Uhr für den aktuellen Tag angezeigt. Gegen 14:50 Uhr erhielt ich die Meldung „Ein Zustellversuch erfolgt am nächsten Werktag“. Das Päckchen wurde mir nicht zugestellt, ich erhielt auch keine Karte, konnte durch die Sendungsverfolgung von Conrad das Päcken am 28.06.2018 bei einem Paketshop in meiner Nähe abholen.
Die Päckchen des TL866A ist noch nicht angekommen, das PCB von JLCPCB  habe ich leider noch immer nicht am 03.07.2018 von der Post abholen.
Das Päckcen aus China mit dem TL866A sollte laut ebay-Anzeige bis spätestens 29.07.2018 geliefert werden. Ich habe jetzt am 08.08.2018 eine EMail über ebay an den händler gesandt um Ihn auf die ausstehende Lieferung hinzuweisen.

Die Bestellung des EEPROM Programmers dauerte insgesamt über 8 Wochen! Ich habe von ursprünglichen Händler das Geld zurück erhalten und am 14.August den EEPROM Programmer via Amazon neu bestellt.

Die lieferung erfolgte am 17.08.2018.

3. The Final Cartridge in Einzelteilen


Jetzt wo alle Teile vorhanden sind geht es an das verlöten der Wiedestände, der Kondensatoren, der Dioden und der Sicherung.

Das löten verlief sehr holperig da die Wiederstände für meine Hände einfach zu klein sind.

4. Montage

das fertig gelötete Cartridge

5. Test & Abschluss

So sieht das ganze dann auf dem C64 aus.

Kategorien
Allgemein

EMail-Konten mit doveadm Syncronisieren / sichern

Eine möglichst kurze Anleitung zum Syncronisieren von EMail-Konten via doveadm. Diese Anleitung ist speziel für EMail-Konten während eines Umzugs auf einen neuen EMail-Server.

Es muss zuerst sichergestellt sein das von dem neuen Server eine SSH-Verbindung zu dem alten Server mit einem Key hergestellt werden kann.
Aus diesem Grund ändere ich auf dem alten Server die Option PermitRootLogin für den SSH Dienst in der Datei /etc/ssh/sshd_config auf yes.

Anschließend kann ein neuer RSA-Key für die SSH Verbindung angelegt und auf den alten Server kopier werden.:

ssh-keygen -t rsa -C "Key for the historic Server to sync mail"
scp -p .ssh/id_rsa.pub root@angststalt.de:
ssh root@angststalt.de
cat id_rsa.pub >> .ssh/authorized_keys
exit

Um ein Postfach auf dem neuen Server vom alten Server zu synchronisieren kann der Befehl doveadm genutzt werden:

doveadm sync -u emailadresse@example.com ssh root@alterserver -i ~/.ssh/id_rsa doveadm dsync-server -u emailadresse@example.com

Wenn Du die Syncronisation von einigen wenigen Postfächern temporär zu jeder Viertelstunde durchführen möchtest kannst Du diesen Aufruf auch über den folgenden Cronjob erledigen lassen.

*/15 * * * * doveadm sync -u emailadresse@example.com ssh root@alterserver -i ~/.ssh/id_rsa doveadm dsync-server -u emailadresse@example.com >/dev/null 2>&1

Die Syncronisation erfolgt in beide richtungen, wenn eine EMail auf dem alten Server und eine EMail auf dem neuen Server eingeht sind diese beiden EMails nach der Syncronisation auf beiden Servern verfügbar.

Kategorien
Allgemein

PHP Sessiondaten löschen

Da PHP-Scripte auf die eigenen Temp- und Session-Verzeichnisse schreibenden Zugriff haben müssen ist ein Script um Sessiondaten zu löschen garnicht so schwer umzusetzen.

Folgend mein eigener Versuch eines solchen PHP-Scripts ohne Schöpfungshöhe:

<?php
echo "Delete all Files in Session Directory:<br>\n";

$path = explode(';', session_save_path());
foreach ($path as $DIR) {
    if (is_dir($DIR))
        $dir[] = $DIR;
}
unset($DIR);
unset($path);

foreach ($dir as $DIR) {
    $files = glob($DIR . '/{,.}*');
    foreach ($files as $file) {
        if (is_file($file)) {
            unlink($file);
            echo '.';
        }
    }
}
echo "\n";
?>

Wenn Du einen besseren Ansatz, oder Optimierungsideen hast schreibe mir gerne einen Kommentar!

Kategorien
Allgemein GnuBee 2 NAS

GnuBee2 – Erwerb und Preis

Ich hatte genug von meiner alten NAS und habe mir nach einer umfassenden Recherche zu meinen Anforderungen und Möglichkeiten eine GnuBee2 bestellt.

Die GnuBee Personal Cloud 2 ist eine NAS, bestehend aus freier, offener Hard- und Software, die bis zu 6 3,5-Zoll-SATA-Festplatten und/oder SSD, eine SD-Karte, eine Serielle Schnitstelle und 3 Gigabit LAN-Ports unterstützt.
Die Hardware wurde um den SOC MediaTek-MT7621A-CPU, welcher über zwei CPU-Kerne mit Hyperthreading verfügt die mit 880 MHz getacktet sind und auf 1,2 GHz übertaktet werden können sowie 512 MByte DDR3-Hauptspeicher gebaut. Dieser findet, wie hier gezeigt wird, in Zahlreichen Chinesischen WLAN-Routern verwendung.

Die vollständigen Blaupausen stehen zusammen mit der Dokumentation des Boards auf GitHub als PDFs unter CC-BY-SA 4.0 zur wirklich sehr freien Verfügung.

Als Kritikpunkt für das NAS sehe ich das „Gehäuse“. Dieses besteht aus zwei dünne Blech-Platten die mit je 3 Winkeln an das Mainboard geschraubt werden.

Ich habe meine Bestellung der GnuBee 2 am 04.02. 2018 auf der Internetseite Crowdsupply (USA) aufgegeben.
Der Versand erfolgte bereits am 07.02.2018 aus Portland (USA).
Die Lieferung dauerte insgesamt 18 Tage., geliefert wurde am 22.02.2018. Die Bestellung blieb 7 Tage zur Bearbeitung bei dem deutschen Zoll in Frankfurt am Main.

Der Preis für die NAS ohne steuer selbst war am 04.02.2018: 255,69 Euro. (324,00$ + 4,57 € Kreditkartengebühr für den Geldwechsel)
Die kosten für den deutsche Zoll betrugen 49,84 Euro.

So war die GnuBee 2 bei Ankunft verpackt

Mit Steuer, Versand und Kreditkartengebühren und der Gebühr für den
Währungsumtausch kostete mich das GnuBee 2 insgesamt 305,53 Euro.
Ein guter Preis für ein NAS mit Platz für 6 Festplatten, ohne Binary Blobs und inklusive „Gehäuse“.