czwartek, 18 czerwiec 2009

100% z domeny - #3 Własny serwer XMPP

Witam ponownie po dłuższej przerwie. Nie chciało mi się pisać, ale kiedyś trzeba się przemóc i skrobnąć coś żeby blog nie umarł ;P Dzisiaj szybki artykuł, pokazujący jak uzyskać fajny (w zasadzie dowolny) adres komunikatora w sieci XMPP (Jabber). Napisałem "adres", bo chyba to jest celem, dla którego uruchamia się serwer jabberowy we własnej domenie :)

Wbrew pozorom cała operacja jest nadzwyczaj prosta. Nie trzeba kupować własnej maszyny, niczego instalować, ani bawić się z plikami konfiguracyjnymi. Wszystko obsłuży za nas Google - wystarczy kilka kliknięć.

W jednym z ostatnich artykułów pokazywałem, jak wykorzystać swoją domenę w ramach Google Apps. Wykonanie opisanych tam kroków jest konieczne do przejścia dalej, więc jeśli przez te kilka miesięcy ktoś jeszcze tego nie zrobił... to niech zrobi, ale bez punktu Aktywujemy pocztę Gmail.

Po utworzeniu i konfiguracji konta Google Apps, musimy ustawić odpowiednie rekordy SRV na serwerze DNS, aby użytkownicy kont Jabber w naszej domenie mogli kontaktować się ze wszystkimi sieciami opartymi o protokół XMPP, a nie tylko z użytkownikami Gtalk oraz Google Apps. W tym celu powinniśmy znaleźć serwis oferujący edycję rekordów SRV, gdyż np. wykorzystywany przez nas do tej pory MyDomain nie posiada takiej opcji. Ja polecam nasz, polski serwer FreeDNS utrzymywany przez warszawską Szkołę Główną Handlową, a działający w oparciu o darmowe oprogramowanie XName.

Aby rozpocząć korzystanie z serwisu, konieczne jest założenie konta. Po zalogowaniu się na nie, należy przejść na stronę ustawień konta (odnośnik w lewym menu) i zaznaczyć wszystkie dostępne opcje. Szczególnie należy zwrócić uwagę na opcję Rekordy SRV, bez której nie ma sensu dalej czytać tego tekstu ;)

Po zapisaniu ustawień konta, klikamy odnośnik Utwórz strefę w górnej części strony. Naszym oczom ukazuje się kolejny formularz. Wypełniamy go podając w pierwszym polu (Nazwa strefy) nazwę domeny (bez www oczywiście), którą będziemy parkować. W polu typ strefy wybieramy Podstawowe, listę rozwijaną zostawiamy w spokoju, a w ostatnim polu możemy opcjonalnie wpisać adres serwera DNS, który do tej pory utrzymywał naszą domenę. Jeśli korzystaliśmy z usług MyDomain to możemy tutaj ew. wpisać ns1.mydomain.com. Zaoszczędzimy dzięki temu kilka minut, które musielibyśmy przeznaczyć na ponowne, ręczne wpisanie rekordów odpowiedzialnych za dotychczasowe poprawne działanie domeny (A, MX, CNAME, etc). Klikamy Utwórz. Po chwili wyświetlone zostaje potwierdzenie dodania naszej domeny do konfiguracji serwera.

Możemy od razu kliknąć odnośnik przekierowujący nas na stronę zarządzania rekordami DNS, ale równie dobrze możemy to zrobić na około ;P Klikamy w górnym menu link Modyfikuj strefę i następnie wybieramy nazwę naszej domeny. Za pomocą formularzy dostępnych na tej stronie, możemy skonfigurować teraz wszystkie wpisy. Warto zacząć od przywrócenia starej konfiguracji. Jeśli nie użyliśmy odpowiedniej opcji w czasie dodawania nowej strefy, musimy ponownie ręcznie tworzyć wszystkie stare wpisy (np. rekordy MX). Wszystkie zmiany potwierdzamy przyciskiem Utwórz konfigurację strefy znajdującym się na dole strony. Jeśli zaimportowaliśmy stare rekordy wcześniej, wystarczy tylko przejrzeć czy wszystko jest w porządku.

Jeżeli podczas konfiguracji swojego konta, poprawnie zaznaczyliśmy opcję Rekordy SRV, powinien teraz być dostępny formularz Rekordy serwisów (SRV). Aby cały ruch XMPP dla naszej domeny był prawidłowo kierowany do serwerów Google, konieczne jest dodanie w tej sekcji odpowiednich rekordów. Wpisów jest dokładnie dziesięć. Ich dokładny spis wraz ze szczegółowym opisem można znaleźć zawsze w Pomocy Google Apps. Rekordy dodajemy w sposób przedstawiony na załączonym obrazku, pamiętając o kropkach znajdujących się na końcu każdego wpisu. W przypadku, gdy zabraknie wierszy dla nowych rekordów, należy zapisać zmiany przyciskiem Utwórz konfigurację strefy. Po przeładowaniu strony, dodane zostaną nowe wiersze.

W tym miejscu kończy się etap konfiguracji domeny na FreeDNS. Teraz wystarczy tylko zmienić jej delegację (aktualne rekordy NS) na fns1.sgh.waw.pl oraz fns2.sgh.waw.pl i odczekać kilka(naście) godzin na efekt.

Tip: Jakiekolwiek zmiany w rekordach DNS domen polecam przeprowadzać w godzinach wieczornych, około 22:00 - 23:00. Serwery DNS wielu polskich dostawców internetu dokonują aktualizacji swoich rekordów między północą a 03:00, więc nie ma sensu wprowadzać zmian wcześniej, gdyż nie zostaną one najprawdopodobniej od razu uwzględnione.

