niedziela, 1 kwietnia 2012

Linux na routerze tplink, czyli OpenWRT rocks

No i stało się straciłem cierpliwość do wifi na routerze tplink WR740N.

Router dostałem od dostawcy internetu za zeta, więc pomyślałem czemu nie, zawsze jakaś stówa w kieszeni zostaje (najprawdopodobniej kupiłbym dlinka z neo24).

Skonfigurowałem sobie na tplinku sieć bezprzewodową szyfrowaną WPA2, na komputerze przypisałem na sztywno adresację IP, bramę domyślną oraz serwery DNS.

Zaczynam surfowanie, pobieranie kilku plików, oglądanie filmów na youtube i po chwili zrywa mi połączenie.

Daję więc połącz ponownie i paczę a tu komunikat "błędne hasło", no to ja na to hello przecież hasło się nie zmieniło.

Kombinuję jak tylko się da, włączam wyłączam kartę wifi w notebooku, restartuję routera i nic.
Po około 20 minutach udaje mi się połączyć.

Stwierdzam, że tak być nie może, modyfikuję konfigurację tplinka, wybieram inny kanał, ustawiam żeby działał w standardzie n (wcześniej miał mieszany) i znowu zrywa połączenie.

Przy próbie ponownego połączenia pokazuje błędne hasło.

Wchodzę na stronę producenta, znajduję aktualizację, wprowadzam ją w życie i dalej to samo ...
tracę połączenie i nie mogę się połączyć ponownie.

W końcu stwierdziłem, że albo go skonfiguruję tak, żeby działał prawidłowo albo go jakoś efektownie o coś roztrzaskam.

Okazało się, że OpenWrt jest kompatybilne z moim routerem, pobrałem więc paczkę ze strony (openwrt-ar71xx-generic-tl-wr740n-v4-squashfs-factory.bin).

Wybrałem v4 bo taki symbol ma etykieta na routerze.

Zalogowałem się na router przez przeglądarkę i zapodałem aktualizację ze wskazaniem pliku bin z instalką openWRT.

Po instalacji telnetem połączyłem się z routerem "telnet 192.168.1.1".
Ustawiłem hasło dla routera przez wpisanie polecenia passwd.

Sprawdziłem czy mam połączenie z siecią i wp odpowiedziała na pinga.

Zdecydowałem się skonfigurować wifi w trybie graficznym więc:
- zalogowałem się na router przez ssh "ssh root@192.168.1.1 -p 22",
- zainstalowałem środowisko graficzne do konfiguracji routera "opkg update", "opkg install luci",
- włączyłem automatyczne włączanie środowiska graficznego przy starcie routera "/etc/init.d/uhttpd enable",
- włączyłem środowisko graficzne "/etc/init.d/uhttpd start",
- po zalogowaniu się przez przeglądarkę na router, konfiguracja wifi zajęła mi kilka minut.

Podczas pisania tego posta zerwało mi połączenie z routerem tylko raz, ale gdy kliknąłem połącz ponownie od razu udało się nawiązać połączenie.

Wychodzi na to, że darmowe oprogramowanie OpenWRT jest lepsze nić oprogramowanie udostępniane przez firmę tplink.

Kilka rad dla osób zastanawiających się czy przeprowadzić aktualizację oprogramowania na swoim routerze:
- aktualizuj tylko wtedy gdy nie działa, działa słabo lub nie ma jakiejś funkcjonalności,
- licz się z tym, że router po aktualizacji może nie wstać i reanimacja się nie powiedzie,
- ściągnij sobie wcześniej manuale z netu dotyczące aktualizacji, konfiguracji i reanimacji routera z nowym oprogramowaniem zanim zrobisz cokolwiek - gdy net nie będzie działał już raczej tego nie zrobisz,
- jeśli to możliwe zrób backup oryginalnego systemu,
- uzyskaj akceptację i zrozumienie drugiej połówki, w przeciwnym wypadku możecie usłyszeć "Ty i ten Twój cały Linux :P", po czym mogą nastąpić nieprzewidziane zdarzenia ...


Podsumowując, OpenWRT gorąco polecam.
To pisałem ja ... Jarząbek.

czwartek, 24 listopada 2011

Jak naprawić kodowanie w bazie danych, Linux

Jeżeli przenosiliście serwisy internetowe pomiędzy różnymi serwerami na pewno napotkaliście problemy związane z nieprawidłowym kodowaniem w bazach danych.

Jedną z metod rozwiązania tego problemu jest wykorzystanie programu iconv:
http://linux.die.net/man/1/iconv

