evcc icon indicating copy to clipboard operation
evcc copied to clipboard

Debian/Ubuntu: use non-root evcc user

Open pauxus opened this issue 3 years ago • 15 comments

  • 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

pauxus avatar Oct 22 '22 16:10 pauxus

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?

andig avatar Oct 23 '22 11:10 andig

@goebelmeier ist so nett und wird das für mich testen.

andig avatar Oct 23 '22 17:10 andig

Bitte die korrigierte Fassung, mein Fix (copy/paste error) war unsinnig, hab es korrigiert.

pauxus avatar Oct 23 '22 18:10 pauxus

@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.

pauxus avatar Oct 31 '22 09:10 pauxus

Fehlt hier noch was? Sonst wäre jetzt nach Release der richtige Zeitpunkt zum mergen.

/cc @premultiply @VolkerK62

andig avatar Nov 03 '22 19:11 andig

Gegentesten könnte ich das noch, weiß aber nicht ob ich das morgen unter kriege

goebelmeier avatar Nov 03 '22 20:11 goebelmeier

Wie schaut es aus? Fehlt noch was?

pauxus avatar Dec 22 '22 08:12 pauxus

@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 avatar Dec 29 '22 10:12 andig

@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.

pauxus avatar Jan 02 '23 06:01 pauxus

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.

pauxus avatar Jan 02 '23 07:01 pauxus

Allerdings ist da ein Gedankenfehler drin, muss ich gleich noch korrigieren

pauxus avatar Jan 02 '23 07:01 pauxus

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

pauxus avatar Jan 02 '23 08:01 pauxus

Das beachtet das Skript natürlich nicht.

Das wär mir egal. Wer das kann kann auch die DB wieder finden.

andig avatar Jan 02 '23 08:01 andig

Hab jetzt noch ein paar Sanity checks dazugepackt, ich denke damit sind alle Szenarien erschlagen

pauxus avatar Jan 02 '23 11:01 pauxus

@goebelmeier könntest Du nochmal einen Blick drauf werden? Soweit ok? Rein damit?

/cc @premultiply ?

andig avatar Jan 03 '23 17:01 andig

@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?

andig avatar Feb 06 '23 12:02 andig

LGTM

premultiply avatar Feb 06 '23 13:02 premultiply

Es sieht mir gut aus, ich hab relativ viel Fuzzy Testing gemacht und es ist nicht zerbrochen. Also könnte man IMHO reinnehmen

goebelmeier avatar Feb 06 '23 15:02 goebelmeier

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

andig avatar Feb 06 '23 15:02 andig

Und natürlich Dank an @pauxus

andig avatar Feb 06 '23 15:02 andig

@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.

VolkerK62 avatar Feb 06 '23 18:02 VolkerK62

Ne, die sollte per Skript umziehen, liegt aber danach am neuen Ort. Im Logfile sagt evcc, welche verwendet wird

andig avatar Feb 06 '23 19:02 andig

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

VolkerK62 avatar Feb 06 '23 19:02 VolkerK62

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?

andig avatar Feb 08 '23 10:02 andig

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

pauxus avatar Feb 08 '23 11:02 pauxus

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"

Chris591 avatar Feb 08 '23 12:02 Chris591

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 ...

Chris591 avatar Feb 08 '23 13:02 Chris591

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)?

pauxus avatar Feb 08 '23 20:02 pauxus

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.

Chris591 avatar Feb 08 '23 22:02 Chris591

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.

Chris591 avatar Feb 09 '23 11:02 Chris591