Zenedith's dev blog

Dałem się namówić.., szatanowi chyba..

MacOSX: Przygotowanie stanowiska pracy

Wprowadzenie

Od jakiegoś czasu jestem użytkownikiem MacBook Pro z systemem Snow Leopard.
W tym wpisie postaram się przedstawić parę rozwiązań podstawowych problemów z svn, apache i php.

Co to jest macports?

Przede wszystkim niezbędnym narzędziem jest macports.org.
Jest to zbiór bibliotek i aplikacji przeniesionych ze „świata linux” w ten sposób, żeby działały natywnie na MacOSX. Dla użytkowników linuxa, którzy przesiadają się na MacOSX jest to wręcz niezbędne narzędzie.

Zasada działania macport jest następująca:

  • instalujemy najnowszą paczkę macports w wersji dla konkretnej wersji systemu,
  • korzystając z poleceń port search/install/list wyszukujemy i instalujemy szukane oprogramowanie (lista portów dostępna jest na tej stronie )

Domyślnie wszystko instaluje się w katalogu /opt ale można to zmienić. Tak naprawdę to możemy mieć parę wersji macport zainstalowanych ale o tym być może innym razem.

Przejdźmy do sedna: do czego tak naprawdę jest to nam tak bardzo niezbędne?

Najprostsza odpowiedź jest taka, że uzyskujemy dostęp do „aktualnych” wersji aplikacji.

Przykłady:

  1. svn – standardowo dostępna jest starsza wersja svn,
  2. php5 – dostarczone w wersji 5.3.0 (co i tak uważam za sukces) ale dlaczego nie mielibyśmy wykorzystywać wersji 5.3.2 i nowszych?
  3. apache – dostępny w wersji 2.2.12 gdy aktualnie dostępna jest wersja 2.2.15.

Oczywiście Apple dba o update aplikacji w mniejszym lub większym stopniu, ale dlaczego nie mamy mieć prostej możliwości samemu decydować o tym co chcemy? (filozofia *unix się kłania).

Zainstalujemy więc wypisane wyżej aplikacje korzystając z macport.

Instalacja pakietow z macports

Wszystkie polecenia korzystające z macports zaczynają się od:

sudo port

Jak wskazuje sudo, potrzebne są uprawnienia root.

  • pobranie listy wszystkich dostępnych portów: sudo port list
  • wyszukanie portu po nazwie (częściowej): sudo port search nazwa_portu
  • instalacja konkretnego portu: sudo port install nazwa_portu
  • informacja o wariantach, w których może być zainstalowany port: sudo port variants nazwa_portu
  • aktualizacja (synchronizacja) listy portów: sudo port selfupdate (dodatkowowo parametr -v pokaże szczegółowe informacje)
  • update zainstalowanych portów do najnowszych dostępnych wersji: sudo port upgrade outdated (jeśli chcemy zobaczyć jakie porty pojawiły się w nowszych wersjach wpisujemy sudo port outdated)
  • usuwanie zainstalowanych portów: sudo port uninstall nazwa_portu
  • wyczyszczenie cache’u po odinstalowanych portach: sudo port clean uninstalled
  • aktywowanie/dezaktywowanie portów: sudo port active (deactive) nazwa_portu
  • lista zainstalowanych portów: sudo port installed

Przykładowo, chcemy zainstalować najnowszą wersję svn.

W tym celu wpisujemy:

sudo port install subversion +tools

Jak można zauważyć, pojawia się tutaj dodatkowa zmienna sterująca „+tools„. W ten sposób oznaczane są warianty czyli „variants”, w których dany pakiet może zostać zainstalowany. W tym przypadku możemy zobaczyć czym jest variant „+tools” na stronie opisu danego portu. Polecenie, które podaje dostępne warianty zostało wymienione wyżej ale powtórzę je jeszcze raz:

sudo port variants nazwa_portu.

Warianty to bardzo dobre rozwiązanie na instalowanie konkretnych funkcjonalności danego pakietu lub usuwanie funkcjonalności, które nie będą nam potrzebne. Dla przykładu, instalując port apache2, domyślnie zawiera on dołączone następujące warianty: „+darwin+preforkmpm„. Jeśli nie chcemy instalować funkcjonalności związanych z preforkmpm, to przy instalacji tego port’u napisalibyśmy:

sudo port install apache2 -preforkmpm

a chcąc np. dodac funkcjonalność openldap (którą wyczytaliśmy z opisu zwróconego przez polecenie sudo port variants apache2), powstałoby polecenie:

sudo port install apache2 -preforkmpm +openldap

W ten sposób w prosty sposób dobierzemy odpowiednie funkcjonalności względem naszych potrzeb.

Zainstalujmy w końcu svn, czyli port o nazwie subversion z dodatkowymi narzędziami:

sudo port install subversion +tools

Ponieważ nie mam jeszcze żadnego portu zainstalowanego, instalacja tego portu może wymagać instalacji portów, od których działanie portu subversion jest konieczne. Wszystko dzieje się automatycznie i nie jest konieczna nasza ingerencja (lecz nie zawsze o czym może jeszcze napiszę).

Ponieważ port subversion nie jest szczególnie rozbudowanym, jego instalacja może potrwać około 15 minut, gdzie większość tego czasu instalowane będą port zależne (wymagane nie tylko dla tego portu).

Pliki zostaną zapisane w katalogu, który podaliśmy przy instalacji macports i domyślnie jest to katalog /opt/local/bin). Żeby nasza nowa wersja svn była widoczna w systemie, musi się ona znaleźć w ścieżce przeszukiwania PATH wcześniej, niż katalog systemu zawierający svn. W tym celu można zmodyfikować zawartość zmiennej PATH ustawianej przy logowaniu użytkownika w pliku ~/.profile (plik .profile w katalogu domowym użytkownika). Należy tam dopisać (jeśli nie zrobił tego macports):

