Własny patch do nowej wersji Drupala

Z każdym wydaniem nowej wersji Drupala, oprócz archiwum tar dostarczany jest patch pozwalający szybko uaktualnić system.

Prawdopodobnie większość z nas podczas archiwizacji, najpierw usuwa zbiory i katalogi z wyjątkiem konfiguracyjnych, katalogu files, własnych skórek itp. Następnie rozpakowuje nowe archiwum tak aby zastąpiło usunięte zbiory. Taki proces aktualizacji może nieść za sobą ryzyko usunięcia potrzebnych danych (administratorzy dobrze wiedzą, że archiwizacja danych i bezpieczne podejście do tematu aktualizacji niestety nie jest powszechne) i w przypadku aktualizacji wielu stron jest nieco kłopotliwe.

Dostarczany oryginalnie przez Drupala patch ma pewną wadę – po jego wykonaniu na karcie Raport o stanie witryny dalej widnieje informacja o posiadaniu przez nas starszej (nieuaktualnionej) wersji.

Prawdopodobnie dlatego, że w “łacie” ujęte są tylko te pliki w których dokonano zmian, a nie jest generowany patch na podstawie wszystkich różnic w archiwach. Ale jest to tylko mój domysł nie poparty żadnym wczytaniem się w dokumentację.

Postanowiłem wykonać własnego patcha.

Wykluczenie katalogu sites

Podczas porównania dwóch archiwów będę wykluczał całą kartotekę sites. Dlaczego? Bo sites/default/ powinno mieć ustawione atrybuty tylko do odczytu, zawiera konfigurację naszej strony, nasze moduły i skórki. Próba uaktualnienia sites/default/ po pierwsze zatrzymała by nam skrypt patcha (ze względu na zabezpieczenie przed zapisem), a po drugie skoro w środku znajdują się tylko nasze indywidualne ustawienia i konfiguracje to nie widzę potrzeby go ruszać.

Nie zwalania nas to oczywiście z prześledzenia informacji dostarczanej wraz z nowym wydaniem Drupala, czy na pewno nic się nie zmieniło w w/w kartotece.

Przygotowanie patcha

Potrzebuje do tego celu dwa ostatnie wydania Drupala, oba rozpakowuje w jednej kartotece otrzymując taką strukturę:

user@aristo300:~/tmp/DRUPAL$ ls -l
drwxr-xr-x 9 user nobody    4096 2008-07-09 23:55 drupal-6.3
-rw-r--r-- 1 user nobody 1061653 2008-07-09 23:55 drupal-6.3.tar.gz
drwxr-xr-x 9 user nobody    4096 2008-08-14 02:10 drupal-6.4
-rw-r--r-- 1 user nobody 1068473 2008-08-14 02:10 drupal-6.4.tar.gz

Teraz usuwam z obu wydań katalog sites:

user@aristo300:~/tmp/DRUPAL$ rm -rvf drupal-6.3/sites/
user@aristo300:~/tmp/DRUPAL$ rm -rvf drupal-6.4/sites/

Zmieniam katalog na z najświeższym wydaniem, i uruchamiam komendę diff. Ustawienie się wewnątrz katalogu spowoduje, że patch będzie mógł być uruchamiany z parametrem -p0.

user@aristo300:~/tmp/DRUPAL$ cd drupal-6.4/

Tworzę patcha:

diff -Nurp ../drupal-6.3 . > ../drupal-6.3_6.4.patch

Uaktualnienie strony

Jeżeli mamy już przygotowaną “łatę” to wystarczy skopiować ją do kartoteki z zawartością strony i wykonać polecenie:

patch -p0 < drupal-6.3_6.4.patch

gdybyśmy chcieli wcześniej zasymulować proces aktualizacji to wydajemy powyższą komendę z parametrem --dry-run.

patch -p0 < drupal-6.3_6.4.patch --dry-run

Rzut oka na wynik, jeżeli wszystko przebiegło pomyślnie to uruchamiamy bez parametru --dry-run.

Jeśli mamy kilka (kilkanaście) serwisów to uważam, że wykonanie w taki sposób aktualizacji zaoszczędzi nam trochę czasu i usprawni ten proces.

Przypominam, że przed uruchomieniem “patcha” należy zrobić kopię bezpieczeństwa bazy danych oraz plików strony. Uruchomić skrypt update.php itd wykonać wszystkie procedury związane z aktualizacją.

Podany opis dotyczy aktualizacji z wersji 6.3 do 6.4.
Orginalna wersja artykułu na stronie http://krzysztofglaz.eu.org

Sposób wyświetlania odpowiedzi

Wybierz preferowany sposób wyświetlania odpowiedzi i kliknij "Zachowaj ustawienia", by wprowadzić zmiany.

rsync

Nie wiem, czy odkrywam tym Amerykę, ale mój proces aktualizacji instalacji Drupala polega na rozpakowaniu nowego tara, przejściu do nowoutworzonego katalogu ze świeżym Drupalem i uruchomieniu stamtąd w Terminalu (OS X w moim przypadku) polecenia zsynchronizowania plików z moją nieaktualną instalacją:

rsync -av * /Users/userna­me/Sites/projec­tX/

Wszystko działa, Drupal rozpoznaje nową wersję instalacji, settings.php w katalogu sites jest niezmieniony. Oczywiście rsync działa też zdalnie, i przez ssh.

Portret użytkownika Erewhon

Faktycznie rsync nawet nie

moderator

Faktycznie rsync nawet nie wziąłem pod uwagę, ale to pewnie dlatego, że wzorowałem się na patch-u.

A tak na marginesie na tym prostym przykładzie widać jak systemy z rodziny unix są elastyczne.

A jakaś alternatywa dla osób

A jakaś alternatywa dla osób używających Winde? Czy wystarczy podmienić pliki starej wersji Drupala nową (usuwając jedynie katalog sites)?

A ja się zastananawiałem,

A ja się zastananawiałem, dlaczego po patchowaniu nie widze podniesienia wersji,teraz rozumiem.Ciekawy jestem w ktorym pliku jest zapisana ta informacja.

w plikach *.info w

w plikach *.info w katalogach modułów

Z pozdrowieniami racho

mantoo

a co jesli z nowa wersja ida zmiany w schemacie bazy danych ? kiszka?

Portret użytkownika Erewhon

Zacytuje jedno z ostatnich

moderator

Zacytuje jedno z ostatnich zdań w tym artykule:

Przypominam, że przed uruchomieniem “patcha” należy zrobić kopię bezpieczeństwa bazy danych oraz plików strony. Uruchomić skrypt update.php itd wykonać wszystkie procedury związane z aktualizacją.

Skrypt update.php aktualizuje bazę do nowej wersji.