Neue HDD einrichten

Partition erstellen

 sudo parted /dev/sde print
 sudo parted /dev/sde mklabel gpt
 sudo parted /dev/sde mkpart primary 2048s 100%
 sudo parted /dev/sde print
 sudo parted /dev/sde align-check optimal 1

Verschlüsselungsart bestimmen

cryptsetup benchmark

Partition verschlüsseln

sudo cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 -y /dev/sde1 

Partiton entschlüsseln

sudo udisksctl unlock -b /dev/disk/by-uuid/82b8afee-51f5-43e9-bb35-7e108f073c3d

Dateisystem erstellen

 sudo mkfs.btrfs /dev/dm-4

Dateisystem mounten

sudo mount /dev/dm-4 /mnt

Von anderem BTRFS Dateisystem kopieren

sudo btrfs subvolume list /quelle
btrfs subvolume snapshot -r /quelle/subvolume /quelle/subvolume@yyyymmddhhnn
btrfs send /quelle/subvolume@yyyymmddhhnn | pv -tba | btrfs receive /ziel

Oracle DMP Importieren

Eine WM erstellen, Oracle DB installieren, SQLDeveloper runterladen, SQLDeveloper starten.

Verbindung mit der DB herstellen, neuen User erstellen (muss mit C## beginnen und komplett groß geschrieben werden). Alle Rechte und Rollen zuordnen ausser die sys* rollen.

Alls neuer User verbinden. Ansicht->DBA Verbinden. Datapump Import. Assistent Datapump

GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO C##ARNE;

CREATE OR REPLACE DIRECTORY „DATA_PUMP_DIR“ as ‚C:\tmp\‘;

Tablespaces

SELECT DISTINCT sgm.TABLESPACE_NAME , dtf.FILE_NAME
FROM DBA_SEGMENTS sgm
JOIN DBA_DATA_FILES dtf ON (sgm.TABLESPACE_NAME = dtf.TABLESPACE_NAME)
WHERE sgm.OWNER = ‚C##ARNE‘

ggfs tablespaces und userschemas anpassen lassen

Nas neu eingerichtet – raspi 4 usb boot

Ubuntu laut Anleitung vorbereitet und gebootet. Updates abwarten (20 Min etwa)
https://jamesachambers.com/raspberry-pi-4-ubuntu-20-04-usb-mass-storage-boot-guide/

mit


locales

die sprache prüfen

mit


sudo dpkg-reconfigure locales

die Sprache ändern

neuen benutzer einrichten
sudo adduser

benutzer zu sudo hinzufügen
sudo usermod -aG sudo

teste ob user wirklich sudo rechte hat. werde zu neuem user
sudo su

<benutzername>: sudo whoami #sollte roote ausgeben

alten ubuntu user löschen
sudo userdel -R ubuntu

verschlüsselte festplatte
installiere udisks
sudo apt install udisks2

sudo udisksctl unlock -b <disk>

firewall
prüfen ob aktiv
sudo ufw status

ssh erlauben
sudo ufw allow ssh

http erlauben
sudo ufw allow http
sudo ufw allow https

ufw bei systemstart mitstarten
sudo ufw enable

hostname ändern
sudo nano /etc/hosts
sudo nano /etc/hostname
sudo hostname -F /etc/hostname

apache2 installieren
sudo apt install apache2

sudo nano /etc/apache2/apache2.conf
ServerSignature Off
ServerTokens Prod
SSLProtocol -ALL +TLSv1.2
SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM

mod_rewrite
sudo a2enmod rewrite
a2enmod proxy
a2enmod proxy_http
a2enmod ssl

cerbot
sudo apt install certbot python3-certbot-apache

emby
https://emby.media/linux-server.html
curl -L –out emby.deb
sudo dpkg -i emby.deb

htop
sudo apt install htop

samba
sudo apt install samba
Ports 139 und 445 freigeben in der Firewall
sudo ufw allow from 192.168.178.0/24 to any port 139
sudo ufw allow from 192.168.178.0/24 to any port 445

smb.conf:

[Public]
create mask = 0775
directory mask = 0775
force group = users
guest ok = Yes
path = /mnt/nas/Public
write list = arne

[Arne]
create mask = 0770
directory mask = 0770
force group = arne
force user = arne
path = /mnt/nas/Arne
read only = No
valid users = arne

samba user erstellen

sudo smbpasswd -a <username>

ssh
enable public key

ggf public key aus private key erstellen
ssh-keygen -f <pfad/zum/privatekey> -y > public_key

ddclient für dynv6
sudo apt install ddclient
config laut dynv6, username auch wirklich none eingeben

nextcloud
sudo apt install mariadb-server php7.4-bcmath php7.4-bz2 php7.4-cli php7.4-common php7.4-curl php7.4-gd php7.4-json php7.4-mbstring php7.4-mysql php7.4-xml php7.4-zip php7.4 php7.4-fpm php7.4-intl

datenbank und user in mariadb anlegen
create database nextcloud;
CREATE USER ’nexcloud’@’localhost‘ IDENTIFIED BY ‚changeme‘;
GRANT ALL PRIVILEGES ON nextcloud.* TO ’nextcloud’@’localhost‘;
FLUSH PRIVILEGES;
exit;

php.ini
sudo nano /etc/php7.4/fpm/php.ini
memory_limit = 512M
output_buffering = off

fail2ban
für emby
/etc/fail2ban$ sudo nano filter.d/emby.conf
[Definition]
failregex = AUTH-ERROR: – Invalid user
HTTP Response 401 to .

    /etc/fail2ban$ sudo nano jail.d/emby.local
    [emby]
    enabled = true
    filter = emby
    logpath = /var/lib/emby/logs/embyserver.txt
    port = 80,443
für nexcloud
    Create a file in /etc/fail2ban/filter.d named nextcloud.conf with the following contents:

    [Definition]
    _groupsre = (?:(?:,?\s*"\w+":(?:"[^"]+"|\w+))*)
    failregex = ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Login failed:
                ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Trusted domain error.
    datepattern = ,?\s*"time"\s*:\s*"%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?"
    The jail file defines how to handle the failed authentication attempts found by the Nextcloud filter.

    Create a file in /etc/fail2ban/jail.d named nextcloud.local with the following contents:

    

[nextcloud]

backend = auto enabled = true port = 80,443 protocol = tcp filter = nextcloud maxretry = 3 bantime = 86400 findtime = 43200 logpath = /path/to/data/directory/nextcloud.log

lüfterscript einbauen

hd-idle

sudo nano /etc/default/hd-idle

START_HD_IDLE=true

HD_IDLE_OPTS=“-i 1800 -a /dev/disk/by-uuid/9ffe642b-6af8-49b3-952f-2c86f1f3b37f -i 1800 -a /dev/disk/by-uuid/369dda9c-0411-4ddd-a630-eed8d66b941e -l /var/log/hd-idle.log“ -a /dev/disk/by-uuid/82b8afee-51f5-43e9-bb35-7e108f073c3d -a /dev/disk/by-uuid/d89ada69-30a4-405c-b2f9-532fce8d0078 -l /var/log/hd-idle.log“



sudo systemctl enable hd-idle
sudo systemctl start hd-idle

mailversandt

sudo usermod -aG mail <benutzername>

dann ab und wieder anmelden


sudo apt install mailutils

als satelit einrichten

sudo nano /etc/postfix/main.cf

(vorhandenes smtp_tls_security_level auskommentieren)

smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
sender_canonical_maps = hash:/etc/postfix/sender_canonical
smtp_tls_security_level = encrypt

virtual_alias_domains = nas
virtual_alias_maps = hash:/etc/postfix/virtual

sudo touch /etc/postfix/sasl_password
sudo nano /etc/postfix/sasl_password
mail.gmx.net mail_adresse@gmx.de:passwort

sudo nano /etc/postfix/sender_canonical
www-data meine_adresse@gmx.de
root meine_adresse@gmx.de
arne meine_adresse@gmx.de
sudo postmap hash:/etc/postfix/sasl_password 
sudo postmap /etc/postfix/sender_canonical

sudo nano /etc/postfix/virtual
@example.com         example@gmx.de

sudo postmap /etc/postfix/virtual

sudo systemctl restart postfix

zumtesten:
echo Hallo! dies ist ein Test! | mail -s Testmail meine_adresse@gmx.de

Auto Updates

sudo apt install unattended-upgrades apt-listchanges
sudo dpkg-reconfigure -plow unattended-upgrades

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

Die Zeile //Unattended-Upgrade::Mail ""; suchen und auskommentieren und mit eurer E-Mailadresse ergänzen.

Unattended-Upgrade::Mail „info@beyond.lol“;

Für den automatischen Neustart folgende Zeilen anpassen
//Unattended-Upgrade::Automatic-Reboot „false“;
Unattended-Upgrade::Automatic-Reboot „true“;

//Unattended-Upgrade::Automatic-Reboot-Time „02:00“;
Unattended-Upgrade::Automatic-Reboot-Time „02:00“;

sudo unattended-upgrades –dry-run

Emby ohne Portnummer aufrufen (Apache Reverse Proxy)

Frei nach hier:

https://emby.media/community/index.php?/topic/61549-apache-proxy-frontend-for-emby/

a2enmod proxy
a2enmod proxy_http
a2enmod rewrite
a2enmod headers
a2enmod ssl
a2enmod http2

SSL Zertifikat von Letsencrypt (crytbot) und die Config aus dem Artikel anpassen, mit dem Zusatz fürs logging:

ErrorLog ${APACHE_LOG_DIR}/emby-error_log
LogFormat "%t \"%r\" %>s" common
CustomLog ${APACHE_LOG_DIR}/emby-access_log common

Windows 10 PE über PXE EFI

Ich möchte gerne Windows 10 über das Netzwerk installieren. Die Laptops haben ein Biospasswort was ich nicht kenne und starten nur im EFI Modus und mit SECURE BOOT enabled.

So hab ichs gelöst. Wir brauchen das Windows ADK in der für die aktuelle Windows 10 Version passenden Version (z.B. ist für 1909 das ADK 1903 das richtige) https://docs.microsoft.com/en-us/windows-hardware/get-started/adk-install

Eine aktuelle Version von tftpd32 (gerne in der 64 Bit Version) http://www.tftpd64.com/

Ausserdem ein Windows 10 ISO (MEDIA CREATION TOOL)

Wir halten uns lose an diese Anleitung von Microsoft, auch wenn die eigentlich für LEGACY BIOS Boot ausgelegt ist (auch wenn das da nicht steht) https://docs.microsoft.com/de-de/windows/deployment/configure-a-pxe-server-to-load-windows-pe

Wir installieren die Umgebung für die Bereitstellungs- und Imageerstellung des ADK.

Danach starten wir diese ALS ADMIN. Mit dem folgenden Befehl erstellen wir uns ein Windows PE für 64 BIT

copype.cmd amd64 C:\winpe_amd64

Anschließend laden wir das boot.wim, welches das eigentlich zu startende Windows enthält, in ein Verzeichnis ( C:\winpe_amd64\mount ) und stellen die Sprache um (ungetestet von hier )

Dism /mount-image /imagefile:c:\winpe_amd64\media\sources\boot.wim /index:1 /mountdir:C:\winpe_amd64\mount

dism /image:C:\winpe_amd64\mount /set-inputlocale:de-de;en-us

Wir entpacken nur TFTPD32 nach C:/tftpd32 und sehen zu, dass alle Dateien in diesem Ordner liegen und nicht in einem Unterordner. Anschließend erstellen wir im Ordner tftpd32 den Ordner TFTPDRoot (sodass wir den Ordner C:/tftpd32/tftpdroot erstellt haben). Diesen Ordner geben wir nun schreibend im Netzwerk frei. Das ist offensichtlich für Produktivumgebungen nicht so KLUK, aber für uns reichts.

Wir testen anschließend, ob wir uns mit diesem Laufwerk Verbinden können

net use y: \\PCNAME\TFTPDroot

Jetzt sollte unser Laufwerk Y: den Inhalt des Ordners TFTPDRoot anzeigen (in dem zur Zeit noch nichts drin ist.) Erstellen wir also schnell einen Ordner Boot. Anschließend kopieren wir einen Schwung Dateien aus dem Windows PE Verzeichnis in das TFTPDRoot/Boot und speichern die Änderung der Sprache in die boot.wim

copy c:\winpe_amd64\mount\windows\boot\pxe\*.* y:\Boot
copy c:\winpe_amd64\mount\windows\boot\EFI\bootmgfw.efi y:\Boot

dism /unmount-wim /mountdir:C:\winpe_amd64\mount /commit

copy C:\winpe_amd64\media\boot\boot.sdi y:\Boot
copy C:\winpe_amd64\media\Boot\Fonts y:\Boot\Fonts
copy C:\winpe_amd64\media\sources\boot.wim y:\Boot

Jetzt müssen wir den BCD Eintrag erstellen:

bcdedit /createstore c:\BCD
bcdedit /store c:\BCD /create {ramdiskoptions} /d "Ramdisk options" 
bcdedit /store c:\BCD /set {ramdiskoptions} ramdisksdidevice boot bcdedit /store c:\BCD /set {ramdiskoptions} ramdisksdipath \Boot\boot.sdi 
bcdedit /store c:\BCD /create /d "winpe boot Image efi" /application osloader

Der letzte Befehl gibt eine GUID zurück, z.B. {215fe947-3616-11ea-a770-d850e6d1308f}. Ihr müsst im folgenden Codeblock alle {GUID} durch EURE GUID ersetzen.

bcdedit /store c:\BCD /set {GUID} device ramdisk=[boot]\Boot\boot.wim,{ramdiskoptions} 

bcdedit /store c:\BCD /set {GUID} path \windows\system32\winload.efi 

bcdedit /store c:\BCD /set {GUID} osdevice ramdisk=[boot]\Boot\boot.wim,{ramdiskoptions} 

bcdedit /store c:\BCD /set {GUID} systemroot \windows

bcdedit /store c:\BCD /set {GUID} detecthal Yes

bcdedit /store c:\BCD /set {GUID} winpe Yes

bcdedit /store c:\BCD /create {bootmgr} /d "boot manager"

bcdedit /store c:\BCD /set {bootmgr} timeout 30 

bcdedit /store c:\BCD -displayorder {GUID} -addlast

Anschließend müssen wir die BCD Datei über das Netzwerk in den Bootordner kopieren

copy c:\BCD \\PCNAME\TFTPDRoot\Boot\BCD

Jetzt können wir prüfen ob wir alles richtig gemacht haben und uns den Inhalt der BCD Datei anzeigen lassen, z.B. mit

bcdedit /store C:\tftpd\tftpdroot\Boot\BCD /enum all
Windows Boot Manager
 identifier              {bootmgr}
 description             boot manager
 displayorder            {215fe947-3616-11ea-a770-d850e6d1308f}
                         
 timeout                 30
 
 Windows Boot Loader
 identifier              {215fe947-3616-11ea-a770-d850e6d1308f}
 device                  ramdisk=[boot]\Boot\boot.wim,{ramdiskoptions}
 path                    \windows\system32\winload.efi
 osdevice                ramdisk=[boot]\Boot\boot.wim,{ramdiskoptions}
 systemroot              \windows
 
 Setup Ramdisk Options
 identifier              {ramdiskoptions}
 description             Ramdisk options
 ramdisksdidevice        boot
 ramdisksdipath          \Boot\boot.sdi

So oder so ähnlich sollte es aussehen.

Dann haben wir es schon fast geschafft. Wir müssen nur noch kurz TFTPD32 starten und einstellen. Wir müssen unserem PC eine feste IP Adresse geben (192.168.123.1) und uns, wenn möglich, vom Internet trennen. Dann kann der zu installierenden Laptop entweder direkt (hat bei mir Probleme verursacht) oder über eine Switch angeschlossen werden.

Die Einstellungen für TFTPD32 sehen wie folgt aus:

Unter Logview und TFTP Server kann der Status der Installation dann verfolgt werden.

Nachdem die Windows PE Version dann gestartet ist, kann das Windows 10 ISO gemountet (Bereitgestellt) werden und dann über das Netzwerk freigegeben werden. Anschließend kann in der Windows PE Version per net use die Freigabe gemountet werden (Credentials werden dort abgefragt, wenn vorhanden) und die Windows Version per Setup.exe gestartet werden. Der Rest der Windowsinstallation ist dann wie gewohnt!

Raspi Kühlersteuerung

Mein Raspi wird ab zu zu warm… um das zu verhindern habe ich einen 5V Lüfter von Noctua erstanden ( https://noctua.at/de/nf-a4x10-5v ). Weiter brauchte ich einen NPN 107B Transistor und einen 650 Ohm Wiederstand.

Ich habe dann mit dem GPIO Pin 21 eine Schaltung gebaut, sodass ich über den Transistor den Lüfter schalten kann. (Berechnung VOrwiederstand Transistor: https://www.mikrocontroller.net/articles/Basiswiderstand ) Das scheint super zu laufen.

Zuerst müssen wir die GPIO Pins aktivieren


#gpio pins für die lüftersteuerung
 echo "21" > /sys/class/gpio/export
 echo "out" > /sys/class/gpio/gpio21/direction
 echo "1" > /sys/class/gpio/gpio21/value

Diese Zeilen habe ich auch der /etc/rc.local angefügt (vor das EXIT ), damit überlegt es wohl auch nen Neustart (yet to prove)

Ich habe das folgende Script geschrieben (/usr/bin/tempdaemon)


#!/bin/bash

while true; do
 # date;
  TC=$(awk '{printf("%.1f\n",$1/1e3)}' /sys/class/thermal/thermal_zone0/temp)
  BIGGER55=$(awk -v a="$TC" -v b="55.0" 'BEGIN{print(a>b)}')
  SMALLER45=$(awk -v a="$TC" -v b="45.0" 'BEGIN{print(a<b)}')

#   echo $TC;
#   echo $BIGGER55;
#   echo $SMALLER45;
  if [  $BIGGER55 == "1" ];  then
#       echo "Mehr als 55, Lüfter an";
        echo "1" > /sys/class/gpio/gpio21/value ;
        sleep 60;
  elif [ $SMALLER45 == "1" ]; then
        #Lüfter aus
#       echo "Lüfter aus";
        echo "0" > /sys/class/gpio/gpio21/value;
 else
#       echo "weder noch, sweetspot?!?";
        sleep 1;
  fi

  sleep 10;
done

Danach habe ich es ausführbar gemacht (sudo chmod +x /usr/bin/tempdaemon)

Anschließend habe ich die Servicedatei dafür geschrieben (sudo nano /etc/systemd/system/tempdaemon.service)


[Unit]
Description=Arnes Lüfterdaemon

[Service]
ExecStart=/usr/bin/tempdaemon
Restart=on-failure

[Install]
WantedBy=multi-user.target

Und dann den Service enabled (damit er nach nem neustart automatisch mitstartet) und ihn einmal von hand gestartet

sudo systemctl enable tempdaemon
sudo systemctl start tempdaemon

Ausserdem habe ich mir zwei aliase in die ~/.bash_alias eingefügt, mit denen ich die aktuelle temperatur und den zustand des lüfters beobachten kann.


alias temp='/opt/vc/bin/vcgencmd measure_temp'
alias lufter='cat /sys/class/gpio/gpio21/value'

pxe uefi boot für ubuntu

Dazu muss noch der /srv/tftpd/ chmod 0777 und die nfs freigabe auch. und ein symlink für den ordner cdrom in den bionic ordner ln -s . cdrom

dnsmasq:

filterwin2k #?
interface=eno1 #welche netzwerkkarte wird gebraucht
listen-address=127.0.0.1,192.168.0.1