Показати сторінкуСтарі ревізіїПосилання сюдиЕкспорт до PDFПовернутися наверх Ця сторінка доступна тільки для перегляду. Ви можете продивитися вихідний текст, але не можете змінювати його. Якщо ви вважаєте, що це не вірно, зверніться до адміністратора. ====== Система патчингу ====== install.pl -x проходить по всіх підпапках /usr/local/nodeny/modules і знаходить файли, що починаються з patch або create. Якщо файл починається з patch - вважається, що в ньому є патчі для існуючих файлів. Якщо з create – створення нового файлу. Закінчення імені файлу не має значення. Рекомендується називати також як той файл, який буде патчитися даним. При цьому якщо файл знаходиться поза папкою web, то в імені файлу необхідно вказати шлях щодо кореня NoDeny, замінюючи зліші на точки. Наприклад <code> create.test.pl : мається на увазі, що буде створено файл web/_test.pl create.kernel.test.txt : kernel/_test.txt patch.web.lang.EN.pl : web/lang/_EN.pl </code> Зауважте, що імена результуючих файлів завжди починаються з підкреслення. Вихідні файли ніколи не змінюються! Файли із підкресленнями на початку імені називаються фантомами. Механізм роботи полягає в тому, що якщо NoDeny знаходить фантом – завантажується він, інакше завантажується оригінал. Така схема не призводить до конфліктів при оновленні - оновлюються оригінали, після чого на них накладаються патчі та записуються у фантоми. В одному файлі може бути кілька патчів у різні місця файлу або навіть різні файли. Не рекомендується використовувати один файл для патчингу декількох файлів, хоч і допускається, якщо патчі досить дрібні. Існує 2 методи модифікації файлів: через хуки та через заміни. Хук - спеціальна мітка у файлі, що починається з фрагмента #<HOOK>. Далі йде ім'я хука. Патч є вказівкою замінити хук на такий фрагмент коду. При оновленні системи, положення хука може зміниться, але це не вплине на патч. він застосовується не за місцем розташування, а на ім'я хука. Якщо ж у цільовому файлі у потрібному місці немає хука – доведеться скористатися методом заміни. Це не рекомендований спосіб (краще зверніться до автора із проханням створити потрібні хуки). \\ Формат патчу <code> #<ACTION> file=>'web/lang/RU.pl',hook=>'end' $test_test = { msg => 'Yes!!!' }; </code> Рядок, що починається з #<ACTION>, вказує на початок патчу. У цьому рядку повинен бути параметр file - ім'я файлу, який буде модифікуватися. Якщо застосовується метод хуків, то параметр hook вказує ім'я хука. У даному прикладі у файлі /usr/local/nodeny/web/lang/RU.pl знайде хук end і в його позицію буде вставлено фрагмент починаючи з 2-го рядка прикладу. \\ Приклад методу замін <code> #<ACTION> file=>'web/lang/RU.pl',replace=>'' $test_test = { msg => 'Yes!!!' }; #<REPLACE> $test_test = { msg => 'No!!!' }; </code> За цим прикладом буде знайдено фрагмент до #<REPLACE> і замінено фрагмент після #<REPLACE>. Якщо фрагмент не буде знайдений або буде знайдено більше одного збігу - установка модулів перерветься. \\ ---- \\ У деяких випадках патчі потрібно накладати в певному порядку або ж не накладати якщо цільового файлу не існує (припустимо, поточний модуль вносить зміни до інших модулів, деякі з яких можуть бути не встановлені в даній системі). Застосування патча після патчів модуля dhcp <code> #<ACTION> file=>'web/ajUserIpList.pl',hook=>'show_mac',after=>'dhcp' push @mac_lines, 'Hello'; </code> У цьому прикладі, якщо модуль dhcp існує, то будуть застосовані спочатку його патчі до файлу web/ajUserIpList.pl, а потім поточний патч. В іншому випадку просто буде застосований поточний. Обов'язкова вимога існування модуля xxx <code> #<ACTION> file=>'web/yyy.pl',hook=>'zzz',require=>'xxx' Show 'ok'; </code> У параметрі require або after можна вказувати кілька модулів у такому вигляді: <code> require=>['module1', 'module2'] </code> nodeny/docs/patching.txt Востаннє змінено: 25/01/2023 22:15повз Method Увійти