Bootbaren Windows-Stick auf Linux erstellen

Als Linux-User ist man normalerweise verwöhnt, dass man Images, die man auf einem USB-Stick bootbar aufspielen will, einfach mit dd raufschreibt. Leider funktioniert das bei Windows meist nicht so einfach, weil man einen Master Boot Record braucht. Hier nun eine mögliche Lösung, wie man es trotzdem schaffen kann.

Hinweis: solltet ihr leicht wo Zugriff auf einen Windows-Rechner haben, nehmt diesen und installiert euch einfach Rufus. Geht meistens schneller.

Ansonsten hier die Anleitung unter Linux:

Zuerst lädt man sich ms-sys von Sourceforge herunter und kompiliert sich dieses (notwendig dafür sind die build-essential). Das Kompilieren selbst geht ganz einfach mit make && sudo make install.

Danach legt man auf dem USB-Stick eine NTFS-Partition an, z.B. mit fdisk:

sudo fdisk /dev/sdb
n
p
ENTER
ENTER
ENTER
t
7
w
sudo mkfs.ntfs -f /dev/sdb1

Wenn das erledigt ist mountet man sich das ISO-File und die neue Partition und kopiert den Inhalt der ISO-Datei auf die Platte:

sudo mount -t udf -o loop,ro,unhide WIN10.iso
sudo copy -avr /ISO_MOUNTPOINT /USB_MOUNTPOINT

Wenn das erledigt ist, kann man mit folgendem Befehl und dem Tool ms-sys den Master Boot Record anlegen:

sudo ms-sys -7 /dev/sdb
sudo sync
sudo unmount /USB_MOUNTPOINT

Jetzt kann man auch schon von dem Stick booten.

Links Und CreDit

https://www.cyberciti.biz/faq/create-a-bootable-windows-10-usb-in-linux/
https://sourceforge.net/projects/ms-sys/

Raspberry Pi als 3G/4G WLAN-Router mit OpenVPN-Verbindung

Vor einiger Zeit habe ich einmal versucht, einen Raspberry Pi 3 als 3G/4G WLAN-Router mit OpenVPN zu konfigurieren. Da ich damals keinen Artikel ausformuliert habe, hier meine nützlichen Links und mein damaliges Resümee:

  • Default-Routen können die Geduld auf die Probe stellen
  • wvdial funktioniert mit einem ZTE MF180 nicht so wirklich, NetworkManager funktioniert hier besser
  • NetworkManager kann auch ohne GUI konfiguriert werden, das funktioniert dann auch
  • Wenn man die Ethernet-Schnittstelle nicht verwenden möchte, sollte man sie auch nicht konfiguieren, (Default Routen sind eine Geduldsprobe).
  • Ein OpenVPN-Client mit der Option redirect-gateway def1 führt dazu, dass der gesamte Traffic über das VPN läuft.
Links und Credit

https://vpn-anbieter-vergleich-test.de/anleitung-raspberrypi-vpn-router/
https://hamy.io/post/0003/optimizing-openvpn-throughput/
https://thepi.io/how-to-use-your-raspberry-pi-as-a-vpn-router/
https://gist.github.com/superjamie/ac55b6d2c080582a3e64
https://stackoverflow.com/questions/43001223/how-to-ensure-that-there-is-a-delay-before-a-service-is-started-in-systemd
https://raspberrypi.stackexchange.com/questions/69866/wlan0-could-not-connect-to-kernel-driver
https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md
https://www.raspberrypi.org/forums/viewtopic.php?t=247225
https://filippobuletto.github.io/home-router-lte/#internet-connection
https://unix.stackexchange.com/questions/113975/configure-gsm-connection-using-nmcli/114006#114006
https://fedoraproject.org/wiki/Networking/CLI
https://askubuntu.com/questions/537406/configure-gsm-connection-using-shell-nmcli
https://www.tecmint.com/setup-linux-as-router/
https://unix.stackexchange.com/questions/365380/how-to-persist-ip-rule-and-route-whenever-server-rebooted
https://www.cyberciti.biz/faq/howto-linux-configuring-default-route-with-ipcommand/
https://www.digitalocean.com/community/tutorials/how-to-use-iproute2-tools-to-manage-network-configuration-on-a-linux-vpshttps://www.digitalocean.com/community/tutorials/how-to-use-iproute2-tools-to-manage-network-configuration-on-a-linux-vps
https://wiki.linuxfoundation.org/networking/iproute2
https://unix.stackexchange.com/questions/198554/3g-connection-with-wvdial-gets-no-ip-exits-with-code-16
https://www.raspberry-pi-geek.de/ausgaben/rpg/2015/06/der-raspberry-pi-als-3g-hotspot/2/

