motom001 / DoorPi

OpenSource VoIP Door-Intercomstation
https://www.doorpi.org/forum/
242 stars 86 forks source link

Feature request: Web Oberfläche Button "DoorPi Upgrad" "DoorPi Downgrade" #116

Open Nea74 opened 9 years ago

Nea74 commented 9 years ago

Guten Morgen, da ja hier momentan doch sehr schnell neue Versionen von DoorPi erscheinen sollte man sich überlegen ob man in der Weboberfäche und/oder als Komandozeile ein Upgrade/Downgrade von DoorPi durchführen kann. Downgrade aus dem Grund da manche Änderungen nicht gleich auf anhieb klappen bei den Benutzern diese aber schon produktiv im Einsatz haben. Gruß Nea

motom001 commented 9 years ago

Sehr gute Frage, dafür hab ich genau den Schwenk zu pip hin mit der setup.py erledigt um das zu gewährleisten.

Update / Upgrade:

sudo pip install --upgrade doorpi

Installation von Version 2.4.0.8 (obwohl eine andere aktueller wäre): Hinweis: alle Versionen anzeigen mit: https://pypi.python.org/simple/doorpi/

sudo pip install doorpi == 2.4.0.8

Re-Installation

sudo pip uninstall --yes doorpi &&
sudo pip install doorpi

Als Ergänzung noch der User-Guide für pip: https://pip.pypa.io/en/stable/user_guide/

Nun zu Deiner Frage nach dem Web-Oberfläche-Button: Ich weiß nicht, ob es eine gute Idee ist, DoorPi im laufenden Betrieb einfach zu aktualisieren. Ich könnte anzeigen lassen, dass es eine neue Version gibt (ggf. mit Changelog). Dafür könnte man am einfachsten die JSON-Schnittstelle von PyPi nutzen: https://pypi.python.org/pypi/DoorPi/json

Etwas weiter ausgeholt zu dem Thema Release-Strategie: 1.) Ich habe für das Projekt DoorPi und dessen Repository eine Integration von Travis-CI eingerichtet. Das bedeutet, dass dort alle commit einzeln getestet werden und das Ergebnis als Button in der README.rst angezeigt wird (das ist der Button mit "build: passing"). Ergebnisse sind hier einsehbar: https://travis-ci.org/motom001/DoorPi

2.) Der Master-Branch ist nun ein geschützter Branch. Das bedeutet, es dürfen nur noch Pull-Request aus anderen Branches dort rein und nicht mehr direkt editiert werden. Außerdem dürfen nur noch Pull-Requests rein, die den Travic-CI Test bestanden haben.

3.) Außerdem habe ich seit den letzten zwei Versionen die Release-Strategie umgestellt. Der Master-Branch wird ab jetzt immer syncron laufen mit den Paketen von PyPi. Sobald Travis-CI erkennt, dass der Master-Branch aktualisiert wurde, wird automatisch das PyPi Paket mit allen wichtigen Dateien gepackt und auf PyPi in meinem Namen hochgeladen. Sieht man hier ab dieser Zeile: https://travis-ci.org/motom001/DoorPi/builds/81915959#L1449 Cooles Extra ist, dass die Abhängigkeiten von DoorPi jetzt schon in der PyPi Übersicht ganz unten angezeigt werden. Das hatte ich beim manuellen Upload nicht hinbekommen.

Für mich klingt das nach einem FAQ-Beitrag - oder?

maxkr2 commented 9 years ago

Hi Thomas, sehr komfortabel umgesetzt! Finde ich Klasse! Eine Anzeige der neuen Version im Web reicht völlig finde ich!

Viele Grüße, Max

Nea74 commented 9 years ago

Gut gelöst.

motom001 commented 9 years ago

So viel zur Theorie - findet sich jemand, der das mal testet :)

maxkr2 commented 9 years ago

Hi Thomas, kann ich gerne machen, aber erst heute Abend...

[Nachtrag, es ist Abend...] Beim Upgrade bekomme ich leider (nach längerem warten):

OSError: [Errno 2] No such file or directory: '/usr/local/lib/python2.7/dist-packages/setuptools-18.2-py2.7.egg'

und zwischendrin ein paar Deprecation-Warnings:

    DEPRECATION: Uninstalling a distutils installed project (lockfile) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project.

Setzen einer Version sieht leider noch übler aus (auch 2.4.0.8):