Niestety nie zawsze działa to poprawnie.

Miałem jakiś czas temu sytuację w której klient miał znaki hiszpańskie w tekście (nie wiedziałem nawet jaką kombinację klawiszy należy użyć żeby wstawić n z kreską u góry), a kodowanie trzeba było poprawić.

Pierwszy wybór padł na sed, niestety sed'owi chyba nie odpowiadały znaki hiszpański i postanowił ich po prostu nie konwertować.

Z iconovem nie chciałem nawet próbować, ponieważ nie mam pojęcia z jakiego kodowania na jakie miałbym to zmieniać.


Postanowiłem zrobić więc pełen zrzut bazy danych do pliku (baza MySQL).
Kolejnym krokiem było wykorzystanie opcji zamieniania wybranych fragmentów tekstu z poziomu edytora vim np:
:%s/obecne_krzaki/krzaki_docelowe/g

Po wprowadzeniu tego polecenia wszystkie "obecne_krzaki" zmieniły się w "krzaki_docelowe".

Pozostało już tylko zaimportować bazę danych i odpisać na zgłoszenie ... i mieć nadzieję, że klient nie zadzwoni/odpisze.

Na szczęście nie było kolejnego kontaktu ze strony klienta, więc założyliśmy że wszystko przebiegło pomyślnie.

Gdy kiedyś zawiodą Was wszystkie dostępne metody naprawy kodowania w bazie danych, jako ostatnią deskę ratunku można właśnie stosować polecenie %s/.../.../g w vim'ie.

Jak sprawdzić kodowanie plików w Linux'ie

Nie wiem czy zdarzyło się mieć problemy z wyświetlaniem stron lub plików tekstowych, czyli pojawianie tzw. "krzaków".

Pierwszą czynnością która w takiej sytuacji należy sprawdzić jest to z jakim kodowaniem wybrany plik został stworzony.

Jeżeli korzystamy z Linux'a wy starczy jedno polecenie:
file -i index.html

index.html: text/html; charset=iso-8859-1

wtorek, 6 września 2011

backup automatyczny za pomocą lftp, instalacja lftp, konfiguracj ssl, skrypt do automatycznego backupu

Od jakiegoś czasu chciałem stworzyć jakiś skrypt, który umożliwia tworzenie automatycznego backupu za pomocą ftp.
Gdy zacząłem się nad tym zastanawiać to stwierdziłem jednak, że ftp nie jest bezpieczne i trzeba korzystać z sftp.

Traf chciał że bawiłem się już kiedyś lftp więc wybór klienta padł właśnie na ten program.

Pomyślałem, że w Debianie nie powinno być żadnych problemów z instalacją lftp:
- apt-get install lftp

Wszystko fajnie, ale po instalacji nie chciał mi się łączyć przez sftp, więc zaczynam drążyć:
- sprawdzam gdzie siedzi lftp "which lftp",
- sprawdzam biblioteki " ldd /usr/local/bin/lftp | grep ssl"
- wszystko fajnie, niestety zainstalował się bez obsługi ssl.

Instalacja ssl przebiegła bez żadnych komplikacji "apt-get install libssl-dev".
Usunąłem lftp "apt-get remove lftp" i zainstalowałem ponownie "apt-get install libssl".
Niestety "ldd /usr/local/bin/lftp | grep ssl" dalej bez wsparcia dla ssl.

Nie pozostało mi więc nic innego jak odinstalować lftp i kompilować.

Zaczęło się od pobrania archiwum ze strony:
ftp://ftp.st.ryukoku.ac.jp/pub/network/ftp/lftp/

Po rozpakowaniu, zapodaniu chmod u+x -R katalog, próba uruchomienia "./configure --with-openssl=/usr/lib" i zaczęły pojawiać się niespełnione zależności.

Więc kolejno instalowałem (być może trochę za dużo tego zainstalowałem ale ... w ostatecznym rozrachunku zadziałało):
- apt-get install gobjc++-4.4
- apt-get instal gawk
- apt-get install g++
- apt-get install libreadline-dev
- apt-get install make

Po instalacji powyższych zapodałem "make && make install".
Myślałem że zacznie działać ale przy wpisaniu polecenia lftp pojawiał się komunikat nie ma takiego pliku ani katalogu.
Pozostało ułatwić sobie życie zamiast wpisywać ścieżkę do programu za każdym razem "alias lftp="/usr/local/bin/lftp"" .

