staging.inyokaproject.org

3. Januar 2018

E-Mail auf dem Smartphone fand ich bis vor Kurzem eher anstrengend – bis ich jetzt endlich mal Zeit hatte, mir die Funktionen von Boxer näher anzuschauen. Und ich muss sagen: Ich bin begeistert.

Auf dem Desktop-Rechner habe ich Thunderbird so eingerichtet, dass alle Mails automatisch in die richtigen Ordner gefiltert werden. Leider bin ich nie dazu gekommen, das Serverseitig einzurichten. Mit Dovecot gibt es da ja eigentlich eine Lösung für. Nur so ganz trivial ist die Konfiguration dann nicht und eigentlich sind die Mail-Apps auf dem Smartphone auch nicht wirklich darauf ausgelegt. Auf dem kleinen Display kann ich eben nicht den ganzen Verzeichnisbaum mit den Benachrichtigungen über neue Mails sehen. Da seh ich eigentlich nur die Inbox. In jeden anderen Ordner, muss ich aktiv gucken.

Auf dem OnePlus 1 war Boxer als E-Mail-App vorinstalliert und die App sieht schon sehr chic aus. Deswegen habe ich sie mir auch fürs OnePlus 2 gekauft. Dann kamen irgendwann mehr Funktionen hinzu – Boxer kann auch Termine, Attachements und Kontakte verwalten. Ich bin aber bisher nie dazu gekommen, mich damit wirklich zu beschäftigen. Ich fand es eher nervig, dass die App jetzt alles selbst machen wollte. Über Weihnachten und Neujahr bin ich aber mal dazu gekommen und jetzt bin sehr zufrieden mit der App.

Wisch, Tap – fertig.

Die fehlenden Filter kann man in Boxer sehr gut mit Wisch-Gesten ersetzen. Wie gesagt: Auf dem kleinen Display ist es gut, wenn alle Mails erst einmal in der Inbox landen und ich sie zu Gesicht bekomme. Ich kann die Mails dann selbst verteilen: Wisch ich sie nach rechts, landen sie im Spam-Ordner. Wisch ich sie nach links, werde ich gefragt, in welchen Ordner sie verschoben werden soll. Per Autocomplete komm ich schnell an den richtigen Ordner. Boxer merkt sich dann auch, wenn ich Mails mit bestimmten Merkmalen in einen Ordner verschoben habe und schlägt den dann beim nächsten Mal vor. Ich kann auch mehrere Mails markieren und sie auf diese Weise verschieben. So kann ich sogar mit mehreren Mailinglisten gut umgehen.

Kalender, Dateianhänge, Kontakte

Bekomm ich von Outlook-Nutzern Termine zugeschickt, kann ich die direkt in den Kalender übernehmen. Bisher habe ich als Kalender-App den Today Calendar benutzt. Die war auch sehr chic – brauch ich jetzt aber nicht mehr. Boxer macht alles, was die App gemacht hat.

Nett ist die Verwaltung der Attachements. Wenn ich eine Mail einmal geöffnet habe, weiß Boxer, dass die ein Attachement hat und zeigt das dann in einer eigenen Übersicht an. Mal eben ein Dokument heraussuchen, dass mir jemand per Mail geschickt hat, ist dann extrem einfach.

Boxer funktioniert sowohl auf dem Smartphone als auch auf dem Tablet ganz hervorragend. Ich bin damit sehr zufrieden und vermissen jetzt eigentlich nichts mehr. Ach ja: Für Apple-Telefone gibt es Boxer auch. Probiers doch mal aus.

YouTube Video

Die beste E-Mail-App für Android und iOS

Sed finibus fermentum convallis. Sed consequat, lacus a pellentesque suscipit, lorem libero egestas dui, sit amet volutpat mi dolor sit amet nisl. Maecenas faucibus iaculis nibh id gravida. Aenean ac nulla efficitur, pulvinar massa eget, viverra enim. Ut vulputate velit nisl, id volutpat nibh rhoncus a. Phasellus pretium finibus tempus. Suspendisse placerat nibh sem, sit amet vehicula urna porta quis. Suspendisse ac nisi maximus, porttitor sem id, dignissim ipsum. Sed suscipit dolor sed velit viverra, quis viverra dui placerat. Vestibulum dapibus molestie dapibus.

Praesent fringilla dapibus enim quis consectetur. Donec eget nibh nisl. Proin venenatis interdum nunc, sed venenatis orci suscipit in. Morbi sed lacinia tellus, iaculis condimentum tellus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Maecenas sem mi, commodo ut facilisis pharetra, aliquam id nisi. Morbi nec nisi sed tortor faucibus pretium nec non eros. Nullam rhoncus pharetra elementum. Ut tincidunt fermentum metus, at fermentum mi scelerisque id. Aenean sed odio auctor, placerat velit sed, consectetur felis. Donec volutpat id lorem non ornare. Phasellus convallis mi magna, vel laoreet ex efficitur fermentum.

Phasellus a interdum odio, vitae finibus leo. Pellentesque porta quis massa non suscipit. Mauris finibus vel nibh quis scelerisque. Suspendisse eget molestie lacus, eu mattis felis. Proin ex tellus, ultrices eu facilisis vel, faucibus eget enim. Integer sit amet magna ligula. Ut massa nisl, sodales vel eros ac, dignissim maximus metus. Donec odio nulla, sollicitudin quis dolor in, varius sodales lectus. Sed non lacinia ligula, eu pulvinar eros.

2. Januar 2018

Heute möchte ich eine alternative Verwendungsweise von TOR vorstellen: Wir nutzen das TOR-Netzwerk, um unseren Rechner per SSH erreichbar zu machen. Der Vorteil des TOR-Netzes ist hierbei, dass wir uns keine Gedanken mehr um Firewalls, Port-Forwarding und DynDNS-Adressen machen müssen. Über das TOR-Netz ist unser Rechner direkt erreichbar, (fast) egal, wo wir ihn ans Netz hängen. Das ist für einen Homeserver interessant, der “nur” IPv6 hat, oder aber (bei mir zB) für RaspberryPis, die man irgendwo mit hinnimmt, anschließt und stehen lässt.

Vorbereitung

Wir installieren TOR, torsocks und nyx. Unter Archlinux geht das zB per:

pacaur -S tor torsocks nyx

Jetzt legen wir noch ein Verzeichnis für das Logfile an:

sudo mkdir /var/log/tor                   # Logfile
sudo touch /var/log/tor/notices.log       # Logfile
sudo chmod a+rw /var/log/tor/notices.log  # Logfile

Wir machen unseren Port 22 als “hidden service” verfügbar. Hierfür benötigt TOR noch ein eigenes Verzeichnis:

sudo mkdir /var/lib/tor/hidden_service/   # für Hidden-Service (zB SSH)

Mit dem Programm nyx können wir unseren TOR-Server später kontrollieren. Damit nicht jeder Zugriff auf den Controllport bekommt, erstellen wir ein Passwort-Hash:

tor --hash-password "MEIN PASSWORT"       # Password für nyx festlegen

Dies wirft so einen Hashwert aus: 16:EC846041E12046F96027CDB036371025913DDEC98B66B0AE4D0F19B409. Diesen Hash-Wert benötigen wir noch!

Konfiguration

Die Kofiguration von TOR erfolgt über die Datei /etc/tor/torrc. Tor bringt hier eine Standardeinstellung mit, die unbedingt geändert werden muss. Standardmäßigt ist der TOR-Server nämlich als Exit-Node konfiguriert, und das wollen wir ja nicht! Folgende Einstellungen reichen für unsere Zwecke aus:

Log notice file /var/log/tor/notices.log
DataDirectory /var/lib/tor
ControlPort 9051            # für nyx
HashedControlPassword 16:EC846041E12046F96027CDB036371025913DDEC98B66B0AE4D0F19B409 #ersetze s.o.
HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 22 127.0.0.1:22  # Port 22 auch über TOR 
ExitPolicy reject *:*       # no exits allowed !!!

Ihr müsst natürlich den Hash-Wert eures Passwortes entsprechend anpassen. Wichtig ist die letzte Zeile ExitPolicy reject *:*, welche den Exit-Node ausschaltet.

TOR ist jetzt installiert und kann über Port 9051 kontrolliert werden. Es wird KEIN Traffic nach außen geleitet (Exit-Node) und es wird KEIN Traffic hin- und hergeschoben (relay).

Der TOR-Server wird gestartet mit:

sudo systemctl start tor.service

Mit dem Programm nyx kann man nun die Aktivitäten des TOR-Servers begutachten.

nyx

SSH

Nach dem Start des TOR-Servers steht in der Datei /var/lib/tor/hidden_service/hostname die Onion-Adresse, unter welcher der Server nun erreichbar ist.

Der ssh-Aufruf am Client (der ebenfalls mit TOR verbunden sein muss, ist ja klar) erfolgt dann zB per torsocks:

torsocks ssh produnis@ipujtasre32xw656s.onion

Die Onion-Adressen können auch in der .ssh/config wie gewohnt hinterlegt werden.

Weblinks

Heute möchte ich eine alternative Verwendungsweise von TOR vorstellen: Wir nutzen das TOR-Netzwerk, um unseren Rechner per SSH erreichbar zu machen. Der Vorteil des TOR-Netzes ist hierbei, dass wir uns keine Gedanken mehr um Firewalls, Port-Forwarding und DynDNS-Adressen machen müssen. Über das TOR-Netz ist unser Rechner direkt erreichbar, (fast) egal, wo wir ihn ans Netz hängen. Das ist für einen Homeserver interessant, der “nur” IPv6 hat, oder aber (bei mir zB) für RaspberryPis, die man irgendwo mit hinnimmt, anschließt und stehen lässt.

Heute möchte ich eine alternative Verwendungsweise von TOR vorstellen:
Wir nutzen das TOR-Netzwerk, um unseren Rechner per SSH erreichbar zu machen. Der Vorteil des TOR-Netzes ist hierbei, dass wir uns keine Gedanken mehr um Firewalls, Port-Forwarding und DynDNS-Adressen machen müssen. Über das TOR-Netz ist unser Rechner direkt erreichbar, (fast) egal, wo wir ihn ans Netz hängen.
Das ist für einen Homeserver interessant, der „nur“ IPv6 hat, oder aber (bei mir zB) für RaspberryPis, die man irgendwo mit hinnimmt, anschließt und stehen lässt.

Vorbereitung

Wir installieren TOR, torsocks und nyx. Unter Archlinux geht das zB per:

pacaur -S tor torsocks nyx

Jetzt legen wir noch ein Verzeichnis für das Logfile an:

sudo mkdir /var/log/tor                   # Logfile
sudo touch /var/log/tor/notices.log       # Logfile
sudo chmod a+rw /var/log/tor/notices.log  # Logfile

Wir machen unseren Port 22 als „hidden service“ verfügbar. Hierfür benötigt TOR noch ein eigenes Verzeichnis:

sudo mkdir /var/lib/tor/hidden_service/   # für Hidden-Service (zB SSH)

Mit dem Programm nyx können wir unseren TOR-Server später kontrollieren. Damit nicht jeder Zugriff auf den Controllport bekommt, erstellen wir ein Passwort-Hash:

tor --hash-password "MEIN PASSWORT"       # Password für nyx festlegen

Dies wirft so einen Hashwert aus: 16:EC846041E12046F96027CDB036371025913DDEC98B66B0AE4D0F19B409. Diesen Hash-Wert benötigen wir noch!

Konfiguration

Die Kofiguration von TOR erfolgt über die Datei /etc/tor/torrc. Tor bringt hier eine Standardeinstellung mit, die unbedingt geändert werden muss. Standardmäßigt ist der TOR-Server nämlich als Exit-Node konfiguriert, und das wollen wir ja nicht!
Folgende Einstellungen reichen für unsere Zwecke aus:

Log notice file /var/log/tor/notices.log
DataDirectory /var/lib/tor
ControlPort 9051            # für nyx
HashedControlPassword 16:EC846041E12046F96027CDB036371025913DDEC98B66B0AE4D0F19B409 #ersetze s.o.
HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 22 127.0.0.1:22  # Port 22 auch über TOR 
ExitPolicy reject *:*       # no exits allowed !!!

Ihr müsst natürlich den Hash-Wert eures Passwortes entsprechend anpassen. Wichtig ist die letzte Zeile ExitPolicy reject *:*, welche den Exit-Node ausschaltet.

TOR ist jetzt installiert und kann über Port 9051 kontrolliert werden. Es wird KEIN Traffic nach außen geleitet (Exit-Node) und es wird KEIN Traffic hin- und hergeschoben (relay).

Der TOR-Server wird gestartet mit:

sudo systemctl start tor.service

Mit dem Programm nyx kann man nun die Aktivitäten des TOR-Servers begutachten.

nyx

SSH

Nach dem Start des TOR-Servers steht in der Datei /var/lib/tor/hidden_service/hostname die Onion-Adresse, unter welcher der Server nun erreichbar ist.

Der ssh-Aufruf am Client (der ebenfalls mit TOR verbunden sein muss, ist ja klar) erfolgt dann zB per torsocks:

torsocks ssh produnis@ipujtasre32xw656s.onion

Die Onion-Adressen können auch in der .ssh/config wie gewohnt hinterlegt werden.

Weblinks

share this

