Hurricane Electric Free DNS – Moje odkrycie roku

W trakcie formatu mojego VPS’a (o którym pisałem w poprzednim poście) dotarło do mnie, że WordOps nie ogarnia DNS’ów. Nie był to dla mnie problem, bo korzystałem kiedyś z MaraDNS, który wg mnie jest o niebo bardziej czytelny i lepszy od rozpowszechnionego i antycznego Bind9 (mogę w sumie kiedyś o tym napisać więcej). Ale nie chciałem chyba się znowu pchać w utrzymywanie serwera DNS na własnym VPS’ie. Co prawda były tego zalety, ale nie po to przenosiłem się na WordOps, żeby teraz znowu dokładać sobie manualnej roboty. Przypomniałem sobie, że lata temu czytałem gdzieś, że ktoś gdzieś mówił, że amerykański dostawca Hurricane Electric, udostępnia darmowy serwer DNS. Wtedy z tego zrezygnowałem, bo wydawało mi się, że muszę przecież mieć serwer DNS lokalnie, ale dzisiaj dotarło do mnie, że no nie muszę. Postanowiłem więc przyjrzeć się niemu bliżej.

Na pierwszy rzut oka

Strona Hurricane Electric jest dość… niepozorna. Kojarzy się raczej z jakąś stroną nie zmienianą od 2001 roku.

Screenshot storny głównej he.net

Link do darmowego serwera DNS to po prawej „Free DNS” (zaznaczyłem na czerwono). Co ciekawe każda podstrona jest inna pod względem linków. Nawigacja po systemie jest dla mnie dość wymagająca, ale chyba powoli się przyzyczajam (no i porobiłem sobie zakładki, do tego czego potrzebuje 😉 ).

Polecam sobie poczytać „ficzery” jakie wspomniana usługa posiada:

  • Wsparcie zarówno dla zapytań przez IPv4 jak i natywnego IPv6.
  • Obsługa rekordów A, AAAA, ALIAS, CNAME, CAA, MX, NS, TXT, SRV, SSHFP, SPF, RP, NAPTR, HINFO, LOC i PTR
  • Jakiś tam „sprytny tryb” do ogarniania odwrotnej stref (reverse zones)
  • Wsparcie dla „slavów”.
  • Wiele formatów odwrotnych stref: Standard, RFC 4183, RFC 2317, DeGroot.
  • Odpytywanie geograficznie najbliższego serwera HE.
  • Sprawdzanie poprawności delegacji stref (w obie strony).
  • Podstawowe sprawdzanie składni rekordów.
  • Wiele domen dla jednego konta.

Jak na darmową obsługę, to muszę powiedzieć, że jestem w szoku. W dodatku 0 reklam na stronie.

Konto

Do korzystania z konta trzeba zarejestrowć darmowe konto. Niestety formularz rejestracyjny jest dość długi (trzeba podać wszystkie dane teleadresowe).

Widok prezentujący formularz rejestracji na he.net

Plusem jest to, że jedno konto gwarantuje nam dostęp do wszystkich usług HE.

Na pochwałę zasługuje możliwość włączenia uwierzytelnienia wieloskładnikowego (co z resztą czym prędzej uczyniłem).

Minusem jest to, że do każdej usługi musimy logować się osobno. Jest to zapewne związane z bezpieczeństwem. Podejrzewam, że twórcy używają ciasteczek do trzymania sesji, i nie chcieli używać wildcarda dla wszystkich subdomen *.he.net (co z resztą jest mądrym posunięciem). A tak to już jest, że najczęściej się wybiera: albo UX, albo security, albo ficzery.

Usługa

UI jest ponownie skromny, ale czytelny. Po lewej mamy to co zapewne najbardziej zainteresuje, a więc „Add a new domain”. Po kliknięciu pojawia się modal z polem do wpisania nazwy domeny. Przejście dalej spowoduje nie tylko dodanie domeny do naszej listy, ale także sprawdzenie czy na pewno domeny są skierowane na odpowiednie serwery he.net.

Widok prezentujący listę domen na dns.he.net

Po dodaniu pojawia nam się widok szczegółów domeny (ten sam jak byśmy kliknęli daną domenę na liście). Ponownie: widok jest prosty i czytelny. Przyciski w wierszu tuż nad tabelką pozwalają w bardzo szybko dodać nowe rekordy, których potrzebujemy. Skonfigurowanie wszystkich moich domen zajęło mi może 10 minut. Zero bawienia się z dokumentacją Bind9, itp.

Widok stonry dns.he.net, który prezentuje szczegóły domeny marverix.blog

Działa

DNSPerf dał he.net 41/71 pozycję w rankingu. Czy to daleko? Cóż, pewnie do takich gigantów jak Google czy CloudFlare. Ale za 0zł otrzymujemy dostęp do usługi, która z Europy odpowiada w 30ms (z mojego komputera 35ms), uptime 99.97% i prosty UI, bez reklam i pierdyliardem okienek do zamknięcia. Jasne, mógłbym pewnie zapłacić za utrzymanie na płatnym serwerze, ale czy ktoś zauważy różnicę? 35ms to naprawdę dla mnie niewiele (zwłaszcza, że DNSy są później cachowane lokalnie, więc to tylko za pierwszym razem dodatkowy czas).

Zrzut ze strony DNSPerf przedstawiającą wyniki testów wydajności dla he.net

Najfajniejsze dla mnie jest to, że to po prostu działa. Koniec z utrzymywaniem serwera u siebie. Koniec z bawieniem się w dodatkowe serwery mirrorowe.  Mi to totalnie wystarcza i nie zapowiada się, żebym w najbliższych latach zmieniał usługodawcę 🙂

Virtualmin? Nigdy więcej

Virtualmin to  panel administracyjny o otwartym źródle (ale istnieje też płatna wersja Pro), który ma być alternatywą chociażby dla cPanel’u czy Plesk’a. Zainstalowałem go 5 lat temu na swoim VPS’ie. Na początku zaimponował mi możliwościami i mnogością opcji.

Panel ma wbudowane mega dużo funkcji, które pozwalają za skonfigurowanie i zarządzanie swoim serwerem. Ale po czasie ta mnogość zaczęła mnie przytłaczać. Dlaczego? Bo jest rzucona użytkownikowi na twarz. UI jest stary i toporny (co prawda jest „nowa” wersja, ale umówmy się, że to taki bardziej 2013 niż 2021). Nauka gdzie jest jaka opcja zajęło mi trochę czasu.

Do tego UI’a można się przyzwyczaić. Mój VPS ma 4 wirtualne rdzenie i 8GB RAM’u. Ktoś powie, że mało jak na dzisiejsze czasy, ale ja powiem, że mi to wystarcza. Mimo tego, było gołym okiem widać jak Virtualmin kocha zasoby. Nic dziwnego – w końcu ten system robi tak dużo. Ale ponownie – jeżeli ktoś np. chce znaleźć darmowy system dla swojej startującej firmy hostingowej… no to ok. Podejrzewam, że będzie miał sprzęt lepszy niż mój.

Nie mam na to dowodu, ale nie grzebałem w konfiguracji manualnie. Wszystkimi konfiguracjami Apache’a, MySQL’a, PHP’a itp zarządzał on. Ale gdy odpalałem np. bloga mojej żony, to „strona potrafiła myśleć” najpierw 10 sekund zanim cokolwiek się otworzyło. Na wykresach Virtualmin’a było ewidentnie widać jakieś dziwne piki zużycia CPU. Po co? Dlaczego? Jak to zdebugować? Nie wiem. Wiem jedno – na moim hostingu na Linuxpl.com, gdzie nie miałem nawet pół rdzenia procesora, ta sama strona po prostu śmigała.

Ostatnio robiłem stronę radiodroga.net, i szukałem jakieś prostego panelu lub narzędzia, który szybko skonfiguruje za mnie Ngnix’a, PHP’a i inne takie. I tak natrafiłem w sieci na CLI WordOps. Zainstalowaliśmy. Instalacja i postawienie działającego WordPress’a trwało 5 minut, a może nawet mniej. Byłem w szoku. Szybko, bez zbędnego UI’a, który zżera zasoby. No i twórcy zarzekają się, że projekt jest „security-oriented”.

