AIS LTS (long time support / długoterminowe wsparcie )

AIS LTS

Jednym z elementów projektu, nad którym obecnie pracujemy, jest zapewnienie długoterminowego wsparcia. Chodzi o to, żeby dostarczyć bramkę z zainstalowanymi binarkami w wersji, która będzie wspierana przez kilka nadchodzących lat - tak, żeby nie trzeba było robić żadnych dużych aktualizacji systemu tylko małe poprawki, które docelowo nie będą wymagały restartu urządzenia.

Skompilowaliśmy już te binarki i mamy je w nowym repozytorium pakietów binarnych. Przejście na to repozytorium nie będzie automatyczne, ale będzie wymagało uruchomienia sktryptu i … cierpliwości :wink:

image

Opiszę poniżej procedurę dla tych, którzy chcieliby przełączyć bramkę DEV1 na nowe repozytorium.
Docelowo umieścimy te kody w pakiecie startowym (bootstrap) i pełny reset aplikacji spowoduje przełączenie na nowe repozytorium.

:warning: Ta procedura to opis dla osób, które chciałyby zrozumieć jak działa aktualizcja binarnych pakietów na bramce. Można wykonać cały skrypt krok po kroku wklejając komendy do konsoli, lub uruchomić wszystkie w jednym kroku. Jeżeli ktoś nie czuje się na siłach :wink: to nie ma potrzeby wykonywać tej procedury - całość będzie w pakiecie startowym i pełny reset aplikacji spowoduje automatyczne uruchomienie bramki z najnowszymi binarkami i przełączenie na nowe repozytorium.

To duża zmiana, która wymaga odinstalowania pythona oraz wszystkich jego pakietów. Nie wdrożymy jej automatycznie, bo trwałoby to za długo a dodatkowo moglibyśmy odinstalować z bramki coś, co użytkownik sam dodał.

Co jest w tych nowych binarkach:

  1. Najnowsze wydanie Python 3.9, który będzie wspierany przez 5 lat od wydania, czyli do 2025

  1. Nodejs LTS v12 ze wsparciem do kwietnia 2022

  1. clang 10.0.1

https://releases.llvm.org/

  1. ponad 100 najnowszych wersji pakietów, które mamy na bramce- mosquitto, ffmpeg, rclone, libsocket, ttyd…

  1. Bonus, baza PostgreSQL :slight_smile: w najnowszej wersji 13.X
    Tu mała uwaga - wyjaśnimy jak uruchomić bazę na bramce DEV, ale nie będzie to przez nas zalecane ani wspierane (podobnie jak Node-RED). Bramki DEV (ze względu na ich ograniczone zasoby) będą nadal pozwalały na zapis do bazy w pamięci lub do bazy zewnętrznej. Domyślnie na bramce DEV nie będziemy dodawać bazy. Po pełnym resecie aplikacji bramka DEV uruchomi się bez bazy i bez Node-RED.

Jak przebiega cała aktualizacja

  1. Aktualizujemy informację o nowym repozytorium pakietów dla managera pakietów apt
curl http://localhost:8122/text_to_speech?text=Zmiana%20repozytorium%20AIS%20dom
echo " "
echo "Upgrade repo"
echo "# The main AI-Speaker repository:" > /data/data/pl.sviete.dom/files/usr/etc/apt/sources.list
echo "deb [trusted=yes] https://powiedz.co/apt dom stable" >> /data/data/pl.sviete.dom/files/usr/etc/apt/sources.list
echo "deb [trusted=yes] https://powiedz.co/apt python 3.9" >> /data/data/pl.sviete.dom/files/usr/etc/apt/sources.list
echo " "
apt update
echo " "
  1. Manager pakietów apt instaluje nowe pakiety
curl http://localhost:8122/text_to_speech?text=Start%20instalacji%20binarnych%20pakiet%C3%B3w
echo "APT install"
apt install -y libacl
apt install -y apt
apt install -y clang
curl http://localhost:8122/text_to_speech?text=Instaluj%C4%99%20pakiety%20j%C4%99zyka%20C
apt install -y ldc
apt remove -y python
rm -rf /data/data/pl.sviete.dom/files/usr/lib/python3.7
http://localhost:8122/text_to_speech?text=Instaluj%C4%99%20pozosta%C5%82e%20pakiety%20binarne
apt upgrade -y
apt install -y libusb
  1. Instalujemy najnowszą wersję pythona
echo "Python upgrade"
curl http://localhost:8122/text_to_speech?text=Instaluj%C4%99%20pakiety%20j%C4%99zyka%20python
apt install -y python
  1. Instalujemy najnowszą wersję Nodejs w wersji LTS
echo "Nodejs uprgrade"
curl http://localhost:8122/text_to_speech?text=Instaluj%C4%99%20pakiety%20node%20js
apt remove -y nodejs
apt install -y nodejs-lts
  1. Zmieniamy usługę, która odpowiada za serwer FTP
echo "Fix FTP serwer"
curl http://localhost:8122/text_to_speech?text=Zmiana%20serwera%20FTP
pm2 delete ftp
pm2 start busybox --name ftp --output  /dev/null --error  /dev/null --restart-delay=150000 -- tcpsvd -vE 0.0.0.0 1024 busybox ftpd -w /sdcard
pm2 save
  1. Instalujemy ponownie pakiet pythna ais-dom i kilka innych potrzebnych do jego działania
echo "ais-dom install"
curl http://localhost:8122/text_to_speech?text=Instalacja%20Asystenta%20domowego
pip install --upgrade pip
pip install wheel
pip install ais-dom
pip install bcrypt==3.1.7
pip install sqlalchemy==1.3.20
  1. Restartujemy usługę ais
echo "PM2 restart AIS"
curl http://localhost:8122/text_to_speech?text=Ponowne%20uruchomienie%20us%C5%82ugi%20Asystent%20domowy
pm2 restart ais

Komenda, która uruchamia te wszystkie kroki aktualizacji

Najlepiej wykonać po połączeniu się z bramką z zewnętrznego klienta ssh.
Dobrze jest podczas wykonywania tej procedury mieć bramkę podłączoną do głośnika czy tv tak, żeby słyszeć co jest aktualnie wykonywane / instalowane.

curl https://raw.githubusercontent.com/sviete/AIS-utils/master/linux/DEV2/apt_upgrade.sh | bash

Co robić w przypadku problemów

Procedurę testowaliśmy wielokrotnie na kilku bramkach.
Uwaga! Jest ona jednak bardzo czasochłonna, ponowne uruchomienie systemu Asystent domowy będzie trwało około 30 minut (podczas tego kroku instalowane są na bramce pakiety i kompilowane ich zależności).

Ponieważ nie wiemy co jest instalowane na bramce - jakie dodatki, pakiety i integracje, dlatego nie możemy mieć 100% pewności, że procedura u każdego zakończy się sukcesem.
Gdyby były jakieś problemy to proszę komentować, co pojawiło się w konsoli - postaramy się pomóc.

Oczywiście gdyby coś było nie tak, to zawsze będzie można przywrócić system wykonując:

7 polubień

Aktualizacja przeszła ale nie startuje aplikacja ais

