<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>Чудо{вищные} заметки</title>
	<atom:link href="https://miracle.rpz.name/feed/" rel="self" type="application/rss+xml" />
	<link>https://miracle.rpz.name</link>
	<description>Sorry for my terrible english. My native language is PHP.</description>
	<lastBuildDate>Fri, 19 Nov 2021 00:07:46 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0-alpha-61579</generator>
<site xmlns="com-wordpress:feed-additions:1">2152447</site>	<item>
		<title>dnsmasq. Custom DNS</title>
		<link>https://miracle.rpz.name/2021/10/10/dnsmasq-dns-server-per-client/</link>
					<comments>https://miracle.rpz.name/2021/10/10/dnsmasq-dns-server-per-client/#respond</comments>
		
		<dc:creator><![CDATA[MiRacLe]]></dc:creator>
		<pubDate>Sun, 10 Oct 2021 13:46:39 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[dns]]></category>
		<guid isPermaLink="false">https://miracle.rpz.name/2021/10/10/dnsmasq-dns-server-per-client/</guid>

					<description><![CDATA[Возникла необходимость ограничить на время доступ к некоторым ресурсам (комнатный телекоммуникационный надзор). Самым первым решением была &#8220;гостевая&#8221; wi-fi сеть. Даже в музейных роутерах это есть из коробки. Решало проблему ограничения доступа &#8220;на время&#8221;, но не к конкретным ресурсам. Следующее очевидное]]></description>
										<content:encoded><![CDATA[
<p>Возникла необходимость ограничить на время доступ к некоторым ресурсам (комнатный телекоммуникационный надзор). Самым первым решением была &#8220;гостевая&#8221; wi-fi сеть. Даже в музейных роутерах это есть из коробки. Решало проблему ограничения доступа &#8220;на время&#8221;, но не к конкретным ресурсам. Следующее очевидное &#8220;админу локалхоста&#8221; решение &#8211; <code>iptables</code>. Есть и доступ по времени и по адресу и даже по имени. Провалилось почти сразу: крупные ресурсы постоянно меняют адреса (имеют неприлично много адресов), детектировать по имени мешает DoH, но главным препятствием был старинный роутер (старая прошивка, древнее ядро, допотопные инструменты) и проблемы с сохранением между перезагрузками кастомных скриптов.</p>



<p>Через несколько итераций цикла &#8220;заблокировал &#8211; снова заработало&#8221; стало понятно что этот бой не в мою пользу. Следующей идеей был свойский DNS-сервер (и отключение DoH) &#8211; сервер должен для некоторых ресурсов возвращать адрес заглушки. Выглядело просто, тем более в прошлом уже приходилось работать с <code>bind</code> и <code>powerdns</code>. В процессе поиска современных альтернатив ВНЕЗАПНО обнаружил, что интернет уже давным давно придумал кучу сервисов, построенных на той идее &#8211; прописываешь у себя сервисный сервер (вместо провайдерских) и получаешь контроль над всеми&nbsp; DNS-запросами + статистику и различные плюшки. Стоимость услуги не оставляет шансов на творчество, лень сдалась готовому решению.</p>



<span id="more-1125"></span>



<p>Около полугода пользования сервисом принесли не только контроль над &#8220;проблемным&#8221; участком сети, но и кучу новых по тем фронтам, где проблем раньше не наблюдалось &#8211; сервис блокирует всякое непотребное (по его мнению), даже то, что явно не просили. Это можно было бы решать настройкой &#8220;стандартного&#8221; DNS  на устройстве, которое не требуется контролировать. Но далеко не каждое устройство позволяет себя настраивать (да и чего уж там &#8211; не у всех устройств есть экран для того чтобы хотя бы узнать текущие настройки).</p>



<p>Когда старинный роутер был заменён на чуть более современный я вспомнил о проблеме с DNS  и решил зайти слегка с другой стороны &#8211; не &#8220;мучить&#8221; все устройства тотальным контролем, а выдавать кастомный dns  только &#8220;провинившимся&#8221; клиентам. И оказалось, что dnsmasq, который используется в прошивке нового роутера это позволяет: к mac-адресам привязываются теги, к тегам &#8211; кастомный опции DHCP, в моём случае dns-server.</p>



<pre class="wp-block-preformatted">dhcp-host=00:00:00:00:00:00,DeVice01,172.16.128.73,infinite,set:managed<br>dhcp-option=tag:managed,option:dns-server,9.9.9.9</pre>



<p>В результате все довольны (ну кроме тех, которые недовольны), всё работает либо так как всем надо, либо не работает так как надо мне.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://miracle.rpz.name/2021/10/10/dnsmasq-dns-server-per-client/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1125</post-id>	</item>
		<item>
		<title>wake up, r8169</title>
		<link>https://miracle.rpz.name/2021/10/03/wake-up-r8169/</link>
					<comments>https://miracle.rpz.name/2021/10/03/wake-up-r8169/#respond</comments>
		
		<dc:creator><![CDATA[MiRacLe]]></dc:creator>
		<pubDate>Sun, 03 Oct 2021 19:24:27 +0000</pubDate>
				<category><![CDATA[DailyWTF]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[penguin-sex]]></category>
		<category><![CDATA[slackware]]></category>
		<guid isPermaLink="false">https://miracle.rpz.name/?p=1117</guid>

					<description><![CDATA[После внеочередного обновления системы случилось странное &#8211; после выхода из hibernate не работает сетевая карта: она &#8220;как бы есть, но её как бы нет&#8221;. Устройство делает вид, что присутствует, система видеть в устройстве надёжного партнёра отказывается. Помогает rmmod r8169 и]]></description>
										<content:encoded><![CDATA[
<p>После внеочередного обновления системы случилось странное &#8211; после выхода из hibernate не работает сетевая карта: она &#8220;как бы есть, но её как бы нет&#8221;. Устройство делает вид, что присутствует, система видеть в устройстве надёжного партнёра отказывается. Помогает <code>rmmod r8169</code> и сразу же <code>modprobe r8169</code>. Такая вот расплата за &#8220;rolling release&#8221;.</p>



<p>Т.к. обновлять уже нечего, релиз свежее некуда, то нужно как-то &#8220;дотянуть&#8221; до фикса своими силами. Т.е. нужно автоматически &#8220;рестартовать&#8221; драйвер карты после выхода из гибернации. &#8220;Решение&#8221; странное, но другого не гуглиться. И вроде бы понятное, но дело ВНЕЗАПНО осложняется тем, что прямо во время обновления были удалены <code>pm-utils</code> с помощью которых ранее уже доводилось реагировать на события по питанию. Все, что удалось нагуглить так или иначе ведёт либо в  мануал к <code>systemd</code>, либо к <code>pm-utils</code>, но в дистрибутиве ни того, ни другого нет.</p>



<p>Были попытки запуска скрипта с <code>acpid</code>, <code>crontab (@restart)</code> и ещё несколько тупиковых идей, но поиск неожиданно привёл на страницу changelog-а дистрибутива, в которым тёмным по светлому было написано: <em>ConsoleKit2 is gone, replaced by elogind (which also takes over for<br>cgmanager and <strong>pm-utils</strong></em>). </p>



<p>Правильным ответом оказался <code>elogind</code>. Однако и тут ждал небольшой сюрприз &#8211; мануал велит использовать <code>/lib/elogind/system-sleep</code> для своих скриптов, однако её не существует. Если же создать, то скрипты в ней не выполняются. Помогло изучение сборочного скрипта для пакета elogind &#8211; оказалось, что не <code>/lib</code>, а <code>/lib64</code>&#8230; (Патрик, ну как так-то ?). <br><br>Итого:</p>



<p><code><pre>#!/bin/bash
# put this at /lib64/elogind/system-sleep/reload_r8169
if [ "$1/$2" = "post/hibernate" ]
then
        rmmod r8169;
        modprobe r8169;
fi
</pre></code></p>



<p>Костыли надёжно приварены к велосипеду, можно выживать дальше.  &#8220;Такой день&#8221; (ц)</p>
]]></content:encoded>
					
					<wfw:commentRss>https://miracle.rpz.name/2021/10/03/wake-up-r8169/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1117</post-id>	</item>
		<item>
		<title>/etc/machine-id contains 0 characters</title>
		<link>https://miracle.rpz.name/2020/08/18/etc-machine-id-contains-0-characters/</link>
					<comments>https://miracle.rpz.name/2020/08/18/etc-machine-id-contains-0-characters/#respond</comments>
		
		<dc:creator><![CDATA[MiRacLe]]></dc:creator>
		<pubDate>Tue, 18 Aug 2020 10:43:38 +0000</pubDate>
				<category><![CDATA[DailyWTF]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[slackware]]></category>
		<category><![CDATA[systemd]]></category>
		<guid isPermaLink="false">https://miracle.rpz.name/?p=1070</guid>

					<description><![CDATA[Наблюдаю такую ошибку: [19099:19099:0818/132537.104960:ERROR:browser_dm_token_storage_linux.cc(100)] Error: /etc/machine-id contains 0 characters (32 were expected) Делаю: cat /etc/machine-idcat: /etc/machine-id: No such file or directory Удивляюсь, иду гуглить. Нахожу описание machine-id, внизу мелким шрифтом указано: The simple configuration file format of /etc/machine-id originates in the /var/lib/dbus/machine-id file introduced]]></description>
										<content:encoded><![CDATA[
<p>Наблюдаю такую ошибку:</p>



<p><code>[19099:19099:0818/132537.104960:ERROR:browser_dm_token_storage_linux.cc(100)] Error: /etc/machine-id contains 0 characters (32 were expected)</code><br><br>Делаю:</p>



<p><code>cat /etc/machine-id<br>cat: /etc/machine-id: No such file or directory</code></p>



<p> Удивляюсь, иду гуглить.<br><br>Нахожу описание <a rel="noreferrer noopener" href="https://www.freedesktop.org/software/systemd/man/machine-id.html" target="_blank">machine-id</a>, внизу <s>мелким шрифтом</s> указано:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>The simple configuration file format of <code>/etc/machine-id</code> originates in the <code>/var/lib/dbus/machine-id</code> file introduced by D-Bus. In fact, this latter file might be a symlink to <code>/etc/machine-id</code>.</p></blockquote>



<p> Ясно всё.</p>



<p><code># ln -s /var/lib/dbus/machine-id /etc/machine-id</code></p>
]]></content:encoded>
					
					<wfw:commentRss>https://miracle.rpz.name/2020/08/18/etc-machine-id-contains-0-characters/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1070</post-id>	</item>
		<item>
		<title>ip in range</title>
		<link>https://miracle.rpz.name/2020/01/29/ip-in-range/</link>
					<comments>https://miracle.rpz.name/2020/01/29/ip-in-range/#comments</comments>
		
		<dc:creator><![CDATA[MiRacLe]]></dc:creator>
		<pubDate>Tue, 28 Jan 2020 22:38:38 +0000</pubDate>
				<category><![CDATA[DailyWTF]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ipv4]]></category>
		<guid isPermaLink="false">https://miracle.rpz.name/?p=1045</guid>

					<description><![CDATA[Возникла производственная необходимость проверить входит ли ip в несколько разрешённых подсетей. Есть проверенное временем решение. В комментариях к ip2long есть примерно олимпиард &#8220;математических&#8221; вариантов проверки. Но в этот раз код должен в выполняться в &#8220;настроечном&#8221; файле, до загрузки всевозможных библиотек,]]></description>
										<content:encoded><![CDATA[
<p>Возникла производственная необходимость проверить входит ли <span title="ipv4 (уточняю для зануд)">ip</span> в несколько разрешённых подсетей. Есть проверенное временем решение. В комментариях к <a href="https://www.php.net/ip2long">ip2long</a> есть примерно олимпиард &#8220;математических&#8221; вариантов проверки. Но в этот раз код должен в выполняться в &#8220;настроечном&#8221; файле, до загрузки всевозможных библиотек, т.е. проверка предполагалась быть максимально &#8220;<span title="«домохозяин» должен иметь возможность изменять диапазон адресов без риска разрушения «домохозяйства»">домохозяйковой</span>&#8221; &#8211; <strong>желательно</strong> без <a href="https://pgregg.com/projects/php/ip_in_range/ip_in_range.phps">как-либо монструозных функций</a> и нашёлся гениальный на мой взгляд способ с использованием <a href="https://www.php.net/version_compare">version_compare</a>:</p>



<pre class="wp-block-code php"><code>if (version_compare($low_ip, $ip) + version_compare($ip, $high_ip) === -2) {
    echo "in range";
}</code></pre>



<p>Это как стереокартинки &#8211; увидеть в <code>127.128.129.130</code> <em>&#8220;PHP-standardized&#8221; version number strings</em> дано не каждому&#8230;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://miracle.rpz.name/2020/01/29/ip-in-range/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1045</post-id>	</item>
		<item>
		<title>IN AAAA</title>
		<link>https://miracle.rpz.name/2019/12/04/in-aaaa/</link>
					<comments>https://miracle.rpz.name/2019/12/04/in-aaaa/#respond</comments>
		
		<dc:creator><![CDATA[MiRacLe]]></dc:creator>
		<pubDate>Wed, 04 Dec 2019 20:32:10 +0000</pubDate>
				<category><![CDATA[DailyWTF]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[ipv6]]></category>
		<guid isPermaLink="false">https://miracle.rpz.name/?p=1037</guid>

					<description><![CDATA[Время от времени сталкиваюсь с  ситуацией в которой с виду  живой и доступный по всем признакам веб-сервис некоторой части клиентов недоступен совсем (что можно объяснить проблемами на стороне клиентов) или вместо ожидаемых ресурсов отдаётся не совсем то, что клиент ждёт]]></description>
										<content:encoded><![CDATA[<p>Время от времени сталкиваюсь с  ситуацией в которой с виду  живой и доступный по всем признакам веб-сервис некоторой части клиентов недоступен совсем (что можно объяснить проблемами на стороне клиентов) или вместо ожидаемых ресурсов отдаётся не совсем то, что клиент ждёт или вовсе &#8220;404&#8221; (что кажется загадочней, но тоже можно было бы объяснить локальной проблемой на стороне клиента &#8211; например &#8220;провайдерской&#8221; заглушкой и т.п. ошибкой в конфигурации устройств на пути к веб-сервису). Однако иногда проблема не может быть решена на стороне клиента. Всё чаще ситуация связана с ipv6 &#8211; в DNS для &#8220;проблемного&#8221; ресурса указан корректный ipv4-адрес (IN A), а ipv6 (IN AAAA) указан кривой(косой). Поскольку ipv6 не особо пока распространён, большинство клиентов кривой адрес не получают и не пользуются им &#8211; для них ваш сервер всегда доступен, а &#8220;жертвы&#8221; сетей, в которых ipv6 нормально маршрутизируются сталкиваются с описанной проблемой &#8211; получают некорректный адрес и в ответ на запрос по этому адресу их посылают на известный адрес&#8230;</p>
<p>Не спешите отправлять несчастного клиента в &#8220;обратитесь к вашему администратору&#8221;, попробуйте поискать проблему &#8220;в себе&#8221;:</p>
<ul>
<li>при наличии ipv6 адреса на вашем сервере &#8211; убедитесь в том, что адрес корректно указан в конфигурации используемого веб-сервера (в противном случае клиент может попадать в &#8220;умолчальный&#8221; server/VirtualHost); проверьте правильно ли указан адрес в DNS (запись типа AAAA) &#8211; в противном случае клиент попадает на чужой сервер или не попадает никуда.</li>
<li>если адреса ipv6 на вашем сервере нет &#8211; убедитесь в том, что в DNS нет записи с типом AAAA</li>
</ul>
<p>P.S.  <br />Здесь могла бы быть реклама сервисов вроде host-tracker.com, которые при удачном стечении обстоятельств могут &#8220;проявить&#8221; проблему. Но её не будет.</p>


<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://miracle.rpz.name/2019/12/04/in-aaaa/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1037</post-id>	</item>
		<item>
		<title>FILTER_NULL_ON_FAILURE</title>
		<link>https://miracle.rpz.name/2019/10/16/filter_null_on_failure/</link>
					<comments>https://miracle.rpz.name/2019/10/16/filter_null_on_failure/#respond</comments>
		
		<dc:creator><![CDATA[MiRacLe]]></dc:creator>
		<pubDate>Wed, 16 Oct 2019 20:57:45 +0000</pubDate>
				<category><![CDATA[DailyWTF]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[php]]></category>
		<guid isPermaLink="false">https://miracle.rpz.name/?p=1030</guid>

					<description><![CDATA[Все врут. И документация php тоже. Обнаружил &#8220;странный&#8221; код, который судя по офф. документации работать так как ожидал автор не должен: $filtered = filter_var($raw, FILTER_VALIDATE_INT, array('flags' =&#62; FILTER_NULL_ON_FAILURE)); В документации флаг FILTER_NULL_ON_FAILURE указан только для фильтра FILTER_VALIDATE_BOOLEAN. Странно конечно, но]]></description>
										<content:encoded><![CDATA[
<p>Все врут. И документация php тоже.</p>



<p>Обнаружил &#8220;странный&#8221; код, который  судя по офф. документации работать так как ожидал автор не должен:</p>


<pre class="php">$filtered = filter_var($raw, FILTER_VALIDATE_INT,  array('flags' =&gt; FILTER_NULL_ON_FAILURE));
</pre>


<p>В <a href="https://www.php.net/manual/en/filter.filters.validate.php">документации</a> флаг <strong><code>FILTER_NULL_ON_FAILURE</code></strong> указан только для фильтра <strong><code>FILTER_VALIDATE_BOOLEAN</code></strong>. Странно конечно, но это не единственная странность в php вообще и в filter в частности. Документированная странность&#8230; Однако код работает именно так, как ожидал автор &#8211; возвращает null если $raw не прошёл валидацию. И не только для INT &#8211; STRING, FLOAT&#8230; IP. В общем все проверенные фильтры возвращают <em>нулл_он_файлуре</em>.</p>



<p>Ну ок, значит автор не совсем&#8230; Но  возможно что-то поправили в свежих версиях php и забыли обновить документацию? Может расчитывать на такое поведение не стоит? Оказывается это работает <a href="https://3v4l.org/v7QZd">минимум с версии 5.2.1</a>.</p>



<p>Не доверяй и проверяй&#8230;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://miracle.rpz.name/2019/10/16/filter_null_on_failure/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1030</post-id>	</item>
		<item>
		<title>Так победим, чо&#8230;</title>
		<link>https://miracle.rpz.name/2019/09/22/%d0%a2%d0%b0%d0%ba-%d0%bf%d0%be%d0%b1%d0%b5%d0%b4%d0%b8%d0%bc-%d1%87%d0%be/</link>
					<comments>https://miracle.rpz.name/2019/09/22/%d0%a2%d0%b0%d0%ba-%d0%bf%d0%be%d0%b1%d0%b5%d0%b4%d0%b8%d0%bc-%d1%87%d0%be/#respond</comments>
		
		<dc:creator><![CDATA[MiRacLe]]></dc:creator>
		<pubDate>Sun, 22 Sep 2019 20:08:14 +0000</pubDate>
				<category><![CDATA[DailyWTF]]></category>
		<category><![CDATA[unix]]></category>
		<guid isPermaLink="false">https://miracle.rpz.name/?p=1023</guid>

					<description><![CDATA[Лавров кратко прокоментировал ситуацию, но цитировать его &#8211; преступно&#8230;]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img fetchpriority="high" decoding="async" width="1102" height="630" data-attachment-id="1026" data-permalink="https://miracle.rpz.name/2019/09/22/%d0%a2%d0%b0%d0%ba-%d0%bf%d0%be%d0%b1%d0%b5%d0%b4%d0%b8%d0%bc-%d1%87%d0%be/slackware-com-blocked-2/" data-orig-file="https://miracle.rpz.name/shared/slackware-com-blocked-1.png" data-orig-size="1102,630" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="slackware-com-blocked" data-image-description="" data-image-caption="" data-medium-file="https://miracle.rpz.name/shared/slackware-com-blocked-1.png" data-large-file="https://miracle.rpz.name/shared/slackware-com-blocked-1.png" src="https://miracle.rpz.name/shared/slackware-com-blocked-1.png" alt="" class="wp-image-1026"/></figure>



<p>Лавров кратко прокоментировал ситуацию, но цитировать его &#8211; преступно&#8230;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://miracle.rpz.name/2019/09/22/%d0%a2%d0%b0%d0%ba-%d0%bf%d0%be%d0%b1%d0%b5%d0%b4%d0%b8%d0%bc-%d1%87%d0%be/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1023</post-id>	</item>
		<item>
		<title>svn: E175002: GET request returned unexpected delta base</title>
		<link>https://miracle.rpz.name/2018/12/01/mod-dav-svn-allow-bulk-updates/</link>
					<comments>https://miracle.rpz.name/2018/12/01/mod-dav-svn-allow-bulk-updates/#respond</comments>
		
		<dc:creator><![CDATA[MiRacLe]]></dc:creator>
		<pubDate>Fri, 30 Nov 2018 21:27:49 +0000</pubDate>
				<category><![CDATA[DailyWTF]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[svn]]></category>
		<guid isPermaLink="false">https://miracle.rpz.name/?p=1002</guid>

					<description><![CDATA[Работая с репозиторием через vpn часто сталкивался с ошибкой, указанной в заголовке поста. &#8220;Лечилось&#8221; как правило повторным выполнением команды. Времени (или желания?!) разобраться с этим как правило не было и видимо к счастью, т.к. проблему собирался искать &#8220;локально&#8221; (была какая-то]]></description>
										<content:encoded><![CDATA[<p>Работая с репозиторием через vpn часто сталкивался с ошибкой, указанной в заголовке поста. &#8220;Лечилось&#8221; как правило повторным выполнением команды. Времени (или желания?!) разобраться с этим как правило не было и видимо к счастью, т.к. проблему собирался искать &#8220;локально&#8221; (была какая-то уверенность в том, что проблема как-то связана с vpn поверх провайдерского l2tp, <a href="https://miracle.rpz.name/2015/10/05/mtu/">MTU</a> &#8220;и вот это вот всё&#8221;©). И вот совершенно случайно выяснилось, что проблема не связана с сетевыми настройками и являет себя только <span title="вдруг 1.8 кому-то тоже покажется новым. в конце 2018 года, ага">&#8220;новым&#8221;</span> клиентам svn, но ВНЕЗАПНО решить её можно настройкой сервера.</p>
<p>Особенно ВНЕЗАПНЫМ это &#8220;открытие&#8221; делает то, что <a href="https://subversion.apache.org/docs/release-notes/1.8.html#serf-skelta-default" target="_blank" rel="noopener noreferrer">настройка описана прямо в changelog mod_dav_svn</a>, но кто ж его читает, правда?</p>
<p>В <code>httpd.conf</code> необходимо добавить:<span id="more-1002"></span></p>
<pre>SVNAllowBulkUpdates Prefer</pre>
<p>Это решает проблему с &#8220;новыми&#8221; клиентами и не ломает работу <span title="а смысл обновлять 1.6 до 1.9, если возможностей достаточно?">&#8220;старых&#8221;</span>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://miracle.rpz.name/2018/12/01/mod-dav-svn-allow-bulk-updates/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1002</post-id>	</item>
		<item>
		<title>&#8220;Удалённое&#8221; включение xdebug на сервере</title>
		<link>https://miracle.rpz.name/2018/06/27/dynamic-loading-xdebug-on-server/</link>
					<comments>https://miracle.rpz.name/2018/06/27/dynamic-loading-xdebug-on-server/#respond</comments>
		
		<dc:creator><![CDATA[MiRacLe]]></dc:creator>
		<pubDate>Wed, 27 Jun 2018 20:35:34 +0000</pubDate>
				<category><![CDATA[dev]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[xdebug]]></category>
		<guid isPermaLink="false">https://miracle.rpz.name/?p=979</guid>

					<description><![CDATA[Известно, что xdebug &#8220;замедляет&#8221; работу сервера. При отладке без него как без рук, но в тоже время отладкой занимаешься сильно реже, чем &#8220;любуешься&#8221; изувеченными стек-трейсами. К браузерам имеются расширения для включения/отключения отладочного режима на открытом в данный момент сайте, но]]></description>
										<content:encoded><![CDATA[<p><a rel="tn" href="https://miracle.rpz.name/shared/phpstorm-interpeter-xdebug.png"><img decoding="async" data-attachment-id="981" data-permalink="https://miracle.rpz.name/2018/06/27/dynamic-loading-xdebug-on-server/phpstorm-interpeter-xdebug/" data-orig-file="https://miracle.rpz.name/shared/phpstorm-interpeter-xdebug-1.png" data-orig-size="697,566" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="phpstorm-interpeter-xdebug" data-image-description="" data-image-caption="" data-medium-file="https://miracle.rpz.name/shared/phpstorm-interpeter-xdebug-1.png" data-large-file="https://miracle.rpz.name/shared/phpstorm-interpeter-xdebug-1.png" class="alignright wp-image-981" src="https://miracle.rpz.name/shared/phpstorm-interpeter-xdebug-1.png" alt="" width="200" height="162" /></a>Известно, что <a href="https://xdebug.org/">xdebug</a> &#8220;замедляет&#8221; работу сервера. При отладке без него как без рук, но в тоже время отладкой занимаешься сильно реже, чем &#8220;любуешься&#8221; изувеченными стек-трейсами. К браузерам имеются расширения для включения/отключения отладочного режима на открытом в данный момент сайте, но &#8220;отключается&#8221; лишь клиентская часть. Захотелось аналогичную кнопку для того, чтобы отключать (точнее включать отключенный по умолчанию) xdebug на сервере &#8211; примерно так же, как реализовано в phpstorm, где xdebug загружается только при запуске скрипта в debug-режиме.</p>
<p>Конечно &#8220;на ходу&#8221; загружать/выгружать xdebug не получится, но можно заранее запустить два процесса &#8211; один &#8220;production&#8221;, второй &#8211; с загруженным xdebug. Остаётся вопрос &#8211; как между ними переключаться ? <span id="more-979"></span></p>
<p>Первая мысль &#8211; сделать виртуальный хост со специальным именем  (https://debug.site.dev) или на отдельном порту (https://site.dev:9999/) . Однако это &#8220;не работает&#8221; в реальной эксплуатации &#8211; просто неудобно переходить на другой сайт и долго и нудно воссоздавать клиентское &#8220;окружение&#8221; в котором возникла проблема, требующая вмешательства с отладчиком. Хочется столкнувшись с ситуацией из которой без отладчика не выпутаться просто нажать на <em>кнопку</em> и &#8220;нутро&#8221; следующего http-запроса уже наблюдать в IDE (как и происходит обычно, когда xdebug постоянно загружен).</p>
<p><a href="https://miracle.rpz.name/shared/browser-xdebug-helper.png"><img decoding="async" data-attachment-id="982" data-permalink="https://miracle.rpz.name/2018/06/27/dynamic-loading-xdebug-on-server/browser-xdebug-helper/" data-orig-file="https://miracle.rpz.name/shared/browser-xdebug-helper.png" data-orig-size="122,173" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="browser-xdebug-helper" data-image-description="" data-image-caption="" data-medium-file="https://miracle.rpz.name/shared/browser-xdebug-helper.png" data-large-file="https://miracle.rpz.name/shared/browser-xdebug-helper.png" class="alignleft size-full wp-image-982" src="https://miracle.rpz.name/shared/browser-xdebug-helper.png" alt="" width="122" height="173" /></a>В общем  отдельная <em>кнопка</em> не нужна &#8211; существующие &#8220;xdebug helper-ы&#8221; к браузерам работают просто &#8211; при включении отладочного режима они устанавливают на текущем домене cookie с именем XDEBUG_SESSION. Эта же cookie поможет отделить &#8220;отладочные&#8221; запросы от &#8220;рабочих&#8221;.</p>
<div class="clearfix">&nbsp;</div>
<p>Итак решение &#8211; запускаем два php-fpm на разных портах, один из них с загруженным xdebug, nginx в зависимости от наличия &#8220;отладочной&#8221; cookie проксирует запросы к разным upstream c php-fpm:</p>
<pre>
#nginx.conf

upstream php72 {
    server 127.0.0.1:9000;
}

upstream php72-xdebug {
    server 127.0.0.1:9001;
}


server {
    server_name site.dev;
    set $phpfpm "php72"; # по умолчанию запросы к "боевому" php
    if ($http_cookie ~* "XDEBUG_SESSION=.+") { # есть отладочная cookie?
        set $phpfpm "php72-xdebug"; 
    }

    if ($args ~* "XDEBUG_SESSION_START=.+") { # есть отладочный параметр в QUERY_STRING?
        set $phpfpm "php72-xdebug"; 
    }
    ...


    location ~ ^(.+\.php)(.*)$ {
        ...
        include fastcgi_params;
        fastcgi_pass $phpfpm;
    }

}</pre>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://miracle.rpz.name/2018/06/27/dynamic-loading-xdebug-on-server/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">979</post-id>	</item>
		<item>
		<title>Удобный доступ к веб-ресурсам в закрытой сети через ssh</title>
		<link>https://miracle.rpz.name/2018/04/25/ssh-socks-with-proxy-pac/</link>
					<comments>https://miracle.rpz.name/2018/04/25/ssh-socks-with-proxy-pac/#respond</comments>
		
		<dc:creator><![CDATA[MiRacLe]]></dc:creator>
		<pubDate>Tue, 24 Apr 2018 21:13:52 +0000</pubDate>
				<category><![CDATA[DailyWTF]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ssh]]></category>
		<guid isPermaLink="false">https://miracle.rpz.name/?p=971</guid>

					<description><![CDATA[Иногда возникает необходимость получить http-доступ к ресурсу, который доступен только в определённой сети, в которой есть доступный ssh-сервер. В том случае когда curl/wget/links/lynx в ssh-сессии недостаточно можно использовать имеющийся доступ для того чтобы открыть socks-прокси и &#8220;автосконфигурировать&#8221; полноценный браузер для]]></description>
										<content:encoded><![CDATA[<p><em>Иногда</em> возникает необходимость получить http-доступ к ресурсу, который доступен только в определённой сети, в которой есть доступный ssh-сервер. В том случае когда curl/wget/links/lynx в ssh-сессии недостаточно можно использовать имеющийся доступ для того чтобы открыть socks-прокси и &#8220;автосконфигурировать&#8221; полноценный браузер для использования полученного туннеля.</p>
<p>Для начала нужно создать туннель и организовать прокси-сервер:</p>
<p><code>ssh user@server -D1080 -f -N</code><br />
Здесь:<br />
* <em>-D1080</em> &#8211; создаёт socks-прокси по адресу 127.0.0.1:1080<br />
* <em>-f -N</em> &#8211; открывает соединение с ssh-сервером, но не открывает shell, отправляет процесс в фоновый режим</p>
<p>Затем создать конфигурационный файл для настройки proxy в браузере:</p>
<p><code><br />
// ~/proxy.pac<br />
function FindProxyForURL(url, host) {<br />
// в chrome alert можно увидеть перейдя по ссылке chrome://net-internals/#events<br />
// alert("url: " + url + ", host: " + host); // полезно для отладки в процессе настройки<br />
if (  shExpMatch(host, "*.private") // все домены в "зоне" private<br />
|| dnsDomainIs(host, "private-resource.local") // конкретный сайт private-resource.local<br />
|| isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0") // любой ip в указанной сети (доступный вам резолвер должен знать про закрытую сеть)<br />
) {<br />
return "SOCKS 127.0.0.1:1080";<br />
}<br />
return "DIRECT";<br />
}</code></p>
<p>Внутри синтаксически правильное подмножество javascript-а, на котором написана единственная функция <em>FindProxyForURL</em>, её задача &#8211; вернуть строку подключения к прокси (в данном случае &#8211; SOCKS) или &#8220;DIRECT&#8221;, если необходимо подключаться напрямую.</p>
<p>Затем в настройках браузера (в системных настройках) указываем путь к созданному файлу в качестве Proxy auto configuration url.</p>
<p><img decoding="async" src="//miracle.rpz.name/shared/2018/kde-proxy-auto-configuration-url.png" align="absmiddle" /></p>
<p>Теперь перечисленные в PAC-файле ресурсы доступны через локальный браузер.</p>
<p>Подробнее:<br />
* <a href="https://en.wikipedia.org/wiki/Proxy_auto-config">Proxy auto configuration</a><br />
* <a href="http://findproxyforurl.com/pac-functions/">Функции доступные в PAC-файле</a><br />
* <a href="http://www.harding.motd.ca/autossh/">autossh</a>, если доступ к ресурсам нужен постоянно.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://miracle.rpz.name/2018/04/25/ssh-socks-with-proxy-pac/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">971</post-id>	</item>
	</channel>
</rss>