Postanowiłem spróbować u mnie. Zgodnie z instrukcją na stronie WordOps o migracji z innych serwerów (ale nie systemów!) zrobiłem backup baz WordPress’ów. Skopiowałem pliki. Sprawdziłem 5 razy czy wszystko mam i postanowiłem odinstalować Virtualmina… Na stronie panelu jest „jednolinijkowiec”, który (teoretycznie) robi deinstalację. Spróbowałem.

Gdy skrypt skończył, okazało się, że tak, odinstalował wszystkie swoje paczki, ale syf konfiguracyjny jaki po sobie pozostawił to była tragedia. Wszyscy użytkownicy i grupy? Zostawione (nawet „webmin” i „virtualmin”!). Usługi? Część wyłączona, a część nie. Konfiguracje usług? Zostawione. Efekt był taki, że WordOps nie mógł dobić się do MySQL’a (MariaDB).  Robiłem apt purge, szukałem na necie how-to, próbowałem wszystkiego. Nic. Jeden problem rozwiązywałem, pojawiał się kolejny i kolejny.

Usiadłem do tego o 21, bo miałem nadzieję, że w godzinę się uwinę. Od konsoli SSH do mojego VPS’a odszedłem zrezygnowany i załamany o 00:30. Odinstalowanie Virtualmin’a rozpierniczyło mojego VPS’a. Wyjście było jedno… format. Na szczęście w panelu klienta OVH to 3 kliknięcia.

Jako programista, oprogramowanie, które nie potrafi posprzątać po sobie, jest nic warte. Jeżeli umiesz napisać instalator, to napisz kuźwa porządny deinstalator. Zwłaszcza jeżeli chodzi o coś, co ma pracować na serwerach, które są gdzieś hen daleko i nie masz do niego fizycznego dostępu.

Moją przygodę z Virtualmin’em mogę porównać chyba jak do jakiegoś toksycznego związku. Gdy masz dość i ogłaszasz, że czas się rozejść, to druga połowa robi scenę i za karę demoluje ci mieszkanie.

Nigdy więcej. Nie polecam.

„Gdybym nie był bity, to bym nie wyrósł na ludzi”

O napisaniu tego posta myślałem od kilku(nastu) miesięcy. Ogrom przeżyć i ładunek emocjonalny, który towarzyszy mi wystukując kolejne litery na klawiaturze powoduje, że całe moje ciało drży.

Nie zliczę ile razy słyszałem to zdanie. Przewija się zarówno w rozmowach na żywo jak i w dyskusjach w mediach społecznościowych. Jest to koronny argument za „klapsami”, a więc nie owijając w bawełnę – przyzwalający na przemoc w domu. Ale czy to naprawdę prawda? Skąd się bierze takie myślenie?

Syndrom sztokholmski

Zaznaczam, że nie jestem psychologiem czy psychoterapeutą. Są to jedynie moje przemyślenia. Dla mnie takie myślenie z daleka pachnie syndromem sztokholmskim.

Pierwsze badania prowadzono w latach siedemdziesiątych. Definicję i opis zjawiska na potrzeby FBI i Scotland Yardu opracował psychiatra Frank Ochberg. Stał na stanowisku, że w sytuacji skrajnego stresu i zagrożenia życia ofiara czuje się bezradna jak dziecko, zaś wszelkie przejawy litości agresora traktuje jak dar, co powoduje uczucie wdzięczności, skutkujące sympatią do napastnika.

Bezbronne dziecko, narażone na ogromny stres jakim jest niemożność przeciwstawienia się sile mięśni dorosłej osoby nie jest w stanie poradzić sobie z tym doświadczeniem. Psychika w takich wypadkach ma do wyboru dwie rzeczy: wypchnąć to wspomnienie do podświadomości, albo zacząć je racjonalizować.

Świadomość a podświadomość

Mózg jest tak skonstruowany tak, że zawsze wybiera najłatwiejszą drogą. Zatem co jest łatwiejsze? Stanąć w prawdzie i powiedzieć, „tak, jestem ofiarą przemocy domowej i przeżyłem/am traumę”, a następnie próbować poradzić sobie ze wszystkimi następstwami (przeżycie uczuć, których jako dziecko nie mogłeś/aś poprawnie przeżyć; życie z traumą; itd.), czy „dobrze, że byłam/em bity – to mnie nauczyło życia”. Oczywiście, że druga droga jest łatwiejsza. W tym wypadku temat zostaje „zamknięty”, a zarówno oprawca jak i ofiara mogą żyć dalej „szczęśliwi”. Natomiast w życiu jest tak, że nie wszystkie najprostsze rozwiązania są dobre na dalszą metę.

Rzeczywistość

To jak przekłamane jest zdanie z tytułu udawadnia wiele badań, które wskazują, że u dzieci, które doświadczyły przemocy w domu, częściej zauważa się:

  • Jąkanie
  • Zaburzenia psychosomatyczne (zaburzenia, w których istotną rolę odgrywają czynniki psychiczne – często niejasne skargi na ból)
  • Niepokój
  • Kompulsywne zachowanie
  • Zaburzenia snu
  • Nadmierny płacz
  • Problemy w szkole
  • Depresja
  • Zachowanie autodestrukcyjne
  • Uciekanie (zarówno z domu jak i od problemów w dorosłym życiu)
  • Gniew i wrogość
  • Niska samo ocena
  • Trudności w zaufaniu innym; problemy w związku

Źródło

Czy to wygląda na listę udowadniającą, że „wyrosło się na ludzi” ?

A bliźniemu swemu jak sobie samemu

Racjonalizowanie przemocy domowej niesie bardzo poważną konsekwencje: jest niezwalczana i propagowana. Jezus powiedział A bliźniemu swemu jak sobie samemu, i jest nie inaczej w tym wypadku. Jeżeli ofiara wychodzi z założenia, że to co ją spotkało było dobre, to dlaczego nie miałaby tego dobra dawać też swoim dzieciom? Przecież swoim dzieciom chcemy dawać wszystko co dobre, prawda? A więc błędny krąg przemocy nie zostaje przerwany, ale trwa. Co więcej mówi się o tym jak o oczywistym dobrze, nie tylko przez rodziców, ale, o zgrozo, ludzi, którzy mają bardzo duży wpływ na moralność w naszym społeczeństwie – kapłanów.

2 lata temu przechodziłem bardzo poważnie bostonkę. Przez 2 tygodnie byłem przykuty do łóżka, bo moja mobilność była bardzo ograniczona przez bolące wrzody, które miałem wszędzie – pod stopami też. Uczestniczyłem wtedy prawie codziennie we Mszy Świętej online, z Tyńcu (zakon Benedyktynów). Jeden z ojców, który prowadził Eucharystię, grzmiał z ambony o „bezstresowym wychowaniu” i że winą tego jest to, że dzisiaj dzieci nie dostają klapsów w domu.

Zatem skoro zarówno osoby świecie jak i duchowni wyrażają aprobatę do używania przemocy wobec dzieci, to jak mamy przerwać wspomniany wcześniej krąg przekazywania tego dobra?

Życie w prawdzie

Przywołując ponownie słowa mistrza Jezusa, prawda uczyni was wolnymi (J 8, 32), jedyną słuszną drogą wydaje się opcja pierwsza. Jest to bardzo bolesna droga, i trudna, w której nieodłącznym elementem wydaje się modlitwa, towarzystwo psychoterapeuty i spowiednika.

Warto zauważyć, żeby nie traktować swojego spowiednika czy współmałżonka/ę jako „taniego” psychoterapeutę (o czym pisze ks. Marcin Kołodziej w książce Szczerze o spowiedzi). Można to porównać do sytuacji, gdy chcesz wykonać generalny remont piwnicy, to potrzebujesz profesjonalisty, który pomoże Ci przez to przejść.

Czy będzie kolorowo? Nie. Tak jak wspomniałem, jest to trudna i bolesna droga. Być może zaczniesz zauważać u siebie stany depresyjne (dlatego tym bardziej potrzebna ci pomoc). Natomiast pocieszeniem jest to, że dasz swojemu dziecko prawdziwe dobro, jakim jest brak startu z traumą i bagażem emocjonalnym, którego nie potrafi unieść.

Godność dziecka

