niedziela, 30 grudnia 2012

Kopiowanie plików pod Linuksem

Dzisiaj krótko, ale treściwie: użyj rsync!

Zalety:

  • możliwość wznowienia
  • możliwość prostej kompresji strumienia
  • możliwość wykorzystania dowolnego protokołu
  • powszechna dostępność pod Linuksem
  • brak wad
A oto działający przykład, którego zadaniem jest skopiować pliki przez ssh ze zdalnego serwera: rsync -arvz -e ssh user@some-host:~/remote-direcotory ~/local-directory

sobota, 29 grudnia 2012

Backup i przywracanie systemu Linux

Czasem (zawsze, ale często dowiadujemy się o tym za późno ;) ) zdarza się, że potrzebujemy wykonać backup systemu. W Linuksach sprawa wygląda bardzo prosto - wszystko dzięki otwartości systemu. Dzięki takiemu backupowi możemy przywrócić bądź przenieść działający system wraz z konfiguracją zawsze gdy wystąpi taka potrzeba, a plik z archiwum będzie zajmował niewiele miejsca na dysku. Ale do rzeczy.

Chcąc zarchiwizować system (bez katalogów użytkownika), z roota wykonujemy następujące polecenie: tar cvpjf backup.tar.bz2 --exclude=/proc --exclude=/lost+found --exclude=/backup.tar.bz2 --exclude=/mnt --exclude=/sys --exclude=/home / Utworzony zostanie plik backup.tar.bz2, z którego możemy w każdej chwili przywrócić działający system z (np. dystrybucji live bądź płyty ratunkowej) poleceniem: tar xvpfj backup.tar.bz2 -C /
mkdir proc
mkdir lost+found
mkdir mnt
mkdir sys
mkdir home
W przypadku gdy przenosimy system na inny dysk, należy ustawić:
  • flagę bootującą na partycji boot
  • zaktualizować plik /etc/fstab
  • zaktualizować plik /etc/sysconfig/network
  • przywrócić program rozruchowy (grub)
  • oraz przekopiować katalogi użytkownika przez sieć
To ostatnie wykonałem to przy pomocy płyty instalacyjnej z opcją "Aktualizacja istniejącej instalacji". Program wykryje, że pakiety są w nowszej wersji i przetworzy jedynie dane znajdujące się w systemie w celu aktualizacji gruba.

czwartek, 29 listopada 2012

Wyłączenie sprawdzania aktualizacji w Fedora

Zdarza się, że mamy limitowany dostęp do internetu i nie koniecznie występuje potrzeba regularnego sprawdzania dostępności aktualizacji. Jako, że pliki z informacjami o podstawowych repozytoriach ważą w sumie 15MB, a domyślnie aktualizacje sprawdzane są co 2 - 3 dni, to walczymy o miesięczny transfer rzędu 200MB.
Aby wyłączyć sprawdzanie aktualizacji należy wyedytować plik: /etc/yum/pluginconf.d/refresh-packagekit.conf zmieniając: enalbled=1 na enabled=0

Uruchamiamy program: pkg-prefs i wprowadzamy stosowne poprawki.

UPDATE:
W Fedora 18 narzędzie pkg-prefs nie jest już dostępne. Skuteczną metodą rozwiązania problemu automatycznego odświeżania bazy pakietów będzie usunięcie paczki, będącej źródłem całego kłopotu:
yum remove PackageKit-yum-plugin

poniedziałek, 12 listopada 2012

ClockworkMod Tether (no root) dla Linuksa - Fedora way

Zdarza się, że zainstalujemy eksperymentalną wersję ROMu, bez działającego tetheringu, lub wersja branodwana Androida nie dostarcza takiej funkcjonalności, a nie bardzo chcemy się z nią rozstać. Cóż wówczas zrobić aby móc skorzystać z dobrodziejstwa zakupionego z telefonem pakietu internetowego?
Z pomocą przychodzi ClockworkMod Tether (no root), na który składa się część kliencka na komputer oraz aplikacja instalowana na telefonie.