Evernote ist eine praktische Anwendung. Mit ihr können Notizen gespeichert und verwaltet werden. Leider verlangt Evernote mittlerweile happige Preise für seine Premium-Funktionalitäten. Aus meiner Sicht ist dies allerdings das kleinere Problem. Viel schwerer wiegt, das die eigenen Daten einer amerikanischen Firma anvertraut werden müssen. Neben den proprietären Alternativen wie z.B. OneNote von Microsoft, gibt es mittlerweile einige freie Alternativen. Bevor man sich nach einer Alternative umschaut, sollte man erst einmal schauen welche essentiellen Features Evernote bietet. Kurz zusammengefasst sind die wichtigsten Features die Synchronisation über verschiedenen Geräte, der Web-Clipper, die Offline-Funktionalität und die OCR-Erkennung für PDF, Bilder und ähnliches. Wie wichtig jedes dieser Features ist bleibt der eigenen Gewichtung überlassen.

Mir persönlich wäre eine Lösung auf Basis von Nextcloud am liebsten. Als Notizanwendung auf Markdown-Basis bietet sich die Nextcloud App Notes an. Allerdings handelt es sich hierbei nur um eine rudimentäre Lösung. Mehr in die Richtung Evernote gehen die Lösungen ownNotes bzw. dessen Fork NextNote. Leider scheint bei diesen beiden Projekten keine Weiterentwicklung mehr stattzufinden bzw. diese sehr träge zu verlaufen.

Neben auf ownCloud bzw. Nextcloud basierenden Lösungen, gibt es eine Reihe von Standalone-Lösungen. Zu nennen wären hier unter anderem Paperworks, Permanote, Laverna, TagSpaces, Nemex, Brainstorm und OpenNote.

Die Login-Seite von wallabag

Vielen diesen Lösungen werden entweder nicht mehr weiterentwickelt oder lassen nicht wirklich das Evernote-Feeling aufkommen. Daneben gibt es Lösungen welche sich für bestimmte Aspekte von Evernote als Ersatz eignen. Ein Beispiel dafür ist wallabag, welches sich als Read-It-Later-Lösung versteht und zur Archivierung von Webseiten genutzt werden kann.

Eine Lösung welche in letzter Zeit verstärkt in den Fokus gerät ist Joplin, die vom gleichen Entwickler wie eine hier vor längerer Zeit vorgestellte Backuplösung ist. Joplin versteht sich als Alternative zu Evernote und setzt voll und ganz auf Markdown. Das bedeutet allerdings nicht das man keine Bilder oder andere Anhänge zu einem Projekt hinzufügen kann; dies ist problemlos möglich.

Joplin unter macOS

Für Joplin existieren Clients für macOS, Linux und Windows. Für die mobilen Plattformen existieren Apps für iOS und Android.

Joplin (Kostenlos, App Store) →

Joplin (Kostenlos, Google Play) →

Als Backend unterstützt Joplin, das Dateisystem und eine Synchronisation zu OneDrive. An einer Unterstützung für Nextcloud und Dropbox wird gearbeitet. Laut dem Entwickler, wird diese nach der Beseitigung eines speziellen React Native Bugs implementiert:

Currently, synchronisation is possible with OneDrive (by default) or the local filesystem. A NextCloud driver, and a Dropbox one will also be available once this React Native bug is fixed. When syncing with OneDrive, Joplin creates a sub-directory in OneDrive, in /Apps/Joplin and read/write the notes and notebooks from it. The application does not have access to anything outside this directory.

Durch die geplante Nextcloud-Unterstützung ist es möglich die Synchronisierung auf dem eigenen Server zu nutzen; die eigenen Daten bleiben somit geschützt. Joplin hat mittlerweile die Betaphase verlassen und kann produktiv genutzt werden. Für einen Umstieg von Evernote auf Joplin existiert in der Anwendung eine Importfunktion um die enex-Dateien, welche beim Export aus Evernote erzeugt werden, zu importieren. Der Quelltext ist auf GitHub zu finden und unter der MIT-Lizenz lizenziert. Daneben gibt es eine offizielle Projektseite.

1. Januar 2018

Immer wieder wird der kostenlose und freie Messenger Signal als bester Messenger gewählt. Doch warum? Für all diejenigen, denen Datenschutz am Herzen liegt und denen es z.B. nicht egal ist, dass der im Moment noch am meisten verbreitete Messenger Whatsapp eine legale Benutzung nach europäischem Recht eigentlich unmöglich macht und seine Nutzer damit wissentlich zu Rechtsbrüchen verleitet (und nebenbei noch viele weitere Probleme mit sich bringt), für die ist klar, dass sie sich auf die Suche nach Alternativen machen müssen. Immer wieder gibt es daher Wellen von Austritten bei Whatsapp. Gerade der Kauf von Whatsapp durch Facebook bewegt noch immer die Gemüter, auch weil hier entgegen der ursprünglichen Versprechungen doch die Daten der beiden Dienste miteinander verknüpft werden.
Signal Blue Icon

Doch warum wird von vielen, unter anderem Edward Snowden, gerade Signal als Whatsapp-Alternative empfohlen? Im Unterschied zu Alternativen wie Threema und Telegram ist es neben der als sehr gut beurteilten Verschlüsselungstechnik vor allem der Fakt, dass der Quellcode komplett offen liegt und damit überprüfbar ist ein Grund für die Empfehlungen. Damit ist man nicht auf darauf angewiesen, dass die Firma hinter den Messengern schon alles korrekt abwickeln wird. Die Kontrolle verlagert sich hiermit zu großen Teilen von dem Unternehmen hin zu den einzelnen Nutzern bzw. der Community. Ein Fakt, der gerade im Falle von Telegram für die Nutzer im Iran aktuell zum Problem wird.

Signal lässt sich kostenlos aus dem Google PlayStore

Signal – Sicherer Messenger (Kostenlos, Google Play) →

oder für IOS bei iTunes

Signal – Sicherer Messenger (Kostenlos+, App Store) →

herunterladen. Diejenigen, die unter Android nicht den PlayStore verwenden möchten, können Signal auch manuell installieren.
Dabei ist Signal nicht nur ein reiner Messenger, sondern es lassen sich zumindest aus der Smartphone-App z.B. auch verschlüsselte Telefonate führen.

Doch nun zum Desktop. Schon vor längerer Zeit wurde eine Chrome-App herausgegeben, die es ermöglichte Signal auf dem Rechner laufen zu lassen. Diese wurde, da Chrome-App generell eingestellt werden, durch eine Version ersetzt, die auf Electron basiert. Es gibt sowohl eine Version für Windows, als auch für MacOS, wie eben für Debian basierte Linuxsystem, wie z.B. Ubuntu. Alle Varianten haben gemein, dass man zunächst die Android- bzw. IOS-App installieren muss, da die Telefonnummer die Nutzerkennung ist. Die Ubuntu -Version lässt sich dann ganz einfach installieren:

Zunächst wird der Schlüssel des Signal-Paket-Servers in der Paketverwaltung hinzugefügt:

curl -s https://updates.signal.org/desktop/apt/keys.asc | sudo apt-key add -

Anschließend kann der Paket-Server zu der Quellen-Liste der systemeigenen Paketverwaltung hinzugefügt werden:

echo "deb [arch=amd64] https://updates.signal.org/desktop/apt xenial main" | sudo tee -a /etc/apt/sources.list.d/signal-xenial.list

Dann muss nur noch der Cache der Paketverwaltung aktualisiert werden und dann kann die Signal-Desktop-App installiert werden:

sudo apt update && sudo apt install signal-desktop

Anschließend muss die Desktop-Version noch mit der App auf dem Smartphone verbunden werden. Hierzu zunächst auf „Einrichten als neue Version“ klicken:

Dann, nachdem man den Hinweis gelesen hat, auf „Verstanden“ klicken.

Danach wird ein QR-Code angezeigt:

Dieser muss nun mit der Smartphone-App eingescannt werden. Hierzu in den Signal-Einstellungen auf Verknüpfte Geräte klicken

In dem sich öffnenden Fenster nun auf das Plus klicken und den QR-Code scannen. Anschließend muss in der Desktop-App nur noch ein Name eingegeben werden unter dem das Gerät in der Smartphone-App erscheinen soll und die Installation und Verknüpfung ist erledigt. Viel Spaß bei der Nutzung der Desktop-App von Signal.

In meinem letzten Beitrag habe ich beschrieben, wie man verschiedene Webserver, die in einem LXD Container laufen, von außen über einen Reverse-Proxy (in unserem Fall HAProxy) erreichbar machen kann. Diese Setup läuft aber nur über HTTP (Port 80) und damit über einen unverschlüsselte Verbindung. Heutzutage ist es unabdingbar, dass man seine Website auch verschlüsselt. Deswegen möchte ich heute das Setup erweitern, sodass die Webserver über eine verschlüsselte Verbindung erreichbar sind. HAProxy wird dabei SSL/TLS Termination Proxy agieren, d.h. wir müssen nur an einer Stelle alle unsere Zertifikate verwalten und nicht auf jedem einzelnen Webserver selbst. Der Vorteil ist, dass den Webservern Arbeit durch den Proxy abgenommen wird, allerdings muss man wissen, dass die Kommunikation zwischen HAProxy und den Webservern unverschlüsselt erfolgt. Dieses private Netz sollte als sicher angesehen werden. In unserem Fall ist das das Subnet von LXD, in dem sich die Container befinden. Folgende Grafik veranschaulicht den Prozess:

TLS / SSL Termination

Container überprüfen

Zuerst überprüfen wir, ob alle unsere Container laufen und eine IP haben. Das können wir mit dem bekannten lxc list Befehl machen:

$ lxc list
+---------+---------+-----------------------+------+------------+-----------+
|  NAME   |  STATE  |         IPV4          | IPV6 |    TYPE    | SNAPSHOTS |
+---------+---------+-----------------------+------+------------+-----------+
| haproxy | RUNNING | 10.10.10.10 (eth0)    |      | PERSISTENT | 0         |
+---------+---------+-----------------------+------+------------+-----------+
| web1    | RUNNING | 10.10.10.100 (eth0)   |      | PERSISTENT | 0         |
+---------+---------+-----------------------+------+------------+-----------+
| web2    | RUNNING | 10.10.10.200 (eth0)   |      | PERSISTENT | 0         |
+---------+---------+-----------------------+------+------------+-----------+

Alle unsere Container sind online und haben eine IP-Adresse bekommen. Weiterhin sollten die DNS-Einträge unserer beiden Webserver auf die öffentliche IP des Servers zeigen. Dies können wir z.B. mit dem host-Befehl überprüfen:

$ host web2.example.com
web1.example.com has address 1.2.3.4

Weiterleitung für HTTPS einrichten

Bisher wird nur Traffic, der auf Port 80 auf unserem Server ankommt an den HAProxy Container weitergeleitet. Für HTTPS brauchen wir aber noch eine Weiterleitung für Port 443. Diese können wir mit einer ähnlichen iptables Regel einrichten:

$ sudo iptables -t nat -I PREROUTING -i eth0 -p TCP -d server_ip/32 --dport 443 -j DNAT --to-destination haproxy_ip:443

Diese Regel ist nach einem Neustart wieder weg. Um sie dauerhaft einzurichten, kann man z.B. das Paket iptables-persistent installieren.

HAProxy anpassen

Als nächsten müssen wir den HAProxy Konfiguration anpassen. Dazu loggen wir uns als root in dem Container ein:

$ lxc exec haproxy bash

Nun können wir die Konfigurationsdatei (/etc/haproxy/haproxy.cfg) öffnen (im HAProxy-Container) und anpassen.

$ nano /etc/haproxy/haproxy.cfg

Damit unser SSL Setup möglichst sicher ist, fügen wir folgende Zeilen im global Abschnitt hinzu. Ich habe Sie mit dem Mozilla SSL Configuration Generator erzeugt:

global
    ...
    # set default parameters to the modern configuration
    ssl-default-bind-ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
    ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
    ssl-default-server-ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
    ssl-default-server-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets

Im defaults Block fügen wir folgende Zeilen hinzu:

defaults
     ...
     option forwardfor
     option http-server-close
     ...

Nun sind einige Anpassungen im frontend www_frontend Abschnitt notwendig:

frontend www_frontend
    # Http
    bind *:80
    # Https mit Ordner für Certifikate
    bind *:443 ssl crt /etc/haproxy/certs/
    # allen Traffic nach https weiterleiten
    redirect scheme https if !{ ssl_fc }
    # TLS Termination. HAProxy informiert hier unseren Webserver darüber. 
    reqadd X-Forwarded-Proto:\ https

    # Unterscheide zwischen sicheren und unsicheren Requests (wird in den nächsten zwei Zeilen verwendet).
    acl secure dst_port eq 443
    
    # Markiere alle Cookies als sicher, wenn sie über SSL gesendet werden.
    rsprep ^Set-Cookie:\ (.*) Set-Cookie:\ \1;\ Secure if secure
    # Füge den HSTS-Header mit einem maximalen Alter von 1 Jahr hinzu.
    rspadd Strict-Transport-Security:\ max-age=31536000 if secure

In in den Backend Abschnitten müssen wir keine Änderungen vornehmen.

Let’s Encrypt Zertifikate einrichten

Nun brauchen wir für die verschlüsselte Kommunikation noch ein Zertifikat für unsere Webserver. Let’s Encrypt bietet kostenfreie Zertifikate schon seit einigen Jahren an und ab diesem Jahr sogar Wildcard-Zertifikate.

Damit wir die Zertifikate einrichten können, brauchen wir den Let’s Encrypt Client, den wir wie folgt installieren (im HAProxy Container):

$ sudo apt install letsencrypt

Wir generieren ein Zertifikat, welches für alle unsere Domains gültig ist:

$ letsencrypt certonly -d example.com -d web2.example.com

