Symptoms (may be little different):
gem install mysql
Building native extensions. This could take a while...
ERROR: Error installing mysql:
ERROR: Failed to build gem native extension.
Być może korzystając z mojego skryptu rsget-mod lub w innej sytuacji, potrzebowaliście połączyć się z jakimś zewnętrznym urządzeniem w celu - ja wiem? - restartu routera, zmiany konfiguracji itp. Najczęściej - bo najprościej - używa się do takiego celu telnetu, ponieważ to najbanalniejszy protokół i twórcom sprzętu prościej go implementować niż takie SSH. Pojawia się jednak problem - jak z poziomu skryptu połączyć się z urządzeniem?
Pierwsza rzecz, która przyszła mi do głowy to skierowanie strumienia STDIN do programu klienckiego telnet. Niestety, klasyczne przekazanie strumienia nie działa w tym przypadku (trudne, żeby działało). Potem pomyślałem o netcacie - 'szwajcarskim scyzoryku do TCP/IP'. Niestety, on też nie chciał działać jak trzeba. Męczyłem się, kombinowałem, w końcu jednak Michał Górny przypadkowo naprowadził mnie na dobrą drogę. Przypomniałem sobie jak w zenity rozwiązany jest progressbar i mnie olśniło. Trochę kombinowania i mam rozwiązanie.
Na początku należy samodzielnie połączyć się z panelem, żeby zobaczyć jak wygląda proces autoryzacji. W moim przypadku trzeba połączyć się z ip 192.168.2.1 wpisać login (root) i hasło, a następnie wydać polecenie (u mnie: reboot, potem y). Gdy już wiemy jak to wygląda, konstruujemy banalny skrypcik:
( echo "open 192.168.2.1"; sleep 0.5; echo "root"; sleep 0.5; echo "haslo"; sleep 0.5; echo "reboot"; sleep 0.2; echo "y"; ) | telnet
Jak to działa? Uruchamia telnet i po kolei wpisuje mu w ten sam sposób jak wpisywałaby to osoba z klawiatury kolejne polecenia - połączenie z serwerem, następnie wszystko to co powinno pójść do serwera. Zwróćcie uwagę na te wszystkie polecenia sleep - mają one na celu przytrzymania skryptu na czas łączenia się oraz reakcji sprzętu na wpisywane polecenia. Bez nich wszystko wysłałoby się wszystko równocześnie i zostałoby zagubione w trakcie.
Jak widać, napisanie takiego skryptu jest wbrew pozorom banalne. Mam nadzieję, że przyda się ono osobom korzystającym z mojego skryptu oraz tym, które potrzebują takiego rozwiązania u siebie. Happy hacking ;)
Napisałem prościutki (dosłownie kilkulinijkowy) skrypt, który do Joggerowego Dashboarda generuje po prawej stronie na górze 'okienko' do dodawania osób do listy śledzonych przez bota.
Obudziłem się dzisiaj rano i wiedziałem momentalnie co chcę zrobić - uruchomiłem komputer i zacząłem pisać skrypt, który już od dawna siedział mi po głowie. Efekty mojej pracy przerwane jedynie wielkanocnym śniadaniem można ujrzeć poniżej:
Wpis został napisany z myślą o systemie Archlinux oraz komórce firmy Nokia. Mimo to warto sprawdzić czy działa na innych konfiguracjach.
Do napisania tej notki zainspirował mnie wyjazd na "wieś" do ojca. Rodzic mój mieszka bowiem w bardzo małej mieścinie / wiosce (kilka domów na krzyż, dookoła las) gdzie dostęp do internetu jest bardzo ograniczony. Żaden poważny provider nie chce bowiem pociągnąć kabli przez co tata zmuszony jest do korzystania z bezprzewodowego modemu EDGE/3G (jak łatwo się domyślić raczej to pierwsze niż drugie). Konfiguracja tego modemu zarównno pod systemem MS Windows jak i Linuksem jest cholernie upierdliwa, więc postanowiłem skorzystać z faktu posiadania komórki w Plusie z pakietami internetowymi.
Jeśli posiadasz komórkę w Plus GSM i jest to Mix lub Simplus (oferta na abonament nie posiada pakietów Internet - niestety) (no, trochę nie miałem racji - pakiety też są i ponoć fajne - przepraszam) to zapewne wiesz, że istnieją pakiety z dodatkowymi usługami. Najpopularniejszy jest na pewno SMS za 1 grosz czyli pakiet 500 SMS za 5 PLN. Są też dwa pakiety - 20 i 50 MB dla starej oferty (MixPlus III) i 25 i 60 MB dla nowej (MixPlus IV). Osobiście uważam nową ofertę za megafail, ponieważ ma ona naliczanie co 100 KB zamiast co 1 bajt tak jak moja (III). Mimo to pakiety są i można z nich korzystać.
Na początku sprawdź, czy ustawienia komórki są poprawne. Tak, dobrze słyszałeś - sprawdź najpierw telefon. Ściągnij ustawienia ze strony Plusa, poustawiaj co trzeba w menu, upewnij się, czy konta danych są ustawione na Internet, a nie na WAP i tak dalej. Gdy sprawdzisz, że wszystko działa, a korzystanie z przeglądarki w komie zmniejsza ilość pozostałą na pakiecie, dopiero przejdź dalej. Znam sytuacje gdy komuś zjadło całą kasę z konta (25 zł) tylko dlatego, że po wgraniu ustawień nie włączył on w konfiguracji korzystania z Internet zamiast WAP. Nie popełnij tego błędu!
Dobrze, mamy gotową komórkę. Ponieważ posiadam Nokię, opis będzie dotyczył jej, twój model telefonu może mieć np inny wpis z /dev. Jeśli chcesz korzystać z Bluetooth to musisz się pobawić samodzielnie, bo nie mam pojęcia jak to zrobić - coś z /dev/rfcomm0, nie znam szczegółów. Opieram sie o swoje doświadczenia z kablem DKU-2. Powinno działać z innymi, może też zadziałać z innymi modelami telefonów.
Zainstaluj paczki: ppp, wvdial. Dopisz do listy ładowanych przez kernel modułów ppp_generic - bez tego wvdial się wykrzaczy. Teraz zapuść wvdialconf. Powinien wygenerować podstawowy plik konfiguracyjny. Zmodyfikuj go dodając pokolorowane linie (reszta to mój plik konfiguracyjny - jeśli coś nie będzie działać, skopiuj całość na chama i podmieniaj kolejne linijki z twoim gotowcem aż zaskoczy):
[Dialer Defaults]
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
; to może nie być konieczne, muszę sprawdzić
Init3 = AT+CGDCONT=1,"IP","www.plusgsm.pl"
Modem Type = USB Modem
ISDN = 0
Phone = *99#
Modem = /dev/ttyACM0
Baud = 460800
Username = ''
Password = ''
Auto DNS = on
Stupid Mode = on
Niektóre kursy zamiast *99# każą podać numer telefonu w stylu *99***1#. U mnie to nie zadziałało (a zajęło mi dużo czasu szukanie dlaczego), więc pewnie Tobie nie będzie potrzebne (to do wielu punktów dostępu).
Jesteśmy prawie na końcu drogi. Teraz edytuj /etc/resolv.conf i dopisz te dwie linijki:
nameserver 212.2.96.51
nameserver 212.2.96.52
OK, po wpianiu wvdial Internet powinen zaskoczyć. Puść ping google.pl, sprawdź czy strony się ładują itd. Jeśli możesz dostać się do nich po IP, a nie po nazwie domeny, zapomniałeś edytować resolv.conf albo masz upierdliwego dhcpd. Ja go przystopowałem za pomocą chattr +i /etc/resolv.conf, ale na pewno da się to załatwić bardziej elegancko. Jeśli net w ogóle się nie ładuje, upewnij się czy załadowałeś moduł ppp_generic, czy konfiguracja wvdial jest poprawna itd. Gdy wszystko zostało wykonane, a internet nadal nie chce wstać to ci nie pomogę. Google, google, google.
Korzystanie z internetu na laptopie jest drogie. Radzę wyłączyć automatyczne pobieranie obrazków i zainstalować w Firefoksie wtyczki typu NoScript lub Flashblock. Jabber nie powinen kosztować aż tak wiele, ale mimo to radzę się pilnować. Napisałem bardzo prosty skrypt w Bashu, który pomaga "liczyć kilobajty":
#!/bin/bash while true; do echo -ne "\r $(ifconfig ppp0 | awk '/RX bytes/ { print $3$4" "$7$8 }') "; sleep 1; done
Wpis został popełniony na Asusie Eee PC w autobusie PKS Bydgoszcz podczas jazdy z Torunia do Bydgoszczy.