<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="uk">
	<id>https:///index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D0%B0%D1%82%D1%87%D0%B8%D0%BD%D0%B3_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2</id>
	<title>Патчинг файлов - Історія редагувань</title>
	<link rel="self" type="application/atom+xml" href="https:///index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D0%B0%D1%82%D1%87%D0%B8%D0%BD%D0%B3_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2"/>
	<link rel="alternate" type="text/html" href=""/>
	<updated>2026-05-05T12:28:18Z</updated>
	<subtitle>Історія редагувань цієї сторінки в вікі</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id></id>
		<title>Sv в 06:58, 19 вересня 2020</title>
		<link rel="alternate" type="text/html" href=""/>
		<updated>2020-09-19T06:58:52Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторінка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;install.pl -x проходит по всем подпапкам /usr/local/nodeny/modules и находит файлы, начинающиеся с patch или create. Если файл начинается с patch - считается, что в нем находятся патчи для существующих файлов. Если с create - создание нового файла.&lt;br /&gt;
&lt;br /&gt;
Окончание имени файла не имеет значения. Рекомендуется называть также как тот файл, который будет патчится данным. При этом, если файл находится вне папки web, то в имени файла необходимо указать путь относительно корня NoDeny, заменяя слеши на точки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
create.test.pl              : подразумевается, что будет создан файл web/_test.pl&lt;br /&gt;
create.kernel.test.txt      : kernel/_test.txt&lt;br /&gt;
patch.lang.EN.pl            : web/lang/_EN.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что имена результирующих файлов всегда начинаются с подчеркивания. Исходные файлы никогда не изменяются! Файлы с подчеркиваниями в начале имени называются фантомами. Механизм работы заключается в том, что если NoDeny находит фантом - загружается он, иначе загружается оригинал.&lt;br /&gt;
&lt;br /&gt;
Такая схема не приводит к конфликтам при обновлении - обновляются оригиналы, после чего на них накладываются патчи и записываются в фантомы.&lt;br /&gt;
&lt;br /&gt;
В одном файле может быть несколько патчей в разные места файла или даже разные файлы. Не рекомендуется использовать один файл для патчинга нескольких файлов, хотя и допускается, если патчи довольно мелкие.&lt;br /&gt;
&lt;br /&gt;
Существует 2 метода модификации файлов: через хуки и через замены. Хук - специальная метка в файле, начинающаяся с фрагмента #&amp;lt;HOOK&amp;gt;. Далее идет имя хука. Патч представляет собой указание заменить хук на такой-то фрагмент кода.&lt;br /&gt;
&lt;br /&gt;
При обновлении системы, положение хука может изменится, но это не повлияет на патч т.к. он применяется не по местоположению, а по имени хука.&lt;br /&gt;
&lt;br /&gt;
Если же в целевом файле в нужном месте нет хука - придется воспользоваться методом замены. Это не рекомендованный способ (лучше обратитесь к автору с просьбой создать нужные хуки).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Формат патча&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&amp;lt;ACTION&amp;gt; file=&amp;amp;gt;'web/lang/RU.pl',hook=&amp;amp;gt;'end'&lt;br /&gt;
$test_test = {&lt;br /&gt;
    msg =&amp;amp;gt; 'Yes!!!'&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Строка, начинающаяся с #&amp;lt;ACTION&amp;gt;, указывает на начало патча. В этой строке должен присутствовать параметр file - имя файла, который будет модифицироваться. Если применяется метод хуков, то в параметре hook указывается имя хука.&lt;br /&gt;
&lt;br /&gt;
В данном примере в файле /usr/local/nodeny/web/lang/RU.pl будет найдет хук end и в его позицию будет вставлен фрагмент начиная со 2й строки примера.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пример метода замен&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&amp;lt;ACTION&amp;gt; file=&amp;gt;'web/lang/RU.pl',replace=&amp;gt;''&lt;br /&gt;
$test_test = {&lt;br /&gt;
    msg =&amp;amp;gt; 'Yes!!!'&lt;br /&gt;
};&lt;br /&gt;
#&amp;lt;REPLACE&amp;gt;&lt;br /&gt;
$test_test = {&lt;br /&gt;
    msg =&amp;amp;gt; 'No!!!'&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
По данному примеру будет найден фрагмент до #&amp;lt;REPLACE&amp;gt; и заменен на фрагмент после #&amp;lt;REPLACE&amp;gt;. Если фрагмент не будет найден либо же будет найдено более чем одно совпадение - установка модулей прервется.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В некоторых случаях патчи нужно накладывать в определенном порядке либо же не накладывать если целевого файла не существует (допустим, текущий модуль вносит изменения в другие модули, некоторые из которых, могут быть не установлены в данной системе).&lt;br /&gt;
&lt;br /&gt;
Применение патча после патчей модуля dhcp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&amp;lt;ACTION&amp;gt; file=&amp;amp;gt;'web/ajUserIpList.pl',hook=&amp;amp;gt;'show_mac',after=&amp;amp;gt;'dhcp'&lt;br /&gt;
    push @mac_lines, 'Hello';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В данном примере, если модуль dhcp существует, то будут применены сначала его патчи к файлу web/ajUserIpList.pl, а затем текущий патч. В противном случае просто будет применен текущий.&lt;br /&gt;
&lt;br /&gt;
Обязательное требование существования модуля xxx&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&amp;lt;ACTION&amp;gt; file=&amp;amp;gt;'web/yyy.pl',hook=&amp;amp;gt;'zzz',require=&amp;amp;gt;'xxx'&lt;br /&gt;
    Show 'ok';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В параметре require или after можно указывать несколько модулей в таком виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require=&amp;amp;gt;['module1', 'module2']&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sv</name></author>
	</entry>
</feed>