Wenn alles geklappt hat, haben wir nun ein gültiges Zertifikat für unsere beiden Webserver. Jetzt müssen wir nur noch HAProxy die richtigen Zertifikate zur Verfügung stellen. Dazu müssen wir die Certificate Chain und den Private Key zusammenfügen, damit HAProxy etwas damit anfangen kann. Wir legen im ersten Schritt das Zielverzeichnis an und fügen dann die Zertifikate und den Key zusammen:

$ mkdir -p /etc/haproxy/certs/
$ DOMAIN='example.com' sudo -E bash -c 'cat /etc/letsencrypt/live/$DOMAIN/fullchain.pem /etc/letsencrypt/live/$DOMAIN/privkey.pem > /etc/haproxy/certs/$DOMAIN.pem'

Zum Schluss starten wir den HAProxy neu:

$ systemctl restart haproxy

Testen

Wir sind fast am Ziel und möchten unsere Domains noch testen, ob auch alles richtig konfiguriert wurde.  Zuerst rufen wir die Seiten in einem Webbrowser auf. Es sollte neben der Adresse ein grünes Schloss erscheinen (im Firefox). Weiterhin sollten wir noch einen SSL Server Test durchführen. Das Ergebnis lässt sich sehen:

SSL Test Result

Fazit

Mit wenigen Schritten haben wir ein Setup geschaffen, in dem wir mehrere Webseiten nach außen hin erreichbar machen können. Das Ganze lässt sich leicht erweitern und skalieren. Besonders angenehm finde ich die Verwaltung der Zertifikate an einer Stelle und nicht auf jedem Webserver einzeln. LXD und Let’s Encrypt, sowie HAProxy sind für mich eine der großen persönlichen Entdeckungen der letzten zwei Jahre.

Was sind für dich die größten Herausforderung bei der Bereitstellung von Webservern?

5 Kommentare

Der Beitrag HAProxy, Nginx, LXD und Let’s Encrypt erschien zuerst auf .:zefanjas:..

Proin quam urna, pulvinar id ipsum ac, mattis consectetur ante. Praesent non justo lectus. Duis egestas arcu libero, quis laoreet dolor volutpat ut. Donec facilisis orci sit amet sem blandit elementum. Vestibulum suscipit consectetur diam, ac posuere metus condimentum in. Integer vehicula vitae enim id gravida. Vestibulum ut eros vitae risus porttitor porta in eget felis. Nulla lorem erat, mattis eget lacus eget, interdum aliquet lectus. Fusce non felis diam. Mauris sagittis porttitor est et vestibulum. Duis faucibus commodo est. Maecenas elit purus, auctor a consectetur eu, suscipit nec metus. Nam gravida id massa quis faucibus. Sed non consectetur eros. Nullam iaculis sit amet ex eget ultrices. Sed ligula arcu, vehicula vel ipsum nec, ultrices pulvinar ante.

Vivamus egestas justo sed nulla condimentum iaculis. Pellentesque eleifend elementum turpis sed tempus. Aliquam erat volutpat. In hac habitasse platea dictumst. Integer elementum sed diam at vulputate. Donec maximus, lacus a vulputate sagittis, felis turpis vestibulum massa, nec tincidunt libero felis eget arcu. Morbi eget velit vulputate, pellentesque odio laoreet, consequat orci. Aliquam erat volutpat. Nulla a vulputate mi, sed laoreet ipsum. Nulla nunc ipsum, ultricies at suscipit id, consectetur id erat. Suspendisse scelerisque vehicula felis quis luctus.

Donec posuere ante a nibh dictum suscipit. Mauris interdum dolor nulla, sit amet fermentum quam porta a. Ut metus ipsum, venenatis a lorem pellentesque, finibus commodo turpis. Cras mollis dui quis varius placerat. Phasellus nec nisi nec quam tincidunt luctus. Sed nec vulputate enim, vel dapibus enim. Praesent mollis maximus enim in tempus. Phasellus a arcu lorem. Sed dictum rhoncus tempus.

31. Dezember 2017

Erst einmal allen Leser einen guten Rutsch in das Jahr 2018! Auch die Zeit der Jahresrückblicke endet damit schon wieder. Im Gegensatz zum letzten Jahr, wo ich noch so etwas, wie einen Jahresrückblick geschrieben habe, fokussiere ich mich dieses Jahr stärker. Dies ist aber ähnlich wie die Tatsache, dass ich die letzten Monate gar nicht zum Schreiben gekommen bin, vielen tollen persönlichen und beruflichen Veränderungen geschuldet. Lust hätte ich schon all die Ereignisse rund um die Bundestagswahlen, Trump, Macron, Kim Jong Un, G20 usw. zu kommentieren. Doch werde ich mich dieses Jahr ganz auf die Veränderungen in der IT-Welt und im Besonderen auf die Welt der Freien Software konzentrieren.
2017 goodbye photo

Doch selbst dieses Feld ist riesig und es hat in diesem wahnsinnig viele Entwicklungen und Veränderungen gegeben. Hier ist es meiner Einschätzung nach müßig auf einzelne Versionssprünge und neue Features einzugehen, so toll sie auch sind. Doch eine Veränderung sticht meiner Einschätzung nach aus den Ereignissen des Jahres heraus und wird wahrscheinlich auch in den nächsten Jahren Auswirkungen auf die gesamt IT-Welt haben.

Das Jahr 2017 brachte das Ende des Ubuntu-Desktops. Jetzt werden einige einwenden, dass es doch weiterhin gleich eine ganze Reihe von verschiedenen Ubuntu-Flavours gibt, die ganz unterschiedliche Desktops mitbringen, sei es nun Ubuntu, Kubuntu, Xubuntu oder wie sie alle heißen. Dies ist natürlich richtig. Doch hat es eine entscheindende Veränderung im letzten Jahr gegeben:
Am 5. April verkündete Ubuntu-Gründer und Mäzen Mark Shuttleworth in einem Blog-Eintrag auf Insights Ubuntu, dass sich Ubuntu in Zukunft auf IOT und Server konzentrieren werde und daher die Entwicklung von Unity einstellen werde und damit einhergehend die Einstellungen der Bemühungen im Bereich Ubuntu Phone und der Convergence (d.h. dem Ziel einen Desktop für alle Geräteklassen zu entwicklen). Zwar betonte Shuttleworth, dass dies nicht die Einstellung der Bemühungen im Bereich des Desktops bedeuten würde, die erfolgten Entlassungen bei Canonical, dem Unternehmen hinter Ubuntu, sprechen allerdings eine andere Sprache.
Schon allein diese Kündigungswelle, bei der einige hundert Entwickler entlassen wurden, sollte deutlich machen, dass hier eine Schwächung der Welt der Freien Software insgesamt erfolgt ist. Auch die Argumentation einiger, die diese Entwicklung begrüßten und meinten, dass es gut sei, dass jetzt auch Ubuntu als Standard-Desktop Gnome einsetze, da damit Ressourcen gebündelt würden, stellt sich hierdurch als falsch heraus. Es sind nun einfach weniger Ressourcen vorhanden.
Doch schon der Ansatz dieser Argumentation ist falsch, denn auch in der Welt der Freien Software finden große Entwicklungen häufig dadurch statt, dass es verschiedene konkurrierende Ansätze gibt. Nur ist es bei Freier Software z.B. möglich ein bestehendes Projekt zu forken und dann mit einer eigenen Ausrichtung weiterzuführen und es entsprechend zu verändern (Beispiel OwnCloud und Nextcloud) oder es können Teile eines Projektes verwendet werden (so die Nutzung von vielen Gnome-Bestandteilen in Unity). Zwar gibt es wie schon erwähnt weiter eine ganze Reihe an Desktops, doch bis auf die großen Projekte (wie KDE und Gnome) haben alle anderen viel kleinere Entwicklergemeinden hinter sich und können daher nicht die Qualität erreichen, die Unity mit sich brachte. KDE und Gnome, die beiden verbliebenen Schwergewichte haben es in den Jahrzehnten, die es sie schon gibt, nicht geschafft, außerhalb einer kleinen Gemeinde von Linux-Nutzern Aufmerksamkeit zu erhalten. Dies war bei Unity schon anders. Denn auch wenn Ubuntu mit Gnome als Desktop groß geworden war, so wirkte doch Unity immer ausgereifter und durchdachter und vor allem benutzerfreundlicher als „die Quälerei“ mit Gnome, hier vor allem nach dem Versionssprung auf Gnome 3.
Zwar haben die Ubuntu-Entwickler in kurzen Zeit bei der Erstellung von 17.10 wirklich erstaunliches geleistet und haben dem Gnome-Desktop zumindest ein Unity-Look gegeben. Doch im Vergleich zur Vorgängerversion wirkt der Desktop unschön und nicht wie bei Unity bis in das letzte Pixel durchdacht. So wird viel Platz verschenkt, die Gnome-Menüs sind inkonsistent gestaltet und unübersichtlich. Außerdem fehlen großartige Entwicklung wie das HUD. Zwar kann man hoffen, dass der Desktop zur nächsten Ubuntu-Version noch einiges an Arbeit erfährt und die Qualität wieder steigt. Doch es fehlen einfach jetzt einige hundert Entwickler, was sich zwangsläufig auf die Qualität auswirkt. Dass gerade die Installations-Images wegen eines Fehlers bei einigen Lenovo-Geräten zurückgezogen werden mussten, passt leider in das traurige Bild.
Das schon lange ersehnte und beschworene Jahr des Linux-Desktops ist mit dem Ende der Entwicklung von Unity leider in weite Ferne gerückt.

Sofern man auf seinem PC mindestens zwei unterschiedliche Betriebssysteme installiert hat, kommt man um einen Bootloader wie z.B. GRUB2 nicht herum.
Zwischenzeitlich war ich auf Manjaro unterwegs und war recht angetan von deren GRUB2 Konfiguration. Beim Neustart wird das zuletzt gestartete Betriebssystem automatisch selektiert. Diese Komfortfunktion ist recht einfach in jedem Linux mit GRUB2 Bootloader zu aktivieren.

Dazu einfach eine Terminalinstanz öffnen (häufig ALT+T):
Hier nutzen müssen wir mit sudo-Rechten die GRUB2 Konfiguration öffnen:

sudo nano /etc/default/grub

Folgende Zeilen sind einzufügen, sofern diese noch nicht vorhanden sind:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

Anschließend wird mit ALT+O die Änderungen gespeichert und mit ALT+X das Programm geschlossen.

Abschließend müssen wir GRUB2 noch mitteilen, dass eine Änderung der Konfiguration erfolgt ist:

sudo update-grub

Nun haben wir beim nächsten Bootvorgang immer die letzte Einstellung automatisch selektiert.

Kürzlich habe ich in meinem auf OpenMediaVault basiernden NAS eine weitere Festplatte eingebaut und zum RAID5 hinzugefügt. Da der freie Speicherplatz in meinem betehenden RAID langsam knapp wurde, wollte ich das RAID Array und anschließend das darin liegende Dateisystem vergrößern. Zu meiner Verwunderung wurde die weitere Festplatte aber als (Hot) Spare Festplatte, also quasi als Standy-Ersatz-Festplatte hinzugefügt.

Die Lösung fand sich in folgender Zeile in der mdadm-Konfigurationsdatei

/etc/mdadm/mdadm.conf
 :
ARRAY /dev/md0 metadata=1.2 spares=1 name=nas:RAID5 UUID=a6bbae11:8c383011:676a08ca:60cfd488

Dort wird explizit eine Festplatte als Spare-Festplatte reserviert, so dass ich die Zeile wie folgt geändert habe:

ARRAY /dev/md0 metadata=1.2 spares=0 name=nas:RAID5 UUID=a6bbae11:8c383011:676a08ca:60cfd488

Damit aus der Spare-Festplatte jetzt eine aktive Festplatte im RAID Array wird, habe ich das RAID Array unter Angabe der Anzahl der RAID-Festplatten vergrößert:

mdadm --grow /dev/md0 --raid-devices=6

Seitdem läuft nun das Reshaping, also das erneute Anordnen oder Reorganisieren des RAID Arrays, wie man mit 

cat /proc/mdstat
  überprüfen kann:
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdf[5] sdc[0] sde[4] sdd[3] sdb[2] sda[1]
      15627548672 blocks super 1.2 level 5, 512k chunk, algorithm 2 [6/6] [UUUUUU]
      [================>....]  reshape = 84.0% (3282224128/3906887168) finish=155.9min speed=66761K/sec
      
unused devices: <none>

Nun sieht man deutlich, dass keine Spare-Festplatte mehr vorhanden ist und alle Festplatten als aktiv genutzte Festplatte zum RAID Array gehören:

Warum dieses Verhalten nicht schon beim Hinzufügen der vierten oder fünften Festplatte aufgetreten ist weiß ich nicht, aber die Lösung war zum Glück einfach zu finden.

30. Dezember 2017

Anfang Oktober wurde ich darum gebeten Linux auf einem Privatnotebook einzurichten. Obwohl ich grundsätzlich nicht missioniere und im Familien- und Freundeskreis auch für Windows- und macOS-Probleme zur Verfügung stehe, freut man sich darüber doch sehr. Manchmal unterschätzt man auch sehr gut bekannte Menschen immer wieder. Ich persönlich hätte MATE oder Xfce der Einfachheit halber empfohlen, nach einem Livetest mit 7 Live-Medien (Ubuntu Derivate / Desktopumgebungen - Eine Übersicht) stand fest, dass es Plasma werden sollte. Die klassiche, windowsnahe Bedienung siegt über die verwirrenden Einstellungsmöglichkeiten.