Przyszedł czas na testy więc stworzyłem plik skrypt.sh z następującą zawartością:
#!/bin/bash
lftp -u login,hasło sftp://adres_serwera.pl -p numer_portu

Po odpaleniu skryptu "./skrypt.sh" zostałem automatycznie zalogowany.



Stwierdziłem, że wpisywanie dla każdego pliku put nie ma większego sensu więc, chciałem żeby skrypt działał tak jak rsync - sprawdza czy na serwerze docelowym brakuje plików/katalogów i w razie potrzeby kopiuje na serwer tylko te brakujące.

Z pomocą przyszło polecenie mirror:
Mirror wskazanego zdalnego katalogu do lokalnego katalogu

-c, --continue kontynuuj pracę mirrora o ile to możliwe
-e, --delete skasuj pliki nie występujące w zdalnym serwisie
--delete-first skasuj stare pliki przed ściągnięciem nowych
-s, --allow-suid ustaw bity suid/sgid zgodnie ze zdalnymi
--allow-chown próbuj ustawiać właściciela i grupę na plikach
--ignore-time ignoruj czas przy decydowaniu czy ściągać
-n, --only-newer pozyskuj tylko nowsze pliki (-c nie działa)
-r, --no-recursion nie wchodź do podkatalogów
-p, --no-perms nie ustawiaj praw dostępu do plików
--no-umask nie używaj umaski dla praw plików
-R, --reverse przeciwny mirror (umieszczaj pliki)
-L, --dereference pozyskuj dowiązania symboliczne jako pliki
-N, --newer-than PLIK pozyskuj pliki tylko nowsze niż PLIK
-P, --parallel[=N] pozyskuj N plików równolegle
-i RX, --include RX dołącz pasujące pliki
-x RX, --exclude RX wyłącz pasujące pliki
RX jest rozszerzonym wyrażeniem regularnym
-v, --verbose[=N] dodatkowe komunikaty
--log=PLIK zapisz wykonywane polecenia lftp do PLIK
--script=PLIK zapisz polecenia lftp do PLIK ale nie wykonuj ich
--just-print to samo co --script=-
--dry-run to samo co --script=-

Chciałem, żeby pliki z katalogu lokalnego zostały wgrane na serwer, ale tylko te, których brakuje.
Wystarczyło wpisać "mirror -R katalog_lokalny katalog_zdalny" .

W ten sposób wszystkie pliki i katalogi znajdujące się na domowym komputerze i których brakowało na serwerze zostały przesłane na serwer.

No dobrze ale jak wkomponować polecenie mirror aby było uruchamiane bez ingerencji człowieka automatycznie:
lftp -u login,hasło sftp://adres_serwera.pl -p numer_portu -e "mirror -R katalog_lokalny katalog_zdalny"

Efektem wykonania powyższego polecenia było:

./skrypt.sh
Sumując: 3 katalogi, 3 pliki, 0 dowiązań symbolicznych.
Nowych: 1 plik, 0 dowiązań symbolicznych.

Plik oraz katalog, które znajdowały się tylko na lokalnym komputerze zostały wgrane na serwer.

Pozostało jeszcze zakończyć połączenie po przesłaniu plików dodałem więc:
lftp -u login,hasło sftp://adres_serwera.pl -p numer_portu -e "mirror -R katalog_lokalny katalog_zdalny" -e "exit" .


Może się Wam wydawać, że wówczas zostaną zerwane połączenia ale tak nie będzie:
"exit will exit from lftp or move to background if there are active
jobs. If no job is active, code is passed to operating system as lftp's
termination status. If code is omitted, the exit code of last command
is used.
"


Wystarczy w ten sposób przygotować skrypt, dodać jego wykonywanie do harmonogramu zadań cron i można spać spokojnie.


P.S.

Jeżeli komuś się przydadzą powyższe informacje i zacznie z ich pomocą tworzyć automatyczne backupy ... to liczę przynajmniej na browara :).

poniedziałek, 20 czerwca 2011

ssh-add Could not open a connection to your authentication agent

Chciałem sobie popracować jeszcze z domu, wiec kopiuje klucz ssh, i chce odpalić agenta ssh żeby logować się bez podawania haseł a tu error "ssh-add Could not open a connection to your authentication agent.".

Pamiętałem jednak, że gdy wcześniej konfigurowałem to wszystko na debianie to było jeszcze jakieś dodatkowe polecenie mówiące o tym z jakiej powłoki ma korzystać agent.

Więc żeby wszystko było ok kolejno wpisujemy:
ssh-agent bash
ssh-add


W ten sposób rozwiązałem problem z "ssh-agent bash" w sumie proste i banalne.