Alte VHS-Kassetten digitalisieren

Ich habe viele Kindheitsvideos von mir auf VHS zuhause, welche ich gerne digitalisieren möchte. Mit einem günstigen „Video-Grabber“ und einem alten VHS-Player lässt sich das unter Linux problemlos durchführen.

Mein Videograbber hat einen STK1160-Chip, welcher schon einen Treiber im Linux-Kernel hat. Einfach den Stick anstecken, und das Videogerät wird als v4l2-Gerät erkannt und wird unter /dev/videoX gemountet (in meinem Fall als video4). Auch eine Sound-Karte stellt das Gerät zur Vefügung.

Nach zahlreichen Versuchen mit verschiedensten Software-Lösungen (VLC-Player unter Ubuntu ist eine einzige Katastrophe) bin ich schließlich bei OBS-Studio gelandet, welches die einfachste und rundste Möglichkeit ist, Video vom Grabber aufzuzeichnen. Ich kann euch dafür dieses Video sehr ans Herz legen.

Also einfach als Quelle ein V4L2-Device anlegen, ausprobieren welches Video-Device das richtige ist und schon sieht man am Bildschirm den Videoinhalt. Mit einem Rechtsklick auf die Quelle kann man die Option „Resize Output“ auswählen, damit hat man gleich die richtige Größe eingestellt. Ich verwende für das Audio-Routing PulseAudio, im Tab Recording kann man OBS einfach als Quelle den Video-Grabber angeben und fertig. Möchte man in die Audio-Quellen reinhören, öffnet man die Advanced Audio Propertier und stellt Audio Monitoring auf Monitor and Output. Mit einem Klick auf „Start Recording“ geht es dann auch schon los.

Weil mein Video-Grabber nur Composite-Video kann und mein VHS-Player Scart, hab ich mir mit 2 Krokodilklemmen kurzerhand selbst einen Adapter gebaut. (Mein VHS-Player hat extra Chinch-Audioausgänge, sonst muss man 6 Krokodilklemmen verwenden um Audio auch vom SCART-Signal zu extrahieren).

SCART-Pinout

In meinem Fall habe ich ein SCART-Kabel hergenommen, hier wird Composite Video Input und Output gekreuzt (irgendwo logisch). Hab also beim Kabelende einfach Pin 20 auf den mittleren Chinch-Pin und Pin 18 auf den Ground vom Chinch-Kabel gelegt, und schon war ein Bild im OBS zu sehen.

ddclient als Daemon für DynDNS verwenden

Ich betreibe privat Server hinter dynamischen IP-Adressen. Mein Domain-Provider core-networks.de (kann ich sehr empfehlen), bietet für meine Domains auch einen DynDNS-Dienst an. Den nutze ich auf einer Debian-Maschine mit dem Tool ddclient.

Dieses Tool installiere und konfiguriere ich wie folgt:

  1. Installation mit dem Befehl apt update && apt install ddclient
  2. In der Datei /etc/ddclient.conf werden die Einstellungen für den DynDNS-Provider festgelegt, core-networks.de hat hier seine Config im FAQ stehen.
  3. In der Datei /etc/default/ddclient stelle ich folgende Optionen um:
    1. run_ipup auf false
    2. run_daemon auf true
  4. Mit dem Befehl systemctl start ddclient starte ich den ddclient als systemd-Dienst.
  5. Damit das ganze auch beim Neustart noch funktioniert, mache ich noch ein systemctl enable ddclient

Damit ist das ganze schon wieder erledigt, und meine IP-Adresse wird zuverlässig bei core-networks.de aktualisiert, sobald sie sich ändert.

SMPlayer – der bessere VLC unter Ubuntu