Lediglich die Wahl der Distribution übernahm ich selbst, da bereit die Erklärung des Distributions-Konzepts den Betroffenen mehr verwirrte als aufklärte. Oktober in einem ungeraden Jahr ist natürlich ein undankbarer Zeitpunkt. Die nächste LTS von Ubuntu steht kurz vor der Tür und die letzte ist bereis stark abgehangen. Außerdem war Kubuntu 16.04 kein Aushängeschild - weder für Kubuntu, noch für KDE. Meine letzten Erfahrungen mit dem KDE-Support bei Debian waren auch eher durchwachsen, daher beschloss ich erstmalig openSUSE Leap (openSUSE Leap 42.3 im Test) bei besagtem Dritten einzusetzen.

Um Treiber brauchte man sich keine Gedanken zu machen, da das System absolute Massenware ist. Core i5 CPU einer älteren Generation, Realtek LAN und Audio und eine NVIDIA Geforce 320M. Das funktioniert mit allen Linux-Distributionen seit Jahren. Allerdings braucht es für NVIDIA immer noch eine Fremdquelle und openSUSE verweigert sich weiter DKMS.

Das System ist für den recht rudimentären Privateinsatz konfiguriert. Neben der Plasma-Oberfläche und zugehörigen Programmen (Dolphin, Okular, Gwenview) kommen noch Firefox als Browser und LibreOffice für einfache Office-Tätigkeiten zum Einsatz. Das einzige Wagnis bestand im Einsatz von KMail als primärer Mailclient. Hinzu kommt noch VLC für die üblichen Multimedia-Aufgaben.

Die Besonderheit bei diesem System liegt darin, dass es weitestgehend auf "Autopilot" eingerichtet ist. Systempflege durch den Anwender ist absolut nicht vorgesehen.

  • Updates werden automatisch eingespielt
  • Btrfs-Snapshots werden vor einem Update angelegt und regelmäßig aufgeräumt.
  • Snapshots des Daten-Subvolumes werden täglich angelegt und wieder aufgeräumt.
  • Die letzten drei Kernelversionen sind installiert

Nach drei Monaten im vollkommen problemlosen Einsatz muss das Experiment als absolut geglückt gelten. OpenSUSE Leap ist mit Plasma LTS absolut stabil und Updates verursachen keine Probleme. Die vollautomatischen Btrfs-Snapshots als Notanker kamen bisher nicht einmal zum Einsatz. Hervorragend ist auch die eher konservative Softwareauswahl von openSUSE. So ist beispielsweise die ESR-Version von Firefox enthalten, was ständige Funktionsupdates vermeidet.

Eines ist sicher: Mit Kubuntu wäre das problematischer gewesen. Hier läuft durch die relativ häufigen Kernel-Updates irgendwann die /boot-Partition voll und Btrfs-Snapshots lassen sich nicht so leicht automatisieren wie bei openSUSE. Ebenso wäre Firefox Quantum durch den Anwender höchstwahrscheinlich als "Fehler" eingestuft worden.

Die einzige spannende Frage ist das Distributionsupgrade auf openSUSE Leap 15 im kommenden Jahr.

29. Dezember 2017

avm firtzbox labor - FRITZ!Box oder Repeater automatisch neustarten lassen - Linux Bash-SkriptWir haben in unserem Haushalt eine AVM FRITZ!Box 6490 Cable und zwei FRITZ!WLAN Repeater 1750E im Einsatz. Des Öfteren hat meine Frau geschimpft, dass bei ihr am iPhone gerade das WLAN nicht funktioniert – mit der iOS-App IT Tools habe ich versucht dem Problem auf die Schliche zu kommen. Es hatte immer den Anschein, als … FRITZ!Box oder Repeater automatisch neustarten lassen – Linux Bash-Skript weiterlesen

28. Dezember 2017

Mozilla hat kurz vor Jahreswechsel noch einmal nachgebessert und mit Firefox 57.0.3 ein Update veröffentlicht, welches ein mit Firefox 52 eingeführtes Problem behebt.

Download Mozilla Firefox 57.0.3 für Microsoft Windows, Apple macOS und Linux

Wenige Tage vor Neujahr hat Mozilla noch einmal ein Update für Firefox 57 veröffentlicht. Damit behebt Mozilla ein Problem mit dem System zum Senden von Absturzberichten. Das Problem existiert bereits seit Firefox 52, wurde aber erst jetzt entdeckt und umgehend behoben. So führte eine Änderung unter gewissen Umständen zum automatischen Übertragen von Absturzberichten, wenn ein Tab im Hintergrund abgestürzt ist, auch wenn der Nutzer das Senden nicht explizit per Opt-In aktiviert hat.

Da Mozilla nicht zwischen Nutzern unterscheiden kann, welche die Absturzberichte senden wollen, und Nutzern, die dies nicht wollen und von diesem Fehler betroffen sind, hat Mozilla mit Firefox 57.0.3 nicht nur die fehlerhafte Bedingung korrigiert, sondern die Einstellung für alle Nutzer zurückgesetzt und außerdem sämtliche entsprechende Absturzberichte auf den Mozilla-Servern gelöscht.

Nutzer, welche im Falle eines Tab-Absturzes Absturzberichte an Mozilla senden wollen (was definitiv sinnvoll und empfehlenswert ist!), müssen dies beim nächsten Tab-Absturz also wieder explizit aktivieren.

Der Beitrag Mozilla veröffentlicht Firefox 57.0.3 erschien zuerst auf soeren-hentzschel.at.

Ich probiere ja immer wieder gerne neue Sachen aus, und seit ein paar Wochen auch Sia. Sia ist, kurz gesagt, eine dezentrale Cloud. D.h. anstelle einem Anbieter wie Google, Amazon oder Dropbox vertrauen zu müssen, werden die Daten mehrfach redundant bei externen Anbietern gespeichert. Die Daten sind dabei komplett verschlüsselt. Abgesichert wird das ganze durch Verträge, welche über die Sia Blockchain abgewickelt werden. Gezahlt wird mittels Siacoin, kurz SC. Den verfügbaren Speicherplatz stellen dabei sogenannte Hosts zur Verfügung.

Und ich betreibe nun ebenfalls solch einen Host.

Warum überhaupt?

Die grundlegende Idee hinter Sia ist ganz einfach: Ungenutzten Speicherplatz, der auf so vielen Geräten, welche 24/7 mit dem Internet verbunden sind, als Backend für eine wirklich dezentrale Cloud verwenden. Und das ganze kommt dabei auch noch deutlich günstiger als Speicherplatz bei etablierten Unternehmen zu mieten. Zudem kann die Cloud im Prinzip nicht ausfallen.

Die ganze Technologie dahinter ist recht jung, und dementsprechend hakt es auch noch an der ein oder anderen Stelle. Zur Zeit muss noch die komplette Blockchain synchronisiert werden bevor man loslegen kann, was beim ersten Start ein paar Stunden dauern kann. Es gibt noch keine App fürs Smartphone, und Dateien oder auch Ordner können (noch) nicht via Klick freigegeben werden. Zumindest nicht, wenn man direkt auf Sia setzt. Es gibt allerdings erste Ansätze die Cloud in andere Anwendungen, etwa Nextcloud oder auch Duplicati, zu integrieren.

Wie man einen Host aufsetzt

Da es im Moment keine wirkliche Anleitung gibt wie man mit der aktuellen Software (Sia Version 1.3.1) einen Host aufsetzt, fasse ich das hier zusammen. Als Betriebssystem setze ich dabei auf Archlinux. Vieles ist dabei an diesen Artikel angelehnt.

Neuen Nutzer anlegen

# useradd -m -s /bin/bash sia

Sia-daemon aus dem AUR installieren

$ pacaur -S sia-daemon

Siad starten, Wallet erzeugen
Leider ist die Konfiguration im Moment noch etwas, sagen wir umständlich gelöst. Zuerst muss der Sia Daemon (siad) gestartet werden, erst dann kann man an der Konfiguration herumspielen. Das Problem dabei ist, dass man das ganze nicht direkt mit einem Systemd Service erschlagen kann, weil wir dazu bereits eine funktionierende Wallet bräuchten. Und das geht wiederum erst, wenn der Daemon schon läuft…

Kurz gesagt: Man braucht im Moment mindestens zwei Fenster: Eines, in welchem der Daemon läuft, ein anderes, in welchem man die Konfiguration vornimmt. Und dann, sofern man will, noch ein paar in welchen man den Daemon überwacht. Daher empfehle ich an dieser Stelle jetzt tmux. Alternativ kann man auch entsprechend viele Terminals öffnen, aber das zu erläutern ist nicht Sinn dieses Artikels.

Zuerst loggt man sich als Nutzer sia auf dem zukünftigen Host ein, und springt ins gewünschte Verzeichnis, in welchem alle Daten von Sia liegen sollen (leider hält sich die Software zur Zeit noch nicht an gängige Konventionen und nutzt daher auch nicht ~/.config/sia als Verzeichnis, sondern das, in welchem man sich gerade befindet). Das Verzeichnis in welchem man Sia startet sollte dabei auf einer SSD liegen, das beschleunigt diverse Vorgänge enorm. Das Verzeichnis in welchem der Host später seine Daten ablegt kann hingegen beliebig gewählt werden (das kommt allerdings später erst):

$ su sia
cd /home/sia
siad -M gctwh

Mit dem letzten Befehl wird der Sia Daemon gestartet, mittels -M werden dabei die Module übergeben welche wir für unser Vorhaben brauchen:

  • g → Gateway, handhabt die Verbindung zum Netzwerk
  • c → Consensus Set, kümmert sich um die Blockchain und diverse andere Sachen
  • t → Transaction pool, kümmert sich um laufende Transaktionen
  • w → Wallet, verwaltet unsere Siacoins
  • h → Host, um den eigenen Server als Host im Netzwerk anbieten zu können

Man kann im Übrigen an nahezu jeden Befehl -h anhängen um mehr zu erfahren. Mehr Informationen zu den verfügbaren Modulen gibt es mittels siad modules.

Den aktuellen Status des Blockchain-Downloads kann man sich einfach ausgeben lassen, und sieht kurz nach dem Start beispielsweise so aus:

$ siac
Synced: No
Height: 220
Progress (estimated): 0.2%

Die aktuelle Blockhöhe lässt sich über den Sia Explorer ermitteln. Und ja, der Sync nimmt, selbst auf einer SSD, gerne mal ein paar Stunden in Anspruch. Wie gesagt, die Software ist noch nicht vollkommen ausgereift, in Zukunft sollte der Download allerdings schneller erfolgen.

Nachdem der Synchronisationsvorgang nun läuft lässt sich auch eine Wallet erzeugen. Der ausgegebene Seed (welchen man zwingend sichern muss, denn damit lässt sich die Wallet wiederherstellen!), dient dabei zugleich auch noch als Passwort für die Wallet. Das Passwort sollte man dementsprechend auch ändern, da wir dieses nachher für den Autounlock brauchen und in der Service-Datei nicht unbedingt der Seed stehen sollte:

$ siac wallet init
[…]
$ siac wallet unlock
[…]
$ siac wallet change-password
[…]

Zudem braucht man noch eine Wallet-Adresse, welche man folgendermaßen erhält:

$ siac wallet address
Created new address: 9b8a3dd1f861cbc7f462a400fe0c94c2f563c7ad66ed293cb68a2cfbe8ea3f83273d031b84c8

Sicherheit ("Kollateral") hinterlegen
Ich habe es im Artikel bisher noch nicht erwähnt, aber man kann nicht "einfach so" einen Host betreiben, sondern muss dazu auch etwas investieren. Und zwar ist es so, dass man als Host gewisse Preise festlegt, und ein "Renter" kann diese dann akzeptieren und so Speicherplatz bei einem Host mieten. Als Sicherheit hinterlegt der Host dafür ein sogenanntes "Kollateral" in Siacoins. Wenn der Host nicht ausfällt, die Daten zuverlässig speichert und es keine Probleme gibt erhält man nach Ablauf der Vertragslaufzeit (in der Regel maximal 25 Wochen) die hinterlegten Coins zurück. Scheitert der Host dagegen daran die Daten zuverlässig zu speichern bekommt der Renter als Schadensausgleich die Sicherheit überwiesen. Das bringt zwar nicht die Daten zurück, soll aber dafür sorgen, dass sich Hosts nicht einfach Verträge unter die Nägel reißen die sie nicht halten können. Kurzum: So soll Betrug verhindert werden.

Bleibt natürlich die Frage, wie man denn jetzt an Siacoins herankommt. Vorzugsweise geschieht dies über eine Börse, welche direkt Siacoins zum Kauf anbietet. Ich selbst hatte aber noch ein paar Bitcoins übrig und habe mir meine Siacoins mittels ShapeShift geholt. Der Dienst erlaubt es unterschiedliche Kryptowährungen ganz ohne Registrierung einfach zu tauschen. Für größere Beträge nicht unbedingt der Weg den man gehen will, aber für Coins im Wert von ein paar hundert Euro kann man das schon einmal so machen. Um einen Host zu betreiben reichen ein paar tausend Siacoins aus.

Und diese müssen dann an die vorher generierte Wallet-Adresse überwiesen werden, damit der Host auch damit arbeiten kann. Da der ganze Vorgang gerne mal etwas dauert, sollte man das machen bevor man mit der Konfiguration des Hosts fertig ist und die Blockchain synchronisiert wurde.

