Własna namiastka dyndns

Po ostatniej akcji Microsoftu z przejęciem i zablokowaniem domen należących do No-IP miałem przez moment umiarkowany problem z dostępem do jednej z moich maszyn, bo nie znałem IP. Nic krytycznego i szybko rozwiązałem, ale stwierdziłem, że warto by się zabezpieczyć na przyszłość. Początkowo chciałem uruchomić po prostu innego dostawcę dyndns, z inną domeną, co dałoby całkiem niezłą – jak mi się wydaje – redundancję w tym względzie, ale prowizorycznie uruchomiłem coś innego, własnego i znacznie prostszego. W komentarzu do poprzedniego wpisu padło pytanie co dokładnie zrobiłem, więc opisuję.

Tak się składa, że mam serwer dedykowany ze stałym IP (nie jest konieczne zamiast tego można skorzystać z domeny), na którym stoi serwer WWW (lighttpd). Na wszystkich maszynkach potrzebujących dyndns mam dostęp do crona (zresztą, korzystałem z crona już przy zwykłym koncie dyndns, patrz update wpisu). Rozwiązanie jest proste: klient wywołuje okresowo unikatowy URL na moim serwerze, serwer okresowo parsuje log w poszukiwaniu tego unikatowego ciągu znaków i zapisuje IP z którego nastąpiło odwołanie w określonym pliku.

Poniżej wklejki ze wszystkimi onelinerami (gotowiec dla lighttpd, w przypadku innego serwera WWW trzeba dostosować):

# po stronie klienta*/5 * * * * /usr/bin/wget -4 -q -O /dev/null http://mojadomena.com/losowyciagznakow4346456543324645 > /dev/null
 # po stronie serwera*/5 * * * * /usr/bin/awk '/losowyciagznakow4346456543324645/ {ip=$1} END {print ip}' /var/log/lighttpd/access.log > /var/www/dyndns_host1.txt
 # pobranie IPwget -O - http://mojadomena.com/dyndns_host1.txt

Po namyśle, rozwiązanie nawet lepsze niż drugi dostawca dyndns. Mniej kont, prostsza konfiguracja, mając stałe IP na upartego można całkowicie uniezależnić się od DNSów, jeśli ktoś odczuwa potrzebę.

Oczywiście nie od razu tak to wyglądało, w szczególności po stronie serwera był grep, awk, tail w użyciu. Ale skoro da się wszystko załatwić awk (a nie tylko wyświetlanie określonej kolumny, chyba najczęstsze zastosowanie awk…), to czemu nie? Tu polecam zbiór przydatnych onelinerów w awk.

UPDATE: IPv6 się popularyzuje. Okazało się, że mój skrypt nie działa poprawnie, bo łączenie między maszynami następuje po IPv6. Dodany parametr -4 do wget w celu naprawy tego problemu.

Piwik, czyli fajne darmowe statystyki na stronę

O statystykach dla stron Piwik usłyszałem dawno temu. Idea wolnego odpowiednika Google Analytics[1] bardzo mi się spodobała, ale do instalacji nie doszło. Powód prozaiczny – nie miałem maszyny 24/7 działającej na sensownym łączu i posiadającą sensowną moc obliczeniową. Sensowną, tj. taką, żeby instalacja MySQL nie wydawała mi się zabójstwem na maszyny. Niedawno o statystykach przypomniał mi wpis ryśka, a obecne na blogu statystyki stat4u są coraz bardziej niewystarczające, głównie ze względu na brak aktualizacji od dłuższego czasu (ostatnia zmiana kilkadziesiąt miesięcy temu). Szczególnie, że chciałem się pobawić w referral fun.

Postanowiłem zaryzykować i zainstalować Piwika na Dockstarze. Co prawda miałem wrażenie, że 128 MB RAM i dysk 2,5″ 5400 RPM, na dodatek w kieszeni USB to nie jest to, co MySQL lubi najbardziej, ale spróbować można. Instalacja Piwika na lighttpd jest prosta i nie ma czego tak naprawdę opisywać. Ku mojemu zdziwieniu MySQL zajął tylko ok. 10% pamięci, a statystyki się zbierały.

Niestety, kliknięcie czegokolwiek w dashboardzie było męczarnią – skrypty PHP na serwerze mieliył po procku (niby 1,2 GHz, ale ARM, poza tym jakieś drobiazgi do łapania spamerów na Blox tam działają) nieprzyzwoicie intensywnie i nieprzyzwoicie długo. Znaczy dziesiątki sekund. Ale to co zobaczyłem było bardzo obiecujące, więc wrzuciłem Piwika na tymczasowego VPSa, który zasadniczo się nudzi (hell yeah, spojrzałem i prawie drugi rok mija darmowego testu, ale to offtopic, więc spuśćmy zasłonę miłosierdzia).