Exception:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/pip-7.1.2-py2.7.egg/pip/basecomma                                                                                                                     nd.py", line 211, in main
    status = self.run(options, args)
  File "/usr/local/lib/python2.7/dist-packages/pip-7.1.2-py2.7.egg/pip/commands/                                                                                                                     install.py", line 282, in run
    wheel_cache
  File "/usr/local/lib/python2.7/dist-packages/pip-7.1.2-py2.7.egg/pip/basecomma                                                                                                                     nd.py", line 272, in populate_requirement_set
    wheel_cache=wheel_cache
  File "/usr/local/lib/python2.7/dist-packages/pip-7.1.2-py2.7.egg/pip/req/req_i                                                                                                                     nstall.py", line 213, in from_line
    wheel_cache=wheel_cache, constraint=constraint)
  File "/usr/local/lib/python2.7/dist-packages/pip-7.1.2-py2.7.egg/pip/req/req_i                                                                                                                     nstall.py", line 67, in __init__
    req = pkg_resources.Requirement.parse(req)
  File "/usr/local/lib/python2.7/dist-packages/pip-7.1.2-py2.7.egg/pip/_vendor/p                                                                                                                     kg_resources/__init__.py", line 2980, in parse
    reqs = list(parse_requirements(s))
  File "/usr/local/lib/python2.7/dist-packages/pip-7.1.2-py2.7.egg/pip/_vendor/p                                                                                                                     kg_resources/__init__.py", line 2911, in parse_requirements
    raise RequirementParseError("Missing distribution spec", line)
RequirementParseError: Missing distribution spec ==

Ein erneuter Upgrade endet so:

`Installing collected packages: linphone4raspberry, setuptools
  Found existing installation: linphone4raspberry 3.8.5-431-g4dd7ab6
    Uninstalling linphone4raspberry-3.8.5-431-g4dd7ab6:
      Successfully uninstalled linphone4raspberry-3.8.5-431-g4dd7ab6
  Found existing installation: setuptools 0.6rc11
    DEPRECATION: Uninstalling a distutils installed project (setuptools) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project.
    Uninstalling setuptools-0.6rc11:
      Successfully uninstalled setuptools-0.6rc11
Successfully installed linphone4raspberry-3.8.5-431-g4dd7ab6 setuptools-18.3.2

liefert dann aber beim Stoppen des Daemons diesen Fehler:

[....] Stopping VoIP Door-Intercomstation with Raspberry Pi: DoorPiTraceback (most recent call last):
  File "/usr/local/bin/doorpi_cli", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2707, in <module>
    working_set.require(__requires__)
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 686, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 584, in resolve
    raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: linphone4raspberry
 failed!

...scheint aber grundsätzlich wieder zu laufen. Hilft dir das weiter. Mir sagt es gerade nichts... Sorry!

Die De-Installation klappt super (aber wer braucht die schon...):

$ sudo pip uninstall --yes doorpi
Uninstalling DoorPi-2.4.1.2:
  Successfully uninstalled DoorPi-2.4.1.2

Genauso klappt die Installation einwandfrei:

$ sudo pip install doorpi
Collecting doorpi
  Using cached DoorPi-2.4.1.2-py2-none-any.whl
Requirement already satisfied (use --upgrade to upgrade): python-daemon in /usr/local/lib/python2.7/dist-packages (from doorpi)
Requirement already satisfied (use --upgrade to upgrade): watchdog>=0.8.3 in /usr/local/lib/python2.7/dist-packages/watchdog-0.8.3-py2.7.egg (from doorpi)
Requirement already satisfied (use --upgrade to upgrade): pifacedigitalio>=3.0.5 in /usr/local/lib/python2.7/dist-packages/pifacedigitalio-3.0.5-py2.7.egg (from doorpi)
Requirement already satisfied (use --upgrade to upgrade): RPi.GPIO>=0.5.11 in /usr/lib/python2.7/dist-packages (from doorpi)
Requirement already satisfied (use --upgrade to upgrade): linphone4raspberry in /usr/local/lib/python2.7/dist-packages (from doorpi)
Requirement already satisfied (use --upgrade to upgrade): pyserial>=2.7 in /usr/local/lib/python2.7/dist-packages/pyserial-2.7-py2.7.egg (from doorpi)
Requirement already satisfied (use --upgrade to upgrade): requests>=2.7.0 in /usr/local/lib/python2.7/dist-packages/requests-2.7.0-py2.7.egg (from doorpi)
Requirement already satisfied (use --upgrade to upgrade): docutils in /usr/local/lib/python2.7/dist-packages (from python-daemon->doorpi)
Requirement already satisfied (use --upgrade to upgrade): setuptools in /usr/local/lib/python2.7/dist-packages (from python-daemon->doorpi)
Requirement already satisfied (use --upgrade to upgrade): lockfile>=0.10 in /usr/local/lib/python2.7/dist-packages (from python-daemon->doorpi)
Requirement already satisfied (use --upgrade to upgrade): PyYAML>=3.10 in /usr/local/lib/python2.7/dist-packages (from watchdog>=0.8.3->doorpi)
Requirement already satisfied (use --upgrade to upgrade): argh>=0.24.1 in /usr/local/lib/python2.7/dist-packages/argh-0.26.1-py2.7.egg (from watchdog>=0.8.3->doorpi)
Requirement already satisfied (use --upgrade to upgrade): pathtools>=0.1.1 in /usr/local/lib/python2.7/dist-packages/pathtools-0.1.2-py2.7.egg (from watchdog>=0.8.3->doorpi)
Installing collected packages: doorpi
Successfully installed doorpi-2.4.1.2

Das gefällt mir sehr gut Thomas, hast du echt super hinbekommen...!!! :+1::+1::+1::+1:

Viele Grüße, Max