export PATH=/opt/local/bin:/opt/local/sbin:$PATH

Jeśli okazałoby się, że nadal nie jest wywoływana nasza wersja svn, należy skopiować stare pliki svn i napisać je nowymi, wydając polecenia:

sudo mv /usr/bin/svn* /usr/bin/old_svn

sudo ln -s /opt/local/bin/svn* /usr/bin

PHP5

Instalacja PHP5 będzie równie prosta dzięki macports. Dodatkowo, bez żadnych problemów doinstalujemy rozszerzenia, których potrzebujemy.
Na początek warto spojrzeć jakie warianty oferuje port php5:

sudo port variants php5

Od razu można pominąć wszystkie te, które zawierają w opisie słówko „Obsolete„, ponieważ są to pozostałości po starym systemie kompilacji php5.
Dla podglądu, podam tutaj listę możliwych wariantów:

  • apache: Add Apache 1 web server module
    * conflicts with apache2 no_web
  • [+]apache2: Add Apache 2.2 web server module
    * conflicts with apache no_web
  • debug: Enable debug support (useful to analyze a PHP-related core dump)
  • fastcgi: Add FastCGI web server binary
    * conflicts with no_web
  • ipc: Add semaphore, shared memory and IPC functions
  • no_web: Don’t include any web server support
    * conflicts with apache apache2 fastcgi
  • pear: Add PEAR
  • suhosin: Add Suhosin patch

Jak pokazuje [+] przy apache2, instalując php5 z domyślnymi wariantami, zostanie zainstalowany także serwer apache2. Jeśli nie chcemy tego robić, możemy przy instalacji portu dodać -apache2 (oraz ewentualnie no_web). Wiąże się z tym jednak jeden problem, ponieważ przy kompilowaniu php5 bez apache2, nie zostanie utworzona biblioteka libphp5.so.

Polecam zainstalować port php5 z następującymi parametrami:

sudo port install php5 +pear +suhosin

php extensions

Po zainstalowaniu tego portu, które może potrwać około 30 minut (dużo zależności), warto doinstalować rozszerzenia, z których w php5 korzystamy.

Na mojej liście znalazły się następujące rozszerzenia:

  • php5-apc
  • php5-curl
  • php5-gd
  • php5-iconv
  • php5-mbstring
  • php5-mcrypt
  • php5-mysql
  • php5-openssl
  • php5-soap
  • php5-sockets

Można je zainstalować wszystkie na raz przez polecenie:

sudo port install php5-apc php5-curl php5-gd php5-iconv php5-mbstring php5-mcrypt php5-mysql php5-openssl php5-soap php5-sockets

xdebug

Niezbędne będzie nam jeszcze rozszerzenie xdebug i można je zainstalować jako port php5-xdebug, lecz ja pokusiłem się o instalację najnowszej wersji dostępnej na stronie xdebug.org/download.php.

Ściągamy wersje z svn i postępujemy zgodnie z plikiem README.
Jeśli instalowaliśmy xdebug ręcznie, będziemy musieli dokonać modyfikacji pliku php.ini.

php.ini

Ponieważ po instalacji portu php5, zostały utworzone dwa pliki w katalogu /opt/local/etc/php5, musimy jeden z nich skopiować w tym samym katalogu jako php.ini, np. tak:

sudo cp php.ini-development php.ini

Możemy teraz wprowadzić zmiany jeśli ustawienia domyślne nam nie odpowiadają.

Jeśli kompilowaliśmy xdebug sami, należy dopisać w pliku następujące linie:

[xdebug]
zend_extension=/path/to/xdebug.so

gdzie oczywiście /path/to/xdebug.so podmieniamy na konkretną ścieżkę do xdebug.so.

Jeśli chodzi o sam xdebug, można go trochę bardziej spersonalizować.

Mój konfig wygląda następująco:

[xdebug]
zend_extension=/path/to/xdebug.so
xdebug.file_link_format = „txmt://open?url=file://%f&line=%l”
xdebug.var_display_max_data = 8000
xdebug.var_display_max_children = 256
xdebug.var_display_max_depth = 10
xdebug.collect_params = 4

Apache2

Konfiguracja apache2 który dostarczony jest z MacOSX sprowadza się do zmiany w pliku /private/etc/apache2/httpd.conf linii zawierającej:

LoadModule php5_module

Wystarczy zamienić tą linię na następującą:

LoadModule php5_module /opt/local/apache2/modules/libphp5.so

Jeśli chcemy wykorzystywać apache2 zainstalowanego z port, musimy załadować jego autostart w systemie:

sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist

oraz dokonać podobnej konfiguracji w pliku konfiguracyjnym /opt/local/apache2/conf/httpd.conf.

Ponieważ apache2 nie zmienia się istotnie z wersji na wersję (nie dla użytku dev), ja pozostałem przy wersji dostarczonej z MacOSX.

Zarządzanie apache2 sprowadza się do znajomości poleceń:

sudo httpd -k start
sudo httpd -k stop
sudo httpd -k restart

Możemy też dodać go do autostartu w panelu ustawień systemowych/udostępniania i wybrać udostępnianie www.

Powinniśmy teraz sprawdzić konfigurację php5 (oraz xdebug) i apache2 przez phpinfo() i pogratulować sobie efektu;)

Reklamy

2 Kwiecień, 2010 Posted by | macos, web | , | 5 Komentarzy