<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Marek's Blog - IT</title><link href="/" rel="alternate"/><link href="/feeds/it.atom.xml" rel="self"/><id>/</id><updated>2025-09-09T17:03:00+02:00</updated><subtitle>Moje małe Kaer Morhen</subtitle><entry><title>gah - GitHub Releases app installer</title><link href="/post/2025/gah-github-releases-app-installer.html" rel="alternate"/><published>2025-09-09T17:03:00+02:00</published><updated>2025-09-09T17:03:00+02:00</updated><author><name>Marek Sierociński</name></author><id>tag:None,2025-09-09:/post/2025/gah-github-releases-app-installer.html</id><summary type="html">&lt;p&gt;Strasznie nie lubię robić powtarzających się rzeczy, ale takich no... głupich.
Co raz więcej aplikacji w formie binarek można znaleźć na GitHubie, a dokładniej w Release'ach. Nic dziwnego - devi tworzą opensource'owe oprogramowanie, udostępniają je na GitHubie, w zamian otrzymują za darmo dostęp do pipeline'ów i maszyn GitHub'a, co pozwala na …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Strasznie nie lubię robić powtarzających się rzeczy, ale takich no... głupich.
Co raz więcej aplikacji w formie binarek można znaleźć na GitHubie, a dokładniej w Release'ach. Nic dziwnego - devi tworzą opensource'owe oprogramowanie, udostępniają je na GitHubie, w zamian otrzymują za darmo dostęp do pipeline'ów i maszyn GitHub'a, co pozwala na zautomatyzowanie całego CI/CD.
Dzięki temu binarki apek trafiają do GitHub Release'ów repo gotowe do pobrania pod właściwą platformę. No właśnie... za każdym razem jak chciałem pobrać sobie aplikację, którą potrzebowałem, ogólnie rzecz biorąc kończyło się to mniej więcej tym samym flow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Idź do repo&lt;/li&gt;
&lt;li&gt;Otwórz Releases&lt;/li&gt;
&lt;li&gt;Otwórz zakładkę "Assets" najwnoszego Release'u&lt;/li&gt;
&lt;li&gt;I teraz weź się przebij przez całą listę (czasami naprawdę bardzo długą!) artefaktów budowania, aby znaleźć tą jedną właściwą paczkę pod mojego Linuxa i moją architekturę procesora.&lt;/li&gt;
&lt;li&gt;Pobiersz znalezisko&lt;/li&gt;
&lt;li&gt;Wypakuj&lt;/li&gt;
&lt;li&gt;Wrzuć do &lt;code&gt;~/.local/bin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Zrób &lt;code&gt;chmod +x&lt;/code&gt; na tej nowej binarce (lub binarkach)&lt;/li&gt;
&lt;li&gt;Usuń archiwum i ew. niepotrzebne pliki (np. README)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Chyba najbardziej jest irytujące to szukanie tego artefaktu, bo raz to jest &lt;code&gt;x86_64&lt;/code&gt;, raz &lt;code&gt;x86-64&lt;/code&gt;, albo &lt;code&gt;amd64&lt;/code&gt; czy &lt;code&gt;AMD64&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I wtedy mnie olśniło: zaraz... przecież ja kocham automatyzować i kocham wyrażenia regularne!&lt;/p&gt;
&lt;p&gt;I tak powstał &lt;a href="https://github.com/marverix/gah"&gt;gah&lt;/a&gt;. W sumie to powstał już
prawie rok temu, ale myślę, że po tych 9 miesiącach można mówić o pewnej dojrzałości :) Jak więc zatem po tym okresie czasu? Zarąbiście! Jestem bardzo zadowolony z efektu pracy i jak dobrze radzi sobie &lt;code&gt;gah&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="gah demo" src="https://github.com/marverix/gah/blob/master/_static/demo.gif?raw=true"&gt;&lt;/p&gt;
&lt;p&gt;Nawet przez pewien czas &lt;a href="https://news.ycombinator.com/item?id=42387519"&gt;był na topce Hacker News&lt;/a&gt;. Aktualnie ma 151 gwiazdek na GitHubie i nadal rośnie :)  &lt;/p&gt;</content><category term="IT"/><category term="bash"/><category term="skrypt"/><category term="programowanie"/><category term="github"/></entry><entry><title>Hurricane Electric Free DNS - Moje odkrycie roku</title><link href="/post/2021/hurricane-electric-free-dns-moje-odkrycie-roku.html" rel="alternate"/><published>2021-07-07T20:20:00+02:00</published><updated>2021-07-07T20:20:00+02:00</updated><author><name>Marek Sierociński</name></author><id>tag:None,2021-07-07:/post/2021/hurricane-electric-free-dns-moje-odkrycie-roku.html</id><summary type="html">&lt;p&gt;W trakcie formatu mojego VPS'a (o którym &lt;a class="reference external" href="https://marek.sierocinscy.pl/2021/07/06/virtualmin-nigdy-wiecej/"&gt;pisałem w poprzednim poście&lt;/a&gt;) dotarło do mnie, że WordOps nie ogarnia DNS'ów. Nie był to dla mnie problem, bo korzystałem kiedyś z &lt;a class="reference external" href="https://maradns.samiam.org/"&gt;MaraDNS&lt;/a&gt;, który wg mnie jest o niebo bardziej czytelny i lepszy od rozpowszechnionego i antycznego Bind9 (mogę w sumie kiedyś o …&lt;/p&gt;</summary><content type="html">&lt;p&gt;W trakcie formatu mojego VPS'a (o którym &lt;a class="reference external" href="https://marek.sierocinscy.pl/2021/07/06/virtualmin-nigdy-wiecej/"&gt;pisałem w poprzednim poście&lt;/a&gt;) dotarło do mnie, że WordOps nie ogarnia DNS'ów. Nie był to dla mnie problem, bo korzystałem kiedyś z &lt;a class="reference external" href="https://maradns.samiam.org/"&gt;MaraDNS&lt;/a&gt;, 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.&lt;/p&gt;
&lt;div class="section" id="na-pierwszy-rzut-oka"&gt;
&lt;h2&gt;Na pierwszy rzut oka&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference external" href="http://he.net/"&gt;Strona Hurricane Electric&lt;/a&gt; jest dość... niepozorna. Kojarzy się raczej z jakąś stroną nie zmienianą od 2001 roku.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/07/2021-07-07_18-26.png"&gt;&lt;img alt="Screenshot storny głównej he.net" class="alignnone wp-image-232 size-large" src="/images/2021/07/2021-07-07_18-26.png" style="width: 660px; height: 529px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Link do darmowego serwera DNS to po prawej &amp;quot;Free DNS&amp;quot; (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 ;) ).&lt;/p&gt;
&lt;p&gt;Polecam sobie poczytać &amp;quot;ficzery&amp;quot; jakie wspomniana usługa posiada:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Wsparcie zarówno dla zapytań przez IPv4 jak i natywnego IPv6.&lt;/li&gt;
&lt;li&gt;Obsługa rekordów A, AAAA, ALIAS, CNAME, CAA, MX, NS, TXT, SRV, SSHFP, SPF, RP, NAPTR, HINFO, LOC i PTR&lt;/li&gt;
&lt;li&gt;Jakiś tam &amp;quot;sprytny tryb&amp;quot; do ogarniania odwrotnej stref (reverse zones)&lt;/li&gt;
&lt;li&gt;Wsparcie dla &amp;quot;slavów&amp;quot;.&lt;/li&gt;
&lt;li&gt;Wiele formatów odwrotnych stref: Standard, RFC 4183, RFC 2317, DeGroot.&lt;/li&gt;
&lt;li&gt;Odpytywanie geograficznie najbliższego serwera HE.&lt;/li&gt;
&lt;li&gt;Sprawdzanie poprawności delegacji stref (w obie strony).&lt;/li&gt;
&lt;li&gt;Podstawowe sprawdzanie składni rekordów.&lt;/li&gt;
&lt;li&gt;Wiele domen dla jednego konta.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jak na darmową obsługę, to muszę powiedzieć, że jestem w szoku. W dodatku 0 reklam na stronie.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="konto"&gt;
&lt;h2&gt;Konto&lt;/h2&gt;
&lt;p&gt;Do korzystania z konta trzeba zarejestrowć darmowe konto. Niestety formularz rejestracyjny jest dość długi (trzeba podać wszystkie dane teleadresowe).&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/07/2021-07-07_19-35.png"&gt;&lt;img alt="Widok prezentujący formularz rejestracji na he.net" class="alignnone wp-image-233 size-large" src="/images/2021/07/2021-07-07_19-35.png" style="width: 660px; height: 555px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Plusem jest to, że jedno konto gwarantuje nam dostęp do wszystkich usług HE.&lt;/p&gt;
&lt;p&gt;Na pochwałę zasługuje możliwość włączenia uwierzytelnienia wieloskładnikowego (co z resztą czym prędzej uczyniłem).&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="usluga"&gt;
&lt;h2&gt;Usługa&lt;/h2&gt;
&lt;p&gt;UI jest ponownie skromny, ale czytelny. Po lewej mamy to co zapewne najbardziej zainteresuje, a więc &amp;quot;Add a new domain&amp;quot;. 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.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/07/2021-07-07_19-46.png"&gt;&lt;img alt="Widok prezentujący listę domen na dns.he.net" class="alignnone size-large wp-image-234" src="/images/2021/07/2021-07-07_19-46.png" style="width: 660px; height: 469px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/07/2021-07-07_19-52.png"&gt;&lt;img alt="Widok stonry dns.he.net, który prezentuje szczegóły domeny marverix.blog" class="alignnone size-large wp-image-235" src="/images/2021/07/2021-07-07_19-52.png" style="width: 660px; height: 433px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="dziala"&gt;
&lt;h2&gt;Działa&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference external" href="https://www.dnsperf.com/dns-provider/he-net"&gt;DNSPerf&lt;/a&gt; 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).&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/07/2021-07-07_20-00.png"&gt;&lt;img alt="Zrzut ze strony DNSPerf przedstawiającą wyniki testów wydajności dla he.net" class="alignnone size-large wp-image-236" src="/images/2021/07/2021-07-07_20-00.png" style="width: 660px; height: 725px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;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.&amp;nbsp; Mi to totalnie wystarcza i nie zapowiada się, żebym w najbliższych latach zmieniał usługodawcę :)&lt;/p&gt;
&lt;/div&gt;
</content><category term="IT"/><category term="DNS"/><category term="internet"/><category term="it"/><category term="komputery"/><category term="odkrycia"/><category term="serwery"/><category term="usługi"/></entry><entry><title>Virtualmin? Nigdy więcej</title><link href="/post/2021/virtualmin-nigdy-wiecej.html" rel="alternate"/><published>2021-07-06T22:32:00+02:00</published><updated>2021-07-06T22:32:00+02:00</updated><author><name>Marek Sierociński</name></author><id>tag:None,2021-07-06:/post/2021/virtualmin-nigdy-wiecej.html</id><summary type="html">&lt;p&gt;Virtualmin to&amp;nbsp; 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.&lt;/p&gt;
&lt;p&gt;Panel ma wbudowane mega dużo funkcji, które pozwalają za skonfigurowanie i zarządzanie …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Virtualmin to&amp;nbsp; 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.&lt;/p&gt;
&lt;p&gt;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 &amp;quot;nowa&amp;quot; wersja, ale umówmy się, że to taki bardziej 2013 niż 2021). Nauka gdzie jest jaka opcja zajęło mi trochę czasu.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 &amp;quot;strona potrafiła myśleć&amp;quot; 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.&lt;/p&gt;
&lt;p&gt;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 &lt;a class="reference external" href="https://wordops.net/"&gt;WordOps&lt;/a&gt;. 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 &amp;quot;security-oriented&amp;quot;.&lt;/p&gt;
&lt;p&gt;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 &amp;quot;jednolinijkowiec&amp;quot;, który (teoretycznie) robi deinstalację. Spróbowałem.&lt;/p&gt;
&lt;p&gt;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 &amp;quot;webmin&amp;quot; i &amp;quot;virtualmin&amp;quot;!). 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).&amp;nbsp; Robiłem &lt;em&gt;apt purge&lt;/em&gt;, szukałem na necie how-to, próbowałem wszystkiego. Nic. Jeden problem rozwiązywałem, pojawiał się kolejny i kolejny.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Jako programista, &lt;strong&gt;oprogramowanie, które nie potrafi posprzątać po sobie, jest nic warte&lt;/strong&gt;. 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Nigdy więcej. Nie polecam.&lt;/p&gt;
</content><category term="IT"/><category term="it"/><category term="komputery"/><category term="oprogramowanie"/><category term="serwery"/><category term="software"/><category term="vps"/></entry><entry><title>Niechciany pracownik sklepu w twojej przeglądarce</title><link href="/post/2021/niechciany-pracownik-sklepu-w-twojej-przegladarce.html" rel="alternate"/><published>2021-06-06T14:38:00+02:00</published><updated>2021-06-06T14:38:00+02:00</updated><author><name>Marek Sierociński</name></author><id>tag:None,2021-06-06:/post/2021/niechciany-pracownik-sklepu-w-twojej-przegladarce.html</id><summary type="html">&lt;p&gt;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 &amp;quot;Zezwól&amp;quot; (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,&amp;nbsp; oraz w trakcie zwykłego …&lt;/p&gt;</summary><content type="html">&lt;p&gt;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 &amp;quot;Zezwól&amp;quot; (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,&amp;nbsp; oraz w trakcie zwykłego korzystania - np. oglądania YouTube'a, wyświetlają mi się powiadomienia o takie:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/06/morele-powiadomienie-reklama.png"&gt;&lt;img alt="image1" class="alignnone size-full wp-image-202" src="/images/2021/06/morele-powiadomienie-reklama.png" style="width: 433px; height: 312px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;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 &amp;quot;strona internetowa&amp;quot; staje się &amp;quot;aplikacją&amp;quot;. Jednym z tych wymagań jest posiadanie i zarejestrowanie Service Workera.&lt;/p&gt;
&lt;div class="section" id="niechciany-pasazer"&gt;
&lt;h2&gt;Niechciany pasażer&lt;/h2&gt;
&lt;p&gt;Z założenia Service Worker (w dosłownym tłumaczeniu &amp;quot;pracownik serwisu&amp;quot;) 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;(Nie)Stety, zostało to pomyślane tak, że SW ma być &amp;quot;transparentny&amp;quot; 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.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/06/osmy-pasazer-nostromo.jpeg"&gt;&lt;img alt="image2" class="alignnone size-full wp-image-203" src="/images/2021/06/osmy-pasazer-nostromo.jpeg" style="width: 474px; height: 296px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="co-moge-zrobic"&gt;
&lt;h2&gt;Co mogę zrobić?&lt;/h2&gt;
&lt;div class="section" id="otwieramy-liste"&gt;
&lt;h3&gt;Otwieramy listę&lt;/h3&gt;
&lt;p&gt;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 &lt;em&gt;about:serviceworkers&lt;/em&gt; i wyświetli się lista wszystkich zarejestrowanych SW. U mnie to 171...&lt;/p&gt;
&lt;p&gt;W Chromie to adres &lt;em&gt;chrome://serviceworker-internals&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="wyrejestruj"&gt;
&lt;h3&gt;Wyrejestruj&lt;/h3&gt;
&lt;p&gt;Jeżeli wiemy jaki to sklep, to połowa sukcesu. U mnie wspomniane &lt;em&gt;Morele&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/06/morele-sw.png"&gt;&lt;img alt="image3" class="alignnone size-large wp-image-204" src="/images/2021/06/morele-sw.png" style="width: 660px; height: 129px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I klikamy przycisk &lt;strong&gt;Wyrejestruj&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Natomiast jeżeli nie wiemy, to szukamy tego, który ma coś wpisane w polu &lt;em&gt;pushEndpoint&lt;/em&gt;. To z tego źródła pracownik dostaje informacje o &amp;quot;nowościach&amp;quot; (reklamach).&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="zapobiegac"&gt;
&lt;h3&gt;Zapobiegać?&lt;/h3&gt;
&lt;p&gt;Naturalnym tokiem myślenia jest zatem &amp;quot;ok, no to trzeba zablokować to rejestrowanie&amp;quot;. 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.&amp;nbsp; Niestety (przynajmniej na Firefoxie) nie ma możliwości wybiórczego blokowania SW.&lt;/p&gt;
&lt;div class="section" id="opcja-1-ukryte-ustawienia-wylaczamy-calkowicie"&gt;
&lt;h4&gt;Opcja 1: Ukryte ustawienia - wyłączamy całkowicie&lt;/h4&gt;
&lt;p&gt;W Firefoxie wchodzimy na adres &lt;em&gt;about:config&lt;/em&gt; i klikamy przycisk &lt;em&gt;Akceptuję ryzyko&lt;/em&gt;. Teraz w polu wyszukiwania wpisujemy &lt;em&gt;dom.serviceWorkers.enabled&lt;/em&gt;. Po prawej klikamy w strzałki. Zrobione.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/06/firefox-sw-disabled.png"&gt;&lt;img alt="image4" class="alignnone size-large wp-image-205" src="/images/2021/06/firefox-sw-disabled.png" style="width: 660px; height: 131px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="opcja-2-ukryte-ustawienia-wylaczamy-tylko-powiadomienia"&gt;
&lt;h4&gt;Opcja 2: Ukryte ustawienia - wyłączamy tylko powiadomienia&lt;/h4&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;W Firefoxie wchodzimy na adres &lt;em&gt;about:config&lt;/em&gt; i klikamy przycisk &lt;em&gt;Akceptuję ryzyko&lt;/em&gt;. Teraz w polu wyszukiwania wpisujemy &lt;em&gt;dom.webnotifications.serviceworker.enabled&lt;/em&gt;. Po prawej klikamy w strzałki. Zrobione.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/06/firefox-sw-webnotification-disabled.png"&gt;&lt;img alt="image5" class="alignnone size-large wp-image-206" src="/images/2021/06/firefox-sw-webnotification-disabled.png" style="width: 660px; height: 128px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="opcja-3-instalujemy-wtyczke"&gt;
&lt;h4&gt;Opcja 3: Instalujemy wtyczkę&lt;/h4&gt;
&lt;p&gt;Wchodzimy na &lt;a class="reference external" href="https://addons.mozilla.org/pl/firefox/addon/block-service-workers/"&gt;https://addons.mozilla.org/pl/firefox/addon/block-service-workers/&lt;/a&gt; i klikamy przycisk &lt;em&gt;Dodaj do Firefox&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/06/firefox-sw-plugin-1.png"&gt;&lt;img alt="image6" class="alignnone size-large wp-image-207" src="/images/2021/06/firefox-sw-plugin-1.png" style="width: 660px; height: 381px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A następnie potwierdzamy przez kliknięcie &lt;em&gt;Dodaj&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/06/firefox-sw-plugin-2.png"&gt;&lt;img alt="image7" class="alignnone size-full wp-image-208" src="/images/2021/06/firefox-sw-plugin-2.png" style="width: 419px; height: 220px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Zrobione.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><category term="IT"/><category term="firefox"/><category term="it"/><category term="komp"/><category term="reklamy"/><category term="serviceworkers"/><category term="webdevelopment"/></entry><entry><title>Komputer masz w swojej kieszeni</title><link href="/post/2021/komputer-masz-w-swojej-kieszeni.html" rel="alternate"/><published>2021-05-30T10:02:00+02:00</published><updated>2021-05-30T10:02:00+02:00</updated><author><name>Marek Sierociński</name></author><id>tag:None,2021-05-30:/post/2021/komputer-masz-w-swojej-kieszeni.html</id><summary type="html">&lt;p&gt;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 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;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?&lt;/p&gt;
&lt;p&gt;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 &lt;a class="reference external" href="https://pl.wikipedia.org/wiki/Symbian"&gt;Symbianem&lt;/a&gt;. Tak, dzisiejsze smartfony to (nie boję się tego powiedzieć) pełnoprawne komputery, czasami wielokrotnie przewyższające wydajnością laptopy &amp;quot;w super cenie&amp;quot; z różnych popularnych marketów elektronicznych. Ba, myślę, że czasami biją na głowę niektóre komputery stacjonarne.&lt;/p&gt;
&lt;p&gt;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 &amp;quot;dwustronne gniazdko do ładowania telefonu&amp;quot;.&lt;/p&gt;
&lt;div class="section" id="moc-usb-c"&gt;
&lt;h2&gt;Moc USB-C&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/05/usb-c.jpg"&gt;&lt;img alt="image1" class="alignnone wp-image-194 size-full" src="/images/2021/05/usb-c.jpg" style="width: 825px; height: 400px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Nie będę tutaj zanudzać specyfikacją techniczną (zainteresowanych odsyłam to &lt;a class="reference external" href="https://en.wikipedia.org/wiki/USB-C"&gt;bardzo dobrego artykułu na angielskojęzycznej Wikipedii&lt;/a&gt;). 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:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;ładować telefon&lt;/li&gt;
&lt;li&gt;ładować komputer (patrz chociażby MacBooki)&lt;/li&gt;
&lt;li&gt;przesyłać dźwięk (patrz na przejściówki USB-C --&amp;gt; mini jack)&lt;/li&gt;
&lt;li&gt;przesyłać obraz&lt;ul&gt;
&lt;li&gt;pracować jako port HDMI&lt;/li&gt;
&lt;li&gt;pracować jako port DisplayPort&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;obsługa VR (cokolwiek to znaczy)&lt;/li&gt;
&lt;li&gt;no i oczywiście podłączać wszystkie urządzenia pracujące pod USB 2.0, USB 3.0 itp&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Ale wracając do tematu. Jeżeli w Twojej głowie zrodziło się pytanie &amp;quot;Marek, chcesz powiedzieć, że mój telefon obsługuje wszystkie te rzeczy?&amp;quot;, to jest to bardzo dobre pytanie.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="teoria-kontra-praktyka"&gt;
&lt;h2&gt;Teoria kontra praktyka&lt;/h2&gt;
&lt;p&gt;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 &lt;a class="reference external" href="https://www.gsmarena.com"&gt;GSMArena&lt;/a&gt; i poszukać swojego modelu telefonu, a następnie zjechać do sekcji &amp;quot;USB&amp;quot;. Jeżeli widzisz napis typu &amp;quot;USB Type-C 2.0&amp;quot;, no to masz okrojoną wersję i niestety nie będziesz w stanie przetestować tego co będę dalej pokazywał.&lt;/p&gt;
&lt;p&gt;A jeżeli wspiera? No potrzebujesz tylko jednej rzeczy: hub.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="replikator-portow"&gt;
&lt;h2&gt;Replikator portów&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Ja po krótkich poszukiwaniach znalazłem kilka ofert wartych zastanowienia:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://allegro.pl/oferta/przejsciowka-adapter-3w1-hub-usb-c-hdmi-4k-ver2020-9251288863"&gt;Przejściówka Adapter 3w1 HUB USB-C HDMI 4K ver2020&lt;/a&gt; - 50zł; co prawda &amp;quot;no name&amp;quot;, ale oceny użytkowników są ku zaskoczeniu bardzo pozytywne, ale z drugiej strony miałem podobą sytuację z przechwytywarką obrazu z HDMI na USB... (w sumie dobry pomysł na innego posta)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://www.morele.net/stacja-replikator-hama-3w1-usb-c-001357560000-5854442/?utm_source=skapiec.pl&amp;amp;utm_medium=referral"&gt;Stacja/replikator Hama 3w1 USB-C&lt;/a&gt; - 120zł&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://allegro.pl/oferta/outlet-i-tec-adapter-usb-c-hdmi-usb-usb-c-10734891989"&gt;i-tec USB-C Metal Nano Dock 4K HDMI + Power Delivery 100 W&lt;/a&gt; - w outlecie za 130zł&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="niech-stanie-sie-swiatlosc"&gt;
&lt;h2&gt;Niech stanie się światłość&lt;/h2&gt;
&lt;p&gt;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 &amp;quot;donglu&amp;quot; USB), oraz ładowarkę do portu USB-C (na replikatorze!), a następnie replikator do komórki:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/05/huawei-desktop-hub.jpg"&gt;&lt;img alt="image2" class="alignnone wp-image-190 size-full" src="/images/2021/05/huawei-desktop-hub.jpg" style="width: 1280px; height: 621px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(Jak widać, ja mam jeszcze połączony kabel sieciowy, bo tak - to też działa bez najmniejszego problemu ;) )&lt;/p&gt;
&lt;p&gt;Jeżeli twój telefon obsługuje HDMI przez USB-C, to Android powinien pokazać coś w tym stylu:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/05/huawei-desktop-1.jpg"&gt;&lt;img alt="image3" class="alignnone wp-image-176 size-full" src="/images/2021/05/huawei-desktop-1.jpg" style="width: 369px; height: 800px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Klikam w &amp;quot;Tryb pulpitu&amp;quot; i...&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/05/huawei-desktop-setup.jpg"&gt;&lt;img alt="image4" class="alignnone wp-image-191 size-full" src="/images/2021/05/huawei-desktop-setup.jpg" style="width: 1280px; height: 1038px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A nie mówiłem?&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="co-to-za-czary"&gt;
&lt;h2&gt;Co to za czary?&lt;/h2&gt;
&lt;p&gt;Ż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.&lt;/p&gt;
&lt;div class="section" id="rozgladnijmy-sie"&gt;
&lt;h3&gt;Rozglądnijmy się&lt;/h3&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/05/huawei-desktop-4.jpg"&gt;&lt;img alt="image5" class="alignnone wp-image-179 size-full" src="/images/2021/05/huawei-desktop-4.jpg" style="width: 1280px; height: 720px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mamy ikonki na pulpicie. Mamy &amp;quot;Start&amp;quot; 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!)&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/05/huawei-desktop-7.jpg"&gt;&lt;img alt="image6" class="alignnone wp-image-182 size-full" src="/images/2021/05/huawei-desktop-7.jpg" style="width: 1280px; height: 720px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Kliknięcie prawy przyciskiem myszki w daną ikonkę otwiera menu podręczne.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/05/huawei-desktop-5.jpg"&gt;&lt;img alt="image7" class="alignnone wp-image-180 size-full" src="/images/2021/05/huawei-desktop-5.jpg" style="width: 1280px; height: 720px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Po kliknięciu w ikonkę &amp;quot;Start&amp;quot; (nie wiem jak się on naprawdę nazywa, ale każdy wie o co chodzi) pojawia się lista zainstalowanych aplikacji.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/05/huawei-desktop-6.jpg"&gt;&lt;img alt="image8" class="alignnone wp-image-181 size-full" src="/images/2021/05/huawei-desktop-6.jpg" style="width: 1280px; height: 720px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A tak wygląda &amp;quot;Centrum powiadomień&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/05/huawei-desktop-8.jpg"&gt;&lt;img alt="image9" class="alignnone wp-image-183 size-full" src="/images/2021/05/huawei-desktop-8.jpg" style="width: 1280px; height: 720px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Nie ma przycisku wyłączenia, ale jest możliwość zablokowania ekranu (tak, kombinacja klawiszy &lt;em&gt;Win+L&lt;/em&gt; działa).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="obsluga-aplikacji"&gt;
&lt;h3&gt;Obsługa aplikacji&lt;/h3&gt;
&lt;p&gt;Aplikacje otwierają się w okienku. Można je zminimalizować, powiększyć, przesywać, zmieniać rozmiar itp.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/05/huawei-desktop-10.jpg"&gt;&lt;img alt="image10" class="alignnone wp-image-185 size-full" src="/images/2021/05/huawei-desktop-10.jpg" style="width: 1280px; height: 720px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Bez problemu odtwarzał się film w jakości 1080p, w tle chodził Firefox i foobar2000.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/05/huawei-desktop-11.jpg"&gt;&lt;img alt="image11" class="alignnone wp-image-186 size-full" src="/images/2021/05/huawei-desktop-11.jpg" style="width: 1280px; height: 720px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Działa skrót klawiszowy do przełączania między aplikacjami (&lt;em&gt;Alt+Tab&lt;/em&gt;):&lt;/p&gt;
&lt;p&gt;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ę.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="pisanie"&gt;
&lt;h3&gt;Pisanie&lt;/h3&gt;
&lt;p&gt;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 &lt;em&gt;Ustawieniach&lt;/em&gt; wpisałem &lt;em&gt;klawiatura&lt;/em&gt;, a wyszukiwarka podpowiedziała &lt;em&gt;klawiatura fizyczna.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;[gallery columns=&amp;quot;2&amp;quot; size=&amp;quot;large&amp;quot; ids=&amp;quot;178,177&amp;quot;]&lt;/p&gt;
&lt;p&gt;Kliknąłem w moją klawiaturę Logitech K350 i z listy wybrałem polski. Działa?&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/05/huawei-desktop-9.jpg"&gt;&lt;img alt="image12" class="alignnone wp-image-184 size-full" src="/images/2021/05/huawei-desktop-9.jpg" style="width: 1280px; height: 720px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ekstra!&lt;/p&gt;
&lt;p&gt;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).&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/05/huawei-desktop-12.jpg"&gt;&lt;img alt="image13" class="alignnone wp-image-187 size-full" src="/images/2021/05/huawei-desktop-12.jpg" style="width: 1280px; height: 720px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/05/huawei-desktop-13.jpg"&gt;&lt;img alt="image14" class="alignnone wp-image-188 size-full" src="/images/2021/05/huawei-desktop-13.jpg" style="width: 1280px; height: 720px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="zastosowania-profesjonalne"&gt;
&lt;h3&gt;Zastosowania profesjonalne&lt;/h3&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/05/huawei-desktop-termux.jpg"&gt;&lt;img alt="image15" class="alignnone wp-image-192 size-full" src="/images/2021/05/huawei-desktop-termux.jpg" style="width: 1280px; height: 720px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;nnn&lt;/em&gt; czy &lt;em&gt;nano&lt;/em&gt;. 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!&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="inne"&gt;
&lt;h3&gt;Inne&lt;/h3&gt;
&lt;p&gt;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 &lt;em&gt;Cx File Explorer&lt;/em&gt;, który bez problemu wykrył i pozwolił mi przeglądać pliki:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/05/huawei-desktop-cxexplorer.jpg"&gt;&lt;img alt="image16" class="alignnone wp-image-193 size-full" src="/images/2021/05/huawei-desktop-cxexplorer.jpg" style="width: 1280px; height: 720px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="za-piekne-by-moglo-byc-prawdziwe"&gt;
&lt;h2&gt;Za piękne by mogło być prawdziwe&lt;/h2&gt;
&lt;p&gt;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 &lt;a class="reference external" href="https://www.youtube.com/watch?v=q8hYzJWUs64"&gt;można znaleźć filmiki jak to sobie włączyć&lt;/a&gt;. 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...&lt;/p&gt;
&lt;p&gt;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:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;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&lt;/li&gt;
&lt;li&gt;Huawei Mate 10, 10 Pro, 20, 20 Pro, 20 Pro X, 30, 30 X, 30 Xs&lt;/li&gt;
&lt;li&gt;Huawei P20, P20 Pro, P30, P30 Pro, P40, P40 Pro&lt;/li&gt;
&lt;li&gt;Honor Note 10, View 20&lt;/li&gt;
&lt;li&gt;LG G8 Thinq, V50 Thinq&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="podsumowanie"&gt;
&lt;h2&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Pracując w trybie pulpitu, były momenty w których zapominałem, że to &amp;quot;tylko telefon&amp;quot;. 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.&lt;/p&gt;
&lt;p&gt;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?&lt;/p&gt;
&lt;/div&gt;
</content><category term="IT"/><category term="android"/><category term="desktop"/><category term="huawei"/><category term="it"/><category term="komputery"/><category term="laptop"/><category term="usb"/></entry><entry><title>Obsługa FTP znika z Firefoxa</title><link href="/post/2021/obsluga-ftp-znika-z-firefoxa.html" rel="alternate"/><published>2021-05-28T20:10:00+02:00</published><updated>2021-05-28T20:10:00+02:00</updated><author><name>Marek Sierociński</name></author><id>tag:None,2021-05-28:/post/2021/obsluga-ftp-znika-z-firefoxa.html</id><summary type="html">&lt;p&gt;W trakcie, gdy pracowałem nad &lt;a class="reference external" href="https://marek.sierocinscy.pl/2021/05/25/alpine-linux-na-pandaboard-es-rev-b3/"&gt;postawieniem Alpine Linux na Pandaboardzie&lt;/a&gt;, potrzebowałem szybko pobrać kilka plików z serwera &lt;a class="reference external" href="https://pl.wikipedia.org/wiki/Protok%C3%B3%C5%82_transferu_plik%C3%B3w"&gt;FTP&lt;/a&gt; polskiego mirrora dla tejże dystrybucji linuxa. Wtem pojawiło się takie onkienko:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/05/firefox-nie-umie-w-ftp.png"&gt;&lt;img alt="image1" class="alignnone wp-image-169 size-full" src="/images/2021/05/firefox-nie-umie-w-ftp.png" style="width: 741px; height: 322px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Myślę sobie &amp;quot;O co chodzi?&amp;quot;, przecież Firefox zawsze pięknie listował zawartość serwera FTP pozwalając na łatwe przeglądanie i pobieranie plików. Po …&lt;/p&gt;</summary><content type="html">&lt;p&gt;W trakcie, gdy pracowałem nad &lt;a class="reference external" href="https://marek.sierocinscy.pl/2021/05/25/alpine-linux-na-pandaboard-es-rev-b3/"&gt;postawieniem Alpine Linux na Pandaboardzie&lt;/a&gt;, potrzebowałem szybko pobrać kilka plików z serwera &lt;a class="reference external" href="https://pl.wikipedia.org/wiki/Protok%C3%B3%C5%82_transferu_plik%C3%B3w"&gt;FTP&lt;/a&gt; polskiego mirrora dla tejże dystrybucji linuxa. Wtem pojawiło się takie onkienko:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/05/firefox-nie-umie-w-ftp.png"&gt;&lt;img alt="image1" class="alignnone wp-image-169 size-full" src="/images/2021/05/firefox-nie-umie-w-ftp.png" style="width: 741px; height: 322px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Myślę sobie &amp;quot;O co chodzi?&amp;quot;, 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 &lt;a class="reference external" href="https://blog.mozilla.org/addons/2021/04/15/built-in-ftp-implementation-to-be-removed-in-firefox-90/"&gt;poinformowała, że od wersji 90 zniknie całkowicie&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Wydawca tłumaczy się, że FTP jest już bardzo przestarzałą technologią i chodzi o bezpieczeństwo użytkowników.&lt;/p&gt;
&lt;p&gt;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 &amp;quot;rakotwórczym&amp;quot; o 5G) każdy użytkownik jest w stanie przeczytać wszystkie wiadomości, jakie &amp;quot;lecą&amp;quot; do/z komórek wokół niego. Ale jakoś nadal używamy SMSów.&lt;/p&gt;
&lt;p&gt;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 &amp;quot;bezpieczeństwem użytkowników&amp;quot; o którym mówią.&lt;/p&gt;
&lt;p&gt;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 &amp;quot;be&amp;quot;, 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 &lt;a class="reference external" href="https://filezilla-project.org/"&gt;FileZilla&lt;/a&gt; czy &lt;a class="reference external" href="https://winscp.net/eng/index.php"&gt;WinSCP&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A, no i ponieważ w wersji 88 i 89 ta funkcja jeszcze jest wbudowana, to wystarczy wejść w &lt;em&gt;about:config&lt;/em&gt;, poszukać właściwości &lt;em&gt;network.ftp.enabled&lt;/em&gt; i przestawić na &lt;em&gt;true&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="images/2021/05/firefox-wlacz-ftp.png"&gt;&lt;img alt="image2" class="alignnone wp-image-170 size-full" src="/images/2021/05/firefox-wlacz-ftp.png" style="width: 1267px; height: 461px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ja tak zrobiłem i jeszcze przez dwie wersje zrobię na złość Mozilli :D&lt;/p&gt;
</content><category term="IT"/><category term="alpine"/><category term="firefox"/><category term="ftp"/><category term="internet"/><category term="it"/><category term="komputery"/><category term="mozilla"/><category term="software"/></entry><entry><title>Alpine Linux na Pandaboard ES Rev B3</title><link href="/post/2021/alpine-linux-na-pandaboard-es-rev-b3.html" rel="alternate"/><published>2021-05-25T20:44:00+02:00</published><updated>2021-05-25T20:44:00+02:00</updated><author><name>Marek Sierociński</name></author><id>tag:None,2021-05-25:/post/2021/alpine-linux-na-pandaboard-es-rev-b3.html</id><summary type="html">&lt;p&gt;W poprzednim wpisie było trochę o historii tej płytki. Dziś pokażę jak można postawić na nim &lt;a class="reference external" href="https://alpinelinux.org/"&gt;Alpine Linux.&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="krotko-o-alpine-linux"&gt;
&lt;h2&gt;Krótko o Alpine Linux&lt;/h2&gt;
&lt;p&gt;Dla nie wtajemniczonych, Alpine to bardzo minimalistyczna dystrybucja Linuxa oparta o &lt;a class="reference external" href="https://busybox.net/"&gt;busybox&lt;/a&gt;. Dystrybucja jest bardzo popularnym wyborem jako OS dla kontenerów dockerowych. Co nie oznacza, że nadaje się …&lt;/p&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;W poprzednim wpisie było trochę o historii tej płytki. Dziś pokażę jak można postawić na nim &lt;a class="reference external" href="https://alpinelinux.org/"&gt;Alpine Linux.&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="krotko-o-alpine-linux"&gt;
&lt;h2&gt;Krótko o Alpine Linux&lt;/h2&gt;
&lt;p&gt;Dla nie wtajemniczonych, Alpine to bardzo minimalistyczna dystrybucja Linuxa oparta o &lt;a class="reference external" href="https://busybox.net/"&gt;busybox&lt;/a&gt;. 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. &amp;quot;apk&amp;quot;. Bez problemu śmiga na nim Python 3, nginx, php, mysql itp.&lt;/p&gt;
&lt;div class="section" id="ze-zrodla-krok-po-kroku"&gt;
&lt;h3&gt;Ze źródła krok po kroku&lt;/h3&gt;
&lt;p&gt;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 &lt;a class="reference external" href="https://forum.digikey.com/t/debian-getting-started-with-the-pandaboard/12839"&gt;świetny tutorial ze strony DigiKey.com&lt;/a&gt;. 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ć.&lt;/p&gt;
&lt;div class="section" id="prerequisite"&gt;
&lt;h4&gt;Prerequisite&lt;/h4&gt;
&lt;p&gt;Radzę stworzyć sobie jakiś folder (np. &lt;em&gt;pandaboard&lt;/em&gt;) i robić wszystko w nim:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
mkdir&lt;span class="w"&gt; &lt;/span&gt;pandaboard&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pandaboard
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="przygotowujemy-kompilator"&gt;
&lt;h4&gt;Przygotowujemy kompilator&lt;/h4&gt;
&lt;p&gt;Ściągamy gcc-linaro:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
wget&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;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
&lt;/pre&gt;
&lt;p&gt;Rozpakowujemy:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
tar&lt;span class="w"&gt; &lt;/span&gt;xf&lt;span class="w"&gt; &lt;/span&gt;gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz
&lt;/pre&gt;
&lt;p&gt;Ścieżkę eksportujemy na czas trwania sesji terminala:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
&lt;span class="nb"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;CC&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
&lt;/pre&gt;
&lt;p&gt;Testujemy czy działa:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CC&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;gcc&lt;span class="w"&gt; &lt;/span&gt;--version
&lt;/pre&gt;
&lt;p&gt;Powinno pojawić się coś takiego:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
arm-linux-gnueabihf-gcc&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;Linaro&lt;span class="w"&gt; &lt;/span&gt;GCC&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;.5-2019.12&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;.5.0&lt;span class="w"&gt;
&lt;/span&gt;Copyright&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;C&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2017&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Free&lt;span class="w"&gt; &lt;/span&gt;Software&lt;span class="w"&gt; &lt;/span&gt;Foundation,&lt;span class="w"&gt; &lt;/span&gt;Inc.&lt;span class="w"&gt;
&lt;/span&gt;This&lt;span class="w"&gt; &lt;/span&gt;is&lt;span class="w"&gt; &lt;/span&gt;free&lt;span class="w"&gt; &lt;/span&gt;software&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;see&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;copying&lt;span class="w"&gt; &lt;/span&gt;conditions.&lt;span class="w"&gt;  &lt;/span&gt;There&lt;span class="w"&gt; &lt;/span&gt;is&lt;span class="w"&gt; &lt;/span&gt;NO&lt;span class="w"&gt;
&lt;/span&gt;warranty&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;not&lt;span class="w"&gt; &lt;/span&gt;even&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;MERCHANTABILITY&lt;span class="w"&gt; &lt;/span&gt;or&lt;span class="w"&gt; &lt;/span&gt;FITNESS&lt;span class="w"&gt; &lt;/span&gt;FOR&lt;span class="w"&gt; &lt;/span&gt;A&lt;span class="w"&gt; &lt;/span&gt;PARTICULAR&lt;span class="w"&gt; &lt;/span&gt;PURPOSE.
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="przygotowujemy-bootloader-u-boot"&gt;
&lt;h4&gt;Przygotowujemy bootloader (U-Boot)&lt;/h4&gt;
&lt;p&gt;Klonujemy branch &lt;em&gt;v2019.04&lt;/em&gt;. Uwaga: Jest to ostatnia wersja, dla której są potrzebne nam patche dla rewizji B3!&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
git&lt;span class="w"&gt; &lt;/span&gt;clone&lt;span class="w"&gt; &lt;/span&gt;-b&lt;span class="w"&gt; &lt;/span&gt;v2019.04&lt;span class="w"&gt; &lt;/span&gt;https://github.com/u-boot/u-boot&lt;span class="w"&gt; &lt;/span&gt;--depth&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;u-boot/
&lt;/pre&gt;
&lt;p&gt;i aplikujemy patche:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
wget&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;https://github.com/eewiki/u-boot-patches/raw/master/v2019.04/0001-omap4_common-uEnv.txt-bootz-n-fixes.patch&lt;span class="w"&gt;
&lt;/span&gt;patch&lt;span class="w"&gt; &lt;/span&gt;-p1&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0001&lt;/span&gt;-omap4_common-uEnv.txt-bootz-n-fixes.patch
&lt;/pre&gt;
&lt;p&gt;W końcu konfigurujemy i budujemy:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
make&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;arm&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;CROSS_COMPILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CC&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;distclean&lt;span class="w"&gt;
&lt;/span&gt;make&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;arm&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;CROSS_COMPILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CC&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;omap4_panda_defconfig&lt;span class="w"&gt;
&lt;/span&gt;make&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;arm&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;CROSS_COMPILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CC&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Jeżeli wszystko zbudowało się prawidłowo, to powinniśmy uzyskać przede wszystkim &lt;em&gt;MLO&lt;/em&gt; i &lt;em&gt;u-boot.img&lt;/em&gt;:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
$&lt;span class="w"&gt; &lt;/span&gt;ls&lt;span class="w"&gt; &lt;/span&gt;-l&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;grep&lt;span class="w"&gt; &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;MLO\|u-boot.img&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;-rw-rw-r--&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;marverix&lt;span class="w"&gt; &lt;/span&gt;marverix&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;41860&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mar&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;19&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;22&lt;/span&gt;:06&lt;span class="w"&gt; &lt;/span&gt;MLO&lt;span class="w"&gt;
&lt;/span&gt;-rw-rw-r--&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;marverix&lt;span class="w"&gt; &lt;/span&gt;marverix&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;365136&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mar&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;19&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;22&lt;/span&gt;:06&lt;span class="w"&gt; &lt;/span&gt;u-boot.img
&lt;/pre&gt;
&lt;p&gt;Wracamy do naszego katalogu &lt;em&gt;pandaboard&lt;/em&gt;:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;..
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="kernel"&gt;
&lt;h4&gt;Kernel&lt;/h4&gt;
&lt;p&gt;Klonujemy repo:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
git&lt;span class="w"&gt; &lt;/span&gt;clone&lt;span class="w"&gt; &lt;/span&gt;https://github.com/RobertCNelson/armv7-multiplatform&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;armv7-multiplatform/
&lt;/pre&gt;
&lt;p&gt;Proponuję scheckoutować najnowszą wersję 4.xx. W moim wypadku było to &lt;em&gt;4.20.x&lt;/em&gt;:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
git&lt;span class="w"&gt; &lt;/span&gt;checkout&lt;span class="w"&gt; &lt;/span&gt;origin/v4.20.x&lt;span class="w"&gt; &lt;/span&gt;-b&lt;span class="w"&gt; &lt;/span&gt;tmp
&lt;/pre&gt;
&lt;p&gt;No i budujemy:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
./build_kernel.sh
&lt;/pre&gt;
&lt;p&gt;Jeżeli wszystko poszło w porządku, to pod koniec mniej-więcej powinno być coś takiego:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
-----------------------------&lt;span class="w"&gt;
&lt;/span&gt;Script&lt;span class="w"&gt; &lt;/span&gt;Complete&lt;span class="w"&gt;
&lt;/span&gt;eewiki.net:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;user&amp;#64;localhost:~$&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;kernel_version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;.20.17-armv7-x15&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;-----------------------------
&lt;/pre&gt;
&lt;p&gt;Kopiujemy to &lt;em&gt;export kernel_version=...&lt;/em&gt; i wykonujemy:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
&lt;span class="nb"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;kernel_version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;.20.17-armv7-x15
&lt;/pre&gt;
&lt;p&gt;Natomiast w podkatalogu &lt;em&gt;deploy&lt;/em&gt; powinniśmy zobaczyć pliki:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
$&lt;span class="w"&gt; &lt;/span&gt;ls&lt;span class="w"&gt; &lt;/span&gt;-l&lt;span class="w"&gt; &lt;/span&gt;deploy&lt;span class="w"&gt;
&lt;/span&gt;-rw-rw-r--&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;marverix&lt;span class="w"&gt; &lt;/span&gt;marverix&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;4806577&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;maj&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;22&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;13&lt;/span&gt;:20&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;.20.17-armv7-x15-dtbs.tar.gz&lt;span class="w"&gt;
&lt;/span&gt;-rw-rw-r--&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;marverix&lt;span class="w"&gt; &lt;/span&gt;marverix&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;19001283&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;maj&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;22&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;13&lt;/span&gt;:20&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;.20.17-armv7-x15-modules.tar.gz&lt;span class="w"&gt;
&lt;/span&gt;-rwxrwxr-x&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;marverix&lt;span class="w"&gt; &lt;/span&gt;marverix&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;9433600&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;maj&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;22&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;13&lt;/span&gt;:19&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;.20.17-armv7-x15.zImage
&lt;/pre&gt;
&lt;p&gt;Wracamy do naszego katalogu &lt;em&gt;pandaboard&lt;/em&gt;:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;..
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="rootfs"&gt;
&lt;h4&gt;Rootfs&lt;/h4&gt;
&lt;p&gt;Ściągamy minirootfs Alpine Linuxa dla architektury &lt;em&gt;armv7&lt;/em&gt; (lub bardziej generycznej &lt;em&gt;armhf&lt;/em&gt;). 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 &amp;quot;ale&amp;quot;. 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ł:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
wget&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;https://dl-cdn.alpinelinux.org/alpine/v3.7/releases/armhf/alpine-minirootfs-3.7.3-armhf.tar.gz
&lt;/pre&gt;
&lt;p&gt;Będzie nam też potrzebny &amp;quot;gotowy&amp;quot; obraz w tej samej wersji i architekturze. Można go rozpoznać po tym, że posiada człon &amp;quot;u-boot&amp;quot; w linku:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
wget&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;https://dl-cdn.alpinelinux.org/alpine/v3.7/releases/armhf/alpine-uboot-3.7.3-armhf.tar.gz
&lt;/pre&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Minirootfs to naprawdę takie minimum minimum (w końcu ma niecałe 2MB!). Są&amp;nbsp; 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 &lt;em&gt;apks&lt;/em&gt;, który znajduje się w tym &amp;quot;gotowcu&amp;quot;.&lt;/div&gt;
&lt;div class="line"&gt;Wypakowujemy zawartość pierwszej paczki do folderu &lt;em&gt;rootfs&lt;/em&gt;:&lt;/div&gt;
&lt;/div&gt;
&lt;pre class="code sh literal-block"&gt;
mkdir&lt;span class="w"&gt; &lt;/span&gt;rootfs&lt;span class="w"&gt;
&lt;/span&gt;tar&lt;span class="w"&gt; &lt;/span&gt;xf&lt;span class="w"&gt; &lt;/span&gt;alpine-minirootfs-3.7.3-armhf.tar.gz&lt;span class="w"&gt; &lt;/span&gt;-C&lt;span class="w"&gt; &lt;/span&gt;rootfs
&lt;/pre&gt;
&lt;p&gt;Wypakowujemy folder &lt;em&gt;apks&lt;/em&gt;:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
tar&lt;span class="w"&gt; &lt;/span&gt;xf&lt;span class="w"&gt; &lt;/span&gt;alpine-uboot-3.7.3-armhf.tar.gz&lt;span class="w"&gt; &lt;/span&gt;-C&lt;span class="w"&gt; &lt;/span&gt;rootfs&lt;span class="w"&gt; &lt;/span&gt;./apks
&lt;/pre&gt;
&lt;p&gt;A także podstawowe ustawienia:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
tar&lt;span class="w"&gt; &lt;/span&gt;xf&lt;span class="w"&gt; &lt;/span&gt;alpine-uboot-3.7.3-armhf.tar.gz&lt;span class="w"&gt; &lt;/span&gt;./alpine.apkovl.tar.gz&lt;span class="w"&gt;
&lt;/span&gt;tar&lt;span class="w"&gt; &lt;/span&gt;xf&lt;span class="w"&gt; &lt;/span&gt;alpine.apkovl.tar.gz&lt;span class="w"&gt; &lt;/span&gt;-C&lt;span class="w"&gt; &lt;/span&gt;rootfs/
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="przygotowujemy-karte-sd"&gt;
&lt;h4&gt;Przygotowujemy kartę SD&lt;/h4&gt;
&lt;p&gt;Sprawdzamy jak się nazywa nasze urządzenie blokowe:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
$&lt;span class="w"&gt; &lt;/span&gt;lsblk&lt;span class="w"&gt;
&lt;/span&gt;NAME&lt;span class="w"&gt;        &lt;/span&gt;MAJ:MIN&lt;span class="w"&gt; &lt;/span&gt;RM&lt;span class="w"&gt;   &lt;/span&gt;SIZE&lt;span class="w"&gt; &lt;/span&gt;RO&lt;span class="w"&gt; &lt;/span&gt;TYPE&lt;span class="w"&gt; &lt;/span&gt;MOUNTPOINT&lt;span class="w"&gt;
&lt;/span&gt;sda&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;:0&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;29&lt;/span&gt;,9G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;disk
&lt;/pre&gt;
&lt;p&gt;I dla ułatwienia:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
&lt;span class="nb"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;DISK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/sda
&lt;/pre&gt;
&lt;p&gt;Czyścimy kartę:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;dd&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/zero&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DISK&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1M&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Instalujemy bootloader:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;dd&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;./u-boot/MLO&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DISK&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;seek&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;128k&lt;span class="w"&gt;
&lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;dd&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;./u-boot/u-boot.img&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DISK&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;seek&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;384k
&lt;/pre&gt;
&lt;p&gt;Partycjonujemy:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;sfdisk&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DISK&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;lt;&amp;lt;-EOF
4M,,L,*
EOF&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;A następnie formatujemy na &lt;em&gt;ext4&lt;/em&gt;:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;mkfs.ext4&lt;span class="w"&gt; &lt;/span&gt;-L&lt;span class="w"&gt; &lt;/span&gt;rootfs&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DISK&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Montujemy:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
&lt;span class="nb"&gt;export&lt;/span&gt;&lt;span class="w"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/media/rootfs&lt;span class="w"&gt;
&lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/&lt;span class="w"&gt;
&lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;mount&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DISK&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="firmware-wifi"&gt;
&lt;h4&gt;Firmware WiFi&lt;/h4&gt;
&lt;p&gt;Po prostu klonujemy:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
git&lt;span class="w"&gt; &lt;/span&gt;clone&lt;span class="w"&gt; &lt;/span&gt;git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git&lt;span class="w"&gt; &lt;/span&gt;--depth&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="kopiujemy-rzeczy"&gt;
&lt;h4&gt;Kopiujemy rzeczy&lt;/h4&gt;
&lt;p&gt;Rootfs:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;cp&lt;span class="w"&gt; &lt;/span&gt;-r&lt;span class="w"&gt; &lt;/span&gt;rootfs/*&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;sync&lt;span class="w"&gt;
&lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;chown&lt;span class="w"&gt; &lt;/span&gt;root:root&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/&lt;span class="w"&gt;
&lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;chmod&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;755&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/
&lt;/pre&gt;
&lt;p&gt;Dajemy odpowiednie uprawnienia &lt;em&gt;busybox&lt;/em&gt;:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;chmod&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4755&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/bin/busybox
&lt;/pre&gt;
&lt;p&gt;Tworzymy tymczasowego użytkownika &lt;em&gt;sheldon&lt;/em&gt; z hasłem &lt;em&gt;bazinga&lt;/em&gt;:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;sh&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;echo 'sheldon:x:1000:1000:Sheldon Cooper:/tmp:/bin/ash' &amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/etc/passwd&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;sh&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;echo 'sheldon:\$1\$bbt\$SY4ikXOUxJn9uf666cVtp.:0:0:99999:7:::' &amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/etc/shadow&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;sh&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;echo 'sheldon:x:1000:sheldon' &amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/etc/group&amp;quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Enablujemy użytkownika root i zmieniamy mu hasło na &lt;em&gt;toor&lt;/em&gt; (oczywiście później należy zmienić za pomocą &lt;em&gt;passwd&lt;/em&gt;):&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;sed&lt;span class="w"&gt; &lt;/span&gt;-i&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;1s/root:\!:/root:\$1\$bbt\$3YaV3qqIqN3RzpOd92eju0:/&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/etc/shadow
&lt;/pre&gt;
&lt;p&gt;Tworzymy plik &lt;em&gt;eEnv.txt&lt;/em&gt;:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/boot&lt;span class="w"&gt;
&lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;sh&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;echo 'uname_r=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;kernel_version&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;' &amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/boot/uEnv.txt&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;sh&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;echo 'dtb=omap4-panda-es-b3.dtb' &amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/boot/uEnv.txt&amp;quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Kernel i wszystko co z nim związane:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;cp&lt;span class="w"&gt; &lt;/span&gt;-v&lt;span class="w"&gt; &lt;/span&gt;./armv7-multiplatform/deploy/&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;kernel_version&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;.zImage&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/boot/vmlinuz-&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;kernel_version&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/boot/dtbs/&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;kernel_version&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/&lt;span class="w"&gt;
&lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;tar&lt;span class="w"&gt; &lt;/span&gt;xfv&lt;span class="w"&gt; &lt;/span&gt;./armv7-multiplatform/deploy/&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;kernel_version&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;-dtbs.tar.gz&lt;span class="w"&gt; &lt;/span&gt;-C&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/boot/dtbs/&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;kernel_version&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/&lt;span class="w"&gt;
&lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;tar&lt;span class="w"&gt; &lt;/span&gt;xfv&lt;span class="w"&gt; &lt;/span&gt;./armv7-multiplatform/deploy/&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;kernel_version&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;-modules.tar.gz&lt;span class="w"&gt; &lt;/span&gt;-C&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/
&lt;/pre&gt;
&lt;p&gt;Firmware WiFi:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/lib/firmware/ti-connectivity&lt;span class="w"&gt;
&lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;cp&lt;span class="w"&gt; &lt;/span&gt;-v&lt;span class="w"&gt; &lt;/span&gt;./linux-firmware/ti-connectivity/*&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/lib/firmware/ti-connectivity
&lt;/pre&gt;
&lt;p&gt;fstab:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;sh&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;echo '/dev/mmcblk0p1  /  auto  remount,rw  0  1' &amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/etc/fstab&amp;quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Upewniamy się, że wszystko zostało zsynchronizowane:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
sync
&lt;/pre&gt;
&lt;p&gt;Odmontowujemy:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
sudo&lt;span class="w"&gt;&amp;nbsp;&lt;/span&gt;umount&lt;span class="w"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOTFS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="setup"&gt;
&lt;h4&gt;Setup&lt;/h4&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;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.&lt;/div&gt;
&lt;div class="line"&gt;Teraz możemy się zmienić użytkownika na &lt;em&gt;root:&lt;/em&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;pre class="code sh literal-block"&gt;
su&lt;span class="w"&gt; &lt;/span&gt;root
&lt;/pre&gt;
&lt;p&gt;Przemontowujemy:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
mount&lt;span class="w"&gt; &lt;/span&gt;-t&lt;span class="w"&gt; &lt;/span&gt;proc&lt;span class="w"&gt; &lt;/span&gt;proc&lt;span class="w"&gt; &lt;/span&gt;/proc&lt;span class="w"&gt;
&lt;/span&gt;mount&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;remount,rw&lt;span class="w"&gt; &lt;/span&gt;/
&lt;/pre&gt;
&lt;p&gt;Instalujemy wszystkie paczki:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
apk&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;/apks/armhf/*.apk
&lt;/pre&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;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 &lt;em&gt;alpine&lt;/em&gt;, &lt;em&gt;busybox&lt;/em&gt; oraz &lt;em&gt;openrc&lt;/em&gt;&lt;/div&gt;
&lt;div class="line"&gt;Rebootujemy maszynę.&lt;/div&gt;
&lt;/div&gt;
&lt;pre class="code sh literal-block"&gt;
reboot
&lt;/pre&gt;
&lt;p&gt;Tym razem powinniśmy mogli odrazu wbić się na roota (bez potrzeby najpierw logowania się na sheldona).&lt;/p&gt;
&lt;p&gt;(Opcjonalnie) Jeżeli mamy podłączony kabel sieciowy, a ale diody nie świecą, to oznacza, że najprawdopodobniej moduł ethernet nie jest załadowany:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
modprobe&lt;span class="w"&gt; &lt;/span&gt;-a&lt;span class="w"&gt; &lt;/span&gt;smsc95xx
&lt;/pre&gt;
&lt;p&gt;Odpalamy DHCP:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
rc-service&lt;span class="w"&gt; &lt;/span&gt;networking&lt;span class="w"&gt; &lt;/span&gt;start
&lt;/pre&gt;
&lt;p&gt;Przechodzimy główny setup:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
setup-alpine
&lt;/pre&gt;
&lt;p&gt;Aktualizujemy repozytorium:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
apk&lt;span class="w"&gt; &lt;/span&gt;update&lt;span class="w"&gt;
&lt;/span&gt;apk&lt;span class="w"&gt; &lt;/span&gt;upgrade
&lt;/pre&gt;
&lt;p&gt;No i włączamy automatyczne odpalanie sieci i daemona ssh:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
rc-update&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;networking&lt;span class="w"&gt;
&lt;/span&gt;rc-update&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;sshd
&lt;/pre&gt;
&lt;p&gt;Skończone!&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="instalowanie-paczek"&gt;
&lt;h4&gt;Instalowanie paczek&lt;/h4&gt;
&lt;p&gt;Jeżeli chcemy zaintalować np. &lt;em&gt;nano&lt;/em&gt; i Pythona 3 to wykonujemy:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
apk&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;nano&lt;span class="w"&gt; &lt;/span&gt;python3
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="gotowiec"&gt;
&lt;h2&gt;Gotowiec&lt;/h2&gt;
&lt;p&gt;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 &lt;a class="reference external" href="https://1drv.ms/u/s!ApFPU1DG0Ozygrl04G3qjoN4cmLFQQ?e=fEXbe3"&gt;OneDrive&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Wystarczy pobrać skompresowany backup (&lt;em&gt;alpine-3.7-250521.img.xz&lt;/em&gt;) i następnie:&lt;/p&gt;
&lt;pre class="code sh literal-block"&gt;
cat&lt;span class="w"&gt; &lt;/span&gt;alpine-3.7-250521.img.xz&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;unxz&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;dd&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/sdX
&lt;/pre&gt;
&lt;p&gt;Gdzie &lt;em&gt;X&lt;/em&gt; to oczywiście odpowiednia litera, zgodnie z tym co pokazuje &lt;em&gt;lsblk&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;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. &lt;em&gt;gparted&lt;/em&gt;) i po prostu rozszerzyć partycję na całą wolną przestrzeń karty.&lt;/p&gt;
&lt;/div&gt;
</content><category term="IT"/><category term="alpine"/><category term="arm"/><category term="armhf"/><category term="armv7"/><category term="it"/><category term="komputery"/><category term="linux"/><category term="pandaboard"/></entry><entry><title>Pandaboard ES Rev B3</title><link href="/post/2021/pandaboard-es-rev-b3.html" rel="alternate"/><published>2021-05-23T22:12:00+02:00</published><updated>2021-05-23T22:12:00+02:00</updated><author><name>Marek Sierociński</name></author><id>tag:None,2021-05-23:/post/2021/pandaboard-es-rev-b3.html</id><summary type="html">&lt;p&gt;Ze względu na zmiany w mojej firmie, dostałem do moich rąk trochę szrotu. Mianowicie Pandaboard ES Rev B3.&lt;/p&gt;
&lt;p&gt;[gallery ids=&amp;quot;147,146,145&amp;quot;]&lt;/p&gt;
&lt;p&gt;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 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ze względu na zmiany w mojej firmie, dostałem do moich rąk trochę szrotu. Mianowicie Pandaboard ES Rev B3.&lt;/p&gt;
&lt;p&gt;[gallery ids=&amp;quot;147,146,145&amp;quot;]&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;div class="section" id="krotko-o-specyfikacji"&gt;
&lt;h2&gt;Krótko o specyfikacji&lt;/h2&gt;
&lt;p&gt;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&amp;nbsp; małym sprzęcie to naprawdę robiła wrażenie.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external image-reference" href="https://upload.wikimedia.org/wikipedia/commons/0/07/PandaBoard_described.png"&gt;&lt;img alt="image1" class="alignnone" src="https://upload.wikimedia.org/wikipedia/commons/0/07/PandaBoard_described.png" style="width: 640px; height: 500px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;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?&lt;/p&gt;
&lt;p&gt;Jeżeli siedzisz trochę w IT (a zwłaszcza w minikomputerach), możesz się zastanawiać &amp;quot;Skoro to był taki fajny sprzęt, to dlaczego nigdy o nim nie słyszałem/am?&amp;quot;. I jest to bardzo dobre pytanie. Myślę, że powodów jest wiele.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="the-good-the-bad-and-the-ugly"&gt;
&lt;h2&gt;The good, the bad and the ugly&lt;/h2&gt;
&lt;div class="section" id="rozmiary"&gt;
&lt;h3&gt;Rozmiary&lt;/h3&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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ń.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="zasilanie"&gt;
&lt;h3&gt;Zasilanie&lt;/h3&gt;
&lt;p&gt;Pandaboard jest zasilany za pomocą zasilacza zakończonego popularnym &amp;quot;bolcem&amp;quot;. 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...&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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ść.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="sterowniki"&gt;
&lt;h3&gt;Sterowniki&lt;/h3&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="wsparcie"&gt;
&lt;h3&gt;Wsparcie&lt;/h3&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&amp;nbsp; A Panda miała dość &amp;quot;małą&amp;quot; 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.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="rewizje"&gt;
&lt;h3&gt;Rewizje&lt;/h3&gt;
&lt;p&gt;Możesz spytać &amp;quot;Marek, ale jak to - chcesz mi powiedzieć, że producent nie udostępniał obrazu Ubuntu na swojej stronie?&amp;quot;. 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).&lt;/p&gt;
&lt;p&gt;Możesz zatem spytać &amp;quot;Ale to była, aż taka duża różnica? Nie wystarczyło gdzieś zamienić A na B i już?&amp;quot;. 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.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="ciepelko"&gt;
&lt;h3&gt;Ciepełko&lt;/h3&gt;
&lt;p&gt;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&amp;nbsp; kilka aluminiowych radiatorów + klej termoprzewodzący. Ale mimo tego, procesor bez problemu osiaga 70 stopni.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="podsumowanie"&gt;
&lt;h2&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;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ł.&amp;nbsp; Jest różnica, prawda?&lt;/p&gt;
&lt;p&gt;Nie mniej, skoro mam takowe w rączkach, postaram się je jakoś wykorzystać.&lt;/p&gt;
&lt;p&gt;W następnym poście: instalowanie Alpine Linux na Pandaboard ES Rev B3! :)&lt;/p&gt;
&lt;/div&gt;
</content><category term="IT"/><category term="arm"/><category term="armhf"/><category term="cortex-a9"/><category term="it"/><category term="komputery"/><category term="pandaboard"/></entry></feed>