Snappymail admin password

Ik blijf de (werkwijze voor de) adminpagina en de credentials voor Snappymail vergeten. Het idee is simpel: de applicatie maakt een initieel admin wachtwoord; je past het aan na het inloggen en verwijderd het oorspronkelijke bestand met het wachtwoord. Klaar.

Alleen, dat ontschiet me wel eens. Ook de locatie van het adminpanel, of het bestaan ervan: meestal blijft het werken na initele configuratie.

Dus, als samenvatting:

  • Initieel admin password:
    • bestaat niet tijdens installatie van Snappymail
    • bezoek de adminpagina, op https://sub.domain.tld/snappymail/app/?admin
    • log in op de server via SSH, ga naar /var/www/snappymail/app# cd data/_data_/_default_/
    • het kan even duren voor het bestandje gecreerd is; zodra het bestaat kun je in die directory admin_password.txt openen
    • log in op het “Admin Panel” met admin als login en het gevonden wachtwoord als passphrase ; TOTP is initieel niet geconfigureerd.
    • je wordt er aan herinnerd het wachtwoord te wijzigen
    • Snappymail verwijdert automatisch het bestandje met het tijdelijke wachtwoord
  • Na vergeten van het wachtwoord:
    • Een versleutelde versie van het wachtwoord is opgeslagen in de config, te vinden op
      /var/www/snappymail/app/data/_data_/_default_/configs/application.ini
    • de eigenschap heet admin_password, onder het kopje “Login and password for the web admin panel”
      • is de waarde leeg? Dan heb je nog niet ingelogd. Het wachtwoordbestandje wordt aangemaakt na bezoeken van de admin-pagina
      • is de waarde gevuld? Dan heb je al eens ingelogd.
    • nieuw wachtwoord genereren:
      • verwijder het het genoteerde wachtwoord
      • bezoek de adminpagina opnieuw (eventueel in private browser venster)
      • het bestandje admin_password.txt wordt even daarna automatisch aangemaakt
    • log in met het nieuwe wachtwoord
    • bovenaan de pagina wordt een banner getoond met de suggestie het wachtwoord te wijzigen
      • behalve het wachtwoord, kun je ook de naam van de admingebruiker aanpassen
      • let op dat je ook het (nieuwe/tijdelijke) huidige wachtwoord nodig hebt
      • de nieuwe gebruiker/wachtwoordcombinatie wordt weggeschreven in de eerder genoemde application.ini
    • na wijzigen van het wachtwoord ruimt Snappymail zelf het bestandje met het tijdelijke wachtwoord op

Print this entry

Proxmox ACME voor Let’s Encrypt

Het is telkens weer puzzelen, nu een aantkening voor de volgende keer:

  • Account aanmaken
    • Kan op datacenterniveau, maar ook vanuit de node
    • Ik maak een account per node
  • Challenge-plugin activeren, indien nodig
    • HTTP-01 is het meest gebruikelijk, maar vereist (read only) toegang vanuit Letsencrypt naar de webserver; het werkt zonder plugin
    • DNS-01 verifieert via een TXT record op de DNS server. Zodoende ook te gebruiken voor private IP’s en machines die niet vanuit het publieke Internet te bereiken zijn (of geen webserver hebben draaien). De plugin heeft toegang nodig tot de API van je DNS server om het TXT record te maken.
  • Domein toevoegen
    • Op node-niveau
    • Kies hier ook het te gebruiken account

Account aanmaken, eventueel plugin activeren onder “Datacenter”

Register account

Geef een naam op voor het account, maak een emailalias en vul die in; kies eerst de staging directory, maak als alles goed ingericht is een nieuw account voor de reguliere (production) directory. Ik hergebruik het emailadres.

yunohost user update mailbox_account --add-mailalias letsencrypt_pve_node@osba.nl

Voor de DNS-01 plugin is de naam vrij te kiezen; de delay laat ik op de default staan. De DNS API moet natuurlijk die van je DNS server zijn. Mijn DNS loopt via dns.he.net (HE), de API data zijn “HE_Username=accountnaam”, “HE_Password=accountwachtwoord”. Gezien de gevoeligheid van die gegevens, geef ik de voorkeur aan HTTP-01.

Certificaat toevoegen onder “Certificates”

De bovenste helft van het scherm is al gevuld met de self-signed certificaten van Proxmox. Kies in de onderste helft , achter ACME, eerst het zojuist aangemaakte account en klik apply:

Voeg een te certificeren domein toe met de “Add”-knop. Zonder instellen van de DNS-01 plugin, wordt automatisch voor HTTP-01 als methode gekozen, daaronder geef je het domein op:

Klik nu “Order certificates”. Succesvol? Dan een account voor productie aanmaken, en opnieuw een account aanvragen.

CLI opdrachten

Tekstopdrachten om hetzelfde te bereiken:

  • pvenode acme account register pve-node-staging letsencrypt_pve_node@osba.nl
  • pvenode acme config set --acme accoun=pve-node-staging domains=pve-node.osba.nl
  • pvenode acme cert order
  • systemctl restart pveproxy

PVEproxy restart

Let op: na het aanvragen van certificaten, wordt de GUI herstart. Zolang er enkel een self-signed certificaat is, of enkel de staging gedraaid heeft, komt de browser waarschijnlijk (opnieuw) met een beveiligingswaarschuwing.

Na aanvragen van een certificaat via ACME productie kan je inloggen via de domeinnaam.

Print this entry

Postfix – autorisatie voor groepsleden

Standaard mag een Yunohost-gebruiker geen mails versturen met als from: een mail alias van een groep waar die gebruiker lid van is.

