Aktualizacja Apache
1.
Aktualizacja wersji <2.2.6-r4
Ebuildy Apache przez długi czas korzystały z
/etc/apache2/apache2-builtin-mods do wybierania modułów, które mają
być skompilowane. Miało to jednak szereg wad.
-
Wybór podczas pierwszej instalacji nie był możliwy.
-
Portage nie wiedziało które moduły zostały już zainstalowane. Sprawiało to
problemy szczególnie w przypadku prekompilowanych pakietów.
-
Portage próbowało nadpisać plik apache2-builtin-mods przy
każdej aktualizacji.
W celu naprawienia tej sytuacji zrezygnowaliśmy z pliku
/etc/apache2/apache2-builtin-mods i zaczęliśmy korzystać ze
zmiennych APACHE2_MODULES z USE_EXPAND. Poniższe polecenie pozwoli
na przerobienie starego sposobu wyboru modułów na nowy:
Listing 1.1: Zmiana apache2-builtin-mods na APACHE2_MODULES |
$ echo APACHE2_MODULES=\"$(sed '/^mod_/s/mod_\(.*\)\s\+\(shared\|static\)/\1/;t n;d;:n' /etc/apache2/apache2-builtin-mods)\" >> /etc/make.conf
# rm /etc/apache2/apache2-builtin-mods
# emerge -uva '>=www-servers/apache-2.2.6-r4'
|
Oprócz dodania zmiennej APACHE2_MODULES, dokonaliśmy także porządków we
flagach USE.
-
Wszystkie flagi USE MPM zostały przeniesione do zmiennej APACHE2_MPMS
z USE_EXPAND
-
no-suexec został zastąpiony przez suexec
-
static-modules teraz nazywają się po prostu static
Dokładny opis wszystkich starych i nowych flag USE znajduje się poniżej.
2.
Aktualizacja z <2.0.52-r3
Wprowadzenie
Stan pakietów z Apache i jego modułami zaczął się pogarszać. Liczne problemy
utrudniały pracę grupy opiekującej się Apache oraz pomoc użytkownikom:
-
Konfiguracja dostarczana z Gentoo znacznie różniła się od domyślnej, jakiej
oczekiwała większość użytkowników
-
Wiele modułów używało podobnego kodu, ale robiło wszystko na swój sposób
-
Większość modułów nie była dobrze zarządzana - przede wszystkim z powodu ich
dużej ilości
- Moduły nie posiadały standardowej konfiguracji
-
Niektóre moduły współpracowały z obiema wersjami Apache, ale ebuildy tego
nie obsługiwały
-
Niektóre funkcje Apache nie były dostępne dla użytkowników Gentoo (na
przykład MPM)
- Błędy związane z Apache nawarstwiały się
Dokument ten szczegółowo opisuje bezpieczny dla systemu proces aktualizacji
apache. Deweloperzy oraz zainteresowani zmianami użytkownicy, którzy chcieliby
się dowiedzieć jak zmodyfikować ebuildy, żeby korzystały z nowej eclassy mogą
znaleźć więcej informacji w Apache Developer Reference.
Aktualizowanie
Wprowadziliśmy wiele zmian w działaniu Apache pod Gentoo. Każdy pakiet,
który jest z nim bezpośrednio związany, musi zostać zaktualizowany.
Nie wszystko będzie działać tak jak wcześniej.
Po pierwsze, musimy dowiedzieć się, które pakiety należy zaktualizować.
Możemy skorzystać w tym celu z programu equery, należącego do
pakietu app-portage/gentoolkit.
Listing 2.1: Wyszukiwanie pakietów do aktualizacji |
$ equery depends www-servers/apache
[ Searching for packages depending on www-servers/apache... ]
dev-db/phpmyadmin-2.5.6
dev-php/mod_php-4.3.10
dev-php/phpsysinfo-2.1-r2
net-www/mod_bandwidth-2.0.5
net-www/mod_layout-4.0.1a
net-www/mod_mp3-0.40
net-www/mod_random-2.0
net-www/mod_throttle-3.1.2-r1
net-www/mod_ldap_userdir-1.1.4
www-apache/mod_loopback-1.04
www-apache/mod_watch-3.18
www-apps/viewcvs-0.9.2_p20030430
|
Ważne:
Lista pakietów, które mamy zainstalowane w systemie, może się znacznie różnić od
powyższej. Musimy wykonać podane polecenie samodzielnie.
|
Ostrzeżenie:
W Portage wciąż są moduły i pakiety zależne od Apache, które nie zostały jeszcze
zaktualizowane. Warto poszukać bugów dotyczących wszystkich krytycznych pakietów
związanych z Apache jakich używamy w Bugzilli.
|
Wprowadzone zmiany nie dotyczą wielu aplikacji internetowych, w większości
korzystających z eclassy webapp, która kontroluje ich poprawną
instalację. Można sprawdzić czy zostały zaktualizowane w nowej wersji pakietu.
Ponieważ dodaliśmy kilka nowych flag USE, warto je przejrzeć i dodać odpowiednie
wpisy do /etc/portage/package.use. Więcej informacji znajduje się
w rozdziale Flagi USE dotyczące Apache.
Listing 2.2: Aktualizacja pakietów z nowymi flagami USE |
# emerge --pretend --verbose --update --newuse --deep apache subversion \
mod_php mod_bandwidth mod_layout mod_ldap_userdir mod_loopback mod_mp3 \
mod_random mod_throttle mod_watch
# emerge --verbose --update --newuse --deep apache subversion mod_php \
mod_bandwidth mod_layout mod_ldap_userdir mod_loopback mod_mp3 mod_random \
mod_throttle mod_watch
# emerge --ask --verbose --update --newuse --deep world
|
Teraz musimy ponownie skonfigurować Apache oraz jego moduły. Zaczniemy od
aktualizacji plików w /etc/init.d oraz /etc/conf.d za
pomocą narzędzi etc-update lub dispatch-conf. Nie wyświetlą one
plików konfiguracyjnych apache, ponieważ wszystkie zostały przeniesione do
innych lokalizacji.
Jeśli wprowadziliśmy zmiany do domyślnych plików apache.conf oraz
commonapache.conf, będziemy musieli je przepisać w
/etc/apache{|2}/httpd.conf. Zmieniły się ścieżki do plików
konfiguracyjnych modułów oraz vhostów. Obecnie znajdują się odpowiednio w
katalogach /etc/apache2/modules.d oraz
/etc/apache2/vhosts.d.
Kiedy skończymy przepisywać nasze zmiany do nowych plików konfiguracyjnych,
musimy usunąć poprzednie (lub gdzieś je przenieść). Poprawiony
/etc/init.d/apache{|2} nie pozwala uruchomić apache jeśli wciąż
istnieją, zakładając, że ponownie skonfigurowaliśmy apache korzystając z nowych
plików.
Uwaga:
Wiele modułów, które wcześniej były aktywowane domyślnie, teraz jest
wyłączonych. Jeśli potrzebujemy tych wbudowanych w apache, wystarczy
odkomentować odpowiednie linie w httpd.conf. Jeśli chcemy skorzystać z modułów
zewnętrznych, musimy odszukać w ich konfiguracji IfDefine i dodać ich
nazwy do /etc/conf.d/apache{|2}.
|
Następnie ponownie uruchamiamy apache.
Listing 2.3: Ponowne uruchamianie apache |
# /etc/init.d/apache stop
# /etc/init.d/apache start
|
Jeśli natrafimy na jakieś problemy, powinniśmy przeczytać Apache Troubleshooting Guide.
Jeżeli nie znajdziemy tam rozwiązania, należy je zgłosić w bugzilli. W raporcie błędu trzeba wymienić
używane moduły oraz (jeżeli korzystamy z Apache 2) flagi USE dotyczące MPM z
jakich korzystamy. Pomoc można uzyskać także na kanale
#gentoo-apache w sieci irc.freenode.net.
3.
Flagi USE dotyczące Apache
Apache i jego moduły korzystają z pewnych specyficznych flag USE. Oczywiście
obsługują także bardziej standardowe flagi takie jak ssl, jednak nie
opisujemy ich zachowania, ponieważ nie różni się znacznie od tego w innych
pakietach. Wszystkie obsługiwane flagi można wyświetlić poleceniem emerge
--verbose --pretend apache.
| Flaga USE |
Opis |
| apache2 |
Powinna być ustawiona zawsze gdy korzysta się z Apache serii 2.0. Nie
powinna być ustawiona dla wersji 1.3. Eklasa wykorzystuje tę flagę do
zdefiniowania używanej wersji Apache.
|
| debug |
Dodaje kod pozwalający na uruchomienie podanych poleceń po tym jak proces
potomny zostanie przerwany z błędem. Istnieją już dwa moduły,
mod_whatkilledus i mod_backtrace, które wykorzystują tę
możliwość.
|
| doc |
Instaluje manual i dokumentację.
|
| ldap |
Instaluje mod_ldap i mod_auth_ldap/mod_authnz_ldap.
|
| ssl |
Instaluje mod_ssl.
|
| mpm-itk |
Buduje itk MPM |
| mpm-leader |
Buduje leader MPM
|
| mpm-peruser |
Buduje peruser MPM
|
| mpm-prefork |
Buduje prefork
MPM |
| mpm-threadpool |
Buduje threadpool
MPM
|
| mpm-worker |
Buduje worker MPM
|
| static-modules |
Wbuduje moduły na stałe w binaria apache. Nie będzie wtedy konieczne
korzystanie z LoadModule dla załadowania podstawowych modułów Apache.
|
Uwaga:
Flagi USE mpm-* wzajemnie się wykluczają. Dlatego należy wybrać tylko
jedną flagę mpm-*. Jeśli jej się nie wybierze poprzez USE, automatycznie
zostanie wybrana flaga mpm-prefork lub mpm-worker w zależności od
ustawienia flagi USE threads.
|
4.
Flagi USE wspierany w wersji 2.2.6-r4 i nowszych
Po wprowadzeniu APACHE2_MODULES porządki we flagach USE były
koniecznością. Poniższa lista zawiera wszystkie wspierane flagi USE dla
apache-2.2.6-r4 i nowszych oraz ich odpowiedniki w starszych wersjach.
| Flaga USE |
Dawna flaga USE |
Opis |
| debug |
debug |
Dodaje kod pozwalający na uruchomienie podanych poleceń po tym jak proces
potomny zostanie przerwany z błędem. Istnieją już dwa moduły,
mod_whatkilledus i mod_backtrace, które wykorzystują tę
możliwość.
|
| doc |
doc |
Instaluje manual i dokumentację Apache |
| ldap |
ldap |
Instaluje mod_ldap i mod_authnz_ldap
|
| ssl |
ssl |
Instaluje mod_ssl
|
| static |
static-modules |
Wbuduje moduły na stałe w binaria apache. Nie będzie wtedy konieczne
korzystanie z LoadModule dla załadowania podstawowych modułów Apache.
|
| suexec |
no-suexec |
Instaluje mod_suexec i program pomocniczny suexec
|
| threads |
threads |
Wybiera domyślny MPM jeśli nie wybrano żadnego w APACHE2_MPMS |
Poniższa tabela zawiera wszystkie wspierane wartości zmiennej
APACHE2_MPMS w apache-2.2.6-r4 i flagi USE które je reprezentowały
w poprzednich wydaniach pakietu.
| Flaga USE |
Dawna flaga USE |
Opis |
| event |
mpm-event |
Eksperymentalna wersja domyślnego MPM |
| itk |
mpm-itk |
Pozwala na uruchomienie każdej wirtualnej domeny z innymi wartościami uid i
gid
|
| peruser |
mpm-peruser |
Pozwala na uruchomienie każdego procesu potomnego apache jako inny
użytkownik lub inna grupa. Każdy proces może mieć własny zestaw wirtualnych
domen.
|
| prefork |
mpm-prefork |
Implementacja niewątkowego serwera stron |
| worker |
mpm-worker |
MPM implementujący hybrydowy wielowątkowy i wieloprocesowy serwer stron
|
Poniższa lista zawiera wszystkie wspierane wartości zmiennej
APACHE2_MODULES od wersji apache-2.2.6-r4.
| Flaga |
Opis |
| actions |
Pozwala na uruchamianie skryptów CGI opartych na typie pliku lub metodzie
dostępu
|
| alias |
Pozwala na mapowanie różnych portów do różnych miejsca drzewa dokumentów lub
na przekierowanie URL
|
| asis |
Wysyła pliki zawierające własne nagłówki HTTP |
| auth_basic |
Podstawowe metody uwierzytelniania |
| auth_digest |
Uwierzytelnianie za pomocą sumy MD5 |
| authn_alias |
Dodaje możliwość tworzenia rozszerzonych możłiwości uwierzytelniania
opartych o już istniejące
|
| authn_anon |
Pozwala na anonimowy dostęp do niechronionych danych |
| authn_dbd |
Uwierzytalnie za pomocą bazy SQL |
| authn_dbm |
Uwierzytelnianie za pomocą plików DBM |
| authn_default |
Domyślny sposób uwierzytelniania |
| authn_file |
Uwierzytelnianie poprzez pliki tekstowe |
| authz_dbm |
Uwierzytelnianie grup poprzez pliki DBM |
| authz_default |
Inny domyślny sposób uwierzytelniania |
| authz_groupfile |
Uwierzytelnianie grup za pomocą plików pisanych otwartym tekstem |
| authz_host |
Uwierzytelnianie grup oparte na adresie IP i nazwie hosta |
| authz_owner |
Uwierzytelnianie oparte na prawach dostępu do plików |
| authz_user |
Uwierzytelnianie użytkownika |
| autoindex |
Automatyczne tworzenie indeksów katalogów, podobnego do wyniku polecenia
ls
|
| cache |
Przypisuje cache do adresów |
| cern_meta |
Składnia CERN dla httpd |
| charset_lite |
Pozwala na określenie translacji i kodowania znaków |
| dav |
Dodaje funkcje WebDAV |
| dav_fs |
System plików dla mod_dav |
| dav_lock |
Moduł odcinający dla mod_dav |
| dbd |
Zarządzanie połączeniami z bazą SQL |
| deflate |
Kompresja danych przed wysłaniem |
| dir |
Zapewnia przekierowania dla adresów z nadmiarowym ukośnikiemm
|
| disk_cache |
Zarządzanie cache przypisany do adresów |
| dumpio |
Zapisuje cały ruch I/O |
| env |
Pozwala na modyfikację zmiennych środowiskowych przekazywanych do stron CGI
i SSI
|
| expires |
Tworzy nagłówki Expires i Cache-Control zgodnie z kryteriami podanymi przez
użytkownika
|
| ext_filter |
Przetwarza odpowiedź podanym programem przed wysłaniem jej do klienta
|
| file_cache |
Zapisuje listy statycznych plików w pamięci |
| filter |
Pozwala na filtrowanie treści |
| headers |
Pozwala na zmianę nagłówków w zapytaniach i odpowiedziach HTTP |
| ident |
Poszukiwanie ident zgodne z RFC 1413 |
| imagemap |
Przetwarzanie imagemap po stronie serwera |
| include |
Pozwala na dołączanie plików HTML po stronie serwera |
| info |
Pokazuje informacje o konfiguracji serwera |
| log_config |
Logowanie zapytań wysyłanych do serwera |
| log_forensic |
Dokładniejsze logowanie zapytań wysyłanych do serwera |
| logio |
Logowanie wejściowych i wejściowych bajtów na żądanie |
| mem_cache |
Przypisuje cache do adresów |
| mime |
Pozwala na powiązanie rozszerzeń plików ze sposobami ich obsługi
|
| mime_magic |
Pozwala na wykrycie typu MIME pliku na podstawie kilku bajtów jego
zawartości
|
| negotiation |
Pozwala na negocjowanie zawartości |
| proxy |
Serwer proxy HTTP/1.1 |
| proxy_ajp |
Moduł AJP dla mod_proxy |
| proxy_balancer |
Rozszerzenie mod_proxy pozwalające na zarządzanie obciążeniem |
| proxy_connect |
Rozszerzenie mod_proxy do obsługi zapytań CONNECT |
| proxy_ftp |
Obsługa FTP w mod_proxy |
| proxy_http |
Obsługa HTTP w mod_proxy |
| rewrite |
Pozwala na podmianę adresów w locie
|
| setenvif |
Pozwala na opisanie zapytań za pomocą zmiennych środowiskowych
|
| speling |
Próbuje poprawić źle wpisane adresy
|
| status |
Podaje informacje na temat aktywności i wydajności serwera |
| unique_id |
Nadaje unikalną zmienną dla każdego zapytania
|
| userdir |
Pozwala użytkownikom na posiadanie katalogów domowych |
| usertrack |
Logowanie aktywności użytkownika na stronie |
| version |
Konfiguracja zależna od wersji |
| vhost_alias |
Pozwala na dynamiczną konfigurację wielu wirtualnych domen |
Zawartość tego dokumentu jest rozpowszechniana na podstawie licencji Creative Commons -
Attribution / Share Alike.
|