Category Archives: Debian

Installation of gem RMagick in Debian GNU/Linux

When installing RMagick gem you could step into some troubles with building this gem. Probably you are missing some development packages. In my case this was imagemagick itself plus some development headers:

Can't install RMagick 2.13.1. Can't find MagickWand.h.

apt-file search MagickWand.h showed that package libmagickwand-dev includes this file. So quick

apt-get install imagemagick libmagickwand-dev

solve this problem. After that gem install rmagick -v ‘2.13.1’  finished with success.

Number of Views :63169

Sphinx 2 w systemie Debian – budowanie paczki ze źródeł

Przy budowaniu niewielkich serwisów obsługujących niewielką ilość dokumentów(artykuły, wpisy, komentarze, etc) zaprzęganie dedykowanych serwerów do przeszukiwania mija się z celem. Swoje projekty w dużej mierze buduję w oparciu o świetny phpowy framework Zend, który posiada bibliotekę Zend_Search_Lucene bardzo łatwo przyswajalną do budowy własnego mechanizmu wyszukiwania opartego na dokumentach.

Jak się okazuje to zendowskie Lucene nie jest wcale takie dobre, kiedy liczba dokumentów zacznie przekraczać kilkadziesiąt tysięcy. Najgorsze i najbardziej skomplikowane zapytania do indeksu(zoptymalizowanego oczywiście) trwały mi po 4 – 6 sekund i więcej! Niestety takie rozwiązanie nie może zostać przyjęte przez żaden chcący nawet szanować się serwis. Szukając zatem jakiegoś lepszego rozwiązania trafiłem na otwarto źródłowy serwer przeszukiwania Sphinx.

Sphinx jest w całości napisany w C++ i posiada wygodne API, które jest dostępne w większości popularnych języków do tworzenia aplikacji internetowych(tylko takie mnie interesują na chwilę obecną 😉 ). W oficjalnym serwisie chwalą się twórcy osiągnięciami wydajnościowymi swojego produktu i muszę przyznać, że są one naprawdę imponujące. Sam po wstępnych testach serwera(a teraz już w produkcji) muszę przyznać, że tak piekielnie szybkiego rozwiązania do przeszukiwania to jeszcze nie miałem :-).

Chyba wystarczająco dużo już posmarowałem Sphinxowi, czyli teraz czas przejść do konkretów – instalacji. Po przejściu w podstronę pobierania serwera widzimy, że mamy dostępnych kilka wersji serwera. Od razu co przyszło mi na myśl to pominięcie tych archaicznych wersji 0.XX i skupienie się na najnowszej, chociaż ciągle w fazie beta, wersji 2.XX. Widząc, że nie ma tam paczki dla Debiana(ani w repozytoriach) z najnowszą wersją doszedłem do wniosku, że sam sobie ją zbuduję, a co?! 🙂 Proces produkcji takowej paczki jest bardzo prosty i sprowadza się do kilku ruchów klawiaturą w konsoli 😉

1. Pobieramy źródła ze strony producenta do katalogu /usr/src i tam je rozpakowujemy:

# cd /usr/src 
# wget http://sphinxsearch.com/files/sphinx-2.0.1-beta.tar.gz 
# tar zxvf sphinx-2.0.1-beta.tar.gz

2. Instalujemy wymagane paczki do budowania pakietów Debiana:

# apt-get install build-essential fakeroot dpkg-dev dh-make

Wchodzimy następnie do katalogu ze źródłami i przygotowujemy je do zbudowania pakietu:

# cd 
sphinx-2.0.1-beta
 

# dh_make -f /usr/src/ sphinx-2.0.1-beta.tar.gz

 

Tutaj na pytanie o tym paczki odpowiadamy “s”(single binary), przy następnym pytaniu wciskamy ENTER i powinien naszym oczom ukazać się komunikat, że przygotowanie źródeł oryginalnych do specyfiki źródeł debiana powiodły się.

Opcja “-f” w tym przypadku mówi aplikacji dh_make aby jako archiwum źródeł oryginalnych wykorzystać te, które ściągnęliśmy na początku procesu budowy paczki.