Om dat wel toe te staan, is een aanvulling op de Postfix-configuratie /etc/postfix/main.cf nodig.

Bij de migratie van Yunohost 11 naar Yunohost 12 (Debian Bullseye naar Bookworm) werd Postfix’s main.cf aangeduidt als “handmatig aangepast en mogelijk overschreven tijdens de upgrade”

Hieronder een diff van de aangepaste main.cf en de default van Yunohost.

 # Virtual Domains Control
 virtual_mailbox_domains = ldap:/etc/postfix/ldap-domains.cf
-virtual_mailbox_maps = ldap:/etc/postfix/ldap-accounts.cf
+virtual_mailbox_maps = ldap:/etc/postfix/ldap-accounts.cf,hash:/etc/postfix/app_senders_login_maps
 virtual_alias_maps = ldap:/etc/postfix/ldap-aliases.cf,ldap:/etc/postfix/ldap-groups.cf
-smtpd_sender_login_maps=
+smtpd_sender_login_maps = unionmap:{
    # Regular Yunohost accounts
    ldap:/etc/postfix/ldap-accounts.cf,
-   # test: groups toevoegen, om groep-alias werkend te krijgen
-   ldap:/etc/postfix/ldap-groups.cf,
    # Extra maps for app system users who need to send emails
-   hash:/etc/postfix/app_senders_login_maps
-
+   hash:/etc/postfix/app_senders_login_maps }

De toevoeging komt uit /etc/postfix/ldap-groups.cf; daarin zitten:

# cat /etc/postfix/ldap-groups.cf
server_host = localhost
server_port = 389
search_base = dc=yunohost,dc=org
query_filter = (&(objectClass=groupOfNamesYnh)(mail=%s))
scope = sub
result_attribute = memberUid, mail
terminal_result_attribute = memberUid

Print this entry

Proxmox TLS certificaat via LetsEncrypt

Kort stappenplan:

  • Emailalias aanmaken voor het account
  • Account via certificates/ACME/create account
  • Accountnaam = nodenaam + staging, email = alias, directory = staging v2
  • Domein voor certificaat toevoegen op datzelfde scherm, certificates/ACME/Add
  • Publiek toegankelijk? Dan werkt HTTP als challenge makkelijk. Interne domeinnamen? Dan is DNS eenvoudiger.
  • Klaar? “Order Certificates Now”
  • Alles OK? Dan nieuw account maken met de productie-URL
    • Ga naar het tweede tabje, “ACME Accounts”
    • “Add” onder accouns
    • Gebruik nu nodenaam zonder staging als toevoeging, en “Let’s Encrypt V2” als directory
    • Terug naar tabje “Certificates”
    • Ververs de pagina, kies nu “Using Account:” de zojuist toegevoegde. Niet beschikbaar? Dan pagina (nogmaals) verversen.
    • “Order Certificates Now”
    • En klaar!

De node is nu bereikbaar onder de domeinnaam, zonder een beveiligingsuitzondering in je browser te maken.

Print this entry

Nextcloud upgrade van NC27 naar NC28

Nextcloud upgrades verlopen meestal zonder problemen, maar niet elke keer. Krap vier jaar terug had ik problemen met de upgrade van NC18 naar NC19: de database was gegroeid tot 440 GB, wat moeite gaf (timeout) bij de backup. In dat geval bleek het gros van de database te bestaan uit cache van externe bestanden; na truncate (truncate oc_filecache;) van de tabel verliep de upgrade zonder problemen.

Nu een aantal versies later: de upgrade van Nextcloud 27 naar Nextcloud 28 wil niet. Aan het begin van het jaar heb ik het eens geprobeerd, zonder succes, en een rollback gedaan naar het snapshot van juist daarvoor.

Ondertussen is Nextcloud 29 al een tijdje beschikbaar en raakt NC27 ‘unsupported’. In de hoop dat mogelijke bugs gevonden zijn, heb ik opnieuw een upgrade gestart. Helaas weer zonder succes.

Tweede poging

Deze stappen heb ik genomen:

  • Alle systeemcomponenten bijwerken : apt upgrade && apt update -y
  • Alle NC-apps bijwerken naar de laatste versie via admin login –> gezichts-menu –> Apps –> Your apps en dan “Upgrade all”
  • Controleren welke apps nog geen ondersteuning hebben in de nieuwe Nextcloud. Er is zo’n lijstje voor unsupported apps in NC29, maar voor NC28 heb ik dat niet kunnen vinden. Er zijn geen apps actief die in dat lijstje voorkomen
  • Shutdown container in Proxmox ; voor snapshots is dat niet nodig, maar om een consistente staat van de databases de garanderen lijkt het me een goed idee
  • Create snapshot in Proxmox en start de container
  • Log in in Yunohost en start de upgrade van Nextcloud
    • Yunohost creeert eerst een backup
    • Voert de upgrade uit
    • Klapt op “App ‘Text file editor’ not supported in NC28”, of iets in die geest
    • Probeert een restore van de backup uit te voeren
    • Restore hangt op “Restoring the MySQL database”
  • Shutdown container in Proxmox
  • Restore container snapshot in Proxmox
  • Start container

Anders dan de ‘unsupported app’-melding heb ik de specifieke fout niet kunnen herleiden; door de restore van het snapshot is de logging niet meer beschikbaar.

Derde poging