Ordner hinzufügen
Das Verzeichnis bzw. der Ordner, der vom Host verwendet werden soll, kann wie bereits erwähnt frei gewählt werden und kann im Gegensatz zu den Daten des Sia Daemons auch problemlos auf einer herkömmlichen Festplatte liegen. Der Befehl dafür lautet siac host folder add [folder] [size] und sieht angewandt etwa so aus:

$ siac host folder add /media/sia/storage 800GB

Die Größe des verfügbaren Speicherplatzes beinflusst zudem auch den Host Score, dazu weiter unten aber mehr. Es ist zudem nicht nötig das Verzeichnis für die Daten redundant aufzubauen, da Daten innerhalb der Cloud sowieso schon mehrfach gespeichert werden. Allerdings: Sind die Daten weg, zahlt man als Host dafür in Form von Siacoins.

Und ganz wichtig: Darauf achten, dass der Daemon auch wirklich Schreibrechte in dem Verzeichnis hat.

Preise festlegen
Und jetzt zum kniffligeren Teil: Das festlegen der Preise. Ziel ist, dass der Host so gut wie möglich genutzt wird, und dabei möglichst viele Siacoins abwirft. Die Berechnung des Host Scores folgt dabei einem festen Schema. Folgende Faktoren wirken sich dabei auf den Score aus:

  • Sicherheit bzw. "Kollateral"
  • Vertrags, Down- und Uploadpreis
  • Verfügbarer Speicherplatz
  • Laufzeit bzw. "Alter" des Hosts
  • Uptime des Hosts
  • Verwendete Softwareversion
  • "Host interaction weight"

Lediglich die ersten beiden Punkte lassen sich direkt festlegen, der verfügbare Speicherplatz ergibt sich aus dem was man bereit ist anzubieten (>4TB wäre optimal), und die Laufzeit des Hosts aus der Zeit die verstrichen ist seit der Host das erste mal im Netzwerk gesehen wurde. Die Uptime hingegen aus dem Verhältnis zwischen der Zeit die er online und der Zeit die er offline war. Optimalerweise beträgt die Uptime mindestens 98%, was bereits ein sehr großzügiger Wert ist. Zudem sollte man eine möglichst aktuelle Version des Sia Daemons verwenden. Wer das ganze genauer erklärt haben will und die oben verlinkte, eher technische Dokumentation etwas zu trocken war, dem sei auch noch dieser Beitrag zu empfehlen.

Bleibt noch die Frage wie man jetzt die zwei oben genannten bzw. letztlich sieben Einstellungen am besten festlegen soll. Eine Übersicht über die aktuellen Durchschnittspreise bietet diese Webseite hier. Alternativ kann man sich auch die Einstellungen anderer Hosts im Netzwerk ansehen. Ziel ist es, die durchschnittlichen Preise knapp zu über- bzw. unterbieten, um einen möglichst hohen Score zu erreichen.

Da man die Preise sowieso regelmäßig anpassen sollte und man anfangs aufgrund der geringen Laufzeit mit einem hohen Score anfängt, sollten neue Hosts in den ersten paar Wochen die Preise massiv unterbieten und sich über den Verlauf von ca. 41 Tagen etwa dem Durchschnitt anpassen.

Hat man sich dann für entsprechende Preise entschieden kann man diese wie folgt festlegen (1SC = 1 Siacoin, 1KS = 1000 Siacoin):

$ siac host config collateral 500SC
$ siac host config collateralbudget 25KS
$ siac host config maxcollateral 3KS
$ siac host config mincontractprice 5SC
$ siac host config mindownloadbandwidthprice 25SC
$ siac host config minstorageprice 50SC
$ siac host config minuploadbandwidthprice 5SC

Die komplette Hostkonfiguration kann man sich anschließend via siac host -v ausgeben lassen.

Systemd Service schreiben
Da der ganze Spaß später vollautomatisch laufen soll empfiehlt es sich, einen Systemd Service zu schreiben. Mithilfe eines Redditnutzers kam dabei folgendes heraus:

[Unit]
Description=Sia Hosting
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/siad -M gctwh
ExecStop=/usr/bin/siac stop
WorkingDirectory=/home/sia
Restart=always
RestartSec=10
User=sia
Environment=SIA_WALLET_PASSWORD="HierDasWalletPasswortEinfügen"

[Install]
WantedBy=multi-user.target

Das ganze unter /etc/systemd/system/siad.service speichern und fertig. Gestartet wird der Service allerdings erst später, dazu weiter unten mehr.

Ports freigeben
Da man einen Host auch von zu Hause betreiben kann oder man eine Firewall einsetzt, die bestimmte Ports blockiert, noch als Hinweis: Die Ports 9981 und 9982 müssen von außen erreichbar sein! Wer also hinter einem Router sitzt sollte ganz schnell ins Webinterface gehen und die Ports freigeben.

Los geht's
Nachdem nun alles eingerichtet ist, und bereits ein paar tausend Siacoins in der neu erstellten Wallet liegen, gibt es nur noch ein paar Dinge zu tun. Zuerst sollte man warten, bis die Blockchain zu 100% synchronisiert wurde. Danach stoppt man den Sia Daemon:

$ siac stop

Um ihn anschließend als den vorher angelegten Systemd-Service neu zu starten:

# systemctl daemon-reload
# systemctl start siad.service

Ob der Service nun auch tatsächlich läuft lässt sich via journalctl ermitteln. Dabei sollte die Ausgabe ähnlich wie bei mir aussehen, und ganz wichtig: Der Wallet auto-unlock muss funktionieren! Ansonsten ist das Hosting nicht möglich.

# journalctl -u siad.service
siad[30300]: Loading...
siad[30300]: (0/5) Loading siad...
siad[30300]: (1/5) Loading gateway...
siad[30300]: (2/5) Loading consensus...
siad[30300]: (3/5) Loading transaction pool...
siad[30300]: (4/5) Loading wallet...
siad[30300]: (5/5) Loading host...
siad[30300]: Sia Wallet Password found, attempting to auto-unlock wallet
siad[30300]: Auto-unlock successful.
siad[30300]: Finished loading in 2.12344371 seconds

Hat alles geklappt aktiviert man den Service noch:

# systemctl enable siad.service

Letztlich muss man den Host nur noch im Netzwerk bekannt machen:

$ siac host announce

Voilà, der Host ist online. Bis erste Verträge abgeschlossen werden dauert es allerdings ein paar Tage bis – maximal – wenige Wochen.

Host überwachen
Da die Software wie bereits geschrieben noch nicht wirklich ausgereift ist, sollte man den Daemon regelmäßig auf Funktionsfähigkeit prüfen. Dabei gibt es mehrere Möglichkeiten:

  • siac → Zeigt an, ob der Daemon mit dem Netzwerk synchronisiert ist, inklusive dem letzten Block und der aktuelle Blockhöhe
  • siac wallet → Zeigt Daten über die Wallet an. Wichtig ist, dass die Wallet unlocked ist!
  • siac host -v → Zeigt Daten über den Host an

Des Weiteren kann man zur Fehlersuche, sollten welche auftreten, auch die Logdateien (welche sich unterhalb des Homeverzeichnisses befinden) einsehen. Insbesondere der host.log ist hierbei interessant.

Was, wenn man den Host nicht mehr betreiben will?
Sollte man den Host nicht mehr betreiben wollen gibt es mehrere Möglichkeiten. Richtig wäre es, weitere Verträge zu unterbinden und die noch laufenden Verträge auslaufen zu lassen:

$ siac host config acceptingcontracts false

Danach ~25 Wochen warten und alle noch laufenden Verträge sollten ausgelaufen sein.

Die andere Möglichkeit ist, den Host einfach stillzulegen, und die Daten zu löschen. Theoretisch sollte das für die Renter kein Problem darstellen, weil Daten mehrfach redundant gesichert sind. Als Host verliert man dabei das Locked Collateral, welches als Sicherheit hinterlegt wurde.

Fazit
Wie gesagt ist das ganze noch in einem relativ frühem Stadium. Die Technik dahinter ist absolut genial, die Umsetzung zur Zeit noch etwas rudimentär. Als Backend für die eigene Cloud kann man das ganze schon ganz gut verwenden, und das zu einem Bruchteil der Kosten die man für andere Anbieter hinlegt. Für alles andere muss man wohl noch etwas abwarten. Es gibt allerdings eine öffentlich einsehbare Roadmap.

Und für alle die sich fragen ob sich das aus finanzieller Sicht lohnt: Nein, tut es nicht. Der Verdienst sind aktuell etwa 1,80€/TB im Monat. Aber es geht ja auch nicht darum Geld zu schöpfen, sondern ein dezentrales Cloud Backend aufzubauen. Und dafür ist das wie gesagt schon ein ziemlich geniales Stück Software.

Ich probiere ja immer wieder gerne neue Sachen aus, und seit ein paar Wochen auch Sia. Sia ist, kurz gesagt, eine dezentrale Cloud. D.h. anstelle einem Anbieter wie Google, Amazon oder Dropbox vertrauen zu müssen, werden die Daten mehrfach redundant bei externen Anbietern gespeichert. Die Daten sind dabei komplett verschlüsselt. Abgesichert wird das ganze durch Verträge, welche über die Sia Blockchain abgewickelt werden. Gezahlt wird mittels Siacoin, kurz SC. Den verfügbaren Speicherplatz stellen dabei sogenannte Hosts zur Verfügung.

Und ich betreibe nun ebenfalls solch einen Host.

Warum überhaupt?

Die grundlegende Idee hinter Sia ist ganz einfach: Ungenutzten Speicherplatz, der auf so vielen Geräten, welche 24/7 mit dem Internet verbunden sind, als Backend für eine wirklich dezentrale Cloud verwenden. Und das ganze kommt dabei auch noch deutlich günstiger als Speicherplatz bei etablierten Unternehmen zu mieten. Zudem kann die Cloud im Prinzip nicht ausfallen.

Die ganze Technologie dahinter ist recht jung, und dementsprechend hakt es auch noch an der ein oder anderen Stelle. Zur Zeit muss noch die komplette Blockchain synchronisiert werden bevor man loslegen kann, was beim ersten Start ein paar Stunden dauern kann. Es gibt noch keine App fürs Smartphone, und Dateien oder auch Ordner können (noch) nicht via Klick freigegeben werden. Zumindest nicht, wenn man direkt auf Sia setzt. Es gibt allerdings erste Ansätze die Cloud in andere Anwendungen, etwa Nextcloud oder auch Duplicati, zu integrieren.

Wie man einen Host aufsetzt

Da es im Moment keine wirkliche Anleitung gibt wie man mit der aktuellen Software (Sia Version 1.3.1) einen Host aufsetzt, fasse ich das hier zusammen. Als Betriebssystem setze ich dabei auf Archlinux. Vieles ist dabei an diesen Artikel angelehnt.

Neuen Nutzer anlegen

# useradd -m -s /bin/bash sia

Sia-daemon aus dem AUR installieren

$ pacaur -S sia-daemon

Siad starten, Wallet erzeugen

Leider ist die Konfiguration im Moment noch etwas, sagen wir umständlich gelöst. Zuerst muss der Sia Daemon (siad) gestartet werden, erst dann kann man an der Konfiguration herumspielen. Das Problem dabei ist, dass man das ganze nicht direkt mit einem Systemd Service erschlagen kann, weil wir dazu bereits eine funktionierende Wallet bräuchten. Und das geht wiederum erst, wenn der Daemon schon läuft…

Kurz gesagt: Man braucht im Moment mindestens zwei Fenster: Eines, in welchem der Daemon läuft, ein anderes, in welchem man die Konfiguration vornimmt. Und dann, sofern man will, noch ein paar in welchen man den Daemon überwacht. Daher empfehle ich an dieser Stelle jetzt tmux. Alternativ kann man auch entsprechend viele Terminals öffnen, aber das zu erläutern ist nicht Sinn dieses Artikels.

Zuerst loggt man sich als Nutzer sia auf dem zukünftigen Host ein, und springt ins gewünschte Verzeichnis, in welchem alle Daten von Sia liegen sollen (leider hält sich die Software zur Zeit noch nicht an gängige Konventionen und nutzt daher auch nicht ~/.config/sia als Verzeichnis, sondern das, in welchem man sich gerade befindet). Das Verzeichnis in welchem man Sia startet sollte dabei auf einer SSD liegen, das beschleunigt diverse Vorgänge enorm. Das Verzeichnis in welchem der Host später seine Daten ablegt kann hingegen beliebig gewählt werden (das kommt allerdings später erst):
$ su sia
cd /home/sia
siad -M gctwh
Mit dem letzten Befehl wird der Sia Daemon gestartet, mittels -M werden dabei die Module übergeben welche wir für unser Vorhaben brauchen:
  • g → Gateway, handhabt die Verbindung zum Netzwerk
  • c → Consensus Set, kümmert sich um die Blockchain und diverse andere Sachen
  • t → Transaction pool, kümmert sich um laufende Transaktionen
  • w → Wallet, verwaltet unsere Siacoins
  • h → Host, um den eigenen Server als Host im Netzwerk anbieten zu können
Man kann im Übrigen an nahezu jeden Befehl -h anhängen um mehr zu erfahren. Mehr Informationen zu den verfügbaren Modulen gibt es mittels siad modules.

Den aktuellen Status des Blockchain-Downloads kann man sich einfach ausgeben lassen, und sieht kurz nach dem Start beispielsweise so aus:
$ siac
Synced: No
Height: 220
Progress (estimated): 0.2%
Die aktuelle Blockhöhe lässt sich über den Sia Explorer ermitteln. Und ja, der Sync nimmt, selbst auf einer SSD, gerne mal ein paar Stunden in Anspruch. Wie gesagt, die Software ist noch nicht vollkommen ausgereift, in Zukunft sollte der Download allerdings schneller erfolgen.

