<?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>Всякие интересные штучки для WEB-разработчика &#187; FreeBSD/Linux</title>
	<atom:link href="http://iphp.com.ua/archives/category/freebsdlinux/feed" rel="self" type="application/rss+xml" />
	<link>http://iphp.com.ua</link>
	<description>блог о технологиях web-разработки // all your base are belong to us</description>
	<lastBuildDate>Thu, 24 Jun 2010 05:23:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>SSH-туннелинг или замена VPN</title>
		<link>http://iphp.com.ua/archives/482</link>
		<comments>http://iphp.com.ua/archives/482#comments</comments>
		<pubDate>Wed, 21 Oct 2009 19:31:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD/Linux]]></category>
		<category><![CDATA[Soft/Tools]]></category>

		<guid isPermaLink="false">http://iphp.com.ua/?p=482</guid>
		<description><![CDATA[В последнее время довольно большое распространение получила технология VPN (Virtual Private Networks). В большинстве случаев ее используют люди для шифрования передаваемой информации через локальную сеть (защита от снифанья трафика, что довольно легко осуществить в сети, даже на свичах) и/или последующей передачи информации через Интернет (тут уже целями будет скрытие своего IP-адреса, защита от глобального снифа [...]]]></description>
			<content:encoded><![CDATA[<p>В последнее время довольно большое распространение получила технология VPN (Virtual Private Networks). В большинстве случаев ее используют люди для шифрования передаваемой информации через локальную сеть (защита от снифанья трафика, что довольно легко осуществить в сети, даже на свичах) и/или последующей передачи информации через Интернет (тут уже целями будет скрытие своего IP-адреса, защита от глобального снифа трафика всей страны (aka СОРМ, он же нынешний СОРМ2) и.д.). Многие уже давно используют данную технологию VPN, но не многие знают об ее более дешевой и мобильной альтернативе. А называется это &#8211; SSH-туннелинг.</p>
<p>Принцип данной реализации следующий. Весь сетевой софт на компе (ну или не весь) форвардится на назначенный порт (вашего локалхоста), на котором висит сервис, соединенный по SSH с сервером (а как мы знаем, соединение по SSH протоколу шифруется) и туннелирующий все запросы; далее, весь ваш трафик (уже не в зашифрованном виде) может форвардится с нашего сервера на прокси (поддерживающий туннерирование) или сокс, который передают весь трафик к необходимым адресам. Наличие прокси или сокса не обязательно, но если нам нужна полнейшая конспирация, то мы можем организовать данный сервис (proxy/socks) на другом сервере (данная схема нужна для создания цепочки адресов), но об этом позже.</p>
<p>Теперь давайте разберемся с минимальным набором инструментов и сервисов необходимых для организации данного процесса. В первую очередь нам нужна программа для организации туннеля по SSH-протоколу. Для этой задачи мы можем применить VanDyke Entunnel (http://www.vandyke.com/products/entunnel/) или Putty (http://www.web-hack.ru/download/info.php?go=35) (вкладка Connection\SSH\Tunnels). В наших примерах я буду использовать оба клиента. Далее мы можем вручную прописывать в каждой программе работу через прокси или использовать специализированную программу для перенаправления запросов, такую как ProxyCap (http://proxylabs.netwu.com), SocksCap (http://www.socks.nec.com), FreeCap (http://www.freecap.ru) и т.п. В нашем примере будет использоваться ProxyCap, как наиболее удобная софтина (кстати, через ProxyCap мы сможем сделать туннерирование даже WebMoney, которая известна защитой от такого вида софта, для скрытия IP). Так же нам понадобится SSH-аккаунт (на сервере желательно расположенном за пределами вашей страны =), который можно без проблем достать (например, я покупаю VPS-хостинг для этого) и socks`ы.</p>
<p>Первым делом создаем SSH-аккаунт. Далее, я предлагаю вам использовать socks-сервер, а не proxy, т.к. не все прокси поддерживают туннелирование. Также может оказаться, что сегодня прокси анонимный, а завтра уже и не нет (если, конечно, не вы сами отвечаете за него). Кстати, проверить свою анонимность можно здесь (http://ip.xss.ru). Как я уж говорил, мы можем использовать сокс на удаленной машине (для большей безопасности). Для примера я покажу, как установить сокс-демон. Наиболее популярные и продвинутые демоны под никсы это socks5 от Permeo/NEC (http://freeware.sgi.com/source/socks5/), Dante (http://www.inet.no/dante/) и отечественный продукт 3proxy (http://www.security.nnov.ru/soft/3proxy/). Для примера я выбрал классический демон на FreeBSD &#8211; socks5.</p>
<p>Для тестирования использовалась FreeBSD 5-ой ветки. Я устанавливал socks5 из портов (/usr/ports/net/socks5/), но и из сорцов под фряхой тоже все хорошо собирается и ставится:</p>
<pre class="brush: php;">
cd /usr/ports/net/socks5/
make install clean
rehash
</pre>
<p>Для нормальной работы демона необходим конфиг к демону socks5.conf и файл паролей socks5.passwd (если необходима аутификация к сокс-серверу по паролю):</p>
<pre class="brush: php;">
touch /usr/local/etc/socks5.conf
touch /usr/local/etc/socks5.passwd
</pre>
<p>Далее добавляем в конфиг следующие строчки:</p>
<pre class="brush: php;">
auth - - u
permit u - - - - -
SET SOCKS5_BINDINTFC 1.2.3.4:8080
SET SOCKS5_CONFFILE /usr/local/etc/socks5.conf
SET SOCKS5_PWDFILE /usr/local/etc/socks5.passwd
SET SOCKS5_MAXCHILD 128
SET SOCKS5_NOIDENT
SET SOCKS5_NOREVERSEMAP
SET SOCKS5_NOSERVICENAME
SET SOCKS5_V4SUPPORT
SET SOCKS5_ENCRYPT
SET SOCKS5_FORCE_ENCRYPT
SET SOCKS5_UDPPORTRANGE 1023-5000
</pre>
<p>Первые две строчки указывают, что необходима аутификация по логин/пароль. SOCKS5_BINDINTFC указывает на какой IP (если у сервера несколько алиасов) и порт повесить демон. SOCKS5_MAXCHILD по умолчанию 64, я советую увеличить до 128, чтобы всем юзерам (если их много) хватило потоков. Далее, идут строчки для ускорения работы демона. SOCKS5_V4SUPPORT &#8211; поддержка 4-ой версии протокола. SOCKS5_ENCRYPT и SOCKS5_FORCE_ENCRYPT поддержка шифрования, если клиент это поддерживает. За более подробной информацией по установка обращайтесь к файлам README и INSTALL, а за информацией по настройке к манам socks5(1) и socks5.conf(5).</p>
<p>Далее, заполняем файл паролей. Он имеет обычный текстовый формат и login/password разделяются в нем пробелами:</p>
<pre class="brush: php;">
user password
root toor
</pre>
<p>Теперь можно запускать демон и приступить к настройке клиентского софта:</p>
<pre class="brush: php;">
/usr/local/bin/socks5
</pre>
<p>Запускам ProxyCap (http://forum.web-hack.ru/index.php?showtopic=29262), кликаем правой кнопкой мыши на значке в трее, Preferences. На вкладке &#8220;Proxies&#8221; вписываем 127.0.0.1:8080 и устанавливаем в &#8220;Require Authorization&#8221; наш login/password на сокс. На вкладке &#8220;Rules&#8221; добавляем сначала правило для Entunnel, указав в &#8220;Rule Type&#8221; &#8211; Force direct connetion. Далее, создаем правило, для всего остального софта, трафик от которого будет шифроваться и туннелироваться через сокс. В правиле указываем &#8220;All Programs&#8221;, &#8220;Tunnel through proxy&#8221; и в выпадающем меню наш сокс. Так же можно создать правило не для всего софта, а только выборочный софт пускать через туннель или наоборот, создать правило для всего софта, но для некоторого софта сделать прямой доступ в инет (Force direct connetion). В качестве дополнения могу сказать, что если ваша сетевая программа поддерживает работу через сокс/прокси (и нет необходимости пускать сразу весь сетевой софт через туннель), то в качестве настроек прокси вы можете указать забинденный Entunnel`ем адрес и порт &#8211; 127.0.0.1:8080.</p>
<p>Запускаем Entunnel и создаем в нем новое соединение по SSH. Далее, в свойствах соединения (Port Forwarding) добавляем наш сокс. В категории &#8220;Local&#8221; вписываем 127.0.0.1:8080, а в категории &#8220;Remote&#8221; вписываем IP и порт нашего сокс-сервера. Настройка закончена! Если что-то не работает, то еще раз перечитайте все пункты настройки.</p>
<p>В случае, если вы хотите использовать SSH-аккаунт, как конечную точку (т.е. не юзать соксы или прокси), то ваши настройки должны быть следующие (на примере для Putty): на вкладке Connection\SSH\Tunnels в строке &#8220;Source port&#8221; указываем порт, на который Putty забиндится на локалхосте (например, 8080), далее ставим влажок на &#8220;Dynamic&#8221; и идем на вкладку &#8220;Session&#8221; прописывать адрес и порт сервера с SSH. Коннектимся&#8230;</p>
<p>Какие плюсы данной системы:</p>
<p>1. Для организации данной схемы не нужно устанавливать серверный софт (т.к. SSH-аккаунт и сокс можно без проблем достать в инете);<br />
2. Т.к. при SSH-соединении трафик шифруется и сжимается, то мы получаем небольшой прирост скорости работы в инете (это верно, когда сокс-демон находится на том же сервере);<br />
3. В случае, когда сокс-сервер находится на другом хосте, то мы получаем дополнительную цепочку серверов, которые повышают нам безопасность и анонимность;</p>
]]></content:encoded>
			<wfw:commentRss>http://iphp.com.ua/archives/482/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nginx+Php-Fpm+Eaccelerator = Perfect Linux Server !</title>
		<link>http://iphp.com.ua/archives/470</link>
		<comments>http://iphp.com.ua/archives/470#comments</comments>
		<pubDate>Tue, 18 Aug 2009 20:43:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD/Linux]]></category>
		<category><![CDATA[LAMP]]></category>

		<guid isPermaLink="false">http://iphp.com.ua/?p=470</guid>
		<description><![CDATA[Цель: Построить быстрый и надёжный сервер, способный обслуживать несколько больших динамичных вебсайтов основанных на современных CMS (системах управления содержанием) и базе данных MySQL Cредства; 1, Достаточно мощный компьютер: &#8211; процессор+оперативная память+обьёмный винчестер+сетевая карта = должны быть хорошими по характеристикам и достаточно современными, 2, Постоянное соединение с быстрым интернетом, 3. Зарегестрированное имя домена и наличие DNS [...]]]></description>
			<content:encoded><![CDATA[<p>Цель: Построить быстрый и надёжный сервер, способный обслуживать несколько больших динамичных вебсайтов основанных на современных CMS (системах управления содержанием) и базе данных MySQL</p>
<p>Cредства; 1, Достаточно мощный компьютер: &#8211; процессор+оперативная память+обьёмный винчестер+сетевая карта = должны быть хорошими по характеристикам и достаточно современными, 2, Постоянное соединение с быстрым интернетом, 3. Зарегестрированное имя домена и наличие DNS (Domain Name Server). на котором этот домен припаркован,</p>
<p>Начали: Грузим OS http://www.ubuntu.com/getubuntu/download Здесь надо выбрать OS соответствующую архитектуре железа: x86 или AMD64. Я буду писать для AMD64, что впрочем подходит с небольшими изменениями и для x86 После того, как файл загрузился, надо записать его в том же формате т.е. .iso, чтобы с него можено было запускать компьютер.</p>
<p>Надеюсь всё прошло хорошо и сомпьютер запустился с СДишки. Предупреждаю, компьютер должен быть отведен специально для цели служить СЕРВЕРОМ. Т.е. всё, что было в нём прежде, будет утрачено !!!</p>
<p>Ubuntu установить очень просто, достаточно выбрать язык установки и следовать указаниям. Важно сделать правильную разметку диска. Для root или &#8220;/&#8221; достаточно 8 ГБ , swap расчитывается по формуле active RAM x 2. т.е. если общий размер оперативной памяти составляет 1 ГБ, то swap должен быть не меньше 2 ГБ. Остальное пространство отдадим /home. Там будет сидеть всё хозяйство сервера.</p>
<p>После того как система задышала и ты в неё вошёл первым делом добавь терминал на панель. Ну и понеслись: (Я буду писать коды для терминала, тебе надо их скопировать, вставить и нажать &#8220;enter&#8221;. Свои пояснения я буду отделять запятыми, скобками или кавычками, чтобы программа их не распознала, даже если ты их по ошибке и введешь)</p>
<p>sudo apt-get update</p>
<p>sudo apt-get upgrade</p>
<p>(процесс получения обновлений, надо будет ввести пароль)</p>
<p>sudo aptitude install mysql-server</p>
<p>(ждём пока установится)</p>
<p>sudo mysql_secure_installation</p>
<p>(на все вопросы &#8211; yes и устанавливаем пароль, очень важно его не забыть и сделать достаточно сложныи)</p>
<p>(Установим дополнительные библиотеки)</p>
<p>sudo aptitude install build-essential libtool libltdl3-dev libgd-dev libmcrypt-dev libxml2-dev libmysqlclient15-dev flex m4 awk automake autoconf bison make libbz2-dev libpcre3-dev libssl-dev zlib1g-dev vim re2c libjpeg-dev libpng-dev</p>
<p>(Мы будем собирать PHP с PHP-FPM заплаткой из источника.)</p>
<p>cd /usr/local/src</p>
<p>wget http://us.php.net/get/php-5.2.10.tar.gz/from/ru.php.net/mirror</p>
<p> tar xzvf php-5..10.tar.gz</p>
<p>wget php-fpm.org/downloads/php-5.2.10-fpm-0.5.13.diff.gz</p>
<p> gzip -cd php-5.2.10-fpm-0.5.13.diff.gz | patch -d php-5.2.10 -p1</p>
<p> cd php-5.2.10</p>
<p>./configure &#8211;enable-fastcgi &#8211;enable-fpm &#8211;enable-exif &#8211;with-mcrypt &#8211;with-zlib &#8211;enable-mbstring &#8211;with-openssl &#8211;with-mysql &#8211;with-mysql-sock &#8211;with-gd &#8211;with-gettext &#8211;with-jpeg-dir=/usr/lib &#8211;enable-gd-native-ttf &#8211;without-sqlite &#8211;disable-pdo &#8211;disable-reflection &#8211;with-libdir=lib64 &#8211;with-pgsql=/usr/lib/pgsql &#8211;with-mysql=/usr/lib64/mysql</p>
<p>(Если сборка будет жаловаться, что не хватает чего то, то можно будет найти и установить недостающее через Synaptic)</p>
<p>make all install</p>
<p>strip /usr/local/bin/php-cgi</p>
<p>( Теперь отрегулируем PHP-FPM, о котором хочу сказать особо. Php-fpm &#8211; это продукт напряжённого бескорыстного труда нашего соотечественника Андрея Нигматулина, И этим продуктом, как и NGINXом от Игоря Сысоева, уже пользуются миллионы админов по всему миру, несмотря на то, что мало кто из из них говорит и понимает по русски и что отсутствует подробная документация. Золото видно издалека &#8230;. И цена его понятна на любых языкахMoney mouth )</p>
<p>sudo gedit /usr/local/etc/php-fpm.conf</p>
<p>(линия 63 убрать стрелки и тире перед и за кодом и поменять nobody на)</p>
<p>www-data</p>
<p>( то же самое для линии 66)</p>
<p>www-data</p>
<p>(Устанавливаем NGINX web server)</p>
<p>cd /usr/local/src</p>
<p>wget sysoev.ru/nginx/nginx-0.7.61.tar.gz</p>
<p>tar xzvf nginx-0.7.61.tar.gz</p>
<p>cd nginx-0.7.61</p>
<p>(нам не нужны почтовые функции NGINX потому, что мы будем использовать внешний почтовый агент чтобы не нагружать сервер)</p>
<p>./configure &#8211;sbin-path=/usr/local/sbin &#8211;with-http_ssl_module &#8211;without-mail_pop3_module &#8211;without-mail_imap_module &#8211;without-mail_smtp_module</p>
<p>make</p>
<p>make install</p>
<p>(настроим NGINX)</p>
<p>sudo gedit /usr/local/nginx/conf/nginx.conf</p>
<p>(см. прикрерплённый файл)</p>
<p>http://vkimo.org/files/nginx.txt</p>
<p>(Обрати внимание на &#8220;root /home/TVOI FOLDER/$host;&#8221; &#8211; здесь надо указать путь к папке, где будет сидеть всё содержание сайта. &#8220;$host&#8221; это абсолютное значение, которое вытащит и опубликует любой сайт если он зарегестрирован, находится на работающем домайн найм сервере и сидит в отдельной папке в твоей домашней папке &#8220;TVOI FOLDER&#8221; под названием твоего сайта т.е. &#8220;moisite.com&#8221;. А также на &#8220;server_name &#8221; Символ &#8221; _ &#8221; &#8211; это Изумительное по простоте и удобству решение автора NGINX Игоря Сысоева http://sysoev.ru/nginx/ способа адресовать виртуальные хосты. Apache и даже Lighttpd здесь отдыхают плотно.</p>
<p>Теперь создадим место для содержимого нашего вебсайта и изменим соответственно /home/TVOI FOLDER/$host</p>
<p>sudo mkdir /home/www</p>
<p>sudo mkdir /home/www/точное название твоего сайта (мойсайт.ru)</p>
<p>sudo chmod -R tvoeimya:tvoeimya /home/www/moisite.ru (tvoeimya надо поменять на имя пользователя, под которым ты работаешь в своём сервере, Это даст тебе возможность управлять содержимым папки сайта без необходимости входить в сервер под привелегированным пользователем &#8211; root.</p>
<p>(Создадим также два файла внутри папки сайта)</p>
<p>gedit /home/www/moi site.ru/index.html</p>
<p>(вставить в пустой файл что-нибудь вроде &#8211; Это мой первый сайт !!! )</p>
<p>gedit /home/www/moisite.ru/info.php</p>
<p>(Вставить этот код в пустой файл сохранить и закрыть)</p>
<p><?php<br />
phpinfo();<br />
?></p>
<p>Продолжаем: надо отрегулировать fastcgi_params)</p>
<p>sudo gedit /usr/local/nginx/conf/fastcgi_params</p>
<p>(и в самый верх добавляем)</p>
<p>fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;</p>
<p>(а также выключаем, ставим &#8220;#&#8221; перед #fastcgi_param REDIRECT_STATUS 200; примочку для арача потому что мы его здесь не имеем )</p>
<p>(Полируем PHP код)</p>
<p>sudo gedit /usr/local/lib/php.ini</p>
<p>(вставить это в пустой файл)</p>
<p>_________________________________________________________________________________________</p>
<p>magic_quotes_gpc=0<br />
[xcache-common]<br />
#zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20060613/xcache.so<br />
[xcache]<br />
#xcache.shm_scheme = &#8220;mmap&#8221;<br />
#xcache.size = 64M<br />
default_charset = “utf-8″<br />
[memcache]<br />
#extension = memcache.so<br />
#memcache.hash_strategy=&#8221;consistent&#8221;<br />
[memcache]<br />
[suhosin]<br />
#extension = suhosin.so<br />
#extension = apc.so<br />
#apc.shm_size = 48<br />
[suhosin]<br />
; For Unix only. You may supply arguments as well (default: &#8220;sendmail -t -i&#8221;).<br />
sendmail_path = /usr/sbin/sendmail -i -t<br />
upload_max_filesize=8M<br />
[eaccelerator]<br />
#zend_extension=&#8221;/usr/local/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so&#8221;<br />
#eaccelerator.shm_size=&#8221;16&#8243;<br />
#eaccelerator.cache_dir=&#8221;/tmp/eaccelerator&#8221;<br />
#eaccelerator.enable=&#8221;1&#8243;<br />
#eaccelerator.optimizer=&#8221;1&#8243;<br />
#eaccelerator.check_mtime=&#8221;1&#8243;<br />
#eaccelerator.debug=&#8221;0&#8243;<br />
#eaccelerator.filter=&#8221;"<br />
#eaccelerator.shm_max=&#8221;0&#8243;<br />
#eaccelerator.shm_ttl=&#8221;0&#8243;<br />
#eaccelerator.shm_prune_period=&#8221;0&#8243;<br />
#eaccelerator.shm_only=&#8221;0&#8243;<br />
#eaccelerator.compress=&#8221;1&#8243;<br />
#eaccelerator.compress_level=&#8221;9&#8243;<br />
[eaccelerator]</p>
<p>_________________________________________________________________________________________</p>
<p>(Как видно, большинство примочек выключено. Это на потом, потому что ни одна из тех примочек ещё у тебя не установлена. Мы это сделаем позже)</p>
<p>(Надо попробовать стартануть php-fpm)</p>
<p>php-fpm start</p>
<p>(Теперь NGINX)</p>
<p>nginx</p>
<p>(Если ошибок нет &#8211; будь горд собой !!!)</p>
<p>(Надо теперь сделать так чтобы оба сервиса запускались автоматически вместе с запуском сервера)</p>
<p>cd /etc/init.d/</p>
<p>ln -s /usr/local/sbin/php-fpm php-fpm</p>
<p>/usr/sbin/update-rc.d -f php-fpm defaults</p>
<p>(Это было просто для php-fpm, немного сложнее для NGINX)</p>
<p>sudo kill `cat /usr/local/nginx/logs/nginx.pid`<br />
sudo gedit /etc/init.d/nginx<br />
(и вставить этот код в пустой файл)</p>
<p>_________________________________________________________________________________________</p>
<p>### BEGIN INIT INFO<br />
# Provides: nginx<br />
# Required-Start: $all<br />
# Required-Stop: $all<br />
# Default-Start: 2 3 4 5<br />
# Default-Stop: 0 1 6<br />
# Short-Description: starts the nginx web server<br />
# Description: starts nginx using start-stop-daemon<br />
### END INIT INFO</p>
<p>PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin<br />
DAEMON=/usr/local/sbin/nginx<br />
NAME=nginx<br />
DESC=nginx</p>
<p>test -x $DAEMON || exit 0</p>
<p># Include nginx defaults if available<br />
if [ -f /etc/default/nginx ] ; then<br />
. /etc/default/nginx<br />
fi</p>
<p>set -e</p>
<p>case &#8220;$1&#8243; in<br />
start)<br />
echo -n &#8220;Starting $DESC: &#8221;<br />
start-stop-daemon &#8211;start &#8211;quiet &#8211;pidfile /usr/local/nginx/logs/nginx.pid \<br />
&#8211;exec $DAEMON &#8212; $DAEMON_OPTS<br />
echo &#8220;$NAME.&#8221;<br />
;;<br />
stop)<br />
echo -n &#8220;Stopping $DESC: &#8221;<br />
start-stop-daemon &#8211;stop &#8211;quiet &#8211;pidfile /usr/local/nginx/logs/nginx.pid \<br />
&#8211;exec $DAEMON<br />
echo &#8220;$NAME.&#8221;<br />
;;<br />
restart|force-reload)<br />
echo -n &#8220;Restarting $DESC: &#8221;<br />
start-stop-daemon &#8211;stop &#8211;quiet &#8211;pidfile \<br />
/usr/local/nginx/logs/nginx.pid &#8211;exec $DAEMON<br />
sleep 1<br />
start-stop-daemon &#8211;start &#8211;quiet &#8211;pidfile \<br />
/usr/local/nginx/logs/nginx.pid &#8211;exec $DAEMON &#8212; $DAEMON_OPTS<br />
echo &#8220;$NAME.&#8221;<br />
;;<br />
reload)<br />
echo -n &#8220;Reloading $DESC configuration: &#8221;<br />
start-stop-daemon &#8211;stop &#8211;signal HUP &#8211;quiet &#8211;pidfile /usr/local/nginx/logs/nginx.pid \<br />
&#8211;exec $DAEMON<br />
echo &#8220;$NAME.&#8221;<br />
;;<br />
*)<br />
N=/etc/init.d/$NAME<br />
echo &#8220;Usage: $N {start|stop|restart|force-reload}&#8221; >&#038;2<br />
exit 1<br />
;;<br />
esac<br />
exit 0</p>
<p>_________________________________________________________________________________________</p>
<p>(разумеется его надо сохранить, закрыть и сделать исполняемым)</p>
<p>sudo chmod +x /etc/init.d/nginx<br />
sudo /usr/sbin/update-rc.d -f nginx defaults</p>
<p>(Увидишь примерно такой выход):</p>
<p>Adding system startup for /etc/init.d/nginx &#8230;<br />
/etc/rc0.d/K20nginx -> ../init.d/nginx<br />
/etc/rc1.d/K20nginx -> ../init.d/nginx<br />
/etc/rc6.d/K20nginx -> ../init.d/nginx<br />
/etc/rc2.d/S20nginx -> ../init.d/nginx<br />
/etc/rc3.d/S20nginx -> ../init.d/nginx<br />
/etc/rc4.d/S20nginx -> ../init.d/nginx<br />
/etc/rc5.d/S20nginx -> ../init.d/nginx</p>
<p>(Последнее в этом уроке:</p>
<p>Если мы ожидаем хорошее движение на сайте, то необходимо создать файл для logrotate, который автоматически будет сжимать и удалять старые файлы и давать нам возможность контролировать кто бывал на нашем сайте)<br />
sudo gedit /etc/logrotate.d/nginx</p>
<p>(вставить это в пустой файл и сохранить)</p>
<p>_________________________________________________________________________________________</p>
<p>/usr/local/nginx/logs/*.log {<br />
daily<br />
missingok<br />
rotate 9<br />
compress<br />
delaycompress<br />
notifempty<br />
postrotate<br />
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`<br />
endscript<br />
} </p>
]]></content:encoded>
			<wfw:commentRss>http://iphp.com.ua/archives/470/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Настройка безпарольной аутентификации по ssh</title>
		<link>http://iphp.com.ua/archives/466</link>
		<comments>http://iphp.com.ua/archives/466#comments</comments>
		<pubDate>Tue, 18 Aug 2009 14:35:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD/Linux]]></category>
		<category><![CDATA[Soft/Tools]]></category>

		<guid isPermaLink="false">http://iphp.com.ua/?p=466</guid>
		<description><![CDATA[Допустим, вам необходимо настроить безпарольный вход по ssh (scp и sftp тоже) на удаленный сервер remote.org.ua под пользователем user. Если ваш имя вашего локального пользователя совпадает с удаленным, то user@ везде можно опустить. 1) создаем открытый и закрытый ключ нашей локальной системы $ ssh-keygen -t rsa жмем энтер отказываясь от ключевой фразы 2) если в [...]]]></description>
			<content:encoded><![CDATA[<p>Допустим, вам необходимо настроить безпарольный вход по ssh (scp и sftp тоже) на удаленный сервер remote.org.ua под пользователем user.<br />
Если ваш имя вашего локального пользователя совпадает с удаленным, то user@ везде можно опустить.</p>
<p>1) создаем открытый и закрытый ключ нашей локальной системы<br />
$ ssh-keygen -t rsa<br />
жмем энтер отказываясь от ключевой фразы</p>
<p>2) если в системе есть программа ssh-copy-id, то настраиваем удаленную систему на то, что бы оно авторизировало ssh по открытому ключу<br />
$ ssh-copy-id -i ~/.ssh/id_rsa user@remote.org.ua<br />
переходим к шагу 4)</p>
<p>3) если ssh-copy-id нет то можно сделать это ручками. вот последовательность действий с объяснениями</p>
<p>3.1) копируем открытый ключ на удаленную систему<br />
$ scp ~/.ssh/id_rsa.pub user@remote.org.ua:~ незабываем ввести пароль. ведь мы еще не настроили беспарольный вход Ж:-)</p>
<p>3.2) логинимся на удаленный сервер<br />
$ ssh user@remoute.org.ua</p>
<p>3.3) заносим открытый ключ нашей локальный системы в авторизированые ключи удаленной системы, устанавливаем правильные права и убираем за собой мусор:<br />
remote$ [ -d ~/.ssh ] || (mkdir ~/.ssh; chmod 711 ~/.ssh) # создадим ~/.ssh директорию если ее нет и дадим нужные права<br />
remote$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys # добавляем открытый ключ к авторизированым ключам<br />
remote$ chmod 600 ~/.ssh/authorized_keys # и делаем правильные права(иначе ssh откажется брать отсюда ключи)<br />
remote$ rm ~/id_rsa.pub # удаляем ненужное</p>
<p>4) проверяем что все работает. запускаем на локальном хосту<br />
$ ssh user@remoute.org.ua<br />
или например<br />
$ scp .zshrc user@remoute.org.ua:~<br />
должно сработать без пароля.</p>
]]></content:encoded>
			<wfw:commentRss>http://iphp.com.ua/archives/466/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Полезные bash-команды</title>
		<link>http://iphp.com.ua/archives/436</link>
		<comments>http://iphp.com.ua/archives/436#comments</comments>
		<pubDate>Thu, 23 Jul 2009 23:14:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD/Linux]]></category>
		<category><![CDATA[bash shell]]></category>

		<guid isPermaLink="false">http://iphp.com.ua/archives/436</guid>
		<description><![CDATA[Кто слышал о BASH? Думаю все, кто, хоть как-то, связан с IT индустрией. О синтаксисе и командах написана не одна тысяча книг. Поэтому здесь, предлагаю, рассмотреть только “редкие” команды, которые трудно найти, но могут быть полезными. Возвращает количество файлов в том числе и во вложенных папках: ls -R -l &#124; wc -l Возвращает объём папки(со [...]]]></description>
			<content:encoded><![CDATA[<p>Кто слышал о BASH? Думаю все, кто, хоть как-то, связан с IT индустрией. О синтаксисе и командах написана не одна тысяча книг. Поэтому здесь, предлагаю, рассмотреть только “редкие” команды, которые трудно найти, но могут быть полезными.<br />
Возвращает количество файлов в том числе и во вложенных папках:</p>
<pre class="brush: php;">ls -R -l | wc -l</pre>
<p>Возвращает объём папки(со вложеностями):</p>
<pre class="brush: php;">du -sh</pre>
<p>Выводит максимальное разрешение текстур (wallpapper, skydom и тд) поддерживаемое системой:</p>
<pre class="brush: php;">xvinfo | grep max</pre>
<p>Высчитывает количество строк в файлах по маске (параметр “*.php”) в текущей и во вложеных директориях:</p>
<pre class="brush: php;">find . -name &quot;*.php&quot; -type f -print0 | xargs -0 wc -l</pre>
<p>Генерирует произвольный пароль в 16 (параметр -c16) символов:</p>
<pre class="brush: php;">/dev/urandom tr -dc A-Za-z0-9_ | head -c16 ; echo</pre>
<p>Разбивает файл bigfile на файлы не превышающие 700 мегабайт (параметр 700m), называя новые файлы BIG_aa, BIG_ab, … (общая маска задаётся последним параметром):</p>
<pre class="brush: php;">split -b 700m bigfile BIG_</pre>
<p>Выводит список популярных на машине команд с количеством вызовов:</p>
<pre class="brush: php;">history|awk '{a[$2]++ } END{for(i in a){print a[ i ] &quot; &quot; i}}'|sort -rn|head</pre>
]]></content:encoded>
			<wfw:commentRss>http://iphp.com.ua/archives/436/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Найти и удалить в bash</title>
		<link>http://iphp.com.ua/archives/432</link>
		<comments>http://iphp.com.ua/archives/432#comments</comments>
		<pubDate>Thu, 23 Jul 2009 23:07:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD/Linux]]></category>
		<category><![CDATA[bash]]></category>

		<guid isPermaLink="false">http://iphp.com.ua/archives/432</guid>
		<description><![CDATA[Простая команда для поиска и удаления в консоле: $ rm -rf `find /folder_name/ -name *patern*` Пример: $ rm -rf `find . -name .svn` Удалит все папки .svn из текущей и всех вложенных дерикторий.]]></description>
			<content:encoded><![CDATA[<p>Простая команда для поиска и удаления в консоле:</p>
<pre class="brush: php;"> $ rm -rf `find /folder_name/ -name *patern*` </pre>
<p>Пример:</p>
<pre class="brush: php;"> $ rm -rf `find . -name .svn` </pre>
<p>Удалит все папки .svn из текущей и всех вложенных дерикторий.</p>
]]></content:encoded>
			<wfw:commentRss>http://iphp.com.ua/archives/432/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Настройка NAT во FreeBSD</title>
		<link>http://iphp.com.ua/archives/418</link>
		<comments>http://iphp.com.ua/archives/418#comments</comments>
		<pubDate>Tue, 30 Jun 2009 17:59:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD/Linux]]></category>

		<guid isPermaLink="false">http://iphp.com.ua/archives/418</guid>
		<description><![CDATA[В статье описывается процесс настройки NAT&#8217;а (Network Address Translation) на простом примере предоставления доступа к ресурсам внешней сети (или интернету) из внутренней локальной сети. В данной статье мы будем рассматривать настройку Nat на примере раздачи интернета в локальную сеть. Итак, у нас есть сервер под управлением FreeBSD, подключенный к сети провайдера («внешняя сеть»). Также имеется [...]]]></description>
			<content:encoded><![CDATA[<p>В статье описывается процесс настройки <strong>NAT&#8217;а</strong> (<em>Network Address Translation</em>) на простом примере предоставления доступа к ресурсам внешней сети (или интернету) из внутренней локальной сети.</p>
<p>В данной статье мы будем рассматривать настройку <strong>Nat</strong> на примере раздачи интернета в локальную сеть.</p>
<p>Итак, у нас есть сервер под управлением <strong>FreeBSD</strong>, подключенный к сети провайдера (<em>«внешняя сеть»</em>).<br />
Также имеется один или несколько компьютеров (<em>«внутренняя сет</em>ь»), которым нужно дать доступ к ресурсам сети интернет.<br />
Подключить компьютеры внутренней сети напрямую к внешней нельзя, так как у нас есть всего 1 IP-Адрес во внешней сети, который выдан нашему серверу.<br />
Выходом из ситуации будет соединение сетей через сервер (в данной ситуации всётаки «роутер» будет более правильно) при помощи технологии <strong>NAT</strong><br />
Предположим что сеть провайдера имеет диапазон 123.123.123.0/24, а IP который выдал нам провайдер 123.123.123.111.<br />
Внутренняя сеть же имеет диапазон 192.168.10.0/24 и IP нашего роутера в ней 192.168.0.1<br />
Диапазон IP адресов во внутренней сети может быть любой, однако необходимо чтобы он не пересекался с диапазонами ни в одной внешней сети.<br />
<span id="more-418"></span></p>
<blockquote><p>Рекомендуется придерживаться зарезервированных для локальных сетей диапазонов, которые не используются в интернете, а именно:<br />
10.0.0.0 — 10.255.255.255<br />
172.16.0.0 — 172.31.255.255<br />
192.168.0.0 — 192.168.255.255</p></blockquote>
<p>Итак в итоге мы имеем:</p>
<p><strong>Внешняя сеть</strong><em>(сеть интернет)</em>:<br />
Интерфейс: rl0<br />
<strong>IP:</strong> 123.123.123.111<br />
<strong>Маска под сети:</strong> 255.255.255.0<br />
<strong>Шлюз:</strong> 123.123.123.1</p>
<p><strong>Внутренняя сеть</strong><em>(локальная сеть)</em>:<br />
<strong>Интерфейс:</strong> rl1<br />
<strong>IP:</strong> 192.16.0.1<br />
<strong>Маска под сети:</strong> 255.255.255.0</p>
<p><strong>Настройка сервера<br />
</strong></p>
<p>Непосредственно за преобразование адресов (<strong>NAT</strong>) отвечает демон <strong>NATD</strong>.<br />
Сам по себе он не может обрабатывать пакеты. Для обработки пакет должен быть передан ему фаерволлом.<br />
В данной статье мы используем фаерволл <strong>ipfw</strong>.<br />
Настройка сводится к нескольким шагам, некоторые вы возможно пропустите, если система уже имеет подходящие настройки:</p>
<p><strong>1. Сборка ядра</strong></p>
<p>Для получения возможности использовать <strong>NAT</strong> и Фаерволла, нам потребуется собрать новое ядро с дополнительными опциями:</p>
<div>
<div>
<pre style="font-family: monospace;">options IPFIREWALL
options IPDIVERT</pre>
</div>
</div>
<blockquote><p>Более подробно о сборке ядра можно почитать в соответствующей главе <a href="http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/kernelconfig.html">Руководства по FreeBSD</a></p></blockquote>
<p>Первая опция включает фаерволл <strong>ipfw</strong>, а вторая — возможность передавать пакеты на обработку приложениям.</p>
<blockquote><p>Если вы раньше никогда не собирали своё ядро, то не расстраивайтесь, здесь всё просто.<br />
Переходим в папку с файлами где хранится не скомпилированое ядро, создаём свою собственную конфигурацию ядра и добавляем в него строчки опций которые Вам необходимы<br />
После чего остаётся только скомпилировать и установить новое ядро.</p></blockquote>
<p>Для компиляции нового ядра выполните следующие действия:</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>sys<span style="color: #000000; font-weight: bold;">/</span>i386<span style="color: #000000; font-weight: bold;">/</span>conf
<span style="color: #c20cb9; font-weight: bold;">cp</span> GENERIC MYKERNEL
ee MYKERNEL</pre>
</div>
</div>
<p>Изменяем строку</p>
<div>
<div>
<pre style="font-family: monospace;">ident GENERIC</pre>
</div>
</div>
<p>на</p>
<div>
<div>
<pre style="font-family: monospace;">ident MYKERNEL</pre>
</div>
</div>
<p>после чего добавляем строки</p>
<div>
<div>
<pre style="font-family: monospace;">options IPFIREWALL
options IPDIVERT</pre>
</div>
</div>
<p>и сохраняем.</p>
<p>Конфигурация ядра готова. Теперь осталось ее скомпилировать и установить новое ядро:</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>src
<span style="color: #c20cb9; font-weight: bold;">make</span> buildkernel <span style="color: #007800;">KERNCONF</span>=MYKERNEL
<span style="color: #c20cb9; font-weight: bold;">make</span> installkernel <span style="color: #007800;">KERNCONF</span>=NATKERNEL</pre>
</div>
</div>
<p>2. Настройка фаерволла</p>
<p>Если вы ранее использовали фаерволл <strong>ipfw</strong>, то необходимо добавить к нему следующее правило:</p>
<div>
<div>
<pre style="font-family: monospace;">divert natd ip any to any via rl0</pre>
</div>
</div>
<p>Означает оно следующее: передавать все ip пакеты на обработку внешней программе, «висящей» на стандартном порту natd (8668).</p>
<p>Если же фаерволл у вас не настроен, то мы его сейчас настроим <img src="http://f1.co.ua/wp-includes/images/smilies/icon_smile.gif" alt=":)" /><br />
Создаём файл <em>/etc/firewall.conf</em> и пишем в нём следующие строки:</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #007800;">fw</span>=<span style="color: #ff0000;">"/sbin/ipfw -q"</span>

<span style="color: #800000;">${fw}</span> <span style="color: #660033;">-f</span> flush
<span style="color: #800000;">${fw}</span> add divert natd ip any to any via rl0
<span style="color: #800000;">${fw}</span> add <span style="color: #000000;">65534</span> allow ip any to any</pre>
</div>
</div>
<p>После чего сохраняем файл.<br />
Теперь необходимо поставить права на выполнение данного файла.</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">700</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>firewall.conf</pre>
</div>
</div>
<p><strong>3. Настройка параметров авто запуска сети, фаерволла и natd</strong></p>
<p>Сейчас нам необходимо внести некоторые изменения в файл <em>/etc/rc.conf</em> для обеспечения автоматической настойки сети, фаерволла и запуска <strong>NAT</strong>&#8216;а при загрузке системы.</p>
<p><strong>Сеть:</strong></p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #007800;">ifconfig_rl0</span>=<span style="color: #ff0000;">"inet 123.123.123.111 netmask 255.255.255.0"</span>
<span style="color: #007800;">ifconfig_rl1</span>=<span style="color: #ff0000;">"inet 192.168.0.1 netmask 255.255.255.0"</span>
<span style="color: #007800;">defaultrouter</span>=<span style="color: #ff0000;">"123.123.123.1"</span></pre>
</div>
</div>
<p><strong>Фаерволл</strong>:</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #007800;">firewall_enable</span>=<span style="color: #ff0000;">"YES"</span>
<span style="color: #007800;">firewall_script</span>=<span style="color: #ff0000;">"/etc/firewall.conf"</span></pre>
</div>
</div>
<p><strong>NAT:</strong></p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #007800;">gateway_enable</span>=<span style="color: #ff0000;">"YES"</span>
<span style="color: #007800;">natd_enable</span>=<span style="color: #ff0000;">"YES"</span>
<span style="color: #007800;">natd_interface</span>=<span style="color: #ff0000;">"rl0"</span></pre>
</div>
</div>
<p>Если Вы хотите перенаправить какой-то определенный порт на определенный компьютер в сети то необходимо отредактировать(создать) файл <em>/etc/natd.conf</em> и прописать в нем:</p>
<div>
<div>
<pre style="font-family: monospace;"> redirect_port tcp 192.168.0.2:<span style="color: #000000;">3389</span> <span style="color: #000000;">3389</span></pre>
</div>
</div>
<p>Данная строчка означает что все входящие соединения на внешний порт <strong>3389</strong> будут перенаправлены на <strong>192.168.10.2:3389</strong></p>
<p>Также желательно добавить следующую строку в <em>/etc/sysctl.conf</em></p>
<div>
<div>
<pre style="font-family: monospace;">net.inet.ip.forwarding=<span style="color: #000000;">1</span></pre>
</div>
</div>
<p>Это аналогия <em>gateway_enable=&#8221;YES&#8221;</em></p>
<p>На этом базовая настройка сервера закончена.<br />
После перезагрузки <strong>NAT</strong> должен заработать.<br />
Если этого не произошло, то проверьте правильно ли вы всё сделали.</p>
]]></content:encoded>
			<wfw:commentRss>http://iphp.com.ua/archives/418/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Настройка сетевых интерфейсов для разных Unix систем</title>
		<link>http://iphp.com.ua/archives/414</link>
		<comments>http://iphp.com.ua/archives/414#comments</comments>
		<pubDate>Tue, 30 Jun 2009 17:57:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD/Linux]]></category>

		<guid isPermaLink="false">http://iphp.com.ua/archives/414</guid>
		<description><![CDATA[В данной статье мы рассмотрим как правильно настроить сетевой интерфейс для разных Unix систем. В качестве примера предположим что у нас есть следующие данные: IP address : 192.168.10.14, 192.168.10.15 Mask : 255.255.255.0 Gateway : 192.168.10.1 DNS : 192.168.10.3 DNS : 192.168.10.2 Итак приступим: Для операционной системы FreeBSD: В конфигурационный файл /etc/rc.conf добавляем: # Основной адрес [...]]]></description>
			<content:encoded><![CDATA[<p>В данной статье мы рассмотрим как правильно настроить сетевой интерфейс для разных <strong>Unix</strong> систем.<br />
В качестве примера предположим что у нас есть следующие данные:</p>
<div>
<div>
<pre style="font-family: monospace;">IP address : 192.168.10.14, 192.168.10.15
Mask : 255.255.255.0
Gateway : 192.168.10.1
DNS : 192.168.10.3
DNS : 192.168.10.2</pre>
</div>
</div>
<p>Итак приступим:<br />
<strong>Для операционной системы FreeBSD:</strong><br />
В конфигурационный файл <em>/etc/rc.conf</em> добавляем:</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #666666; font-style: italic;"># Основной адрес</span>
<span style="color: #007800;">ifconfig_rl0</span>=<span style="color: #ff0000;">"inet 192.168.10.14 netmask 255.255.255.0"</span>
<span style="color: #666666; font-style: italic;"># Основной Шлюз</span>
<span style="color: #007800;">defaultrouter</span>=<span style="color: #ff0000;">"192.168.10.1"</span>
<span style="color: #666666; font-style: italic;"># Алиас</span>
<span style="color: #007800;">ifconfig_rl0_alias0</span>=<span style="color: #ff0000;">"inet 192.168.10.15 netmask 255.255.255.0"</span></pre>
</div>
</div>
<p><em>rl0</em> — название сетевого интерфейса который настраиваемого мы настраиваем.</p>
<p>После того как Вы сохранили файл нужно перезагрузить сеть выполнив команду</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>rc.d<span style="color: #000000; font-weight: bold;">/</span>netif restart
<span id="more-414"></span></pre>
</div>
</div>
<p><strong>Для операционной системы OpenBSD</strong></p>
<p>В конфигурационный файл <strong>/etc/hostname.fxp0</strong> добавляем:</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #666666; font-style: italic;"># Основной адрес:</span>
inet 192.168.192.14 255.255.255.0

<span style="color: #666666; font-style: italic;"># Алиас</span>
inet <span style="color: #7a0874; font-weight: bold;">alias</span> 192.168.192.15 255.255.255.255</pre>
</div>
</div>
<p>А в конфигурационный файл <strong>/etc/mygate</strong> просто добавляем:</p>
<div>
<div>
<pre style="font-family: monospace;">192.168.192.1</pre>
</div>
</div>
<p><em>fxp0</em> — название настраиваемого сетевого интерфейса</p>
<p>После чего нужно перезагрузить сеть выполнив команду</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #c20cb9; font-weight: bold;">sh</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>netstart</pre>
</div>
</div>
<p><strong>Для операционной системы Gentoo</strong></p>
<p>В конфигурационный файл <strong>/etc/conf.d/net</strong> добавляем:</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #666666; font-style: italic;"># Основной адрес:</span>
<span style="color: #007800;">config_eth0</span>=<span style="color: #7a0874; font-weight: bold;">(</span> <span style="color: #ff0000;">"192.168.10.14 netmask 255.255.255.0"</span> <span style="color: #7a0874; font-weight: bold;">)</span>

<span style="color: #007800;">routes_eth0</span>=<span style="color: #7a0874; font-weight: bold;">(</span> <span style="color: #ff0000;">"default gw 192.168.10.1"</span> <span style="color: #7a0874; font-weight: bold;">)</span></pre>
</div>
</div>
<p>Для добавления алиаса приводим описание настроек интерфейса к следующему виду:</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #007800;">config_eth0</span>=<span style="color: #7a0874; font-weight: bold;">(</span>
<span style="color: #ff0000;">"192.168.10.14/24"</span>
<span style="color: #ff0000;">"192.168.10.15/24"</span>
<span style="color: #7a0874; font-weight: bold;">)</span></pre>
</div>
</div>
<p><em>eth0</em> — название настраиваемого сетевого интерфейса</p>
<p>После чего нужно перезагрузить сеть выполнив команду</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>net.eth0 restart</pre>
</div>
</div>
<p><strong>Для операционной системы Debian/Ubuntu</strong></p>
<p>В конфигурационный файл <strong>/etc/network/interfaces</strong> добавляем:</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #666666; font-style: italic;"># Основной адрес:</span>
auto eth0
iface eth0 inet static
address 192.168.192.14
network 192.168.192.0
netmask 255.255.255.0
broadcast 192.168.192.255
gateway 192.168.192.1

<span style="color: #666666; font-style: italic;"># Алиас</span>
auto eth0:<span style="color: #000000;">1</span>
iface eth0:<span style="color: #000000;">1</span> inet static
address 192.168.192.15
network 192.168.192.0
netmask 255.255.255.0
broadcast 192.168.192.255
gateway 192.168.192.1</pre>
</div>
</div>
<p><em>eth0</em>— название настраиваемого сетевого интерфейса.</p>
<p>После чего нужно перезагрузить сеть:</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>networking restart</pre>
</div>
</div>
<p><strong>Для операционных систем Fedora Core/Red Hat Enterprise Linux (RHEL)/Cent OS/Alt Linux</strong></p>
<p>В конфигурационный файл /etc/sysconfig/network-scripts/ifcfg-eth0 добавляем:</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #666666; font-style: italic;"># Основной адрес:</span>
<span style="color: #007800;">DEVICE</span>=eth0
<span style="color: #007800;">BOOTPROTO</span>=static
<span style="color: #007800;">IPADDR</span>=192.168.10.14
<span style="color: #007800;">NETMASK</span>=255.255.255.0
<span style="color: #007800;">NETWORK</span>=192.168.10.0
<span style="color: #007800;">BROADCAST</span>=192.168.10.255
<span style="color: #007800;">ONBOOT</span>=<span style="color: #c20cb9; font-weight: bold;">yes</span></pre>
</div>
</div>
<p>А в конфигурационный файл <strong>/etc/sysconfig/network</strong> добавляем</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #666666; font-style: italic;"># Наш Шлюз</span>
<span style="color: #007800;">GATEWAY</span>=192.168.192.1</pre>
</div>
</div>
<p>Для добавления алиаса требуется создать файл <em>/etc/sysconfig/network-scripts/ifcfg-eth0:1</em> с таким содержимым:</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #007800;">DEVICE</span>=eth0:<span style="color: #000000;">1</span>
<span style="color: #007800;">BOOTPROTO</span>=static
<span style="color: #007800;">IPADDR</span>=192.168.10.15
<span style="color: #007800;">NETMASK</span>=255.255.255.0
<span style="color: #007800;">NETWORK</span>=192.168.10.0
<span style="color: #007800;">BROADCAST</span>=192.168.10.255
<span style="color: #007800;">ONBOOT</span>=<span style="color: #c20cb9; font-weight: bold;">yes</span></pre>
</div>
</div>
<p><em>eth0</em> — название настраиваемого сетевого интерфейса</p>
<p>После чего нужно перезагрузить сеть выполнив команду</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>rc.d<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>network restart</pre>
</div>
</div>
<blockquote><p>Крайне не рекомендуется выполнять данную команду если Вы работаете через удаленное подключение <strong>SSH</strong></p></blockquote>
<blockquote><p>Просмотреть какие сетевые интерфейсы используются в системе Вы можете при помощи команды <strong>ifconfig</strong></p></blockquote>
<p>Для настройки <strong>DNS</strong> для всех операционных систем семейства <strong>Unix</strong> необходимо в конфигурационный файл <em>/etc/resolv.conf</em> добавить следующее:</p>
<div>
<div>
<pre style="font-family: monospace;">nameserver 192.168.10.7
nameserver 192.168.10.2</pre>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://iphp.com.ua/archives/414/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>autoconf 2.62 и старые версии FreeBSD</title>
		<link>http://iphp.com.ua/archives/394</link>
		<comments>http://iphp.com.ua/archives/394#comments</comments>
		<pubDate>Mon, 13 Apr 2009 11:45:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD/Linux]]></category>
		<category><![CDATA[autoconf]]></category>

		<guid isPermaLink="false">http://iphp.com.ua/?p=394</guid>
		<description><![CDATA[При необходимости установить autoconf версии 2.62 и выше из портов в FreeBSD 5.x или, тем более, 4.x, возникает проблема с texinfo. Например, появляются такие ошибки: autoconf-2.62.texi:1723: Unknown command `'. autoconf-2.62.texi:3353: Unknown command `’. По этой ссылке указано, что надо с этим делать. В общем, надо всего-то добавить пару строк в Makefile и чуть-чуть изменить последнюю [...]]]></description>
			<content:encoded><![CDATA[<p>При необходимости установить autoconf версии 2.62 и выше из портов в FreeBSD 5.x или, тем более, 4.x, возникает проблема с texinfo. Например, появляются такие ошибки:</p>
<pre class="brush: php;">
autoconf-2.62.texi:1723: Unknown command `'.
autoconf-2.62.texi:3353: Unknown command `’.
</pre>
<p><a href="http://lists.freebsd.org/pipermail/freebsd-ports-bugs/2008-May/142473.html" target="_blank">По этой ссылке указано,</a> что надо с этим делать. В общем, надо всего-то добавить пару строк в Makefile и чуть-чуть изменить последнюю строку, и всё соберётся без проблем.</p>
<p>UPDATE: получившийся у меня <a href="http://iphp.com.ua/wp-content/uploads/2009/04/makefile.txt">Makefile</a></p>
<p>UPDATE2: in case you don’t speak Russian, please, read this the full version of this post.</p>
<p>If you have ‘old’ version of FreeBSD (4-5) and experiencing problems with texinfo while updating autoconf, you should read this link. It tells what you should add to Makefile in order to update autoconf. As a result, this <a href="http://iphp.com.ua/wp-content/uploads/2009/04/makefile.txt">Makefile</a> worked for me.</p>
]]></content:encoded>
			<wfw:commentRss>http://iphp.com.ua/archives/394/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tip: запускать задачу раз в месяц в субботу</title>
		<link>http://iphp.com.ua/archives/374</link>
		<comments>http://iphp.com.ua/archives/374#comments</comments>
		<pubDate>Tue, 17 Mar 2009 21:44:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD/Linux]]></category>

		<guid isPermaLink="false">http://iphp.com.ua/?p=374</guid>
		<description><![CDATA[Часто необходимо запускать что-то (например полный бекап бд) раз в месяц, но в выходной, допустим в ночь с субботы на воскресенье. Это можно сделать в crontab следующим образом 0 23 * * 6 [`date &#34;+%d&#34;` -lt 8] &#38;&#38; /path/to/script Это запустит скрипт в первую субботу месяца в 23:00.]]></description>
			<content:encoded><![CDATA[<p>Часто необходимо запускать что-то (например полный бекап бд) раз в месяц, но в выходной, допустим в ночь с субботы на воскресенье.</p>
<p>Это можно сделать в crontab следующим образом</p>
<pre class="brush: cpp;">
0 23 * * 6 [`date &quot;+%d&quot;` -lt 8] &amp;&amp; /path/to/script
</pre>
<p>Это запустит скрипт в первую субботу месяца в 23:00.</p>
]]></content:encoded>
			<wfw:commentRss>http://iphp.com.ua/archives/374/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Файловая система FreeBSD: иерархия и монтирование</title>
		<link>http://iphp.com.ua/archives/352</link>
		<comments>http://iphp.com.ua/archives/352#comments</comments>
		<pubDate>Mon, 02 Mar 2009 17:19:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD/Linux]]></category>

		<guid isPermaLink="false">http://iphp.com.ua/?p=352</guid>
		<description><![CDATA[Созданием разделов и файловых систем на них дело подготовки дискового пространства к использованию не заканчивается. Все созданные файловые системы нужно еще сделать доступными для FreeBSD. Для чего они должны быть смонтированы — то есть включены в единую иерархию каталогов и файлов, для обозначения которой также используется название файловой системы. Однако если раньше речь шла о [...]]]></description>
			<content:encoded><![CDATA[<p>Созданием разделов и файловых систем на них дело подготовки дискового пространства к использованию не заканчивается. Все созданные файловые системы нужно еще сделать доступными для FreeBSD. Для чего они должны быть смонтированы — то есть включены в единую иерархию каталогов и файлов, для обозначения которой также используется название файловой системы. Однако если раньше речь шла о физической организации данных, то теперь пора ознакомиться с ее логикой.<br />
Логика файловой системы</p>
<p>Логически файловая система FreeBSD (как и любой Unix-системы) организована по древовидному принципу: в основании ее лежит корень (корневой каталог, обозначаемый символом / и именуемый также root-каталогом; последнее не должно путать с каталогом /root, который выполняет роль домашнего для суперпользователя). От корневого каталога, который можно уподобить скорее стволу дерева, отходят ветви — вложенные в него подкаталоги, и побеги — обычные файлы. Последних, правда, немного: в версиях FreeBSD 5-й ветки это пара профильных файлов — /.cshrc и /.profile, на самом деле дублирующие профильные файлы суперпользователя (в каталоге /root), некий энтропийный (/entropy) файл и файл с описанием авторских прав на систему /COPYRIGHT.<span id="more-352"></span></p>
<p>А вот подкаталогов в корневом каталоге довольно много, и некоторые из них устроены внутри весьма сложно, содержа в себе изрядное количество вложенных подкаталогов более глубоких уровней.</p>
<p>В принципе иерархия каталогов во всех Unix-системах похожа, поскольку регламентируется, во-первых, многолетней традицией, во-вторых — всякого рода стандартизирующими документами, в частности, FHS (Filesystem Hierarchy Standard), который ныне доступен в русском переводе.</p>
<p>Стандарт FHS был разработан первоначально для упорядочивания структуры каталогов в многочисленных дистрибутивах Linux. И лишь позднее он был приспособлен для других Unix-подобных систем (в том числе и BSD-клана). Однако именно иерархия каталогов FreeBSD может послужить примером для образцового следования духу FHS. А буквально штучные отступления в ней от его буквы всегда функционально обусловлены.</p>
<p>Стандарт FHS покоится на двух основополагающих принципах — четком отделении в файловой иерархии каталогов разделяемых и неразделяемых, с одной стороны, и неизменяемых и изменяемых — с другой.</p>
<p>Противопоставление разделяемых и неразделяемых каталогов обусловлено изначально сетевой природой Unix вообще и FreeBSD в частности. То есть данные, относящиеся к локальной машине (например, файлы конфигурирования ее устройств) должны лежать в каталогах, отдельных от тех, данные которых доступны с других машин в сети, локальной или глобальной (примером чему являются не только пользовательские данные, но и программы).</p>
<p>Суть противопоставления неизменяемых и изменяемых каталогов легко пояснить на примере. Так, те же пользовательские программы по природе своей должны быть неизменяемыми (вернее, доступными для модификации только администратору системы, но не самому пользователю, применяющему их в своей работе). В то же время эти программы при своей работе генерируют не только файлы данных, скажем, тексты или изображения (изменяемая их природа ясна без комментариев), но всякого рода служебную информацию, типа log-файлов, временных файлов и тому подобного). Каковая и должна группироваться в каталогах, отделенных от собственно исполнимых файлов программ, необходимых для их запуска библиотек, конфигурационных файлов и т.д.</p>
<p>Четкое следовании концепции отчленения разделяемых и неразделяемых, неизменяемых и неизменяемых каталогов друг от друга позволяет, в рамках единой древовидной файловой иерархии, обособить отдельные ее ветви физически — то есть в виде самостоятельных файловых систем, размещенных на изолированных устройствах (дисках, дисковых слайсах, партициях; в общем случае — и на удаленных, связанных по сети, носителях, но об этом не будет сейчас разговора). Резонов к тому много — и повышение быстродействия, и увеличение надежности, и просто соображения удобства, — но и о них сейчас речь не пойдет. Потому что сейчас для нас важно только то, что эти ветви файлового древа должны быть инкорпорированы в общую файловую систему.</p>
<p>В предыдущей заметке говорилось, что всякий файл (в том числе и каталог) опознается системой не по ее имени, а по уникальному идентификатору его записи в таблице inodes. Существуют средства для того, чтобы эти файловые идентификаторы просмотреть. Одно из них — команда ls с опцией i, которая выведет идентификаторы каждого именованного файла. Данная для корневого каталога -<br />
$ ls -i</p>
<p>она покажет нам несколько неожиданную картину (для упрощения из вывода исключены сведения об обычных файлах и символических ссылках в корне, а оставшиеся каталоги отсортированы по их идентификаторам)<br />
2 ../<br />
2 ./<br />
2 dev/<br />
2 home/<br />
2 tmp/<br />
2 usr/<br />
2 var/<br />
3 cdrom/<br />
4 mnt/<br />
5 root/<br />
8257 dist/<br />
8258 bin/<br />
8294 proc/<br />
8295 sbin/<br />
16512 stand/<br />
24768 etc/<br />
24776 boot/</p>
<p>Из этого примера (относящегося к файловой системе машины, на которой эти строки пишутся) видно, что аж 7 каталогов имеют одинаковые цифровые идентификаторы, равные 2. Спрашивается, какая же здесь уникальность?</p>
<p>С первыми двумя элементами списка разобраться легко: ./ представляет собой обозначение текущего каталога (в данном случае корневого), а ../ — каталога, родительского по отношению к текущему; а поскольку выше корня в файловой иерархии по определению ничего нет, то он обозначает самого себя. Так что неудивительно, что ./ и ../ имеют один и тот же идентификатор — это разные обозначения (жесткие ссылки, или, иначе, дублирующие имена) для одного и того же, корневого, каталога.</p>
<p>А вот то же, как кажется на первый взгляд, значение идентификатора для каталогов /dev, /home, /tmp, /usr, /var требует объяснения. Однако оно — простое: все это каталоги, в которые смонтированы самостоятельные файловые системы, либо расположенные на отдельных устройствах — дисковых партициях, как каталоги /home, /usr, /var, либо виртуальные файловые системы, не надстраивающие какое-либо реальное дисковой устройство (каталог /dev с файловой системой устройств и, в данном случае, каталог /tmp, в который смонтирована файловая система в оперативной памяти, разговор о которой еще предстоит). А поскольку таблица inodes — своя для каждой файловой системы, нет ничего удивительного в том, что корень каждой из них идентифицируется числом 2 — нумерация inodes в них идет в собственной системе отсчета.</p>
<p>Так вот, монтирование — это и есть включение файловой с системы в какой-либо из существующих в корневой системе каталог (не обязательно непосредственно в корне, он может быть любой степени вложенности, что проиллюстрируется чуть ниже). Без этого каталоги и файлы такой монтируемой системы просто недоступны. Это важно понимать, когда сталкиваешься выражениями вроде «создать файловую систему /usr». Из сказанного выше очевидно, что создается-то (командой newfs) просто некая абстрактная файловая система, а свое «имя» она обретает только в момент монтирования в указанный каталог.</p>
<p>Интересно, что и идентификатор каталога для монтирования (он еще именуется точкой монтирования, mount point) обретается только в момент монтирования. Чтобы убедиться в этом, проведем простой эксперимент. В каталоге /mnt, предназначенном специально для монтирования временно подключаемых файловых систем) можно увидеть три подкаталога — /mnt/disk, mnt/iso, /mnt/usb (это в моей системе, я их создал для собственного удобства; изначально каталог /mnt во FreeBSD пуст). При старте системы в них ничего не монтируется, и обычное их состояние — быть пустыми. Если просмотреть их идентификаторы, то можно видеть нечто вроде такого:<br />
$  ls -i1 /mnt                                                           16:46 ttyp0<br />
18 disk/<br />
24 iso/<br />
19 usb/</p>
<p>Теперь возьмем и смонтируем в /mnt/usb флэш-накопитель с USB-интерфейсом (именно для этого я его и предназначал) и повторим просмотр. И видим:<br />
18 disk/<br />
24 iso/<br />
 2 usb/</p>
<p>То есть идентификаторы каталогов, оставшихся пустыми (/mnt/disk и /mnt/iso) не изменились, а идентификатор каталога /mnt/usb волшебным образом изменился на 2. Ибо в момент монтирования он стал корневым для своей собственной файловой системы и точкой отсчета для исчисления inodes всех записанных на ней файлов.</p>
<p>Немного отвлечемся и вспомним о жестких ссылках, посредством которых одному и тому же inode и относящимся к нему блокам данных могут быть присвоены разные имена. Теперь понятно, почему все такие файлы-дублеры должны лежать в одной файловой системе: ведь в разных файловых системах — своя, не совпадающая, нумерация inodes, и идентифицировать их по номерам невозможно (иначе как бы система отличила каталоги /usr и /var из нашего примера — ведь имена файлов ей глубоко до лампочки). Для символических же ссылок, имеющих собственные inode (собственно, и ничего, кроме них) со своими идентификаторами, нумеруемыми в системе отсчета файловой системы, в которой они находятся, такого ограничения нет. И могут символические ссылки лежать где угодно (в том числе и на удаленной машине — не только на иной партиции).</p>
<p>Вернемся, однако, к примеру нашего корневого каталога. Из всего рассмотренного видно, что целый ряд его ветвей лежит на отдельных партициях и образует собственные файловые системы (собственно, именно для этого мы и создавали и те, и другие). И, следовательно, все они нуждаются в монтировании.<br />
9. Практика монтирования</p>
<p>Целям монтирования служит команда mount, выполняемая либо в ходе загрузки системы автоматически, либо — вручную, из командной строки. Собственно, в полном смысле автоматически в любом случае монтируется только корневая файловая система. Не обязательно лежащая на диске — при старте с rescue CD или иного страховочного носителя она может располагаться на виртуальном диске в оперативной памяти. Однако процесс монтирования корневой файловой системы столь же неизбежен, как победа социализма в мировом масштабе: также, как социализм, не победив в мировом масштабе, просто утрачивает способность к существованию (что мы не так давно и наблюдали), так и ОС без корневой системы существовать не может. В Linux это вызывает kernel panic mode — примерно то состояние, в которое впали наши вожди лет 20 назад. Правда, они оказались крепче Linux&#8217;а и оклемались довольно быстро — так что до сих пор нас reboot&#8217;ят (или reboot? — а мы крепчаем:)). Впрочем, к делу монтирования, которое я попытаюсь вам сейчас представить, это не относится.</p>
<p>Так вот, для монтирования всех файловых систем, кроме корневой, необходимо предпринять некоторые действия. Сначала мы рассмотрим, как выполнить их руками, а потом — как увековечить в соответствующих конфигурационных файлах.</p>
<p>Итак, команда mount. Собственно, это — целое семейство программ, каждая из которой призвана монтировать файловые системы определенных типов — не только UFS, но и любой из числа поддерживаемых FreeBSD. Список таковых весьма обширен — получить о нем представление можно, просмотрев на сей предмет каталог /sbin:<br />
$ ls /sbin/mount*</p>
<p>что даст нам в ответ<br />
/sbin/mount            /sbin/mount_msdosfs    /sbin/mount_smbfs<br />
/sbin/mount_cd9660     /sbin/mount_nfs        /sbin/mount_std<br />
/sbin/mount_devfs      /sbin/mount_ntfs       /sbin/mount_udf<br />
/sbin/mount_ext2fs     /sbin/mount_nullfs     /sbin/mount_umapfs<br />
/sbin/mount_fdescfs    /sbin/mount_nwfs       /sbin/mount_unionfs<br />
/sbin/mount_linprocfs  /sbin/mount_portalfs<br />
/sbin/mount_mfs        /sbin/mount_procfs</p>
<p>Каждая команда из этого списка отвечает за отдельный тип файловой системы, к некоторым из которых мы вернемся дальнейшем. А пока заметим только собственно /sbin/mount, предназначенную для работы с UFS и UFS2.</p>
<p>Вызванная из командной строки, она требует двух аргументов — имени монтируемого устройства и точки монтирования (то есть каталога, в который должна монтироваться лежащая на нем файловая система). Имя устройства должно обозначать уже размеченную на существующем BSD-слайсе патрицию с созданной на ней файловой системой UFS2 (UFS), например,<br />
$ mount /dev/ads0d /usr</p>
<p>смонтирует файловую систему на указанном разделе в каталог /usr корня файлового древа. Если файловая система на устройстве не создана или имеет тип, отличный от 4.2BSD, последует сообщение об ошибке — указание на incorrect super block: в отличие от одноименной утилиты Linux, сама по себе команда mount во FreeBSD распознавать тип файловой системы не умеет.</p>
<p>К точке монтирования предъявляются следующие требования: а) каталог с таким именем должен существовать к моменту монтирования, и б) быть по возможности пустым. Первое — обязательно, второе же — не совсем. Монтирование в каталог с какими-либо файлами пройдет беспрепятственно (помнится, в Linux не так давно это вызывало крах системы), но все его содержимое станет недоступным вплоть до размонтирования. И если файлы, в нем содержащиеся, имеют играют существенную роль для какой-либо подсистемы, это может вызвать всякие нехорошие последствия. Например, если содержимое каталога /tmp будет блокировано монтированием туда какой-либо файловой системы во время работы оконной системы X, результатом будет скорее всего крах X-сервера. Благо, при необходимости можно осуществить объединенное монтирование (см. ниже).</p>
<p>В указанной форме монтирование выполнится с некоторыми умолчальными характеристиками: файловая система будет доступна для чтения/записи в режиме т.н. noasync (том самом, при котором операции с метаданными осуществляются синхронно, а операции с данными — асинхронно). Изменить это положение можно с помощью значений опции -o. Их довольно много, однако практически главными на данном этапе для нас будут:<br />
async — обеспечит полностью асинхронный режим (не смотря на грозные предупреждения в предыдущих заметках, я потом расскажу о ситуации, когда это может быть оправдано);<br />
sync — напротив, включение полностью синхронного режима (правда, не очень представляю, зачем это практически нужно);<br />
noatime — очень полезная опция, которая предотвращает обновление атрибута времени последнего доступа к файлам, чем немало способствует производительности;<br />
rdonly — монтирует файловую систему в режиме только для чтения (иногда это бывает необходимо);<br />
union — та самая опция, которая позволяет выполнить объединенное монтирование, при котором прежнее содержимое каталога mount point остается видимым; правда — с некоторыми ограничениями — см. man (8) mount.</p>
<p>Есть еще несколько значений опции -o, запрещающих размещение на смонтированной файловой системе файлов определенных разновидностей, например, исполнимых (-o noexec), файлов устройств (-o nodev) или файлов с т.н. битом суидности (-o nosuid), однако они имеют практическое значение в основном для администраторов серверов и служат целям безопасности. На настольной же машине обычной формой монтирования будет нечто вроде этой:<br />
$ mount -o noatime /dev/ads0d /usr;<br />
$ mount -o noatime /dev/ads0e /var;<br />
$ mount -o noatime /dev/ads0f /home</p>
<p>Все сказанное относилось только к монтированию файловых систем FreeBSD. Однако на практике часто возникает необходимость инкорпорации в ее древо каталогов файловых систем других типов. Особенно часто это требуется для ISO9660 (обычная файловая система для всех компакт-дисков, кроме Mac&#8217;овских) и FAT&#8217;ов разного рода. В этом случае соответствующая случаю команда монтирования должна быть вызвана явно, например,<br />
$ mount_cd9660 /dev/acd0 /cdrom</p>
<p>для монтирования компакта, или<br />
$ mount_msdosfs /dev/ad## /mnt</p>
<p>для FAT&#8217;а любого рода (включая FAT32). Впрочем, сделать это можно и косвенно, указанием команде mount опции -t тип_файловой_системы. Так, команда<br />
$ mount -t ext2fs /dev/ad## /mnt/linux</p>
<p>смонтирует файловую систему Linux (если соответствующая возможность включена в ядро). При этом стандартный mount для BSD-разделов просто подменяется командой /mount_ext2fs, призванной монтировать разделы ext2fs (и ext3fs тоже — но, естественно, без всяких функций журналирования). То есть форма<br />
$ mount -t fstype &#8230; &#8230;</p>
<p>будет полным эквивалентом команды<br />
$ mount_fstype &#8230; &#8230;</p>
<p>Все операции по монтированию файловых систем (в том числе и на сменных носителях) во FreeBSD требуют прав суперпользователя. В числе значений опции -o здесь, в отличие от Linux-варианта команды mount, нет параметра user, разрешающего монтирование обычным пользователям. Правда, есть несколько способов обойти это, но сейчас говорить о них невместно.<br />
Настройка автоматического монтирования</p>
<p>Однако на практике к ручному монтированию прибегают только для редко используемых файловых систем. Все принципиально важные для функционирования FreeBSD файловые системы монтируются автоматически при старте системы, а часто используемые — в полуавтоматическом, так сказать, режиме.</p>
<p>Для автоматического монтирования программа mount запускается в процессе начальной загрузки из инициализационных сценариев. Она отыскивает свой конфигурационный файл — /etc/fstab, и монтирует все, что в нем обнаружит, за некоторыми (оговоренными ниже исключениями).</p>
<p>Сам по себе файл /etc/fstab генерируется автоматически при установке FreeBSD, включая все необходимые для обеспечения жизнедеятельности файловые системы. Однако в дальнейшем он может правится вручную с целью внесения новых устройств для монтирования или дополнительных опций для уже включенных устройств.</p>
<p>Файл /etc/fstab — это простенькая база данных в текстовом формате (разделение полей — пробелами или табуляцией), включающая следующие поля:<br />
Device — имя файла устройства, на котором расположена файловая система, аналогично первому аргументу команды mount при ручном ее использовании;<br />
Mountpoint — точка монтирования (соответствует второму аргументу команды mount);<br />
FStype — тип файловой системы, указываемый также, как значение опции -t;<br />
Options — дополнительные опции монтирования, аналогично значениям опции -o;<br />
Dump — условия выполнения резервного копирования файловой системы утилитой утилитой dump;<br />
Pass# — условия проверки файловой системы утилитой fsck.</p>
<p>В свежеустановленной FreeBSD /etc/fstab в обязательном порядке будет включать следующие записи (пример для 1-го слайса Master-диска на 1-м IDE-канале):<br />
# Device Mountpoint FStype Options Dump Pass#<br />
/dev/ad0s1a /  ufs  rw  1 1<br />
/dev/ad0s1b none  swap  sw  0 0</p>
<p>Если последовать советам резонных людей (и умолчаниям sysinstall) и выделить из состава корня некоторые ветки файловой системы, к перечисленным добавятся (при автоматической разметке слайса через sysinstall) еще и записи вроде<br />
/dev/ad0s1d /var  ufs  rw  0 0<br />
/dev/ad0s1e /usr  ufs  rw  0 0<br />
/dev/ad0s1f /tmp  ufs  rw  0 0</p>
<p>Наконец, очень рекомендуется проследить, чтобы в наличии была еще и строка<br />
/dev/ad0s1g /home  ufs  rw  0 0</p>
<p>отвечающая за файловую систему с домашними каталогами пользователей.</p>
<p>Очевидно, что в поле Options можно добавить любые доступные (и разумные) значения опции -o (через запятую, без пробелов), например, noatime для всех файловых систем, а для /tmp — еще и async, ведь для содержимого этого каталога не предполагается сохранение после перезагрузки.</p>
<p>Сказанное выше относилось к файловым системам, монтируемым при старте автоматически. Однако никто не мешает сделать в /etcfstab записи для систем, подключаемым время от времени — в этом случае их можно будет монтировать по упрощенной схеме (именно это я и имел ввиду выше под полуавтоматическим режимом). Так, для CD-накопителя можно добавить строку (на самом деле она автоматически появляется при генерации файла /etc/fstab)<br />
/dev/acd0 /cdrom cd9660  ro,noauto  0 0</p>
<p>в которой опции, как нетрудно догадаться предписывают отказ от монтирования при старте (noauto) и режим «только для чтения» (ro). После чего для монтирования CD достаточно будет указать только mount point -<br />
$ mount /cdrom</p>
<p>Аналогичные записи можно сделать для всех сменных накопителей (Zip, USB-драйвов, даже флоппи-дисков) и для не-BSD разделов (FAT или Ext2fs). К слову сказать — монтировать файловые системы по прощенной схеме можно сразу после внесения изменений в /etc/fstab, не дожидаясь перезагрузки машины.<br />
Размонтирование</p>
<p>Все задействованные файловые системы перед выключением питания или перезагрузкой машины в обязательном порядке должны быть размонтированы. При корректном завершении работы это осуществляется автоматически, в результате чего каждая из доступных для записи файловых систем (вернее, партиция, ее несущая) получает бит чистого размонтирования в своем суперблоке.</p>
<p>Однако в ряде случаев (например, при подключении или отключении механизма Soft Updates или для выполнения проверки на целостность) возникает необходимость ручного размонтирования (и повторного монтирования) файловых систем, для чего служит команда umount. Она требует единственного аргумента — указания точки монтирования файловой системы, «изымаемой» из древа каталогов, например:<br />
$ umount /tmp</p>
<p>Одной строкой можно размонтировать несколько файловых систем:<br />
$ umount /usr /var /home</p>
<p>А можно — все смонтированные файловые системы или все файловые системы, перечисленные в файле /etc/fstab (кроме корневой), для чего потребуются опции<br />
$ umount -A</p>
<p>или<br />
$ umount -a</p>
<p>соответственно. Есть и возможность размонтирования файловых систем определенных типов путем указания значений опции -t. Так, команда<br />
$ umount -t ufs</p>
<p>размонтирует только BSD-разделы, не затронув CD и всего остального, что задействовано в системе.</p>
<p>Файловые системы в момент размонтирования не должны использоваться, то есть не должно быть обращений к находящимся на них файлам. Так, нахождение в каком-либо каталоге файловой системы — достаточное основание для отказа в ее размонтировании (с выдачей сообщения типа device busy), почему ни одной из перечисленных выше команд и не удастся размонтировать корневую файловую систему. А вот считывание файла данных какой-либо программой — не повод для отказа размонтировать несущую этот файл систему (ведь при этом в общем случае общение между файлом в памяти и файлом на диске происходит только в момент записи изменений.</p>
<p>Впрочем, можно размонтировать и используемую файловую систему — для этого команду umount потребуется дать с опцией -f. Правда, это может привести к ошибкам, так что без острой необходимости лучше к ней не прибегать. И на корневую файловую систему опция принудительного размонтирования воздействия не окажет.<br />
Массовое монтирование</p>
<p>Для продолжения работы после выполнения низкоуровневых операций с файловыми системами их потребуется смонтировать обратно. Это можно сделать не только без перезагрузки, но и без нудного индивидуального монтирования. Достаточно прибегнуть к опции -a:<br />
$ mount -a</p>
<p>посредством которой будут смонтированы все файловые системы, для которых имеются записи в /etc/fstab. При этом будет предпринята попытка смонтировать и те из них, которые помечены флагом noauto. Чтобы избежать этого, можно дополнительно определить тип файловой системы. То есть команда<br />
$ mount -a -t ufs</p>
<p>смонтирует только BSD-разделы, не покушаясь на CD или флэш-накопители. А можно, напротив, исключить из процесса глобального монтирования какие-то из перечисленных в /etc/fstab файловых систем, например, ненужные в данный момент FAT&#8217;ы:<br />
$ mount -a -t nomsdosfs<br />
Преамбула вместо заключения</p>
<p>К слову сказать, команда mount без опций и аргументов (а в такой форме, в отличие от всех рассмотренных выше случаев, ее может дать и обычный пользователь) выведет список смонтированных в данный момент файловых систем с указанием точки монтирования, условий оного и режима работы. Например, для машины, на которой пишутся эти строки, вывод ее будет выглядеть так:<br />
/dev/ad0s1a on / (ufs, local, noatime, soft-updates)<br />
devfs on /dev (devfs, local)<br />
/dev/ccd0e on /var (ufs, local, noatime, soft-updates)<br />
/dev/ccd1e on /usr (ufs, local, noatime, soft-updates)<br />
/dev/ccd2e on /home (ufs, local, noatime, soft-updates)<br />
/dev/md0 on /tmp (ufs, local, noatime, async)</p>
<p>Первая строка вывода показывает, что партиция /dev/ad0s1a смонтирована у нас в корневом каталоге, несет на себе файловую систему UFS (конкретно в данном случае — UFS2, но в выводе команды mount они не различаются) с задействованным механизмом Soft Updates, является локальной (то есть расположена на диске этой машины — сетевые диски также монтируются командой mount) и не подвержена обновлению атрибута atime.</p>
<p>А вот дальше идут строки для устройств и файловых систем, о которых не было речи в предшествующих повествованиях. Более того, если мы посмотрим на соответствующий наличной конфигурации файл /etc/fstab:<br />
$ more /etc/fstab</p>
<p>/dev/ad0s1b  none swap sw 0 0<br />
/dev/ar0s1b  none swap sw 0 0<br />
/dev/ad0s1a  / ufs rw,noatime 1 1<br />
/dev/ccd0e  /var ufs rw,noatime 2 2<br />
/dev/ccd1e  /usr ufs rw,noatime 2 2<br />
/dev/ccd2e  /home ufs rw,noatime 2 2<br />
/dev/acd0  /cdrom cd9660 ro,noauto 0 0<br />
/dev/da0s1  /mnt/usb ext2fs rw,noauto,noatime 0 0<br />
/dev/md0  /tmp mfs rw,noatime,async,-s32m 2 0</p>
<p>то увидим, что одной из строк вывода (devfs on /dev (devfs, local) вообще нет соответствия среди его записей. Что это за устройства и файловые системы?</p>
<p>Относительно устройств типа /dev/ccd0? скажу пока только, что это программные RAID-массивы (подробнее о них будет говориться позднее). А вот devfs и mfs — виртуальные файловые системы, о которых — непосредственно в следующей заметке.</p>
]]></content:encoded>
			<wfw:commentRss>http://iphp.com.ua/archives/352/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