Nadat het snapshot teruggezet is:

  • Applicatie “Edit text files” verwijderen
  • De nu beschikbare MariaDB-updates installeren
  • Shutdown container, snapshot maken, boot container
  • Nextcloud upgraden vanaf de command line voor wat meer live-inzicht: yunohost app upgrade nextcloud
  • De upgrade loopt weer fout, ik laat het proces verder lopen in de achtergrond om te zien wat de restore van de backup doet
  • Na geruime tijd te blijven hangen op ‘Restoring the MySQL database’, wordt het script vervolgd
  • Restore van de backup klapt uiteindelijk op ontbrekende cachebestanden of previews,
    Info: WARNING - chown: cannot access '/home/yunohost.app/nextcloud/data/appdata_ocjk9xv5jzs5/preview/f/8/6/8/e/8': Structure needs cleaning
  • Logging is via de Yunohost-logpublicatieservice te vinden op:

Omdat de restore mislukt, is er geen Nexctloud beschikbaar. Het is aantrekkelijk om het snapshot van voor de mislukte upgrade terug te zetten, maar daarmee vervallen tussentijdse wijzigingen: conceptversies van deze blogpost bijvoorbeeld, of tussentijds binnengekomen emails.

Logging doorzoeken

In willekeurige volgorde valt op in de logging, om verder uit te zoeken:

  • Bij de upgrade:
    • DEBUG - An unhandled exception has been thrown:
      DEBUG - Error: Undefined constant OCA\Keeweb\Migration\RegisterMimeType::CUSTOM_MIMETYPEALIASES in /var/www/nextcloud/apps/keeweb/lib/Migration/RegisterMimeType.php:25
  • Bij de restore:
    • DEBUG - Checking smb.conf with testparm
      WARNING - Load smb config files from /etc/samba/smb.conf
      WARNING - Loaded services file OK.
      WARNING - Weak crypto is allowed
      WARNING - Server role: ROLE_STANDALONE
    • WARNING - chown: cannot access '/home/yunohost.app/nextcloud/data/appdata_ocjk9xv5jzs5/preview/1/d/c/6/2': Structure needs cleaning

Gezien het beperkte aantal emails en m’n offline kopie van deze tekst, is restore van het snapshot de snelste weg naar een nieuwe poging. Ik verwijder daarvoor eerst de Keeweb-app. De Keeweb-app heeft nooit gewerkt, maar ook nooit in de weg gezeten; het is de enige foutmelding in het upgrade-log.

Er zou een werkende versie van de app moeten zijn, hoewel er nu bij de app vermeld staat dat er upstream, bij Keeweb zelf, geen updates zijn sinds 2021. Na disable+remove van Keeweb sla ik het concept op en maak ik een nieuw snapshot, klaar voor een vierde poging.

Vierde poging

De vierde poging komt verder; de upgrade naar Nextcloud 28 (meer specifiek: 28.0.8 blijkt uit het log) lijkt voltooid: er wordt gemeld dat de upgrade naar Nextcloud 29.0.5 start.

Die upgrade slaagt niet; het log meldt:

InvalidArgumentException: Index name "sa" for table "oc_social_3_stream_act" collides with the constraint on table "oc_social_stream_act".
Update failed
Maintenance mode is kept active
Resetting log level

Ik wacht de restore van de backup niet af; ik controleer of er mail ontvangen is gedurende de update en ga meteen door met een rollback van het snapshot.

Er zijn een paar aanwijzingen te vinden op ‘t Net: op de Nextcloud-fora en op de Gitub-pagina van Nextcloud. De oc_social_3_*-tabellen zijn in de loop van de tijd hernoemd naar oc_social_*, zonder “3” in de naam. De social app was al disabled wegens niet compatibel na een eerdere upgrade; ik heb de tabellen meteen verwijderd zoals gesuggereerd in een van de threads:

drop table oc_social_3_action; drop table oc_social_3_actor; drop table oc_social_3_cache_actor; drop table oc_social_3_cache_doc; drop table oc_social_3_client; drop table oc_social_3_follow; drop table oc_social_3_hashtag; drop table oc_social_3_instance; drop table oc_social_3_req_queue; drop table oc_social_3_stream; drop table oc_social_3_stream_act ; drop table oc_social_3_stream_dest; drop table oc_social_3_stream_queue; drop table oc_social_3_stream_tag;

Concept opslaan, snapshot maken en nog eens proberen.

Vijfde poging

Geslaagd! De upgrade van NC27 via NC28 naar NC29 besloeg een kwartier, waarvan het grootste deel voor rekening van de backup van de database kwam.

Er is een niet-fatale waarschuwing,

Warning: File /var/www/nextcloud/config/config.php has been manually modified since the installation or last upgrade. So it has been duplicated in /var/cache/yunohost/appconfbackup//var/www/nextcloud/config/config.php.backup.20240917.184213

Ik meen dat ik de configuratie als read-only gemarkeerd heb; voor de rest moet ik de verschillen erop naslaan.

Bij het oproepen van de site en bij het inloggen heeft Nextcloud geen vervelende verrassingen. Een nieuw jasje en onder de motorkap vast veel gewijzigd, maar aan de buitenkant ‘gewoon’ de bestanden die er altijd al stonden. Fijn.

Print this entry

Voor de volgende keer…

Door omstandigheden is het de afgelopen jaren drie keer keer nodig geweest mijn workstation in te richten. De eerste keer ging het enkel om uitwisselen van opslagruimte, zoals eerder beschreven.

De al wat oudere C7SIM-Q met eerste generatie i3 voldeed in vrijwel alle opzichten, alleen het maximum geheugen van 16 GB zat zo nu en dan in de weg. Ik heb het bord kunnen vervangen door een X11SSH-LN4F. Ook met i3, maar wel 6e generatie, en 32 GB RAM met uitbreidingsmogelijkheid tot 64 GB. Bovendien is het nu DDR4 ECC geheugen, waar het eerst DDR3 zonder ECC was.

