Apt-p2p – ostateczny test

Krótko o apt-p2p

Apt-p2p spodobał mi się od razu, gdy tylko o nim usłyszałem. Jest to bardzo ciekawe podejście, w którym pobieranie pakietów deb odbywa się przy pomocy P2P (protokół bittorrent), zamiast z tradycyjnych centralnych repozytoriów (HTTP, FTP). Centralne repozytoria są wykorzystywane wyłącznie w przypadku, kiedy pakiet nie jest dostępny przez P2P lub nie jest wystarczająco popularny (za mało peerów).

Kiedyś zrobiłem krótki test apt-p2p, ale trudno go nazwać miarodajnym – maszyna była bardzo słaba, demon ma spory apetyt na zasoby i nie udało mi się wtedy zmusić go do działania jako proxy dla innych maszyn, a sam test nie trwał długo. Od tamtej pory minęło trochę czasu. Maszynka robiąca za router została wymieniona na coś bardziej współczesnego, znalazłem sposób na uruchomienie apt-p2p jako lokalnego proxy (brzydki, bo wymaga gmerania w kodzie, ale się da i działa). Program dostał drugą szansę.

Efekty działania

Demon był testowany (czyli po prostu używany) w sumie na trzech maszynach, przez parę tygodni. Pierwsza maszyna, działająca 24/7, w zasadzie base system + parę pakietów, Lenny, publiczne IP, robiła też za proxy dla kolejnej (desktop, Lenny). Apt-p2p w wersji 0.1.5:

Transport

Mirror DownloadsPeer DownloadsPeer Uploads
This Session0.0B0.0B0.0B
Session Ratio0.00%0.00%0.00%
All-Time108MiB32.5MiB50.4MiB
All-Time Ratio76.85%23.15%35.86%

Maszyna druga (mój desktop), Squeeze, za NAT, bez przekierowanych portów. Apt-p2p w wersji 0.1.6:

Transport

Mirror DownloadsPeer DownloadsPeer Uploads
This Session47.4MiB119KiB0.0B
Session Ratio99.75%0.25%0.00%
All-Time1.07GiB340MiB0.0B
All-Time Ratio76.33%23.67%0.00%

Statystyk trzeciej maszyny nie zaprezentuję – napotkałem na dziwny problem z pobieraniem plików, być może mający związek z uruchomieniem tunelu IPv6 (MTU? brak wsparcia dla IPv6 w apt-p2p?) i cache był czyszczony przy okazji prób rozwiązania problemu. Jak patrzyłem wcześniej, to nic specjalnie różniącego się od powyższych nie zauważyłem.

Inne uwagi

Pierwsze, co rzuca się w oczy po zmianie sposobu pobierania, to fakt, że pobieranie jest znacznie wolniejsze, niż normalnie. Widać to szczególnie na szybszych maszynach, z lepszym łączem. Prawda jest taka, że zwykle z tradycyjnych repozytoriów pakiety lecą z pełną prędkością. W przypadku skorzystania z apt-p2p widać przy każdym pliku laga, zapewne chodzi o sprawdzanie, czy peery posiadają dany pakiet. Nie jest to drastyczne dla aktualizacji systemu, ale drażni, jeśli potrzebujemy szybko doinstalować jakiś pakiet.

Jeśli chodzi o pobieranie, to jak widać na tej mizernej próbce, stosunek pakietów pobieranych tradycyjnie do pobieranych przez P2P jest w miarę stały i wynosi około 3 do 1. Całkiem niezły wynik, szczerze mówiąc liczyłem na znacznie mniej pobieranych przez P2P.

Widać też wyraźnie, że przekierowanie portu jest absolutnie niezbędne, jeśli nie chcemy być leecherem. Szczerze mówiąc, liczyłem, że coś tam będzie się wysyłać zza NAT do peerów z publicznym IP, tak jak przy tradycyjnym P2P, ale widocznie implementacja protokołu niestety nie pozwala na to.

Pakiet ma sporo błędów, a autor nie spieszy się z ich usunięciem. Wspomniany wcześniej brak prostego sposobu na uruchomienie apt-p2p jako lokalnego proxy to jeden z przykładów. Do tego dochodzą nieciekawe defaulty związane z miejscem zajmowanym przez logi czy problemy z działaniem przy zmianie IP lub utracie łączności z Internetem.