Po prostu rewelacja. Piwik pokazuje wiele rzeczy, których w stat4u nie ma (o statystykach wbudowanych w Blox nie wspominam, bo trudno to nazwać statystyką). Skąd ktoś przyszedł, gdzie poszedł, ile czasu spędził na stronie, rozbicia na systemy operacyjne, wykorzystywane pluginy, aktywność, powracający użytkownicy. I do tego wszystko estetycznie podane. Niby nic kluczowego się nie dowiedziałem, ale zdecydowanie bardziej mi się to podoba. I mam nad wszystkim kontrolę. Próbka jest mała, ale już mogę stwierdzić, że stat4u ma parę błędów (pewnie skutek braku aktualizacji).

Z drobnych poprawek, które warto wykonać: mimo, że to nie high traffic site, warto doinstalować APC, jest szybciej. Być może spróbuję wrócić na Dockstara z doinstalowanym APC, ale może nic z tego nie wyjść – może PHP wisiał na zapytaniach do baz – mało czasu miałem, nie wnikałem. Poza tym, wolałbym to jednak mieć na czymś porządniejszym, niż ADSL.

W każdym razie, w ramach popularyzacji tego oprogramowania, jeśli ktoś chciałby zobaczyć jak Piwik wygląda na jego własnych realnych danych, a nie ma warunków/ochoty na stawianie go samodzielnie, to może podpiąć na swojej stronie na dłuższą chwilę[2] u mnie (free, no strings attached). Chętnych zapraszam do kontaktu mailowego. Warunki są trzy. Pierwszy: nie więcej niż powiedzmy 10k UU miesięcznie (nie apteka) ze względu na wydajność maszyny. Drugi: best effort, czyli nie gwarantuję działania systemu, mogą być przerwy, nie gwarantuję przywrócenia z backupu itp. Oczywiście można dawać znać jak coś nie będzie działać i postaram się poprawić (bo mam tam własne niekrytyczne zabawki), ale wiecie jak jest. Na ten moment uptime system to 4 m-ce. Trzeci: zastrzegam sobie prawo do absolutnie subiektywnego wyboru chętnych (zwł. znajomi (jeśli się pojawią – nie jest to warunek konieczny) mają pierwszeństwo, podobnie jak nietechniczni/nieadmini – zakładam, że techniczni jakby chcieli, to by sami sobie postawili), wyłączenia usługi w dowolnym momencie wybranym serwisom itp. Jasne, postaram się uprzedzić wcześniej. Jeśli są jakieś wątpliwości co do warunków/coś pominąłem – proszę o pytania w komentarzach.

[1] Google Analytics odpada. I tak za dużo wiedzą, więc staram się unikać produktów ze stajni Google.

[2] VPS będzie działał jeszcze jakiś miesiąc. Potem, jeśli wszystko pójdzie dobrze, planuję przeniesienie się (z gratami) na jakieś 3 m-ce na testowego dedyka, a potem… Albo będzie działać na Dockstarze, albo przedłużę dedyka, albo zawinę zabawki.

Smssender 0.8.

Nowa wersja skryptu do wysyłki SMSów z poziomu konsoli dla Linuksa. Dodana obsługa długich SMSów dla Mobitex (nie testowałem, ale wg forka z GitHub i dokumentacji wystarczyło zmienić typ, by dzieliło na kilka części) i – przede wszystkim – podstawowa obsługa kolejnego providera, czyli REDLINK. Okazuje się, że choć niezbyt się tym chwalą, to wspierają wysyłkę w podobny sposób jak Mobitex, czyli wywołanie URLa z parametrami.

Trochę obsługa na zasadzie if-ujmy co wymagane i niezbyt mi się to podoba, ale dla tak podstawowej obsługi wystarczy, a w sumie dość zbieżnie jest. Nie ma pełnej obsługi błędów, tak naprawdę w przypadku REDLINK ludzki komunikat zwracany jest tylko dla statusu OK, w pozostałych przypadkach na żywca leci odpowiedź od providera (też czytelna, na szczęście).

REDLINK ma parę fajnych funkcji, których na razie nie obsługuję – planowanie czasu wysyłki SMSa, email na który przychodzi finalny status dostarczenia. Bo to, co otrzymujemy przy wysyłce to tylko potwierdzenie poprawnego skolejkowania do wysyłki, nie oznacza wcale, że SMSa faktycznie udało się dostarczyć do odbiorcy (tak, zdarzyło mi się tak raz dla dość ważnego SMSa).

Zapraszam do testów i jak zwykle feedback mile widziany.