Nachdem der Synchronisationsvorgang nun läuft lässt sich auch eine Wallet erzeugen. Der ausgegebene Seed (welchen man zwingend sichern muss, denn damit lässt sich die Wallet wiederherstellen!), dient dabei zugleich auch noch als Passwort für die Wallet. Das Passwort sollte man dementsprechend auch ändern, da wir dieses nachher für den Autounlock brauchen und in der Service-Datei nicht unbedingt der Seed stehen sollte:
$ siac wallet init
[…]
$ siac wallet unlock
[…]
$ siac wallet change-password
[…]
Zudem braucht man noch eine Wallet-Adresse, welche man folgendermaßen erhält:
$ siac wallet address
Created new address: 9b8a3dd1f861cbc7f462a400fe0c94c2f563c7ad66ed293cb68a2cfbe8ea3f83273d031b84c8

Sicherheit ("Kollateral") hinterlegen

Ich habe es im Artikel bisher noch nicht erwähnt, aber man kann nicht "einfach so" einen Host betreiben, sondern muss dazu auch etwas investieren. Und zwar ist es so, dass man als Host gewisse Preise festlegt, und ein "Renter" kann diese dann akzeptieren und so Speicherplatz bei einem Host mieten. Als Sicherheit hinterlegt der Host dafür ein sogenanntes "Kollateral" in Siacoins. Wenn der Host nicht ausfällt, die Daten zuverlässig speichert und es keine Probleme gibt erhält man nach Ablauf der Vertragslaufzeit (in der Regel maximal 25 Wochen) die hinterlegten Coins zurück. Scheitert der Host dagegen daran die Daten zuverlässig zu speichern bekommt der Renter als Schadensausgleich die Sicherheit überwiesen. Das bringt zwar nicht die Daten zurück, soll aber dafür sorgen, dass sich Hosts nicht einfach Verträge unter die Nägel reißen die sie nicht halten können. Kurzum: So soll Betrug verhindert werden.

Bleibt natürlich die Frage, wie man denn jetzt an Siacoins herankommt. Vorzugsweise geschieht dies über eine Börse, welche direkt Siacoins zum Kauf anbietet. Ich selbst hatte aber noch ein paar Bitcoins übrig und habe mir meine Siacoins mittels ShapeShift geholt. Der Dienst erlaubt es unterschiedliche Kryptowährungen ganz ohne Registrierung einfach zu tauschen. Für größere Beträge nicht unbedingt der Weg den man gehen will, aber für Coins im Wert von ein paar hundert Euro kann man das schon einmal so machen. Um einen Host zu betreiben reichen ein paar tausend Siacoins aus.

Und diese müssen dann an die vorher generierte Wallet-Adresse überwiesen werden, damit der Host auch damit arbeiten kann. Da der ganze Vorgang gerne mal etwas dauert, sollte man das machen bevor man mit der Konfiguration des Hosts fertig ist und die Blockchain synchronisiert wurde.

Ordner hinzufügen

Das Verzeichnis bzw. der Ordner, der vom Host verwendet werden soll, kann wie bereits erwähnt frei gewählt werden und kann im Gegensatz zu den Daten des Sia Daemons auch problemlos auf einer herkömmlichen Festplatte liegen. Der Befehl dafür lautet siac host folder add [folder] [size] und sieht angewandt etwa so aus:
$ siac host folder add /media/sia/storage 800GB
Die Größe des verfügbaren Speicherplatzes beinflusst zudem auch den Host Score, dazu weiter unten aber mehr. Es ist zudem nicht nötig das Verzeichnis für die Daten redundant aufzubauen, da Daten innerhalb der Cloud sowieso schon mehrfach gespeichert werden. Allerdings: Sind die Daten weg, zahlt man als Host dafür in Form von Siacoins.

Und ganz wichtig: Darauf achten, dass der Daemon auch wirklich Schreibrechte in dem Verzeichnis hat.

Preise festlegen

Und jetzt zum kniffligeren Teil: Das festlegen der Preise. Ziel ist, dass der Host so gut wie möglich genutzt wird, und dabei möglichst viele Siacoins abwirft. Die Berechnung des Host Scores folgt dabei einem festen Schema. Folgende Faktoren wirken sich dabei auf den Score aus:
  • Sicherheit bzw. "Kollateral"
  • Vertrags, Down- und Uploadpreis
  • Verfügbarer Speicherplatz
  • Laufzeit bzw. "Alter" des Hosts
  • Uptime des Hosts
  • Verwendete Softwareversion
  • "Host interaction weight"
Lediglich die ersten beiden Punkte lassen sich direkt festlegen, der verfügbare Speicherplatz ergibt sich aus dem was man bereit ist anzubieten (>4TB wäre optimal), und die Laufzeit des Hosts aus der Zeit die verstrichen ist seit der Host das erste mal im Netzwerk gesehen wurde. Die Uptime hingegen aus dem Verhältnis zwischen der Zeit die er online und der Zeit die er offline war. Optimalerweise beträgt die Uptime mindestens 98%, was bereits ein sehr großzügiger Wert ist. Zudem sollte man eine möglichst aktuelle Version des Sia Daemons verwenden. Wer das ganze genauer erklärt haben will und die oben verlinkte, eher technische Dokumentation etwas zu trocken war, dem sei auch noch dieser Beitrag zu empfehlen.

Bleibt noch die Frage wie man jetzt die zwei oben genannten bzw. letztlich sieben Einstellungen am besten festlegen soll. Eine Übersicht über die aktuellen Durchschnittspreise bietet diese Webseite hier. Alternativ kann man sich auch die Einstellungen anderer Hosts im Netzwerk ansehen. Ziel ist es, die durchschnittlichen Preise knapp zu über- bzw. unterbieten, um einen möglichst hohen Score zu erreichen.

Da man die Preise sowieso regelmäßig anpassen sollte und man anfangs aufgrund der geringen Laufzeit mit einem hohen Score anfängt, sollten neue Hosts in den ersten paar Wochen die Preise massiv unterbieten und sich über den Verlauf von ca. 41 Tagen etwa dem Durchschnitt anpassen.

Hat man sich dann für entsprechende Preise entschieden kann man diese wie folgt festlegen (1SC = 1 Siacoin, 1KS = 1000 Siacoin):
$ siac host config collateral 500SC
$ siac host config collateralbudget 25KS
$ siac host config maxcollateral 3KS
$ siac host config mincontractprice 5SC
$ siac host config mindownloadbandwidthprice 25SC
$ siac host config minstorageprice 50SC
$ siac host config minuploadbandwidthprice 5SC
Die komplette Hostkonfiguration kann man sich anschließend via siac host -v ausgeben lassen.

Systemd Service schreiben

Da der ganze Spaß später vollautomatisch laufen soll empfiehlt es sich, einen Systemd Service zu schreiben. Mithilfe eines Redditnutzers kam dabei folgendes heraus:
[Unit]
Description=Sia Hosting
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/siad -M gctwh
ExecStop=/usr/bin/siac stop
WorkingDirectory=/home/sia
Restart=always
RestartSec=10
User=sia
Environment=SIA_WALLET_PASSWORD="HierDasWalletPasswortEinfügen"

[Install]
WantedBy=multi-user.target
Das ganze unter /etc/systemd/system/siad.service speichern und fertig. Gestartet wird der Service allerdings erst später, dazu weiter unten mehr.

Ports freigeben

Da man einen Host auch von zu Hause betreiben kann oder man eine Firewall einsetzt, die bestimmte Ports blockiert, noch als Hinweis: Die Ports 9981 und 9982 müssen von außen erreichbar sein! Wer also hinter einem Router sitzt sollte ganz schnell ins Webinterface gehen und die Ports freigeben.

Los geht's

Nachdem nun alles eingerichtet ist, und bereits ein paar tausend Siacoins in der neu erstellten Wallet liegen, gibt es nur noch ein paar Dinge zu tun. Zuerst sollte man warten, bis die Blockchain zu 100% synchronisiert wurde. Danach stoppt man den Sia Daemon:
$ siac stop
Um ihn anschließend als den vorher angelegten Systemd-Service neu zu starten:
# systemctl daemon-reload
# systemctl start siad.service
Ob der Service nun auch tatsächlich läuft lässt sich via journalctl ermitteln. Dabei sollte die Ausgabe ähnlich wie bei mir aussehen, und ganz wichtig: Der Wallet auto-unlock muss funktionieren! Ansonsten ist das Hosting nicht möglich.
# journalctl -u siad.service
siad[30300]: Loading...
siad[30300]: (0/5) Loading siad...
siad[30300]: (1/5) Loading gateway...
siad[30300]: (2/5) Loading consensus...
siad[30300]: (3/5) Loading transaction pool...
siad[30300]: (4/5) Loading wallet...
siad[30300]: (5/5) Loading host...
siad[30300]: Sia Wallet Password found, attempting to auto-unlock wallet
siad[30300]: Auto-unlock successful.
siad[30300]: Finished loading in 2.12344371 seconds
Hat alles geklappt aktiviert man den Service noch:
# systemctl enable siad.service
Letztlich muss man den Host nur noch im Netzwerk bekannt machen:
$ siac host announce
Voilà, der Host ist online. Bis erste Verträge abgeschlossen werden dauert es allerdings ein paar Tage bis – maximal – wenige Wochen.

Host überwachen

Da die Software wie bereits geschrieben noch nicht wirklich ausgereift ist, sollte man den Daemon regelmäßig auf Funktionsfähigkeit prüfen. Dabei gibt es mehrere Möglichkeiten:
  • siac
    Zeigt an, ob der Daemon mit dem Netzwerk synchronisiert ist, inklusive dem letzten Block und der aktuelle Blockhöhe
  • siac wallet
    Zeigt Daten über die Wallet an. Wichtig ist, dass die Wallet unlocked ist!
  • siac host -v
    Zeigt Daten über den Host an
Des Weiteren kann man zur Fehlersuche, sollten welche auftreten, auch die Logdateien (welche sich unterhalb des Homeverzeichnisses befinden) einsehen. Insbesondere der host.log ist hierbei interessant.

Was, wenn man den Host nicht mehr betreiben will?

Sollte man den Host nicht mehr betreiben wollen gibt es mehrere Möglichkeiten. Richtig wäre es, weitere Verträge zu unterbinden und die noch laufenden Verträge auslaufen zu lassen:
$ siac host config acceptingcontracts false
Danach ~25 Wochen warten und alle noch laufenden Verträge sollten ausgelaufen sein.

Die andere Möglichkeit ist, den Host einfach stillzulegen, und die Daten zu löschen. Theoretisch sollte das für die Renter kein Problem darstellen, weil Daten mehrfach redundant gesichert sind. Als Host verliert man dabei das Locked Collateral, welches als Sicherheit hinterlegt wurde.

Fazit

Wie gesagt ist das ganze noch in einem relativ frühem Stadium. Die Technik dahinter ist absolut genial, die Umsetzung zur Zeit noch etwas rudimentär. Als Backend für die eigene Cloud kann man das ganze schon ganz gut verwenden, und das zu einem Bruchteil der Kosten die man für andere Anbieter hinlegt. Für alles andere muss man wohl noch etwas abwarten. Es gibt allerdings eine öffentlich einsehbare Roadmap.

Und für alle die sich fragen ob sich das aus finanzieller Sicht lohnt: Nein, tut es nicht. Der Verdienst sind aktuell etwa 1,80€/TB im Monat. Aber es geht ja auch nicht darum Geld zu schöpfen, sondern ein dezentrales Cloud Backend aufzubauen. Und dafür ist das wie gesagt schon ein ziemlich geniales Stück Software.

26. Dezember 2017

Ein Kunde wollte mir kürzlich bei meiner Arbeit über die Schulter schauen, um einen Serverfehler und dessen Behebung live nachvollziehen zu können. Mein erster Gedanke ging in Richtung TeamViewer und Co. Ich könnte doch meinen Desktop einfach für ihn freigeben - oder gibt es eine bessere Alternative? Bei meiner Recherche habe ich ein paar Wege gefunden, meine Kommandozeile ohne TeamViewer freizugeben.

Freigabe mit Screen

GNU Screen dürfte vielen Linux-Administratoren bekannt sein. Es wird häufig genutzt, um länger andauernde Prozesse im Terminal außerhalb einer laufenden SSH-Sitzung weiter laufen zu lassen. Gewollte oder ungewollte Verbindungsabbrüche beenden die Ausführung eines CLI-Tools im Vordergrund nicht, denn die Sitzung ist vom SSH-Login entkoppelt. Der Benutzer kann sich jederzeit wieder zu seiner virtuellen Konsolensitzung verbinden oder sich von ihr trennen.

Aber auch zum Teilen von Sitzungen eignet sich Screen. Ich gehe davon aus, dass beide Teilnehmer sich mit demselben Benutzer via SSH zum Server verbinden. Nun soll eine Screen-Terminalsitzung erstellt und mit dem zweiten Teilnehmer geteilt werden:

  1. User 1 erstellt eine neue Screen-Sitzung:
screen -S sharedsession
  1. User 2 verbindet sich zu dieser Sitzung:
screen -x sharedsession