Po przygotowaniu źródeł do budowy pakietu Debiana możemy wyedytować plik debian/control i wstawić tam swoje dane. Po czym przechodzimy do budowy paczki:

# dpkg-buildpackage -rfakeroot

Jeśli budowanie pakietu jest przeprowadzane na maszynie wielordzeniowej lub wieloprocesorowej to można w tym miejscu użyć opcji -jX(np.: -j8), gdzie X to liczba rdzenie, wątków lub procesorów, które posiadamy. Opcja ta jest analogiczna do tej, którą można spotkać w programie make.

W ostatnim etapie budowania pakietu dostałem błąd z “uber testa”, kombinować za dużo mi się nie chciało i żeby się go w miarę szybko pozbyć edytowałem plik ubertest.php:

# vim text/ubertest.php

i na samym początku skryptu dałem wyjście ze statusem 0

1 <?php

2 exit(0);

 

3 //
4 // $Id: ubertest.php 2765 2011-04-08 13:07:32Z klirichek $
5 //
6
7 $sd_managed_searchd = false;
8 $sd_skip_indexer = false;
9 $g_ignore_weights = false;

Po czym odpaliłem ponownie budowanie pakietu i tym razem proces budowania paczki przeszedł bez żadnych problemów do samego końca. W katalogu wyżej od teraz dostępny mam teraz przed momentem zbudowany pakiet z rozszerzeniem .deb, który przy pomocy dpkg można zainstalować i przejść do konfiguracji swojego serwera wyszukiwania.

Przykładem takiej konfiguracji może podzielę się kolejnym razem 🙂

 

Number of Views :3499

Filesystem notification initialization error — contact your mail administrator (check for configuration errors with the FAM/Gamin library)

Błąd Filesystem notification initialization error — contact your mail administrator (check for configuration errors with the FAM/Gamin library) pojawia się w programach pocztowych i najczęściej powodowany jest przez serwer pocztowy Courier. Aby go naprawić w systemach Debiano-podobnych należy zainstalować paczkę gamin

# apt-get install gamin

podczas instalacji w systemie Debian Squeezy manager pakietów usunie paczkę libfam0 i zgłosi problem z zależnościami, który należy sobie olać.

dpkg: libfam0: dependency problems, but removing anyway as you requested:  
 courier-base depends on libfam0. 
 courier-imap depends on libfam0.

Po instalacji pozostaje zrestartować wszystkie serwisy couriera.

for serwis in /etc/init.d/*courier*; do $serwis restart; done

Od teraz błąd w programach pocztowych powinien przestać się pojawiać.

Number of Views :8751

Zmiana domyślnego mechanizmu składowania danych(storage engine) w serwerze MySQL

Baza MySQL oferuje dostęp do kilku mechanizmów składowania danych(ang. storage engines). Domyślnie serwer ustawiony jest na myisam. Niestety nie pozwala on na wykorzystanie dobrodziejstw relacji dla przykładu(pełna lista cech każdego z mechanizmów w dokumentacji – Storage Engines v5.1). Tę konkretną funkcję udostępnia InnoDB.

Narzędzia do modelowania typu Power Architect nie dają możliwości ustawienia mechanizmu składowania dla tabel, więc jedynym rozwiązaniem jest zmiana domyślnego w konfiguracji serwera.

Całość zabiegu jest bardzo prosta bo wystarczy edytować główny plik konfiguracyjny my.cnf. Dla dystrybucji debiano-podobnych znajduje się on w /etc/mysql/my.cnf.

Zmiana domyślnych ustawień polega na dodaniu w sekcji [mysqld] opcji:

default-storage-engine = innodb

Aby wprowadzone zmiany zaczęły działać należy przeładować ustawienia serwera MySQL.

Number of Views :3573

Moduł dla apache2 mod_pagespeed od Google

Page Speed to zestaw narzędzi OpenSource od Google, które mają pomóc webmasterom w optymalizacji ich witryn. Ostatnio upubliczniony został moduł dla Apache2 o nazwie mod_pagespeed, który za pomocą szeregu filtrów modyfikuje odpowiedź mającą trafić do klienta.

1. Instalacja

Na maszynie z już zainstalowanym apache2 instalacja mod_pagespeed z paczek dostępnych na stronie projektu jest banalnie prosta. W sekcji mod_pagespeed odnajdujemy naszą platformę, w moim przypadku jest to Debian 64-bit, pobieramy paczkę z modułem, następnie otwieramy konsolę i z poziomu super-użytkownika przechodzimy do lokalizacji, gdzie zapisaliśmy pakiet. Instalujemy paczkę:

socjopata# dpkg -i mod-pagespeed-beta_current_amd64.deb
Zaznaczenie poprzednio niezaznaczonego pakietu mod-pagespeed-beta.
(Odczytywanie bazy danych ... 212669 files and directories currently installed.)
Rozpakowanie mod-pagespeed-beta (z mod-pagespeed-beta_current_amd64.deb) ...
Konfigurowanie mod-pagespeed-beta (0.9.1.1-r171) ...
Enabling module pagespeed.
Run '/etc/init.d/apache2 restart' to activate new configuration!

Jak widać w powyższym raporcie moduł został poprawnie zainstalowany i można go aktywować przez ponowne uruchomienie serwera apache. Można tego dokonać również przez jego przeładowanie:

/etc/init.d/apache2 reload

Gdyby wystąpiły problemy z niespełnionymi zależnościami dla modułu należy je uzupełnić:

apt-get -f install

2. Konfiguracja

Jednak przed przeładowaniem serwera zerknijmy do konfiguracji modułu, znajduje się ona w pliku /etc/apache2/mods-available/pagespeed.conf. Każda dyrektywa konfiguracyjna jest szczegółowo opisana w pliku konfiguracyjnym, więc nie ma sensu rozwodzić się nad nimi, aczkolwiek kilka z nich jest bardzo istotnych i należy im się przyjrzeć. Pierwszą jest

ModPagespeedDisableFilters

Ta dyrektywa globalnie wyłącza pewne filtry. Zdarzyć się może sytuacja, gdzie pewien filtr jest filtrem wysokiego ryzyka i psuje odpowiedź wysyłaną do klienta w takim stopniu, że nie jest możliwe poprawne wyświetlenie zawartości strony przez przeglądarkę, w takim wypadku należy globalnie wyłączyć filtr i spokojnie czekać na poprawki do niego.

Drugą z bardzo istotnych instrukcji konfiguracyjnych jest:

ModPagespeedEnableFilters

Jak w przypadku wyżej po dyrektywie podajemy po przecinkach filtry, które w tym wypadku mają zostać włączone. Dla przykładu, aktywacja filtra collapse_whitespace będzie wyglądała następująco:

ModPagespeedEnableFilters collapse_whitespace

Aktywacja kilku filtrów wygląda następująco:

ModPagespeedEnableFilters collapse_whitespace,elide_attributes

Resztę ustawień spokojnie można pozostawić w domyślnej formie.

3. Wnioski

Przy włączonych filtrach collapse_whitespace, elide_attributes, remove_comments, combine_css, rewrite_javascript, move_css_to_head, remove_quotes znacząco spada ilość danych transferowanych z serwera do przeglądarki co na przykładzie kilku wywołań prezentuje tabela:

Bez mod_pagespeed Włączony mod_pagespeed
15,73 12,06
14,52 12,05
14,35 11,56
14,36 11,72
22,83 17,21
23,00 17,03

Oczywiście wszystko zależy od tego w jaki sposób jest generowany HTML przez aplikację. W moim przypadku jest to ładnie sformatowany kod, także zysk na ilości danych jest spory.

Mod_pagespeed posiada również kilka filtrów do zmniejszenia zapytań o pliki css, js i grafiki. Są nimi odpowiednio Combine CSS, Inline JavaScript i Optimize Images. Na końcu każdej podstrony dokumentacji filtra znajduje się informacja o ryzyku stosowania, przy czym większość filtrów wykazuje małe ryzyko.

Na końcu pliku konfiguracyjnego znajduje się sekcja Location /mod_pagespeed_statistics, gdzie znajdują się statystyki modułu. W tym miejscu możemy podejrzeć statystyki skuteczności modułu w naszym przypadku.

Na zakończenie kilka słów o tym jak bardzo moduł spowalnia obsługę żądań. Kilka poglądowych wyników bez włączonego modułu:

127.0.0.1 [11/Nov/2010:19:54:44 +0100] 119305 GET / HTTP/1.1 4076
127.0.0.1 [11/Nov/2010:19:54:48 +0100] 92647 GET /oferta-uslugowa/obsluga-techniczna-konferencji HTTP/1.1 4441
127.0.0.1 [11/Nov/2010:19:54:49 +0100] 77898 GET /oferta-uslugowa/obsluga-techniczna-eventow HTTP/1.1 4286
127.0.0.1 [11/Nov/2010:19:54:51 +0100] 93597 GET /oferta-uslugowa/wypozyczenia-sprzetu-multimedialnego HTTP/1.1 4237
127.0.0.1 [11/Nov/2010:19:54:53 +0100] 73639 GET /oferta-uslugowa/projektowanie-sal HTTP/1.1 3631
127.0.0.1 [11/Nov/2010:19:54:57 +0100] 101097 GET /oferta-handlowa/samsung HTTP/1.1 4560
127.0.0.1 [11/Nov/2010:19:54:59 +0100] 78023 GET /produkt/monitor-p42h-2 HTTP/1.1 4411
127.0.0.1 [11/Nov/2010:19:55:03 +0100] 381492 GET /firma/kontakt HTTP/1.1 4469
i dla włączonego modułu pagespeed:
127.0.0.1 [11/Nov/2010:19:57:10 +0100] 100126 GET / HTTP/1.1 3526
127.0.0.1 [11/Nov/2010:19:57:15 +0100] 87732 GET /oferta-uslugowa/obsluga-techniczna-konferencji HTTP/1.1 4192
127.0.0.1 [11/Nov/2010:19:57:18 +0100] 82464 GET /oferta-uslugowa/obsluga-techniczna-eventow HTTP/1.1 3996
127.0.0.1 [11/Nov/2010:19:57:19 +0100] 80766 GET /oferta-uslugowa/wypozyczenia-sprzetu-multimedialnego HTTP/1.1 4038
127.0.0.1 [11/Nov/2010:19:57:21 +0100] 87320 GET /oferta-uslugowa/projektowanie-sal HTTP/1.1 3515
127.0.0.1 [11/Nov/2010:19:57:26 +0100] 97538 GET /oferta-handlowa/samsung HTTP/1.1 4351
127.0.0.1 [11/Nov/2010:19:57:29 +0100] 83227 GET /produkt/monitor-p42h-2 HTTP/1.1 4278
127.0.0.1 [11/Nov/2010:19:57:34 +0100] 112691 GET /firma/kontakt HTTP/1.1 4277

Istotna jest kolumna przed metodą wywołania(GET). Podane czasy są w milisekundach. Testy nie były prowadzone na maszynie produkcyjnej.

Wniosek z moich pomiarów, powyżej tylko część wyników, jest taki, że moduł nie wpływa w znaczący sposób na czas generowania odpowiedzi na żądanie. Mogę pokusić się nawet o stwierdzenie, że nie ma żadnego wpływu, przy znaczącej redukcji ilości danych, które są wysyłane z serwera.

Przy optymalizacji witryny jeśli weźmiemy wiele drobnych szczegółów i zyskując na każdym kilka kilobajtów lub milisekund szybko będziemy mogli się przekonać, że prostymi krokami zredukowaliśmy ruch oraz zmniejszyliśmy zauważalne opóźnienie przy wczytywaniu się stron w naszej aplikacji. 100 ms jest zauważalnym dla człowieka opóźnieniem, każde kolejne milisekundy coraz bardziej irytują, moim zdaniem trzeba dążyć do tego, aby mieć jak najmniej wzburzonych użytkowników 🙂

Number of Views :3913

Wine i uTorrent 1.8.5

Ostatnimi dniami zadzwonił do mnie przyjaciel i poprosił mnie o odpalenie uTorrenta 1.8.5 na jego serwerze shellowym. Aktualna wersja tego oprogramowania to 2.0.2, a że jego współpraca z wine nie układa się za dobrze, trzeba było podmienić wersje. Okazało się to zadaniem nieco trudniejszym niż mogłoby się wydawać, więc sporządziłem krótką instrukcję postępowania i zamieszczam ją poniżej. Myślę, że podmiana z innych numerków będzie przebiegała analogicznie.

Jak za mocno nie wk****ć się podczas próby odpalenia uTorrenta 1.8.5 na wine?

1. Idziemy do kolegi, który ma korzenie w carskiej rosji i prosimy go
o kanke z bimbrem.
2. Po drodze do domu kupujemy trochę boczku (ze skórką – przyda się na
przygładzenie włosów) i owijamy go w gazetę.
3. Siadamy przed komputerem i logujemy się na shella.
4. Instalujemy wersję aktualną 2.0.2.
5. Pociągamy z lubością pierwszy łyk bimbru.
6. Wyglądamy przez okno czy nie czai się gdzieś policja (bimber jest nielegalny)
7. Pociągamy kolejny łyk bimbru i zagryzamy boczkiem
8. Kopiujemy katalog
/home/NAZWA_TWOJEGO_UZYTKOWNIKA/.wine/drive_c/windows/profiles/NAZWA_TWOJEGO_UZYTKOWNIKA/Dane
aplikacji/uTorrent do /home/NAZWA_TWOJEGO_UZYTKOWNIKA/.wine/drive_c/Program Files/
9. Pijemy siwuchę
10. Ściągamy uTorrenta 1.8.5 i jeśli jesteśmy jeszcze w stanie widzieć
cokolwiek pijemy resztę bimbru
11 Kopiujemy ściągnięty (nie instalujemy!!!) utorrent.exe do Program
Files/uTorrent i zmieniamy mu nazwę na uTorrent.exe (ja zmieniłem i od
razu zaczęło działać, nie wiem czy bez tego będzie działać, zwykła
logika, producent dał mu nazwę uTorrent to pewnie będzie działać pod
nazwą uTorrent.exe). Teraz uTorrent działa w wersji 1.8.5 – jak
zresztą widać.
12. Księżycówka się skończyła, więc można odkapslować sobie piwo (np.
Żywiec) i je wypić. Dobranoc!

Number of Views :1204

Debian 6.0 Codename: Squeeze

Jak donosi ogłoszenie na developerskiej liście dyskusyjnej Debiana w marcu 2010 roku ma zostać zamrożona dystrybucja testowa i przed konferencją DebConf ma wyjść nowa stabilna wersja Debiana.

Manager projektu Steve McIntyre chce zakończyć proces nowego wydania przed konferencją, aby mieć wolną głowę, otwartą jedynie na przyszłość dystrybucji.

It would be nice to have things done before we head off to New York for DebConf in July, so that we’re free of the release work while we discuss future plans

ITWire

Number of Views :1414

Now listening – Amarok + Pidgin

Poniżej opis jak spiąć Amaroka z Pidginem, aby pokazywał czego słuchamy w statusie.

Instalujemy amaroka:

# apt-get install amarok

Instalujemy plugina do pidgina pidgin-musictracker(unstable), w tym celu udajemy się na http://packages.debian.org/sid/pidgin-musictracker wybieramy mirrora ściągamy paczkę deb, uzupełniamy zależności i dajemy(aktualna wersja)

# dpkg -i pidgin-musictracker_0.4.18-1_amd64.deb

Jeśli mamy sida to wystarczy zainstalować pakiet prosto z repozytoriów:

# apt-get install pidgin-musictracker

odpalamy Pidgina -> Plugins szukamy plugina musictracker uaktywniamy go i przechodzimy do konfiguracji, tam wybieramy format opisu close close i gotowe. Opisy podczas słuchania muzyki w Amaroku będą od tego momentu same zmieniały.

Number of Views :945

Błąd przy uruchamianiu MOC (music on console)

Podczas uruchamiania MOC(music on console) otrzymywałem następujący błąd:
FATAL_ERROR: Can't receive value from the server.

Rozwiązaniem problemu okazało się wyczyszczenie ~/.moc/cache (przy okazji usunąłem sobie również playlistę 😉

rm -fr ~/.moc/cache/*

Przy ponownym uruchomieniu (mocp) MOC wystartował normalnie.

Number of Views :1041

pornview

# aptitude search porn
p   pornview                                                       – Image and movie viewer/manager

Number of Views :1168