środa, 11 września 2013

Przywracanie hasła root dla MySQL/MariaDB

Dzisiaj bardzo szybka porada jak przywrócić hasło administratora dla serwera MySQL i pochodnych:
Uruchamiamy usługę w trybie ratunkowym: service mysqld stop
mysqld_safe --skip-grant-tables&

Logujemy się do wiersza poleceń: mysql

Ustawiamy nowe hasło: mysql> UPDATE mysql.user SET password=PASSWORD('nowe-haslo') WHERE user='root';
mysql> FLUSH PRIVILEGES;

Po wykonaniu poleceń uruchamiamy serwer: service mysql restart
Jeśli wszystko wykonaliśmy prawidłowo, to możemy dalej uruchamiać nasze ulubione kwerendy SQL ;).

piątek, 8 lutego 2013

Drukowanie broszurek pod Linuksem

Zdarza się, że potrzeba wydrukować z internetu spory plik papieru w formacie A5 (lub jak kto woli A4 2 strony na 1). Dodatkowo gdy zachodzi potrzeba częstego korzystania z wydruku, warto zrobić sobie z tego książeczkę (broszurkę) zszywaną wzdłuż środka strony (grzbietu złożonej strony A4). Żadne, znane mi, darmowe oprogramowanie nie oferowało takiej funkcjonalności. W efekcie, po krótkim googlowaniu, trafiłem na stronę Evince - printing a booklet. Tam znajduje się "fajny wzór", bez którego nijak sobie z tym problemem (w tym programie) nie można poradzić. Wszystko ok w przypadku niewielkiej objętości wolumenu, ale w przypadku 30+ stron szybciej byłoby napisać automat, który zrobi to za nas.

Ja potrzebowałem przygotować 92 strony do druku. Czy wyszło szybciej? W przypadku jednorazowego wydruku może nie, ale za to przypomniałem sobie o pętlach, instrukcjach warunkowych, logicznych oraz algebraicznych w bashu, a to wszystko w jednym miejscu :).

Oto "broszurkowa formuła" w bashu. Wystarczy ją wkleić do pliku i wykonać.#!/bin/bash # n - liczba stron do wydruku### zmień 0 na liczbę stron w pliku
n=0

# podnieś liczbę n do najbliższej podzielnej przez 4
while [ $[ $n%4 ] -gt 0 ]
  do n=$[ n+1 ]
done

# wygeneruj ciąg, który należy wprowadzić do pola "Strony:"
echo -ne $n
echo -ne ", "
for i in `seq 1 $[ $n/4 ]`
do
  echo -ne $[ $i*2 - 1 ]
  echo -ne ", "
  echo -ne $[ $i*2 ]
  echo -ne ", "
  echo -ne $[ $n - 2*$i + 1 ]
  if [ $i -ne $[ $n/4 ] ]
  then
    echo -ne ", "
    echo -ne $[ $n - 2*$i ]
    echo -ne ", "
  else
    echo ""
  fi
done

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)

sobota, 6 listopada 2010

PRIMA - DOM startuje!

Korzystając z niesamowitej popularności mojego bloga pragnę zaprezentować moje najnowsze dzieło: PRIMA - DOM. Autorem zarówno szaty graficznej jak i realizatorem projektu jestem ja.

czwartek, 23 sierpnia 2007

Linksys WRE 54g -- konfiguracja i recenzja

Artykuł ten ma na celu zaoszczędzenia czasu tym z was, którzy zdecydowali się na zakup i konfigurację tego urządzenia. Jako, iż podczas moich zmagań starałem się znaleźć prostą instrukcję obsługi, której po prostu nie było. Mam nadzieję że szybko odnalazłeś ten blog i skorzystałeś z moich wskazówek. Jeśli nie to zlinkuj mój blog aby inni mogli szybciej odnaleźć tą wiedzę ;p.
Oczywiście nie chcę nikogo zniechęcać do zakupu tego urządzenia - u mnie działa bardzo dobrze. Jednak zanim przystąpisz do konfiguracji MUSISZ posiadać sporo wiedzy na temat tego urządzenia gdyż instrukcja obsługi jej nie dostarcza.

Konfiguracja w większości przypadków przebiega następująco:
UWAGA!
Pod żadnym pozorem nie używaj konfiguratora znajdującego się na płycie CD dołączonej z extenderem. W moim przypadku nie tylko nie pomógł mi ustanowić połączenia, ale dodatkowo zepsuł mi działające połączenie internetowe pod windowsem XP.

W pierwszej kolejności, oczywiście należy też sprawdzić czy MAC extendera znajduje się puli adresów kart sieciowych dopuszczanych przez router.

