<?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/"
	>

<channel>
	<title>Erinome Lane &#187; openwrt</title>
	<atom:link href="https://tt.erinome.net/tag/openwrt/feed" rel="self" type="application/rss+xml" />
	<link>https://tt.erinome.net</link>
	<description>a bit of this, a bit of that...</description>
	<lastBuildDate>Mon, 23 Mar 2026 12:51:51 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>OpenWrt, libiconv и Full Language Support</title>
		<link>https://tt.erinome.net/2014/12/758</link>
		<comments>https://tt.erinome.net/2014/12/758#comments</comments>
		<pubDate>Tue, 23 Dec 2014 08:52:58 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[openwrt]]></category>
		<category><![CDATA[грабли]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=758</guid>
		<description><![CDATA[Бывают ситуации, когда в OpenWrt не хватает полной языковой поддержки. Особенно, когда дело касается работы с кириллицей в кодировке UTF-8. Для таких случаев в OpenWrt предусмотрена неурезанная версия библиотеки libiconv-full, а также глобальная опция Compile with full language support. Вот &#8230; <a href="https://tt.erinome.net/2014/12/758">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Бывают ситуации, когда в <strong>OpenWrt</strong> не хватает полной языковой поддержки. Особенно, когда дело касается работы с кириллицей в кодировке UTF-8. Для таких случаев в <strong>OpenWrt</strong> предусмотрена неурезанная версия библиотеки <strong>libiconv-full</strong>, а также глобальная опция <em>Compile with full language support</em>.</p>
<p>Вот только скомпилировав прошивку с данными опциями выясняется, что никакой поддержки кириллических кодировок как не было, так и нет.<span id="more-758"></span></p>
<p>Разгадка кроется в малозаметном патче к <strong>libiconv-full</strong> под названием <em>100-strip-charsets.patch</em>. Пролистав его можно с удивлением обнаружить, что пакет, вроде бы имеющий в названии слово &#8220;full&#8221;, ничего общего с этим словом не имеет: доблестные разработчики <strong>OpenWrt</strong> в &#8220;полной&#8221; версии <strong>libiconv</strong> просто выпилили 97% всех кодировок, включая все упоминания кириллических, и оставив лишь несколько западноевропейских.</p>
<p>Наиболее простое решение &#8211; просто удалить патч <em>100-strip-charsets.patch</em> из пакета <strong>libiconv-full</strong>. Но так размер данной библиотеки увеличится в несколько раз! По этой причине мы сделали исправленную версию исходного патча, в которой оставлены кириллические кодировки, но вырезано большинство прочих.</p>
<p>Скачать исходный код модифицированного <strong>libiconv-full</strong> можно из <a href="http://fs.erinome.net/openwrt/packages/libiconv-full" target="_blank">нашего архива</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2014/12/758/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>davfs2 и загрузка файлов в OpenWrt</title>
		<link>https://tt.erinome.net/2014/12/753</link>
		<comments>https://tt.erinome.net/2014/12/753#comments</comments>
		<pubDate>Tue, 23 Dec 2014 08:07:46 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[openwrt]]></category>
		<category><![CDATA[грабли]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=753</guid>
		<description><![CDATA[В опубликованной на днях статье про резервное копирование в WebDav мы касались того, что davfs2 из репозитория OpenWrt не всегда способен успешно загружать файлы в удаленное хранилище, и зачастую они заканчивают свой путь в каталоге lost+found. При этом чтение файлов &#8230; <a href="https://tt.erinome.net/2014/12/753">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>В опубликованной на днях статье про <a href="http://tt.erinome.net/2014/12/742" target="_blank">резервное копирование в WebDav</a> мы касались того, что <strong>davfs2</strong> из репозитория <strong>OpenWrt</strong> не всегда способен успешно загружать файлы в удаленное хранилище, и зачастую они заканчивают свой путь в каталоге <em>lost+found</em>. При этом чтение файлов из <strong>WebDav</strong>, получение их атрибутов, а также и удаление &#8211; всегда работает корректно.</p>
<p>Как оказалось, эта проблема имеет простое решение.<span id="more-753"></span></p>
<p>Логирование в <strong>davfs2</strong>, размещенном на роутере под управлением <strong>OpenWrt</strong>, организовано не самым удобным образом. Лог всегда пишется в системный кольцевой буфер, прочитать который можно при помощи команды <strong>logread</strong>, и объем оного весьма незначителен. А отладочные сообщения <strong>davfs2</strong> в зависимости от выбранного уровня отладки либо слишком подробны и многочисленны, либо слишком кратки и по ним ничего невозможно понять.</p>
<p>Так или иначе, при работе стандартного пакета <strong>davfs2</strong> с выставленным в <em>davfs2.conf</em> параметре <em>debug most</em> в системном логе можно наблюдать следующие строки при попытке загрузки файла в удаленное хранилище:</p>
<pre class="console" style="font-size: 75%">Mon Dec 22 19:15:36 2014 mark.debug syslog: Running pre_send hooks
Mon Dec 22 19:15:36 2014 mark.debug syslog: Sending request headers:
Mon Dec 22 19:15:36 2014 mark.debug syslog: PUT /testfile HTTP/1.1
User-Agent: davfs2/1.5.2 neon/0.30.0
Connection: TE
TE: trailers
Host: webdav.yandex.ru
Transfer-Encoding: chunked
Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Mon Dec 22 19:15:36 2014 mark.debug syslog: Sending request-line and headers:
Mon Dec 22 19:15:36 2014 mark.debug syslog: Sending request body:
Mon Dec 22 19:15:36 2014 mark.debug syslog: Request body provider failed with 
Mon Dec 22 19:15:36 2014 mark.debug syslog: -
Mon Dec 22 19:15:36 2014 mark.debug syslog: 1
Mon Dec 22 19:15:36 2014 mark.debug syslog: 
Mon Dec 22 19:15:36 2014 mark.debug syslog: sess: Closing connection.
Mon Dec 22 19:15:36 2014 mark.debug syslog: sess: Connection closed.
Mon Dec 22 19:15:36 2014 mark.debug syslog: Request ends, status 
Mon Dec 22 19:15:36 2014 mark.debug syslog: 0
Mon Dec 22 19:15:36 2014 mark.debug syslog:  class 
Mon Dec 22 19:15:36 2014 mark.debug syslog: 0
Mon Dec 22 19:15:36 2014 mark.debug syslog: xx, error line:
Mon Dec 22 19:15:36 2014 mark.debug syslog: Failed reading request body file: Bad address
Mon Dec 22 19:15:36 2014 mark.debug syslog: 
Mon Dec 22 19:15:36 2014 mark.debug syslog: Running destroy hooks.
Mon Dec 22 19:15:36 2014 mark.debug syslog: Request ends.
Mon Dec 22 19:15:36 2014 mark.debug syslog: tidy: neon error
Mon Dec 22 19:15:36 2014 mark.debug syslog:       Failed reading request body file: Bad address</pre>
<p>Как видим, выводится не самая информативная ошибка <em>Bad address</em>, происходящая из используемой в <strong>davfs2</strong> для коммуникации библиотеки <strong>neon</strong> &#8211; текста <em>Failed reading request body file</em> в исходных кодах <strong>davfs2</strong> найти не получится.</p>
<p>После некоторой изыскательной деятельности удалось обнаружить, что причина кроется в том простом факте, что библиотека <strong>neon</strong> и пакет <strong>davfs2</strong> по умолчанию компилируются с разными параметрами. Так, в <em>Makefile</em> пакета <strong>neon</strong> указаны следующие флаги:</p>
<pre class="console">TARGET_CPPFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE</pre>
<p>А в <em>Makefile</em> пакета <strong>davfs2</strong> такая строка отсутствует. И именно это отличие приводит к фатальной нестыковке, когда дело доходит до загрузки файлов в удаленное хранилище. Простым добавлением означенных флагов в <em>Makefile</em> проблема полностью решается и <strong>davfs2</strong> начинает всегда корректно загружать файлы в <strong>WebDav</strong>.</p>
<p>PS: Кстати, интересно отметить, что данная проблема не была зафиксирована в <s>устаревшей</s> версии <strong>davfs2</strong>, размещенной в <a href="http://fs.erinome.net/openwrt/packages/davfs2" target="_blank">нашем архиве</a> &#8211; в нашем случае <em>Makefile</em> содержал все необходимые флаги для корректной сборки. Вопрос, отчего требуемые флаги потерялись в <em>Makefile</em> из официального репозитория OpenWrt, оставим на совести его мейнтейнеров. Да, кстати, версия <strong>davfs2</strong> в нашем хранилище теперь обновлена до актуальной 1.5.2. А также приложен дополнительный патч, корректирующий вывод отладочного текста в системный лог.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2014/12/753/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Резервное копирование в WebDav на OpenWrt</title>
		<link>https://tt.erinome.net/2014/12/742</link>
		<comments>https://tt.erinome.net/2014/12/742#comments</comments>
		<pubDate>Mon, 22 Dec 2014 13:18:13 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[openwrt]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=742</guid>
		<description><![CDATA[Рассмотрим возможность создания резервного копирования в облачное хранилище WebDav на примере Яндекс.Диска при помощи виртуальной файловой системы davfs2, утилиты cadaver и небольшого PHP-скрипта. Может возникнуть закономерный вопрос: зачем изобретать велосипед и почему бы не использовать обычный rsync для копирования данных &#8230; <a href="https://tt.erinome.net/2014/12/742">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Рассмотрим возможность создания резервного копирования в облачное хранилище <strong>WebDav</strong> на примере Яндекс.Диска при помощи виртуальной файловой системы <strong>davfs2</strong>, утилиты <strong>cadaver</strong> и небольшого <strong>PHP</strong>-скрипта.<span id="more-742"></span></p>
<p>Может возникнуть закономерный вопрос: зачем изобретать велосипед и почему бы не использовать обычный <strong>rsync</strong> для копирования данных напрямую в <strong>davfs2</strong>? Ответ простой: это&#8230; не работает как надо. Во всяком случае, с Яндекс.Диском, и если запускать процедуру на роутере под управлением <strong>OpenWrt</strong>.</p>
<p>То ли из-за особой неторопливости Яндекс.Диска, то ли из-за особенностей <strong>davfs2</strong>, но при попытке копирования большого количества файлов (а иногда такое случается и с единичными файлами!), большая их часть оказывалась в каталоге <em>lost+found</em>, служащем для локальных копий файлов, загрузка которых в <strong>WebDav</strong> провалилась. И всё это несмотря на достаточный объем выделенного кэша, стандартные настройки <strong>davfs2</strong> для повторной загрузки файлов в случае ее неудачи, и довольно широкого канала связи.</p>
<p>Итак, для самописного и более надежного бэкапера в WebDav нам понадобятся:</p>
<ol>
<li><strong>davfs2</strong> &#8211; стандартный пакет из репозитория OpenWrt;</li>
<li><strong>cadaver</strong> &#8211; модифицированная версия утилиты для прямого копирования файлов в WebDav <a href="http://fs.erinome.net/openwrt/packages/cadaver" target="_blank">из нашего архива</a>;</li>
<li><strong>php-cli</strong> &#8211; стандартный интерпретатор PHP, при помощи которого мы сгенерируем набор команд для cadaver&#8217;а.</li>
</ol>
<p>Добавленные в <strong>cadaver </strong>патчи позволяют при помощи нового ключа <strong>-F</strong> пропускать проверку подлинности сертификатов (а под <strong>OpenWrt </strong>у нас все используемые в WebDav SSL-сертификаты считаются подозрительными и требуют ручного подтверждения), а также указывать с помощью ключа <strong>-n</strong> нестандартный путь к хранилищу паролей для автоматической авторизации на WebDav-сервере. Внесенные изменения позволяют создать для <strong>cadaver</strong> файл с набором команд, которые будут выполняться автоматически без участия человека.</p>
<p>Теперь обратим внимание на скрипт <a href="http://fs.erinome.net/openwrt/scripts/phpsync.php" target="_blank">phpsync.php</a>.</p>
<p>У этого скрипта две задачи:<br />
Во-первых, он отвечает за &#8220;обратную синхронизацию&#8221; &#8211; в скрипте производится проверка, все ли находящиеся в WebDav-хранилище файлы продолжают находиться на локальном диске. В случае обнаружения в удаленном хранилище файлов, которые были локально удалены, скрипт удалит их и из WebDav &#8211; обычным вызовом <em>unlink()</em> на смонтированном разделе davfs2.<br />
Во-вторых, скрипт генерирует набор команд для <strong>cadaver</strong>&#8216;а для загрузки локально измененных или отсутствующих в WebDav файлов в удаленное хранилище.<br />
В скрипте есть ряд параметров, которые нужно настроить. Так, параметром <em>$outfile</em> определяется путь к файлу, в который будет записан сгенерированный набор команд, в параметре <em>$remotebase</em> необходимо указать точку монтирования <strong>davfs2</strong>. Также в нем указывается адрес WebDav сервера, к которому должен подключаться <strong>cadaver</strong> &#8211; по умолчанию это <em>https://webdav.yandex.ru</em>. Затем следует указать каталоги, которые требуется синхронизировать, например:</p>
<pre class="console">phpsync("/srv/content","/backup/content");
phpsync("/srv/otherdir","/backup/otherdir");</pre>
<p>Так будут сгенерирован набор команд для отражения локальных каталогов <em>/srv/content</em> и <em>/srv/otherdir</em> в удаленные WebDav-каталоги <em>/backup/content</em> и <em>/backup/otherdir</em> соответственно. Обратите внимание &#8211; удаленные пути указываются относительно корня <strong>WebDav</strong>-диска, без привязки к локальной точке монтирования <strong>davfs2</strong>!</p>
<p>После этого следует создать парольный файл для <strong>cadaver</strong>. Это обычный текстовый документ, содержающий строку следующего вида:</p>
<pre class="console">machine webdav.yandex.ru login вашлогин password вашпароль</pre>
<p>Наконец, создаем <strong>ash</strong>-скрипт, который мы будем вызывать через кронтаб:</p>
<pre class="console">#!/bin/ash
/usr/bin/php-cgi -f /srv/phpsync.php

if [ -e "/var/.phpsync.list" -a $(wc -l "/var/.phpsync.list" | awk '{print $1;}') -gt 2 ]
then
        /usr/bin/cadaver -F -r "/var/.phpsync.list" -n "/srv/auth.rc"
fi
</pre>
<p>Подставляем ваши значения:</p>
<ul>
<li><strong>/srv/phpsync.php</strong> &#8212; путь к PHP-скрипту;</li>
<li><strong>/srv/auth.rc</strong> &#8212; путь к парольному файлу;</li>
<li><strong>/var/.phpsync.list</strong> &#8212; путь к файлу с набором команд для cadaver.</li>
</ul>
<p>Не забываем сделать скрипт исполняемым, выполнив команду <strong>chmod +x</strong> на данном файле. Теперь мы можем проверить работоспособность копирования, запустив этот скрипт. В терминал при этом будет выведен результат работы PHP-генератора, а также будет показан процесс выполнения задания cadaver&#8217;ом.</p>
<p>Если все завершилось успешно &#8211; теперь можем добавить автоматический вызов данного скрипта через кронтаб в ночное время и более не беспокоиться о создании резервных копий.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2014/12/742/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PHP, SQLite и регистронезависимость</title>
		<link>https://tt.erinome.net/2014/10/719</link>
		<comments>https://tt.erinome.net/2014/10/719#comments</comments>
		<pubDate>Sat, 18 Oct 2014 10:11:26 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[openwrt]]></category>
		<category><![CDATA[грабли]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=719</guid>
		<description><![CDATA[Несмотря на объявленную поддержку UTF, встраиваемая СУБД SQLite3 по умолчанию не умеет делать регистронезависимую сортировку, сравнение и операции по преобразованию строк над буквами, не входящими в английский алфавит. Для решения этой проблемы разработчики SQLite рекомендуют использовать расширение ICU, с подключением &#8230; <a href="https://tt.erinome.net/2014/10/719">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Несмотря на объявленную поддержку UTF, встраиваемая <a href="http://www.sqlite.org/" target="_blank"> СУБД SQLite3</a> по умолчанию не умеет делать регистронезависимую сортировку, сравнение и операции по преобразованию строк над буквами, не входящими в английский алфавит. Для решения этой проблемы разработчики SQLite рекомендуют использовать расширение <strong>ICU</strong>, с подключением которого станет возможным выбирать различные кодировки и иметь возможность пользоваться регистронезависимыми операциями сравнения любых символов кроме латиницы. Вот только описаний, как это сделать для php-mod-sqlite3, найти толком нельзя, да и объем ICU превышает размер самой библиотеки SQLite! Для embedded-применений &#8211; например, в <strong>OpenWrt</strong> &#8211; такое не годится.<span id="more-719"></span></p>
<p>Давным-давно, в далекой-далекой галактике&#8230; оказалось, что много лет назад некий товарищ по имени <strong>ioannis</strong> в рамках решения означенной проблемы создал небольшое расширение SQLite, по сути представляющее собой урезанную версию ICU, из которой был выброшен код, который в 95% случаев никогда не потребуется. Таким образом удалось сократить размер расширения с мегабайт до символических 70-90 кбайт (в зависимости от архитектуры и компилятора). Копия исходного сообщения осталась доступна на <a href="http://www.mail-archive.com/sqlite-users@sqlite.org/msg30403.html" target="_blank">mail-archive.com</a>, и хотя оригинальная ссылка на исходный код расширения sqlite3_unicode.c неработоспособна, его все еще можно найти <a href="https://www.google.ru/search?q=sqlite3_unicode.c" target="_blank">в интернете</a>, а также мы добавили его в <a href="http://fs.erinome.net/openwrt/packages/libsqlite3_unicode/files/sqlite3_unicode.c">наш архив</a>.</p>
<h3><strong>Возможности расширения</strong></h3>
<p><strong>#define SQLITE3_UNICODE_FOLD</strong> &#8211; поддержка нелатинских символов функцией FOLD() &#8211; +10КБ<br />
<strong>#define SQLITE3_UNICODE_LOWER</strong> &#8211; поддержка нелатинских символов функцией LOWER() &#8211; +10КБ<br />
<strong>#define SQLITE3_UNICODE_UPPER</strong> &#8211; поддержка нелатинских символов функцией UPPER() &#8211; +10КБ<br />
<strong>#define SQLITE3_UNICODE_TITLE</strong> &#8211; поддержка нелатинских символов функцией TITLE() &#8211; +10КБ<br />
<strong>#define SQLITE3_UNICODE_UNACC</strong> &#8211; преобразование accented-символов в обычные, для русского языка не очень актуально &#8211; +30КБ<br />
<strong>#define SQLITE3_UNICODE_COLLATE</strong> &#8211; заменяет COLLATION типа NOCASE на новый, в котором при сравнении не учитывается регистр в т.ч. и для нелатинских символов.<br />
<strong>#define SQLITE3_UNICODE_UNACC_AUTOMATIC</strong> &#8211; попытаться применять UNACC в функции LIKE и операциях сравнения с COLLATE NOCASE.</p>
<p>Что характерно, функциональность, которая не требуется, может быть отключена путем убирания соответствующих #define для экономии места и увеличения производительности (вряд ли, впрочем, существенного).</p>
<p>Теперь разберемся, как собрать это расширение и задействовать его в cli-версии SQLite и в модуле для PHP.</p>
<h3><strong>Сборка под Linux</strong></h3>
<p>Для начала, скачиваем и распаковываем исходный код SQLite &#8211; нам потребуются заголовочные файлы из него. Можно использовать любую версию: я брал amalgamation без autoconf &#8211; она меньше. В тот же каталог копируем sqlite3_unicode.c.</p>
<p>Далее, корректности ради, открываем sqlite3_unicode.c текстовым редактором и вписываем вверху директиву:</p>
<pre class="console">/* we want shared library. only. */
#define SQLITE_ENABLE_UNICODE 1</pre>
<p>Этим мы указываем, что собираемся компилировать shared-библиотеку. С другой стороны &#8211; соответствующий #if в коде расширения написан таким своеобразным образом, что этого можно и не делать.</p>
<p>Затем следует непосредственно процесс компиляции. Предполагается, что пакеты из набора build-essentials уже установлены в системе &#8211; во всяком случае, здесь потребуется gcc:</p>
<pre class="console">gcc -shared -o sqlite3_unicode.so sqlite3_unicode.c</pre>
<p>Закрывая глаза на ряд warning&#8217;ов, получаем готовую библиотеку.</p>
<p>При работе с cli-версией потребуется разместить полученный sqlite3_unicode.so в каталоге с остальными системными библиотеками, либо же выполнить export следующего вида:</p>
<pre class="console">export LD_LIBRARY_PATH="/path/to/library/dir:$LD_LIBRARY_PATH"</pre>
<p>Затем открываем cli и пишем команду <strong>.load sqlite3_unicode</strong>. Если ошибок не возникло &#8211; значит, расширение успешно загрузилось.</p>
<p>Для загрузки расширения в PHP потребуется в php.ini выставить корректный путь к месту расположения библиотеки в перараметре <strong>sqlite3.extension_dir</strong>. Затем в скрипте используем команду вида <strong>$db->loadExtension(&#8216;sqlite3_unicode.so&#8217;)</strong>;</p>
<p>Вот и всё &#8211; теперь сравнения с COLLATE NOCASE будут регистронезависимыми не только для латиницы, но и для русских букв.</p>
<h3><strong>Сборка под OpenWrt</strong></h3>
<p>Теперь попробуем побороть Buildroot от OpenWrt и кросс-компилировать это расширение в toolchain&#8217;е для запуска на роутере. В конечном счете, именно ради этого весь процесс и затевался &#8211; на ПК-то нет проблемы установить ICU, в отличие от встраиваемых систем. Надо признать, что борьба с Buildroot&#8217;ом для меня оказалась намного сложнее, чем все поиски решения проблемы с регистрозависимостью в целом и попытки разобраться, как его собирать в обычных условиях, в частности.</p>
<p>В конечном счете, после бессчетных неудачных попыток, я остановился на варианте формирования отдельного пакета, содержащего только это расширение с выставленным параметром DEPENDS на libsqlite3 и включенным в его состав С-файле с исходным кодом. Скачать готовый пакет можно в <a href="http://fs.erinome.net/openwrt/packages/libsqlite3_unicode" target="_blank">нашем архиве</a>.</p>
<p>Его можно распаковать в каталог &#8220;package&#8221; корневой директории Buildroot&#8217;а, а затем нужно в <strong>make menuconfig</strong> выбрать пакет <strong>libsqlite3_unicode</strong> и запустить его сборку при помощи команды <strong>make package/libsqlite3_unicode/compile</strong>.</p>
<p>После установки полученного ipk на роутер подключение данного расширения производится аналогичным ранее описанному способом. Обратите внимание, что имя расширения для OpenWrt &#8211; <strong>libsqlite3_unicode.so</strong>, его размещение по умолчанию &#8211; <strong>/usr/lib</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2014/10/719/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Автоматизация загрузки файлов на WebDav</title>
		<link>https://tt.erinome.net/2014/04/668</link>
		<comments>https://tt.erinome.net/2014/04/668#comments</comments>
		<pubDate>Wed, 23 Apr 2014 11:59:37 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[openwrt]]></category>
		<category><![CDATA[webdav]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=668</guid>
		<description><![CDATA[Ранее на страницах этого сайта рассматривалась возможность монтирования облачных WebDav-хранилищ при помощи fuse-системы davfs2. Одним из ее недостатков был тот факт, что при любых операциях над файлами они неминуемо копировались сначала во временную директорию, а лишь затем перемещались в целевой &#8230; <a href="https://tt.erinome.net/2014/04/668">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Ранее на страницах этого сайта рассматривалась возможность монтирования облачных WebDav-хранилищ при помощи fuse-системы <a href="http://tt.erinome.net/2012/11/360">davfs2</a>. Одним из ее недостатков был тот факт, что при любых операциях над файлами они неминуемо копировались сначала во временную директорию, а лишь затем перемещались в целевой каталог.</p>
<p>Альтернативой davfs2 для прямого получения или загрузки файлов в облачное хранилище является утилита <a href="http://tt.erinome.net/2012/11/375">cadaver</a>. Однако, она предполагает интерактивное взаимодействие с пользователем, и использование ее в автоматизированных скриптах не представляется возможным. Обойти эту проблему можно при помощи утилиты <a href="http://tt.erinome.net/2014/04/660">empty</a>, аналога <em>expect</em> для создания и взаимодействия с псевдотерминалами.<span id="more-668"></span></p>
<p>Для реализации полностью автоматической загрузки и скачивания файлов с облачного хранилища был создан скрипт <a href="http://fs.erinome.net/openwrt/scripts/webdav.sh" target="_blank">webdav.sh</a>.</p>
<p>Перед использованием необходимо настроить несколько параметров, определенных в начале скрипта:<br />
<small>
<ul>
<li><em>ififo=/tmp/empty.in.fifo</em><br />
&#8211; путь к fifo ввода, на роутерах желательно размещать в /tmp</li>
<li><em>ofifo=/tmp/empty.out.fifo</em><br />
&#8211; путь к fifo вывода, на роутерах желательно размещать в /tmp</li>
<li><em>cmd=&#8221;cadaver https://webdav.yandex.ru&#8221;</em><br />
&#8211; путь к утилите cadaver и адрес WebDav-сервиса</li>
<li><em>username=YourUserName</em><br />
&#8211; логин от WebDav-сервиса</li>
<li><em>password=YourPassword</em><br />
&#8211; пароль от WebDav-сервиса</li>
</ul>
<p></small></p>
<p>Доступные команды:<br />
<small>
<ul>
<li><strong>webdav.sh put <локальный файл> [удаленный путь]</strong> &#8211; загрузка файла в облако<br />
&#8211; <em>Локальный файл</em> &#8211; обязательный параметр, должен быть указан один, файл должен быть доступен для чтения;<br />
&#8211; <em>Удаленный путь</em> &#8211; опционально, если его не указать, то файл будет загружен в корневой каталог WebDav.</li>
<li><strong>webdav.sh get <удаленный файл> [локальный путь]</strong> &#8211; выгрузка файла из облака<br />
&#8211; <em>Удаленный файл</em> &#8211; обязательный параметр, должен быть указан один, файл должен существовать;<br />
&#8211; <em>Локальный путь</em> &#8211; опционально, если его не указать, то файл будет загружены в текущий каталог.</li>
<li><strong>webdav.sh mput <локальные файлы> [удаленный путь]</strong> &#8211; множественная загрузка<br />
&#8211; <em>Локальные файлы</em> &#8211; маска вида &#8220;/path/to/*.files&#8221;, указание кавычек <em>обязательно</em>;<br />
&#8211; <em>Удаленный путь</em> &#8211; опционально, если его не указать, то файлы будут загружены в корневой каталог WebDav.</li>
<li><strong>webdav.sh mget <удаленные файлы> [локальный путь]</strong> &#8211; множественная выгрузка<br />
&#8211; <em>Удаленные файлы</em> &#8211; маска вида &#8220;/remote/path/*&#8221;;<br />
&#8211; <em>Локальный путь</em> &#8211; опционально, если его не указать, то файлы будут загружены в текущий каталог.</li>
</ul>
<p></small></p>
<p>Например, для загрузки файла &#8220;/etc/config/firewall&#8221; в удаленный каталог &#8220;/openwrt&#8221; необходимо набрать команду <em>webdav.sh put /etc/config/firewall /openwrt/firewall</em>. Отметим, что удаленный каталог &#8220;openwrt&#8221; перед выполнением этой команды должен существовать.</p>
<p>PS: Стоит обратить внимание, что утилита <em>empty</em> имеет такую особенность, что если указанные в конфигурации fifo-файлы уже существуют на момент ее запуска, то она просто не запустится, тихо ругнувшись в syslog. А в случае каких-либо сбоев в ходе работы с empty эти fifo-файлы могут автоматически не удалиться.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2014/04/668/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>empty-expect и сборка под архитектуру PowerPC</title>
		<link>https://tt.erinome.net/2014/04/660</link>
		<comments>https://tt.erinome.net/2014/04/660#comments</comments>
		<pubDate>Tue, 22 Apr 2014 08:16:25 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[openwrt]]></category>
		<category><![CDATA[грабли]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=660</guid>
		<description><![CDATA[Некоторые консольные приложения несмотря на интуитивную предрасположенность к скриптовой автоматизации предполагают интерактивное взаимодействие с пользователем, что напрочь убивает любые попытки составления простых скриптов для автоматического выполнения тех или иных действий с их помощью. Для исправления ситуации существуют немногочисленные программы, позволяющие &#8230; <a href="https://tt.erinome.net/2014/04/660">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Некоторые консольные приложения несмотря на интуитивную предрасположенность к скриптовой автоматизации предполагают интерактивное взаимодействие с пользователем, что напрочь убивает любые попытки составления простых скриптов для автоматического выполнения тех или иных действий с их помощью.</p>
<p>Для исправления ситуации существуют немногочисленные программы, позволяющие создавать своего рода псевдотерминалы, отслеживающие появление на консоли того или иного текста и позволяющие задать текст, автоматически отправляемый в ответ на данный текст. Типовым примером является утилита <em>expect</em>, требующая для работы интерпретатора tcl, или значительно более легкая и значительно менее известная утилита <em>empty</em>, заметно более подходящая для OpenWrt-роутеров.<span id="more-660"></span></p>
<p>В случае попытки запуска утилиты <em>empty</em> на роутере, работающем на процессоре архитектуры PowerPC (в частности, mpc85xx), обнаруживается, что любые действия приводят к ее моментальному сбою с сообщением о segfault&#8217;е (SIGSEGV) в системном логе:</p>
<pre class="console">Tue Apr 22 00:07:26 2014 kern.info kernel: [885768.318640] empty[9029]: unhandled signal 11 at 00004000 nip 4806f2a4 lr 10002180 code 30001</pre>
<p>В ходе изучения исходников <em>empty.c</em> была выявлена особенность gcc-компилятора, что при вызове функции <em>semctl()</em> без четвертого параметра, который, в общем-то, должен бы являться необязательным, под архитектуру PowerPC генерируется некорректный код. Описание и workaround для данной проблемы представлен, к примеру, <a href="http://osdir.com/ml/linux.ports.ppc.embedded/2003-12/msg00015.html" target="_blank">здесь</a> (к слову, обратите внимание на дату заметки &#8211; 2003 год). Так, быстро исправить ситуацию позволяет добавление заглушки в виде указателя, к примеру, на неиспользуемую целочисленную переменную, в качестве четвертого параметра на каждом вызове функции <em>semctl()</em>.</p>
<p>На базе этой информации был составлен патч <em>mpc85xx-fix.patch</em>:</p>
<pre class="console">--- a/empty.c	2014-04-22 00:04:32.317542049 +0400
+++ b/empty.c	2014-04-22 00:06:02.580442807 +0400
@@ -177,6 +177,7 @@
 	int	fl_state = 2;		/* 0 - in	>>>
 					   1 - out	<<<
 					   2 - unknown */
+	int	dummy;
 	
 /* semaphores */
 #ifdef _POSIX_SEMAPHORES
@@ -495,7 +496,7 @@
 	
 	if (semop(sem, &#038;free_sem, 1) == -1)
 		(void)perrxslog(255, "Can't release semaphore: %d from lock %m", sem);
-	if (semctl(sem, 0, IPC_RMID) == -1)
+	if (semctl(sem, 0, IPC_RMID, &#038;dummy) == -1)
 		(void)syslog(LOG_NOTICE, "Warning: Can't remove semaphore: %d  %m", sem);
 
 #if !defined(__SVR4) &#038;&#038; !defined(__hpux__) &#038;&#038; !defined(__AIX)
@@ -779,7 +780,10 @@
 	va_end(va);
 	
 	if (sem != -1)
-		semctl(sem, 0, IPC_RMID);
+	{
+		int dummy;
+		semctl(sem, 0, IPC_RMID, &#038;dummy);
+	}
 
 	(void)closelog();
 	(void)exit(ex_code);
</pre>
<p>Для использования его нужно разместить в папку <em>./package/feeds/packages/empty/patches</em> относительно корня каталога buildroot'а OpenWrt и затем пересобрать утилиту командой <em>make package/feeds/packages/empty/{clean,compile}</em>.</p>
<p>Что характерно, проблема проявляется только при сборке под mpc85xx (powerpc), тогда как, к примеру, утилита, собранная для ar71xx (mips32r) работает корректно.</p>
<p>PS: Название утилиты <em>empty</em> обыгрывает сокращение <em>pty</em>, означающее "псевдотерминал", и слово "empty", означающее "пустоту". И все было бы хорошо, не будь "empty" до такой степени распространенным словом при описании той или иной компьютерной проблемы. В результате найти в интернете хоть какие-то обсуждения утилиты <em>empty</em> и с добавлением дополнительных ключевых слов вроде "terminal", "console" или "utility" терпят сокрушительное фиаско. По этой причине данную утилиту больше шансов найти по не совсем логичному названию <em>empty-expect</em>, что подчеркивает ее связь со значительно более известной утилитой автоматизации интерактивных консольных программ - <em>expect</em>.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2014/04/660/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ошибка при запуске make menuconfig в OpenWrt Buildroot</title>
		<link>https://tt.erinome.net/2014/01/633</link>
		<comments>https://tt.erinome.net/2014/01/633#comments</comments>
		<pubDate>Mon, 20 Jan 2014 09:54:54 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[openwrt]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=633</guid>
		<description><![CDATA[После переноса OpenWrt Buildroot с одного хоста на другой можно столкнуться с тем, что команда make menuconfig не работает и возвращает ошибку следующего вида: [erinome@shuttle trunk]$ make menuconfig V=s scripts/config/mconf: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by scripts/config/mconf) make: *** &#8230; <a href="https://tt.erinome.net/2014/01/633">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>После переноса OpenWrt Buildroot с одного хоста на другой можно столкнуться с тем, что команда <strong>make menuconfig</strong> не работает и возвращает ошибку следующего вида:</p>
<pre class="console">[erinome@shuttle trunk]$ make menuconfig V=s
scripts/config/mconf: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by scripts/config/mconf)
make: *** [menuconfig] Error 1</pre>
<p>Вызов <strong>make dirclean</strong> в данном случае не помогает. Дело в том, что скомпилированный в другой системе бинарник <strong>mconf</strong> автоматически не пересобирается. Для решения этой проблемы просто соберем его заново вручную:</p>
<pre class="console">[erinome@shuttle trunk]$ cd scripts/config
[erinome@shuttle trunk]$ make clean &#038;&#038; make
[erinome@shuttle trunk]$ cd ../../</pre>
<p>После этого <strong>make menuconfig</strong> снова станет работоспособен.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2014/01/633/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Обход блокировки сайтов с OpenWrt</title>
		<link>https://tt.erinome.net/2013/08/606</link>
		<comments>https://tt.erinome.net/2013/08/606#comments</comments>
		<pubDate>Fri, 30 Aug 2013 11:48:56 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[openwrt]]></category>
		<category><![CDATA[грабли]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=606</guid>
		<description><![CDATA[На просторах сети изложено немало способов, как можно обходить запрет доступа к интернет-ресурсам, попавшим под раздачу известного закона о бесконтрольных блокировках, прославившегося своей идиотичностью и тем, что малосознательные работники Роскомнадзора даже в нынешней его редакции не в состоянии выполнять его &#8230; <a href="https://tt.erinome.net/2013/08/606">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>На просторах сети изложено немало способов, как можно обходить запрет доступа к интернет-ресурсам, попавшим под раздачу известного закона о бесконтрольных блокировках, прославившегося своей идиотичностью и тем, что малосознательные работники Роскомнадзора даже в нынешней его редакции <a href="http://habrahabr.ru/post/191456/" target="_blank">не в состоянии</a> выполнять его условия без безмерных злоупотреблений со своей стороны.</p>
<p>Итак, рассмотрим еще один вариант, не требующий никакого дополнительного софта, помимо роутера с OpenWrt.<span id="more-606"></span> Одним из очевидных способов обхода блокировки с минимальным использованием сторонних средств является следующая система:</p>
<p>1. Перестаем использовать провайдерские DNS и переходим на свободные (напр., от Google: 8.8.8.8, 8.8.4.4);<br />
2. Устанавливаем на роутере прокси-сервер (напр., tinyproxy);<br />
3. Заворачиваем при помощи iptables все запросы к заблокированным ресурсам на прокси, выделяя такие запросы по целевому IP-адресу;<br />
4. Задаем в конфиге прокси любой заграничный апстрим-прокси, на котором отсутствует блокировка.</p>
<p>Плюсы:<br />
+ На прокси заворачиваются только обращения к заблокированным ресурсам, все остальные работают как раньше;<br />
+ Не нужно вообще ничего настраивать на всех подключаемых к роутеру устройствах;<br />
+ Мы лично всё контролируем. :)</p>
<p>Минусы:<br />
&#8211; Неудобство по ручному составлению списка блокированных ресурсов;<br />
&#8211; Неудобство поиска живых и достаточно быстрых апстрим-прокси;<br />
&#8211; Необходимость установки лишнего софта на роутер и потенциально его частая перенастройка.</p>
<p>Для многих минусы значительно перевесят все возможные плюсы. Тем не менее рассмотрим, как реализовать изложенное и, кроме того, обойтись без установки собственного прокси на роутере.</p>
<p>Идея в том, что раз мы поднимаем у себя на роутере transparent-прокси и прозрачно заворачиваем на него часть трафика, чтобы затем переправить его на другой прокси в интернете, то можно задаться вопросом: а, собственно, зачем нам создавать каскад из прокси, если можно сразу найти внешние прокси-сервера, поддерживающие transparent-режим? Все, что потребуется &#8211; это отыскать таковой и сразу завернуть нужный трафик туда, без локального прокси-сервера.</p>
<p>Для того, чтобы немного автоматизировать настройку и добавить минимальных удобств, напишем скрипт:</p>
<pre class="console">#!/bin/ash
###
# Erinome proxyPass v.1
###

proxy="1.1.1.1:23456"
bhosts="188.190.124.85/32 185.10.208.40/32"

enableProxy()
{
	cleanRules
	for bhost in $bhosts
	do
		cmd="iptables -A prerouting_lan_rule -t nat -p tcp -d ${bhost} --dport 80 -m comment --comment "ErinomePP" -j DNAT --to-destination ${proxy}"
		echo $cmd; $cmd
	done
}

disableProxy()
{
	cleanRules
}

cleanRules()
{
	iptables -S prerouting_lan_rule -t nat | grep "comment ErinomePP" | while read iptfind
	do
		cmd="iptables -t nat -D `echo $iptfind | cut -d' ' -f2-`"
		echo $cmd; $cmd
	done
}


case "$1" in
	ena*)
		enableProxy
		;;
	dis*)
		disableProxy
		;;
	*)
		echo 'not recognized'
		;;
esac</pre>
<p>В переменной &#8220;bhosts&#8221; должны быть перечислены заблокированные хосты, в переменной &#8220;proxy&#8221; &#8211; указан адрес и порт анонимного прокси-сервера с поддержкой transparent-режима. При внесении каких-либо изменений в список заблокированных хостов или при необходимости сменить адрес прокси, всё, что требуется сделать &#8211; это обновить данные в скрипте и набрать в консоли &#8220;./proxyPass.sh enable&#8221;. Старые правила iptables будут вычищены автоматически и заменены новыми.</p>
<p>PS: При использовании типа подключения DHCP необходимо указать опцию &#8220;option peerdns &#8216;0&#8217;&#8221; в <strong>/etc/config/network</strong>, чтобы провайдерские DNS-серверы, получаемые с DHCP, полностью игнорировались.</p>
<p>PPS: Также может возникнуть вопрос о том, как завернуть в прозрачный прокси тот трафик, который не проходит через роутер транзитом, а генерируется софтом непосредственно на роутере. Правила рассмотренные для PREROUTING для этих целей не подходят, а нужно добавить правила для OUTPUT:</p>
<pre class="console">iptables -t nat -A OUTPUT -d &lt;dest IP&gt;/32 -p tcp -m tcp --dport 80 -m comment --comment ErinomePP -j DNAT --to-destination &lt;proxy IP&gt;:&lt;proxy port&gt;</pre>
<p>В терминологии OpenWrt, вероятно, вместо &#8220;-А OUTPUT&#8221; следует указать более корректный блок правил, определяющий именно OUTPUT зоны WAN&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2013/08/606/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Борьба с DHCPINFORM в dnsmasq</title>
		<link>https://tt.erinome.net/2013/05/542</link>
		<comments>https://tt.erinome.net/2013/05/542#comments</comments>
		<pubDate>Thu, 16 May 2013 11:18:54 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[openwrt]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=542</guid>
		<description><![CDATA[В отдельных ситуациях на OpenWrt (и других Linux-системах) с установленным dnsmasq, функционирующем в роли DHCP-сервера, можно обнаружить флуд сообщениями DHCPINFORM в системном логе: May 16 15:01:20 OpenWrt daemon.info dnsmasq-dhcp[2451]: DHCPINFORM(br-lan) 172.16.10.30 90:e6:ba:dc:2e:c3 May 16 15:01:20 OpenWrt daemon.info dnsmasq-dhcp[2451]: DHCPACK(br-lan) 172.16.10.30 &#8230; <a href="https://tt.erinome.net/2013/05/542">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>В отдельных ситуациях на OpenWrt (и других Linux-системах) с установленным <strong>dnsmasq</strong>, функционирующем в роли DHCP-сервера, можно обнаружить флуд сообщениями <strong>DHCPINFORM</strong> в системном логе:</p>
<pre class="console">May 16 15:01:20 OpenWrt daemon.info dnsmasq-dhcp[2451]: DHCPINFORM(br-lan) 172.16.10.30 90:e6:ba:dc:2e:c3
May 16 15:01:20 OpenWrt daemon.info dnsmasq-dhcp[2451]: DHCPACK(br-lan) 172.16.10.30 90:e6:ba:dc:2e:c3 avalanche</pre>
<p>Происходит это из-за того, что у встроенного в ОС Windows 7 (и некоторых других творений Microsoft) DHCP-клиента есть маниакальное желание получить настройки прокси-серверов с DHCP, и он продолжает эти попытки и в том случае, когда DHCP никак не реагирует на подобные запросы. В стандартной конфигурации <strong>dnsmasq</strong> не рассылает никакой информации о прокси-серверах, и Windows-системы продолжают запрашивать эти данные снова, и снова, и снова&#8230; и снова.</p>
<p>Заставить их заткнуться можно простым добавлением опции в <strong>/etc/dnsmasq.conf</strong>:</p>
<pre class="console">dhcp-option=252,"\n"</pre>
<p>Эта опция недвусмысленно дает понять Windows-системам, что здесь <strong>НЕТ</strong> никаких прокси-серверов, и что пора уже перестать о них спрашивать.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2013/05/542/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Обновление пакетов OpenWrt</title>
		<link>https://tt.erinome.net/2013/05/538</link>
		<comments>https://tt.erinome.net/2013/05/538#comments</comments>
		<pubDate>Tue, 14 May 2013 18:34:53 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[openwrt]]></category>
		<category><![CDATA[opkg]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=538</guid>
		<description><![CDATA[Обновлен ряд поддерживаемых проектом erinome.net пакетов для OpenWrt, которые отсутствуют в официальных репозиториях, либо существенно устарели в оных. В их числе: whois &#8211; C-версия известной утилиты обновлена до 5.0.25; samba36 &#8211; SMB клиент и сервер обновлен до 3.6.15; php5 &#8211; &#8230; <a href="https://tt.erinome.net/2013/05/538">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Обновлен ряд поддерживаемых проектом <strong>erinome.net</strong> пакетов для OpenWrt, которые отсутствуют в официальных репозиториях, либо существенно устарели в оных.</p>
<p><span id="more-538"></span></p>
<p>В их числе:</p>
<ul>
<li><a href="http://fs.erinome.net/wrt-packages/whois" target="_blank">whois</a> &#8211; C-версия известной утилиты обновлена до 5.0.25;</li>
<li><a href="http://fs.erinome.net/wrt-packages/samba36" target="_blank">samba36</a> &#8211; SMB клиент и сервер обновлен до 3.6.15;</li>
<li><a href="http://fs.erinome.net/wrt-packages/php5" target="_blank">php5</a> &#8211; PHP-интерпретатор обновлен до 5.4.15.</li>
</ul>
<p>Для их сборки требуется OpenWrt Buildroot. Имея настроенный Buildroot необходимо просто перенести скачанные файлы в каталог <strong>./packages/<имя пакета></strong>, активировать пакет в <strong>make menuconfig</strong>, после чего запустить его сборку командой <strong>make package/<имя пакета>/compile</strong>. Обратите также внимание, что для уже присутствующих в Buildroot&#8217;е пакетов рекомендуется их заменять, а не просто копировать в <strong>./packages</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2013/05/538/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