Wszystko pięknie tylko na Linksa nie otrzymujemy gotowej apki, ale paczkę z kodem źródłowym. Ciśnie się wówczas na myśl znane wszystkim hasło: "Linuks - u mnie działa". No i faktycznie działa, tyle, że z małymi przeszkodami.

Kompilujemy standartowo: ./configure
make
ale w trkacie kompilacji wychodzi, że brakuje nam pliku stropts.h. Krótkie poszukiwania: yum whatprovides */stropts.h i już wiemy, że gdzieś coś takiego jest i dalej zmierzamy już prosto do działającego programu: yum install gcc-c++ arm-gp2x-linux-glibc
ln -s /usr/arm-gp2x-linux/include/stropts.h /usr/include/bits/
ln -s /usr/arm-gp2x-linux/include/stropts.h /usr/include/
ln -s /usr/arm-gp2x-linux/include/bits/xtitypes.h /usr/include/bits/


Póki co aplikacja sprawdza się znakomicie i uratuje mi studia ;).

sobota, 10 listopada 2012

Katalog tymczasowy dla Vim'a

Zdarza się, że nie chcemy przechowywać plików tymczasowych w katalogu roboczym projektu. Niewiele edytorów po za Vimem pozostawia nam inny wybór niż zupełnie z nich zrezygnować i robić kopie ręcznie... wyłączyć pliki wymiany (.swp) w Vim można poleceniem: :set noswapfile jednak po co tak robić, jeśli dopisując kilka wierszy w vimrc jesteśmy w stanie zachować "czystość" katalogu roboczego i kopie tymczasowe edytowanych plików:
"ustaw katalog swap dla plików tymczasowych
if has("win32") || has("win64")
   set directory=$TMP
else
   set directory=/tmp
end
Oczywiście katalog /tmp można wymienić na dowolny katalog, np. $HOME/.vim_tmp, itp.

czwartek, 8 listopada 2012

Tryb wsadowy MySQL

Często trzeba odpalić skrypt i czekać dłuuugie minuty, aż prompt się "namyśli" - gorzej zapuszczać co chwilę wiele interaktywnych procesów ładowania danych do bazy. Można by w ten czas spożytkować lepiej... herbata, blog, albo poczytać literaturę fachową ;). Niezmiernie przydatny w tym celu okazuje się tryb wsadowy, który umożliwia podanie danych logowania w wierszu poleceń: mysql "bazaDanych" --user="login" --password="hasło" < plik.sql

poniedziałek, 5 listopada 2012

Usuwanie wszystkich tabel w bazie MySQL

Usuwanie tabel w bazie bez jej drop'owania, może być kłopotliwe, ze względu na więzy integralności pomiędzy rekordami w tabelach.

Na szczęście usuwanie można wykonać szybko i bezboleśnie. Jedyne co trzeba zrobić to włączyć na chwilę ignorowanie sprawdzania więzów integralności pomiędzy kluczami obcymi. Robimy to następującym poleceniem:


SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS tabela1, tabela2, ..., tabelaN;


Easy peasy :).

sobota, 3 listopada 2012

Przywracanie ustawień fabrycznych w OpenWrt

Oto kolejny wpis z cyklu OpenWrt i moje zabawki :)

A więc namieszaliśmy w ustawieniach albo zapełniliśmy już pamięć routera do granic możliwości i nie bardzo wiemy co dalej zrobić... a może mały reset?
Z resetem bywa różnie... czasem się uda, a potem nie wiadomo co dalej... bo co zrobić gdy router nie chce się uruchomić? Flashować ponownie? A może da się jakoś łatwiej?
A no da się :).

Co będzie potrzebne?
  1. Komputer z:
    • kartą sieciową ethernet
    • zainstalowanym klientem telnet oraz ssh
    • nasz ulubiony kabelek RJ45
  2. Router z oprogramowaniem OpenWrt