Może jeszcze dodam że debian ma coś takiego jak root terminal, niestety ubuntu i centos tego nie posiadają więc za każdym razem trzeba by było kombinować.
Udało mi się jednak uruchomić terminal roota i go powielać za pomocą ctrl + shift + t gdy:
- wcześniej wpisałem w centosie su, zalogowałem się na root'a i zapodałem gnome-terminal & ,
- na ubuntu ta opcja nie działała trzeba zamiast zalogowania się na roota zapodać sudo gnome-terminal & i zatrybiło.

W ten prosty sposób mogłem otwierać dowolną ilość kart w terminalu których właścicielem był root.

czwartek, 12 maja 2011

wyswig i drupal

Termin wyswig w dosłownym tłumaczeniu oznacza "What You See Is What You Get" w dosłownym tłumaczeniu oznacza, to co widzisz to dostaniesz.

W drupalu nie ma wbudowanego edytora wyswig można go sobie ręcznie doinstalować.
(jeżeli robicie komuś stronę i tego nie zainstalujecie możecie spodziewać się wielu kontaktów w tej sprawie także miejcie się na baczności).


W celu uruchomienia wyswig na stronie z drupalem najlpierw należy pobrać moduł Wyswig ze strony domowej projektu.
Gdy już pobierzecie Wyswig, umieścicie w odpowiednim katalogu na serwerze, aktywujecie za pomocą zakładki administer ... wyswig nie będzie jeszcze działał.

Niezbędne jest wybranie modułu, który oferuje funkcjonalność wyswiga, jest ich zatrzęsienie.
Ja wybrałem OpenWYSIWYG, ponieważ:
- spotkałem sporo pozytywnych opinii w internecie,
- coś co ma w nazwie open nie może być złe (np. OpenSource, OpenBSD),
- oferował wszystkie funkcjonalności, które były mi do życia potrzebne.

Instalacja OpenWYSIWYG przebiegała tak jak zwykle, wgranie na serwer i aktywowanie z poziomu administratora drupala.

Przeprowadzę jeszcze testy tego wyswiga, jeżeli coś w nim banglać nie będzie na pewno to opiszę.

aktualizacja drupala

Drupal ma to do siebie, że nie aktualizuje się automagicznie, wymaga wykonania sporej ilości czynności, żeby wszystko przebiegło sprawnie.

Kilka zasad aktualizacji drupala:
- zrób pełną kopię bezpieczeństwa strony (pliki, baza danych),
- aktualizuj po jednym module,
- gdy zaczniesz aktualizacje nie przestawaj, dopóki wszystkie moduły będą w najnowszej dostępnej wersji (ja spróbowałem zaktualizować większość, niestety CMS nie działał wówczas poprawnie, zawsze pojawiały się jakieś errory).

Backup plików jest prosty, wystarczy zalogować się za pomocą klienta FTP, lub SSH i skopiować cały katalog.

Backup bazy danych należy zrobić za pomocą polecenia:
mysqldump --opt --default-character-set=latin2 -h adres_serwera_mysql -u nazwa_użytkownika_bazy_danych -p nazwa_bazy_danych > /home/$login/zrzut_bazy.sql

Przełącznik -p jest niezbędny żeby można było wpisać hasło do bazy - inaczej się nie połączymy.

Oczywiście kodowanie nie koniecznie musi być ustawione na latin2 - trzeba zrobić przykładowy zrzut i sprawdzić czy się krzaki nie wyświetlają.


Po zrobieniu pełnego backupu, zalogowaniu się na stronie, przejściu na Administer >> Sekcja Reports >> Available updates pojawią się wszystkie informacje dotyczące dostępnych aktualizacji.

Aktualizacja polega z grubsza na pobraniu wybranego modułu, rozpakowaniu, wgraniu na serwer do lokalizacji sites/all/modules.
Wejściu ponownie na Administer > Site building > Modules. Odnalezieniu modułu, który ma zostać zaktualizowany, jego zaznaczeniu i kliknięciu na save configuration.


Jeżeli macie świadomość (tak jak ja), że wszystko może pójść nie tak jak trzeba podczas aktualizacji to będziecie robić pełen backup co aktualizację jednego modułu.
Ja zostawiłem aktualizację przez czas dłuższy i zemściło się to na mnie tym, że musiałem na to poświęcić cały wieczór.

Więc jak nie chcecie żeby ktoś się włamał Wam na stronę, lub ślęczeć nad aktualizacją kilka godzin róbcie to regularnie.