Da ich in der letzten Zeit vermehrt Probleme mit dem sonst gern-gesehenen VLC-Player unter Ubuntu hatte, bin ich kurzerhand auf den SMPlayer umgestiegen. Bis jetzt bin ich damit zufrieden. Auch wenn er nicht die unzähligen Features bietet wie der VLC-Player, so kann sich sein Funktionsumfang durchaus sehen lassen.

Gitlab CE mit nginx-Reverse-Proxy aufsetzen

Hier die nginx Reverse-Proxy-Config für gitlab-ce

server {
        listen 80;
        listen [::]:80;
        server_name DEINE_URL;
        return 301 https://$server_name$request_uri;}

server {
    listen 443 ssl http2; 
    listen [::]:443 ssl http2; # OCSP Stapling fetch OCSP records from URL in ssl_certificate and cache them
    server_name DEINE_URL; 

    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_certificate /etc/letsencrypt/live/git.itkfm.at/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/git.itkfm.at/privkey.pem; 

    resolver 9.9.9.9;
    ssl_ecdh_curve prime256v1;
    add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
        # Server should determine the ciphers, not the client
        ssl_prefer_server_ciphers on;

        # SSL session handling
        ssl_session_timeout 24h;
        ssl_session_cache shared:SSL:50m;
        
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        
        location / {
            proxy_pass https://DEINE_IP:443;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
    }
}

SMART-Werte auslesen und richtig deuten – Festplattengesundheit 101

In der IT gibt es immer wieder ein großes Thema: DATENVERLUST. Das Grauen jedes Nutzers. Wir haben schon öfter gesagt, das man sich nie auf einzelne Komponenten verlassen sollte, wenn es um Daten geht. Deshalb empfehlen wir seit jeher, mindestens die 3-2-1-Regel zu befolgen: 3 Datenbestände auf mindestens 2 Medien und eine Außer-Haus-Kopie. Vielleicht kommt noch einmal ein umfassender Artikel zu dem Thema, wie sich das möglichst schmerzfrei und einfach umsetzen lässt, aber heute soll es um etwas anderes gehen.

Nehmen wir an, ihr findet ein paar alte Festplatten zuhause, und denkt euch, super, die kann ich gleich als Datenspeicher verwenden. Bevor ihr jedoch eure Daten daraufpackt und vielleicht sogar von der Quelle löscht, solltet ihr euch ansehen, in welchem Zustand diese Festplatten sind. Dafür gibt es die sogenannten „smartmontools“. Diese können die Festplattenparameter auslesen, die sich dann interpretieren lassen.

Leider gibt es hier keinen 100%-igen Standard, wie so etwas aussieht bzw. wie so etwas zu deuten ist. Jeder Hersteller kocht hier ein wenig seine eigene Suppe. Grundsätzlich lassen sich folgende Annahmen treffen:

  • Hat eine Enterprise-Festplatte (also zB WD-RED, Seagate Ironwolf, alles was eben für den Dauerbetrieb konzipiert ist) mehr als 40.000 Stunden, sollte man sich um die Daten darauf bereits sorgen. Meistens geben die Hersteller sogar empfohlene maximale Betriebsstunden an.
  • Ist die Reallocated Sectors Count-Anzahl größer als 0, würde ich mir auch schön langsam Sorgen machen. Das bedeutet nämlich, das es bereits kaputte Sektoren auf der Platte gibt, und die Platte auf andere Sektoren ausweichen musste.
  • Auch auf die (Raw) Read Error Rate sollte man ein Auge werfen. Auch diese sollte nicht größer als 0 sein.

Dies sind jetzt natürlich nur grobe Richtwerte, auf die man sich nicht festnageln darf. Sie sollen nur einen Anhaltspunkt geben. Alle Parameter mit Erklärung findet man hier.

Man muss bei den Ergebnissen zwischen dem Value– und dem RAW-Wert unterscheiden. Beim Value-Wert handelt es sich um einen normalisieren Wert, der quasi über einem gewissen Threshold als OK gilt und darunter als schlecht. Ich bevorzuge allerdings den RAW-Wert, der den echten Messwert anzeigt. Bei den oben genannten Werten sind auch die RAW-Werte gemeint, wenn es heißt sie sollen nicht mehr als 40.000 Stunden haben oder den Wert 0 nicht überschreiten.

Um nun einen SMART-Test auszuführen, muss man zuerst die smartmontools installieren, unter Debian zB:

apt install smartmontools

Nun lässt sich der SMART-Test mit folgendem Befehl starten (root-Rechte erforderlich):

smartctl -t short /dev/sdc

Dies startet den Schnelltest (Dauer ungefähr 2 Minuten) auf der Festplatte /dev/sdc. Es gibt außerdem die Optionen long, conveyance oder select. Mehr Infos dazu findet man bei Thomas-Krenn.

Nachdem die 2 Minuten um sind, kann man die Ergebnisse nun mittels diesem Befehl auslesen:

smartctl -a /dev/sdc

Solltet ihr noch Tipps haben oder wollt eure Erfahrungen teilen, freue ich mich auf eine Diskussion in den Kommentaren!

Links und Credit

https://www.thomas-krenn.com/de/wiki/SMART_Tests_mit_smartctl
https://de.wikipedia.org/wiki/Self-Monitoring,_Analysis_and_Reporting_Technology#%C3%9Cbliche_Parameter
https://www.thomas-krenn.com/de/wiki/Kategorie:Smartmontools

Unter Linux alle Festplatten mit allen Identifiern auslesen

Manchmal kommt man in die Situation, dass man wissen möchte oder muss, wie welche Hard-Drive unter Linux jetzt heißt. Mit dem udev-System gibt es hier verschiedene Bezeichnungen, die alle unterschiedliche Formate und Aufgaben haben. So ist es zum Beispiel empfehlenswert, bei einem ZFS-Pool die wnn Bezeichnung zu verwenden, damit beim Austauschen der Disks noch immer alles Paletti ist. Um nun von jeder Festplatte alle Bezeichner zu bekommen, empfiehlt sich das Tool hwinfo.

Verwendung:

  • hwinfo --disk: Zeigt alle Festplatten mit allen Infos und Mountpoints an.
  • hwinfo --partition: Zeigt alle Partitionen mit allen Infos und Mountpoints an.

Bei beiden Befehlen ist es möglich, zusätzlich --short hinten anzuhängen, um nur eine kurze List zu erhalten, welche Disks bzw. Partitionen es gibt.

Links und Credit

https://askubuntu.com/questions/27997/which-hard-disk-drive-is-which

Proxmox-Container (LXC) lässt sich nach Proxmox-Upgrade nicht mehr starten

Nach dem Proxmox-Upgrade wollte bei mir ein Proxmox-Container nicht mehr booten, die Fehlermeldung war leider nicht sehr aussagekräftig.

Nach kurzem googlen dann die Lösung: das ZFS-Subvol wollte sich nicht mounten lassen, weil das Verzeichnis nicht leer war. Hier war ein leeres dev/ Verzeichnis Schuld an dem Unglück. Nach dem Löschen des dev/ Verzeichnisses kann man das Image selbst mit zfs mount einbinden.

Kurzes Beispiel:

Euer Container mit der ID 100 wurde auf ein ZFS-Storage installiert. Nehmen wir an, das war direkt auf dem lokalen ZFS-Pool von Proxmox, dem rpool/data/. Nun wollt ihr den Container starten, doch das funktioniert nicht. Also macht ihr ls -alh /rpool/data/subvol-100-disk1/ und seht dort ein Verzeichnis dev/, das leer ist.

Wenn ansonsten nichts zu sehen ist außer dieses leere dev/ Verzeichnis, dann könnt ihr mit rm -r /rpool/data/subvol-100-disk1/dev dieses löschen. Anschließend macht ihr zfs mount rpool/data/subvol-100-disk1, und wenn das ohne Probleme und Fehlermeldung funktioniert, sollte der Container wieder starten.

Ich habe heute das Problem nicht wegbekommen, und nach einem Neustart war es immer und immer wieder soweit, dass die Container nicht starten wollten. Dabei war die Lösung doch recht einfach: Anstatt nur den dev-Ordner zu löschen, müssen alle Datasets des betroffenen Pools unmountet werden, um danach den Ordner auf root-Ebene, also zB rm -rf /data_redundant, zu löschen. Danach einfach mittels Befehl systemctl restart zfs-mount.service den Dienst neu starten. Gelingt das ohne Fehlermeldung, sollte auch nach einem Reboot alles in Ordnung sein.

Was außerdem noch seitens Proxmox empfohlen wird, ist das Cachefile des zpools neu zu setzen. Ich hab das Anfangs ohne Erfolg versucht, aber vielleicht hilft es ja, solchen neuen Fehlern vorzubeugen, ich hatte nämlich seither keine Probleme mehr. Nachdems nicht geschadet hat, einfach mal zustätzlich ins Terminal reinklopfen:

zpool set cachefile=/etc/zfs/zpool.cache POOLNAME
update-initramfs -u -k all
Links und Credit

https://forum.proxmox.com/threads/lxc-container-cant-start.53431/
https://forum.proxmox.com/threads/update-broke-lxc.59776/#post-277303
https://forum.proxmox.com/threads/update-broke-lxc.59776/post-329812
https://forum.proxmox.com/threads/lxc-not-starting-after-v5-to-v6-upgrade-using-zfs-for-storage.57698/post-269706
https://proxmox-openvz.blogspot.com/2019/05/debugging-proxmox-lxc-container-that.html

Bookstack mit nginx Reverse-Proxy betreiben & E-Mail konfigurieren

Bei Bookstack handelt es sich um eine Anwendung, die eine Dokumentenverwaltung bereitstellt. Leider ist die Doku sehr spärlich ausgeführt, warum ich hier nun kurz zusammenfasse, wie die Applikation hinter einem nginx Reverse-Proxy betreibbar ist.

Die Applikation selbst habe ich mit dem Installationsscript für Ubuntu-Server installiert.

Um E-Mail erfolgreich zu konfigurieren, muss man die Datei „/var/www/bookstack/.env“ bearbeiten, damit sie folgende Einträge enthält:

# Application key
# Used for encryption where needed.
# Run `php artisan key:generate` to generate a valid key.
APP_KEY=censored

# Application URL
# Remove the hash below and set a URL if using BookStack behind
# a proxy, if using a third-party authentication option.
# This must be the root URL that you want to host BookStack on.
# All URL's in BookStack will be generated using this value.
APP_URL=https://your.domain.net

# Database details
DB_HOST=localhost
DB_DATABASE=bookstack
DB_USERNAME=bookstack
DB_PASSWORD=censored

# Mail system to use
# Can be 'smtp', 'mail' or 'sendmail'
MAIL_DRIVER=smtp

MAIL_FROM=test@test.at
MAIL_FROM_NAME=Your Bookstack Server

# SMTP mail options
MAIL_HOST=test.mail.at
MAIL_PORT=465
MAIL_USERNAME=test@test.at
MAIL_PASSWORD=censored
MAIL_ENCRYPTION=ssl


# A full list of options can be found in the '.env.example.complete' file.

Im Reverse-Proxy muss die Config folgendermaßen aussehen:

server {
    listen 80;
    server_name your.domain.net; 
    return 301 https://$server_name$request_uri;
}

# BLOG SITE
server {
 listen 443 ssl http2;
 server_name your.domain.net;

## Source: https://github.com/1activegeek/nginx-config-collection
## READ THE COMMENT ON add_header X-Frame-Options AND add_header Content-Security-Policy IF YOU USE THIS ON A SUBDOMAIN YOU WANT TO IFRAME!

## Certificates from LE container placement
ssl_certificate /etc/letsencrypt/live/your.domain.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your.domain.net/privkey.pem;

ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
ssl_session_timeout  10m;

## NOTE: The add_header Content-Security-Policy won't work with duckdns since you don't own the root domain. Just buy a domain. It's cheap
## Settings to add strong security profile (A+ on securityheaders.io/ssllabs.com)

add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none; #SET THIS TO index IF YOU WANT GOOGLE TO INDEX YOU SITE!
add_header Referrer-Policy "strict-origin-when-cross-origin";
proxy_cookie_path / "/; HTTPOnly; Secure"; ##NOTE: This may cause issues with unifi. Remove HTTPOnly; or create another ssl config for unifi.
#more_set_headers "Server: Classified";
#more_clear_headers 'X-Powered-By';
 
 client_max_body_size 0; 
 
  
location / {
    proxy_pass http://DOMAIN.OF.YOUR.BOOKSTACK/;
    } 
}