Toen ik het moederbord verving zat er in een van de bestaande volumes iets scheef (ze het eerdere verhaal); de kortste weg naar een werkend systeem was een nieuwe installatie – met UEFI.

Installeren op UEFI geeft me vaak problemen bij het inrichten van de UEFI-partitie, meestal kom ik niet weg zonder installatie naar ‘removable storage’, maar het werkt uiteindelijk wel. Bij dit moederbord niet. Daarbij komt dat het moederbord, met remote management, wat geavanceerder is. Nadeel is dat boot voorbij ‘BIOS’ een stuk langer duurt; troubleshoot kost heel veel tijd.

Uiteindelijk heb ik Debian volledig automatisch laten installeren, met alle opties op default en minimale ingreep in het partitioneren. Daarmee werkte het eindelijk, maar ik had voor een kleine /var-partitie gekozen, waar vrij veel optionele pakketten in terechtkwamen. Zoveel, dat er voor Apt geen ruimte was om nieuwe programma’s te downloaden. Bovendien stond alles op defaultwaarden, met voeten in Fahrenheit en een Amerikaanse tijdzone. Daarnaast stond alles op een SSD die ik niet voor het systeem in gedachten had.

Snel was het wel! Door tien jaar upgrades over te slaan, merk je bij een upgrade veel meer van de vooruitgang. Niet alleen ruim voldoende geheugen (de 16 GB was niet dagelijks een bottleneck), maar vooral sneller geheugen. De CPU heeft geen veel hogere kloksnelheid, maar kan wel sneller schakelen en heeft geavanceerdere functies waardoor bestanden uitpakken bijvoorbeeld veel sneller gaat. Het systeem draaide nu niet op SSD-cached LVM-volumes, maar op LVM-volumes rechtstreeks op een (ouder model, SATA2) SSD.

Het nieuwe moederbord heeft plaats voor een NVMe-reepje. In tegenstelling tot mijn eerste ingeving, 2e-hands een zo klein en goedkoop mogelijk reepje aanschaffen, heb ik er een nieuwe ingeprikt: in veel gevallen zijn de 2e-hands exemplaren duurder dan een nieuwe. Met een paar euro extra bovenop de laagst geprijsde SSD heb ik me verwend met een ouder model Samsung. Met krap 2 TB aan 3-bits TLC NAND is er voldoende ruimte voor systeempartities, home partities, databasepartities en partities voor caching van datavolumes.

Met minimale moeite is de installatie, met UEFI, in een keer geslaagd. Daar zit je dan, in een mum van tijd met een kale installatie. Want snel dat ging het wel! Een flink deel van het TLC NAND wordt als SLC NAND ingezet, om snel de gigabyte aan DDR-geheugen te vereeuwigen. Waarschijnlijk haal ik het maximum er niet uit: de SSD heeft een 4xPCIe3 interface, terwijl de aansluiting op het moederbord er slechts 2 kanalen biedt.

Aanvullende instellingen / applicaties / packages

Todo’s: er zijn wat instellingen te doen en aanvullende packages te downloaden. Installeer eerst de programma’s, anders kun je ze niet inrichten natuurlijk.

Packages installeren:

apt update
apt upgrade 
apt install openssh-server screen tmux links htop powertop dstat sysstat nicstat curl sshfs gpm # altijd handig
apt install lvm2 thin-provisioning-tools # systeem-onderdelen
apt install speedometer iftop nethogs bmon tcptrack # bandbreedte-utils
apt install firefox dolphin dolphin-nextcloud nextcloud-desktop nextcloud-desktop-cmd   kdeconnect konsole vlc subtitlecomposer # in grafische omgeving (ook NC-cmd!)
apt install growlight # diskmanagement, onderweg tegengekomen

Overige software

Niet alle software is beschikbaar via Apt, of is de AppImage-versie net wat nieuwer dan de versie in Apt.

  • DigiKam; even kijken hoever Apt achter loopt –> Apt heeft v7, laatste appimage is v8
  • Chrysalis; nog niet in Apt

Firefox

  • Firefox sync instellen
  • Sync-server aanpassen in about:config ; zoeken naar token en vind identity.sync.tokenserver.uri, zet die op https://ffs.osba.nl/ffsync/token/1.0/sync/1.5
  • Eventueel synchronisatie van autoscroll uitzetten, omdat de defaultwaarde op verschillende platforms niet gelijk is, services.sync.prefs.sync.general.autoScroll op false
  • Inloggen via de sync-instellingen in Firefox. De eerste keer gebeurt er waarschijnlijk niets (alleen tabs kunnen dan naar een ander apparaat gestuurd worden, maar synchronisatie vindt niet plaats). Tot nu toe kunnen oplossen door alle synchronisatievinkjes uit te zetten, Firefox te restarten, uitloggen uit het Firefox-account, Firefox restarten, en dan weer inloggen. De tweede keer is het niet nodig een bevestigingscode door te geven, maar start de synchronisatie wel. Foutlogs zijn te vinden via about:sync-log, er is ook een sync-extension die daarna info weergeeft op about:sync
  • Als de sync eenmaal draait, komt er steeds meer mee. Ondertussen niet alleen de wachtwoorden en bookmarks, maar ook open tabs, extensies en inrichting van extensies (zoals bijvoorbeeld de benoemde containers voor de containerplugin).
  • Momenteel zit nog niet in de sync:
    • instellingen voor temporary containers
    • blokkeren van de “login met Google” popup op allerlei websites via uBlock Origin. Om die popups te blokkeren, open ‘My filters’ in de uBlock-instellingen, en voeg daar toe: accounts.google.com/gsi/*

Nextcloud sync instellen

  • app-password instellen via personal settings –> security –> nieuwe entry maken onderaan de pagina ; de ingevoerde omschrijving zie je later pas, je hebt nu je eigen (getoonde) gebruikersnaam nodig en het random wachtwoord. Houdt ‘t wachtwoord even in beeld, niet op ‘Done’ klikken
  • Nextcloud desktop openen en verbinden met https://online.osba.nl/nextcloud
  • Kopieer de link (hij opent vanzelf, maar het kan zijn dat de timeout te snel verstrijkt)
  • Open de link in een incognito-venster (om te voorkomen dat er automatisch ingelogd wordt met de reguliere gebruikersnaam)
  • Klik op ‘use an app token’, oid (de onderste optie)
  • Gebruik de eerder aangemaakte credentials
  • Als het niet werkte, nog een keer proberen. Als het wel werkte volgt er een melding, “Account connected”

Met de sync-client op Android gaat het nog makkelijker: in plaats van handmatig de gegevens invullen en overnemen: maak het app password aan, klik op ‘Show QR code for mobile apps’ en scan de code met je telefoon.

Dolphin

dolphin-nextcloud geeft een contextmenu waarin Nextcloud-bewerkingen vrijgegeven worden.

Met de Nextcloud Desktop client wordt synchronisatie geregeld, maar geen integratie. Installeer dolphin-nextcloud om vanuit Dolphin bestanden via Nextcloud te delen.

Voeg onder het Remote-kopje in de “Places” zijbalk een link naar Nextcloud toe via WebDAV en SSHFS. SSHFS geeft snellere toegang en betere integratie aan deze kant van de verbinding, maar wijzigingen worden niet door Nextcloud opgemerkt. WebDAV wordt aan deze kant echt als remote gezien, wat soms voor caching of vertraging zorgt, maar loopt via de Nextcloud-logica. Wijzigingen, verwijderingen en toevoegingen zijn meteen in Nextcloud beschikbaar.

De WebDAV link geeft Nextcloud via de web-interface, bij het kopje met settings linksonderin bij bestanden: https://online.osba.nl/nextcloud/remote.php/dav/files/wbk

Pas de link aan naar webdavs://online.osba.nl/nextcloud/remote.php/dav/files/wbk om hem in Dolphin te gebruiken. Meteen plakken in de adresbalk, en dan de locatie opslaan werkt het eenvoudigst; het werkt ook via Knetattach (de knop rechtsbovenin het scherm als je in Dolphin op Network klikt, onder remote).

Knetattach foutmelding, met op de achtergrond de (hoogst waarchijnlijk correcte) instellingen

Op welke manier dan ook: soms werkt het in ene keer, soms werkt het totaal niet. Deze keer is het een “totaal niet”-geval. Troubleshoot gaat erg moeizaam; Dolphin noch Knetattach geven enige feedback naast “The file or folder … does not exist” (Dolphin) of “Unable to connect to server. Please check your settings and try again.”
Een enkele keer lijkt het proces een stap verder te komen: dan volgt er een vraag of ik zeker weet dat ik wil inloggen op Nextcloud, om vervolgens alsnog te vertellen dat de file or folder does not exist.

De “bookmark” in Dolphin’s places-balk heb ik uit de settings van de oude installatie gehaald (~/.local/share/user-places.xbel)

De locatie in Dolphin, met op de achtergrond de ‘does not exist’-melding

Mogelijk zit de KWallet-entry voor Nextcloud-Desktop in de weg. Die client logt in met een app-password, maar in KWallet lijkt het een reguliere user/pass combinatie. Misschien geeft KWallet onder water het verkeerde wachtwoord (of het goede wachtwoord, maar via het verkeerde mechanisme) aan Dolphin en Knetattach door, zonder daar feedback over te geven. Na sluiten van zowel de wallet als de NC-client lukt het echter nog steeds niet. Wordt vervolgd.

Vervolg op een nieuwe laptop: inloggen op Nextcloud via Dolphin werkt op bovenstaande wijze meteen, althans, als ik het adres rechtstreeks invoer in de locatiebalk van Dolphin. Deze keer heb ik voor Nextcloud Desktop (expres) geen app-password gebruikt.

Toevoegen als “Network” entry via knetattach loopt nu op een andere manier stukt: het proces hangt een kleine minuut (popup “examining”), geeft dan “Failed, application closed unexpectedly”. Als ik knetattach uitvoer in een konsole venster, zie ik fouten en waarschuwingen voorbijkomen. Die specifieke meldingen zijn misschien geen probleem, maar er zijn wel eerder bugs gemeld op bugs.kde.org die spelen in mijn versie. Met Debian stable zit ik niet direct op de bleeding edge wat betreft KDE-ontwikkelingen, ik laat een bugmelding achterwege.

De genoemde workaround werkt echter ook voor WebDAV! Dus:

  • Open een tweede tab in Dolphin
  • Log daarmee in op Nextcloud, in de webdavs://user@domain-notatie
  • Bevestig dat je inderdaad als die gebruiker wil inloggen, en zet het vinkje om niet herinnerd te worden; geef je wachtwoord en wacht tot de directory geladen is
  • Start nu de knetattach-activiteiten om een locatie toe te voegen
  • Waar initieel de boel bleef hangen door de in de bugmelding genoemde loop, ontstaat nu die loop niet meer omdat we al akkoord gegeven hebben

GUI / gebruikersinstellingen

Fonts ophalen

  • De fonts Linux Biolinum en Linux Libertine zijn na 2012 gefork’d; releases van de vork zijn te vinden onder Libertinus op Github.
  • Pak het release file uit en (in het geval van KDE) gooi de bestanden in de fontmanager om ze te installeren.

Mountpoints inrichten

Voorheen waren datapartities zoals voor foto’s en video’s rechtstreeks in m’n home-directory gemount. Ik mount ze nu in een gebruiker-agnostische directory, en bind-mount ze lokaal.

De eerder o-zo-mooi ingerichte LVM is goed over te dragen, ware het niet dat:

  • ik een van de fysieke volumes een beetje verziekt heb
  • de tools om LVM te beheren na x jaar anders verpakt zijn en sommige binaries lijken te ontbreken; vgchange -ay data had LVM klachten:
root@fractal:~# vgchange -ay data
  /usr/sbin/cache_check: execvp failed: No such file or directory
  WARNING: Check is skipped, please install recommended missing binary /usr/sbin/cache_check!
  /usr/sbin/thin_check: execvp failed: No such file or directory
  WARNING: Check is skipped, please install recommended missing binary /usr/sbin/thin_check!
  14 logical volume(s) in volume group "data" now active

Het ontbrekende pakket blijkt thin-provisioning-tools

(Eenmalige todo’s: boeken en bieb naar data, geenmuziek naar home)

Keyboard

Ctrl+Alt+Backspace om X de nek om te draaien: advanced keyboard tab in KDE settings:

Alternatief: Alt+SysRq+k

Systeeminstellingen

Netwerk

Twee NIC’s samen laten werken als bond0. Met het vernietigen van de root-directory is de configuratie in /etc/network/interfaces helaas verloren gegaan. Er staat nog een todo op het lijstje, “/etc in git onderbrengen”, maar dat helpt nu niet.

De nieuwerwetse huidige installatie heeft autoconfig voor netwerk, waarschijnlijk via networkmanager. nmcli kan bonding interfaces aanmaken. De man-pages van nmcli zijn erg uitgebreid maar daar kan ik niet eenvoudig de bond-syntax terugvinden. Er is onder andere documentatie te vinden bij Red Hat en bij Gnome; die bij Red Hat heeft meer diepgang, die bij Gnome geeft passende voorbeelden.

# nmcli connection add type bond con-name bond0 mode 6
Connection 'bond0' (cf29cf16-692b-4925-95fd-0102aa758cc0) successfully added.
# nmcli device status
DEVICE  TYPE      STATE         CONNECTION         
eno2    ethernet  connected     Wired connection 1 
eno1    ethernet  disconnected  --                 
eno3    ethernet  unavailable   --                 
eno4    ethernet  unavailable   --                 
lo      loopback  unmanaged     --     
# nmcli connection add type ethernet slave-type bond con-name bond0-port1 ifname eno1 master bond0
Connection 'bond0-port1' (1a8cdccb-1363-40f5-b9aa-072936ca1544) successfully added.
# nmcli device status 
DEVICE   TYPE      STATE        CONNECTION         
eno2     ethernet  connected    Wired connection 1 
nm-bond  bond      connected    bond0              
eno1     ethernet  connected    bond0-port1        
eno3     ethernet  unavailable  --                 
eno4     ethernet  unavailable  --                 
lo       loopback  unmanaged    --                 

Aanmaken van een bonded interface ondersteund de networkmanager-GUI (nog?) niet, maar onderhoud/beheer ervan wel. Nadat eno1 aan bond0 gehangen was hierboven, maakte nm de verbinding actief. In de GUI heb ik ‘Wired connection 1’ verwijderd om geen verrassingen te krijgen bij het koppelen van eno2 aan bond0:

# nmcli device status 
DEVICE   TYPE      STATE         CONNECTION  
nm-bond  bond      connected     bond0       
eno1     ethernet  connected     bond0-port1 
eno2     ethernet  disconnected  --          
eno3     ethernet  unavailable   --          
eno4     ethernet  unavailable   --          
lo       loopback  unmanaged     --          
# nmcli connection add type ethernet slave-type bond con-name bond0-port1 ifname eno2 master bond0
Warning: There is another connection with the name 'bond0-port1'. Reference the connection by its uuid '67af71f7-f7b5-4f50-a02e-0fcfa4910960'
Connection 'bond0-port1' (67af71f7-f7b5-4f50-a02e-0fcfa4910960) successfully added.
# nmcli device status 
DEVICE   TYPE      STATE        CONNECTION  
nm-bond  bond      connected    bond0       
eno1     ethernet  connected    bond0-port1 
eno2     ethernet  connected    bond0-port1 
eno3     ethernet  unavailable  --          
eno4     ethernet  unavailable  --          
lo       loopback  unmanaged    --       

Oepsie… opdracht hergebruikt, maar slechts deels aangepast (Warning: there is another connection with the name 'bond0-port1'). Bij de eerste poging om de poort uit bond0 te trekken, heb ik de volledige bond verwijderd. Na opnieuw toevoegen is de status nu:

# nmcli device status
DEVICE   TYPE      STATE        CONNECTION  
nm-bond  bond      connected    bond0       
eno1     ethernet  connected    bond0-port1 
eno2     ethernet  connected    bond0-port2 
eno3     ethernet  unavailable  --          
eno4     ethernet  unavailable  --          
lo       loopback  unmanaged    --          

Losse todo’s:

  • SSH sleutels kopieren – het wordt afgeraden om dezelfde sleutels op meerdere systemen te gebruiken, maar hier wordt het oude systeem uit de vaart gehaald. Na overzetten van het private/public keypair werken de SSH-verbindingen meteen weer.
  • Toegang tot seriele interfaces, zoals /dev/ttyACM0 voor Arduino, ESP of toetsenbord
  • Blogpost nalopen op slordigheden en bijwerken met de laatste inzichten; eerst maar uit concept halen om er makkelijk bij te kunnen. Bij deze!

Print this entry

LVM cache aan bestaande LVM RAID1 mirror toevoegen

Een nieuwe HP Microserver gen8 is ingericht met Proxmox.

Proxmox is geinstalleerd op een RAID1 LVM dat draait op twee uSD-kaartjes: eentje in het op het moederbord geintegreerde slot, en eentje via een adapter in de op het moederbord geintegreerde USB A aansluiting.

Dat was ik volledig vergeten, tot ik me realiseerde waarom `apt dist-upgrade` zo langzaam liep.

In het verdere reilen en zeilen van de server is er weinig aan te merken. Ik maak me wel enige zorgen over het schrijven van logbestanden, en swap heb ik nog niet aangemaakt.

Om het wat te verlichten voor de geheugenkaartjes, voeg ik 1 GB SSD cache toe (op een volume van 18 GB).

Uit te voeren stappen:

  • SSD partitioneren
    • fdisk /dev/sdh
    • bij een ongebruikt/nieuw opslagmedium, g voor GPT partitielabel
    • n voor nieuwe partitie, t voor type lvm, w om op te slaan
  • Partitie aanmerken als LVM-partitie
    • pvcreate /dev/sdh1
  • Fysiek volume toevoegen aan de volumegreop van de rootpartitie
    • vgextend usbsdraid /dev/sdh1
  • Toekomstig caching volume toevoegen aan bestaande volumegroep
    • lvcreate -vn cache_mt_usbsdraid -l254 mt_usbsdraid /dev/sdh1
  • Volume omzetten naar gecached volume, verwijzend naar het caching volume
    • lvconvert --type cache --cachepool cache_mt_usbsdraid /mt_usbsdraid mt_prox_sys

Dat is alles. Bekijk het resultaat met lvs mt_usbsdraid:

# lvs mt_usbsdraid
  LV          VG           Attr       LSize  Pool                       Origin              Data%  Meta%  Move Log Cpy%Sync Convert
  mt_prox_sys mt_usbsdraid Cwi-aoC--- 18.00g [cache_mt_usbsdraid_cpool] [mt_prox_sys_corig] 0.04   2.10            0.00     

Bovenstaand cache heet in LVM-termen ‘dm-cache’. Het cached in de eerste plaats veelgebruikte data voor snellere toegang, en voorziet bovendien in cache voor schrijfacties.

Daarnaast is er ‘dm-writecache’, specifiek voor het cachen van schrijfoperaties. Ik weet niet of een combinatie van dm-cache en dm-writecache mogelijk is, en of er dan een cascade van caches ontstaat bij het schrijven.

Juist voor het schrijven naar de uSD-kaartjes wil ik caching hebben; aan de ene kant voor de snelheid, maar vooral omdat ik bang ben dat de willekeurige schrijfacties naar verschillende logbestanden funest zijn voor de geheugenkaartjes.

Helaas is het voor het toepassen van dm-writecache nodig het volume offline te halen (vgchange -an mt_usbsdraid/mt_prox_sys), waarmee het systeem z’n rootpartitie kwijtraakt. Misschien probeer ik wat de gevolgen zijn op een VM, maar voor een live systeem heb ik er niet zoveel zin in. Wordt allicht vervolgd.

Print this entry

Containers met internet, maar Proxmox zonder

Het lukte niet meer om Proxmox de upgraden. Het bleek dat er geen internettoegang meer was. Specifieker: het hele lan, behalve de (interne kant) router was bereikbaar. Bij nader onderzoek bleek PBS, de backupserver, hetzelfde probleem te hebben.

Het lukte ook niet om vanaf de router die twee machines te bereiken. Ondertussen werkten de containers gewoon en waren bereikbaar vanaf internet, en konden er ook gewoon backups verstuurd worden.

Na toch wel een tijdje puzzelen met DNS, DHCP/statisch, bonds en bridges, kwam ARP in beeld als boosdoener. arping gaf niet thuis op het IP dat ik voor ogen had, en gaf een incorrect MAC bij een IP wat wel een reactie gaf.

De oorzaak zat er in dat ik voor enkele hosts een statische MAC/IP koppeling in de ARP-tabel van OPNSense had laten vastleggen, met het idee de MAC-adressen niet uit het hoofd te hoeven leren voor wake-on-lan.

De boosdoener: een statisch ARP record

Na uitvinken van de vinkjes, toepassen van de wijzigingen en leeggooien van de ARP-tabel, werkte het weer!

Print this entry

IPv6 – nogmaals

Vorige week heb ik – eindelijk – een laadpaal geinstalleerd ter vervanging van de kabel die al ruim 6 jaar uit het zolderraam hing te bungelen. Voordat de stroom er af ging, heb ik alle apparatuur in het zicht netjes uitgeschakeld, maar de server staat niet in het zicht en kwam niet meer online toen er weer stroom was.

Zodra ik dat door had, kon ik met een handmatige ingrepen het gros weer draaiend krijgen, voor het moment, maar na een blikseminslag vandaag was de stroom er opnieuw vanaf met hetzelfde resultaat: website en webservices off-line.

Iets wat zowiezo nog niet goed werkte, en nu dus zeker niet, was het betrouwbaar uitdelen van IPv6-adressen in het netwerk. Daarbij kwam nu dat IPv4 niet goed terechtkwam.

In de logging van OPNsense viel me op dat er regelmatig no route to host gemeld werd:

<187>1 2023-07-09T20:39:33+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="5"] send_packet6: No route to host

Daar had ik eerder nog niet naar gezocht, of niet op de juiste zoekresultaten geklikt. Deze keer klikte ik een link naar het Netgate forum, waar met name een post er uitsprong. Het relevante deel:

I added to the bridge a link local IPv6 address … Soon after the DHCP log started indicating the DHCP response completed successfully

wallabybob

Ik controleerde de configuratie van de bridge op de router; er was wel een IPv6-adres aan toegekend, maar geen local link adres. Bovenstaand citaat is uit 2011, ruim 12 jaar geleden. Ik kon bijna niet geloven dat ik nu nog steeds tegen dat probleem aan kon lopen, maar na lezen (en leren) van de rest van de thread heb ik het toch geprobeerd:

# ifconfig bridge0 inet6 add fe80::5a9c:fcff:fe10:ff91/64

Geloof het of niet, maar direct daarna verdwenen de no route to host‘s , en verschenen daarvoor in de plaats Reply NA‘s; zie de stukjes log, als eerste de fouten:

<190>1 2023-07-09T20:39:33+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="1"] Solicit message from fe80::dab6:b7ff:feb7:981a port 546, transaction ID 0x577C2900
<191>1 2023-07-09T20:39:33+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="2"] Picking pool address 2a10:3781:2d49:172:26:90:0:f525
<190>1 2023-07-09T20:39:33+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="3"] Advertise NA: address 2a10:3781:2d49:172:26:90:0:f525 to client with duid 00:03:00:01:d8:b6:b7:b7:98:1a iaid = -1212704742 valid for 7200 seconds
<190>1 2023-07-09T20:39:33+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="4"] Sending Advertise to fe80::dab6:b7ff:feb7:981a port 546
<187>1 2023-07-09T20:39:33+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="5"] send_packet6: No route to host
<187>1 2023-07-09T20:39:33+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="6"] dhcpv6: send_packet6() sent -1 of 104 bytes
<190>1 2023-07-09T20:39:44+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="7"] Solicit message from fe80::225:61ff:fee3:1ee0 port 546, transaction ID 0xFB62AD00
<191>1 2023-07-09T20:39:44+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="8"] Picking pool address 2a10:3781:2d49:172:26:90:0:f79c
<190>1 2023-07-09T20:39:44+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="9"] Advertise NA: address 2a10:3781:2d49:172:26:90:0:f79c to client with duid 00:03:00:01:00:25:61:e3:1e:e0 iaid = 2424874 valid for 7200 seconds
<190>1 2023-07-09T20:39:44+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="10"] Sending Advertise to fe80::225:61ff:fee3:1ee0 port 546
<187>1 2023-07-09T20:39:44+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="11"] send_packet6: No route to host
<187>1 2023-07-09T20:39:44+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="12"] dhcpv6: send_packet6() sent -1 of 100 bytes
<190>1 2023-07-09T20:39:46+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="13"] Information-request message from fe80::ec4:7aff:fec1:25e4 port 546, transaction ID 0x7A418D00
<190>1 2023-07-09T20:39:46+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="14"] Sending Reply to fe80::ec4:7aff:fec1:25e4 port 546
<187>1 2023-07-09T20:39:46+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="15"] send_packet6: No route to host
<187>1 2023-07-09T20:39:46+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="16"] dhcpv6: send_packet6() sent -1 of 73 bytes

… daarna de correcte verwerking:

<190>1 2023-07-09T21:55:09+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="19"] Solicit message from fe80::dab6:b7ff:feb7:981a port 546, transaction ID 0x577C2900
<191>1 2023-07-09T21:55:09+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="20"] Picking pool address 2a10:3781:2d49:172:26:90:0:f525
<190>1 2023-07-09T21:55:09+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="21"] Advertise NA: address 2a10:3781:2d49:172:26:90:0:f525 to client with duid 00:03:00:01:d8:b6:b7:b7:98:1a iaid = -1212704742 valid for 7200 seconds
<190>1 2023-07-09T21:55:09+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="22"] Sending Advertise to fe80::dab6:b7ff:feb7:981a port 546
<190>1 2023-07-09T21:57:08+02:00 vpoort.osba.nl dhcpd 54250 - [meta sequenceId="133"] Reply NA: address 2a10:3781:2d49:172:26:90:0:f525 to client with duid 00:03:00:01:d8:b6:b7:b7:98:1a iaid = -1212704742 valid for 7200 seconds

Ik ben er nog niet uit hoe het met de volgordelijkheid zit: eerder liepen de meta sequence id’s slechts tot ergens in de 20, nu ver voorbij 100. Nummers <190> en <191> lijken OK, de eerdere fouten vallen onder <187>.

Het resultaat is nu dat opeens heel veel apparaten een IPv6 toegewezen hebben gekregen. Waar ik er eerst met hangen en wuren twee of drie kreeg, instabiel (telkens andere IP’s, telkens andere apparaten), is er nu opeens een hele lijst.

Nog te doen: herkenbare statische leases aanmaken voor vaste apparatuur, en natuurlijk waar het om begon: zorgen dat de webserver een IP krijgt tijdens boot.

Print this entry