Na koniec chciałbym przywołać Katechizm Kościoła Katolickiego, punkt 2378:

Dziecko nie jest czymś należnym, ale jest darem. „Największym darem małżeństwa” jest osoba ludzka. Dziecko nie może być uważane za przedmiot własności, za coś, do czego prowadziłoby uznanie rzekomego „prawa do dziecka”. W tej dziedzinie jedynie dziecko posiada prawdziwe prawa: prawo, by „być owocem właściwego aktu miłości małżeńskiej rodziców i jako osoba od chwili swego poczęcia mająca również prawo do szacunku

Jeżeli powyższe przemyślenia Cię nie przekonują, to warto zadać sobie trzy pytania:

  1. Czy bicie drugiego człowieka jest wyrazem szacunku? (w myśl przytoczonego pt 2378)
  2. Czy Józef i Maryja podnieśli rękę na Jezusa?
  3. Czy chciałbyś mieć pracodawcę, który (licząc, że 6 letnie dziecko ma średnio 66cm, a dorosły człowiek 170cm, a więc jest on 2,57x wyższy [większy]) ma 4,4m (1,7*2,57) wysokości, i uderza cię kiedy go nie posłuchasz?

Pozostawiam Cię z tymi pytaniami.

Niechciany pracownik sklepu w twojej przeglądarce

Ostatnio chciałem sprawdzić coś na sklepie Morele.net, i wyskoczyło, mi chyba wszystkim znane, powiadomienie, że sklep chce pozwolenia na wyświetlanie powiadomień. Spiesząc się kliknąłem na „Zezwól” (zwyczajny miss-click). I zaczęło się… Było to jakoś tydzień temu, i od tamtego momentu, prawie przy każdym włączeniu przeglądarki,  oraz w trakcie zwykłego korzystania – np. oglądania YouTube’a, wyświetlają mi się powiadomienia o takie:

Gdyby nie to, że pisałem Omódlmy Net, to w życiu nie wiedziałbym gdzie szukać i jak to wyłączyć. Omódlmy Net to aplikacja typu PWA. Bez wdawania się w szczegóły, to taka aplikacja musi spełniać pewne wymagania. Po spełnieniu tych wymagań, normalna „strona internetowa” staje się „aplikacją”. Jednym z tych wymagań jest posiadanie i zarejestrowanie Service Workera.

Niechciany pasażer

Z założenia Service Worker (w dosłownym tłumaczeniu „pracownik serwisu”) ma pomagać w komunikacji między użytkownikiem (tobą i mną), a serwerem. To trochę jak doradca finansowy. Możesz sam rozmawiać bezpośrednio z bankiem i próbować wszystko samemu załatwiać, ale wtedy musisz wiedzieć o której bank jest otwarty, z kim rozmawiać o czym, kiedy są godziny sesji itp… A możesz skorzystać z usług wspomnianego doradcy. Wtedy jemu zlecasz co i jak, a to już w jego gestii zajęcie się wspomnianymi wczoraj kwestiami.

W dużym uproszczeniu po to zostały stworzone SW. Np. YouTube działa szybciej dzięki tej technologii. Co więcej, potrafi rozpoznać czy odłączył Ci się Internet (albo masz niestabilne łącze) i odpowiednio działać, aby nie pojawił Ci się jakiś nieznany komunikat błędu itp. To wszystko zasługa właśnie SW.

(Nie)Stety, zostało to pomyślane tak, że SW ma być „transparentny” zarówno dla użytkownika, jak i serwera. Wszystko ma działać niezależnie czy on jest, czy go nie ma. W związku z tym jego rejestracja (instalacja) i aktywacja jest niewidzialna. Po prostu wchodząc na stronę internetową, która deklaruje pod spodem, że używa SW, automatycznie (bez pytania nikogo o zdanie) następuje instalacja. Nieważne, że być może nigdy więcej na tą stronę nie wejdziesz. Stało się. Niczym ósmy pasażer Nostromo.

No i jest jeden mały szkopuł… Ci pracownicy mogą pracować w tle. A skoro mogą pracować w tle, i np. odbierać informacje o reklamach, i w dodatku mają pozwolenie na wyświetlanie powiadomień… No to przepis na upierdliwe reklamy gotowy.

Co mogę zrobić?

Otwieramy listę

Ku mojemu zdziwieniu, zarówno Firefox i Chrome nie dają jawnego i łatwego sposobu na zarządzanie pracownikami. W Firefoxie trzeba wpisać w adres przeglądarki about:serviceworkers i wyświetli się lista wszystkich zarejestrowanych SW. U mnie to 171…

W Chromie to adres chrome://serviceworker-internals

Wyrejestruj

Jeżeli wiemy jaki to sklep, to połowa sukcesu. U mnie wspomniane Morele:

I klikamy przycisk Wyrejestruj.

Natomiast jeżeli nie wiemy, to szukamy tego, który ma coś wpisane w polu pushEndpoint. To z tego źródła pracownik dostaje informacje o „nowościach” (reklamach).

Jest jeszcze jeden ostatni problem. To wróci. Usunęliśmy pasażera, ale po wejściu na daną stronę (w tym wypadku www.morele.net), SW zostanie ponownie zarejestrowany.

Zapobiegać?

Naturalnym tokiem myślenia jest zatem „ok, no to trzeba zablokować to rejestrowanie”. Tak, ale jak wspomniałem wcześniej – możemy też na tym stracić. Na chociażby płynności działania takich usług jak YouTube czy GMail.  Niestety (przynajmniej na Firefoxie) nie ma możliwości wybiórczego blokowania SW.

Opcja 1: Ukryte ustawienia – wyłączamy całkowicie

W Firefoxie wchodzimy na adres about:config i klikamy przycisk Akceptuję ryzyko. Teraz w polu wyszukiwania wpisujemy dom.serviceWorkers.enabled. Po prawej klikamy w strzałki. Zrobione.

Opcja 2: Ukryte ustawienia – wyłączamy tylko powiadomienia

Ta opcja powoduje, że SW będą nadal włączone, ale będą mogły wyświetlać powiadomienia, wyłącznie wtedy, kiedy będziemy na danej stronie. Czyli Morele będzie mogło wyświetlać powiadomienia (reklamy) tylko wtedy, kiedy będę na ich sklepie.

W Firefoxie wchodzimy na adres about:config i klikamy przycisk Akceptuję ryzyko. Teraz w polu wyszukiwania wpisujemy dom.webnotifications.serviceworker.enabled. Po prawej klikamy w strzałki. Zrobione.

Opcja 3: Instalujemy wtyczkę

Wchodzimy na https://addons.mozilla.org/pl/firefox/addon/block-service-workers/ i klikamy przycisk Dodaj do Firefox.

A następnie potwierdzamy przez kliknięcie Dodaj.

Zrobione.

 

Komputer masz w swojej kieszeni

Popatrz na swój telefon komórkowy. Co widzisz? Urządzenie, które służy do dzwonienia i pisania SMSów, i nic więcej? Czy może widzisz multimedialny kombajn do czytania wiadomości ze świata, robienia zdjęć, serfowania po internecie, odpisywania na maile, oglądania filmów i seriali oraz grania? A teraz wyobraź sobie laptopa (domowego, nie służbowego). Co na nim robisz? Czyżby lista była podoba?

Nie wiem jak Ty, ale ja jak patrzę na mój telefon komórkowy, to widzę komputer. I tak postrzegam to małe urządzenie już od liceum – od kiedy kupiłem swoją pierwszą Nokię z Symbianem. Tak, dzisiejsze smartfony to (nie boję się tego powiedzieć) pełnoprawne komputery, czasami wielokrotnie przewyższające wydajnością laptopy „w super cenie” z różnych popularnych marketów elektronicznych. Ba, myślę, że czasami biją na głowę niektóre komputery stacjonarne.

Aktualnie przeciętny smartfon, ma co najmniej 8 rdzeni, 6GB RAM, 64GB pamięci wbudowanej (+ często można spotkać możliwość rozbudowy), wyświetlacz, WiFi, Bluetooth, i port USB-C. I to ostatnie jest bardzo istotne. Bo USB-C to nie tylko nowe „dwustronne gniazdko do ładowania telefonu”.

Moc USB-C

