evcc
evcc copied to clipboard
Debian/Ubuntu: use non-root evcc user
- include preinstall script that stops the service (with flag) and copies over the database
- postinstall also recognizes restart flag in above case
- unit file uses evcc user
Fixes #4900
Refs https://github.com/evcc-io/evcc/pull/4878
Ich halte das für eine gute Idee, kann aber nicht beurteilen, ob der PR korrekt ist. Können wir einen unabhängigen Review dafür bekommen?
@goebelmeier ist so nett und wird das für mich testen.
Bitte die korrigierte Fassung, mein Fix (copy/paste error) war unsinnig, hab es korrigiert.
@goebelmeier Thanks for testing, I fixed the home dir creation - this might still leave open some very special cornercases (/var/lib/evcc exists but belongs to another user), but I think we are safe to assume someone in that scenario being able to resolve that manually.
Fehlt hier noch was? Sonst wäre jetzt nach Release der richtige Zeitpunkt zum mergen.
/cc @premultiply @VolkerK62
Gegentesten könnte ich das noch, weiß aber nicht ob ich das morgen unter kriege
Wie schaut es aus? Fehlt noch was?
@pauxus Zeit das fertig zu machen ;)
Aktuell liegt die db ja unter ~/.evcc/evcc.db. Passt das dann immer noch? Du verschiebst sie doch nach ~/evcc- da würde sie ja dann nicht mehr gefunden, oder funktioniert das bei Dir?
Also wäre die Fragen, wie wir dann wieder an die richtige Location kommen.
@andig Ich verschiebe sie nach /var/lib/evcc (also ~evcc statt ~evcc/.evcc), und natürlich habe ich aus irgendeinem Grund vergessen, die angepasste Config mit zu commiten. Argh. Neues Jahr, neues Glück. Ich rebase dann auch gleich nochmal auf den letzten Release.
So, nochmal alles durchgetestet. Funktioniert auch soweit alles, Service läuft mit dem richtigen Nutzer, DB ist kopiert.
Einen Cornercase gibt es, über den ich bei meinem letzten Test gestolpert bin: ich hatte manuell bei mir einen anderen Nutzer über evcc.service.d/ konfiguriert. Das beachtet das Skript natürlich nicht. Theoretisch könnten wir hier noch einen Schritt weitergehen und den Nutzer, unter dem evcc aktuell läuft bestimmen.
Allerdings ist da ein Gedankenfehler drin, muss ich gleich noch korrigieren
Macht natürlich keinen Sinn, den Pfad zur DB global zu überschreiben, sondern nur für die Systemd Unit, ich habe es jetzt explizit im Unitfile gesetzt. Ich werde noch einen Sanity Check was geänderte Nutzer oder doppelte DBs angeht einbauen
Das beachtet das Skript natürlich nicht.
Das wär mir egal. Wer das kann kann auch die DB wieder finden.
Hab jetzt noch ein paar Sanity checks dazugepackt, ich denke damit sind alle Szenarien erschlagen
@goebelmeier könntest Du nochmal einen Blick drauf werden? Soweit ok? Rein damit?
/cc @premultiply ?
@goebelmeier @premultiply @mweinelt last call- habt ihr noch Anmerkungen? Mir erscheint das sonst vollständig und hoffentlich auch frei von Nebenwirkungen und ich würde es ins Nightly mergen?
LGTM
Es sieht mir gut aus, ich hab relativ viel Fuzzy Testing gemacht und es ist nicht zerbrochen. Also könnte man IMHO reinnehmen
Dann Mut zur Lücke. Danke fürs Feedback!
@VolkerK62 im apt Package wandert die SQlite Datenbank jetzt nach https://github.com/evcc-io/evcc/pull/4901/files#diff-fc00ac250b8d002d87e12d46f86302b54999b140a3048acb82f91de09df794e7R13
Und natürlich Dank an @pauxus
@VolkerK62 im apt Package wandert die SQlite Datenbank jetzt nach https://github.com/evcc-io/evcc/pull/4901/files#diff-fc00ac250b8d002d87e12d46f86302b54999b140a3048acb82f91de09df794e7R13
Ich habe die Kommentierungen gelesen und nix verstanden. Muss man bzgl. des Umzugs der DB als normaler Nutzer irgendwie tätig werden? In der Doku habe ich keinen Verweis auf die DB gefunden, da ist also nix zu tun.
Ne, die sollte per Skript umziehen, liegt aber danach am neuen Ort. Im Logfile sagt evcc, welche verwendet wird
Sollte dieser PR in dem Nightly von vorhin (wegen freeze) enthalten sein?
pi@raspberrypi:~ $ evcc dump
[main ] INFO 2023/02/06 20:10:23 evcc 0.112.4 (7faa8bb8)
[main ] INFO 2023/02/06 20:10:23 using config file: /etc/evcc.yaml
[db ] INFO 2023/02/06 20:10:30 using sqlite database: /home/pi/.evcc/evcc.db
This error has just popped up in the wild:
hatte grade von 0.111.? auf 0.112.5 aktualisiert. hab jetzt diese Fehler:
Feb 8 09:50:26 homeserver evcc[16875]: [lp-1 ] INFO 2023/02/08 09:50:26 start charging ->
Feb 8 09:50:26 homeserver evcc[16875]: [db ] ERROR 2023/02/08 09:50:26 persist: attempt to write a readonly database (8)
Feb 8 10:28:05 homeserver evcc[16875]: [lp-1 ] INFO 2023/02/08 10:28:05 stop charging <-
Feb 8 10:28:05 homeserver evcc[16875]: [db ] ERROR 2023/02/08 10:28:05 persist: attempt to write a readonly database (8)
Feb 8 10:28:20 homeserver evcc[16875]: [lp-3 ] INFO 2023/02/08 10:28:20 start charging ->
Feb 8 10:28:20 homeserver evcc[16875]: [db ] ERROR 2023/02/08 10:28:20 persist: attempt to write a readonly database (8)
Feb 8 10:28:30 homeserver evcc[16875]: [db ] ERROR 2023/02/08 10:28:30 persist: attempt to write a readonly database (8)
Feb 8 10:28:30 homeserver evcc[16875]: [main ] ERROR 2023/02/08 10:28:30 cannot save settings: attempt to write a readonly database (1544)
Feb 8 10:28:30 homeserver evcc[16875]: [db ] ERROR 2023/02/08 10:28:30 persist: attempt to write a readonly database (1544)
nach dem ändern "chown evcc:evcc /bla/bla" vom Verzeichnis in dem die SQlite db ist und die db file - läuft alles wieder rund.
-> is that something we need to fix in the packaging?
The change was not part of 112.5. You reverted beforehand and revert-reverted afterwards. Need more details:
- which user was used (before/after)?
- Where is bla/bla?
- is this actually a Debian/Ubuntu system
I guess it was root
at least the folder and file was owned by root
bla/bla was the default location /var/lib/evcc/evcc.db
OS:
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
This was the error or warning I saw during the update.
Vorbereitung zum Entpacken von .../evcc_0.112.5+1675824468_armhf.deb ...
adduser: Warnung: Das Home-Verzeichnis ?/var/lib/evcc? geh?rt nicht dem Benutzer, den Sie gerade anlegen.
Entpacken von evcc (0.112.5+1675824468) ?ber (0.111.1+1675414714) ...
evcc (0.112.5+1675824468) wird eingerichtet ...
Ok, this is a corner case. We could add a chown after the creation of the user, but I don't know whether this is really necessary.
I assume you created the folder manually? Or do you have any overrides in your systemd module (like stateDirectory)?
No didn't created it but using the nightly and added it to the config file a while ago. Not sure why I had to do it but was related to not saving the chargelogs persistent as I remember correctly.
This is the error on todays update:
Vorbereitung zum Entpacken von .../evcc_0.112.5+1675930264_armhf.deb ...
Warning: evcc's home directory is incorrect (116)
but can't be changed because another process (31452) is using it.
Stop offending process(es), then restart installation
dpkg: Fehler beim Bearbeiten des Archivs /var/cache/apt/archives/evcc_0.112.5+1675930264_armhf.deb (--unpack):
?neues evcc-Skript des Paketes pre-installation?-Unterprozess gab den Fehlerwert 1 zur?ck
Fehler traten auf beim Bearbeiten von:
/var/cache/apt/archives/evcc_0.112.5+1675930264_armhf.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
process (31452) was the previous EVCC running process.