Opis metody:
  1. Logujemy przez ssh do routera
  2. Wpisujemy polecenia:
    firstboot
    reboot
  3. Podłączamy kabel ehernet w komputerze oraz portu LAN 1 na routerze
  4. Ustawiamy adres karty ethernet, używanej do łączenia się z routerem na statyczny adres 192.168.1.11 z maską podsieci 255.255.255.0
  5. Po uruchomieniu logujemy się do routera poleceniem:
    telnet 192.168.1.1login: root
    hasło: (puste)
  6. Od tej pory możemy dalej mieszać :)

piątek, 2 listopada 2012

Linksys wrt54g3gv2-vf unbricking


Jest to początek serii wpisów dotyczących konfiguracji OpenWrt na routerze Liksys wrt54g3gv2-vf.
Jako, że każda przygoda zaczyna się od flashowania ROM/firmware tudzież częstego jego "ratowania" po wykonaniu nieprzewidywalnych modyfikacji, postanowiłem rozpocząć cykl od niezawodnej (dla tego urządzenia) metody flashowania firmware'u. Zupełnie jak w przypadku nauki jazdy na nartach - trzeba nauczyć się prawidłowo upadać i wstawać ;).
W wymieniony tutaj sposób można sflashować każdy soft (również oryginalny), nawet w przypadku braku dostępu do panelu administracyjnego w urządzeniu (reset urządzenia z powikłaniami, zapomniane hasło czy też nieudane flashowanie).

Co będzie potrzebne?

  1. Komputer z:
    • kartą sieciową ethernet
    • zainstalowanym klientem telnet oraz ssh
    • zainstalowanym klientem tftp (trivial FTP) - np tftp na linuksa
  2. Oprogramowanie routera (np. OpenWrt) ze strony openwrt.org
  3. Router pasujący do oprogramowania
  4. Przewód RJ45 również będzie przydatny
Opis metody: Sposobem na przywrócenie do życia naszego routera jest słynna metoda 30/30/30. Zalecam przeczytanie tego artykułu do końca przed rozpoczęciem unbrickingu celem nie zmarnowania czasu (po prostu uda się za pierwszym razem). Dodam tylko, że nie jest to oficjalna metoda, a autor tego poradnika (tudzież ja) nie ponosi żadnej odpowiedzialności za dalsze szkody (pośrednie bądź bezpośrednie) wynikłe z zastosowania tej metody.Kroki konieczne do sflashowania firmare:

  1. Ustaw adres karty ethernet, której użyjesz do łączenia się z routerem na statyczny adres 192.168.1.11 z maską podsieci 255.255.255.0
  2. Podłącz kabel ehernet w komputerze oraz portu LAN 1 na routerze
  3. Włącz router
  4. Wciśnij przycisk reset i trzymaj tak przez 30 sekund
  5. Nie puszczając przycisku reset odłącz zasilanie i poczekaj 30 sekund nieprzerwanie trzymając wciśnięty przycisk reset
  6. Nadal trzymając wciśnięty przycisk reset podłącz zasilanie do routera i poczekaj 30 sekund
  7. Trzymając wciśnięty przycisk reset rozpocznij flashowanie firmware poleceniem:tftp -l -m octet 192.168.1.1 -c put openwrt-wrt54g3gv2-vf-squashfs.bin
  8. Zaraz po wydaniu polecenia puść przycisk reset i czekaj
  9. Po dłuższej chwili powinna zacząć mrugać niebieska dioda, po ustaniu mrugania można uruchomić router ponownie.
W tym momencie mamy już zainstalowane na naszym routerze oprogramowanie. Jeśli jest to OpenWrt należy teraz zalogować się klientem telnet na router: telnet 192.168.1.1 użytkownik: root
hasło: (puste)
Oraz zmienić hasło poleceniem: passwd
Po wykonanej pracy można przywrócić ustawienia karty sieciowej oraz logować się przez ssh na portach LAN.


czwartek, 2 lutego 2012

Testy funkcjonalne aplikacji webowej czyli windmill

