zaterdag 11 april 2026

Grub 2 dedicated menu met chainloading op een UEFI systeem

We gaan een dedicated grub configuratie maken om een standaard opstart menu te krijgen waarbinnen zowel verschillende linux distributies als een geïnstalleerde windows partritie kan worden aangeroepen.

Ik ga er van uit dat je een NVM SSD in het systeem hebt.

De eerste partitie wordt daarin aangeduid met /dev/nvme0n1p1

Als je een gewone harddisk of SSD hebt, dan heeft deze de naam /dev/sda en de eerste partitie /dev/sda1

In dat geval vervang je nvme0n1 voor sda en nvme0n1p1 voor sda1

In deze uitleg ga ik er van uit dat je in een werkende Linux Mint omgeving werkt. Ik gebruik het liefste xed om tekstfiles te bewerken. in plaats van xed kun je ook nano in de terminal gebruiken. Vervang in ieder commando "xed"in "nano". Als je een gnome omgeving gebruikt kun je gedit gebruiken en in kde kedit. De teksteditor nano werkt altijd.

Een dedicated GRUB partitie met een onaantastbaar hoofdmenu moet je zo zien:
De PC start op met een keurig hoofdmenu dat verwijst naar verschillende operating systemen. Ieder OS heeft een eigen opstarter. Het hoofdmenu laad alleen de OS starters.
Belangrijk om te weten is dat GRUB een andere notatie van drives en partities hanteert dan Linux:

GRUB gebruikt andere notatie:

Linux           GRUB
/dev/nvme0n1p5 of /dev/sda5            (hd0,gpt5)
/dev/nvme0n1p9 of /dev/sda9            (hd0,gpt9)

GRUB moet niet in de EFI partitie worden gezet. GRUB installaties worden daar vaak overschreven door updates van WINDOWS. In plaats van (hd0,gpt5) kan ook gebruik genaaklt worden van de UUID van de betreffende partitie. Dat is robuster als je later nieuwe partities tussenvoegt en de partitie volgnummers wijzigen.

Ik maak een dedicated grub partitie aan in /dev/nvme0n1p9 en geeft deze een FAT32 indeling. Dat doe je het gemakkelijkst met een programma zoals GParted. Kies een ruimte van zo'n 100Mb achteraan in de partitieschema's. 

In de EFI structuur doen we dit:

EFI/
  Boot/
  Microsoft/
  ubuntu/

En op de dedicated GRUBpartitie /dev/nvme0n1p9 doen we net alsof daar een volwaardige linux staat. Met dit verschil dat we het grub menu in grub.cfg handmatig kunnen aanpassen en eenvoudig mooie namen kunnen geven aan onze besturingssystemen.

Om alles robuust te houden gebruiken we niet hd0,gptx, maar de UUID nummers van de partities. Als je later een partitie tussenvoegt en de partitie volgnummers wijzigen zal het OS toch de juiste partitie blijven vinden.

Ik ga er van uit dat het programma efibootmgr is geinstalleerd. Zo niet:

sudo apt install efibootmgr

Installeren

In Linux Mint verwijst /boot/efi naar: nvme0n1p1 en die behoeven we daarom niet apart te mounten. De dedicated grub partitie die we eerder hebben aangemaakt mounten we wel apart met:

sudo mkdir -p /mnt/master-efi
sudo mount /dev/nvme0n1p9 /mnt/master-efi

Let erop dat je de juiste naam gebruikt als jouw partitie niet /dev/nvme0n1p9 is

In de dedicated GRUB partitie gaan we deze structuur plaatsen: 

EFI/
├── BOOT/
│   └── BOOTX64.EFI          ← fallback → jouw GRUB
├── MASTER/
│   ├── grubx64.efi          ← GRUB binary
│   ├── grub.cfg             ← loader (klein!)
│   └── grub_main.cfg        ← jouw echte menu
├── Microsoft/
└── (eventueel ubuntu_backup)

We geven in de terminal de volgende opdracht:

sudo grub-install \
  --target=x86_64-efi \
  --efi-directory=/boot/efi \
  --bootloader-id=MASTER \
  --recheck

Daarmee wordt het volgende bestand aangemaakt:
/boot/efi/EFI/MASTER/grubx64.efi

We plaatsen nu ons eigen dedicated hoofdmenu:

sudo xed /boot/efi/EFI/MASTER/grub_main.cfg

en plakken daarin:

set timeout=30
set default=1