Port, o którym mowa, to ten w kształcie toru wyścigowego – prostokąt z zaokrąglonymi kątami. Możesz go głównie kojarzyć z bardzo szybkim ładowaniem telefonu. I chociaż jest to prawda, to jest to jedynie muśnięcie jego możliwości.

Nie będę tutaj zanudzać specyfikacją techniczną (zainteresowanych odsyłam to bardzo dobrego artykułu na angielskojęzycznej Wikipedii). To co jest istotne, że USB-C jest trochę jak pierścień Saurona z Władcy Pierścieni – jeden by rządzić wszystkimi. Dzięki swobodzie jaką daje możliwość zdefiniowania własnego trybu działania USB-C, potencjał jest teoretycznie nieogarniczony. Aktualnie za pomocą tego portu można:

  • ładować telefon
  • ładować komputer (patrz chociażby MacBooki)
  • przesyłać dźwięk (patrz na przejściówki USB-C –> mini jack)
  • przesyłać obraz
    • pracować jako port HDMI
    • pracować jako port DisplayPort
  • obsługa VR (cokolwiek to znaczy)
  • no i oczywiście podłączać wszystkie urządzenia pracujące pod USB 2.0, USB 3.0 itp

Możesz się zastanawiać czy to nie jakiś żart. Jak to możliwe, że jeden mały port może służyć do tylu rzeczy? Ponownie – nie wdając się w szczegóły – ma to swoją cenę. Dosłownie i w przenośni. Pełnoprawne kable USB-C (nie wykastrowane z poszczególnych ścieżek) są o wiele droższe od swoich poprzedników. Wszystko przez to, że taki kabel ma ścisłe wymagania jakościowe. Oglądając 2 lata temu filmik z fabryki w Chinach gdzie produkowano kable USB-C, byłem w szoku jak skomplikowany jest to proces. Nijak się to ma to prostych 4-żyłowych kabelków poprzedniej generacji.

Ale wracając do tematu. Jeżeli w Twojej głowie zrodziło się pytanie „Marek, chcesz powiedzieć, że mój telefon obsługuje wszystkie te rzeczy?”, to jest to bardzo dobre pytanie.

Teoria kontra praktyka

Czysto teoretycznie? Tak. Niestety producenci telefonów szukając oszczędności ucinają możliwości USB-C. Tzn. że tak, to jest port USB-C, ale tylko z zewnątrz. Czyli fizycznie, więszość styków na płycie głównej nie jest nigdzie podłączona. Wystarczy wejść np. na GSMArena i poszukać swojego modelu telefonu, a następnie zjechać do sekcji „USB”. Jeżeli widzisz napis typu „USB Type-C 2.0”, no to masz okrojoną wersję i niestety nie będziesz w stanie przetestować tego co będę dalej pokazywał.

A jeżeli wspiera? No potrzebujesz tylko jednej rzeczy: hub.

Replikator portów

To urządzenie można znaleźć pod wieloma nazwami: hub usb-c, replikator portów usb-c, stacja dokująca usb-c… Ale jest to jedno i to samo urządzenie, które ma jeden cel: umożliwić podłączenie urządzeń korzystających z różnych gniazdek, pod jedno gniazdko USB-C.

Cena takiego urządzenia jest zależna od tego co ma mieć (jakie porty obsługiwać), no i firmy (a więc najczęściej – jakości [aczkolwiek nie jest to pewnik]). I tutaj z doświadczenia napiszę, że naprawdę nie warto żyłować 20zł mniej. Tak jak wspomniałem wcześniej, USB-C to naprawdę wymagający standard.

Będziemy szukać huba, który ma HDMI, co najmniej jeden port USB (typu A [a więc ten duży prostokątny co nigdy nie wiadomo, w którą stronę wtyczkę włożyć]) i co najmniej jeden port USB-C.

Ja po krótkich poszukiwaniach znalazłem kilka ofert wartych zastanowienia:

Osobiście bardzo lubię produkty naszego południowego sąsiada – marki i-tec. Korzystam zarówno w pracy, jak i w domu i nigdy nie było problemów.

Niech stanie się światłość

Możesz zastanawiać się o co mi w ogóle chodzi w tym wpisie? Miało być o komputerze w kieszeni, a tu o jakimś USB-C, replikatorach portów itp. I ta droga sprowadza się właśnie do tego. Podłącz kabel HDMI, myszkę i klawiaturę (ja mam bezprzewodową w jednym „donglu” USB), oraz ładowarkę do portu USB-C (na replikatorze!), a następnie replikator do komórki:

(Jak widać, ja mam jeszcze połączony kabel sieciowy, bo tak – to też działa bez najmniejszego problemu 😉 )

Jeżeli twój telefon obsługuje HDMI przez USB-C, to Android powinien pokazać coś w tym stylu:

Klikam w „Tryb pulpitu” i…

A nie mówiłem?

Co to za czary?

Żadne czary. Tak jak w tytule – Twój smartfon to pełnoprawny komputer. A od wielu lat Huawei i Samsung bardzo mocno rozwijają właśnie ten aspekt ich nakładek na system Android – żeby użytkownik mógł korzystać z telefonu jak z komputera. Udało się? Oceńcie sami.

Rozglądnijmy się

Mamy ikonki na pulpicie. Mamy „Start” w dolnym lewym rogu. W prawym głośność, komunikacja, bateria, zegar. Znajome? No i kursor też jest – bo steruje się normalnie myszką 🙂 (Swoją drogą mój telefon może pracować jako touchpad w tym trybie!)

Kliknięcie prawy przyciskiem myszki w daną ikonkę otwiera menu podręczne.

Po kliknięciu w ikonkę „Start” (nie wiem jak się on naprawdę nazywa, ale każdy wie o co chodzi) pojawia się lista zainstalowanych aplikacji.

A tak wygląda „Centrum powiadomień”.

Nie ma przycisku wyłączenia, ale jest możliwość zablokowania ekranu (tak, kombinacja klawiszy Win+L działa).

Obsługa aplikacji

Aplikacje otwierają się w okienku. Można je zminimalizować, powiększyć, przesywać, zmieniać rozmiar itp.

Bez problemu odtwarzał się film w jakości 1080p, w tle chodził Firefox i foobar2000.

Działa skrót klawiszowy do przełączania między aplikacjami (Alt+Tab):

Z tego co mi wiadomo, twórca aplikacji może sam zdefiniować jak ma wyświetlać się jego aplikacja w trybie desktop. A w dodatku może całkowicie zablokować używanie aplikacji w takim trybie. Nie mniej, jeżeli deweloper nie zdefiniuje tego, to system Android (a może nakładka EMUI od Huawei?) zrobi co w jego mocy, żeby wyświetlić poprawnie aplikację.

Pisanie

Jeszcze 4 lata temu Android bardzo kiepsko obsługiwał polski język na fizycznej klawiaturze. A dziś ku mojemu bardzo pozytywnemu zaskoczeniu jest to banalnie proste. W Ustawieniach wpisałem klawiatura, a wyszukiwarka podpowiedziała klawiatura fizyczna.

Kliknąłem w moją klawiaturę Logitech K350 i z listy wybrałem polski. Działa?

Ekstra!

A jak z programami typu Word? No bo jest Word na Androida. Jak się okazało… wujek Microsoft się wycfanił, i jeżeli aplikacja wykryje, że pracujemy w trybie desktop to… każe wykupić pakiet Office 365. Tzn. nie spodziewałem się chyba niczego mniej. Na szczęście można aktywować 30 dniowy okres próbny (po podaniu karty kredytowej).

Pomijając to, że musiałem aktywować abonament to byłem pozytywnie zaskoczony. Co prawda nie jest to tak zaawansowane jak na wersji Windowsowej, czy jak LibreOffice, ale myślę, że zaspokoi potrzeby większości ludzi.

Zastosowania profesjonalne

Cóż, jako programista fajnie by było zobaczyć jakieś podstawowe IDE. Marzyło mi się VSCode, ale ponieważ używa Electrona pod spodem, a twórcy Elecrona powiedzieli, że nie będą wspierać Androida… no to niestety.