Jeśli uruchamiamy usługę komunikatora w swojej domenie pierwszy raz, należy pamiętać o jej aktywacji w Panelu Administratora Google Apps.

Zauważyłeś błąd w artykule? Coś nie działa? Zostaw swoje uwagi w komentarzach.

wtorek, 11 listopad 2008

Zepsuło się - naprawiamy obsługę SQLite w PHP

Wczoraj chciałem napisać niewielki skrypt w PHP. Skrypcik malutki, ale byłby stosunkowo często wykorzystywany (jakieś kilka tysięcy razy na dzień :P). Aby zanadto nie męczyć MySQL'a postanowiłem spróbować wreszcie wykorzystać SQLite - bazę prostą, ale wygodną, szybką i posiadającą wystarczające możliwości. W końcu chodzi tylko o najzwyklejsze składowanie danych.

Kolejną sprawą było PDO, z którego również nigdy wcześniej nie korzystałem. Natrafiła się więc idealna okazja do nadrobienia zaległości i bliższego poznania obu ciekawych rozwiązań. Jakież było w związku z tym moje zdziwienie, gdy zauważyłem, że SQLite i PDO u mnie nie współpracują. Po wielu próbach okazało się, że winnym zaistniałej sytuacji jest brak rozszerzenia sqlite.so w mojej instalacji PHP. Trochę mnie to zdziwiło biorąc pod uwagę fakt, że w czasie instalacji serwera dodałem do niego chyba wszystko co było możliwe. Jak widać, byłem w błędzie ;P Nadróbmy więc stracony czas.

Niestety gotowej do podrzucenia w systemie biblioteki sqlite.so raczej nie znajdziemy. Trzeba ją w takim razie przygotować sobie samemu. Poniższe rozwiązanie znalazłem na forum PHPBuilder. Aby jednak wdrożyć je w systemie Fedora 9 konieczne jest dokonanie kilku kosmetycznych zmian. Pełny tutorial znajdziecie poniżej.

Z serwera PHP pobieramy najpierw plik SQLite-1.0.3.tgz (mirror). Komendą

pecl download sqlite

zawsze możemy pobrać najnowszą wersję. Archiwum rozpakowujemy, odpalamy terminal i wchodzimy do nowopowstałego katalogu SQLite-1.0.3. Po upewnieniu, że wewnątrz znajduje się plik config.m4 wpisujemy kolejno

phpize
./configure

Następnie w ulubionym edytorze tekstu otwieramy plik sqlite.c i dokonujemy stosownych podmian. Linię

static unsigned char arg3_force_ref[] = {3, BYREF_NONE, BYREF_NONE, BYREF_FORCE };

zamieniamy na

/* static unsigned char arg3_force_ref[] = {3, BYREF_NONE, BYREF_NONE, BYREF_FORCE }; */

zaś blok

function_entry sqlite_functions[] = {
PHP_FE(sqlite_open, arg3_force_ref)
PHP_FE(sqlite_popen, arg3_force_ref)

na

function_entry sqlite_functions[] = {
PHP_FE(sqlite_open, third_arg_force_ref)
PHP_FE(sqlite_popen, third_arg_force_ref)

Plik zapisujemy i zamykamy. Wracamy do terminala, logujemy się na konto root i wydajemy kolejne polecenia

make
make install
ls /usr/lib/php/modules/

Naszym oczom powinna ukazać się lista rozszerzeń PHP. Jeśli widzimy tam sqlite.so to znaczy, że wszystko poszło idealnie.

Tip: Instalator powinien sam przenieść nowe rozszerzenie do odpowiedniego katalogu. Jeśli jednak tego nie zrobi, musimy dokonać tego samodzielnie. Plik sqlite.so znajdziemy w naszym folderze roboczym w podkatalogu modules.

Póki co jednak PHP nie widzi nowego rozszerzenia, musimy jeszcze dopisać je do konfiguracji i zrestartować serwer Apache.

cd /etc/php.d/
cp pdo_sqlite.ini sqlite.ini
vim sqlite.ini

Zawartość pliku sqlite.ini zmieniamy odpowiednio z

; Enable pdo_sqlite extension module
extension=pdo_sqlite.so

na

; Enable sqlite extension module
extension=sqlite.so

i zapisujemy. Teraz pozostaje tylko wspomniane ponowne uruchomienie usługi httpd i SQLite zaczyna nam śmigać.

/etc/init.d/httpd restart

Dostępne od tej pory są zarówno fukcje sqlite_* jak i możemy obsługiwać bazy przez interfejs PDO.

Na koniec warto jeszcze wspomnieć o pewnych utrudnieniach związanych z korzystaniem z baz SQLite w PHP. Aby uniknąć różnych problemów z zapisem do bazy należy pamiętać nie tylko o ustawieniu uprawnień do niej na 666, ale również do katalogu, w którym jest przechowywana na 777! Jeśli o tym zapomnimy metoda PDO::errorInfo() zwróci komunikat błędu attempt to write a readonly database lub unable to open database file (szczególnie ten drugi niewiele mówi).

Trochę odbiegłem od planu, ale wolałem napisać powyższy artykuł już teraz żeby nie zapomnieć :) Kolejny w związku z tym będzie już tak jak wspominałem ostatnio o serwerze XMPP we własnej domenie. Czekajcie cierpliwie! Kiedyś może jeszcze napiszę co nieco o pracy z SQLite.

Zauważyłeś błąd w artykule? Coś nie działa? Zostaw swoje uwagi w komentarzach.