Na szybką poprawę błędu związanego z możliwym DDoSem przez klientów P2P też pewnie nie ma co liczyć… Nawet nie zgłaszałem tego, bo na inne błędy zero reakcji autora. Taki brak odpowiedzi jest okrutnie demotywujący, fajnie jest usłyszeć choćby, że będzie poprawione w następnej wersji, albo że nie uważa tego za (poważny) błąd.

Ewidentnie brakuje silnego community wokół projektu, najlepiej ze znajomością Pythona (przyznaję, próbowałem nieco z powyższych poprawić przez dodanie opcji, ale prawda jest taka, że ciężko i długo robi się coś w języku, którego się nie zna).

Zapewne wszystko wiąże się z tym, że apt-p2p jest mało popularny. Widać to choćby na kanale IRC poświęconym programowi. Zapewne prędkość pobierania byłaby wyższa, gdyby peerów było więcej, pewnie udałoby się poprawić część błędów, a autor miałby większą motywację do pracy widząc, że program jest popularny.

Podsumowanie

Uważam, że w tej chwili apt-p2p jest mocno zapuszczony, słabo przetestowany i IMHO nadaje się wyłącznie dla geeków. Jeśli są chętni (najlepiej ze znajomością Pythona) do zabawy z tym programem, to dajcie znać. Jest dobry moment na popularyzację tego rozwiązania, przy okazji pewnie dałoby się odciążyć nieco mirrory przy wydaniu Squeeze’ego (i zapewnić szybszy upgrade do nowego systemu – tak przynajmniej twierdzono w swoim czasie w przypadku Ubuntu). Jeśli chętnych brak, to nie pozostaje nic innego, jak wyłączyć apt-p2p i znowu poczekać parę lat… Może coś się zmieni.

Linux w stacji ładującej telefony komórkowe.

Linuksa widzieliśmy już we wrocławskich automatach biletowych, na gdańskich wyświetlaczach rozkładu jazdy. Jakiś czas temu w Poznaniu w jednej z galer(ii) handlowych pojawiło się dziwne urządzenie. Nie widziałem, by ktoś z niego korzystał, z opisu miała to być stacja do ładowania i dezynfekcji(?) telefonów komórkowych.

Postało jakiś czas, potem się zepsuło (albo nigdy nie zostało uruchomione – te kabelki zawsze tak na wierzchu były – żadnego zamknięcia…), ujawniając, że pod spodem działa Linux. Takie zepsute postało jeszcze parę dni i… zniknęło. Czyżby nie było biznesu w ładowaniu i dezynfekcji telefonów komórkowych? W sumie nie zdziwiłbym się, gdyby w mieście nie było – do ładowarki blisko, a miejsce nie wygląda na pewne. Ja bym nie zostawił telefonu GSM tak bez nadzoru…

W każdym razie, dowód, że pod spodem Linux (sorry za jakość, komórką klikane szybko):

Urządzenie do ładowania telefonów - pełny widok.

I zbliżenie ekranu – GRUB z komunikatem błędu w całej okazałości:

Komunikat błędu na ładowarce.

Flashowanie BIOS spod Linuksa – flashrom.

Dla jasności: poniższy wpis nie ma charakteru poradnika, bardziej jest opisem geekowej zabawy i jako taki należy go traktować, chociaż parę porad też się znajdzie.

Przeczytałem wpis o flashowaniu BIOS bez użycia Windowsa i stwierdziłem, że brakuje tam opisu natywnego linuksowego rozwiązania, czyli programu flashrom. Przy okazji wyszło też na jaw, że grzejnik korzysta z BIOSu w wersji 1.90, jak go fabryka wypuściła, a na stronie producenta dostępna jest wersja 2.80. Co prawda don’t fix it, if it ain’t broken, ale ponieważ flashrom chwali się wsparciem dla płyty ASRock K7S41 a u mnie jest ASRock K7S41GX, to pomyślałem, że spróbować trzeba, bo nazwa podobna, a GX kojarzy się z grafiką. 😉 Do sprawdzania wersji BIOS, płyty itd. korzystamy oczywiście z programu dmidecode.

Na początek rozczarowanie – wersja flashrom ze Squeeze nie wspiera tej płyty. Ale na stronie projektu flashrom podany jest namiar na kanał IRC, gdzie w razie problemów można uzyskać pomoc. Od razu zaznaczę, że kanał jest bardzo pomocny, ale techniczny. Czyli chłopaki (znaczy: developerzy) chcą dużo paste’ów z verbose mode. 😉 Opisałem problem, dostałem sugestię, by skorzystać z wersji SVN, co uczyniłem.

Jest nieco lepiej, ale nadal nie działa, bo nie rozpoznaje płyty, ale jakiś postęp jest. Dostaję pytania o wersję chipa z BIOSem (wymaga otwarcia puszki, zdarcia nalepki i odczytania napisów z chipa), prośbę o użycie programu superiotool, zaczynam pomału orientować się w temacie, z grubsza kojarzyć co tam się przy tym flashowaniu tak naprawdę odbywa, jak wyglądają płyty (taaak, chipy z BIOSem drastycznie się zmieniły odkąd ostatnio grzebałem w sprzęcie, choć i ten nie jest najnowszy)…

Okazuje się, że super I/O chip jest obsługiwany, chip BIOSu też… Dłuższe przejrzenie stron z opisem płyt K7S41 i K7S41X oraz źródełek flashrom ujawnia, że to bardzo podobne konstrukcje, z tym samym super I/O chipem i tym samym chipem BIOS. Okazuje się też, że udaje się odczytać aktualny BIOS do pliku:

flashrom -c W49F002U/N -m Asrock:K7S41 -VV -r test.dmp -f

Co prawda wymuszając wszystko na sztywno i z wymuszeniem operacji, ale działa. Co prawda niewiele to daje – chłopaki twierdzą, że musi wykrywać automatycznie, inaczej o flashowaniu można zapomnieć.

W przypływie dobrego humoru i odwagi, postanawiam wziąć sprawy w swoje ręce, skoro już tyle wiem o sprzęcie. Lekka zabawa z linią odpowiedzialną za dopasowanie (skopiuj linię dla K7S41, zmień na K7S41GX, skompiluj, spaczkuj checkinstall, przerzuć na docelową maszynę, zainstaluj, uruchom) i… wykrywa bez błędów.

Calibrating delay loop... OK.
No coreboot table found.
Found chipset "SiS 741", enabling flash write... OK.
This chipset supports the following protocols: Non-SPI.
Disabling flash write protection for board "ASRock K7S41GX"... OK.
Found chip "Winbond W49F002U/N" (256 KB, Parallel) at physical address 0xfffc0000.

Szybki test – odczyt działa, md5sum identyczna jak poprzednio. Weryfikacja zawartości BIOS z plikiem – passed. No to zaryzykujmy i wrzućmy to, co wyciągnęliśmy z chipa:

Flash image seems to be a legacy BIOS. Disabling checks.
Erasing and writing flash chip... Done.
Verifying flash... VERIFIED.

Wygląda, że działa. Na koniec wrzuciłem najnowszą wersję BIOSu. Ponownie bez problemu. Odczyt dmidecode – nadal widzi starą wersję, ale może restart jest wymagany? No to jazda z restartem… Chwila prawdy czyli reboot.

No i tu dobre wiadomości się kończą – po reboocie maszynka nie wstała i piszczy nietypowo. Chłopaki z IRCa mówią, że powinno być niekrytycznie, skoro weryfikacja się powiodła, być może wymagane wyłączenie zasilania lub reset CMOS. Niestety, żadne z nich nie pomogło. Trzeba skołować monitor i klawiaturę i zobaczyć, co też on tam wyświetla (rada: nie polecam zabawy z flashowaniem bez dostępu do monitora i klawiatury). Może jakiś błąd typu No keyboard. Press F1 to continue?

Zobaczymy niebawem. Dramatu nie ma, bo od biedy mam dostęp do identycznej płyty, więc przy odrobinie zabawy przełoży się kość BIOSu i przeflashuje się tam. Wkrótce dam znać, co ostatecznie wynikło (mam nadzieję, że uruchomię sprzęt, a flashrom zyska obsługę nowej płyty).

Tak czy inaczej, zabawa przednia (stąd kategoria Rozrywka), a flashowanie z użyciem flashrom bardzo przyjemne, proste i wygodne. Oczywiście jeśli sprzęt jest wspierany. 😉

UPDATE: Wiele się nie pomyliłem. Faktycznie trzeba było nacisnąć F1, tyle, że dwa razy. Raz, aby przywrócić wartości domyślne BIOSu (nie wiem, czy reset zworką nie zadziałał, czy po prostu trzeba), drugi, aby ominąć błąd związany z MAC. Ten drugi jest poważniejszy i objawia się komunikatem Mac address are invalid in both APC and DMI Press F1 to Resume i raczej zasługuje na oddzielny wpis. W każdym razie grzejnik znów grzeje (na razie na starym BIOSie).