Byłem natomiast bardzo mile zaskoczony jak dobrze działa Termux w tym trybie. Po podłączeniu się przez ssh do swojej głównej maszyny obawiałem się, że raczej nie ma co liczyć żeby działały takie programy jak nnn czy nano. Ale ku mojemu ogromenu zaskoczeniu wszystko śmigało jak należy. To znaczy, że wystarczy podłączyć się przez VPN do swojej sieci domowej, (o ile nie masz nic przeciwko pracy w terminalu [ja nie mam]) zainstalować jakieś konsolowe IDE i wio!

Inne

Do replikatora portów możemy podłączyć też oczywiście inne urządzenia USB. Jak chociażby pendrive czy zewnętrzny dysk twardy. Ja używam programu Cx File Explorer, który bez problemu wykrył i pozwolił mi przeglądać pliki:

Za piękne by mogło być prawdziwe

Gdzieś wcześniej wspomniałem o dwóch producentach: Samsung i Huawei… A reszta? No cóż. Pomijając już ograniczenia fizyczne, o których wspominałem, to Android od wersji 10 ma ukrytą (bo nieskończoną) obsługę trybu desktop. Na internecie można znaleźć filmiki jak to sobie włączyć. Ale ni jak ma się to tego co zaimplementował Huawei. I chociaż daleko mi do bycia szurem i dopatrywania się wszędzie teorii spiskowych, to myślę, że jest to po prostu nie po drodze wujkowi Google. Firma rozwija przecież własny system operacyjny na dekstopy – Chrome OS. Gdyby producent Androida skończył implementować natywną obsługę trybu pulpitu, to Google miałoby dwa systemu operacyjne, które robią praktycznie to samo. A konkurenja wewnątrz firmy zazwyczaj prowadzi do zjawiska tzw. kanibalizmu, czyli jedno w końcu pożarłoby drugie. Jest to wg mnie jedyne logiczne wytłumaczenie dlaczego tak ogromna firma od 2 wersji (a więc 2 lat) nie skończyła tej funkcjonalności. Od dwóch, no bo Google ostatnio wypuściło Android 12 Beta i jakoś cichosza o desktop mode…

Pomijajać natywne wsparcie, to niestety własny desktop mode rozwija aktualnie wyłącznie Huawei i Samsung (LG też rozwijało, ale LG już nie produkuje telefonów). Z informacji, które udało mi się znaleć, to kompatybilne telefony to:

  • Samsung Galaxy S8, S8+, S9, S9+, S10, S10+, S20, S20 FE, S20+, S20 Ultra, S21, S21 Ultra, Fold, Fold 2, Note 8, Note 9, Note 10, Note 10+, Note 20, Note 20 Ultra
  • Huawei Mate 10, 10 Pro, 20, 20 Pro, 20 Pro X, 30, 30 X, 30 Xs
  • Huawei P20, P20 Pro, P30, P30 Pro, P40, P40 Pro
  • Honor Note 10, View 20
  • LG G8 Thinq, V50 Thinq

Podsumowanie

Pracując w trybie pulpitu, były momenty w których zapominałem, że to „tylko telefon”. Moment uświadomienia sobie tego z powrotem było taką chwilą szoku i niedowierzania. Jakby widzę to, ale nie dociera to do mnie. Chyba to, że trzymam takie małe urządzenie w kieszeni jest bardzo zwodnicze. Nie uzmysławiam sobie na codzień, jak potężny komputer osobisty mam non stop przy sobie. A więc powstaje pytanie: czy człowiek 2021 roku potrzebuje laptopa w domu? A tym bardziej komputera stacjonarnego. Śmiem twierdzić, że nie. Większość ludzi do pracy ma laptopy firmowe. Dzieci dzisiaj częściej grają na komórce (lub konsoli) niż na komputerze. Dla przeciętnego użytkownika, nie ma rzeczy, której nie mogłby zrobić smartfon. Ba, co więcej komórka ma wbudowane aparaty. Wystarczy kupić statyw za 30zł i możesz prowadzić konferencję z Zooma, Teamsa czy innego programu. Wszystko jest.

Patrząc na to w ten sposób, może następnym razem, gdy będziesz wybierał(a) telefon komórowy dla siebie, może warto wziąć to pod uwagę. Może warto dopłacić 300zł i mieć telefon, który obsługuje tryb pulpitu? I tym samym pozbyć się starej stacjonarki, która już nie daje rady. A tak – wszystko w jednym miejscu i zawsze z sobą. Koniec problemów typu zalany, wolny i przegrzewający się laptop. Fajna wizja, co nie?

Obsługa FTP znika z Firefoxa

W trakcie, gdy pracowałem nad postawieniem Alpine Linux na Pandaboardzie, potrzebowałem szybko pobrać kilka plików z serwera FTP polskiego mirrora dla tejże dystrybucji linuxa. Wtem pojawiło się takie onkienko:

Myślę sobie „O co chodzi?”, przecież Firefox zawsze pięknie listował zawartość serwera FTP pozwalając na łatwe przeglądanie i pobieranie plików. Po krótkich poszukiwaniach dowiedziałem się, że od wersji 88 przeglądarki, obsługa FTP nadal jest wbudowana, ale domyślnie wyłączona. Natomiast Mozilla na swoim blogu poinformowała, że od wersji 90 zniknie całkowicie.

Wydawca tłumaczy się, że FTP jest już bardzo przestarzałą technologią i chodzi o bezpieczeństwo użytkowników.

No i ok. FTP jest już mega stare (starsze chyba od wszystkich, którzy czytają tego bloga – pierwsze wydanie w 1971 roku). Ale nadal używamy bardzo dużo starych i niebezpiecznych technologii. Chociażby SMSy. Wiadomości są nieszyfrowane. Czyli posiadając radio umożliwiające nasłuchiwanie na częstotliwościach 2G i 3G (bo zakładam, że nadal część ludzi nie ma komórek z 4G, nie mówiąc „rakotwórczym” o 5G) każdy użytkownik jest w stanie przeczytać wszystkie wiadomości, jakie „lecą” do/z komórek wokół niego. Ale jakoś nadal używamy SMSów.

Moim zdaniem Mozilla po prostu szukała argumentu jak pozbyć się z kodu niewygodnej funkcjonalności, której nie chce im się już wspierać (i tym samym łatać jej dziur). Co z resztą pokrywałoby się z „bezpieczeństwem użytkowników” o którym mówią.

Dobra wiadomość? Dla przeciętnego użytkownika nic się nie zmieni. Jeszcze nie widziałem, żeby jakiś zwykły użytkownik szukał czegoś na serwerach lustrzanych. Raczej wszyscy aktualnie wystawiają wszystko przez HTTP. A że HTTP już też jest „be”, to zdecydowana większość ruchu sieciowego leci już przez HTTPS. A tzw. power userzy? No cóż, oni umieją doinstalować sobie i używać zewnętrznego klienta FTP takiego jak FileZilla czy WinSCP.

A, no i ponieważ w wersji 88 i 89 ta funkcja jeszcze jest wbudowana, to wystarczy wejść w about:config, poszukać właściwości network.ftp.enabled i przestawić na true.

Ja tak zrobiłem i jeszcze przez dwie wersje zrobię na złość Mozilli 😀

Alpine Linux na Pandaboard ES Rev B3

W poprzednim wpisie było trochę o historii tej płytki. Dziś pokażę jak można postawić na nim Alpine Linux.

Krótko o Alpine Linux

Dla nie wtajemniczonych, Alpine to bardzo minimalistyczna dystrybucja Linuxa oparta o busybox. Dystrybucja jest bardzo popularnym wyborem jako OS dla kontenerów dockerowych. Co nie oznacza, że nadaje się tylko do tego. Ma własnego menedżera pakietów pt. „apk”. Bez problemu śmiga na nim Python 3, nginx, php, mysql itp.

Ze źródła krok po kroku

Na wstępie zaznaczam, że instrukcję piszę głównie dla siebie – żebym mógł później zajrzeć i przypomnieć sobie jak zrobiłem to, czy tamto 🙂 Instrukcja będzie głównie opierała się o świetny tutorial ze strony DigiKey.com. Nie ukrywam, że jest to w pewnym sensie archiwizacja tego wpisu, jako że zauważyłem, że strona zmieniła się już któryś raz, i po prostu boję się, że instrukcję czeka ten sam los co główna strona projektu – pandaboard.org – a więc przestanie isnieć.

Prerequisite

