One apt to rule them all

Zdarza się, że mamy więcej niż jednego czy dwa hosty do zarządzania. Zdarza się, że wykonując aktualizację na desktopie zapomnimy o innych hostach. Albo, po prostu chcemy sobie uprościć aktualizacje i nie musieć się ręcznie logować w kilka(naście, -dziesiąt) miejsc.

Jest przyjemne, konsolowe narzędzie, które ułatwi takie zadanie. Chodzi o apt-dater, czyli narzędzie do automatycznej aktualizacji wielu hostów, działające w ncurses. Działa z pochodnymi Debiana, ale również z systemami wykorzystującymi managery pakietów rug czy yum. Zasada działania jest prosta i nieco podobna do rozwiązań typu clusterssh. Na systemie docelowym dodajemy (dla pochodnych Debiana) użytkownika, który ma dodane w /etc/sudoers:

user ALL=NOPASSWD: /usr/bin/apt-get, /usr/bin/aptitude

Dodatkowo należy umożliwić temu użytkownikowi logowanie po kluczach (pamiętamy o używaniu kluczy z hasłem!) z maszyny, z której będziemy zarządzać. No i oczywiście skonfigurować hosty, którymi apt-dater będzie zarządzać. Domyślna konfiguracja znajduje się w plikach w katalogu:

$XDG_CONFIG_HOME/apt-dater/

Definiujemy tam grupy hostów, użytkowników na poszczególnych systemach, hosty (IP lub FQDN) oraz port. Przykładowa zawartość pliku hosts.conf:

[GRUPA1]
Hosts=localhost;pi@mojeraspberry:222

[GRUPA2]
Hosts=user1@serwer.www;user2@serwer.db:222;user3@serwer.poczty:222

[GRUPA3]
Hosts=user1@kolejny.serwer,user1@kolejny.serwer2

Jednym przyciśnięciem klawisza można wywołać aktualizację listy pakietów lub instalację aktualizacji w całej grupie hostów lub na pojedynczym hoście. Oczywiście jest możliwość podłączenia się do wybranego hosta i dokładnego sprawdzenia sytuacji.

Korzystanie nie jest oczywiste – trzeba się chwilę pobawić i przywyknąć. Nie podoba mi się też wykorzystanie aptitude, którego nie trawię i który AFAIK korzysta z innego algorytmu ustalania zależności, niż apt-get[1]. Wolałbym wajig albo gołego apt-get. Domyślnie wykorzystywany jest apt-get, ale można zmienić go na aptitude w pliku /etc/apt-dater-host.conf. Niemniej rozwiązanie jest ciekawe i mało znane, więc informuję i polecam wypróbowanie. A nuż komuś się spodoba. Ja używam pół na pół – czasem aktualizacje przy pomocy apt-dater, czasem po prostu aktualizuję tradycyjnym wajig daily-upgrade.

PS Dzięki K. za informację o tym programie.

[1] Z tego powodu kiedyś był zalecany przy aktualizacji wersji Debiana. Od jakiegoś czasu zalecany jest apt-get.

UPDATE: Poprawione błędy w nazwach plików, dodana informacja o wyborze programu używanego do aktualizacji.

Zabbix i monitorowanie ruchu na porcie

Niedawno na kanale IRCowym #zabbix padło pytanie, jak monitorować ruch na porcie. Po upewnieniu się, że chodzi o port protokołu, a nie o interfejs w switchu (co jest zresztą chyba bardziej popularnym znaczeniem, szczególnie w kontekście monitoringu), padły propozycje.

Moja ulubiona ostatnimi czasy metoda, czyli czytanie danych o ruchu z flowów. Poważnie, sflow i nfdump rządzą, a wrapper do Zabbiksa, który łyka parametry i używa nfdump jest trywialny do napisania, lekki i działa znakomicie, a wyciąganie dowolnych danych o ruchu jest bardzo wygodne. No ale do tego trzeba mieć zboczenie sieciowe i/lub sprzęt obsługujący flowy, ew. uruchomić zrzucanie flowów na maszynie z Linuksem, co może być zbędnym jej obciążeniem i ogólnie strzelaniem z armaty do muchy.

Prostszym rozwiązaniem jest odczyt danych bezpośrednio z iptables. Przypuśćmy, że chcemy monitorować w Zabbiksie, ile ruchu trafia do serwera na porcie 80, a ile na 443. W tym celu tworzymy reguły, które będą dopuszczały, a jednocześnie zliczały ruch na danym porcie:

iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Zakładam, że trafią w odpowiednie miejsce w łańcuchu tak, że ruch będzie przez nie przechodził. Do wyświetlania wartości posłuży iptables -L -n -v. Jak widać, w pierwszej kolumnie jest ilość pakietów, w kolejnej ilość bajtów. W /etc/zabbix/zabbix_agentd.conf dodajemy linię:

UserParameter=traffic.incoming.dstport[*], iptables -L -n -v | grep "dpt:$1" | \
sed 's/K/000/;s/M/000000/;s/G/00000000/' | awk '{print $$2}'

Kolejno: grep po parametrze wywołanym z Zabbiksa, w tym przypadku za parametr posłuży numer portu (czyli czytamy dwie wartości: traffic.incoming.dstport[80] oraz traffic.incoming.dstport[443]), zamiana (zgrubna, bo kilo to 1000, nie 1024) K, M i G na cyfry i wyłuskanie w awk drugiej kolumny, czyli ilości bajtów. Widoczny podwojony $ – bez tego zabbix_agent potraktuje $2 jako drugi parametr przekazany z serwera.

I to by było tyle w temacie. Oczywiście można w prosty sposób rozbudować. Gdyby były jakieś błędy/uwagi/sugestie to walcie śmiało – pisałem na sucho, ja tego typu dane biorę z flowów…

Narzekanie na laptopy Della

Mógłbym napisać, że narzekam po prostu na mojego laptopa, czy tam model, ale będzie ciut szerzej. Kiedyś napisałem recenzję Della Vostro 1440. Od tego czasu minęło półtora roku. Ostatnio bateria zaczęła gwałtownie tracić pojemność. Czas pracy na baterii spadł ze wspomnianych ~3h do 1h, a ostatnio do 30 minut. Niby akumulatory li-ion nie mają efektu pamięci, ale raz testowo rozładowałem do zera i… po naładowaniu było kilka minut więcej. Bateria niezbyt szanowana (co widać w komentarzach wcześniejszych wpisów), ale u młodej w laptopie o rok starszym FS Esprimo nadal jest 2h czy nawet więcej. Coś szybko zeszła.

Dziś zrobiłem kolejną próbę „reanimacji”, czyli pełnego rozładowania i skończyło się tak, że baterii w ogóle nie ładuje. Niby li-ion nie powinno się do zera rozładowywać, ale c’mon… W każdym razie dowiedziałem się ciekawych rzeczy o ogniwach w bateriach do laptopów, możliwości ich wymiany, koszcie tej operacji (markowe ogniwa do DIY w Polsce to ok. 70 zł z wysyłką) i ogólnie rynku nieoryginalnych baterii. Brr.

Przy okazji zerknąłem na stronę Della, czy nie ma nowszego BIOSu. Owszem, jest A03. U mnie jest A01. I ciekawostka: na stronie z BIOSem nie ma wersji do upgrade’u spod Linuksa. Dla sprzętu, który jest sprzedawany z samym Linuksem. Brawo. Live CD od producenta z Free DOS OSLT też nie ma.

Ponieważ zepsułem baterię, to ogólnie miałem wenę do psucia. Poszukałem możliwości upgrade’u bez Windows. Z poziomu BIOSu się nie da. Dobrzy ludzie podpowiedzieli Hirens Boot CD. Niestety, nie mam wolnego USB pod ręką. W końcu trafiłem na stronę opisującą flashowanie BIOS dla Delli spod Linuksa. Tamże dowiedziałem się, że Dell porzucił support dla Linuksa (przynajmniej, jeśli chodzi o BIOS).

Najpierw wypróbowałem metodę Updating the BIOS without without using biosdisk. Niestety, w momencie uruchamiania pliku wykonywanego w dosemu otrzymywałem komunikat o błędzie. Następnie spróbowałem Upgrading the BIOS using Dell’s „biosdisk” and „syslinux memdisk”. Wszystko dobrze, udało mi się włączyć DOSa. Po uruchomieniu V1440A03.EXE i pytaniu, czy flashować (sure!) zwis. Zero informacji na ekranie i zero zmian przez kilka minut. Ctrl-c nie działa. Niezbyt pewnie robię ctrl-alt-del… Wstał. Ze starym BIOSem.

Jak dorzucę do tego wszystkiego rzeźbę z touchpadem w innym modelu Della (Vostro 3360), to jestem praktycznie pewien, że następny laptop jaki kupię pod Linuksa, nie będzie miał znaczka Dell.

UPDATE: Tak gwoli ścisłości, z upower –dump:

vendor: Samsung SDI
model: DELL JXFRP21