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
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.
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 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:
- Najnowsze wydanie Python 3.9, który będzie wspierany przez 5 lat od wydania, czyli do 2025
- Nodejs LTS v12 ze wsparciem do kwietnia 2022
- clang 10.0.1
- ponad 100 najnowszych wersji pakietów, które mamy na bramce- mosquitto, ffmpeg, rclone, libsocket, ttyd…
- Bonus, baza PostgreSQL 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
- 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 " "
- 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
- 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
- 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
- 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
- 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
- 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: