Для CMS Drupal достаточно часто выходят обновления безопасности. Никому не надо доказывать, что такими обновлениями не стоит пренебрегать, ведь от этого зависит целостность вашего сайта и безопасность его посетителей. Если мантейнеры Drupal вносят изменения в код CMS, то обычно выпускается полный тарбол ядра Drupal с уже примененными изменениями. Все это конечно замечательно, закинул тарбол, распаковал и радуйся. Но как быть тем у кого скажем права на файлы и директории отличны от стандартных, или скажем удалены за ненужностью многие его модули? Да и зачем собственно все это делать, если все изменения затрагивают лишь 2 — 3 строчки в 2 — 3 файлах? Для таких случаев есть diff и patch. При разработке ядра Linux также используется diff и patch. Имея версию скажем 3.6, Вы спокойно можете скачать лишь linux-3.7.patch и наложив его на предыдущую версию пользоваться новой, не качая весь тарболл который весит под 80 Мб.
Перейдем обратно к Drupal обновления для которого также можно ставить простым патчингом файлов предыдущих версий. Использование довольно тривиально. Скачиваем сам патч , закидываем его на сервер в корневую директорию сайта и запускаем
patch -p1 --dry-run < drupal.patch
Хочу уточнить, что патч нужно скачивать ваша_версия_drupal -> целевая_версия_drupal. Если Вы скачаете и установите патч 6.0 -> 6.28, а текущая версия 6.20, то могут быть серьезные проблемы.
Для начала запустим patch с ключами —dry-run, чтобы посмотреть примерные последствия после патча. Может быть и так, что был скачан не тот патч, (или что то еще пойдет не так) и чтобы не сломать все что работало, попробуем патч в режиме симуляции применяемых изменений. Другими словами получим вывод всех возможных ошибок (таких как несовпадение строк, ненайденных файлов и т.д) в процессе патча. Реальные изменения в таком режиме не вносятся. Если никаких ошибок нет, то смело запускаем
patch -p1 < drupal.patch
Если у Вас процессе патча появляется запрос указать файл для внесения в него изменений, то у Вас скорее всего не совсем дефолтная инсталяция и целевой файл либо удален, либо Вы переместили его в другую директорию. Если Вы уверены в том, что такого файла нет и не должно быть, то можно поскипать эти запросы. Такое например часто происходит при патчинге корневого .htaccess который в случае использования веб сервера nginx вместо Apache абсолютно бесполезен.
Также могут возникать ошибки связанные с целевыми строками патча и если вы вручную правили код Drupal, то они непременно будут.
Hunk #1 succeeded
Такая ошибка означает, что патч удалось применить, но из — за сдвига строк (последствия ручной правки скриптов) был применен не к той строке которая указана в diff.
Hunk #1 FAILED at #
Здесь уже серьезнее. Не удается применить патч. Скорее всего вы скачали не тот патч и diff не может найти строку которую нужно изменить. Перепроверьте еще раз версии. Файл с подробностями при таких ошибках обычно выводится в виде
saving rejects to file file.rej
После применения патча Ваш Drupal обновлен до последней версии, но не забываем обновить базу данных. Для этого перейдем по ссылке . На этом все, не забывайте обновляться!
Сами патчи можно скачать тут
Также ссылки на патчи есть тут