raspi Arthur

Da der Raspi im Dauerbetrieb laufen sollen einiges hiervon umgesetzt:
https://www.3dh.de/raspberry-pi-fit-fuer-dauerbetrieb-machen/
https://www.datenreise.de/raspberry-pi-stabiler-24-7-dauerbetrieb/

Schreibzugriff auf SD-Karte reduzieren

  • Log2Ram installieren
    (siehe hier: github.com/azlux/log2ram/) um die Zugriffe auf /var/log/ zu reduzieren.
    echo "deb [signed-by=/usr/share/keyrings/azlux-archive-keyring.gpg] http://packages.azlux.fr/debian/ bullseye main" | sudo tee /etc/apt/sources.list.d/azlux.list
    sudo wget -O /usr/share/keyrings/azlux-archive-keyring.gpg  https://azlux.fr/repo.gpg
    sudo apt update
    sudo apt install log2ram
  • tmp ins Ram legen
    sudo nano edit /etc/fstab
    # beim Eintrag für / (etx4) noatime hinzufügen
    tmpfs     /tmp      tmpfs   nosuid,nodev,noatime   0  0
    tmpfs     /var/tmp    tmpfs   nosuid,nodev,noatime   0  0
  • Swapping deaktivieren
    sudo dphys-swapfile swapoff
    sudo systemctl disable dphys-swapfile
    sudo apt-get purge dphys-swapfile

Watchdog installiert

Der auf dem Raspberry Pi verbaute BCM2708 von Broadcom verfügt standardmäßig bereits über einen Hardware-Watchdog, der das System im Problemfall neu starten kann. Um diesen zu nutzen, wird ein Kernelmodul und ein Daemon benötigt.

Funktionsweise:
Der Daemon teilt dem Watchdog in regelmäßigen Intervallen mit, dass das System funktioniert. Kommt es nun zu einem Problem und das System hängt sich auf, erhält der Watchdog keine Nachrichten mehr und setzt daraufhin das System zurück.

sudo apt-get install watchdog
sudo modprobe bcm2835_wdt
echo "bcm2835_wdt" | sudo tee -a /etc/modules

# config anpassen
sudo nano /etc/watchdog.conf
# Minimaleinstellung
watchdog-device        = /dev/watchdog
max-load-1             = 24

Unattended-Upgrades einrichten

Original hier: www.elektronik-kompendium.de/sites/raspberry-pi/2002101.htm

sudo apt-get install unattended-upgrades
# Aktivieren/Deaktivieren:
sudo dpkg-reconfigure -plow unattended-upgrades

# genaue Config:
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

Aktualisieren von .bashrc

alias up='sudo apt update && sudo apt upgrade'

static IPv6 für den pihole

Als Statische IPv6-IP-Adresse wird der Prefix ‚fd00::‘ verwendet, eine Local Unicast Adressen (LUA) [vgl hier: www.ipv6-portal.de/informationen/einfuehrung/adressbereiche.html]. Im hinteren Teil verwenden wir (zur Übersichtlichkeit bei den Statischen Adressen) die IPv4-Adressen (von 192.168.130.8 nehmen wir ‚::130:8‘).

cat < /etc/network/interfaces.d/ipv6
# IPv6
auto eth0
iface eth0 inet6 static
pre-up modprobe ipv6
address fd00::130:8
netmask 64
EOF

Nach dem Reboot des pihole muss die Adresse in die Fritzbox eingetragen werden (Heimnetz -> Netzwerk -> Netzwerkeinstellungen -> IP6-Einstellungen)
– aktiviere ULA-Präfix manuell festlegen: [fd00:: /64]
– aktiviere DNSv6-Server auch über Router Advertisement bekanntgeben (RFC 5006) [fd00::130:8]

Jetzt noch auf dem pihole die Config bearbeiten:

sudo nano /etc/pihole/setupVars.conf
# Eintragen:
IPV6_ADDRESS=fd00::130:8/64
AAAA_QUERY_ANALYSIS=yes

… und dafür sorgen dass die Änderungen übernommen werden

pihole -g

LXD-Container auf der Qnap

Installation

  1. In der Container Station auf Erstellen gehen
  2. Suchen Sie in der Suchleiste „ubuntu“ und klicke „Registerkarte LXD-Image-Server“.
  3. Wählen das Image aus der Liste, derzeit LTS-Support hat focal (20.04) und installiere
  4. Im Fenster „Container erstellen“ Namen eingeben und CPU- und Speicherressourcen zuweisen
  5. Netzwerkmodus auf Bridge stellen und „Adapter 2“ auswählen (statische IP erstellen wir später)
  6. Da die Option „Erweiterte Ordnerberechtigungen“ aktiviert ist, muss unter „Erweiterte Einstellungen/Gerät“ privilegierte Modus aktiviert werden!
  7. ggf. noch „Shared Folders“ und „Device“ erstellen
  8. Installieren …

Erstellen eines Benutzers in LXD-Containern

  1. Terminal mit „/bin/sh“ ausführen
  2. Benutzer mit adduser {Ihr_Benutzername} anlegen
  3. Sudo-Zugriff ermöglichen mit usermod -aG sudo {Ihr_Benutzername}
  4. Terminal schließen … fertig

statischen IP-Adresse und SSH

  1. In der Konsole Anmelden und sich mit sudo su zu root machen
  2. das obligatorischen apt-get update und apt-get upgrade
  3. Installiere Software apt-get install openssh-server nano
  4. Bearbeite nano /etc/netplan/10-lxd.yaml
    network:
      version: 2
      ethernets: 
        eth0:
          dhcp4: false
          addresses:
             - 192.168.130.20/23
          gateway4: 192.168.130.1
          nameservers:
            addresses: [192.168.130.1, 9.9.9.9]
  5. Befehl netplan apply ausführen

crontab mit Qnap

# 1) Nutzer Admin aktivieren
# 2) SSH-Login als Admin
vi /etc/config/crontab         # nano ist nicht installiert :-(
crontab /etc/config/crontab    # ausführen um cron bekannt zu geben dass es hier Änderungen gab
/etc/init.d/crond.sh restart   # Restart Cron
crontab -l                     # kann genutzt werden um den aktuellen Inhalt von crontab anzuzeigen

vi-Befehle:

i     - insert-Mode
[esc] - zurück aus dem insert-Mode
dd    - lösche aktuelle Zeile
:wq   - speichern und verlassen
:q!   - verlassen ohne zu speichern

Airprint-Server

Basis dieser Anleitung ist hier zu finden: https://www.johnlose.de/2018/02/drucker-airprint-faehig-machen-auf-ubuntu-16-04-airprint-cups-ubuntu-xenial/

Wir erstellen uns auf der NAS einen LXC-Container (ubuntu-bionic:latest) und bringen den auf den aktuellen stand

sudo apt-get update && sudo apt-get upgrade

Anschließend installieren wir alles notwendige:

sudo apt-get install avahi-daemon cups python python-lxml python-cups wget nano

Update: 20.11.2021
LXC-Container werden demnächst nicht mehr unterstützt. Verwendung finden sollen jetzt LXD-Container. Infos dazu gibt es hier : https://www.qnap.com/de-de/how-to/tutorial/article/ausf%C3%BChren-von-lxd-container-instanzen-in-container-station

Anschließend configurieren wir CUPS
Zuerst erlauben wir die Administration über das Netzwerk. Später können wir den CUPS-Server von einem beliebigen Client im Netzwerk in einem Webbrowser administrieren.

sudo cupsctl --remote-admin

Die nächste Einstellung ermöglicht es, dass die lokal eingerichteten Drucker im Netzwerk geteilt werden (Drucker-Freigabe).

sudo cupsctl --share-printers

Die folgende Einstellung ermöglicht das Drucken von einem beliebigen Computer im Netzwerk.

sudo cupsctl --remote-any
sudo usermod -aG lpadmin pole
sudo systemctl restart cups

AVAHI konfigurieren

Jetzt möchten wir den Drucker noch in Bonjour (AVAHI) in meinem Netz auffindbar machen. Weil die Generierung eines Printerservices in AVAHI ziemlich heftig ist, gibt es dazu ein schickes Script von Timothy J Fontaine: „Airprint-Generate“. Das holen wir uns mal eben ab: wget https://raw.githubusercontent.com/tjfontaine/airprint-generate/master/airprint-generate.py

und machen es ausführbar, chmod +x airprint-generate.py

und führen es aus. ./airprint-generate.py

Das Ding generiert eine Datei in meinem Folder, welche ich Euch als Beispiel mal kurz zeige (und damit auch den Grund, warum das script von tjfontaine so cool ist):

<?xml version="1.0" ?>
<!DOCTYPE service-group SYSTEM 'avahi-service.dtd'>
<service-group>
<name replace-wildcards="yes">AirPrint Kyocera_FS-1370DN @ %h</name>
<service>
<type>_ipp._tcp</type>
<subtype>_universal._sub._ipp._tcp</subtype>
<port>631</port>
<txt-record>txtvers=1</txt-record>
<txt-record>qtotal=1</txt-record>
<txt-record>Transparent=T</txt-record>
<txt-record>URF=none</txt-record>
<txt-record>rp=printers/Kyocera_FS-1370DN</txt-record>
<txt-record>note=Kyocera FS-1370DN</txt-record>
<txt-record>product=(GPL Ghostscript)</txt-record>
<txt-record>printer-state=3</txt-record>
<txt-record>printer-type=0x809054</txt-record>
<txt-record>pdl=application/octet-stream,application/pdf,application/postscript,application/vnd.cups-raster,image/gif,image/jpeg,image/png,image/tiff,image/urf,text/html,text/plain,application/vnd.adobe-reader-postscript,application/vnd.cups-command</txt-record>
</service>
</service-group>

 

Die Datei (heißt bei Euch anders) schiebe ich nur noch in die Bonjour AVAHI-Services: mv AirPrint-Lexmark_MS310_Series.service /etc/avahi/services

und starte den AVAHI Dienst kurz durch: /etc/init.d/avahi-daemon restart

Das war’s dann auch.

Boot-Logo ersetzten

Das Logo liegt hier:
/usr/share/plymouth/themes/mint-logo

In der Datei mint-logo.script die Zeile auskommentieren
# Plymouth.SetBootProgressFunction (animate_progress_indicator);

Befehl ausführen
sudo update-initframes -u

Mail von Papa

Seit Samstag kann Papa keine Mails mehr versenden.
Einfach so, ohne dass er an seinem PC etwas geändert hätte.
Verzweifelt rief er mehrfach bei mir an. Ich konnte aber leider nichts für ihn tun, und schon gar nicht aus dem Kanu heraus. Wir waren beim Paddeln auf der Luhe, sehr schön und durchaus zu empfehlen, so ganz nebenbei.
Aber zurück zu Papas Mails: ich habe jetzt doch auch fast eine ganze Stunde gebraucht, um den „Fehler“ zu finden:
Es Fehler ist, wen wundert es, der Speedport-Router der Telekom.
Der hat einfach ohne Vorankündigung das Sicherheitsfeature mit dem Titel „Liste der sicheren Mailserver“ aktiviert. Und klar, unser Familienserver steht da nicht in der Liste…

Welche Farbe ist denn jetzt

Eine nette kleine Javascript function…

