<?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>nine-it &#187; мануали</title>
	<atom:link href="http://www.nine-it.info/category/manualy/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.nine-it.info</link>
	<description>блоґ веб розробника</description>
	<lastBuildDate>Sun, 05 Feb 2012 17:21:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Мультидомен в Apache без зайвого клопоту на localhost</title>
		<link>http://www.nine-it.info/2011/11/24/multydomen-v-apache-bez-zajvoho-klopotu-na-localhost/</link>
		<comments>http://www.nine-it.info/2011/11/24/multydomen-v-apache-bez-zajvoho-klopotu-na-localhost/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 22:48:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[мануали]]></category>
		<category><![CDATA[(k)ubuntu]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[bind9]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[localhost]]></category>
		<category><![CDATA[man]]></category>
		<category><![CDATA[vhost_alias]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.nine-it.info/?p=1322</guid>
		<description><![CDATA[По «стандартній» інструкції пропонується зробити наступне: - Створити папку для сайту - Створити конфігураційний файл з ім&#8217;ям майбутнього домену - Включити сайт спеціальною опцією - Перезавантажити Apache - Прописати наш домен у файлі hosts Зробимо щоб процес створення піддомену зводився лише до створення папки для сайту. Як встановлювати LAMP я розповідати не буду. Перейдемо до [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.nine-it.info/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=/wp-content/thumbnails/1322.jpg&amp;w=200&amp;h=150&amp;zc=1&amp;ft=png' alt='post thumbnail' /></p>
<p>По «стандартній» інструкції пропонується зробити наступне:<br />
- Створити папку для сайту<br />
- Створити конфігураційний файл з ім&#8217;ям майбутнього домену<br />
- Включити сайт спеціальною опцією<br />
- Перезавантажити Apache<br />
- Прописати наш домен у файлі hosts</p>
<p>Зробимо щоб процес створення піддомену зводився лише до створення папки для сайту.<br />
Як встановлювати LAMP я розповідати не буду. Перейдемо до найцікавішого.<br />
<span id="more-1322"></span></p>
<h2>Налаштування vhost_alias</h2>
<p>Включаємо модуль vhost_alias. Він то і буде головною дійовою особою.</p>
<div class="codeblock">sudo a2enmod vhost_alias</div>
<p>Включаємо, якщо потрібно, mod_rewrite.</p>
<div class="codeblock">sudo a2enmod rewrite</div>
<p>Відкриваємо файл httpd.conf (/etc/apache2/httpd.conf) і приступаємо до безпосереднього налаштування.</p>
<div class="codeblock"># Підставляємо ім&#8217;я сервера з заголовка запиту користувача<br />
UseCanonicalName Off<br />
# Формуємо логи так, щоб у них вказувалося ім&#8217;я віртуального хоста<br />
LogFormat &laquo;%V %h %l %u %t \&raquo;%r\&raquo; %s %b&raquo; vcommon<br />
CustomLog /var/www/access_log vcommon<br />
# Потрібно для роботи mod_rewriteOptions FollowSymLinks<br />
AllowOverride All# Власне правило, за яким буде шукатися потрібний нам сайт<br />
VirtualDocumentRoot /var/www/%-2</p>
</div>
<p>%-2 Означає, що хост буде обраний по передостанній частині доменного імені. Іншими словами, створивши директорію /var/www/nineit, ми зможемо звернутися до неї як nineit.ua (або nineit.com, або навіть nineit.xxx).<br />
Можна також задати свої параметри вибору імені хоста:<br />
%0 Повне ім&#8217;я<br />
%1 Перша частина імені<br />
%2 Друга частина імені<br />
%3 Третя частина імені<br />
%-1 Остання частина<br />
%-2 Передостання частина<br />
%2+ Друга і всі наступні частини<br />
%-2+ Передостання і всі наступні частини</p>
<p>Рестартуем Apache.</p>
<div class="codeblock">sudo service apache2 restart</div>
<p>Наш сервер вже працює. Переконатися в цьому ми можемо, створивши папку з потрібним ім&#8217;ям, наприклад test і помістивши туди index.php з яким-небудь вмістом, наприклад</p>
<div class="codeblock">&lt;?php phpinfo();?&gt;</div>
<p>Так&#8230; треба ж ще прописати наш домен в файлі /etc/hosts.</p>
<div class="codeblock">127.0.0.1 test.loc</div>
<p>Все. Тепер можна відкривати в браузері сторінку.</p>
<p>Але нам не вистачає динамічності в створенні, тому продовжуємо&#8230;</p>
<h2>Налаштування DNS-сервера</h2>
<p>Для цього ми будемо використовувати DNS-сервер bind9.<br />
Всі домени з суфіксом *.loc будуть дивитися на нашу локальну машину.<br />
Встановлюємо DNS-сервер</p>
<div class="codeblock">sudo apt-get install bind9</div>
<p>Відкриваємо конфігураційний файл named.conf.options (/etc/bind/named.conf.options) і додаємо</p>
<div class="codeblock">acl &laquo;home&raquo; {192.168.1.0/24; 127.0.0.1;};<br />
options {<br />
directory &laquo;/var/cache/bind&raquo;;<br />
auth-nxdomain no;<br />
listen-on-v6 { none; };<br />
listen-on { 127.0.0.1; };<br />
allow-transfer { none; };<br />
allow-query {&laquo;home&raquo;;};<br />
forward first;<br />
# Вказуємо DNS-адресу провайдера<br />
forwarders {<br />
192.168.1.2;<br />
8.8.8.8;<br />
};<br />
};</div>
<p>Створюємо файли для доменної зони.</p>
<div class="codeblock">sudo touch /etc/bind/db.loc</div>
<p>Вмыст db.loc (/etc/bind/db.loc)</p>
<div class="codeblock">$TTL 86400<br />
$ORIGIN loc.<br />
@ IN SOA nine.loc. admin.nine.loc. (<br />
2010050100; Serial<br />
14400; Refresh<br />
7200; Retry<br />
3600000; Expire<br />
86400 ); Minimum@ IN NS localhost.* IN A 127.0.0.1</p>
</div>
<p>Нарешті, відкриваємо файл named.conf.local (/etc/bind/named.conf.local) і дописуємо туди</p>
<div class="codeblock">zone &laquo;loc&raquo; {<br />
type master;<br />
file &laquo;/etc/bind/db.loc&raquo;;<br />
allow-transfer { 127.0.0.1; };<br />
notify no;<br />
};</div>
<p>Залишився підключитися до нашого DNS-сервера. Або через файл /etc/resolv.conf, дописавши рядок</p>
<div class="codeblock">nameserver 127.0.0.1</div>
<p>або через стандартний менеджер мережевих з&#8217;єднань. У властивостях підключення, на вкладці «Параметри IPv4» дописати адреса 127.0.0.1 в полі «Сервери DNS».</p>
<p>Все! Вітаю! Ми добилися своєї мети: створюємо локальний домен виключно створенням папки.</p>
<p><span style="color: #c0c0c0;">стаття є перекладом статті з <a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://habrahabr.ru/blogs/linux/129900/"  rel="nofollow" target="_blank"><span style="color: #c0c0c0;">хабру</span></a>.</span><br />
<span style="color: #c0c0c0;"> малюнок з <a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://developer-faq.blogspot.com/"  rel="nofollow" target="_blank"><span style="color: #c0c0c0;">developer-faq.blogspot.com</span></a></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nine-it.info/2011/11/24/multydomen-v-apache-bez-zajvoho-klopotu-na-localhost/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php: бітові маски</title>
		<link>http://www.nine-it.info/2010/10/21/php-bitovi-masky/</link>
		<comments>http://www.nine-it.info/2010/10/21/php-bitovi-masky/#comments</comments>
		<pubDate>Thu, 21 Oct 2010 16:09:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[мануали]]></category>
		<category><![CDATA[bits]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[бітові маски]]></category>
		<category><![CDATA[бітові опрації]]></category>
		<category><![CDATA[Побітове І]]></category>
		<category><![CDATA[Побітове АБО]]></category>
		<category><![CDATA[Побітове виключає АБО]]></category>
		<category><![CDATA[побітовий зсув вліво]]></category>
		<category><![CDATA[побітовий зсув вправо]]></category>
		<category><![CDATA[Унарний оператор Заперечення]]></category>

		<guid isPermaLink="false">http://www.nine-it.info/?p=1040</guid>
		<description><![CDATA[У мові PHP представлені гарні можливості для роботи з порозрядним операціями. Такі операції можна зустріти в коді практично будь-якого проекту, але деколи їх використання не досягає PHP. Звичайно, можна сказати, що бітові операції в основному використовуються для низкорівневого програмування апаратури, написання драйверів, програм для мережі і т.п. Але ніхто не забороняє їх використовувати і на [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.nine-it.info/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=/wp-content/thumbnails/1040.jpg&amp;w=200&amp;h=150&amp;zc=1&amp;ft=png' alt='post thumbnail' /></p>
<p>У мові <strong>PHP</strong> представлені гарні можливості для роботи з порозрядним операціями. Такі операції можна зустріти в коді практично будь-якого проекту, але деколи їх використання не досягає PHP. Звичайно, можна сказати, що бітові операції в основному використовуються для низкорівневого програмування апаратури, написання драйверів, програм для мережі і т.п. Але ніхто не забороняє їх використовувати і на високому рівні. Їх використання не тільки поліпшить зовнішній вигляд коду, а й підвищить його ефективність, так як ці операції найшвидші.<br />
<span id="more-1040"></span><br />
Для того, щоб зрозуміти як працювати або оперувати порозрядним операціями, необхідно зрозуміти, як дані представлені в пам&#8217;яті комп&#8217;ютера. Все, незалежно від типу, дані в пам&#8217;яті зберігаються у вигляді нулів і одиниць (насправді там трохи інакше, але так це прийнято називати, тому не буду відхилятися від загальноприйнятої термінології), якими можна оперувати безпосередньо за допомогою порозрядних операцій. У PHP їх представлено аж цілих п&#8217;ять бінарних (два операнди) і одна унарна (один операнд) операція:</p>
<ol>
<li><strong>Побітове І</strong> (знак <strong>&amp;</strong>) &#8211; встановлює тільки ті біти, які встановлені в обох операндах.</li>
<li><strong>Побітове АБО</strong> (знак <strong>|</strong>) &#8211; встановлює тільки ті біти, які встановлені хоча б в одному з операндів.</li>
<li><strong>Побітове виключає АБО</strong> (знак <strong>^</strong>) &#8211; встановлює біт тільки в тому випадку, якщо в одному операнді біт встановлено, а в іншому немає.</li>
<li><strong>побітовий зсув вліво</strong> (знак <strong>«</strong>) &#8211; зсуває всі значущі біти лівого операнда на число позицій, певний правим операндом. Фактично, кожен зсув означає помножити лівий операнд на 2.</li>
<li><strong>побітовий зсув вправо</strong> (знак <strong>»</strong>) &#8211; зсуває всі значущі біти лівого операнда на число позицій, визначені в правому операнді.</li>
<li><strong>Унарний оператор Заперечення</strong> (знак <strong>~</strong>) &#8211; інвертує всі біти операнда на протилежні.</li>
</ol>
<pre>+-------+-------+-------+-------+-------+-------+
|   x   |   y   | x &amp; y | x | y | x ^ y |  ~ x  |
+-------+-------+-------+-------+-------+-------+
|   1   |   1   |   1   |   1   |   0   |   0   |
|   1   |   0   |   0   |   1   |   1   |   0   |
|   0   |   1   |   0   |   1   |   1   |   1   |
|   0   |   0   |   0   |   0   |   0   |   1   |
+-------+-------+-------+-------+-------+-------+</pre>
<p>Приклад: оголосимо дві константи CONST_X і CONST_Y і присвоїмо їм довільні значення, нехай CONST_X = 1234, а CONST_Y = 4321. Я не став брати великі числа, так як у них значящіх бітів більше, а більше їх тому, що на сучасних 32-ох та 64-ох бітних процесорах число типу integer може мати до 32-ух і до 64-ох значящих біт відповідно, тобто на 32-ох процесорної платформі знакова int (<strong>PHP не підтримує беззнакового цілого</strong>) величиною скажімо рівне 2090654925 має такий вигляд у двійковій системі числення 01111100 10011100 11011100 11001101.</p>
<p>У наведеній нижче таблиці дані всі операції, які можливі на рівні маніпуляцій з битами.</p>
<pre>+-------------------+---------------------------------------+--------------+
|                   |               BIN                     |      HEX     |
+-------------------+---------------------------------------+--------------+
|      CONST_X      |  00000000 00000000 00000100 11010010  |  0x000010e1  |
|      CONST_Y      |  00000000 00000000 00010000 11100001  |  0x000004d2  |
+-------------------+---------------------------------------+--------------+
| CONST_X &amp; CONST_Y |  00000000 00000000 00000000 11000000  |  0x000000c0  |
| CONST_X | CONST_Y |  00000000 00000000 00010100 11110011  |  0x000014f3  |
| CONST_X ^ CONST_Y |  00000000 00000000 00010100 00110011  |  0x00001433  |
|    CONST_X &lt;&lt; 5   |  00000000 00000000 10011010 01000000  |  0x00009a40  |
|    CONST_Y &gt;&gt; 3   |  00000000 00000000 00000010 00011100  |  0x0000021c  |
|      ~ CONST_Y    |  11111111 11111111 11101111 00011110  |  0xffffef1e  |
+-------------------+---------------------------------------+--------------+</pre>
<p>На підтвердження правильності наших результатів може допомогти скрипт, щоб переконатися, чи правильно я все підрахував.</p>
<p>Для унарний операції Заперечення я не став виводити значення int, так як воно стає негативним, і може все зіпсувати на цьому етапі знайомства.</p>
<pre>header("Content-type: text/plain");
define("CONST_X", 1234);
define("CONST_Y", 4321);
// Побітовий І
define("BITWISE_AND", CONST_X &amp; CONST_Y);
// Побітове АБО
define("BITWISE_OR", CONST_X | CONST_Y);
// Побітове Виключне АБО
define("BITWISE_XOR", CONST_X ^ CONST_Y);
// Побітовий зсув вліво
define("BITWISE_LSHIFT", CONST_X &lt;&lt; 5);
// Побітовий зсув вправо
define("BITWISE_RSHIFT", CONST_Y &gt;&gt; 3);

printf("-----------------------------------------------------------\r\n");
printf(" CONST_X: H=0x%08x B=%016b I=%d \r\n",
CONST_X, CONST_X, CONST_X);
printf(" CONST_Y: H=0x%08x B=%016b I=%d \r\n",
CONST_Y, CONST_Y, CONST_Y);
printf("-----------------------------------------------------------\r\n");
printf("CONST_X &amp; CONST_Y: H=0x%08x B=%016b I=%d \r\n",
BITWISE_AND, BITWISE_AND, BITWISE_AND);
printf("CONST_X | CONST_Y: H=0x%08x B=%016b I=%d \r\n",
BITWISE_OR, BITWISE_OR, BITWISE_OR);
printf("CONST_X ^ CONST_Y: H=0x%08x B=%016b I=%d \r\n",
BITWISE_XOR, BITWISE_XOR, BITWISE_XOR);
printf(" CONST_X &lt;&lt; 5: H=0x%08x B=%016b I=%d \r\n",
BITWISE_LSHIFT, BITWISE_LSHIFT, BITWISE_LSHIFT);
printf(" CONST_Y &gt;&gt; 3: H=0x%08x B=%016b I=%d \r\n",
BITWISE_RSHIFT, BITWISE_RSHIFT, BITWISE_RSHIFT);
printf("~CONST_Y: H=0x%08x B=%032b", ~CONST_Y, ~CONST_Y);</pre>
<p>Використання бітів в &laquo;повсякденному&raquo; життя веб додатків &#8211; <strong>Маски</strong>.</p>
<p>Це, звичайно, дуже глибоко філософське питання, буть чи не бути, використовувати або не використовувати&#8230; Скільки програмістів, стільки і стилів програмування. Просто хочеться сказати наступне:</p>
<ul>
<li>по-перше, БО різко зкорочують довжину коду;</li>
<li>по-друге, їх можна використовувати де душі завгодно, вони доступні завжди, не треба писати спеціальних класів;</li>
<li>по-третє, як я вже сказав, це найшвидші операції, компілятору не доведеться конвертувати значення в будь-який інший вид, щоб порівняти з чимось;</li>
<li>по-четверте, (звернути особливу увагу!), це займе всього 4 байта пам&#8217;яті як для зберігання, так і для маніпуляції;</li>
<li>і по-п&#8217;яте, це суттєво підвищить якість ваших програм, які не обов&#8217;язково написані на PHP.</li>
</ul>
<h3>Способи завдання масок</h3>
<p>Існує незліченна кількість способів представити одне число через інше. Але для початку необхідно зазначити наступне, не будь-яке число може бути унікальною маскою. Для пошуку (перевірки) збігу використовується <strong>оператор побітового І</strong>, який встановлює біт тільки в тому випадку, якщо вони встановлені в обох операндах. Значить нам необхідно задати так біти, які унікальні і не &laquo;перетинаються&raquo;, тобто в двійковій системі числення якщо їх порівнювати, вони не повинні мати встановлених біт в одному і тому ж розряді. Припустимо є число 0001 і число 0011 &#8211; вони перетинаються, тому що самий молодший біт встановлено в обох числах. Щоб уніфікувати всі маски, нам необхідно, щоб значущий біт був тільки один і у всіх масках займав різні розряди. У таблиці записані перші вісім масок, які унікальні і не перетинаються.</p>
<pre>+---------------------------+
|    0000 0000 0000 0001    |
|    0000 0000 0000 0010    |
|    0000 0000 0000 0100    |
|    0000 0000 0000 1000    |
|    0000 0000 0001 0000    |
|    0000 0000 0010 0000    |
|    0000 0000 0100 0000    |
|    0000 0000 1000 0000    |
+---------------------------+</pre>
<p>Як не важко здогадатися, кожне наступне число має встановлений біт на один розряд більше попереднього, за рахунок цього і виникає унікальність кожного числа, який претендує стати маскою. Якщо ви з легкістю можете перекладати з двійкової системи числення в десяткову, то відразу вам стане ясно, такими числами можуть бути тільки не негативні ступеня числа два.</p>
<p>Отдже <strong>спосіб перший</strong>, перерахування масок із збільшенням попереднього в два рази, починаючи з 0-го ступеня.<br />
<strong>Спосіб другий</strong>, перерахування масок, кожен з яких дорівнює числу, тобто 1,2,4,8,16,32 і т.д.<br />
<strong>Спосіб третій</strong>, використовується в основному професіоналами, в шістнадцятковому представленні, що до речі зручно. У цьому випадку процедура така: нам необхідні тільки числа 0&#215;1, 0&#215;2, 0&#215;4 і 0&#215;8, а потім ми просто нарощуємо нулі, тим самим збільшуючи розрядність значящего біта.</p>
<pre>+------------+-------------------------------------+-------------+
|    HEX     |                BIN                   |     DEC    |
+------------+-------------------------------------+-------------+
| 0x00000001 | 00000000 00000000 00000000 00000001 |  1          |
| 0x00000002 | 00000000 00000000 00000000 00000010 |  2          |
| 0x00000004 | 00000000 00000000 00000000 00000100 |  4          |
| 0x00000008 | 00000000 00000000 00000000 00001000 |  8          |
| 0x00000010 | 00000000 00000000 00000000 00010000 |  16         |
| 0x00000020 | 00000000 00000000 00000000 00100000 |  32         |
| 0x00000040 | 00000000 00000000 00000000 01000000 |  64         |
| 0x00000080 | 00000000 00000000 00000000 10000000 |  128        |
| 0x00000100 | 00000000 00000000 00000001 00000000 |  256        |
| 0x00000200 | 00000000 00000000 00000010 00000000 |  512        |
| 0x00000400 | 00000000 00000000 00000100 00000000 |  1024       |
| 0x00000800 | 00000000 00000000 00001000 00000000 |  2048       |
| 0x00001000 | 00000000 00000000 00010000 00000000 |  4096       |
| 0x00002000 | 00000000 00000000 00100000 00000000 |  8192       |
| 0x00004000 | 00000000 00000000 01000000 00000000 |  16384      |
| 0x00008000 | 00000000 00000000 10000000 00000000 |  32768      |
| 0x00010000 | 00000000 00000001 00000000 00000000 |  65536      |
| 0x00020000 | 00000000 00000010 00000000 00000000 |  131072     |
| 0x00040000 | 00000000 00000100 00000000 00000000 |  262144     |
| 0x00080000 | 00000000 00001000 00000000 00000000 |  524288     |
| 0x00100000 | 00000000 00010000 00000000 00000000 |  1048576    |
| 0x00200000 | 00000000 00100000 00000000 00000000 |  2097152    |
| 0x00400000 | 00000000 01000000 00000000 00000000 |  4194304    |
| 0x00800000 | 00000000 10000000 00000000 00000000 |  8388608    |
| 0x01000000 | 00000001 00000000 00000000 00000000 |  16777216   |
| 0x02000000 | 00000010 00000000 00000000 00000000 |  33554432   |
| 0x04000000 | 00000100 00000000 00000000 00000000 |  67108864   |
| 0x08000000 | 00001000 00000000 00000000 00000000 |  134217728  |
| 0x10000000 | 00010000 00000000 00000000 00000000 |  268435456  |
| 0x20000000 | 00100000 00000000 00000000 00000000 |  536870912  |
| 0x40000000 | 01000000 00000000 00000000 00000000 |  1073741824 |
+------------+-------------------------------------+-------------+</pre>
<p>Як видно з таблиці, в нашому розпорядженні є 31 повноцінна маска, причому унікальна, які не перетинаються між собою.</p>
<p><strong>І ще один спосіб</strong>, ним користуюся я, тому що з його допомогою я ніколи не вилажу за межі можливого. Використовується оператор побітового зсуву вліво починаючи з одиниці, і коли зсув досягає трідцаці, то все &#8211; приїхали.</p>
<pre>define("MASK_ACTION", 0x1);
define("MASK_POSTS", 0x1 &lt;&lt;1);
define("MASK_READ", 0x1 &lt;&lt;2);
define("MASK_COMMENT", 0x1 &lt;&lt;3);
//...
define("MASK_HELLO", 0x1 &lt;&lt;30);</pre>
<h3>Приклад використання масок.</h3>
<p>Припустимо від нашого Веб додатку потрібно щоб користувачеві були або не були надані певні привілеї на певні дії. Припустимо є сторінка, на якій розміщений певний текст, який:</p>
<ul>
<li>можна чи не можна читати,</li>
<li>можна чи не можна відправляти коментарі,</li>
<li>можна чи не можна видаляти коментарі.</li>
</ul>
<p>Припустимо, ці привілеї можуть бути застосовані до модератора форуму. Отже, спробуйте пограти з операторами побітового АБО і подивіться, як буде в цьому випадку вести себе додаток, обмеживши певні частини програми до відповідного if, можна з легкістю керувати доступом до певних частин вашої програми.</p>
<pre>// Оголошення привілеїв для модератора форуму
define("CAN_WRITE", 1);
define("CAN_MODERATE", 1 &lt;&lt;1);
define("CAN_DELETE", 1 &lt;&lt;2);

//Ініціалізація агрумент привілеїв модератора
$user_perms = 0x0;
/**
 * Дані привілеї можуть з легкістю зберігатися в БД
 * При цьому займаючи всього 4 байта пам'яті
 */
$user_perms | = CAN_MODERATE;
$user_perms | = CAN_WRITE;
$user_perms | = CAN_DELETE;
print ("Привелегии користувача:\r\n");
if($user_perms &amp; CAN_MODERATE)
echo "Може модерувати \r\n";
if (~$user_perms &amp; CAN_MODERATE)
echo "Не може модерувати\r\n";
if($user_perms &amp; CAN_WRITE)
echo "Може писати\r\n";
if (~$user_perms &amp; CAN_WRITE)
echo "Не може писати \r\n";
if ($user_perms &amp; CAN_DELETE)
echo "Може видаляти\r\n";
if (~$user_perms &amp; CAN_DELETE)
echo "Не може видаляти\r\n";</pre>
<p>Як видно з цього прикладу, необхідно і достатньо, просто порівняти наш аргумент з маскою, якщо в аргументі даний біт встановлений, то це поверне 1, інакше 0. Якщо знадобитися перевірити відсутність даного біта в аргументі, то з маскою необхідно буде перевірити інвертований аргумент. Це я зробив навмисно, тому що в багатьох випадках потрібно перевірити відсутність біта.</p>
<p><strong>Від граблів ніхто не застрахований &#8211; маленьке попередження.</strong></p>
<p>Під час першого тестування, коли я почав застосовувати привілеї на базі бітів, я зіткнувся з невеликою проблемою, суть полягає в наступному, <strong>PHP не має жорсткої системи типів даних</strong>, у зв&#8217;язку з цим, якщо привілеї користувача зберігаються в БД чи у файлі, незабудьте нахабно <strong>привести його тип до integer</strong> &#8230; можуть виникнути проблеми.</p>
<p>Матеріал перевірявся і тестувався на 32-ох бітній платформі.</p>
<p>переклад цієї <a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://www.rinatous.com/blog/node/1.html" rel="nofollow"  target="_blank">статті</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nine-it.info/2010/10/21/php-bitovi-masky/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Analytics: Cookies &#8211; що в середині?</title>
		<link>http://www.nine-it.info/2010/07/28/google-analytics-cookies-scho-v-seredyni/</link>
		<comments>http://www.nine-it.info/2010/07/28/google-analytics-cookies-scho-v-seredyni/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 11:42:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[мануали]]></category>
		<category><![CDATA[cookies]]></category>
		<category><![CDATA[google analytics]]></category>
		<category><![CDATA[__utma]]></category>
		<category><![CDATA[__utmb]]></category>
		<category><![CDATA[__utmc]]></category>
		<category><![CDATA[__utmz]]></category>
		<category><![CDATA[кукі]]></category>

		<guid isPermaLink="false">http://www.nine-it.info/?p=938</guid>
		<description><![CDATA[Для тих хто не знає в принцепі що таке cookie, але дуже хоче дізнатися &#8211; раджу почитати віку. Google Analitics користується в основному чотирьма куками: __utma, __utmb, __utmc, __utmz (зрідка зустрічаються __utmv і __utmx). Розберемо кожен окремо на прикладі. __utma Це основні користувальницькі cookie, що унікально ідентифікують відвідувача сайту і містять багато корисної інформації про [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.nine-it.info/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=/wp-content/thumbnails/938.jpg&amp;w=200&amp;h=150&amp;zc=1&amp;ft=png' alt='post thumbnail' /></p>
<p>Для тих хто не знає в принцепі що таке cookie, але дуже хоче дізнатися &#8211; раджу почитати <a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://uk.wikipedia.org/wiki/%D0%9A%D1%83%D0%BA%D0%B8" rel="nofollow"  target="_blank">віку</a>.</p>
<p>Google Analitics користується в основному чотирьма куками: __utma, __utmb, __utmc, __utmz (зрідка зустрічаються __utmv і __utmx).</p>
<p>Розберемо кожен окремо на прикладі.<br />
<span id="more-938"></span></p>
<h3>__utma</h3>
<p>Це основні користувальницькі cookie, що унікально ідентифікують відвідувача сайту і містять багато корисної інформації про нього.</p>
<p><strong>Термін життя</strong> у цих cookies два роки (звісно якщо користувач їх не почистить), тому можна отримувати інформацію за досить великий період часу.</p>
<p><strong>Формат</strong>: XXXX.DDDD.FFFF.PPPP.CCCC.N</p>
<p><strong>Приклад</strong>: 17208358.1197282248.1280317130.1280317130.1280317130.1</p>
<p><strong>Значення</strong>:</p>
<ul>
<li>XXXX &#8211; hash домену.</li>
<li>DDDD &#8211; унікальний ID користувача в системі Google Analytics.</li>
<li>FFFF &#8211; дата першого відвідування користувачем сайту в Unix форматі.</li>
<li>PPPP &#8211; дата попереднього відвідування користувачем сайту в Unix форматі.</li>
<li>CCCC &#8211; час початку поточного відвідування (початок сесії) у Unix форматі.</li>
<li>N &#8211; кількість відвідувань сайту даними користувачем.</li>
</ul>
<h3>__utmb</h3>
<p>Ці кукі несуть у собі інформацію про поточну сесії користувача.</p>
<p><strong>Термін життя</strong> &#8211; 30 хвилин після завантаження останньої переглянутих сторінок.</p>
<p><strong>Формат</strong>: XXXX.P.10.CCCC</p>
<p><strong>Приклад</strong>: 17208358.1.10.1280317130</p>
<p><strong>Значення</strong>:</p>
<ul>
<li>XXXX &#8211; hash домену.</li>
<li>P &#8211; кількість сторінок, переглянутих користувачам протягом поточної сесії.</li>
<li>10 &#8211; однаковий на всіх сайтах параметр, не змінюються з плином часу (магічне число Google =)).</li>
<li>CCCC &#8211; час початку поточного відвідування (початок сесії) у Unix форматі (аналогічно CCCC параметру _utma).</li>
</ul>
<h3>__utmc</h3>
<p>Ці кукі містять у собі тільки hash домену.</p>
<p><strong>Термін життя</strong> &#8211; поточна сесія.</p>
<p><strong>Формат</strong>: XXXX</p>
<p><strong>Приклад</strong>: 17208358</p>
<h3>__utmz</h3>
<p>Найцікавіші з усіх &#8211; вони розказують як користувач опинився на сайті: звідки прийшов (якщо він скористався посиланням з іншого ресурсу) і за якими ключовими словами він шукав ваш сайт (якщо прийшов з пошуковика).</p>
<p><strong>Термін життя</strong> &#8211; 6 місяців, оновлюються при завантаженні чергової сторінки сайту.</p>
<p><strong>Формат</strong>: XXXX.TTTT.VSutmcsr (source) | utmccn (campaign) | utmcmd (medium) | utmctr (keyword)</p>
<p><strong>Приклад</strong>:17208358.1280317130.1.4.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=linux software raid</p>
<p><strong>Значення</strong>:</p>
<ul>
<li>XXXX &#8211; hash домену.</li>
<li>V &#8211; кількість відвідувань користувачем сайту, за посиланнями з інших ресурсів.</li>
<li>S &#8211; кількість різних ресурсів, з яких користувач потрапляв на сайт.</li>
<li>utmcsr &#8211; ресурс-пошуковик, з якого користувач потрапив на сайт.</li>
<li>utmccn &#8211; містить інформацію про компанію з AdWords (або значення utm_campaign в запиті) або ж повідомляє, що користувач потрапив до вас за допомогою organic search.</li>
<li>utmcmd &#8211; містить назву компанії (або значення utm_medium в запиті) або повідомляє про organic search.</li>
<li>utmctr &#8211; ключові слова, за якими вівся пошук.</li>
</ul>
<p>Як бачимо, ці кукі містять дуже багато корисної і цікавої інформації.</p>
<p>Додатково про Google Analytics Cookies можна почитати в офіційній <a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://code.google.com/intl/en/apis/analytics/docs/concepts/gaConceptsCookies.html" rel="nofollow"  target="_blank">документації</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nine-it.info/2010/07/28/google-analytics-cookies-scho-v-seredyni/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JQuery: reader.jquery — читаемо з задоволенням</title>
		<link>http://www.nine-it.info/2010/07/08/jquery-reader-jquery-chytaemo-z-zadovolennyam/</link>
		<comments>http://www.nine-it.info/2010/07/08/jquery-reader-jquery-chytaemo-z-zadovolennyam/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 22:00:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[мануали]]></category>
		<category><![CDATA[iReader]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery plugin]]></category>
		<category><![CDATA[Safari Reader]]></category>

		<guid isPermaLink="false">http://www.nine-it.info/?p=859</guid>
		<description><![CDATA[Як ми пам&#8217;ятаємо, зовсім недавно вийшов Safari 5. Однією з цікавих особливостей нової версії браузера виявилася так звана «читалка» &#8211; Safari Reader. Даний модуль дозволяє виділити на сторінці основний текст і відобразити його в зручному вигляді без зайвих елементів сайту і реклами. Погодьтеся, досить зручно читати, коли тобі нічого не заважає. До плюсів модуля також варто віднести і [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.nine-it.info/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=/wp-content/thumbnails/859.png&amp;w=200&amp;h=150&amp;zc=1&amp;ft=png' alt='post thumbnail' /></p>
<p>Як ми пам&#8217;ятаємо, зовсім недавно вийшов Safari 5. Однією з цікавих особливостей нової версії браузера виявилася так звана «читалка» &#8211; Safari Reader. Даний модуль дозволяє виділити на сторінці основний текст і відобразити його в зручному вигляді без зайвих елементів сайту і реклами. Погодьтеся, досить зручно читати, коли тобі нічого не заважає. До плюсів модуля також варто віднести і можливість мінімального, але потрібноого налаштування розміру шрифту (скролл сайту збільшить все і не завжди добре). З мінусів &#8211; працює тільки в Safari.</p>
<p>Багатьох людей і мене в тому чилі не влаштувало те, що всі плагіни і розширення потрібно встановлювати в браузер (крім Safari зрозуміло, ось <a href="http://www.nine-it.info/2010/06/14/google-chrome-safari-reader-plahin/" title="google chrome: safari reader плагін" >наприклад для Googole Chome</a>). А якщо запропонувати користувачу теж саме, але тільки засобами самого сайту?</p>
<p><span id="more-859"></span></p>
<p>Reader &#8211; це звичайний плагін для популярної бібліотеки <a href="http://www.nine-it.info/tag/jquery/" title="багато чого про популярну бібліотеку JQuery"  target="_blank">jQuery</a>. Особливістю плагіна, як і будь-яких інших, є легкість підключення до сайту і просте налаштування плагіна під свої потреби. До того ж він більш гнучкий, ніж Safari Reader або плагіни для інших браузерів, так як є можливість задавати параметри відображення. Це дозволяє оформити вікно «рідера» у стилі сайту.  З опціями за замовчуванням він виглядає майже так само, як і Safari Reader.</p>
<h2>Важливо</h2>
<p>Для правильної роботи вміст сторінки, яку передбачається виводити за допомогою плагіна, слід помістити в блочний елемент. Важливою умовою є наявність всередині заголовка H1, саме до нього чіпляється кнопка активації режиму читання.</p>
<p>Для більш гнучкого налаштовування в самому плагіні у функції analysis можна вказати правила для фільтрації контента. Правила задаються у вигляді регулярних виразів.</p>
<h2>Підтримує</h2>
<p>Тестувалося на FF 3.6.6, Opera 10.60, Safari 5, IE 7,8. <strong>Не підтримується робота з IE 6</strong>. У всіх інших випадках можливі невеликі проблеми.</p>
<h2>Як використовувати</h2>
<p>Думаю, розповідати, як підключати скрипти до сторінок не має сенсу, але все-таки наведу приклад.</p>
<div class="codeblock">
<p><span style="color: #009900;">&lt;<span style="color: #660066;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #3366cc;">&laquo;text/javascript&raquo;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #3366cc;">&laquo;jquery-1.4.2.js&raquo;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #660066;">script</span>&gt;</span><br />
<span style="color: #009900;"> </span><span style="color: #009900;">&lt;<span style="color: #660066;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #3366cc;">&laquo;text/javascript&raquo;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #3366cc;">&laquo;reader.jquery.js&raquo;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #660066;">script</span>&gt;</span></p>
</div>
<h3>Найпростіший приклад ініціалізації плагіна:</h3>
<div class="codeblock">$<span style="color: #009900;">(</span><span style="color: #3366cc;">&laquo;document&raquo;</span><span style="color: #009900;">)</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">(</span><span style="color: #003366;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span><br />
$<span style="color: #009900;">(</span><span style="color: #3366cc;">&laquo;#reader&raquo;</span><span style="color: #009900;">)</span>.<span style="color: #660066;">reader</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span></div>
<h3>Ініціалізація з опціями:</h3>
<div class="codeblock">$<span style="color: #009900;">(</span><span style="color: #3366cc;">&laquo;document&raquo;</span><span style="color: #009900;">)</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">(</span><span style="color: #003366;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span><br />
$<span style="color: #009900;">(</span><span style="color: #3366cc;">&laquo;#post&raquo;</span><span style="color: #009900;">)</span>.<span style="color: #660066;">reader</span><span style="color: #009900;">(</span><span style="color: #009900;">{</span><br />
<span style="color: #3366cc;">&laquo;shadow&raquo;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">{</span><br />
<span style="color: #3366cc;">&laquo;opacity&raquo;</span><span style="color: #339933;">:</span> <span style="color: #3366cc;">&laquo;.8&#8243;</span><br />
<span style="color: #009900;">}</span><span style="color: #339933;">,</span><br />
<span style="color: #3366cc;">&laquo;window&raquo;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">{</span><br />
<span style="color: #3366cc;">&laquo;width&raquo;</span> <span style="color: #339933;">:</span> <span style="color: #3366cc;">&laquo;800px&raquo;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366cc;">&laquo;color&raquo;</span> <span style="color: #339933;">:</span> <span style="color: #3366cc;">&laquo;#000&#8243;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366cc;">&laquo;fontFamily&raquo;</span> <span style="color: #339933;">:</span> <span style="color: #3366cc;">&laquo;Georgia&raquo;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366cc;">&laquo;fontSize&raquo;</span> <span style="color: #339933;">:</span> <span style="color: #3366cc;">&laquo;16px&raquo;</span><br />
<span style="color: #009900;">}</span><span style="color: #339933;">,</span><br />
<span style="color: #3366cc;">&laquo;button&raquo;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">{</span><br />
<span style="color: #3366cc;">&laquo;background&raquo;</span> <span style="color: #339933;">:</span> <span style="color: #3366cc;">&laquo;#54ACFE&raquo;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366cc;">&laquo;color&raquo;</span> <span style="color: #339933;">:</span> <span style="color: #3366cc;">&laquo;#FFFFFF&raquo;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366cc;">&laquo;text&raquo;</span> <span style="color: #339933;">:</span> <span style="color: #3366cc;">&laquo;основное&raquo;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366cc;">&laquo;padding&raquo;</span> <span style="color: #339933;">:</span> <span style="color: #3366cc;">&laquo;0 4px 1px 4px&raquo;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366cc;">&laquo;margin&raquo;</span> <span style="color: #339933;">:</span> <span style="color: #3366cc;">&laquo;0 0 0 10px&raquo;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366cc;">&laquo;fontSize&raquo;</span> <span style="color: #339933;">:</span> <span style="color: #3366cc;">&laquo;12px&raquo;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366cc;">&laquo;fontFamily&raquo;</span> <span style="color: #339933;">:</span> <span style="color: #3366cc;">&laquo;sans-serif&raquo;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366cc;">&laquo;fontWeight&raquo;</span> <span style="color: #339933;">:</span> <span style="color: #3366cc;">&laquo;normal&raquo;</span><br />
<span style="color: #009900;">}</span><br />
<span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span></div>
<h2>Описи параметрів:</h2>
<h3><span style="color: #333333;">shadow</span></h3>
<p>Набір опцій задає налаштування для тіні. Покищо доступна тільки одне можливе налаштування для тіні.</p>
<h4><span style="color: #808080;">opacity</span></h4>
<p>Визначає ступінь прозорості для фону.</p>
<h3>window</h3>
<p>Набір опцій, які задають параметри для вікна, в якому буде відображатися текст статті.</p>
<h4><span style="color: #808080;">width</span></h4>
<p>Задає ширину вікна.</p>
<h4><span style="color: #808080;">color</span></h4>
<p>Задає колір тексту всередині вікна.</p>
<h4><span style="color: #808080;">fontFamily</span></h4>
<p>Вказує шрифт для відображення тексту.</p>
<h4><span style="color: #808080;">fontSize</span></h4>
<p>Вказує розмір шрифта для вікна.</p>
<h3>button</h3>
<p>Набір опцій, який задає налаштування для кнопки, що формується поруч із заголовком статті.</p>
<h4><span style="color: #808080;">background</span></h4>
<p>Задає колір фону кнопки.</p>
<h4><span style="color: #808080;">color</span></h4>
<p>Задає колір тексту усередині кнопки.</p>
<h4><span style="color: #808080;">text</span></h4>
<p>Вказує який текст виводити на кнопці.</p>
<h4><span style="color: #808080;">padding</span></h4>
<p>Вказує внутрішні відступи.</p>
<h4><span style="color: #808080;">margin</span></h4>
<p>Вказує зовнішні відступи.</p>
<h4><span style="color: #808080;">fontSize</span></h4>
<p>Вказує розмір шрифта для кнопки.</p>
<h4><span style="color: #808080;">fontFamily</span></h4>
<p>Вказує сімейство шрифтів для кнопки.</p>
<h4><span style="color: #808080;">fontWeight</span></h4>
<p>Задає напівжирний шрифт тексту на кнопці.</p>
<h3>Посилання:</h3>
<p><a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://klimchuk.com/projects/reader" rel="nofollow"  target="_blank">Сторінка проекту</a><br />
<a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://klimchuk.com/reader-demo.html" rel="nofollow"  target="_blank">Демонстрація</a><br />
<a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://klimchuk.com/reader.jquery.zip" rel="nofollow"  target="_blank">Завантажити в zip</a></p>
<p>За бажанням автора &#8211; додаю лінка на першоджерело <a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://klimchuk.com/blog/reader-jquery-chitaem-s-udovolstviem"  rel="nofollow" target="_blank">http://klimchuk.com/blog/reader-jquery-chitaem-s-udovolstviem</a>, не звалаючи на лінки на проект <img src='http://www.nine-it.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.nine-it.info/2010/07/08/jquery-reader-jquery-chytaemo-z-zadovolennyam/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Розгрібаємо завали музики (автоматичне заповнення атрибутів пісень)</title>
		<link>http://www.nine-it.info/2010/05/08/rozhribajemo-zavaly-muzyky-avtomatychne-zapovnennya-atrybutiv-pisen/</link>
		<comments>http://www.nine-it.info/2010/05/08/rozhribajemo-zavaly-muzyky-avtomatychne-zapovnennya-atrybutiv-pisen/#comments</comments>
		<pubDate>Sat, 08 May 2010 13:06:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[курс молодого лінуксоїда]]></category>
		<category><![CDATA[мануали]]></category>
		<category><![CDATA[(k)ubuntu]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[автоматизація]]></category>
		<category><![CDATA[теги пісень]]></category>

		<guid isPermaLink="false">http://www.nine-it.info/?p=575</guid>
		<description><![CDATA[Продовжило тему автоматизації розгрібання завалів свої файлів в Linux системах (погодьтеся, що гарно зруповані файли і набагато простіше шукати і працювати з ними ). Я вже писав про автоматизацію відсортування фоток, а у цьому пості я розкажу як можна привести в нормальний вигляд свою колекцію музики, автоматично заповнивши атрибути (теги) пісень, такі як артист, альбом, [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.nine-it.info/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=/wp-content/thumbnails/575.jpg&amp;w=200&amp;h=150&amp;zc=1&amp;ft=png' alt='post thumbnail' /></p>
<p>Продовжило тему автоматизації розгрібання завалів свої файлів в <a href="http://www.nine-it.info/tag/linux/" title="всі статті про великий та моучий лінукс"  target="_blank">Linux системах</a> (погодьтеся, що гарно зруповані файли і набагато простіше шукати і працювати з ними <img src='http://www.nine-it.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ).</p>
<p>Я вже писав про <a href="http://www.nine-it.info/2010/04/13/avtomatychne-sortuvannya-fotohrafij/" title="автоматизація сортування фоток" >автоматизацію відсортування фоток</a>, а у цьому пості я розкажу як можна привести в нормальний вигляд свою колекцію музики, автоматично заповнивши атрибути (теги) пісень, такі як артист, альбом, пісня, рік випуску альбома&#8230;</p>
<p><span id="more-575"></span></p>
<p>Для автоматично заповнення атрибутів пісень викристаємо програмку <strong>MusicBrainz Picard</strong> від проекту <strong>MusicBrainz</strong>.</p>
<p>Встановимо її (я наведу приклад для системи <a href="http://www.nine-it.info/tag/kubuntu/" title="статті про (k)ubuntu"  target="_blank">ubuntu linux</a>, для інших лінукс систем можна знати мануали <a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://musicbrainz.org/doc/PicardLinuxInstall" rel="nofollow"  target="_blank">тут</a>, а для інших операційних систем можна знайти на їх сайті <a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://musicbrainz.org/doc/MusicBrainz_Picard" rel="nofollow"  target="_blank">тут</a>):</p>
<div class="codeblock">sudo apt-get install picard</div>
<p>А тепер про сам елементарний процес атоматичного заповнення атрибутів(тегів) пісень:</p>
<ul>
<li>запускаємо MusicBrainz Picard (Applications -&gt; Sound &amp; Video -&gt; MusicBrainz Picard);</li>
<li>вибираємо пачку папок з музикою, яку ви хочете привести в порядок;</li>
<li>нажимаємо кнопку для пошуку атибутів;</li>
<li>чекаємо поки програма знайде та заповнить атрибути;</li>
<li>зберігаємо файли;</li>
<li>радіємо =).</li>
</ul>
<p>от і все, що треба. У них є дуже велика база пісень, виконавців та альбомів, але для не дуже відомих виконавців нажаль доведеться заповнити самостійно, наприклад за допомогою <a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://easytag.sourceforge.net/" rel="nofollow"  target="_blank">EasyTAG</a>.</p>
<p>Коли заповните &#8211; на забуть допомогти іншим людям і засабмітивши на MusicBrainz теги <img src='http://www.nine-it.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nine-it.info/2010/05/08/rozhribajemo-zavaly-muzyky-avtomatychne-zapovnennya-atrybutiv-pisen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux: software RAID для дому</title>
		<link>http://www.nine-it.info/2010/04/29/linux-software-raid-dlya-domu/</link>
		<comments>http://www.nine-it.info/2010/04/29/linux-software-raid-dlya-domu/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 05:47:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[курс молодого лінуксоїда]]></category>
		<category><![CDATA[мануали]]></category>
		<category><![CDATA[(k)ubuntu]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[man]]></category>
		<category><![CDATA[raid]]></category>

		<guid isPermaLink="false">http://www.nine-it.info/?p=493</guid>
		<description><![CDATA[http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch26_:_Linux_Software_RAID]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.nine-it.info/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=/wp-content/thumbnails/493.gif&amp;w=200&amp;h=150&amp;zc=1&amp;ft=png' alt='post thumbnail' /></p>
<p>Основні цілі використання надлишкових масивів недорогих дисків (RAID) це поліпшення продуктивності дискової підсистеми даних і забезпечення надмірності даних.<br />
RAID може реалізувати або за допомогою програмного забезпечення операційної системи, або він може бути реалізована за допомогою спеціального RAID контролера диска, без необхідності налаштування операційної системи взагалі. У цій статті я спробую пояснити, як налаштувати програмний RAID на <a href="http://www.nine-it.info/tag/kubuntu/" title="всі сатті про Ubuntu"  target="_blank">Ubuntu</a>.</p>
<p><span id="more-493"></span></p>
<h2>Навіщо рейд вдома?</h2>
<p>Для домашнього використання RAID-масиви в принципі не потрібні, але якщо ви хочете підстрахуватися, що б не втратити ваші важливі дані (наприклад фотографії &#8211; момент не повториш, чи ваші документи &#8211; багаторічну працю, тощо) разом з жорстким диском &#8211; то софтвий RAID-масив найкращий вихід (співвідношення ціна-якість). Також можна використати RAID для пришвидшення роботи комп&#8217;ютера. Якщо ви надумали реалізувати софтовий рейд, чи просто ознайомитися з цією ідеєю &#8211; тоді продовжимо!</p>
<h2>Типи RAID масивів</h2>
<p>Будь то софтовий, чи хардварний RAID масив, його можна налаштувати в різних режимах. Розглянемо найпопулярніші:</p>
<h3>Лінійний режим RAID</h3>
<p>У <strong>лінійному RAID</strong>, контролер RAID сприймає RAID-масив у вигляді ланцюжка дисків. Дані записуються на наступний пристрій в ланцюзі тільки після того як попередній буде заповнений.<br />
Мета лінійних RAID полягає в розміщенні великої файлові системи на декількох пристроях, без будь-якої надлишковості.<br />
<strong>Збій у роботі жорсткого диска приведе до пошкодження даних.</strong></p>
<h3>RAID 0</h3>
<p>У <strong>RAID 0</strong>, RAID контролер намагається рівномірно розподіляти дані по всіх дисках в RAID-масиві.<br />
Уявіть що диск це тарілка, данні &#8211; це торт. У вас є 4-торти: шоколадний, ванільний, вишневий, полуничний і 4 тарілки. Процес ініціалізації RAID 0, ділить торти і продає скибочки на всі тарілки. RAID 0 драйвер зробить так що операційна система буде вважати, що торти цілі та розміщені на одній великій тарілці. Наприклад, 4 жорстких диска ємкістю по 9GB налаштованих в RAID 0-масив для операційної системи &#8211; це буде один диск на 36 ГБ.<br />
Як і лінійний RAID, RAID 0, призначений для <strong>розміщення великих файлових систем</strong> на декількох пристроях <strong>без будь-якої надлишковості</strong>. Перевага RAID 0, <strong>швидкості доступу до даних</strong>. Файл, який розміщений на чотирьох дисках можна читати в чотири рази швидше. Також RAID 0 часто називають <strong>смугою</strong>.<br />
RAID 0 може містити диски нерівних розмірів. Коли закінчується вільне місце на маленьких дисках, рейд продовжує чергування, використовуючи вільне місце на інших дисках (більших). Коли це відбувається, швидкість доступу до даних нижче в цій частині даних, так як загальна кількість доступних дисків RAID знижується. З цієї причини, RAID 0 найкраще використовувати з дисками однакового розміру.</p>
<h3>RAID 1</h3>
<p>У RAID 1, дані клонуються на диску в двох примірниках. Тому цей тип RAID часто називають <strong>дзеркальним</strong>. Кажуть: &laquo;два народи і та одна історія&raquo; &#8211; якщо один забуває деякі деталі, ви можете попросити інший щоб нагадали вам.<br />
Коли один з дисків в наборі RAID виходить з ладу, інший продовжує функціонувати і після заміни пошкодженого диску, дані автоматично копіюються на новий. RAID 1 також надає можливість використання <strong>гарячого резервування даннх</strong>, які будуть автоматично дублюватися в разі відмови диска в RAID масиві.<br />
RAID 1 породжує <strong>надмірність даних, без переваги швидкості</strong>, як в RAID 0. Недолік програмних RAID 1 є те що, доводиться посилати данні на запис двічі: на 2 диски, що породжує додаткове навантаження на систему. А от у випадку хард-варного RAID 1 &#8211; данні надсилаються на дисковий контролер тільки один раз, а вже дисковий контролер дублює данні. Саме тому хардварний рейд масив є рекомендований при реалізації RAID-1.<br />
Обмеження RAID 1 в тому, що загальний розмір RAID у гігабайтах &#8211; розмір найменшого диску в RAID-масиві. На відміну від RAID 0, додатковий простір на великих пристрій не використовується.</p>
<div id="attachment_495" class="wp-caption aligncenter" style="width: 536px"><a href="http://www.nine-it.info/wp-content/uploads/2010/04/Raid0.gif" ><img class="size-full wp-image-495 " title="Ілюстрація процес розподілу даних в RAID 0 і RAID 1" src="http://www.nine-it.info/wp-content/uploads/2010/04/Raid0.gif" alt="Ілюстрація процес розподілу даних в RAID 0" width="526" height="375" /></a><p class="wp-caption-text">Ілюстрація процес розподілу даних в RAID 0 і RAID 1</p></div>
<h3>RAID 4</h3>
<p>RAID 4 працює як RAID 0, але вставляється спеціальна <strong>комірка корекції помилок парності</strong> на додатковому диску виділеному під ці потреби.<br />
RAID 4 вимагає принаймні 3-ох дисків в RAID масиві і може пережити втрату одного диску. Коли це відбудеться, дані в ньому може бути відтворено на льоту &#8211; за допомогою інформації про парності диск RAID масиву. А після заміни зіпсованого диску, він буде заповнений втраченими даними.<br />
RAID 4 поєднує в собі <strong>високу швидкість</strong> RAID 0 і <strong>надмірність даних</strong> RAID 1. Його основний недолік в тому, що дані данні не можна записати паралельно, оскільки для зберігання парності даних використовується інший диск. Парності можуть бути вузьким місцем. З цієї причини, RAID 4 не використовується дуже часто.</p>
<h3>RAID 5</h3>
<p>RAID 5 &#8211; це <strong>поліпшений RAID 4</strong>, за допомогою чергування паритету даними між всіма дисками в наборі RAID. Це дозволяє уникнути вузьких місць паритету диска, зберігаючи при цьому багато особливостей, таких як <strong>швидкість</strong> RAID 0 і <strong>надмірності</strong> RAID 1. Як RAID 4, RAID 5 може пережити втрату одного жорсткого диску.<br />
Для RAID 5 потрібно не менше 3 дисків або розділів.</p>
<div id="attachment_503" class="wp-caption aligncenter" style="width: 453px"><a href="http://www.nine-it.info/wp-content/uploads/2010/04/Raid5.gif" ><img class="size-full wp-image-503" title="Ілюстрація процес розподілу даних в RAID 5" src="http://www.nine-it.info/wp-content/uploads/2010/04/Raid5.gif" alt="Ілюстрація процес розподілу даних в RAID 5" width="443" height="361" /></a><p class="wp-caption-text">Ілюстрація процес розподілу даних в RAID 5</p></div>
<h2>Перед тим як почати</h2>
<p>Спеціально вбудований апаратний RAID контролер дисків доступний як для IDE і SCSI дисків. Як правило, вони мають свій власний BIOS, так що ви можете налаштувати їх відразу ж після вашої системи Power On Self Test (POST). Апаратні RAID є повністю прозорими для операційної системи; залізо робить всю роботу.<br />
Якщо апаратного RAID немає, то ви повинні знати про основні принципи, щоб дотримуватися їх при створенні програмного RAID.</p>
<h3>IDE диски</h3>
<p>Щоб скоротити витрати, багато малих бізнес-систем, ймовірно, використовують IDE диски, але вони мають деякі обмеження:</p>
<ul>
<li>Загальна довжина кабелю IDE може бути тільки кілька футів в довжину, яких як правило вистачає в межах IDE дисків для невеликих домашніх системних блоків.</li>
<li>IDE диски не &laquo;гарячої&raquo; заміни. Ви не можете замінити їх, поки ваша система працює.</li>
<li>Тільки два пристрої можна підключити на контролер.</li>
<li>Робота шини IDE може розділятися за наявності другого пристрою на кабелі.</li>
<li>Відмова одного диска на шині IDE часто призводить до неправильної роботи другого пристрою. Це може бути смертельним, якщо у вас є два IDE диска одного і того ж RAID-масиву прикріплені до одного кабелю.</li>
</ul>
<p>З цих причин рекомендують використовувати тільки один диск IDE при використанні RAID, особливо в корпоративному середовищі. В домашніх умовах програмний IDE-RAID може бути адекватним.</p>
<h3>Serial ATA диски</h3>
<p>Serial ATA диски швидко замінили IDE, або Ultra ATA диски, оскільки мають ряд переваг:</p>
<ul>
<li>Кабель диска для даних може бути до одного метра в довжину, в порівнянні з 18 дюйми IDE.</li>
<li>Serial ATA має кращу обробку помилок, ніж IDE.</li>
<li>Існує тільки один диск на один кабель, що дозволяє &laquo;гарячу&raquo; заміну, або можливість заміни компонентів, і це при працюючій операційній системі, на переймаючись про вплив на інші пристрої на кабелі для передачі даних.</li>
<li>Також немає перемичок для установки на Serial ATA диску, щоб зробити його master або slave, що робить їх простими в налаштуванні.</li>
<li>IDE накопичувачі мають швидкість передачі даних: 133Mbytes/с, в той час як Serial ATA специфікація починається з 150 Мбайт/с, і до 600+ Мбайт/с.</li>
</ul>
<p>Якщо ви не можете дозволити собі більш дорогий і швидкий SCSI диск, Serial ATA &#8211; є кращим пристроєм для програмного і апаратного RAID.</p>
<h3>SCSI диски</h3>
<p>SCSI жорсткі диски мають ряд особливостей, які роблять їх більш привабливими для використання в RAID ніж будь-які IDE або Serial ATA диски.</p>
<ul>
<li>SCSI контролери більш терпимі до дискових помилок. Відмова одного диска має менше шансів зірвати роботу інших диски на шині.</li>
<li>SCSI кабелі можуть бути до 25 метрів, що робить їх придатними для використання в дата-центрах.</li>
<li>Набагато більше, ніж два пристрої можуть бути підключені до кабелю шини SCSI. На ньому можуть розміститися 7 (для single-ended SCSI) або 15 (для всіх інших типів SCSI) пристроїв.</li>
<li>Деякі моделі пристроїв SCSI мають підтримку &laquo;гарячої заміни&raquo;, що дозволяє вам замінити їх під час роботи системи.</li>
<li>SCSI на даний час підтримує швидкість передачі даних до 640 Мбайт/с, що робить їх вельми бажаним для установок, де швидкий доступ до даних є обов&#8217;язковою умовою.</li>
</ul>
<p>SCSI диски, як правило, дорожче, ніж диски IDE, що може зробити їх менш привабливими для домашнього використання.</p>
<h3>Резервне копіювання системи в першу чергу</h3>
<p>Програмний RAID створює еквівалент одного віртуального RAID диску, що складається з усіх розділів реальних дисків. Ви повинні форматнути новий RAID пристрій, що б ваша Linux система могла зберігати файли на ньому. Форматування видалить всі данні що були на дисках, тому краще всього зробити резервну копію даних які знаходять на цих розділах та на інших розділах на диску, на якому необхідно реалізувати RAID. Помилка може видалити, чи зіпсувати дані.</p>
<h3>Конфігурація RAID в Single User Mode</h3>
<p>Оскільки ви будете модифікувати дискову структуру вашої системи, ви повинні звернути увагу на те, що б ви єдинй користувалися системо &#8211; в single-user режимі і бажано з консолі. Це гарантує, що більшість програм та мережевих дій виключені, і що інші користувачі не можуть отримати доступ до системи, що знижує ризик пошкодження даних під час налаштування.</p>
<div class="codeblock">[root@nine-blog tmp]# init 1</div>
<p>Коли закінчите, вийдіть і ваша система буде завантажуватися у дефолтовому режимі, який передбачено в файлі /etc/inittab.</p>
<h2>Конфігурація софтового RAID-масиву</h2>
<p>Налаштування RAID під Linux вимагає ряду кроків, яких необхідно ретельно дотримуватися. У статті ми будемо налаштування RAID 1 з використанням системи з двома дисками. Розділи, які будуть використовуватися наступні:</p>
<div class="codeblock">/dev/hde1<br />
/dev/hdf2</div>
<p>Зважайте на те що вивід команд може відрізнятися від ваших <img src='http://www.nine-it.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<h3>RAID розділи</h3>
<p>Спочатку ви маєте виділити розділи в залежності від питу RAID-масиву, який в будете реалізовувати. В нашому прикладі ми будемо робити RAID-1, тому нам необхідно два однакових розділи за обємом на різних дисках.</p>
<h4>Визначення доступних розділів</h4>
<p>Для початку використаємо команду <strong>fdisk -l</strong> для перегляду всіх змонтованих та не змонтованих розділів доступних у вашій системі. Ви також можете використати команду <strong>df -k</strong>, яка покаже тільки змонтовані файлові системи.<br />
Ці дві команди повинні допомогти вам з легкістю визначити розділи, які ви хочете використовувати. Ось приклад виводу цих команд:</p>
<div class="codeblock">
<p>[root@nine-blog tmp]# fdisk -l</p>
<p>Disk /dev/hda: 12.0 GB, 12072517632 bytes<br />
255 heads, 63 sectors/track, 1467 cylinders<br />
Units = cylinders of 16065 * 512 = 8225280 bytes</p>
<p>Device Boot    Start       End    Blocks   Id  System<br />
/dev/hda1   *         1        13    104391   83  Linux<br />
/dev/hda2            14       144   1052257+  83  Linux<br />
/dev/hda3           145       209    522112+  82  Linux swap<br />
/dev/hda4           210      1467  10104885    5  Extended<br />
/dev/hda5           210       655   3582463+  83  Linux<br />
&#8230;<br />
&#8230;<br />
/dev/hda15         1455      1467    104391   83  Linux<br />
[root@nine-blog tmp]#</p>
<p>[root@nine-blog tmp]# df -k<br />
Filesystem           1K-blocks      Used Available Use% Mounted on<br />
/dev/hda2              1035692    163916    819164  17% /<br />
/dev/hda1               101086      8357     87510   9% /boot<br />
/dev/hda15              101086      4127     91740   5% /data1<br />
&#8230;<br />
&#8230;<br />
&#8230;<br />
/dev/hda7              5336664    464228   4601344  10% /var<br />
[root@nine-blog tmp]#</p>
</div>
<h4>Відмонтуйте розділи</h4>
<p>Ви маєте переконатися що розділи відмонтовані, перед створенням RAID-масиву.</p>
<div class="codeblock">[root@nine-blog tmp]# umount /dev/hde1<br />
[root@nine-blog tmp]# umount /dev/hdf2</div>
<h4>Підготовка розділів за допомогою FDISK</h4>
<p>Вам необхідно змінити тип кожного розділу в RAID-масиві на <strong>FD (Linux raid autodetect)</strong>, ви це можете зробити за допомогою утиліти <strong>fdisk</strong>. Ось приклад для /dev/hde1:</p>
<div class="codeblock">[root@nine-blog tmp]# fdisk /dev/hde<br />
The number of cylinders for this disk is set to 8355.<br />
There is nothing wrong with that, but this is larger than 1024,<br />
and could in certain setups cause problems with:<br />
1) software that runs at boot time (e.g., old versions of LILO)<br />
2) booting and partitioning software from other OSs<br />
(e.g., DOS FDISK, OS/2 FDISK)</p>
<p>Command (m for help):</p>
</div>
<h4>Звернемося до допомоги FDISK</h4>
<p>Використаємо команду <strong>m,</strong> для отримання допомоги:</p>
<div class="codeblock">Command (m for help): m<br />
&#8230;<br />
&#8230;<br />
p   print the partition table<br />
q   quit without saving changes<br />
s   create a new empty Sun disklabel<br />
t   change a partition&#8217;s system id<br />
&#8230;<br />
&#8230;<br />
Command (m for help):</div>
<h4>Визначимо ID типу</h4>
<p>Розділ /dev/hde1 перший на диску /dev/hde. Змінимо його тип, за допомогою команди <strong>t</strong> визначивши номер розділу і код типу. Ви також можете використати команду <strong>L</strong>, що б отримати повний список ID питиів, якщо ви призабули. В моєму випадку тип для RAID-масиву це <strong>fd</strong>, він може відрізнятися в залежності від версії Linux.</p>
<div class="codeblock">Command (m for help): t<br />
Partition number (1-5): 1<br />
Hex code (type L to list codes): L<br />
&#8230;<br />
&#8230;<br />
&#8230;<br />
16  Hidden FAT16    61   SpeedStor       f2  DOS secondary<br />
17  Hidden HPFS/NTF 63  GNU HURD or Sys fd  Linux raid auto<br />
18  AST SmartSleep  64  Novell Netware  fe  LANstep<br />
1b  Hidden Win95 FA 65  Novell Netware  ff  BBT<br />
Hex code (type L to list codes): fd<br />
Changed system type of partition 1 to fd (Linux raid autodetect)</p>
<p>Command (m for help):</p>
</div>
<h4>Переконаймося, що відбулися зміни</h4>
<p>Використаємо команду <strong>р</strong>, що б отримати нову таблицю розділів:</p>
<div class="codeblock">
<p>Command (m for help): p</p>
<p>Disk /dev/hde: 4311 MB, 4311982080 bytes<br />
16 heads, 63 sectors/track, 8355 cylinders<br />
Units = cylinders of 1008 * 512 = 516096 bytes</p>
<p>Device Boot    Start       End    Blocks   Id  System<br />
/dev/hde1             1      4088   2060320+  fd  Linux raid autodetect<br />
/dev/hde2          4089      5713    819000   83  Linux<br />
/dev/hde4          6608      8355    880992    5  Extended<br />
/dev/hde5          6608      7500    450040+  83  Linux<br />
/dev/hde6          7501      8355    430888+  83  Linux</p>
<p>Command (m for help):</p>
</div>
<h4>Збережемо зміни</h4>
<p>Використаємо команду <strong>w</strong> для збереження змін на диск /dev/hde:</p>
<div class="codeblock">Command (m for help): w<br />
The partition table has been altered!</p>
<p>Calling ioctl() to re-read partition table.</p>
<p>WARNING: Re-reading the partition table failed with error 16: Device or resource busy.<br />
The kernel still uses the old table.<br />
The new table will be used at the next reboot.<br />
Syncing disks.</p>
<p>[root@nine-blog tmp]#</p>
</div>
<p>Помилки, як наведено вище, будуть з&#8217;являтися, якщо на диску містяться змонтовані розділи.</p>
<h4>Повторимо ці зміни для іншого розділу</h4>
<p>Для стислості, я не буду показувати аналогічні дії ля іншого розділу (або ж розділів, в залежності від вибраного типу RAID-масиву). Нам просто необхідно пам&#8217;ятати які зміни треба зробити для іншого розділу. Все по аналогії <img src='http://www.nine-it.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<h2>Підготовка RAID-масиву</h2>
<p>Тепер, коли розділи підготовлені, ми повинні об&#8217;єднати їх в новий RAID розділ, який ми потім будемо форматувати і монтувати. Ось як це робиться.</p>
<h3>Створення RAID-масиву</h3>
<p>Ви використаємо команду <strong>mdadm</strong> з <strong>&#8211;create</strong> опцією, що б створити RAID-масив. В нашому прикладі ми використаємо <strong>&#8211;level</strong> опцію, яка відповідає RAID 1 і -<strong>-raid-devices</strong> опцію для визначення кількості розділів в масиві.</p>
<div class="codeblock">[root@nine-blog tmp]# mdadm &#8211;create &#8211;verbose /dev/md0 &#8211;level=1 \<br />
&#8211;raid-devices=2 /dev/hde1 /dev/hdf2</p>
<p>mdadm: layout defaults to left-symmetric<br />
mdadm: chunk size defaults to 64K<br />
mdadm: /dev/hde1 appears to contain an ext2fs file system<br />
size=48160K  mtime=Sat Jan 27 23:11:39 2007<br />
mdadm: /dev/hdf2 appears to contain an ext2fs file system<br />
size=48160K  mtime=Sat Jan 27 23:11:39 2007<br />
mdadm: size set to 48064K<br />
Continue creating array? y<br />
mdadm: array /dev/md0 started.<br />
[root@nine-blog tmp]#</p>
</div>
<h3>Перевіримо, чи РЕЙД коректно ініціалізувався</h3>
<p><strong>/proc/mdstat</strong> файл містить інформацію про RAID пристрої. Перевірте,чи ініціалізація звершена.</p>
<div class="codeblock">[root@nine-blog tmp]# cat /proc/mdstat<br />
Personalities : [raid1]<br />
read_ahead 1024 sectors<br />
md0 : active raid1 hdg1[2] hde1[1]<br />
4120448 blocks [2/2] [UU]</p>
<p>unused devices:<br />
[root@nine-blog tmp]#</p>
</div>
<p>Зверніть увагу, що новий RAID пристрій називається /dev/md0. Ця інформація буде потрібна для наступного кроку.</p>
<h3>Форматуємо новий RAID-пристрій</h3>
<p>Ваш новий RAID-розділ зараз буде відфорфматовано. <strong>mkfs.ext3</strong> це зробить <img src='http://www.nine-it.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  (або виконайте форматування в іншу файлову систему за бажанням).</p>
<div class="codeblock">[root@nine-blog tmp]# mkfs.ext3 /dev/md0<br />
mke2fs 1.39 (29-May-2006)<br />
Filesystem label=<br />
OS type: Linux<br />
Block size=1024 (log=0)<br />
Fragment size=1024 (log=0)<br />
36144 inodes, 144192 blocks<br />
7209 blocks (5.00%) reserved for the super user<br />
First data block=1<br />
Maximum filesystem blocks=67371008<br />
18 block groups<br />
8192 blocks per group, 8192 fragments per group<br />
2008 inodes per group<br />
Superblock backups stored on blocks:<br />
8193, 24577, 40961, 57345, 73729</p>
<p>Writing inode tables: done<br />
Creating journal (4096 blocks): done<br />
Writing superblocks and filesystem accounting information: done</p>
<p>This filesystem will be automatically checked every 33 mounts or<br />
180 days, whichever comes first.  Use tune2fs -c or -i to override.<br />
[root@nine-blog tmp]#</p>
</div>
<h3>Створимо файл конфігурації mdadm.conf</h3>
<p>Ваша операційна система не запам&#8217;ятовує автоматично всі компоненти вашого RAID масиву. Ця інформація зберігається у файлі <strong>mdadm.conf</strong>.<br />
Тут ми експортуємо вивід на екран в файл, щоб створити файл конфігурації.</p>
<div class="codeblock">[root@nine-blog tmp]# mdadm &#8211;detail &#8211;scan &#8211;verbose &gt; /etc/mdadm.conf</div>
<h3>Створимо точку монтування для RAID-масива</h3>
<p>Наступний крок створить точку монтування для /dev/md0. В нашому випадку створимо її під назвою /mnt/raid</p>
<div class="codeblock">[root@nine-blog mnt]# mkdir /mnt/raid</div>
<h3>Відредагуємо файл /etc/fstab</h3>
<p><strong>/etc/fstab</strong> &#8211; файл який містить список всіх розділів, які неодхідно змонтувати при завантаженні системи. Додамо рядок для RAID масиву &#8211; /dev/md0 пристрій.</p>
<div class="codeblock">/dev/md0      /mnt/raid     ext3    defaults    1 2</div>
<p><strong>Не використовуйте назви розділів в файлі /etc/fstab для RAID пристроїв</strong>; тільки реальну назву, таку як /dev/md0. В старих версіях Linux, скріпт /etc/rc.d/rc.sysinit перевіряв файл /etc/fstab на наявність розділів, які використовуються в RAID масиві, тепер використовується файл конфігурації /etc/raidtab. Скріпт не автоматично стартує драйвер для RAID-масиву, якщо він не знайшов сторіку. Монтування пристроїв відбувається пізніше за завантаження, тому монтування RAID-пристрою, якщо не було завантажено драйвер може пошкодити данні.</p>
<div class="codeblock">Starting up RAID devices: md0(skipped)<br />
Checking filesystems<br />
/raiddata: Superblock has a bad ext3 journal(inode8)<br />
CLEARED.<br />
***journal has been deleted &#8211; file system is now ext 2 only***</p>
<p>/raiddata: The filesystem size (according to the superblock) is 2688072 blocks.<br />
The physical size of the device is 8960245 blocks.<br />
Either the superblock or the partition table is likely to be corrupt!<br />
/boot: clean, 41/26104 files, 12755/104391 blocks</p>
<p>/raiddata: UNEXPECTED INCONSISTENCY; Run fsck manually (ie without -a or -p options).</p>
</div>
<p>Якщо ви не знайомі з файлом <strong>/etc/fstab</strong> використайте команду <strong>man fstab</strong> щоб отримати докладні пояснення кожного стовпця що він містить.<br />
/dev/hde1, /dev/hdf2 розділи замінені одним /dev/md0 розділом. Тому вам не потрібно що б старі розділи були змонтовані. Переконайтеся, що всі посилання на них у цьому файлі закоментовані з <strong>#</strong> на початку рядка або повністю вилучені.</p>
<div class="codeblock">#/dev/hde1       /data1        ext3    defaults        1 2<br />
#/dev/hdf2       /data2        ext3    defaults        1 2</div>
<h3>Монтуємо новий RAID розділ</h3>
<p>Використайте команду <strong>mount</strong> для монтування RAID-масиву. Ви можете вибрати один з методів:</p>
<ul>
<li>Флаг -a команди mount в Linux, що б змонтувати всі пристрої з файлу /etc/fstab, ті які монтуються автоматично, чи не були змонтовані ще.
<div class="codeblock">[root@nine-blog tmp]# mount -a</div>
</li>
<li>Ви також можете змонтувати пристрій окремо
<div class="codeblock">[root@nine-blog tmp]# mount /dev/md0 /mnt/raid</div>
</li>
</ul>
<h3>Перевіряємо статус нового RAID-пристрою</h3>
<p>Файл <strong>/proc/mdstat</strong> містить поточний статус всіх пристроїв.</p>
<div class="codeblock">[root@nine-blog tmp]# raidstart /dev/md0<br />
[root@nine-blog tmp]# cat /proc/mdstat<br />
Personalities : [raid1]<br />
read_ahead 1024 sectors<br />
md0 : active raid5 hdg1[2] hde1[1]<br />
4120448 blocks level 1, [2/2] [UU]</p>
<p>unused devices:<br />
[root@nine-blog tmp]#</p>
</div>
<h2>Висновок</h2>
<p><strong>Linux software RAID</strong> забезпечує <strong>надмірність</strong> та <strong>швидкість</strong> для розділів та дисків, але він менш стабільний та швидкий ні апаратний RAID, який забезпечеється апаратним RAID контролером дисків.<br />
Конфігурація апаратного RAID, як правило, здійснюється за допомогою системи BIOS, коли комп&#8217;ютер завантажується, і потрібно налаштовувати тільки один раз, це абсолютно прозоро для <a href="http://www.nine-it.info/tag/linux/" title="все про linux"  target="_blank">Linux</a>. На відміну від програмного RAID, апаратний RAID вимагає, що б цілі диски були виділені і в поєднанні з тим фактом, що він зазвичай вимагає більш швидких жорстких дисків SCSI і додаткової картки контролера а це, як правило, дорого.<br />
Памє&#8217;тайте ці факти і прийміть їх до уваги що б прийняти правильне рішення для задоволення вашої потреби та дослідіть детальніше ці питання перед тим як продовжити. Зважування вартості в порівнянні з надійністю завжди важкий вибір для системах адміністраторів <img src='http://www.nine-it.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nine-it.info/2010/04/29/linux-software-raid-dlya-domu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Автоматичне сортування фотографій в linux системах</title>
		<link>http://www.nine-it.info/2010/04/13/avtomatychne-sortuvannya-fotohrafij/</link>
		<comments>http://www.nine-it.info/2010/04/13/avtomatychne-sortuvannya-fotohrafij/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 09:00:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[курс молодого лінуксоїда]]></category>
		<category><![CDATA[мануали]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[man]]></category>
		<category><![CDATA[оптимізація]]></category>

		<guid isPermaLink="false">http://www.nine-it.info/?p=470</guid>
		<description><![CDATA[Вже дуже довго в мої паці з фотоками у мене твориться безлад (як завжди скидаєш фотки на комп перед тим як кудись бігти і не вистачає часу на сортування, залишаєш сортування &#171;на потім&#187;, або &#171;коли зявиться трішки більше часу&#187;, &#8230;). Мене це достало і я вирішив написати скріпт для автоматичного сортування. Почитав, почитав, почав щось [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.nine-it.info/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=/wp-content/thumbnails/470.jpg&amp;w=200&amp;h=150&amp;zc=1&amp;ft=png' alt='post thumbnail' /></p>
<p>Вже дуже довго в мої паці з фотоками у мене твориться безлад (як завжди скидаєш фотки на комп перед тим як кудись бігти і не вистачає часу на сортування, залишаєш сортування &laquo;на потім&raquo;, або &laquo;коли зявиться трішки більше часу&raquo;, &#8230;). Мене це достало і я вирішив написати скріпт для автоматичного сортування. Почитав, почитав, почав щось пробувати писати&#8230;.і згадав що <strong>не варто винаходити велосипед заново</strong> і почав гуглити вже готові реалізації.<br />
Знайшов exiftool, який вміє працювати з EXIF інформацією.</p>
<p><span id="more-470"></span> Загалом, завантажив ExifTool, розпакував. Виявилося, що написано на Перл. Спробував запустити, але отримав помилку про відсутньої Image/ExifTool. Поставив цей модуль:</p>
<div class="codeblock">sudo apt-get install libimage-exiftool-perl</div>
<p>Запустив одну команду&#8230;і 70GB фоток були автоматично відсортовані по папках. Все геніальне просто!<br />
А ось і ця команда:</p>
<div class="codeblock">exiftool &laquo;-Directory&lt;DateTimeOriginal&raquo; -r -d &laquo;%Y/%m/%d&raquo; ~/photo</div>
<p>Також нарив командочку для переіменування назв фоток (часто багато фоток з однаковими назвами, чи з одної події&#8230;.і хотіло б їх якось фідсортувати за хронологією автоматично):</p>
<div class="codeblock">exiftool &laquo;-FileName&lt;CreateDate&raquo; -r -d &laquo;%Y_%m_%d-%H%M%S.%%e&raquo; ~/photo</div>
<p><strong>Обережно</strong>! Команди у цьому вигляді не скопіюють фотки, а перенесуть!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nine-it.info/2010/04/13/avtomatychne-sortuvannya-fotohrafij/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Midnight Commander: mcedit замість nano</title>
		<link>http://www.nine-it.info/2010/03/30/midnight-commander-mcedit-zamist-nano/</link>
		<comments>http://www.nine-it.info/2010/03/30/midnight-commander-mcedit-zamist-nano/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 18:33:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[курс молодого лінуксоїда]]></category>
		<category><![CDATA[мануали]]></category>
		<category><![CDATA[(k)ubuntu]]></category>
		<category><![CDATA[mc]]></category>
		<category><![CDATA[mcedit]]></category>
		<category><![CDATA[nano]]></category>

		<guid isPermaLink="false">http://www.nine-it.info/?p=413</guid>
		<description><![CDATA[При встановленні mc у мене по замовчуванню для редагування файлів відкривався текстовий редоктор nano. Nano, звісно доволі зручний та привабливий текстовий редактор, але чомусь мені більш до вподоби mcedit (до vimа я ще не доріс &#8211; треба прокачати скіл юніквейності =) ). Отже для того що б по замовчуванню відкривався mcedit треба всього лише відкрити [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.nine-it.info/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=/wp-content/thumbnails/413.png&amp;w=200&amp;h=150&amp;zc=1&amp;ft=png' alt='post thumbnail' /></p>
<p>При встановленні mc у мене по замовчуванню для редагування файлів відкривався текстовий редоктор <a href="http://www.nine-it.info/tag/nano/" >nano</a>.<br />
<span id="more-413"></span></p>
<p>Nano, звісно доволі зручний та привабливий текстовий редактор, але чомусь мені більш до вподоби mcedit (до vimа я ще не доріс &#8211; треба прокачати скіл юніквейності =) ).</p>
<p>Отже для того що б по замовчуванню відкривався <a href="http://www.nine-it.info/tag/mcedit/" >mcedit</a> треба всього лише відкрити налаштування Midnight Commander</p>
<div class="codeblock">nano ~/.mc/ini</div>
<p>і поправити одне налаштування:</p>
<div class="codeblock">use_internal_edit=1</div>
<p>або ж зайти в налаштування з графічного інтерфейсу:</p>
<div class="codeblock">F9 -&gt; Параметри -&gt; Конфігурація</div>
<p>і там вже вибрати вбудований текстовий редактор для редагування текстів.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nine-it.info/2010/03/30/midnight-commander-mcedit-zamist-nano/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Як встановити KDE в Ubuntu</title>
		<link>http://www.nine-it.info/2010/03/30/yak-vstanovyty-kde-v-ubuntu/</link>
		<comments>http://www.nine-it.info/2010/03/30/yak-vstanovyty-kde-v-ubuntu/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 15:41:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[курс молодого лінуксоїда]]></category>
		<category><![CDATA[мануали]]></category>
		<category><![CDATA[(k)ubuntu]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[man]]></category>

		<guid isPermaLink="false">http://www.nine-it.info/?p=409</guid>
		<description><![CDATA[За замовчуванням стільничне середовище Ubuntu – це Gnome. Проте іноді користувачі Ubuntu хочуть спробувати і KDE. Якщо ви не знаєте відмінностей між ними, можете почитати про них тут KDE та GNOME. Увага: якщо встановити KDE та Gnome разом, ваше меню програм перетвориться на мішанину з програм KDE та програм Gnome. Можливі також деякі косметичні проблеми (зовнішній вигляд KDE Qt замінюватиме частину [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.nine-it.info/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=/wp-content/thumbnails/409.jpg&amp;w=200&amp;h=150&amp;zc=1&amp;ft=png' alt='post thumbnail' /></p>
<p>За замовчуванням стільничне середовище <a href="http://www.nine-it.info/tag/kubuntu/" >Ubuntu</a> – це <a href="http://www.nine-it.info/tag/gnome/" >Gnome</a>. Проте іноді користувачі Ubuntu хочуть спробувати і <a href="http://www.nine-it.info/tag/kde/" >KDE</a>. Якщо ви не знаєте відмінностей між ними, можете почитати про них тут <a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://www.psychocats.net/ubuntu/kdegnome" >KDE та GNOME</a>.</p>
<p>Увага: якщо встановити KDE та Gnome разом, ваше меню програм перетвориться на мішанину з програм KDE та програм Gnome. Можливі також деякі косметичні проблеми (зовнішній вигляд KDE Qt замінюватиме частину тем Gnome, або прихований файл на робочому столі, що з’являтиметься в Gnome одразу після виходу з KDE).</p>
<p><span id="more-409"></span></p>
<p>Хоч в цій статті і приведено рекомендації з встановлення <strong>KDE</strong> в <strong>Ubuntu</strong>, той же принцип застосовується для <a href="http://www.nine-it.info/2010/03/13/vstanovlennya-gnome-v-kubuntu/" >встановлення Gnome в Kubuntu</a> чи XFCE для Kubuntu або Ubuntu. Фактично ви встановлюєте середовище робочого столу, вийшовши з системи ви можете вибрати візуальне середовище для наступного логіну.</p>
<p>Запустіть <strong>System</strong> &gt; <strong>Administration</strong> &gt; <strong>Synaptic Package Manager</strong></p>
<p>Введіть пароль по запиту системи.</p>
<p>Здійсніть пошук “<strong>kubuntu</strong>” і потім жаміть правою клавішою на пакеті “<strong>kubuntu-desktop</strong>” і позначте його для встановлення.</p>
<p>У вікні з пакетами для встановлення нажміть “<strong>Mark</strong>” для того що б завантажити та встановити всі необхідні пакунки.</p>
<p>Нажміть “<strong>Apply</strong>” і ви отримаєте ще один запит на підтвердження в меншому діалоговому вікні, де вас спитають, чи ви дійсно хочете застосувати ці зміни. Якщо хочете переглянути деталі (список пакунків для встановлення) – то нажміть на маленький “трикутничок”. Для продовження встановлення – нажміть “<strong>Apply</strong>“.</p>
<p>Зачекайте поки викачаються всі необхідні пакунки.</p>
<p>У процесі встановлення потрібно буде обрати менеджер реєстрації в системі (<strong>GDM</strong> або <strong>KDM</strong>). Якщо ви вважаєте, що будете використовувати <strong>Gnome</strong> частіше, залиште <strong>GDM</strong> менеджером за замовчуванням. Якщо ви думаєте, ви будете використовувати <strong>KDE</strong> частіше – виберіть <strong>KDM</strong>.</p>
<p>Після здійснення вибору нажміть “<strong>Forward</strong>“.</p>
<p>Зачекайте доки завершеться процес інсталяції та вийдіть з <strong>Synaptic</strong>.</p>
<p><strong>Розлогіньтеся</strong> з Gnome.</p>
<p>На сторінці логіну в систему зайдіть в “<strong>Options</strong>” і виберіть “<strong>Select Session</strong>“. В списку виберіть “<strong>KDE</strong>” та нажміть “<strong>Change Session</strong>“.</p>
<p>Залогіньтесь за допомогою вашого логіну та паролю. <strong>GDM</strong> запистає вас, чи ви бажаєть змінити сесію тільки на один раз, чи ви постійно будете виристовувати ці налаштування. Якщо ви використовуєте <strong>KDM</strong>, то ви просто логінитися та ці налаштування зберігаються, як налаштування “по замовчуванню”, до того часу поки ви не вирішете змінити на інші.</p>
<p>І на решті ви в <strong><a href="http://www.nine-it.info/tag/kde/" >KDE</a></strong>. Якщо ви надумаєте переключитися назад в <strong><a href="http://www.nine-it.info/tag/gnome/" >Gnome</a></strong> – то розлогіньтеся та змінить тип сесії.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nine-it.info/2010/03/30/yak-vstanovyty-kde-v-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Встановлення GNOME в Kubuntu</title>
		<link>http://www.nine-it.info/2010/03/13/vstanovlennya-gnome-v-kubuntu/</link>
		<comments>http://www.nine-it.info/2010/03/13/vstanovlennya-gnome-v-kubuntu/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 23:01:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[курс молодого лінуксоїда]]></category>
		<category><![CDATA[мануали]]></category>
		<category><![CDATA[(k)ubuntu]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[man]]></category>

		<guid isPermaLink="false">http://www.nine-it.info/?p=394</guid>
		<description><![CDATA[Замовчуванням робочий стіл Kubuntu – середовищя KDE. Іноді люди, що використовують Kubuntu хочуть спробувати Gnome поряд з KDE. Якщо ви не знаєте відмінностей між ними, можете читати це тут KDE та GNOME. Увага: встановивши KDE та Gnome разом ви будете мати перемішане меню програм: всі програми KDE та Gnome одночасно. Ви також можете зіткнутися з [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.nine-it.info/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=/wp-content/thumbnails/394.jpg&amp;w=200&amp;h=150&amp;zc=1&amp;ft=png' alt='post thumbnail' /></p>
<p>Замовчуванням робочий стіл <a href="http://www.nine-it.info/tag/kubuntu/" >Kubuntu</a> – середовищя KDE. Іноді люди, що використовують Kubuntu хочуть спробувати Gnome поряд з KDE. Якщо ви не знаєте відмінностей між ними, можете читати це тут <a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://www.psychocats.net/ubuntu/kdegnome"  target="_blank">KDE та GNOME</a>.</p>
<p>Увага: встановивши <a href="http://www.nine-it.info/tag/kde/"  target="_blank">KDE</a> та <a href="http://www.nine-it.info/tag/gnome/" >Gnome</a> разом ви будете мати перемішане меню програм: всі програми KDE та Gnome одночасно. Ви також можете зіткнутися з деякими іншими косметичними проблемами (KDE Qt бере на себе частину ваших Gnome тим, або може приховати файл на робочому столі, це може проявитися в GNOME після того, як ви тільки вийшли з <a href="http://www.nine-it.info/tag/kde/" >KDE</a>).</p>
<p><span id="more-394"></span></p>
<p>Навіть якщо ця стаття про <a href="http://www.nine-it.info/2010/03/30/yak-vstanovyty-kde-v-ubuntu/" >встановлення Gnome в Kubuntu</a>, той же принцип застосовується для встановлення KDE в Ubuntu чи XFCE для <a href="http://www.nine-it.info/tag/kubuntu/" >Kubuntu</a> або <a href="http://www.nine-it.info/tag/kubuntu/" >Ubuntu</a>. Фактично ви встановите середовище робочого столу, вийшовши з системи ви можете вибрати візуальне середовище для наступного логіну.</p>
<p>І так приступимо до встановлення. Натисніть KMenu, вибріть “<strong>System</strong>“, а потім запустіть <strong>Konsoleо</strong> у вікні терміналу.</p>
<p>Термінал майже завжди працює (на відміну від KPackageKit Gnome, що інколи не працює через “загадкові” багі), так що я  надаю перевагу терміналу. Не хвилюйтеся. Ви можете копіювати і вставляти команди за допомогою миші. Вам не потрібно вводити нічого.</p>
<div class="codeblock">sudo apt-get update &amp;&amp; sudo apt-get install ubuntu-desktop</div>
<p>Вам буде наведений довгий список програмних пакетів для установки та потім система попросить підтвердити ваші дії. Перш ніж ви підтвердите, подумайте, чи ви в майбутньому буде використовути Gnome. Якщо ні – то скопіюйте (можете за допомогою миші) весь список пакетів і скопіюйте їх в окремий текстовий файл. Ви можете потім видалити Гном, то для цього необзідно ввести sudo apt-get remove, потім вставити у термінал список пакетів призначенийх для <a href="http://www.nine-it.info/tag/gnome/" >GNOME</a> і повернутися до улюбленої Kubuntu.</p>
<p>Якщо ви дуже хочете зберегти <a href="http://www.nine-it.info/tag/gnome/" >Gnome</a>, ви можете не копіювати список пакетів.</p>
<p>У будь-якому випадку, коли ви готові почати встановлення наберіть “Y”, щоб підтвердити встановелння.</p>
<p>Зачекайте поки усі пакнти завантажаться. Розрахунки часу завантаження можуть буть не вірними, тобто якщо вам система каже що залитищось близько трьох годин, чи пару хвилин і у вас dial-up, або мєга щвидкий ітен – то разрахунки можуть бути не точними.</p>
<p>Під час процесу встановлення, ви повинні будете вибрати графічну оболочку для менеджера ввода логіна за замовчуванням (GDM або KDM) (базова сторінка логіну юзера). Якщо ви вважаєте що будете використовувати Gnome частіше робіть GDM за замовчуванням. Якщо ви думаєте, ви будете використовувати <a href="http://www.nine-it.info/tag/kde/" >KDE</a> частіше – залишайте KDM, як за замовчуванням.</p>
<p>Значення за замовчуванням завжди можна змінити пізніше, змінивши</p>
<div class="codeblock">/etc/X11/default-display-manager</div>
<p>файл. Для EDM, файл буде</p>
<div class="codeblock">/usr/bin/kdm</div>
<p>: для GDM, файл</p>
<div class="codeblock">/usr/sbin/gdm</div>
<p>Надрукуйте</p>
<div class="codeblock">exit</div>
<p>в терміналі.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nine-it.info/2010/03/13/vstanovlennya-gnome-v-kubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