# ---- Windows 11 ----
menuentry "Windows 11" {
    insmod part_gpt
    insmod fat
    search --no-floppy --fs-uuid --set=root F811-D6D1
    chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

# ---- Linux entries ----
menuentry "Linux Mint 22.3" {
    insmod ext2
    search --no-floppy --fs-uuid --set=root c079e007-51a4-41b2-a736-16108b16a840
    configfile /boot/grub/grub.cfg
}

menuentry "Linux Mint 22.3 voor AI server" {
    insmod ext2
    search --no-floppy --fs-uuid --set=root a43f95de-a0df-488d-99e8-64bb67f1c79d
    configfile /boot/grub/grub.cfg
}

# ---- UEFI/BIOS Setup ----
menuentry "UEFI firmware setup" {
    fwsetup
}

# ---- Extra opties ----
menuentry "Reboot" {
    reboot
}

menuentry "Power Off" {
    halt
}


Let op dat je zelf de juiste UUID nummers gebruikt en niet de mijne klakkeloos overneemt. De getallen achter --set=root moeten dus direct vanuit jouw systeem gekopieerd worden. De UUID van een windows stseem bestaat uit 4-4 tekens.
Voor EXT4 bestandssystemen voor Linux is dat nummer aanzienlijk langer en bestaat dat uit 8-4-4-4-12 tekens.

Nu maken we een loader aan:

sudo xed /boot/efi/EFI/MASTER/grub.cfg

en plakken daarin:

search --fs-uuid --set=root F811-D6D1
set prefix=($root)/EFI/MASTER
configfile $prefix/grub_main.cfg

Hierna stellen we een  terugvaloptie in:

sudo cp /boot/efi/EFI/MASTER/grubx64.efi \ /boot/efi/EFI/BOOT/BOOTX64.EFI


Dit zorgt er voor dat het blijft werken na een BIOS reset, windows installatie of per ongeluk wissen van boot entries.

Nu maken we een boot entry:

sudo efibootmgr -c \
  -d /dev/nvme0n1 \
  -p 1 \
  -L "MASTER GRUB" \
  -l '\EFI\MASTER\grubx64.efi'

We checken de boot volgorde:

efibootmgr

Onthoud het nummer van onze nieuwe MASTER GRUB entry. We passen de bootvolgorde eventueel aan zodat onze entry als eerste bekeken wordt:

sudo efibootmgr -o XXXX,....

Waarbij XXXX het nummer van onze MASTER GRUB is. De andere nummers plaatsen we direct daarachter gescheiden door een komma.
Bijvoorbeeld:

sudo efibootmgr -o 0005,0000,0003,0004,0002

Daarna verwijderen we de oude GRUB naar een backup plaats.

sudo mv /boot/efi/EFI/ubuntu /boot/efi/EFI/ubuntu_backup

zodat linux updates deze setup niet kunnen overschrijven.

Als je nu reboot moet je als het goed is jouw nieuwe menu zien en kunnen booten in iedere entry. na een update van een van de linuxen of windows moet het blijven werken.

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

ALLEEN GEBRUIKEN ALS BOVENSTAAND NIET WERKT
Deze versie werkt met iets andere namen en werkt momenteel op mijn systeem.
________________________________________________________________________

We gaan een dedicated grub configuratie maken om een standaard opstart menu te krijgen waarbinnen zowel verschillende linux distributies als een geïnstalleerde windows partritie kan worden aangeroepen.

Ik ga er van uit dat je een NVM SSD in het systeem hebt.

De eerste partitie wordt daarin aangeduid met /dev/nvme0n1p1

Als je een gewone harddisk of SSD hebt, dan heeft deze de naam /dev/sda en de eerste partitie /dev/sda1

In dat geval vervang je nvme0n1 voor sda en nvme0n1p1 voor sda1

In deze uitleg ga ik er van uit dat je in een werkende Linux Mint omgeving werkt. Ik gebruik het liefste xed om tekstfiles te bewerken. in plaats van xed kun je ook nano in de terminal gebruiken. Vervang in ieder commando "xed"in "nano". Als je een gnome omgeving gebruikt kun je gedit gebruiken en in kde kedit. De teksteditor nano werkt altijd.

Een dedicated GRUB partitie met een onaantastbaar hoofdmenu moet je zo zien:
De PC start op met een keurig hoofdmenu dat verwijst naar verschillende operating systemen. Ieder OS heeft een eigen opstarter. Het hoofdmenu laad alleen de OS starters.
Belangrijk om te weten is dat GRUB een andere notatie van drives en partities hanteert dan Linux:
GRUB gebruikt andere notatie:


Linux                                       GRUB
/dev/nvme0n1p5 of /dev/sda5             (hd0,gpt5)
/dev/nvme0n1p9 of /dev/sda9             (hd0,gpt9)

GRUB moet niet in de EFI partitie worden gezet. GRUB installaties worden daar vaak overschreven door updates van WINDOWS. In plaats van (hd0,gpt5) kan ook gebruik genaaklt worden van de UUID van de betreffende partitie. Dat is robuster als je later nieuwe partities tussenvoegt en de partitie volgnummers wijzigen.

Ik maak een dedicated grub partitie aan in /dev/nvme0n1p9 en geeft deze een FAT32 indeling. Dat doe je het gemakkelijkst met een programma zoals GParted. Kies een ruimte van zo'n 100Mb achteraan in de partitieschema's. 

In de EFI structuur doen we dit:

EFI/
  Boot/
  Microsoft/
  ubuntu/

En op de dedicated GRUBpartitie /dev/nvme0n1p9 doen we net alsof daar een volwaardige linux staat. Met dit verschil dat we het grub menu in grub.cfg handmatig kunnen aanpassen en eenvoudig mooie namen kunnen geven aan onze besturingssystemen.

Om alles robuust te houden gebruiken we niet hd0,gptx, maar de UUID nummers van de partities. Als je later een partitie tussenvoegt en de partitie volgnummers wijzigen zal het OS toch de juiste partitie blijven vinden.

Ik ga er van uit dat het programma efibootmgr is geinstalleerd. Zo niet:

sudo apt install efibootmgr

Installeren

In Linux Mint verwijst /boot/efi naar: nvme0n1p1 en die behoeven we daarom niet apart te mounten. De dedicated grub partitie die we eerder hebben aangemaakt mounten we wel apart met:

sudo mkdir -p /mnt/master-efi
sudo mount /dev/nvme0n1p9 /mnt/master-efi
Let erop dat je de juiste naam gebruikt als jouw partitie niet /dev/nvme0n1p9 is

In de dedicated GRUB partitie gaan we deze structuur plaatsen: 

EFI/
├── BOOT/
│   ├── BOOTX64.EFI          ← fallback → jouw GRUB
│   └── grub.cfg             ← loader (klein!)
├── MASTER/
│   ├── grubx64.efi          ← GRUB binary
│   └── grub.cfg             ← jouw echte menu
├── Microsoft/
└── (eventueel ubuntu_backup)

We geven in de terminal de volgende opdracht:

sudo grub-install \
  --target=x86_64-efi \
  --efi-directory=/boot/efi \
  --bootloader-id=MASTER \
  --recheck

Daarmee wordt het volgende bestand aangemaakt:
/boot/efi/EFI/MASTER/grubx64.efi

We plaatsen nu ons eigen dedicated hoofdmenu:

sudo xed /boot/efi/EFI/MASTER/grub.cfg

en plakken daarin:

set timeout=30
set default=1

# ---- Windows 11 ----
menuentry "Windows 11" {
    insmod part_gpt
    insmod fat
    search --no-floppy --fs-uuid --set=root F811-D6D1
    chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

# ---- Linux entries ----
menuentry "Linux Mint 22.3" {
    insmod ext2
    search --no-floppy --fs-uuid --set=root c079e007-51a4-41b2-a736-16108b16a840
    configfile /boot/grub/grub.cfg
}

menuentry "Linux Mint 22.3 voor AI server" {
    insmod ext2
    search --no-floppy --fs-uuid --set=root a43f95de-a0df-488d-99e8-64bb67f1c79d
    configfile /boot/grub/grub.cfg
}

# ---- UEFI/BIOS Setup ----
menuentry "UEFI firmware setup" {
    fwsetup
}

# ---- Extra opties ----
menuentry "Reboot" {
    reboot
}

menuentry "Power Off" {
    halt
}


Let op dat je zelf de juiste UUID nummers gebruikt en niet de mijne klakkeloos overneemt. De getallen achter 
--set=root
moeten dus direct vanuit jouw systeem gekopieerd worden. De UUID van een windows stseem bestaat uit 4-4 tekens. Voor EXT4 bestandssystemen voor Linux is dat nummer aanzienlijk langer en bestaat dat uit 8-4-4-4-12 tekens.

Nu maken we een loader aan:

sudo xed /boot/efi/EFI/BOOT/grub.cfg

en plakken daarin:

search --fs-uuid --set=root F811-D6D1
set prefix=($root)/EFI/MASTER
configfile $prefix/grub.cfg

Hierna stellen we een  terugvaloptie in:

sudo cp /boot/efi/EFI/MASTER/grubx64.efi \ /boot/efi/EFI/BOOT/BOOTX64.EFI


Dit zorgt er voor dat het blijft werken na een BIOS reset, windows installatie of per ongeluk wissen van boot entries.

Nu maken we een boot entry:

sudo efibootmgr -c \
  -d /dev/nvme0n1 \
  -p 1 \
  -L "MASTER GRUB" \
  -l '\EFI\MASTER\grubx64.efi'

We checken de boot volgorde:

efibootmgr

Onthoud het nummer van onze nieuwe MASTER GRUB entry. We passen de bootvolgorde eventueel aan zodat onze entry als eerste bekeken wordt:

sudo efibootmgr -o XXXX,....

Waarbij XXXX het nummer van onze MASTER GRUB is. De andere nummers plaatsen we direct daarachter gescheiden door een komma.

Bijvoorbeeld:
sudo efibootmgr -o 0005,0000,0003,0004,0002

Daarna verwijderen we de oude GRUB naar een backup plaats.

sudo mv /boot/efi/EFI/ubuntu /boot/efi/EFI/ubuntu_backup

zodat linux updates deze setup niet kunnen overschrijven.

Als je nu reboot moet je als het goed is jouw nieuwe menu zien en kunnen booten in iedere entry. na een update van een van de linuxen of windows moet het blijven werken.






dinsdag 7 april 2026

UEFI Boot volgorde aanpassen

Om de opstartschema's (boot entries) in het UEFI BIOS te hernoemen, zodat je duidelijk kunt zien welke entry bij welk besturingssysteem hoort, kun je de efibootmgr-tool gebruiken. Deze tool laat je toe om UEFI boot entries te beheren, inclusief het hernoemen, verwijderen en wijzigen van de volgorde.

Dit heb je nodig als je een dedicated grub menu hebt gemaakt die in een aparte partitie staat en onafhankelijk is van andere geinstalleerde operating systems.

Stap 1: Installeer efibootmgr (indien niet aanwezig)

sudo apt update sudo apt install efibootmgr

Stap 2: Bekijk de huidige UEFI boot entries


sudo efibootmgr -v

Je ziet een lijst met entries, bijvoorbeeld:

Boot0000* ubuntu Boot0001* Windows Boot Manager Boot0002* grub_p5 Boot0003* grub_p7

Elke entry heeft een
BootXXXX-nummer (bijv. Boot0000),
een naam (bijv.
ubuntu) en een pad naar de EFI-bestanden.

Stap 3: Maak een nieuwe UEFI boot entry

Gebruik het volgende commando om een entry te hernoemen.
Vervang BootXXXX door het nummer van de entry die je wilt
hernoemen en geef een nieuwe naam op.

Voorbeeld: Hernoem Boot0000 van "ubuntu" naar "Linux Mint 22.2".

Je moet eerst een nieuwe maken en kunt dan eventueel de oude verwijderen.

Bijvoorbeeld:

sudo efibootmgr -c -L "Linux Mint 22.2" -l /EFI/ubuntu/grubx64.efi

Uitleg van de opties:

  • -c: Maak een nieuwe boot entry aan (je kunt geen bestaande entry direct hernoemen, dus je maakt een nieuwe met dezelfde EFI-bestanden en verwijdert de oude).
  • -L: De nieuwe naam voor de boot entry.
  • -l: Het pad naar het EFI-bestand (gebruik dubbele backslashes: \\).

Belangrijk:

  • Het pad naar het EFI-bestand moet exact overeenkomen met wat je ziet in de uitvoer van efibootmgr -v.
  • Als je een nieuwe entry maakt, kun je de oude verwijderen (zie Stap 4).

Om de opstartschema's (boot entries) in het UEFI BIOS te hernoemen, zodat je duidelijk kunt zien welke entry bij welk besturingssysteem hoort, kun je de efibootmgr-tool gebruiken. Deze tool laat je toe om UEFI boot entries te beheren, inclusief het hernoemen, verwijderen en wijzigen van de volgorde.

Stap 4: Stel de boot volgorde in (optioneel)

Als je de volgorde van de boot entries wilt wijzigen, 
check eerst met:

sudo efibootmgr -v

gebruik dan:

sudo efibootmgr -o XXXX,YYYY,ZZZZ
bijvoorbeeld:
sudo efibootmgr -o 0001,0004,0002

Om de juiste als eerste te plaatsen. In principe wordt de eerste entry opgestart.
De boot/grub die daarin is geplaatst bepaalt welk opstartmenu het eerste wordt getoond.
De andere worden normaliter niet gebruik

Stap 5: Controleer de gewijzigde UEFI boot entries

Voer opnieuw uit om te controleren of de wijzigingen zijn doorgevoerd:

sudo efibootmgr -v

Check nu eerst op het opstartmenu goed werkt door de PC te herstarten.

Stap 6: Verwijder een oude UEFI boot entry(optioneel)

Start de PC eerst op om te testen of de nieuwe entry werkt.
Bekijk dan eerst welke er nu zijn:

sudo efibootmgr -v

Als je een nieuwe entry hebt gemaakt en de oude wilt verwijderen, gebruik dan:

sudo efibootmgr -b BootXXXX -B

Vervang
BootXXXX door het nummer van de entry die je wilt verwijderen.

bijvoorbeeld

sudo efibootmgr -b 0004 -B

Ik adviseer om de bootentry voor windows NOOIT te verwijderen,
maar als tweede (of derde) entry te laten staan.

woensdag 25 maart 2026

Eigen afbeelding van een Bottle library item

De afbeelding voorbereiden: Maak een PNG-afbeelding (bij voorkeur 600x900 pixels) voor uw applicatie.

De map Grids zoeken: Navigeer naar uw bottles-directory. Deze bevindt zich meestal (Flatpak) op:

~/.var/app/com.usebottles.bottles/data/bottles/ 

Map grids aanmaken/openen: Controleer in die map of er een map met de naam grids bestaat. Zo niet, maak deze dan aan.

Afbeelding plaatsen: Verplaats uw PNG-bestand naar de map grids.


~/.var/app/com.usebottles.bottles/data/bottles/library.yml bewerken:

Open het bestand library.yml in de hoofdmap van bottles.

Zoek de vermelding die overeenkomt met uw bottle.


Voeg de eigenschap icon toe of wijzig deze zodat deze verwijst naar uw nieuwe PNG-bestand.


Voorbeeld van een : 

349bf4f7-a6eb-46eb-bac2-d66a7b98790c:

  bottle:
    name: Reolink camera
    path: Reolink-camera
  icon: /home/jeroen/.var/app/com.usebottles.bottles/data/bottles/bottles/Reolink-camera/icons/Reolink.png
  id: 8528fb1b-e3dd-4917-8c56-e12186215d55
  name: Reolink
  thumbnail: grid:8af7dd91-5364-40ee-9b54-a7d007ba844f.png
c00f650f-ae1f-47df-9d2b-49ef0bc4f602:
  bottle:
    name: PDFXchange
    path: PDFXchange
  icon: /home/jeroen/.var/app/com.usebottles.bottles/data/bottles/bottles/PDFXchange/icons/PDFXEdit.png
  id: 3015d20d-97d4-4bd9-8a78-141f7d118162
  name: PDFXEdit
  thumbnail: grid:pdfxchange.png


Bottles opnieuw opstarten: Sluit en heropen Bottles om de wijzigingen te zien.

dinsdag 24 maart 2026

Network share beschikbaar stellen aan Bottles

 Bottles is een programma dat via Flatpak geinstalleerd kan worden en waarmee het heel eenvoudig is om windows programma's onde rlinux te installeren en uitvoeren.


Omdat Flatpak standaard geen toegang heeft tot netwerk shares moet daar een workaround voor worden gemaakt. We maken in dit voorbeeld een koppeling met de naam QNAP-media naar een map op een QNAP NAS met IPnr 192.168.178.29 met gebruiker voorbeeld die als gebruikersnummer 1000 heeft.

pas die nummers en namen aan afhankelijk van jouw situatie:

  1. Maak een map in je home-directory (bijv. netwerk):
    mkdir ~/netwerk
  2. Maak een symlink van het originele pad naar deze nieuwe map door een terminal te openen in de betreffende map:
    ln -s "/run/user/1000/gvfs/smb-share:server=192.168.178.29,share=media,user=voorbeeld" ~/netwerk
  3. Pas de naam van de snelkoppeling aan naar QNAP-media en geef Bottles toegang tot de symlink:

    mv smb-share:server=192.168.178.29,share=media,user=voorbeeld QNAP-media
    flatpak
    override <com.usebottles.bottles> --filesystem=~/netwerk/QNAP-media

    of gebruik Flatseal en voeg het nieuwe zoekpad ik als extra filesystem


    De netwerkschijf is nu te vinden onder:
    /home/voorbeeld/netwerk

woensdag 31 december 2025

SFTP instellen op een Linux Mint 22.2

Eenvoudige setup

Eenvoudig een FTP server instellen op een Linux mint nachine gaat met het programma:

usermode FTP server

Deze is als flatpak vanuit het programmabeheer te installeren.

Voer de credentials in waarmee de server te benaderen is. Kies vervolgens het filesystem dat je wilt delen. Stel in of het lezen en schrijven is of alleen lezen.

In het hoofdstuk networking kies je de poort weaarop de server benaderbaar is en het protocol dat gebruikt gaat worden. 

Start de server.


Nadeel is dat dit programma slechts een map met submappen deelbaar maakt via FTP. Het werkt echter al maanden storingsvrij op mijn systeem.


Uitgebreide ingewikkelde setup

De casus is alsvolgt: Ik draai CasaOS op een linux mint 22.2 machine  waarop CasaOS draait met docker containers. Ik wil toegang tot enkele mappen hebben via sftp met de gewone gebruiker of met een  speciale sftpuser. De dockers moeten ook toegang behouden tot de mappen.

De mappen die ik wil delen zijn:

/media/Disk3-3Tb
/media/Disk2-6Tb
/media/Kingston480

Eerst maken we een groep voor gedeelde toegang:

sudo groupadd storage

Voeg gebruikers toe aan de groep

sudo usermod -aG storage user1
sudo usermod -aG storage sftpuser
sudo usermod -aG storage user2  # andere gebruikers die toegang moeten


Maak SFTP-only gebruiker

sudo adduser sftpuser
sudo usermod -s /usr/sbin/nologin sftpuser


Maak chroot-structuur voor SFTP


sudo mkdir -p /srv/sftp/sftpuser
sudo chown root:root /srv/sftp
sudo chmod 755 /srv/sftp
sudo chown root:root /srv/sftp/sftpuser
sudo chmod 755 /srv/sftp/sftpuser

Maak zichtbare mappen voor SFTP

sudo mkdir /srv/sftp/sftpuser/Disk3-3Tb
sudo mkdir /srv/sftp/sftpuser/Disk2-6Tb
sudo mkdir /srv/sftp/sftpuser/Kingston480
sudo chown root:root /srv/sftp/sftpuser/*

Bind-mount de echte USB-schijven

sudo mount --bind /media/Disk3-3Tb /srv/sftp/sftpuser/Disk3-3Tb
sudo mount --bind /media/Disk2-6Tb /srv/sftp/sftpuser/Disk2-6Tb
sudo mount --bind /media/Kingston480 /srv/sftp/sftpuser/Kingston480

Eigenaarschap en rechten op de echte schijven

sudo chown -R root:storage /media/Disk3-3Tb
sudo chown -R root:storage /media/Disk2-6Tb
sudo chown -R root:storage /media/Kingston480

sudo chmod -R 2770 /media/Disk3-3Tb
sudo chmod -R 2770 /media/Disk2-6Tb
sudo chmod -R 2770 /media/Kingston480

ACL’s voor Docker (PUID/PGID 1000)

sudo setfacl -R -m g:1000:rwx /media/Disk3-3Tb
sudo setfacl -R -m g:1000:rwx /media/Disk2-6Tb
sudo setfacl -R -m g:1000:rwx /media/Kingston480

sudo setfacl -R -d -m g:1000:rwx /media/Disk3-3Tb
sudo setfacl -R -d -m g:1000:rwx /media/Disk2-6Tb
sudo setfacl -R -d -m g:1000:rwx /media/Kingston480

SSH configuratie voor SFTP-only gebruiker


sudo -H xed /etc/ssh/sshd_config

Voeg onderaan toe:

Match User sftpuser
    ChrootDirectory /srv/sftp
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

Sla op en verlaat xed en herstart SSH:

sudo systemctl restart ssh

Permanent maken van bind mounts


sudo -H xed /etc/fstab

voeg deze regels toe:

/media/Disk3-3Tb    /srv/sftp/sftpuser/Disk3-3Tb    none    bind    0 0
/media/Disk2-6Tb    /srv/sftp/sftpuser/Disk2-6Tb    none    bind    0 0
/media/Kingston480  /srv/sftp/sftpuser/Kingston480  none    bind    0 0

Controle


# Rechtencheck
getfacl /media/Disk3-3Tb
ls -ld /media/Disk3-3Tb /media/Disk2-6Tb /media/Kingston480

# Test SFTP
sftp sftpuser@IP-ADRES

# Test Docker
docker exec -it <container> sh
touch /media/Disk3-3Tb/test.txt

# Test andere gebruikers
su - user2
touch /media/Disk3-3Tb/test2.txt

Eindresultaat:

  • SFTP-user alleen SFTP

  • user1 + andere gebruikers RW

  • Docker PUID/PGID 1000 RW

  • Nieuwe bestanden automatisch juiste groep en rechten

  • Veilig, geen 777


Alles in een script:

Maak een nieuw bestand aan:

xed install-ftps.sh

en voeg dit daarin in:

#!/bin/bash
# Setup SFTP met verwijderrechten, chroot veilig, Docker toegang

# --- Configuratie ---
SFTP_USER="sftpuser"
GROUP="storage"
DOCKER_GID=1000
CHROOT_BASE="/srv/sftp"
SHARES=("/media/Disk3-3Tb" "/media/Disk2-6Tb" "/media/Kingston480")
OTHER_USERS=("jeroen" "quinnten") # pas aan indien nodig

# --- 1️⃣ Maak groep storage ---
if ! getent group $GROUP > /dev/null; then
    sudo groupadd $GROUP
fi

# --- 2️⃣ Voeg gebruikers toe aan storage ---
for user in "${OTHER_USERS[@]}" "$SFTP_USER"; do
    sudo usermod -aG $GROUP $user
done

# --- 3️⃣ SFTP-only gebruiker ---
if ! id -u $SFTP_USER > /dev/null 2>&1; then
    sudo adduser $SFTP_USER
    sudo usermod -s /usr/sbin/nologin $SFTP_USER
fi

# --- 4️⃣ Chroot map ---
sudo mkdir -p $CHROOT_BASE/$SFTP_USER
sudo chown root:root $CHROOT_BASE
sudo chmod 755 $CHROOT_BASE
sudo chown root:root $CHROOT_BASE/$SFTP_USER
sudo chmod 755 $CHROOT_BASE/$SFTP_USER

# --- 5️⃣ Maak submappen in chroot voor SFTP ---
for SHARE in "${SHARES[@]}"; do
    BASENAME=$(basename $SHARE)
    sudo mkdir -p $CHROOT_BASE/$SFTP_USER/$BASENAME
    sudo chown root:root $CHROOT_BASE/$SFTP_USER/$BASENAME
done

# --- 6️⃣ Bind-mount de echte schijven ---
for SHARE in "${SHARES[@]}"; do
    BASENAME=$(basename $SHARE)
    sudo mount --bind $SHARE $CHROOT_BASE/$SFTP_USER/$BASENAME
done

# --- 7️⃣ Eigenaarschap en rechten op de echte schijven ---
for SHARE in "${SHARES[@]}"; do
    # Owner = SFTP-user, groep = storage
    sudo chown -R $SFTP_USER:$GROUP $SHARE
    # setgid + RW voor owner en groep
    sudo chmod -R 2770 $SHARE
done

# --- 8️⃣ ACL voor Docker PUID/PGID=1000 ---
for SHARE in "${SHARES[@]}"; do
    sudo setfacl -R -m g:$DOCKER_GID:rwx $SHARE
    sudo setfacl -R -d -m g:$DOCKER_GID:rwx $SHARE
done

# --- 9️⃣ SSH configuratie voor SFTP-only ---
SSHD_CONF="/etc/ssh/sshd_config"
if ! grep -q "Match User $SFTP_USER" $SSHD_CONF; then
    sudo bash -c "cat >> $SSHD_CONF" <<EOL

Match User $SFTP_USER
    ChrootDirectory $CHROOT_BASE
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no
EOL
    sudo systemctl restart ssh
fi

# --- 🔟 Permanent bind mounts in fstab ---
FSTAB="/etc/fstab"
for SHARE in "${SHARES[@]}"; do
    BASENAME=$(basename $SHARE)
    ENTRY="$SHARE $CHROOT_BASE/$SFTP_USER/$BASENAME none bind 0 0"
    if ! grep -q "$CHROOT_BASE/$SFTP_USER/$BASENAME" $FSTAB; then
        echo "$ENTRY" | sudo tee -a $FSTAB
    fi
done

echo "✅ Setup voltooid: SFTP verwijderrechten, chroot veilig, Docker en groep toegang ingesteld."



Sla deze tekst op in een tekstbestand:

xed setup_sftp.sh
chmod +x setup_sftp.sh
sudo ./setup_sftp.sh

Wat dit script doet

  • Groep storage aanmaken en gebruikers toevoegen

  • SFTP-only gebruiker aanmaken (/usr/sbin/nologin)

  • Chroot en SFTP-mappen maken

  • Bind mounts naar de echte USB-schijven

  • Eigenaarschap + 2770 + setgid instellen

  • ACL’s voor Docker PGID=1000 instellen

  • SSH configuratie voor SFTP-only

  • Bind mounts permanent in /etc/fstab

Nu zijn er systemen zoals de QNAP nas die niet kunnen schrijven en lezen van een sftp systeem. Die kunnen alleen ftp of ftps aan. Dan moet alles anders worden ingericht:

Daar moet op een andere manier toegang voor gecreeërd worden via FTP of FTPS

We beginnen bij het begin, sla onderdleen over die je al gedaan hebt:

Installeer vsftpd

sudo apt update
sudo apt install -y vsftpd

Maak FTPS-only gebruiker:

sudo adduser ftpuser
sudo usermod -s /usr/sbin/nologin ftpuser
sudo usermod -aG storage ftpuser

Chroot map voor FTP:

sudo mkdir -p /srv/ftp/ftpuser
sudo chown root:root /srv/ftp
sudo chmod 755 /srv/ftp
sudo chown root:root /srv/ftp/ftpuser
sudo chmod 755 /srv/ftp/ftpuser

Maak submappen voor bind mounts:

sudo mkdir -p /srv/ftp/ftpuser/Disk3-3Tb
sudo mkdir -p /srv/ftp/ftpuser/Disk2-6Tb
sudo mkdir -p /srv/ftp/ftpuser/Kingston480
sudo chown root:root /srv/ftp/ftpuser/*

Bind mounts van de echte schijven:

sudo mount --bind /media/Disk3-3Tb /srv/ftp/ftpuser/Disk3-3Tb
sudo mount --bind /media/Disk2-6Tb /srv/ftp/ftpuser/Disk2-6Tb
sudo mount --bind /media/Kingston480 /srv/ftp/ftpuser/Kingston480

Eigenaarschap en rechten op de echte mappen

sudo chown -R ftpuser:storage /media/Disk3-3Tb
sudo chown -R ftpuser:storage /media/Disk2-6Tb
sudo chown -R ftpuser:storage /media/Kingston480

sudo chmod -R 2770 /media/Disk3-3Tb
sudo chmod -R 2770 /media/Disk2-6Tb
sudo chmod -R 2770 /media/Kingston480

ACL voor Docker PUID/PGID=1000:

sudo setfacl -R -m g:1000:rwx /media/Disk3-3Tb
sudo setfacl -R -m g:1000:rwx /media/Disk2-6Tb
sudo setfacl -R -m g:1000:rwx /media/Kingston480

sudo setfacl -R -d -m g:1000:rwx /media/Disk3-3Tb
sudo setfacl -R -d -m g:1000:rwx /media/Disk2-6Tb
sudo setfacl -R -d -m g:1000:rwx /media/Kingston480

Configureer vsftpd voor FTPS. Bewerk /etc/vsftpd.conf:

sudo -H xed /etc/vsftpd.conf

en voeg dit in in de plaats van de oude tekst:

listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
user_sub_token=$USER
local_root=/srv/ftp/$USER
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
pasv_min_port=40000
pasv_max_port=50000

en sla dit bestand op en verlaat xed.

Maak SSL-certificaat:

sudo mkdir -p /etc/ssl/private
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/ssl/private/vsftpd.pem \
  -out /etc/ssl/private/vsftpd.pem \
  -subj "/C=NL/ST=Noord-Holland/L=Amsterdam/O=Home/OU=IT/CN=localhost"

Herstart vsftpd

sudo systemctl restart vsftpd

Permanent bind mounts in fstab:

sudo -H xed /etc/fstab

en voeg deze regels toe:

/media/Disk3-3Tb    /srv/ftp/ftpuser/Disk3-3Tb    none    bind    0 0
/media/Disk2-6Tb    /srv/ftp/ftpuser/Disk2-6Tb    none    bind    0 0
/media/Kingston480  /srv/ftp/ftpuser/Kingston480  none    bind    0 0

en sla dit bestand weer op en verlaat Xed.

SFTP en FTPS delen nu dezelfde fysieke mappen.
Rechten via groep storage en ACL’s voor Docker blijven geldig.
Chroot-mappen blijven root:root, veilig.
Gebruik altijd FTPS (TLS), want gewone FTP stuurt wachtwoorden onveilig.

Als je dit in een script wilt hebben doe dan:
Maak een nieuw bestand aan:

xed install-ftps.sh

en voeg dit daarin in:

#!/bin/bash
# Setup FTPS (vsftpd) voor gedeelde USB-mappen
# Veilig, gedeelde rechten met SFTP en Docker

# --- Configuratie ---
FTP_USER="ftpuser"
GROUP="storage"
DOCKER_GID=1000
CHROOT_BASE="/srv/ftp"
SHARES=("/media/Disk3-3Tb" "/media/Disk2-6Tb" "/media/Kingston480")
OTHER_USERS=("user1" "user2") # pas aan indien nodig

# --- 1️⃣ Install vsftpd ---
sudo apt update
sudo apt install -y vsftpd

# --- 2️⃣ Maak FTP-only gebruiker ---
if ! id -u $FTP_USER > /dev/null 2>&1; then
    sudo adduser $FTP_USER
    sudo usermod -s /usr/sbin/nologin $FTP_USER
fi

# --- 3️⃣ Voeg FTP-gebruiker toe aan storage ---
sudo usermod -aG $GROUP $FTP_USER

# --- 4️⃣ Chroot map voor FTP ---
sudo mkdir -p $CHROOT_BASE/$FTP_USER
sudo chown root:root $CHROOT_BASE
sudo chmod 755 $CHROOT_BASE
sudo chown root:root $CHROOT_BASE/$FTP_USER
sudo chmod 755 $CHROOT_BASE/$FTP_USER

# --- 5️⃣ Maak submappen voor bind mounts ---
for SHARE in "${SHARES[@]}"; do
    BASENAME=$(basename $SHARE)
    sudo mkdir -p $CHROOT_BASE/$FTP_USER/$BASENAME
    sudo chown root:root $CHROOT_BASE/$FTP_USER/$BASENAME
done

# --- 6️⃣ Bind mounts naar echte schijven ---
for SHARE in "${SHARES[@]}"; do
    BASENAME=$(basename $SHARE)
    sudo mount --bind $SHARE $CHROOT_BASE/$FTP_USER/$BASENAME
done

# --- 7️⃣ Eigenaarschap en rechten op de echte schijven ---
for SHARE in "${SHARES[@]}"; do
    sudo chown -R $FTP_USER:$GROUP $SHARE
    sudo chmod -R 2770 $SHARE
done

# --- 8️⃣ ACL voor Docker PUID/PGID=1000 ---
for SHARE in "${SHARES[@]}"; do
    sudo setfacl -R -m g:$DOCKER_GID:rwx $SHARE
    sudo setfacl -R -d -m g:$DOCKER_GID:rwx $SHARE
done

# --- 9️⃣ Configureer vsftpd ---
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
sudo bash -c "cat > /etc/vsftpd.conf" <<EOL
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
user_sub_token=\$USER
local_root=$CHROOT_BASE/\$USER
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
pasv_min_port=40000
pasv_max_port=50000
EOL

# --- 10️⃣ Maak zelfondertekend SSL-certificaat ---
sudo mkdir -p /etc/ssl/private
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout /etc/ssl/private/vsftpd.pem \
    -out /etc/ssl/private/vsftpd.pem \
    -subj "/C=NL/ST=Noord-Holland/L=Amsterdam/O=Home/OU=IT/CN=localhost"

# --- 11️⃣ Herstart vsftpd ---
sudo systemctl restart vsftpd

# --- 12️⃣ Permanent bind mounts in fstab ---
FSTAB="/etc/fstab"
for SHARE in "${SHARES[@]}"; do
    BASENAME=$(basename $SHARE)
    ENTRY="$SHARE $CHROOT_BASE/$FTP_USER/$BASENAME none bind 0 0"
    if ! grep -q "$CHROOT_BASE/$FTP_USER/$BASENAME" $FSTAB; then
        echo "$ENTRY" | sudo tee -a $FSTAB
    fi
done

echo "✅ FTPS setup voltooid: bind mounts, chroot, Docker ACL en groeprechten ingesteld."
echo "Gebruik FTP-client met TLS/SSL voor veilige verbinding."


Belangrijke punten

  1. Chroot-map blijft root:root → veilig

  2. Bind mounts → eigenaar = ftpuser, groep = storage, chmod 2770 → RW voor gebruiker + groep

  3. Setgid → nieuwe bestanden automatisch in groep storage

  4. ACL → Docker PUID/PGID=1000 heeft RW

  5. FTPS (TLS) → geen plaintext wachtwoorden

  6. SFTP en FTPS delen dezelfde fysieke mapp







woensdag 24 december 2025

Firefox op een touchscreen / aanraakscherm

Dit is een bekend (en frustrerend) Firefox-probleem op Windows 11 met touchscreens. Standaard interpreteert Firefox een touch-actie vaak als tekstselectie in plaats van scrollen / navigeren, terwijl Chrome dat wél goed doet. Gelukkig kun je dit vrij goed oplossen met verborgen instellingen:

Open de geavanceerde instellingen

Typ in de adresbalk van Firefox:

about:config

Klik op “Risico accepteren en doorgaan”

Zoek één voor één naar onderstaande opties en pas ze aan. Als een instelling er niet is stel de eerste dan in als GETAL. De anderen als BOLEAN:

dom.w3c_touch_events.enabled

Zet deze op 1

0 = uit

1 = aan (aanbevolen)

2 = alleen automatisch (werkt vaak slecht)


Dubbelklik om de waarde te wijzigen.


apz.allow_zooming

Zet op true

Zorgt dat Firefox touch-gebaren correct verwerkt.


apz.windows.use_direct_manipulation

Zet op true

Nodig om het Windows 10/11 scrollen aan te zetten.

ui.panGesture.enabled

Zet op true

Start Firefox helemaal onieuw op en alles zou moeten werken zoals in Chrome.

Na deze instellingen:

Scrollen met één vinger werkt normaal

Swipe-bewegingen werken

Tekst wordt niet meer constant geselecteerd

Gedrag lijkt veel meer op Chrome


Werkt het nog niet goed?

Dan kan dit ook helpen:


Schakel hardware-acceleratie even uit:

Instellingen → Algemeen → Prestaties

Vink “Aanbevolen prestatie-instellingen gebruiken” uit

Vink “Hardwareversnelling gebruiken” uit

Herstart Firefox

Linux Mint 22

In linux Mint 22.2 is er nog een extra stap nodig om dit werkend te krijgen:

X11

Als je Cinnamon onder X11/Xorg draait (standaard bij Mint 22.2):

Je kunt een environment-variabele instellen zodat Firefox touch input beter verwerkt:

export MOZ_USE_XINPUT2=1


Dat kan bijvoorbeeld via /etc/profile.d/ of ~/.profile:

Voer daarom in een terminal het volgende commando uit:

echo "export MOZ_USE_XINPUT2=1" >> ~/.profile



Log vervolgens uit je sessie en log weer in vóór je Firefox start. daarmee wordt het environment variable geladen. Waarom dit helpt: zonder XInput2 krijgt Firefox alleen legacy muis-events van het touchscreen, waardoor het voelt alsof je tekst selecteert in plaats van scrollt. 


TIP: Je kunt ook Firefox direct met die variabele starten in één terminal-commando:


MOZ_USE_XINPUT2=1 firefox

Maar dan lukt het niet als firefox vanuit een link in een ander programma wordt gestart.

Wayland

Als je Wayland gebruikt (binnen GNOME of een andere compositor)

Linux Mint standaard X11 gebruikt, maar als je ooit Wayland inschakelt:

Zet de Wayland-backend voor Firefox aan door dit commando in een terminal te geven:

export MOZ_ENABLE_WAYLAND=1


Dit maakt touch-scrolling en andere touch-gebaren in Firefox vaak beter (mits Wayland zelf goed werkt). 

dinsdag 2 december 2025

Portainer installeren op de QNAP NAS

 

Portainer

Portainer is een handiger manier om dockers op de QNAP te beheren.

log in op het admin account via SSH

verwijder eventuele oudere versies van portainer

docker stop portainer
docker rm portainer

docker run -d \
  -p 9000:9000 \
  -p 9443:9443 \
  --name=portainer \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:latest

/var/run/docker.sock geeft Portainer directe toegang tot Container Station’s Docker. Je zou daarin dus alle dockers moeten zien die via container station zijn geïnstalleerd.

Log in bij portainer: https://QNAP-IP-nr:9443
maak een admin account aan
Je ziet nu een environment: local. Dat is de conrainer omgeving van de QNAP



Vanuit Portainer kan een Jellifin docker ook worden geüpdate:

1) Klik op de linker link van de container die je wilt updaten. In dit geval Jellyfin
2) in het container detail scherm klik op "stop container"
3) Klik daarna op "recreate"
4) Schuif de schakelaar "Re-Pull image" 
5) als alles klaar is kun je de docker herstarten.

Als je hierna met Jellyfin verbindt, kun je een melding krijgen dat het niet dezelfde Jellyfin is al eerder en dien je te bevestigen dat je toch wilt verbinden.

Portainer zelf updaten


Soms dien je Portainer zelf ook te vernieuwen. Dat kan helaas niet vanuit portainer. Hiervoor moet je een SSH verbinding maken met de QNAP naar het admin account:

docker ps (toont container ID en containerImageName)
in dit voorbeeld gebruik ik 3ed078654f4f en portainer/portainer-ce:latest
docker stop 3ed078654f4f docker rm 3ed078654f4f docker rmi portainer/portainer-ce:latest
docker run -d \
  -p 9000:9000 \
  -p 9443:9443 \
  --name=portainer \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:latest

Grub 2 dedicated menu met chainloading op een UEFI systeem

We gaan een dedicated grub configuratie maken om een standaard opstart menu te krijgen waarbinnen zowel verschillende linux distributies als...