Beide Benutzer können sich via CTRL-A + D jederzeit wieder von der Session loslösen. Ein “exit” beendet die Sitzung auf beiden Seiten. Wird die SSH-Verbindung zum Server über verschiedene Benutzer hergestellt, müssen weitere Einstellunen gesetzt werden. Das Vorgehen ist am Ende dieser Seite erklärt: http://wiki.networksecuritytoolkit.org/index.php/HowTo_Share_A_Terminal_Session_Using_Screen

Leider unterstützt Screen keinen Readonly-Modus - Beide Teilnehmer sind gleichberechtigt und können Kommandos ausführen.

Freigabe mit Tmux

Auch mit Tmux ist eine Freigabe schnell eingerichtet:

  1. User 1 erstellt eine tmux-Sitzung:
tmux new-session -s sharedsession
  1. User 2 schaltet sich auf:
 tmux attach-session -t sharedsession

Wieder sind beide Benutzer gleichberechtigt. Benutzer 2 kann sich allerdings auch im “Read only”-Modus zur Sitzung verbinden. Er kann dann keine Eingaben vornehmen:

tmux attach-session -r -t sharedsession

Via CTRL-B + D kann sich jeder der Teilnehmer von der Sitzung loslösen. Ein “exit” beendet die Sitzung.

Freigabe via SSH und Webinterface mit Tmate

Der meiner Meinung nach schönste Weg zur Freigabe führt über das Tool “tmate”. Es ist eine Ableitung von tmux und erlaubt u.A. die Freigabe über eine HTML5-Webseite: Der Eingeladene bekommt einen Link, über den er entweder aktiv an der Sitzung teilnehmen kann oder nur passiv zusehen kann. Neben der Website kann auch via SSH zugegriffen werden. Nachteil: tmate ist nicht in allen Standardrepositories der gängigen Linuxdistributionen enthalten. Notfalls ist das Tool aber auch schnell selbst kompiliert. Die notwendigen Schritte sind auf der tmate-Website dokumentiert: https://tmate.io/

Tmate Screenshot

  1. User 1 erstellt eine tmate-Sitzung (entweder lokal oder auf dem Server):
tmate
  1. User 1 lässt sich die Links zur Sitzung ausgeben und gibt den gewünschten Link weiter
tmate show-messages
  1. User 2 öffnet den Link zur Website oder verbindet sich via SSH.

“Read only”-Modus, Normaler modus, HTML5-Website und SSH-Zugriff sind beliebig kombinierbar. So sollte für jeden Anwendungszweck etwas dabei sein.

LXD und Linuxcontainer sind eine meiner Lieblingstechnologien in Ubuntu. In wenigen Sekunden kann man einen neue virtuelle Maschine in einem Container starten. Wir machen davon in unserer Schule stark Gebrauch. Fast alle Webanwendungen laufen in einem solchen Container. So haben wir die einzelnen Anwendungen besser getrennt. Weiterhin kann man sehr schnell einen Snapshot eines Containers machen und vieles mehr. Wenn man nun diese verschiedenen Webseiten öffentlich zugänglich machen möchte, gibt es ein Problem, denn i.d.R. hat man nur eine öffentliche IP zur Verfügung (fest bzw. dynamisch). Eine Lösung wäre, dass die Webanwendungen auf verschiedenen Ports laufen, aber das ist nicht unbedingt benutzerfreundlich. In diesem Beitrag möchte ich zeigen, wie man mehrere Webseiten mit Nginx und HAProxy mit LXD hosten kann.

Voraussetzungen

Wir brauchen:

  • einen Server (ab Ubuntu 16.04) mit öffentlicher IP
  • Zugang mit Rootrechten (root / sudo)
  • eine Domain und Subdomain, die mit je einem DNS A Eintrag auf die öffentliche IP des Servers zeigen

Schritt 1 – Benutzer der lxd – Gruppe hinzufügen

Damit man mit einem Nicht-Root-Benutzer lxd verwalten kann, müssen wir zuerst den Benutzer der Gruppe hinzufügen:

sudo usermod --append --groups lxd username

Damit die Änderungen wirksam werden, müssen wir uns einmal aus- und wieder einloggen!

Schritt 2 – lxd konfigurieren

lxd ist in Ubuntu 16.04 vorinstalliert. Falls nicht, können wir es mit

sudo snap install lxd

nachholen. In LXD gibt es verschiedene Möglichkeiten, wie und wo die Container ihren Speicherplatz haben. Man kann verschiedene Dateisysteme auswählen und entscheiden, ob die Container in einer Datei oder extra Partition bzw. Festplatte gespeichert werden. In diesem Tutorial verwenden wir ZFS für Linux mit einen sogenannten „loop device“. Das installieren wir mit

sudo apt-get install zfsutils-linux

Nun können wir mit der Einrichtung von lxd beginnen:

sudo lxd init

Es werden verschiedene Fragen gestellt, die man wie folgt beantworten kann (Achtung: Die Netzwerkbrücke nur für IPv4 aktivieren! Das Subnet kann frei gewählt werden)

Name of the storage backend to use (dir or zfs) [default=zfs]: zfs
Create a new ZFS pool (yes/no) [default=yes]? <span style="color: yes
Name of the new ZFS pool [default=lxd]: lxd
Would you like to use an existing block device (yes/no) [default=no]? no
Size in GB of the new loop device (1GB minimum) [default=15]: 15
Would you like LXD to be available over the network (yes/no) [default=no]? no
Do you want to configure the LXD bridge (yes/no) [default=yes]? yes
LXD has been successfully configured.

Die Netzwerkbrücke ist notwendig, damit jeder Container seine eigene IP bekommt und Zugang zum Internet hat.

lxd init

So, jetzt ist alles eingerichtet und wir können unsere ersten Container erstellen!

Schritt 3 – Container erstellen

Um unsere Container zu verwalten, brauchen wir den lxc Befehl. Diese feine Programm ist sehr einfach zu verwenden und dabei sehr mächtig. Zuerst wollen wir uns mal alle Container anzeigen lassen. Das geht mit lxc list:

$ lxc list
+------+-------+------+------+------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+-------+------+------+------+-----------+

Es werden keine Container angezeigt, weil wir ja noch keine erstellt haben.

Für unser Beispiel brauchen wir drei Container: einen für HAProxy und 2 Webserver mit Nginx (oder Apache, wenn das jemand bevorzugt).

Wir werden den Befehl lxc launch verwenden, um einen Ubuntu 16.04 (ubuntu:x) Container namens web1 zu erstellen und zu starten. Das x in ubuntu:x ist eine Abkürzung für den ersten Buchstaben von Xenial, der Codename von Ubuntu 16.04. ubuntu: ist der Bezeichner für das vorkonfigurierte Repository von LXD-Images.

Unsere drei Container können wir also mit folgenden Befehlen erstellen:

$ lxc launch ubuntu:x web1
$ lxc launch ubuntu:x web2
$ lxc launch ubuntu:x haproxy

Wenn man den ersten Container erstellt, wird zuerst das Image heruntergeladen, dass etwas dauern kann. Die anderen beiden Container werden dann sehr schnell erstellt.

Nun können wir mit lxc list schauen, ob unsere Container auch alle da sind:

$ lxc list
+---------+---------+-----------------------+------+------------+-----------+
|  NAME   |  STATE  |         IPV4          | IPV6 |    TYPE    | SNAPSHOTS |
+---------+---------+-----------------------+------+------------+-----------+
| haproxy | RUNNING | 10.10.10.10 (eth0)    |      | PERSISTENT | 0         |
+---------+---------+-----------------------+------+------------+-----------+
| web1    | RUNNING | 10.10.10.100 (eth0)   |      | PERSISTENT | 0         |
+---------+---------+-----------------------+------+------------+-----------+
| web2    | RUNNING | 10.10.10.200 (eth0)   |      | PERSISTENT | 0         |
+---------+---------+-----------------------+------+------------+-----------+

In dieser Liste sehen wir zuerste den Namen des Containers und seinen Status (RUNNING, STOPPED). Dann die IP Adresse(n) (die hier exemplarisch ist) und der Typ. Zum Schlusso noch die Anzahl der Snapshots / Sicherungspunkte. Die IP-Adressen werden wir gleich brauchen (am besten notieren).

Schritt 4 – Nginx-Container einrichten

Um eine Verbindung zum Container herzustellen, verwenden wir den Befehl lxc exec, der den Namen des Containers und die auszuführenden Befehle enthält.

$ lxc exec web1 -- sudo --login --user ubuntu

Die Zeichenkette -- gibt an, dass die Befehlsparameter für lxc dort zu Ende sind, und der Rest der Zeile wird als der auszuführende Befehl innerhalb des Containers übergeben. Der Befehl ist sudo --login --user ubuntu, der eine Login-Shell für das vorkonfigurierte Konto ubuntu im Container bereitstellt.

Hinweis: Wenn man eine Verbindung zu den Containern als root herstellen müssen, kann man stattdessen den Befehl lxc exec web1 -- /bin/bash verwenden

Nun sind wir in der Konsole des Containers (ubuntu@web1) und können nginx installieren:

$ sudo apt update
$ sudo apt install nginx

Damit wir später besser erkennen auf welchem Webserver wir uns gerade befinden, ändern wir die Standard-Seite des Webservers:

$ sudo nano /var/www/html/index.nginx-debian.html

Für die Änderung bieten sich der title-Tag und die erste Überschrift (h1) an:

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx on LXD container web1!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx on LXD container web1!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

Nachdem wir die Datei an den beiden Stellen geändert haben, können wir mit Strg+X und Y die Datei speichern. Mit Strg+D oder logout verlassen wir wieder den Container.

Zurück auf dem Server testen wir, ob der Webserver auch ordnungsgemäß funktioniert. Mit dem folgenden Befehl sollten wir die Willkommenseite sehen, die wir gerade eben angepasst haben:

$ curl http://10.10.10.100/

Wenn alles geklappt hat, kann der zweite Container nach dem gleichen Muster eingerichtet werden.

Schritt 5 – HAProxy konfigurieren

Jetzt, da alle beiden Webserver-Container eingerichtet sind, fehlt nur noch der Reverse Proxy. Er ist dafür verantwortlich, dass die Anfragen von außen vom richtigen Container verarbeitet werden. HAProxy ist ein sehr leistungsstarker Proxy, der auch von Gihub oder Twitter verwendet wird. Die Möglichkeiten sind auch hier wieder sehr vielfältig. Wir werden deshalb nur ein sehr einfaches Setup machen.

Zuerst loggen wir uns wieder in den Container ein und installieren HAProxy:

$ lxc exec haproxy -- sudo --login --user ubuntu
$ sudo apt-get update
$ sudo apt-get install haproxy

Nun konfigurieren wir HAProxy. Dazu öffnen wir die Datei /etc/haproxy/haproxy.conf mit einem Texteditor:

$ sudo nano /etc/haproxy/haproxy.cfg

Im Abschnitt defaults fügen wir die Optionen forwardfor und http-server-close hinzu.

global
...
defaults
    log global
    mode    http
    option  httplog
    option  dontlognull
    <span class="highlight">option   forwardfor</span>
    <span class="highlight">option   http-server-close</span>
    timeout connect 5000
    timeout client  50000
    timeout server  50000
...

Frontends

Als nächstes konfigurieren wir das Frontend so, dass es auf unsere beiden Backend-Container zeigt. Wir fügen einen neuen Frontend-Abschnitt mit dem Namen wwww_frontend hinzu, der so aussieht:

frontend www_frontend
    bind *:80 # Port 80 (www) an den Container binden

    # Es gibt eine Übereinstimmung sobald das HTTP Host: field einen der Hostnamen enthält (nach dem '-i').
    acl host_web1 hdr(host) -i example.com www.example.com
    acl host_web2 hdr(host) -i web2.example.com

    # Leite die Verbindung zum richtigen Servercluster um, je nach Übereinstimmung.
    use_backend web1_cluster if host_web1
    use_backend web2_cluster if host_web2

Die acl-Befehle stimmen mit den Hostnamen der Webserver überein und leiten die Anfragen an den entsprechenden Backend-Abschnitt weiter.

Backends

Dann definieren wir zwei neue Backend-Abschnitte, eine für jeden Webserver, und nennen sie web1_cluster bzw. web2_cluster. Wir fügen den folgenden Code zur Datei hinzu, um die Backends zu definieren:

backend web1_cluster
    balance leastconn
    # Wir setzen den X-Client-IP HTTP-Header. Dies ist nützlich, wenn wir wollen, dass der Webserver die tatsächliche Client-IP kennt.
    http-request set-header X-Client-IP %[src]
    # Dieses Backend, hier "web1" genannt, verweist auf den Container "web1.lxd" (Hostname).
    server web1 web1.lxd:80 check

backend web2_cluster
    balance leastconn
    http-request set-header X-Client-IP %[src]
    server web2 web2.lxd:80 check

Die balance-Option bezeichnet die Load-Balancing-Strategie. In diesem Fall entscheiden wir uns für die geringste Anzahl von Verbindungen. Die Option http-request setzt einen HTTP-Header mit der realen Web-Client-IP. Wenn wir diesen Header nicht setzen würden, würde der Webserver die HAProxy-IP-Adresse als Quell-IP für alle Verbindungen aufzeichnen, was die Analyse der Herkunft des Datenverkehrs erschwert. Die Server-Option spezifiziert einen beliebigen Namen für den Server (web1), gefolgt von Hostname und Port des Servers.

LXD stellt einen DNS-Server für die Container zur Verfügung, so dass web1.lxd sich auf die mit dem web1-Container verknüpfte IP auflöst. Die anderen Container haben eigene Hostnamen, wie z.B. web2.lxd und haproxy.lxd.