2|ais      | 2020-11-28 14:25:36 ERROR (MainThread) [root] Uncaught exception
2|ais      | Traceback (most recent call last):
2|ais      |   File "/data/data/pl.sviete.dom/files/usr/bin/hass", line 8, in <module>
2|ais      |     sys.exit(main())
2|ais      |   File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/__main__.py", line 312, in main
2|ais      |     exit_code = runner.run(runtime_conf)
2|ais      |   File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/runner.py", line 133, in run
2|ais      |     return asyncio.run(setup_and_run_hass(runtime_config))
2|ais      |   File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/asyncio/runners.py", line 44, in run
2|ais      |     return loop.run_until_complete(main)
2|ais      |   File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
2|ais      |     return future.result()
2|ais      |   File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/runner.py", line 122, in setup_and_run_hass
2|ais      |     hass = await bootstrap.async_setup_hass(runtime_config)
2|ais      |   File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/bootstrap.py", line 83, in async_setup_hass
2|ais      |     async_enable_logging(
2|ais      |   File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/bootstrap.py", line 355, in async_enable_logging

2|ais | from homeassistant.components import ais_usb
2|ais | File “/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/components/ais_usb/init.py”, line 14, in
2|ais | import pyinotify
2|ais | ModuleNotFoundError: No module named ‘pyinotify’

Ok dzięki za info
Wydaje się z loga, że problem to brak modułu pyinotify który wydawało się nam, że jest jako zależność … i sam się zainstaluje… sprawdzimy to

Zobacz proszę czy jak wpiszesz:
‘’’
pip install pyinotify
‘’’
a potem
‘’’
pm2 restart ais
‘’’
To czy się uruchomi ?

Uruchomienie całego systemu pierwszy raz może trochę trwać, to co robi bramka możesz sprawdzić w logach

‘’’’
pm2 logs
‘’’’
albo sprawdzając

‘’’
htop
‘’’’

Jeżeli będzie dalej problem to w poniedziałek to wyjaśnimy

Najpierw wykonałem pełen restart aplikacji, zaktualizowałem, uruchomiłem ten skrypt instalacyjny i poleciało. Appka znów Joe startowała, więc doinstalowałem pyinotify appka ruszyła ale nie było z nią łączności. Uprzedzam że instalowanie pakietów po uruchomieniu trwa naprawdę długo i najlepiej zostawić bramkę w spokoju na godzinę. Jeżeli apka dalej nie wstała kompletnie to wykonać pm2 restart AIS i znów czekać.

Nie wiem co jest przyczyną ale po przejściu na wersję AIS LTS w opisie jest, że Nodejs będzie w wersji v14 a mi się zainstalowała wersja v12

nodejs

Czyli finalnie, po doinstalowaniu pyinotify i czekaniu uruchomiło się i działa ?

dzięki za info, sprawdzimy i damy znać…


dzięki, zmieniliśmy opis, zostajemy przy v12 bo v14 jest jeszcze aktywnie rozwijane, a w v12 już tylko poprawki - to nam pasuje bardziej do wersji LTS (nikt już nie popsuje)

ps
zmiana nodejs to nie jest wielki problem - to możemy robić zwykła aktualizacją
bardziej skomplikowana jest sytuacja z python, tu zmiana wersji pociąga za sobą kompilację wielu pakietów

Tak. ale pojawiły się nowe wpisy w logach, wcześniej ich nie odnotowałem.
Logger: zeroconf
Source: /data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/zeroconf/init.py:400
First occurred: 30 listopada 2020, 8:16:32 (1 occurrences)
Last logged: 30 listopada 2020, 8:16:32

Error sending through socket 12
Traceback (most recent call last):
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/zeroconf/__init__.py", line 2914, in send
    bytes_sent = s.sendto(packet, 0, (real_addr, port))
OSError: [Errno 22] Invalid argument

Oraz

Logger: homeassistant
Source: /data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/runner.py:115
First occurred: 30 listopada 2020, 21:00:28 (1 occurrences)
Last logged: 30 listopada 2020, 21:00:28

Error doing job: Future exception was never retrieved
Traceback (most recent call last):
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/concurrent/futures/thread.py", line 52, in run
    result = self.fn(*self.args, **self.kwargs)
TypeError: 'NoneType' object is not callable

dzięki - sprawdzimy :slight_smile:

zeroconfig

z tego co wiem po zeroconf my (bramka ais) się rozgłasza w sieci
dzięki temu można (na linux i apple) łączyć się z usługami na bramce (http, ftp, ssh) po adresie lokalnego hosta: ais-dom.local (bez ip)

może to gdzieś tu się dzieje… zobaczymy

może to być też tak, że to u Ciebie w sieci jakieś urządzenie też rozgłasza swoje usługi po zeroconf ale Asystent domowy nie jest w stanie ich zrozumieć

Future exception was never retrieved

to “znany błąd”, chyba ktoś(jakaś integracja) wywołuje z wątku asynchroniczny kod…
skomplikowany temat sięgający początków HA problemów z zawieszaniem się systemu i spotkania autora HA z autorem Pythona (obaj panowie pochodzą z Holandii).
Te rzeczy wychodzą od czasu do czasu w systemie bo cześć wewnętrznych metod systemu działa jeszcze w wątkach (stare rzeczy) a część asynchronicznie (na nowy sposób).
Jeżeli coś się blokuje w systemie to właśnie dlatego, że kod działający w wątku wywołuje coś w co jest asynchroniczne (w pętli) i na odwrót.
Te problemy są sukcesywnie naprawiane w HA. My też coraz bardziej to już rozumiemy i wiemy jak unikać takich pułapek. Ale przyznajemy, że prawdopodobnie każdy coś takiego już widział w logach :wink:

PS
1 wystąpienie błędu (1 occurrences) może być jakimś wyjątkiem
to nie jest super dobrze, wolimy jak w logach nie ma błędów… ale to nie jest nic strasznego

PS2
pyinotify - zależność naprawiona w nowej wersji
poprawione też w skrypcie który to instaluje - inni którzy zrobią to skryptem nie będą mieli już tego problemu :+1:

1 polubienie

mimo użycia tej komendy

ma kilka warningów :

dpkg: warning: while removing python, directory ‘/data/data/pl.sviete.dom/files/usr/lib/python3.7/lib2to3’ not empty so not removed
bash: line 26: http://localhost:8122/text_to_speech?text=Instaluję%20pozostałe%20pakiety%20binarne: No such file or directory

dpkg: warning: unable to delete old directory ‘/data/data/pl.sviete.dom/files/usr/bin/applets’: Directory not empty

dpkg: warning: while removing nodejs, directory ‘/data/data/pl.sviete.dom/files/usr/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator’ not empty so not removed

ale wszystko przebiegło chyba pomyślnie mimo iż trochę się uruchamiało

1 polubienie

zainstalowalem sobie ta wersje poprzez putty i teraz mam caly czas problem z python, poniewaz sie nie instaluje. Gdy sprawdzam konfiguracje bramki przed restartem to caly czas kreci sie kolko i nic sie nie dzieje.
W logach takie bledy:

Logger: homeassistant.util.package
Source: util/package.py:112
First occurred: 18:55:53 (1 occurrences)
Last logged: 18:55:53
Unable to install package python-miio==0.5.3: ERROR: Could not find a version that satisfies the requirement pytz<2020.0,>=2019.3 (from python-miio) ERROR: No matching distribution found for pytz<2020.0,>=2019.3 

Logger: homeassistant.setup
Source: setup.py:138
First occurred: 18:55:53 (1 occurrences)
Last logged: 18:55:53
Setup failed for xiaomi_miio: Requirements for xiaomi_miio not found: [‘python-miio==0.5.3’].

Logger: homeassistant.bootstrap
Source: bootstrap.py:580
First occurred: 19:00:44 (1 occurrences)
Last logged: 19:00:44
Setup timed out for stage 2 - moving forward 



Logger: homeassistant.bootstrap
Source: bootstrap.py:588
First occurred: 19:05:44 (1 occurrences)
Last logged: 19:05:44
Setup timed out for bootstrap - moving forward 



Logger: homeassistant
Source: core.py:1440
First occurred: 19:05:53 (10 occurrences)
Last logged: 19:05:53
Error doing job: Task exception was never retrieved

Traceback (most recent call last):
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/core.py", line 1440, in async_call
    raise ServiceNotFound(domain, service) from None
homeassistant.exceptions.ServiceNotFound: Unable to find service group/set

Problem jest z integracją miio, czyli jakieś urządzenie Xiaomi. Wykomentuj integrację i sprawdź czy wtedy się uruchomi. Wtedy będziemy próbować naprawić dalsze zależności.

Czy to już jest wykonane? Mogę robić reset i zainstaluje mi się już po nowemu?

1 polubienie

Z tego co widzę to po pełnym resecie pójdzie już z LTS

Post do usunięcia . N

Mam pytanie.
Czy bramka Dev 2 bedzie już na LTS?
Zastanawiam się nad zmianą :wink:

@Cino111 @Tomasz
Tak, wystarczy zrobić pełny reset i będzie LTS support.

@Kraszewsky LTS jest fabrycznie na dev2, ale mając dev1 nie ma sensu kupować dev2 (tak, tak, wiemy- słabe to nasze naciąganie klienta :stuck_out_tongue_winking_eye:), wystarczy że zrobisz pełny reset (lub procedurę opisana na początku tego posta i będziesz miał LTS).
Jak się zastanawiasz nad zmianą, to lepiej odłóż na razie te 249zł i poczekaj na bramkę pro :grin::v:

Pozdrawiamy! :slight_smile:

Na dniach dojdą kamery po onvif więc zobaczymy jak dev1 sobie poradzi :wink:
Jak coś skupujecie dev1 za rabat na dev2? :grinning_face_with_smiling_eyes::grinning_face_with_smiling_eyes:

1 polubienie

jak długo ???

to wszystko, co na ten temat na tę chwilę wiadomo :wink: