mbebe / blomqvist

blomqvist
GNU General Public License v3.0
155 stars 55 forks source link

Kodi 18.9 na enigma2 - zgemma h9 twin problem z wtyczkami video #630

Open kunraf opened 3 years ago

kunraf commented 3 years ago

Od kilku dni problemy z wtyczkami video z repo mbebe. Netflix, tvp działają, na wtyczkach mbebe jest błąd, dziennik zdarzeń nic nie rejestruje

https://user-images.githubusercontent.com/49157039/135719997-06a98dcc-1744-4740-8f9e-b274250282ec.mp4

DenDyGH commented 3 years ago

Problem z playerem jest znany(https://github.com/mbebe/blomqvist/issues/628). Wkrótce @rysson powinien to ogarnąć. Tymczasowo możesz sobie zainstalować starszą wersję: https://github.com/mbebe/blomqvist/blob/master/zips/plugin.video.playermb/plugin.video.playermb-1.9.zip

kunraf commented 3 years ago

a pozostałe wtyczki - hejo, internetowa, cda, youtube, polsatgo? to ten sam problem?, jeszcze tydzień temu wszystkie chodziły

rysson commented 3 years ago

To jest jakiś generalny problem z obsługą SSL (raczej certyfikatów niż samego protokołu). PlayreMB 1.9 miał wprost zapisane, żeby ignorował SSL, co nie jest najbardziej bezpiecznym rozwiązaniem. Developerska wersja 1.9.904 ma opcję, w której można SSL wyłączyć i wtedy działa tak jak 1.9. Co nie rozwiązuje problemu, dlaczego w ogóle jest błąd SSL.

rysson commented 3 years ago

No to jest przypudrowanie problemu. Mam silną awersję do ignorowania błędów bezpieczeństwa, szczególnie jak jakieś dane wrażliwe idą (dane do logowania). Niby tylko przejąc można bez trudu konto do playera, ale sama idea jest bardzo zła.

Pewnym kompromisem mogłoby być wykrycie błędu i rzucenie komunikatu, weź sobie oglądaczu i przestaw.

adamplonka commented 3 years ago

No to jest przypudrowanie problemu. Mam silną awersję do ignorowania błędów bezpieczeństwa, szczególnie jak jakieś dane wrażliwe idą (dane do logowania). Niby tylko przejąc można bez trudu konto do playera, ale sama idea jest bardzo zła.

no ale akurat logowanie przechodziło w wersji 1.9.5, błąd pojawiał się dopiero na trzecim poziomie wyboru kategorii. Czy to oznacza że tylko niektóre zapytania mają włączone sprawdzanie SSL?

DenDyGH commented 3 years ago

@plonkaadam ogólnie jest problem z certyfikatami w waszych systemach (https://kodi.wiki/view/SSL_certificates). Czy twój system na tej malinie jest aktualny? Czy w ogóle próbowałeś aktualizować? Możesz spróbować wymusić aktualizację certyfikatów komendą: sudo update-ca-certificates Dodatkowo komendą: sudo pip3 list możesz sprawdzić czy masz zainstalowane paczki "certifi" oraz "cryptography" i w jakich wersjach. No i jeszcze jedna opcja to sprawdzenie paczki "certifi" w Kodi. Ustawienia > Ustawienia systemu > Dodatki > Zarządzaj zależnościami > certifi Sprawdź czy jest to aktywne i w najnowszej wersji, ew. możesz spróbować to przeinstalować.

adamplonka commented 3 years ago

No rozumiem. System aktualny, update puszczam co parę tygodni, sprawdzę resztę później jak znajdę czas. Ale nie takie było pytanie - pytam jak to możliwe że część requestów (na przykład logowanie) przechodzi. Czy to oznacza że sprawdzanie SSL jest wyłączone do logowania a włączone do innych operacji?

kunraf commented 3 years ago

gdzie znajde repo od mbebe zip sprzed ostatniej aktualiazacji? sam player nic mi nie daje

DenDyGH commented 3 years ago

@kunraf ty musisz logi dać bo: YouTube - nie jest wtyczką od mbebe i nie ma tego w repo mbebe, poza tym wtyczka działa Internetowa - ostatnia aktualizacja była 7 miesięcy temu! - wtyczka odpala Hejo - ostatnia aktualizacja była 20 dni temu - wtyczka odpalda

rysson commented 3 years ago

@plonkaadam, pytanie jest jak najbardziej zasadne. Brak odpowiedzi, przynajmniej z mojej strony, jest spowodowany wyłącznie brakiem czasu, do jutra jestem całkowicie wyjęty. A potem pewnie będę odsypiał.

Jeśli tak się zachowuję to tylko mogę zgadywać, że przez requests idą inaczej żądania niż bezpośrednio przez urllib3. Sprawa jest do obadania. Niezależnie od tego wtyczka 1.9 korzystała tylko z requests i miała całkowicie wyłączoną weryfikację certyfikatów SSL.

Jeśli requests sobie radzi obecnie z certyfikatami to i my sobie poradzimy, w końcu ona też korzysta wewnętrznie z urllib3. W skrajnym przypadku można zawsze używać requests tylko ona jest dobre kilkanaście procent wolniejsza, ile dokładnie to nie napiszę, pobieranie rzeczywistych danych testowałem na początku roku.

rysson commented 3 years ago

@plonkaadam, dzisiaj odsypiam. Ale w między czasie możesz na tej maszynie uruchomić testowy skrypt?

import requests
import urllib3

url='https://player.pl/playerplus'

with requests.Session() as sess:
    with sess.get(url) as resp:
        print(len(resp.text))

http = urllib3.PoolManager()
resp = http.request('GET', url)
text = resp.data.decode('utf-8')
print(len(text))

Aby uruchomić skrypt (powiedzmy, że go masz w /tmp/c.py) razem z modułami kodi, to możesz wpisać w konsoli:

PYTHONPATH=$(ls -d $HOME/.kodi/addons/script.module.*/lib | tr '\n' ':') python /tmp/c.py

Może sprawniej było na Discordzie się skomunikować jeśli idzie o dyskusję o poprawkach poprawek?

Dobranoc :-)

EDIT: u mnie na π4 (libreelec) chodzi bez problemu (wtyczka też).

adamplonka commented 3 years ago

Wynik taki jakiego można było się spodziewać

23804
Traceback (most recent call last):
  File "./skrypt.py", line 11, in <module>
    resp = http.request('GET', url)
  File "/home/pi/.kodi/addons/script.module.urllib3/lib/urllib3/request.py", line 76, in request
    method, url, fields=fields, headers=headers, **urlopen_kw
  File "/home/pi/.kodi/addons/script.module.urllib3/lib/urllib3/request.py", line 97, in request_encode_url
    return self.urlopen(method, url, **extra_kw)
  File "/home/pi/.kodi/addons/script.module.urllib3/lib/urllib3/poolmanager.py", line 330, in urlopen
    response = conn.urlopen(method, u.request_uri, **kw)
  File "/home/pi/.kodi/addons/script.module.urllib3/lib/urllib3/connectionpool.py", line 762, in urlopen
    **response_kw
  File "/home/pi/.kodi/addons/script.module.urllib3/lib/urllib3/connectionpool.py", line 762, in urlopen
    **response_kw
  File "/home/pi/.kodi/addons/script.module.urllib3/lib/urllib3/connectionpool.py", line 762, in urlopen
    **response_kw
  File "/home/pi/.kodi/addons/script.module.urllib3/lib/urllib3/connectionpool.py", line 720, in urlopen
    method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
  File "/home/pi/.kodi/addons/script.module.urllib3/lib/urllib3/util/retry.py", line 436, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='player.pl', port=443): Max retries exceeded with url: /playerplus (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),))

sudo update-ca-certificates nic nie zrobiło (0 updated)

certifi i cryptography są na liście, zaktualizowałem ich wersję ale to też nic to nie zmieniło. Zaktualizowałem teraz cały system i wszystkie pakiety, nadal to samo. Puściłem sudo update-ca-certificates --fresh, na liście jest debian:GlobalSign_Root_CA_-_R3.pem używany przez player, nie wiem czemu nie działa.

A może by tak dodać ten certyfikat do wtyczki:

import requests.sessions

requests_session = requests.sessions.Session()
requests_session.verify = ".../cacerts.pem"
rysson commented 3 years ago

A może by tak dodać ten certyfikat do wtyczki

Owszem, ale nie w ten sposób, bo akurat requests sobie radzi (pierwsza liczba w logach). To urllib3 nie widzi certyfikatu (zgaduję, że CA) i bardzo mnie to dziwi.

Czyli generalnie na maszynie są certyfikaty obsługiwane.

A taki test? Przydałby mi się na chwilę tunel do Twojego sprzętu.

import urllib3
from certifi import where
print(where())
url='https://player.pl/playerplus'
http = urllib3.PoolManager(ca_certs=where())
resp = http.request('GET', url)
text = resp.data.decode('utf-8')
print(len(text))
adamplonka commented 3 years ago

to zwraca

/home/pi/.kodi/addons/script.module.certifi/lib/certifi/cacert.pem
23804
rysson commented 3 years ago

@plonkaadam, no to jesteśmy w domu. Co prawda nie wiadomo, czy gdzie indziej się nie popsuje :-P

Niby zawsze mogę zrezygnować z urllib3 ale ona samotnie jest wyraźnie szybsza niż z narzutem requests. Myślę, że dorobię opcję, żeby się dało użyć wolniejszej ale stabilniejszej metody na wszelki wypadek. Wolałbym jednak nie rezygnować z urllib3 bo akurat tej wtyczce na prędkości nie zbywa.

rysson commented 3 years ago

Oprócz naprawy certyfikatów nigdy nie wiadomo, czy się u kogoś nie popsują, więc nie zrezygnowałem z pomysłu pytania co zrobić przy błędach SSL. Przykład działania (yyy to sztuczne odwołanie do https://wrong.host.badssl.com, na końcu się wywala bo tam nie ma JSON-a).

https://user-images.githubusercontent.com/5898312/136266747-da6690b3-cb28-41f3-9ac4-dea5382ee96b.mp4

rysson commented 3 years ago

Wersja do testów: 1.9.905.

adamplonka commented 3 years ago

@rysson : Mam pytanie - czy gdzieś po drodze został poprawiony błąd wyświetlania "brak w pakiecie"? Bardzo często po odtworzeniu jednego odcinka, albo po wejściu do kategorii pojawia się przy wszystkich pozycjach właśnie taki komunikat - nic wtedy nie działa, trzeba wyjść poziom wyżej i wejść z powrotem co zazwyczaj naprawia problem. Przeglądam changelogi i plany i nie mogę się doszukać wzmianki

rysson commented 3 years ago

@plonkaadam, wiesz, ciężko mi powiedzieć, bo nie widziałem nigdy tego zachowania. Jak to było na 1.9 vs 1.9.5? I czy teraz jest?

DenDyGH commented 3 years ago

@plonkaadam ja na ponad 4 miesiące użytkowania wersji 1.9.5 nie natknąłem się na taki objaw. Jeśli coś takiego było to zostało wyeliminowane :) (no chyba, że to będzie coś po stronie systemu :P)

rysson commented 3 years ago

Wystawiłem pull-request z ostatnimi poprawkami: mbebe/blomqvist_srcs#2 Poprosiłem @mbebe o przejrzenie, akceptację i wydanie. Wersję oznaczyłem jako 1.10.

@kunraf, zerknij czy dla playera jest lepiej. Resztę masz w tym repo, w tym własnie piszemy: https://github.com/mbebe/blomqvist/tree/master/zips Zawsze możesz zablokować aktualizację i wyjąc sobie zip-y w tej wersji, która Ci pasuje i zainstalować ręcznie. Chyba zawsze jest parę wersji wstecz. @mbebe usuwa najstarsze, żeby nie było za dużego śmietnika. Ale i one są, bo w końcu repozytorium git.

Jeśli nie masz dla nas logów z tym co się wywala, to więcej nie możemy pomóc. W takim razie prosiłbym o zamknięcie zgłoszenia, bo wtyczka z filmu jest poprawiona, miejsce starszych wtyczek wskazane.