Radzę stworzyć sobie jakiś folder (np. pandaboard) i robić wszystko w nim:

mkdir pandaboard
cd pandaboard

Przygotowujemy kompilator

Ściągamy gcc-linaro:

wget -c https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz

Rozpakowujemy:

tar xf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz

Ścieżkę eksportujemy na czas trwania sesji terminala:

export CC=`pwd`/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-

Testujemy czy działa:

${CC}gcc --version

Powinno pojawić się coś takiego:

arm-linux-gnueabihf-gcc (Linaro GCC 7.5-2019.12) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Przygotowujemy bootloader (U-Boot)

Klonujemy branch v2019.04. Uwaga: Jest to ostatnia wersja, dla której są potrzebne nam patche dla rewizji B3!

git clone -b v2019.04 https://github.com/u-boot/u-boot --depth=1
cd u-boot/

i aplikujemy patche:

wget -c https://github.com/eewiki/u-boot-patches/raw/master/v2019.04/0001-omap4_common-uEnv.txt-bootz-n-fixes.patch
patch -p1 < 0001-omap4_common-uEnv.txt-bootz-n-fixes.patch

W końcu konfigurujemy i budujemy:

make ARCH=arm CROSS_COMPILE=${CC} distclean
make ARCH=arm CROSS_COMPILE=${CC} omap4_panda_defconfig
make ARCH=arm CROSS_COMPILE=${CC}

Jeżeli wszystko zbudowało się prawidłowo, to powinniśmy uzyskać przede wszystkim MLO i u-boot.img:

$ ls -l | grep -e "MLO\|u-boot.img"
-rw-rw-r--   1 marverix marverix   41860 mar 19 22:06 MLO
-rw-rw-r--   1 marverix marverix  365136 mar 19 22:06 u-boot.img

Wracamy do naszego katalogu pandaboard:

cd ..

Kernel

Klonujemy repo:

git clone https://github.com/RobertCNelson/armv7-multiplatform
cd armv7-multiplatform/

Proponuję scheckoutować najnowszą wersję 4.xx. W moim wypadku było to 4.20.x:

git checkout origin/v4.20.x -b tmp

No i budujemy:

./build_kernel.sh

Jeżeli wszystko poszło w porządku, to pod koniec mniej-więcej powinno być coś takiego:

-----------------------------
Script Complete
eewiki.net: [user@localhost:~$ export kernel_version=4.20.17-armv7-x15]
-----------------------------

Kopiujemy to export kernel_version=… i wykonujemy:

export kernel_version=4.20.17-armv7-x15

Natomiast w podkatalogu deploy powinniśmy zobaczyć pliki:

$ ls -l deploy
-rw-rw-r-- 1 marverix marverix  4806577 maj 22 13:20 4.20.17-armv7-x15-dtbs.tar.gz
-rw-rw-r-- 1 marverix marverix 19001283 maj 22 13:20 4.20.17-armv7-x15-modules.tar.gz
-rwxrwxr-x 1 marverix marverix  9433600 maj 22 13:19 4.20.17-armv7-x15.zImage

Wracamy do naszego katalogu pandaboard:

cd ..

Rootfs

Ściągamy minirootfs Alpine Linuxa dla architektury armv7 (lub bardziej generycznej armhf). I chociaż najnowszy działa (w momencie jak to piszę, to jest to 3.13.5), to na końcu całego procesu potrafi się bardzo długo włączać, bo jakiś proces crashuje. Szczerze mówiąc nie spodziewałem się, żeby najnowsza wersja systemu operacyjnego działała na tym sprzęcie bez żadnego „ale”. Natomiast Alpine Linux oficjalnie wspirało Pandę do +/- 2019 roku. A więc wersja 3.7.x, dokładniej 3.7.3. Tak więc takowej będę używał:

wget -c https://dl-cdn.alpinelinux.org/alpine/v3.7/releases/armhf/alpine-minirootfs-3.7.3-armhf.tar.gz

Będzie nam też potrzebny „gotowy” obraz w tej samej wersji i architekturze. Można go rozpoznać po tym, że posiada człon „u-boot” w linku:

wget -c https://dl-cdn.alpinelinux.org/alpine/v3.7/releases/armhf/alpine-uboot-3.7.3-armhf.tar.gz

Minirootfs to naprawdę takie minimum minimum (w końcu ma niecałe 2MB!). Są  to najbardziej podstawowe komendy, ale brak jest obsługi jakichkolwiek usług (w tym DHCP czy SSH). Dlatego potrzebujemy paczek, które umożliwą nam pracę w normalnych warunkach. Możemy ściągać te paczki jedna po drugiej, a możemy skorzystać z folderu apks, który znajduje się w tym „gotowcu”.
Wypakowujemy zawartość pierwszej paczki do folderu rootfs:

mkdir rootfs
tar xf alpine-minirootfs-3.7.3-armhf.tar.gz -C rootfs

Wypakowujemy folder apks:

tar xf alpine-uboot-3.7.3-armhf.tar.gz -C rootfs ./apks

A także podstawowe ustawienia:

tar xf alpine-uboot-3.7.3-armhf.tar.gz ./alpine.apkovl.tar.gz
tar xf alpine.apkovl.tar.gz -C rootfs/

Przygotowujemy kartę SD

Sprawdzamy jak się nazywa nasze urządzenie blokowe:

$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    1  29,9G  0 disk 

I dla ułatwienia:

export DISK=/dev/sda

Czyścimy kartę:

sudo dd if=/dev/zero of=${DISK} bs=1M count=10

Instalujemy bootloader:

sudo dd if=./u-boot/MLO of=${DISK} count=1 seek=1 bs=128k
sudo dd if=./u-boot/u-boot.img of=${DISK} count=2 seek=1 bs=384k

Partycjonujemy:

sudo sfdisk ${DISK} <<-EOF
4M,,L,*
EOF

A następnie formatujemy na ext4:

sudo mkfs.ext4 -L rootfs ${DISK}1

Montujemy:

export ROOTFS=/media/rootfs
sudo mkdir -p ${ROOTFS}/
sudo mount ${DISK}1 ${ROOTFS}/

Firmware WiFi

Po prostu klonujemy:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git --depth=1

Kopiujemy rzeczy

Rootfs:

sudo cp -r rootfs/* ${ROOTFS}
sync
sudo chown root:root ${ROOTFS}/
sudo chmod 755 ${ROOTFS}/

Dajemy odpowiednie uprawnienia busybox:

sudo chmod 4755 ${ROOTFS}/bin/busybox

Tworzymy tymczasowego użytkownika sheldon z hasłem bazinga:

sudo sh -c "echo 'sheldon:x:1000:1000:Sheldon Cooper:/tmp:/bin/ash' >> ${ROOTFS}/etc/passwd"
sudo sh -c "echo 'sheldon:\$1\$bbt\$SY4ikXOUxJn9uf666cVtp.:0:0:99999:7:::' >> ${ROOTFS}/etc/shadow"
sudo sh -c "echo 'sheldon:x:1000:sheldon' >> ${ROOTFS}/etc/group"

Enablujemy użytkownika root i zmieniamy mu hasło na toor (oczywiście później należy zmienić za pomocą passwd):

sudo sed -i "1s/root:\!:/root:\$1\$bbt\$3YaV3qqIqN3RzpOd92eju0:/" ${ROOTFS}/etc/shadow

Tworzymy plik eEnv.txt:

sudo mkdir -p ${ROOTFS}/boot
sudo sh -c "echo 'uname_r=${kernel_version}' >> ${ROOTFS}/boot/uEnv.txt"
sudo sh -c "echo 'dtb=omap4-panda-es-b3.dtb' >> ${ROOTFS}/boot/uEnv.txt"

Kernel i wszystko co z nim związane:

sudo cp -v ./armv7-multiplatform/deploy/${kernel_version}.zImage ${ROOTFS}/boot/vmlinuz-${kernel_version}
sudo mkdir -p ${ROOTFS}/boot/dtbs/${kernel_version}/
sudo tar xfv ./armv7-multiplatform/deploy/${kernel_version}-dtbs.tar.gz -C ${ROOTFS}/boot/dtbs/${kernel_version}/
sudo tar xfv ./armv7-multiplatform/deploy/${kernel_version}-modules.tar.gz -C ${ROOTFS}/

Firmware WiFi:

sudo mkdir -p ${ROOTFS}/lib/firmware/ti-connectivity
sudo cp -v ./linux-firmware/ti-connectivity/* ${ROOTFS}/lib/firmware/ti-connectivity

fstab:

sudo sh -c "echo '/dev/mmcblk0p1  /  auto  remount,rw  0  1' >> ${ROOTFS}/etc/fstab"

Upewniamy się, że wszystko zostało zsynchronizowane:

sync

Odmontowujemy:

sudo umount ${ROOTFS}

Setup

Odpinamy kartę, podpinamy HDMI, RJ45, klawiaturę i myszkę, no i kartę. Odpalamy. Jeżeli wszystko się udało, to powinniśmy zobaczyć terminal z zachętą do zalogowania. Logujemy się na sheldona.
Teraz możemy się zmienić użytkownika na root:

su root

Przemontowujemy:

mount -t proc proc /proc
mount -o remount,rw /

Instalujemy wszystkie paczki:

apk add /apks/armhf/*.apk

Nie przejmuj się warningami i errorami, że nie może znaleźć adresu URL. Wszystko dlatego, że serwer DHCP nie działa, więc nic dziwnego. Jeżeli natomiast dostaniesz błąd, że nie może wybrać jakiejś paczki, bo coś tam breaks, no to przenieś na chwilę psującą tą paczkę np. folder wyżej – tak żeby nie trzeba było instalować jej. Najbardziej nas interesuje wszystko co zaczyna się na alpine, busybox oraz openrc
Rebootujemy maszynę.

reboot

Tym razem powinniśmy mogli odrazu wbić się na roota (bez potrzeby najpierw logowania się na sheldona).

(Opcjonalnie) Jeżeli mamy podłączony kabel sieciowy, a ale diody nie świecą, to oznacza, że najprawdopodobniej moduł ethernet nie jest załadowany:

modprobe -a smsc95xx

Odpalamy DHCP:

rc-service networking start

Przechodzimy główny setup:

setup-alpine

Aktualizujemy repozytorium:

apk update
apk upgrade

No i włączamy automatyczne odpalanie sieci i daemona ssh:

rc-update add networking
rc-update add sshd

Skończone!

Instalowanie paczek

Jeżeli chcemy zaintalować np. nano i Pythona 3 to wykonujemy:

apk add nano python3

Gotowiec

Jeżeli nie chce Ci się robić tego zgodnie z powyższą instrukcją (nie dziwię się), to możesz skorzystać z gotowca. Najważniejsze skompilowane pliki wrzuciłem na OneDrive.

Wystarczy pobrać skompresowany backup (alpine-3.7-250521.img.xz) i następnie:

cat alpine-3.7-250521.img.xz | unxz | sudo dd of=/dev/sdX

Gdzie X to oczywiście odpowiednia litera, zgodnie z tym co pokazuje lsblk.

Uwaga: Backup był robiony dla karty 4GB, więc jest to minimalny rozmiar na jaki można przywrócić obraz. Oczywiście może być większy. W takim wypadku po zakończonym procesie proponuję odpalić jakieś narzędzie do zarządania partycjami (np. gparted) i po prostu rozszerzyć partycję na całą wolną przestrzeń karty.

 

Pandaboard ES Rev B3

Ze względu na zmiany w mojej firmie, dostałem do moich rąk trochę szrotu. Mianowicie Pandaboard ES Rev B3.

Jest to minikomputer oczywiście na procesorze ARM, a dokładniej OMAP4460. Był to jeden z wielu minikomputerów, które wyrosły niczym grzyby po deszczu, zaraz po ogłoszeniu Raspberry Pi. No bo każdy chciał pokazać, że umie lepiej, a co ważniejsze – ugryźć chociaż kawałek tortu.

Krótko o specyfikacji

Sprzęt został wydany w 2010 roku, a więc 11 lat temu. Pierwsze rewizje wyposażono w 2 rdzeniowy Cortex-A9 o taktowaniu 1GHz. Wspierany był przez 1GB DDR2. W dodatku wbudowane została karta WLAN i BT, Port Ethernet, 2x USB 2.0 + chyba jeszcze 2 na konektorach, no i czytnik kart SDHC (max 32GB). Gwóździem programu miało być GPU z hardwarowym wsparciem filmów FullHD (30fps). Dzisiaj może to szału nie robi, ale wtedy? Pamiętam, jak te maszynki pojawiły się w firmie. Akceleracja sprzętowa FHD na takim  małym sprzęcie to naprawdę robiła wrażenie.

Rewizji było więcej, a ostateczna nazywała się właśnie ES. Zamiast początkowego OMAP4430, użyto 4460 (o którym wspomniałem na samym początku). Miał on taktowanie 200Mhz większe, a więc 2x 1.2Ghz.

Pandaboard szczycił się mnogością konektorów na mobo. Popatrzcie tylko na diagram powyżej. Do kamerki, 2x dla rozszerzeń (w tym GPIO, UART, I2C), LCD, JTAG, no i debugowanie przez wbudowny port RS-232. Czego chcieć więcej?

Jeżeli siedzisz trochę w IT (a zwłaszcza w minikomputerach), możesz się zastanawiać „Skoro to był taki fajny sprzęt, to dlaczego nigdy o nim nie słyszałem/am?”. I jest to bardzo dobre pytanie. Myślę, że powodów jest wiele.

The good, the bad and the ugly

Rozmiary

Czy płytka jest duża? No… nie. 10cm na 11cm to nie aż tak dużo przecież. Ale nie jest też tak mała jak malinka. A moim zdaniem, w sukcesie malinki ogromną rolę odegrała kompaktowość. Płyta po zamknięciu w pudełko spokojnie mieści się w kieszeni nastolatka. A Pandaboard? No właśnie. Jest taki… pokraczny. Ni to mały, ni to duży. W dodatku port ethernet jest portem combo z dwoma USB poniżej. Czyli sam ten element, ma 3,3cm wysokości. Do tego producenci chcieli dobrze… i dokleili na stałe gumowe nóżki pod spód płyty. Nóżki mają 7mm. Czyli cała płyta ma już 4cm wysokości.

Z 2 lata temu projektowałem obudowę do tej płytki (żeby wydrukować na drukarce 3D). Skończyłem na wymiarach 12x12x4. A to trzeba było pamiętać o karcie SD co wystaje, a to o porcie COM… Najgorsze było to, że pudełko miało bardzo dużo niezagospodarowanego miejsca. Zarówno pod, jak i nad i po bokach płytki. Myślę, że nie skłamię, gdy powiem, że 80% pudełka to była wolna przestrzeń.

Zasilanie

Pandaboard jest zasilany za pomocą zasilacza zakończonego popularnym „bolcem”. Dołączany jest zasilacz 5V 4A. Tak, 4A. Co prawda z moich testów panda nie zjadała więcej niż 8.8W z gniazdka, ale zapewne są one niepełne, bo (jak zaraz się dowiesz) nie można używać w pełni wbudowanego GPU. Czy zatem nie można komputerka zasilić za pomocą USB (ponownie – jak w malince)? Tak, można. Manual podaje, że można zasilić za pomocą USB OTG. Ale…

USB OTG to port USB mini. Ja wiem, że mogę sie czepiać, ale dlaczego USB mini? Nie micro? W 2011 każdy miał kabelek i ładowarkę USB micro. A z tego co kojarzę, to przejściówki OTG przychodziły właśnie w formie USB micro – USB A, a nie USB mini – USB A. Jeszcze rozumiem, gdyby producent dodawał taki kabelek w zestawie. Ale nie – dostawało się tylko pudełko, płytkę i zasilacz.

Załóżmy, że jednak port USB mini to nie problem. Czeka nas natomiast kolejny zawód. Nawet jeżeli jesteśmy w posiadaniu ładowarki USB 5V 4A to panda będzie działać… wolniej. Tak, wolniej. Otóż wg manuala gniazdko USB OTG jak i normalne gniazdko zasilania idą przez układ, który hardwarowo steruje mocą procesora. Nie wiem o jakim spadku mocy mówimy (jeszcze nie robiłem testów), ale no nie jest to wesoła wiadomość.

Sterowniki

Pamiętasz jak pisałem, że panda ma układ graficzny wspierający sprzętową akceleracje zarówno filmów FullHD (H.264) jak i grafiki 3D (OpenGL)? Tak… nigdy nie zdołałem zobaczyć tego w akcji. Bo widzisz, producent wybrał układ PowerVR SGX540, który wspiera OpenGL ES 2.0, OpenGL ES 1.1, OpenVG 1.1 i EGL 1.3. Super. Tylko że… producent wspomnianego układu nie otworzył sterowników. A więc – nie ma do tego dostępnych sterowników. Wypuszczono 1 paczkę z Ubuntu 12.04, gdzie były dedykowane sterowniki wyłącznie dla tego systemu operacyjnego, oraz jedną paczkę z Androidem 4.4 (tak, można było na tym odpalić Androida). Co więcej, producent SGX540 nie udostępnił nawet dokumentacji, żeby ktoś mógł sobie sam napisać sterowniki.

Także kupujący pandusię w momencie zakupu byli na przegranej pozycji. Minikomputer, który na tamte czasy zdawał się wręcz idealny jako komputer pod TV… tracił praktycznie największego asa w rękawie. Bo softwarowe dekodowanie filmów na tym procesorze, uwierz mi, delikatnie mówiąc – działa słabo.

Oczywiście byli odważni, którzy próbowali to obejść, ale z tego co wiem, wszystkie (2) inicjatywy padły jeszcze w 2012 roku.

Wsparcie

Ja nie zliczę ile razy podchodziłem w pracy do tematu tych płytek. Nie lubię gdy sprzęt leży nieużywany. Mierzwiło mnie, że w 4 pudełkach leżą 4 komputery, praktycznie nigdy nie używane. I niszczeją. Ale ile razy siadałem do tematu – przegrywałem. Nie jestem specem od komputerów na bazie ARM. Ponieważ te komputery rządzą się swoimi prawami. Nie mają BIOSu czy UEFI. Zazwyczaj wszystko sprowadza się do czytania dokumentacji producenta, i jak on sobie wymyślił, że jaka zworka musi być w jakiej pozycji, i na którym bajcie na karcie SD (lub pendrivie) ma rozpoczynać się bootloader. I nie daj Boże, jeżeli nie wiesz jakie dokładnie masz kości pamięci.

Z mojego doświadczenia, bez wsparcia odpalenie czegokolwiek na tym sprzęcie graniczyło z cudem. Nie mówię wyłącznie o wsparciu producenta, ale przede wszystkim community.  A Panda miała dość „małą” rzeszę fanów. Dolicz jeszcze wspomniane problemy powyżej i masz przepis na gwarantowany sukces. Myślę, że dużo się skłamię, jeżeli stwiedzę, że panda prawdziwego community nie miała, a większość linuxów usunęła pandaboarda z listy wspieranych platform do 2017 roku.

Rewizje

Możesz spytać „Marek, ale jak to – chcesz mi powiedzieć, że producent nie udostępniał obrazu Ubuntu na swojej stronie?”. Tak, udostępniał… dla pierwszych 2 rewizji. A one nie były ze sobą kompatybilne. Obraz dla rewizji A3 nie działał dla rewizji B3. I to było dla mnie największym mindfuckiem. Jak można namieszać tak bardzo we własnym ekosystemie. Nie zliczę ile razy miałem sytuację, że już znalazłem instrukcję jak odpalić Ubuntu ze sterownikami GPU (!!!), ale… dla pierwszej wersji pandy. Nie ES Rev B3 (czyli ostatniej).

Możesz zatem spytać „Ale to była, aż taka duża różnica? Nie wystarczyło gdzieś zamienić A na B i już?”. Pandaboard ma CPU, RAM i GPU na jednym kawałku krzemu. Czyli jak w rewisji ES B3 producent postawnowił użyć kości Elpida, to cały krzem był inny. A co za tym idzie adresy w pamięci. Do dziś, jak chcesz bootloader (u-boot’a) dla ES B3, to najpierw musisz ściągnąć osobno źródła u-boot’a, i później osobno patche dla kości Elpida. No i na końcu zbudować to ze źródła.

Ciepełko

Jestem starym PCtowcem, więc mam wyrobione zdanie o Intel, AMD, NVIDIA czy nawet zapomnianej już VIA. Ale rynek ARM to dla mnie trochę czarna magia. Ciężko mi więc wypowiadać się na temat procesora OMAP4460. Wiem jedno: grzeje się. Oj, grzeje. Po zakończenu aktualizacji Ubuntu palca na krzemie nie położysz. No, tzn. położysz ale bardzo szybko zdejmiesz 😉 I to jest chyba dla mnie największe zdziwienie – dlaczego producent, nie zamontował żadnego radiatora fabrycznie? Ja kupiłem na znanym serwisie (już nie) aukcyjnym  kilka aluminiowych radiatorów + klej termoprzewodzący. Ale mimo tego, procesor bez problemu osiaga 70 stopni.

Podsumowanie

Tak więc nie dziwie się, że pandaboardy nie stały się hitem. A ile one w ogóle kosztowały? Z informacji, które znalazłem, w 2010 roku $174. Po uwzględnieniu inflacji, dzisiejsze $214. Revolut pokazuje mi 798,85zł. Dla porównania Raspberry Pi 4 z 4GB RAM kosztuje dzisiaj ok. 290zł.  Jest różnica, prawda?

Nie mniej, skoro mam takowe w rączkach, postaram się je jakoś wykorzystać.

W następnym poście: instalowanie Alpine Linux na Pandaboard ES Rev B3! 🙂

 

Psalm 2

Mrok, który tak dobrze znam,
znów chce spowić moje serce.
Kruki nadleciały i pukają w szyby.
Niestrudzone i nachalne.
Odwracają moją uwagę.
Domagają się bym na nich skupił uwagę.
Zamykam uszy by nie słyszeć,
zamykam oczy by nie patrzeć.
A Ty Panie okrywasz mnie swoim płaszczem.
Moje nozdrza wypełnia Twój zapach –
mirra, kadzidło, oliwa i zapach drewna.
Kładziesz dłoń na mojej głowie,
a ja oddaje Ci ból.
Zapada cisza.
Oplata mnie Twoje ciepło.
Ty Panie o mnie dbasz,
a łzy moje cisną się do oczu.
Jak to jest, że nie muszę zasłużyć na Twoją Miłość?
Jak to jest, że przychodzisz mimo drzwi zamkniętych?
Jak to jest, że przytulasz mnie mimo wszystko?
Jak to jest, że się mnie nie wstydzisz?
Nie muszę nic mówisz, bo Ty Panie wiesz.
Przyjmujesz mnie, takiego jaki jestem.
Jesteś moim obrońcom i wybawicielem.
Tylko w Tobie odnajduję ukojenie,
siłę, moc i motywację.
Kto zrozumie to i pojmie?
Kto odważy się ogarnąć to ludzkim rozumem?
Odnalazłeś mnie Panie, i nadałeś mi imię.
Ukochałeś mnie, i wypełniłeś nieskończoną pustkę w moim sercu.
Zabrałeś ciemność, a przyniosłeś światło.
Zabrałeś smutek, a wprowadziłeś radość.
Zabrałeś śmierć, a dałeś mi życie.

Psalm 1

Panie mój i Królu,
Boże ukochany.
Ciebie chcę wychwalać,
w tym psie co liże me rany.
Tylko Ty rozumiesz ból mój i smutek,
co serce me wypełnia.
Pod Twym drzewem dajesz mi odpocząć,
i odłożyć swą lutnię.
Dałeś mi tego psa – niczym ducha pocieszyciela,
bo człowiek ode mnie stroni,
a dusza ma po raz kolejny –
obumiera.
O Panie, wychwalać Cię chcę,
mimo, że łzy spływają mi po policzkach,
a z ust najchętniej by wyszły przekleństwa,
ciemność i depresja.
Ty mnie nie zostawiasz,
lecz przytulasz i przygarniasz do swojej piersi.
Ogień Twej Miłości koi moje serce,
uspokaja zszargane nerwy.
Bądź Panie Błogosławion,
w tym psie co zasypia u moich stóp głaskany.
Jezu mój drogi,
za mnie ukrzyżowany.