Der check-Parameter weist HAPRoxy an, auf dem Webserver Überprüfungen durchzuführen, um sicherzustellen, dass er verfügbar ist.

Um zu testen, ob die Konfiguration gültig ist, führen Sie den folgenden Befehl aus:

$ haproxy -f /etc/haproxy/haproxy.cfg -c
Configuration file is valid

Nun müssen wir noch den HAProxy neu laden:

$ sudo systemctl reload haproxy

Damit sind wir im HAProxy-Container fertig und können uns wieder mit Strg+D bzw. logout abmelden.

Wir haben HAProxy so konfiguriert, dass es als Reverse-Proxy fungiert, der alle Verbindungen, die es auf Port 80 empfängt, an den entsprechenden Webserver in den beiden anderen Containern weiterleitet. Testen wir, ob es Haproxy tatsächlich gelingt, die Anfragen an den richtigen Web-Container weiterzuleiten. Dazu führen wir den folgenden Befehl aus:

$ curl --verbose --header 'Host: web2.example.com' http://10.10.10.10

Dies stellt eine Anfrage an HAProxy und setzt einen HTTP-Host-Header, den HAProxy verwenden soll, um die Verbindung zum entsprechenden Webserver umzuleiten.

Als Ausgabe sollten wir nun die Standarseite des Nginx-Servers vom web2-Container erhalten!

HAProxy hat die Anfrage richtig verstanden und an den web2-Container weitergeleitet. Dort zeigt der Webserver der Standard-Indexseite an, die wir zuvor bearbeitet haben, und zeigt den Text auf dem LXD-Container web2 an.

Schritt 6 – Eingehende Verbindungen an den HAProxy weiterleiten

Zum Schluss müssen wir noch dafür sorgen, dass alle externen Anfragen auf Port 80 an HAProxy weitergeleitet werden, damit die Welt auf unsere Websites zugreifen kann.

HAProxy haben wir in einem Container installiert und ist standardmäßig aus dem Internet nicht erreichbar. Um dies zu lösen, erstellen wir eine iptables-Regel, um Verbindungen weiterzuleiten.

Der Befehl iptables benötigt zwei IP-Adressen: die öffentliche IP-Adresse des Servers (server_ip) und die private IP-Adresse des Haproxy-Containers (haproxy_ip), die man mit dem Befehl lxc list erhält.

Führen Sie diesen Befehl aus, um die Regel zu erstellen:

$ sudo iptables -t nat -I PREROUTING -i eth0 -p TCP -d server_ip/32 --dport 80 -j DNAT --to-destination haproxy_ip:80

Um diesen iptables-Befehl zu speichern, damit er nach einem Neustart erneut angewendet wird, installieren wir das Paket iptables-persistent:

$ sudo apt-get install iptables-persistent

Bei der Installation des Pakets werden wir aufgefordert, die aktuellen iptables-Regeln zu speichern. Akzeptieren und speichern wir alle aktuellen iptables-Regeln.

Schritt 7 – Zugriff von außen testen

Wenn wir die beiden Domains (DNS A Eintrag) eingerichtet haben, sollten wir in der Lage sein, sich mit Ihrem Webbrowser mit jeder Website zu verbinden. Alternativ und nur zum lokalem Test können wir auch einen Eintrag in der /etc/hosts Datei machen:

server_IP example.com
server_IP web2.example.com

Um zu testen, ob die beiden Webserver tatsächlich über das Internet erreichbar sind, greifen wir von einem lokalen Computer aus mit einem Browser auf unsere beiden Domains zu (example.com bzw. web2.example.com). In beiden Fällen sollten wir nun die entsprechende Standardseite des Webservers sehen!

Fazit

Wir haben zwei Websites eingerichtet, jede in einem eigenen Container, wobei HAProxy den Datenverkehr steuert. Diesen Prozess können wir wiederholen, um viele weitere Websites zu konfigurieren, die jeweils auf einen eigenen Container beschränkt sind.

So könnten wir z.B. auch MySQL in einem neuen Container hinzufügen und dann ein CMS wie WordPress installieren, um eine Website zu starten. Weiterhin könnten wir  diese Vorgehensweise auch verwenden, um ältere Softwareversionen zu unterstützen. Zum Beispiel, wenn eine Installation eines CMS eine ältere Version von Software wie PHP5 erfordert, dann können wir Ubuntu 14.04 in den Container installieren (lxc launch ubuntu:t), anstatt zu versuchen, die Paketmanager-Versionen, die auf Ubuntu 16.04 verfügbar sind, herabzusetzen.

Schließlich bietet LXD die Möglichkeit, Snapshots des vollen Zustands von Containern zu machen, was die Erstellung von Backups und das Zurückrollen von Containern zu einem späteren Zeitpunkt vereinfacht. Darüber hinaus, wenn wir LXD auf zwei verschiedenen Servern installieren, dann ist es möglich, diese miteinander zu verbinden und Container zwischen Servern über das Internet zu migrieren. Doch darüber berichte ich vielleicht ein andern mal…

Update: Als nächsten Schritt sollte man das Setup noch mit SSL sicherer machen.

Setzt du LXD ein und welche Erfahrungen hast du bisher gemacht?

4 Kommentare

Der Beitrag Wie man mehrere Webseiten mit Nginx und HAProxy mit LXD hosten kann erschien zuerst auf .:zefanjas:..

Seit gestern ist es soweit. Ich besitze eine eigne Mastodon Instanz. Lange war ich auf der social.tchncs.de Instanz unterwegs, aber um auch mich mal wieder ein wenig weiterzubilden, habe ich dann gestern im Docker eine eigene Instanz angelegt.

Grunsätzlich unterscheidet sie sich nicht von anderen. Auch meine Instanz wird auf einem deutschen Server betrieben, mit 100% Grüner Energie. Aktuell bin ich der einzige Nutzer auf dieser Instanz, aber es würde mich freuen, wenn noch einige folgen würden:

tootme.de

Oder verbindet euch doch einfach mal mit meinem Profil:

@beli3ver@tootme.de

Danke.

25. Dezember 2017

Wer sich in letzter Zeit ein Notebook mit dem WLAN-Chip RTL8723de von Realtek gekauft hat, der wird in die Röhre geschaut haben, sobald er versucht hat diesen unter Linux zum laufen zu bekommen. Nun gibt es allerdings seit einigen Tagen einen funktionsfähigen Treiber für Linux für eben diesen Chipsatz.

Ein HP-Notebook mit dem entsprechendem WLAN-Chip von Reaktek

Um diesen Treiber zu nutzen ist ein wenig Handarbeit nötig, da der Treiber noch nicht im Linux-Kernel vorhanden ist. Im ersten Schritt muss der Quelltext auf dem betreffenden Rechner kopiert werden. Dazu wird ein Terminal geöffnet und dort per Git das Repository mit dem Treiber bezogen:

git clone https://github.com/smlinux/rtl8723de.git

Anschließend wechseln wir in den Ordner und kompilieren den Treiber:

cd rtl8723de
make

Nun muss der Treiber nur noch installiert werden:

sudo make install

Nach einem Neustart ist der Treiber einsatzbereit und das WLAN kann genutzt werden.

23. Dezember 2017

Eigentlich sollte es ganz einfach sein: Hat man ein brauchbares WLAN Netzwerk in Reichweite → WLAN an. Hat man kein brauchbares WLAN Netzwerk in Reichweite → WLAN aus. Leider ist es nicht ganz so einfach. Auch, weil selbst dann, wenn man WLAN deaktiviert, noch immer nach Netzwerken gesucht wird.

Glücklicherweise lässt sich das alles ändern, auch wenn die entsprechenden Optionen (wohl absichtlich) nicht auf den ersten Blick erkennbar sind. Zudem lässt sich dank entsprechender App das WLAN in Zukunft auch automatisch ein- bzw. ausschalten, was einen enormen Komfortgewinn bringt (ja, wirklich).

Schritt 1: WLAN richtig konfigurieren

Hinweis:
Gilt für Android Version 6 oder höher. Bei vorherigen Versionen sind die Einstellungen eventuell anderweitig versteckt (aber hey, dafür gibt es ja eine Suchfunktion :D ).
Dazu die Einstellungen öffnen → Standort → Rechts oben auf die drei Punkte → Suche. Hier die WLAN-Suche deaktivieren. Wer möchte kann auch die Bluetooth-Suche abschalten.

Zudem kann man noch WLAN zur Standortbestimmung komplett deaktivieren. Dazu wiederum die Einstellungen öffnen → Standort. Dann, sofern noch nicht geschehen, die Standortbestimmung aktivieren. Erst dann kann man unter Modus → Nur Gerät selektieren. Danach kann die Standortbestimmung wieder deaktiviert werden.

Des Weiteren lässt sich WLAN im Ruhemodus automatisch deaktivieren. Die Option findet sich unter Einstellungen → WLAN → Auf das Zahnrad klicken → WLAN im Ruhemodus aktiviert lassen. Hierbei gibt es die drei Optionen "Immer", "Nur wenn angeschlossen" und "Nie". Hierbei sollte man sich aufgrund des eigenen Nutzungsverhaltens entscheiden.

Schritt 2: WLAN-Automatik einrichten

Da Android von Haus aus keine entsprechende Funktion bietet ist hierfür eine App nötig. Ich habe mich nach etwas Recherche für den Smarter Wi-Fi Manager entschieden. Dieser kann entweder via Google Play Store oder F-Droid installiert werden.

Nach der Installation muss die App noch konfiguriert werden. Ich persönlich will keine GPS-basierte Abschaltung, sondern nutze die Tower-basierte Automatik. D.h. beim ersten Start wählt man bei Location Management Type entsprechend Towers aus.

Unter Gespeicherte Netzwerke all die Netzwerke selektieren, welche die Automatik nutzen sollen. Unter Ignorierte Netzwerke kann man noch all jene selektieren, welche ignoriert werden sollen. Letzteres ist aber nicht unbedingt nötig.

Unter Einstellungen → Sendemasten kontinuierlich orten zudem noch den Haken herausnehmen. Es ist nicht nötig das Smartphone unnötig wach zu halten.

Das war's dann auch schon. In Zukunft schaltet sich das WLAN, je nach Sendemast welcher gerade in der Nähe ist, automatisch ein- oder aus.

22. Dezember 2017

Seit vielen Jahren habe ich einen Diaspora-Account, und seit einiger Zeit sogar eine eigene Friendica-Instanz. Im letzten Blogpost hatte ich beschrieben, wie man sich einen Friendica-Account zulegt und Kontakte hinzufügt, siehe hier. Um nun das Fediversum etwas interessanter zu gestalten, haben manche User RSS- und Feedbots konfiguriert, so dass “angesagte” Inhalte federiert werden. Hier gibt es zB auch Instagram- und Twitter-Accounts, die ein bestimmtes Thema bedienen (“Webfail”, “Ruhrgebiet”, “History”), und dazu in einem bestimmten Takt passende Bilder posten.

Seit vielen Jahren habe ich einen Diaspora-Account, und seit einiger Zeit sogar eine eigene Friendica-Instanz. Im letzten Blogpost hatte ich beschrieben, wie man sich einen Friendica-Account zulegt und Kontakte hinzufügt, siehe hier.

Um nun das Fediversum etwas interessanter zu gestalten, haben manche User RSS- und Feedbots konfiguriert, so dass “angesagte” Inhalte federiert werden. Hier gibt es zB auch Instagram- und Twitter-Accounts, die ein bestimmtes Thema bedienen (“Webfail”, “Ruhrgebiet”, “History”), und dazu in einem bestimmten Takt passende Bilder posten.

Habt ihr auch einen Ordner voller “lustiger Bildchen” und Memes? Habt ihr schonmal überlegt, diese Bilder über einen eigenen Account zu federieren?

Ich habe zwei Python-Scripte geschrieben, die so etwas ähnlich tun: aus einem definierten Ordner werden die enthaltenen Bilder nach/auf Diaspora, Friendica oder GNUsocial gepostet. Falls ihr also einen Ordner voller themenbezogener Bilder habt, und diese gerne “botmäßig” federieren möchtet, schaut euch die Scripte an:

Die Scripte feuern jeweils 1 Bild “pro Runde”, so dass ihr den gewünschten Takt per Cronjob festlegen könnt.

Seit vielen Jahren habe ich einen Diaspora-Account, und seit einiger Zeit sogar eine eigene Friendica-Instanz. Im letzten Blogpost hatte ich beschrieben, wie man sich einen Friendica-Account zulegt und Kontakte hinzufügt, siehe hier.

Um nun das Fediversum etwas interessanter zu gestalten, haben manche User RSS- und Feedbots konfiguriert, so dass „angesagte“ Inhalte federiert werden. Hier gibt es zB auch Instagram- und Twitter-Accounts, die ein bestimmtes Thema bedienen („Webfail“, „Ruhrgebiet“, „History“), und dazu in einem bestimmten Takt passende Bilder posten.

Habt ihr auch einen Ordner voller „lustiger Bildchen“ und Memes? Habt ihr schonmal überlegt, diese Bilder über einen eigenen Account zu federieren?

Ich habe zwei Python-Scripte geschrieben, die so etwas ähnlich tun: aus einem definierten Ordner werden die enthaltenen Bilder nach/auf Diaspora, Friendica oder GNUsocial gepostet.
Falls ihr also einen Ordner voller themenbezogener Bilder habt, und diese gerne „botmäßig“ federieren möchtet, schaut euch die Scripte an:

Die Scripte feuern jeweils 1 Bild „pro Runde“, so dass ihr den gewünschten Takt per Cronjob festlegen könnt.

share this