Jako, że ostatnimi czasy Firefox zaczął przechodzić drastyczne zmiany, a jego numery wersji rosną szybciej niż ilość wolnego czasu w rękach developerów, zaszła konieczność porzucenia Selenium IDE, które ostatnią stabilną wersję widziało gdzieś w okolicach Firefox 3.5. Niestety nie poruszę w tym wpisie żadnych technicznych kwestii, gdyż moje doświadczenie tym programem nie jest wystarczające, aby zamieścić jakieś pożyteczne informacje. Będzie to bardziej porównanie jabłka z pomarańczą.

Na tak drastyczny krok nie zdecydowałbym się gdyby nie Windmill, projekt mający na celu przeprowadzenie testów funkcjonalnych aplikacji webowych. Jego niekwestionowanym atutem jest fakt, że jest niezależny od platformy i wspiera wiele przeglądarek (tj. Chrome, Firefox oraz IE). Aby skorzystać z dobrodziejstw tego programu wystarczy posłużyć się informacjami zawartymi na stronie pod linkiem zamieszczonym powyżej.

W trakcie moich prac nad programami, stwierdziłem, że jest to zdecydowaniem bardziej elastyczne rozwiązanie niż wspomniane Selenium IDE. Rzeczą jaka najbardziej rzuca się w oczy to możliwość uruchomienia testów z wiersza poleceń (gdyby to miało kogoś odstraszyć to można również to zrobić z pomocą interfejsu graficznego). Umożliwia to wykonanie testowego wdrożenia (deployment) oraz testów wraz z wprowadzeniem przykładowych danych do naszej aplikacji w jednym zadaniu.

Jako, że nie ma róży bez kolców, opiszę również osobliwości... trudnością jaką napotkałem jest konieczność edycji (zamiany kolejnością poszczególnych czynności) testów przez edytor tekstu, co nie jest aż tak wizualne, ale dla kogoś kto rozwija kod aplikacji nie powinno stanowić to przeszkody.

czwartek, 19 stycznia 2012

Generator liczb (pseudo)losowych w MySQL

Potrzeba takiego generatora zrodziła podczas produkcji bazy do hurtowni danych. Nie będę ukrywał, że MySQL jest naprawdę kiepskim generatorem takowych liczb, jednak czasem funkcja ta bywa potrzebna np. przy zasilaniu bazy danymi testowymi.
Wystarczy załadować słowniki, i złączyć je po warunku 1 = 1 (iloczyn kartezjański), a następnie posortować po RAND()... a co jeśli potrzebna jest kolumna z liczbami albo wiele takich kolumn? Czy warto tworzyć słownik liczb do tego celu?
Jak pokażę na poniższym przykładzie nie jest to potrzebne. Potrzebna będzie tabela z wektorem inicjującym z dużą liczbą wierszy, jednak gdybyśmy takowej nie posiadali to MySQL po instalacji przychodzi z kilkoma tabelami systemowymi, które można wykorzystać do tego celu. W trakcie moich testów okazuje się, że każdy użytkownik bazy może je sobie przeglądać. SELECT
  RAND() liczba_losowa_zmiennoprzecinkowa,
  CAST( RAND()*10000 AS UNSIGNED ) liczba_losowa_calakowita
FROM
  information_schema.columns
  inner join information_schema.columns inf ON 1 = 1
Wynikiem powyższego zapytania, będą 2 kolumny z liczbami pseudolosowymi:


piątek, 13 stycznia 2012

Vim tricks

Ostatnio bardzo cenię sobie Vim'a i postanowiłem umieścić tutaj parę poleceń, do których (mam nadzieję) będę wracał. Zaczynam skromnie, ale z czasem lista powinna się rozwinąć. Oto polecenia:
  • usuń wiersze które nie spełniają wzorca: g!/wzorzec/d
  • zastosuj wyrażenie regularne (inne transformacje) na określonych wierszach: 1,5s/szukaj/zastąp/g
  • wklej zawartość bufora p do pola szukaj (/): ^R p (ctrl+r p)