function dotime(){
	var d = new Date();
	var h = d.getHours();
	var m = d.getMinutes();
	var s = d.getSeconds();
	
	if (h > 10){h = "0"+h};
	if (m > 10){m = "0"+m};
	if (s > 10){s = "0"+s};
	
	h.toString();
	m.toString();
	s.toString();
	
	var hex = "#"+h+m+s;
	jQuery("#ti").html(h+" : "+m+" : "+s);
	jQuery("#hx").html(hex);
	jQuery("#timebox").css({"background": hex});
	setTimeout(function(){ dotime();}, 1000);
}
jQuery(document).ready(function(){dotime();}

Homepage Kopie erstellen aus WP-Multisite installation

Um verschiedenes zu Testen, z.B. ein neues Template und so Zeug, sollte unter einer anderen Subdomain eine 1:1 Kopie einer Seite (WordPress-Multisite) erstellt werden.

Die Orginal blog_id der Seite ist 8 (orgID). Die Kopie wird erstellt mit der freien blog_id=6 (neuID).
PFX ist der allgemeine WordPress Tabellen-Prefix.

 

Vorgenen:

  1. Backup erstellen (komplette Datenbank+FTP) !!!
  2. Kopie aller Mediendateien von /blogs.dir/orgID/ zu /blogs.dir/neuID/ erstellen und per FTP hochladen.
  3. alle SQL-Tabellen mit PFX_orgID_* kopieren nach PFX_neuID_*
  4. Tabelle ‚PFX_neuID_options‚ sind die Einträge (option_name) zu bearbeiten:
    1. PFX_orgID_user_roles‚ umbenennen in ‚PFX_neuID_user_roles
    2. siteurl‚ und ‚home‚ auf die neue Domain anpassen
    3. upload_path‚ ist der Pfad wp-content/blogs.dir/neuID/files ein zu tragen
  5. (Optional, geht auch ohne: In der Tabelle ‚PFX_neuID_postmeta‚ sind die ‚_menu_item_url‚ auf die neue Sub-Domain anzupassen.)
  6. Tabelle ‚PFX_blogs‚ ist eine neue Zeile ein zu fügen, wobei ‚blog_id‚ und ‚domain‚ an zu passen sind
  7. Tabelle ‚PFX_domain_mapping‚ die entsprechenden einträge vornehmen, mit der richtigen ‚blog_id
  8. In Tabelle ‚PFX_usermeta‚ alle Einträge deren ‚meta_key‚ mit ‚PFX_orgID_*‚ beginnen mit neuer ‚umeta_id‚ als ‚PFX_neuID_*‚ speichern.

Für die aktuelle Kopie waren die Änderungen:

INSERT INTO `wp_blogs` (`blog_id`, `site_id`, `domain`, `path`, `registered`, `last_updated`, `public`, `archived`, `mature`, `spam`, `deleted`, `lang_id`) VALUES
(6, 1, 'dev.physio-vohrer.de',    '/', '2013-09-30 20:45:51', '2015-06-26 10:02:38', 1, 0, 0, 0, 0, 0);

-- --------------------------------------------------------
INSERT INTO `wp_domain_mapping` (`id`, `blog_id`, `domain`, `active`) VALUES
(15, 6, 'dev.physio-vohrer.de', 1),
(16, 6, 'dev-vohrer.rj-server.de', 0);


-- --------------------------------------------------------

INSERT INTO `wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES
(190, 1,  'wp_6_dashboard_quick_press_last_post_id', '816'),
(191, 1,  'wp_6_user-settings', 'm1=c&m4=c&m9=c&m5=o&m11=c&m10=c&m13=c&m14=c&imgsize=thumbnail&m6=c&editor=tinymce&m7=c&m8=c&m2=c&m0=o&widgets_access=off&libraryContent=browse&align=right&urlbutton=none&wplink=1&ed_size=859&hidetb=1&advImgDetails=hide'),
(192, 1,  'wp_6_user-settings-time', '1413395722'),
(193, 9,  'wp_6_capabilities', 'a:1:{s:6:"editor";b:1;}'),
(194, 9,  'wp_6_user-settings', 'libraryContent=browse&editor=html'),
(195, 9,  'wp_6_user-settings-time', '1427109475'),
(196, 9,  'wp_6_user_level', '7'),
(197, 9,  'wp_6_dashboard_quick_press_last_post_id', '850'),
(198, 10, 'wp_6_capabilities', 'a:1:{s:6:"editor";b:1;}'),
(199, 10, 'wp_6_user_level', '7'),
(200, 13, 'wp_6_capabilities', 'a:1:{s:13:"administrator";b:1;}'),
(201, 13, 'wp_6_user-settings', 'editor=tinymce'),
(202, 13, 'wp_6_user-settings-time', '1435310178'),
(203, 13, 'wp_6_user_level', '10'),
(204, 13, 'wp_6_dashboard_quick_press_last_post_id', '851');

 

mein O2 …

„Sie haben sich dazu entschieden, bestimmte Services nicht mehr in Anspruch zu nehmen.“ schreibt mein Telefonanbieter heute morgen in einer eMail und listet auf, was denn in meinem Vertrag drin ist und was nicht.

Es ist eine Sache, wenn der Anbieter meint er könne einen dauerhaft vertraglich gewährten Rabatt einfach so entfernen. Es ist aber ein ganz andere Sache, wenn er mir auch noch unterschieben will, dass ich diesen „bestimmten Service“ nicht mehr in Anspruch nehmen will.

Frech das… und keines von beiden ist akzeptabel!