Jeśli podłączasz extender do routera to dodatkowo zadbaj by na czas konfiguracji w routerze zakres przydzielanych adresów IP mieścił się w 192.168.1.1 - 192.168.1.239 gdyż domyślny adres IP extendera to: 192.168.1.240. Lub podłącz extender do swojego komputera z ręczenie skonfigurowaną siecią z puli 192.168.1.x/255.255.255.0. Oczywiście x nie może być 240.

0) Gdy masz do czynienia z siecią nieszyfrowaną to w pobliżu routera wciskasz przycisk auto configure i masz działające połączenie nieszyfrowane. Oczywiście wiemy, że takie nieszyfrowane połączenie jest dobre jedynie w przypadku accesspoint'ów publicznego dostępu stąd też numer tego podpunktu, który oczywiście powinien zostać przez czytelnika zignorowany. Chciałem jednak zaznaczyć, iż ta opcja działa świetnie i została przeze mnie wypróbowana z pełnym powodzeniem. I jeśli z jakiegoś powodu poniższe instrukcje nie zadziałają to można traktować to rozwiązanie jako ostateczną konieczność. Nikt w dzisiejszych czasach nie przetrwa przecież bez internetu ;-).

1) W przypadku połączenia szyfrowanego należy wejść do panelu konfiguracyjnego, do którego masz dostęp przez przeglądarkę internetową wpisując adres: http://192.168.1.240. Pole użytkownika pozostawiasz puste natomiast w polu hasło wpisz: admin. Z poziomu tego panelu można skonfigurować extender przepisując ustawienia znajdujące się w routerze. W polu IP wpisz adres IP extendera jaki potrzebujesz w razie specyficznej konfiguracji sieci lecz pamiętaj by umieścić ten adres poza pulą IP przyznawaną przez router gdyż później może pojawić się problem z uzyskaniem połączenia. Wypełnij wszystkie pola poza opcjami zabezpieczeń gdyż extender nie radzi sobie zbyt dobrze ze zmianą tylu opcji na raz. Po restarcie extendera wywołanym zatwierdzeniem zmian skonfiguruj ustawienia dotyczące zabezpieczeń. Gdy zatwierdzisz zmiany dotyczące szyfrowania i wszystkie wprowadzone dane będą prawidłowe po restarcie extendera powinieneś mieć dwie świecące na niebiesko diody (ok 5-10 sec po zaświeceniu się drugiej) sygnalizujące działające połączenie.

Jeśli chcesz sprawdzić czy działa prawidłowo umieść extender blisko komputera, z którego łączysz się z siecią (automatycznie powinien wybrać źródło o lepszym sygnale) i sprawdź czy masz jednocześnie dostęp do IP routera, IP extendera oraz oczywiście do internetu ;). Jeśli tak to GRATULACJE!

Z moich obserwacji wynika, iż extender działa jak mostek pomiędzy urządzeniami, więc adresy IP maszyn łączących się przez extender są przydzielane identycznie jak podczas połączenia bezpośredniego. Dodam też, iż urządzenie to pomimo ostrzeżeń producenta dotyczących stosowania go z routerami innej marki doskonale sprawdza się w tandemie z produktami Asus'a, którego jestem posiadaczem i do którego dostrajałem extender.

piątek, 27 lipca 2007

Czyszczenie ReqestParameter w Symfony

Zacznę od tego, że chciałem napisać prosty formularz, który przekierowuje użytkownika do odpowiedniego modułu w zależności od przesłanych danych. A to żeby wypełnił lub poprawił formularz lub otrzymał potwierdzenie wysłania maila. Zarazem nie chciałem uciekać się do sesji czy też pisania w bazie danych gdyż projekt był trywialnie prosty. Więc sobie wymyśliłem że zahashuję treść maila MD5 i zapiszę go w pliku a potem będe sprawdzał jego zawartość w razie wysyłania kolejnego maila. Gdyby się okazało, iż ktoś wcisnął magiczne F5 i przesłał dane ponownie, miało czyścić dane a skrypt widząc pusty bufor wykonałby domyślną akcję -- wyświetlił czysty formularz.
I tu się zaczynają schody. Po wielu perturbacjach i trzykrotnym wracaniu do API Symfony zdołałem nakłonić Symfony do wyczyszczenia danych przesłanych formularzem. Nie jestem jednak pewien efektów ubocznych w postaci czyszczenia danych z innego źródła.
Jako, iż widziałem wiele zapytań na ten temat w sieci jednak nie znalazłem żadnej sensownej odpowiedzi, umieszczę ten kawałek kodu tutaj.
Oto on:
$this->getContext()->getRequest()->getParameterHolder()->clear();

Mam nadzieję, że się wam ten kawałek kodu przyda. Bo mi by się napewno przydała lepsza dokumentacja Symfony ;). Niemniej jest to najfajniejszy framework jaki powstał na PHP.

Transmission ended.