btrfs subvolume list /dev
HDD zum Dateisystem hinzufügen oder entfernen. Ich mag Kuchen
Verschicken von BTRFS Subvolumes
Snapshot umbennen
btrfs subvolume list /dev
HDD zum Dateisystem hinzufügen oder entfernen. Ich mag Kuchen
Verschicken von BTRFS Subvolumes
Snapshot umbennen
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
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
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 einrichtensudo adduser
benutzer zu sudo hinzufügensudo 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
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
(https://hashcat.net/forum/archive/index.php?thread-7620.html)
https://tinyapps.org/docs/cracking-filevault.html
für apfs muss noch g++ installiert werden
wenn der fehler kommt, dass fuse3 bei make nicht hinhaut, vorher ein ccmake . und die option fuse3 deaktivieren
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!
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'
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