<?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>Free Runner &#187; linux</title>
	<atom:link href="http://blog.lushpai.org/archives/tag/linux/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.lushpai.org</link>
	<description>Блог свободного программиста</description>
	<lastBuildDate>Mon, 12 Jul 2010 23:12:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Bash Backup. Моменты.</title>
		<link>http://blog.lushpai.org/archives/163</link>
		<comments>http://blog.lushpai.org/archives/163#comments</comments>
		<pubDate>Fri, 26 Mar 2010 22:41:11 +0000</pubDate>
		<dc:creator>gwinn</dc:creator>
				<category><![CDATA[запись]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blog.lushpai.org/?p=163</guid>
		<description><![CDATA[На днях пришлось писать скрипт для резервного копирования некоторых важных файлов на одном из серверов. Вся прелесть состояла в том, что резервирование должно было быть гибридным. Часть файлов нужно было хранить с накоплением, то есть при изменении файла, нужно было его копию в директории бекапа переименовать, а затем заново его сохранить в выше упомянутую директорию. [...]]]></description>
			<content:encoded><![CDATA[<p>На днях пришлось писать скрипт для резервного копирования некоторых важных файлов на одном из серверов. Вся прелесть состояла в том, что резервирование должно было быть гибридным. Часть файлов нужно было хранить с накоплением, то есть при изменении файла, нужно было его копию в директории бекапа переименовать, а затем заново его сохранить в выше упомянутую директорию. Другие файлы нужно было хранить только в виде последней версии, то есть просто перезаписывать то, что уже лежит в бекапе.</p>
<p>В принципе, скрипты бекапа &#8211; вещь, с которой рано или поздно (безусловно лучше, если рано) сталкивается любой системный администратор (кстати, я на некоторое время из веб разработчиков переквалифицировался в Linux администратора =) ). Полностью весь скрипт приводить смысла не вижу, а вот непосредственно те его части, которые реализуют копирование, выношу на суд читателя.</p>
<p><span id="more-163"></span></p>
<h5>Резервирование без накопления.</h5>
<p>Нас интересуют только файлы и директории, символические ссылки и прочие чудеса &#8211; нет.</p>
<p>
<pre style='color:#000000;background:#f1f0f0;'><span style='color:#400000; font-weight:bold; '>for</span> ELEMENT <span style='color:#400000; font-weight:bold; '>in</span> ${paths_o<span style='color:#806030; '>[</span><span style='color:#e60000; '>@</span><span style='color:#806030; '>]</span>}
    <span style='color:#400000; font-weight:bold; '>do</span>
        <span style='color:#400000; font-weight:bold; '>if</span> <span style='color:#806030; '>[</span> <span style='color:#44aadd; '>-e</span> $BACKUP_PATH$ELEMENT <span style='color:#806030; '>]</span><span style='color:#806030; '>;</span> <span style='color:#400000; font-weight:bold; '>then</span>
        <span style='color:#400000; font-weight:bold; '>if</span> <span style='color:#806030; '>[</span> $ELEMENT <span style='color:#44aadd; '>-nt</span> $BACKUP_PATH$ELEMENT <span style='color:#806030; '>]</span><span style='color:#806030; '>;</span> <span style='color:#400000; font-weight:bold; '>then</span>
            <span style='color:#400000; font-weight:bold; '>if</span> <span style='color:#806030; '>[</span> <span style='color:#44aadd; '>-s</span> $ELEMENT <span style='color:#806030; '>]</span><span style='color:#806030; '>;</span> <span style='color:#400000; font-weight:bold; '>then</span>
            <span style='color:#400000; font-weight:bold; '>if</span> <span style='color:#806030; '>[</span> -h $ELEMENT <span style='color:#806030; '>]</span><span style='color:#806030; '>;</span> <span style='color:#400000; font-weight:bold; '>then</span>
                <span style='color:#bb7977; font-weight:bold; '>continue</span><span style='color:#806030; '>;</span>
            <span style='color:#400000; font-weight:bold; '>else</span>
                <span style='color:#400000; font-weight:bold; '>if</span> <span style='color:#806030; '>[</span> <span style='color:#44aadd; '>-d</span> $ELEMENT <span style='color:#806030; '>]</span><span style='color:#806030; '>;</span> <span style='color:#400000; font-weight:bold; '>then</span>
                mkdir <span style='color:#44aadd; '>-p</span> <span style='color:#e60000; '>"</span><span style='color:#e60000; '>$BACKUP_TEMP</span><span style='color:#e60000; '>$ELEMENT</span><span style='color:#e60000; '>"</span><span style='color:#806030; '>;</span>
                cp <span style='color:#44aadd; '>-r</span> $ELEMENT $BACKUP_TEMP$<span style='color:#806030; '>(</span>dirname $ELEMENT<span style='color:#806030; '>)</span><span style='color:#806030; '>;</span>
                <span style='color:#400000; font-weight:bold; '>else</span>
                <span style='color:#400000; font-weight:bold; '>if</span> <span style='color:#806030; '>[</span> <span style='color:#44aadd; '>-f</span> $ELEMENT <span style='color:#806030; '>]</span><span style='color:#806030; '>;</span> <span style='color:#400000; font-weight:bold; '>then</span>
                    mkdir <span style='color:#44aadd; '>-p</span> $BACKUP_TEMP$<span style='color:#806030; '>(</span>dirname $ELEMENT<span style='color:#806030; '>)</span><span style='color:#806030; '>;</span>
                    cp $ELEMENT $BACKUP_TEMP$ELEMENT<span style='color:#806030; '>;</span>
                <span style='color:#400000; font-weight:bold; '>else</span>
                    <span style='color:#bb7977; font-weight:bold; '>continue</span><span style='color:#806030; '>;</span>
                <span style='color:#400000; font-weight:bold; '>fi</span><span style='color:#806030; '>;</span>
                <span style='color:#400000; font-weight:bold; '>fi</span><span style='color:#806030; '>;</span>
            <span style='color:#400000; font-weight:bold; '>fi</span><span style='color:#806030; '>;</span>
            <span style='color:#400000; font-weight:bold; '>fi</span><span style='color:#806030; '>;</span>
        <span style='color:#400000; font-weight:bold; '>fi</span><span style='color:#806030; '>;</span>
        <span style='color:#400000; font-weight:bold; '>else</span>
        <span style='color:#400000; font-weight:bold; '>if</span> <span style='color:#806030; '>[</span> -h $ELEMENT <span style='color:#806030; '>]</span><span style='color:#806030; '>;</span> <span style='color:#400000; font-weight:bold; '>then</span>
            <span style='color:#bb7977; font-weight:bold; '>continue</span><span style='color:#806030; '>;</span>
        <span style='color:#400000; font-weight:bold; '>else</span>
            <span style='color:#400000; font-weight:bold; '>if</span> <span style='color:#806030; '>[</span> <span style='color:#44aadd; '>-d</span> $ELEMENT <span style='color:#806030; '>]</span><span style='color:#806030; '>;</span> <span style='color:#400000; font-weight:bold; '>then</span>
            mkdir <span style='color:#44aadd; '>-p</span> <span style='color:#e60000; '>"</span><span style='color:#e60000; '>$BACKUP_TEMP</span><span style='color:#e60000; '>$ELEMENT</span><span style='color:#e60000; '>"</span><span style='color:#806030; '>;</span>
            cp <span style='color:#44aadd; '>-r</span> $ELEMENT $BACKUP_TEMP$<span style='color:#806030; '>(</span>dirname $ELEMENT<span style='color:#806030; '>)</span><span style='color:#806030; '>;</span>
            <span style='color:#400000; font-weight:bold; '>else</span>
            <span style='color:#400000; font-weight:bold; '>if</span> <span style='color:#806030; '>[</span> <span style='color:#44aadd; '>-f</span> $ELEMENT <span style='color:#806030; '>]</span><span style='color:#806030; '>;</span> <span style='color:#400000; font-weight:bold; '>then</span>
                mkdir <span style='color:#44aadd; '>-p</span> $BACKUP_TEMP$<span style='color:#806030; '>(</span>dirname $ELEMENT<span style='color:#806030; '>)</span><span style='color:#806030; '>;</span>
                cp $ELEMENT $BACKUP_TEMP$ELEMENT<span style='color:#806030; '>;</span>
            <span style='color:#400000; font-weight:bold; '>else</span>
                <span style='color:#bb7977; font-weight:bold; '>continue</span><span style='color:#806030; '>;</span>
            <span style='color:#400000; font-weight:bold; '>fi</span><span style='color:#806030; '>;</span>
            <span style='color:#400000; font-weight:bold; '>fi</span><span style='color:#806030; '>;</span>
        <span style='color:#400000; font-weight:bold; '>fi</span><span style='color:#806030; '>;</span>
        <span style='color:#400000; font-weight:bold; '>fi</span><span style='color:#806030; '>;</span>
    <span style='color:#400000; font-weight:bold; '>done</span><span style='color:#806030; '>;</span>
</pre>
</p>
<h5>Резервирование с накоплением</h5>
<p>В данном случае используем рекурсивную процедуру. Принцип тот же &#8211; только файлы и каталоги.</p>
<p><pre style='color:#000000;background:#f1f0f0;'>walk_tree<span style='color:#806030; '>()</span> <span style='color:#806030; '>{</span>
    a<span style='color:#806030; '>=</span><span style='color:#c00000; '>0</span><span style='color:#806030; '>;</span>
    ls <span style='color:#e60000; '>"</span><span style='color:#e60000; '>$1</span><span style='color:#e60000; '>"</span> <span style='color:#e34adc; '>|</span> <span style='color:#400000; font-weight:bold; '>while</span> IFS<span style='color:#806030; '>=</span> <span style='color:#bb7977; font-weight:bold; '>read</span> i<span style='color:#806030; '>;</span>
    <span style='color:#400000; font-weight:bold; '>do</span>
        <span style='color:#400000; font-weight:bold; '>if</span> <span style='color:#806030; '>[</span> <span style='color:#44aadd; '>-L</span> <span style='color:#e60000; '>"$(dirname </span><span style='color:#e60000; '>$1</span><span style='color:#40015a; '>/</span><span style='color:#e60000; '>$i</span><span style='color:#e60000; '>)"</span> <span style='color:#806030; '>]</span><span style='color:#806030; '>;</span> <span style='color:#400000; font-weight:bold; '>then</span>
        <span style='color:#bb7977; font-weight:bold; '>continue</span><span style='color:#806030; '>;</span>
        <span style='color:#400000; font-weight:bold; '>else</span>
        <span style='color:#400000; font-weight:bold; '>if</span> <span style='color:#806030; '>[</span> <span style='color:#44aadd; '>-d</span> <span style='color:#e60000; '>"$(dirname </span><span style='color:#e60000; '>$1</span><span style='color:#40015a; '>/</span><span style='color:#e60000; '>$i</span><span style='color:#e60000; '>)"</span> <span style='color:#806030; '>]</span><span style='color:#806030; '>;</span> <span style='color:#400000; font-weight:bold; '>then</span>
            a<span style='color:#806030; '>=</span>$<span style='color:#806030; '>(</span><span style='color:#806030; '>(</span>$a+<span style='color:#c00000; '>1</span><span style='color:#806030; '>)</span><span style='color:#806030; '>)</span><span style='color:#806030; '>;</span>
                paths<span style='color:#806030; '>[</span><span style='color:#e60000; '>$a</span><span style='color:#806030; '>]</span>=$1<span style='color:#40015a; '>/</span>$i<span style='color:#806030; '>;</span>
            walk_tree <span style='color:#e60000; '>"</span><span style='color:#e60000; '>$1</span><span style='color:#40015a; '>/</span><span style='color:#e60000; '>$i</span><span style='color:#e60000; '>"</span>
        <span style='color:#400000; font-weight:bold; '>else</span>
                a<span style='color:#806030; '>=</span>$<span style='color:#806030; '>(</span><span style='color:#806030; '>(</span>$a+<span style='color:#c00000; '>1</span><span style='color:#806030; '>)</span><span style='color:#806030; '>)</span><span style='color:#806030; '>;</span>
                paths<span style='color:#806030; '>[</span><span style='color:#e60000; '>$a</span><span style='color:#806030; '>]</span>=$i<span style='color:#806030; '>;</span>
        <span style='color:#400000; font-weight:bold; '>fi</span><span style='color:#806030; '>;</span>
        <span style='color:#400000; font-weight:bold; '>fi</span><span style='color:#806030; '>;</span>
    <span style='color:#400000; font-weight:bold; '>done</span><span style='color:#806030; '>;</span>

    <span style='color:#400000; font-weight:bold; '>for</span> element <span style='color:#400000; font-weight:bold; '>in</span> ${paths<span style='color:#806030; '>[</span><span style='color:#e60000; '>@</span><span style='color:#806030; '>]</span>}
    <span style='color:#400000; font-weight:bold; '>do</span>
        <span style='color:#400000; font-weight:bold; '>if</span> <span style='color:#806030; '>[</span> <span style='color:#44aadd; '>-L</span> $element <span style='color:#806030; '>]</span><span style='color:#806030; '>;</span> <span style='color:#400000; font-weight:bold; '>then</span>
                <span style='color:#bb7977; font-weight:bold; '>continue</span><span style='color:#806030; '>;</span>
            <span style='color:#400000; font-weight:bold; '>else</span>
            <span style='color:#400000; font-weight:bold; '>if</span> <span style='color:#806030; '>[</span> <span style='color:#44aadd; '>-f</span> $element <span style='color:#806030; '>]</span><span style='color:#806030; '>;</span> <span style='color:#400000; font-weight:bold; '>then</span>
                    <span style='color:#400000; font-weight:bold; '>if</span> <span style='color:#806030; '>[</span> <span style='color:#44aadd; '>-e</span> $BACKUP_PATH$element <span style='color:#806030; '>]</span><span style='color:#806030; '>;</span> <span style='color:#400000; font-weight:bold; '>then</span>
                        <span style='color:#400000; font-weight:bold; '>if</span> <span style='color:#806030; '>[</span> $element <span style='color:#44aadd; '>-nt</span> $BACKUP_PATH$element <span style='color:#806030; '>]</span><span style='color:#806030; '>;</span> <span style='color:#400000; font-weight:bold; '>then</span>
                    <span style='color:#400000; font-weight:bold; '>if</span> <span style='color:#806030; '>[</span> <span style='color:#44aadd; '>-s</span> $element <span style='color:#806030; '>]</span><span style='color:#806030; '>;</span> <span style='color:#400000; font-weight:bold; '>then</span>
                            mod<span style='color:#806030; '>=</span><span style='color:#000000; background:#ffffe8; '>`stat </span><span style='color:#44aadd; background:#ffffe8; '>-c</span><span style='color:#000000; background:#ffffe8; '> %y </span><span style='color:#000000; background:#ffffe8; '>$BACKUP_PATH</span><span style='color:#000000; background:#ffffe8; '>$element</span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#e34adc; background:#ffffe8; '>|</span><span style='color:#000000; background:#ffffe8; '> cut </span><span style='color:#44aadd; background:#ffffe8; '>-d</span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#e60000; background:#ffffe8; '>' '</span><span style='color:#000000; background:#ffffe8; '> -f1`</span><span style='color:#806030; '>;</span>
                            mkdir <span style='color:#44aadd; '>-p</span> $BACKUP_TEMP$<span style='color:#806030; '>(</span>dirname $element<span style='color:#806030; '>)</span><span style='color:#806030; '>;</span>
                        cp $BACKUP_PATH$element $BACKUP_PATH$element$mod<span style='color:#806030; '>;</span>
                        cp $element $BACKUP_TEMP$<span style='color:#806030; '>(</span>dirname $element<span style='color:#806030; '>)</span><span style='color:#806030; '>;</span>
                        <span style='color:#400000; font-weight:bold; '>fi</span><span style='color:#806030; '>;</span>
                <span style='color:#400000; font-weight:bold; '>fi</span><span style='color:#806030; '>;</span>
                <span style='color:#400000; font-weight:bold; '>else</span>
                mkdir <span style='color:#44aadd; '>-p</span> $BACKUP_TEMP$<span style='color:#806030; '>(</span>dirname $element<span style='color:#806030; '>)</span><span style='color:#806030; '>;</span>
                cp $element $BACKUP_TEMP$<span style='color:#806030; '>(</span>dirname $element<span style='color:#806030; '>)</span><span style='color:#806030; '>;</span>
                <span style='color:#400000; font-weight:bold; '>fi</span><span style='color:#806030; '>;</span>
            <span style='color:#400000; font-weight:bold; '>else</span>
                <span style='color:#400000; font-weight:bold; '>if</span> <span style='color:#806030; '>[</span> <span style='color:#44aadd; '>-d</span> $element <span style='color:#806030; '>]</span><span style='color:#806030; '>;</span> <span style='color:#400000; font-weight:bold; '>then</span>
                    mkdir <span style='color:#44aadd; '>-p</span> $BACKUP_TEMP$<span style='color:#806030; '>(</span>dirname $element<span style='color:#806030; '>)</span><span style='color:#806030; '>;</span>
                    <span style='color:#400000; font-weight:bold; '>else</span>
                    <span style='color:#400000; font-weight:bold; '>if</span> <span style='color:#806030; '>[</span> <span style='color:#44aadd; '>-L</span> $element <span style='color:#806030; '>]</span><span style='color:#806030; '>;</span> <span style='color:#400000; font-weight:bold; '>then</span>
                        <span style='color:#bb7977; font-weight:bold; '>continue</span><span style='color:#806030; '>;</span>
                    <span style='color:#400000; font-weight:bold; '>fi</span><span style='color:#806030; '>;</span>
                    <span style='color:#400000; font-weight:bold; '>fi</span><span style='color:#806030; '>;</span>
                <span style='color:#400000; font-weight:bold; '>fi</span><span style='color:#806030; '>;</span>
            <span style='color:#400000; font-weight:bold; '>fi</span><span style='color:#806030; '>;</span>
        <span style='color:#400000; font-weight:bold; '>done</span><span style='color:#806030; '>;</span>
<span style='color:#806030; '>}</span>
</pre>
</p>
<h5>p.s.</h5>
<p>В целом работает, хотя идей для модификации и улучшения уже просто целый вагон. Надеюсь кому-нибудь пригодится.</p>
<p>
<a href="http://blog.lushpai.org/wp-content/2010/03/3.png"><img src="http://blog.lushpai.org/wp-content/2010/03/3.png" alt="Работа в режиме &quot;backup&quot;" title="backup it!" width="578" height="344" class="aligncenter size-full wp-image-172" /></a>
</p>
<p>
<a href="http://blog.lushpai.org/wp-content/2010/03/2.png"><img src="http://blog.lushpai.org/wp-content/2010/03/2.png" alt="no parameter" title="no parameter" width="578" height="344" class="aligncenter size-full wp-image-171" /></a>
</p>
<p>
<a href="http://blog.lushpai.org/wp-content/2010/03/1.png"><img src="http://blog.lushpai.org/wp-content/2010/03/1.png" alt="backup help" title="backup help" width="578" height="344" class="aligncenter size-full wp-image-170" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lushpai.org/archives/163/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Fedora &#8211; Slackware = Opensolaris</title>
		<link>http://blog.lushpai.org/archives/159</link>
		<comments>http://blog.lushpai.org/archives/159#comments</comments>
		<pubDate>Mon, 15 Feb 2010 09:08:34 +0000</pubDate>
		<dc:creator>gwinn</dc:creator>
				<category><![CDATA[запись]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://blog.lushpai.org/?p=159</guid>
		<description><![CDATA[Решил вчера воспользоваться редким выходным, дабы заменить на своем ноутбуке ось. В силу ряда причин (о которых, ежели все будет благополучно, будет отдельный пост) было решено заменить Slackware 13 (i686) на Fedora 12 (x86_64). Бекап, разметка, начать установку, выбор пакетов, системные настройки, установка загрузчика, презагрузка и&#8230; облом. Танцы с бубном не спасают, скрепя от досады [...]]]></description>
			<content:encoded><![CDATA[<p>Решил вчера воспользоваться редким выходным, дабы заменить на своем ноутбуке ось. В силу ряда причин (о которых, ежели все будет благополучно, будет отдельный пост) было решено заменить Slackware 13 (i686) на Fedora 12 (x86_64). Бекап, разметка, начать установку, выбор пакетов, системные настройки, установка загрузчика, презагрузка и&#8230; облом. Танцы с бубном не спасают, скрепя от досады зубами достаю диск с CentOS 5.4 (x86_64). Загрузка с диска, выбор пакетов, установка, перезагрузка&#8230; твою ж налево!!! то же самое!!! система уходит в ребут едва начинается загрузка&#8230;</p>
<p>Перекур, кофе&#8230; Итак, какие варианты? Нужна 64 битная ось. Slackware или Gentoo &#8211; долго настраивать. Ubuntu, openSuse, Mandriva &#8211; не комильфо, нужна нормальная система без лишнего мусора. Debian? Нужно вытягивать образ, да и установка с настройкой не 5-ти минутное дело&#8230; Глаз падает на болванку, лежащую немного в стороне&#8230; а почему бы и нет? Opensolaris 2008.11 x86_64. Ставим. Live CD тормозной как Ubuntu 6-й версии, распаковка на винт более 40 минут&#8230; мда&#8230; запуск&#8230; долго, около 2-3 минут&#8230; рабочее окружение Gnome, тормозит, но жить можно, не подхватился только Wi-Fi.</p>
<p>После 30-40 минут стало ясно, что жить в системе можно, но при первой же возможности нужно будет обновиться до 2009.06&#8230; </p>
<p>To be continue&#8230;</p>
<p><strong>UPD 1:</strong> Обновил систему при первом же подключении к сети. Без малого 600МБ превратили исходный 2008.11 в 2009.06. Система стала заметно отзывчевее. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lushpai.org/archives/159/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Буквари</title>
		<link>http://blog.lushpai.org/archives/132</link>
		<comments>http://blog.lushpai.org/archives/132#comments</comments>
		<pubDate>Tue, 05 Jan 2010 14:52:55 +0000</pubDate>
		<dc:creator>gwinn</dc:creator>
				<category><![CDATA[запись]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[си]]></category>
		<category><![CDATA[чтиво]]></category>

		<guid isPermaLink="false">http://blog.lushpai.org/?p=132</guid>
		<description><![CDATA[Накануне Нового года решил сделать себе небольшой подарок, заказал себе пару книг на «Озоне». Первая:  Никлаус Вирт &#8211; Построение компиляторов. Это как говорится классика, не мешает ознакомится каждому, кого интересует не только быдлокодерство программирование на php. Вторая: Брайан Керниган, Деннис Ритчи &#8211; The C PROGRAMMING LANGUAGE, «Белая Книга», книга которая просто обязана стоять на полке компьютерной [...]]]></description>
			<content:encoded><![CDATA[<p>Накануне Нового года решил сделать себе небольшой подарок, заказал себе пару книг на «<a title="Интернет-магазин &quot;OZON.RU&quot;" href="http://www.ozon.ru/?partner=gwinn" target="_blank">Озоне</a>». Первая:  <a title="OZON.ru - Книги | Построение компиляторов (+ CD-ROM) | Никлаус Вирт | Классика программирования | Купить книги: интернет-магазин / ISBN 978-5-94074-585-3, 0-201-40353-6" href="http://www.ozon.ru/context/detail/id/4803779/?partner=gwinn&amp;from=bar">Никлаус Вирт &#8211; Построение компиляторов</a>. Это как говорится классика, не мешает ознакомится каждому, кого интересует не только <span style="text: decoration;">быдлокодерство</span> программирование на php. Вторая: <a title="OZON.ru - Книги | Язык программирования C | Брайан Керниган, Деннис Ритчи | The C PROGRAMMING LANGUAGE | Купить книги: интернет-магазин / ISBN 978-5-8459-0891-9, 5-8459-0891-4, 0-13-110362-8" href="http://www.ozon.ru/context/detail/id/2480925/?partner=gwinn&amp;from=bar">Брайан Керниган, Деннис Ритчи &#8211; The C PROGRAMMING LANGUAGE</a>, «<strong>Белая Книга»</strong>, книга которая просто обязана стоять на полке компьютерной литературы. В свете того что я решил потихоньку переходить на системное программирование, решил начать именно с нее, ибо по всем отзывам, книга из разряда &laquo;Библия для&#8230;&raquo;. Многие считают, что читать компьютерную литературу в бумажном варианте &#8211; нынче моветон, ну да и пусть их, имхо, нет ничего приятнее, сесть вечерком с чашкой горячего чая/кофе/глинтвейна и на пару-тройку часов углубиться в чтение именно &laquo;книги&raquo;, а электронные варианты использовать как справочник, в который можно нырнуть во время работы&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lushpai.org/archives/132/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>How fanboys see operating systems</title>
		<link>http://blog.lushpai.org/archives/121</link>
		<comments>http://blog.lushpai.org/archives/121#comments</comments>
		<pubDate>Fri, 18 Dec 2009 11:40:57 +0000</pubDate>
		<dc:creator>gwinn</dc:creator>
				<category><![CDATA[запись]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://blog.lushpai.org/?p=121</guid>
		<description><![CDATA[©тырено отсюда]]></description>
			<content:encoded><![CDATA[<div id="attachment_120" class="wp-caption aligncenter" style="width: 598px"><img class="size-full wp-image-120" title="howfanboysseeoperatingsystems" src="http://blog.lushpai.org/wp-content/2009/12/howfanboysseeoperatingsystems.jpg" alt="How fanboys see operating systems" width="588" height="430" /><p class="wp-caption-text">How fanboys see operating systems</p></div>
<p>©тырено <a href="http://www.globalnerdy.com/2009/12/16/how-fanboys-see-operating-systems/">отсюда</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lushpai.org/archives/121/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Радость нового железа. Печаль Wi-Fi.</title>
		<link>http://blog.lushpai.org/archives/117</link>
		<comments>http://blog.lushpai.org/archives/117#comments</comments>
		<pubDate>Mon, 07 Dec 2009 08:55:58 +0000</pubDate>
		<dc:creator>gwinn</dc:creator>
				<category><![CDATA[запись]]></category>
		<category><![CDATA[drivers]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[wi-fi]]></category>

		<guid isPermaLink="false">http://blog.lushpai.org/?p=117</guid>
		<description><![CDATA[Намедни обзавелся новым железом, ибо старенький комп годится лишь только в роли файлопомойки. Комплектацию решил выбрать не топовою, но более чем мощную, чтобы с запасом так сказать: Intel Core 2 Duo E7500 2.93GHz LGA775 Patriot 4Gb DDR3 SDRAM (PC3-10600) 1333Mhz Asus P5P43TD PRO (Intel P43+ICH10R) Socket775 Palit GeForce 9600 Smart TC 1024Mb DDR3 (550/1800MHz/256bit) DVI [...]]]></description>
			<content:encoded><![CDATA[<p>Намедни обзавелся новым железом, ибо старенький комп годится лишь только в роли файлопомойки. Комплектацию решил выбрать не топовою, но более чем мощную, чтобы с запасом так сказать:</p>
<ul>
<li>Intel Core 2 Duo E7500 2.93GHz LGA775</li>
<li>Patriot 4Gb DDR3 SDRAM (PC3-10600) 1333Mhz</li>
<li>Asus P5P43TD PRO (Intel P43+ICH10R) Socket775</li>
<li>Palit GeForce 9600 Smart TC 1024Mb DDR3 (550/1800MHz/256bit) DVI HDMI D-Sub</li>
<li>Western Digital SATA II 500Gb WD5000AAKS 16Mb</li>
<li>D-Link DWA-510 PCI (Wireless)</li>
</ul>
<p>Машинка получилась на заглядение, по сравнению с ноутбуком (Lenovo G530), на котором установлена аналогично сконфигурированная Slackware 13, скорость работы просто космическая. Но не все так гладко как хотелось бы. Подкачал wi-fi.</p>
<p>Девайс  D-Link DWA-510 PCI позиционируется как отлично работающий под управлением Linux, но, увы и ах. Ни официальные драйвера Ralink под чипсет, ни свободный форк, ни набор от D-Link собираться не захотели. После ряда экспериментов пришел к выводу, что данные драйвера просто не совместимы с ядром 2.6.29. После копирования bin файлов из архива в /lib/firmware стала определяться точка доступа, но без скомпилированного модуля ядра цепляться к ней карточка наотрез отказывается. Остается ждать милости производителей и надеятся на то, что в скором времени выйдет новая версия, ну или хотя бы патч.</p>
<p>з.ы. кстати говоря, официальные драйвера от Broadcom все лучше и лучше, радует, что этот производитель повернулся лицом к Linux.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lushpai.org/archives/117/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Кратко о BashStyle-NG.</title>
		<link>http://blog.lushpai.org/archives/102</link>
		<comments>http://blog.lushpai.org/archives/102#comments</comments>
		<pubDate>Sun, 13 Sep 2009 11:33:58 +0000</pubDate>
		<dc:creator>gwinn</dc:creator>
				<category><![CDATA[запись]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[обновление]]></category>

		<guid isPermaLink="false">http://blog.lushpai.org/?p=102</guid>
		<description><![CDATA[Вчера закончил локализацию очередной версии BashStyle-NG. В новой версии немало изменений, доступна тут ( Кристофер пока не обновил информацию, так что напротив моего имени по прежнему гордо красуется индикатор процесса 0% ). P.S. Всех коллег поздравляю с Днем Программиста =)]]></description>
			<content:encoded><![CDATA[<p>Вчера закончил локализацию очередной версии BashStyle-NG. В новой версии немало изменений, доступна <a href="http://www.nanolx.org/newsnanolx/10-bashstyle-ng">тут</a> ( Кристофер пока не обновил информацию, так что напротив моего имени по прежнему гордо красуется индикатор процесса <strong>0%</strong> <img src='http://blog.lushpai.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ).</p>
<p>P.S. Всех коллег поздравляю с Днем Программиста =)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lushpai.org/archives/102/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Perl, Curl, Gmail</title>
		<link>http://blog.lushpai.org/archives/83</link>
		<comments>http://blog.lushpai.org/archives/83#comments</comments>
		<pubDate>Thu, 10 Sep 2009 07:13:07 +0000</pubDate>
		<dc:creator>gwinn</dc:creator>
				<category><![CDATA[запись]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://blog.lushpai.org/?p=83</guid>
		<description><![CDATA[8 утра. Пришел на работу, выпил кофе, покурил. В голове каша, на работу не настроен. Не есть хорошо. Делаем разминку для мозгов опираясь на статью на Habrahabr. Напишем-ка простенький прикладной демон, который будет оповещать нас о новой почте на Gmail. Сначала в рабочей директории создадим папку с конфигом: $ mkdir config Теперь в ней создадим файл [...]]]></description>
			<content:encoded><![CDATA[<p>8 утра. Пришел на работу, выпил кофе, покурил. В голове каша, на работу не настроен. Не есть хорошо. Делаем разминку для мозгов опираясь на статью на <a href="http://habrahabr.ru/blogs/nix/69110/#habracut" target="_blank">Habrahabr</a>. Напишем-ка простенький прикладной демон, который будет оповещать нас о новой почте на Gmail.</p>
<p><span id="more-83"></span>Сначала в рабочей директории создадим папку с конфигом:</p>
<pre style="padding-left: 30px;"><strong>$ mkdir config</strong></pre>
<p>Теперь в ней создадим файл конфига:</p>
<pre style="padding-left: 30px;"><strong>$ nano -w config/user.conf</strong></pre>
<p>Заполним его:</p>
<pre style="padding-left: 30px;"><strong>{
</strong><strong>  'username' =&gt; 'Gmail username',
</strong><strong>  'password' =&gt; 'Gmail password',
  'timeout' =&gt; '300', #количество секунд между запросами </strong><strong>
}</strong></pre>
<p>Добавим немного красивости. Создадим директорию для иконки и возможно еще чего-нибудь еще:</p>
<pre style="padding-left: 30px;"><strong>$ mkdir share
$ mkdir share/icons
$ cd share/icons
$ wget -c http://www.google.com/intl/ru/options/icons/gmail.gif
$ cd ../..</strong></pre>
<p>Теперь сам скрипт:</p>
<pre style="padding-left: 30px;"><strong>$ nano -w gmail</strong></pre>
<p>Пишем:</p>
<pre><strong>01. #!/usr/bin/perl
02. use strict;
03. my $path = `pwd`; $path =~ s/\n//i;
04. my $icon = $path.'/share/icons/gmail.gif';
05. my $config = require $path.'/config/user.conf';
06. getMail();
07. sub getMail() {</strong><strong>
08.    my $recieve = `curl -u $config-&gt;{'username'}:$config-&gt;{'password'} --silent "https://mail.google.com/mail/feed/atom" | grep -c "&lt;entry&gt;"`;
09.    $recieve =~ s/\n//i;</strong><strong>
10.    `notify-send -u low -t 7000 -i $icon "Получено $recieve новых писем"` if $recieve != 0;
11.    sleep($config-&gt;{'timeout'});</strong><strong>
12.    getMail();</strong><strong>
13. }</strong></pre>
<p>Сохраняем и запускаем:</p>
<pre style="padding-left: 30px;"><strong>$ ./gmail &amp;</strong></pre>
<p>Как то вот так&#8230;</p>
<p style="text-align: center;">
<div class="wp-caption aligncenter" style="width: 610px"><img title="Screenshot" src="http://apps.lushpai.org/files/screen1.png" alt="Screenshot" width="600" height="272" /><p class="wp-caption-text">Screenshot</p></div>
<p>Пойду теперь работать&#8230;</p>
<p style="padding-left: 30px;"><strong><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lushpai.org/archives/83/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Домашняя сеть на базе Linux.</title>
		<link>http://blog.lushpai.org/archives/21</link>
		<comments>http://blog.lushpai.org/archives/21#comments</comments>
		<pubDate>Sun, 26 Apr 2009 02:19:59 +0000</pubDate>
		<dc:creator>gwinn</dc:creator>
				<category><![CDATA[запись]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[network]]></category>

		<guid isPermaLink="false">http://lushpai.net/archives/21</guid>
		<description><![CDATA[Некоторое обилие компьютерной техники дома сподвигло на покупку wi-fi роутера для  устройства домашней сети. Что требовалось? Да в общем-то самый минимум: единое файловое хранилище (музыка, фильмы), торрент клиент с общим доступом, сервер для web-разработки (apache, mysql, perl, php, svn), терминальный доступ к операционным системам, установленных под VirtualBox, ну и ряд разных плюшек в довесок. Итак, [...]]]></description>
			<content:encoded><![CDATA[<p>Некоторое обилие компьютерной техники дома сподвигло на покупку wi-fi роутера для  устройства домашней сети. Что требовалось? Да в общем-то самый минимум: единое файловое хранилище (музыка, фильмы), торрент клиент с общим доступом, сервер для web-разработки (apache, mysql, perl, php, svn), терминальный доступ к операционным системам, установленных под VirtualBox, ну и ряд разных плюшек в довесок. Итак, у нас дано:</p>
<ul>
<li><em>Wi-fi роутер D-link </em></li>
<li><em>Старенький компьютер (Slackware 12.2)</em></li>
<li><em>Ноутбук Acer Aspire 5100 (Slackware 12.2)</em></li>
<li><em>Субноутбук Asus eeePC 901 (Xandros)</em></li>
</ul>
<p>Поехали.<span id="more-21"></span></p>
<p><strong>Настройка роутера.</strong><br />
Здесь все просто, цепляемся на один из LAN портов c любой машины, логинимся, меняем пароль администратора и приступаем к настройке. Здесь кому-что нравится. Я указал essid точки доступа, выбрал в качестве метода шифрования WEP, прописал выдачу ip адресов всем машинам (сервер, ноутбук, субноутбук) c привязкой по MAC-адресу (по умолчанию, каждой машине выдается ip из настраиваемого диапазона, в соответствие с тем, в каком порядке они подключаются, и если для ноутбуков это не критично, то для сервера хочется иметь постоянный ip). Ip раздал просто и незатейлево:</p>
<ul>
<li>192.168.0.1 &#8211; роутер</li>
<li>192.168.0.100 &#8211; сервер</li>
<li>192.168.0.101 &#8211; ноутбук LAN</li>
<li>192.168.0.104 &#8211; ноутбук Wireless</li>
<li>192.168.0.103 &#8211; субноутбук LAN</li>
<li>192.168.0.102 &#8211; субноутбук Wireless</li>
</ul>
<p>На этом я остановился.</p>
<p>Настройку Apache, Mysql, PHP, SVN я опущу, мануалов по этому поводу и без того в сети хватает, начну с настройки NFS.</p>
<p><strong>Настройка NFS.</strong><br />
Почему именно NFS? На самом деле все просто. И мой ноутбук, и субноутбук жены и сам сервер работают под управлением Linux, поэтому необходимости в той же Samba просто нет. С другой стороны, использовать не менее удобный sshfs на eeePC не представляется возможным, в силу отсутствия там нормального программного обеспечния (жена наотрез отказалась сносить предустановленный Xsandros, который на удивление беден софтом, не располагает компиляторами как таковыми, а в репозитории Asus&#8217;а такой прекрасной вещи как sshfs не наблюдается).<br />
Первое, что нам потребуется, это определить те ресурсы, которые мы хотим расшарить посредством NFS (хотя правильнее будет сказать, что мы будем экспортировать каталоги, которые разрешим монтировать на других машинах сети), для этого редактируем <code>/etc/exports</code>. Выглядит это приблизительно вот так:</p>
<p><code style="font-size: 90%"><br />
/media/hd0/audio 192.168.0.102(rw,no_subtree_check) 192.168.0.104(rw,no_root_squash,no_subtree_check)<br />
/media/hd2/video 192.168.0.102(rw,no_subtree_check) 192.168.0.104(rw,no_root_squash,no_subtree_check)<br />
/media/hd1/docs  192.168.0.104(rw,no_root_squash,no_subtree_check)<br />
</code></p>
<p>Здесь небольше пояснение. Через пробел, в каждой строке мы указываем директорию для экспорта и машины, на которых позволим монтировать эту директорию+опции, то есть схема такая:</p>
<p><code>/dir ip1(option,option) ip2(option,option,option)</code></p>
<p>Теперь об опциях. Я использовал всего 3:</p>
<ul>
<li>rw &#8211; разрешить чтение/запись (ro &#8211; соответственно, чтолько чтение)</li>
<li>no_subtree_check &#8211; не проводить проверку вложенных директорий</li>
<li>no_root_squash &#8211; отключение ограничения прав root</li>
</ul>
<p>Подробнее об опциях <code>man exports</code>.</p>
<p>После этого достаточно перезапустить демон NFS командой <code>/etc/rc.d/rc.nfsd restart</code>. Что бы он стартовал автоматически при запуске системы, нужно убедиться, что права на <code>/etc/rc.d/rc.nfsd</code> установлены как 0755. Все, настройка серверной части NFS завершена.</p>
<p>На клиентских машинах я не стал мудрить и просто прописал монтирование NFS разделов в <code>/etc/fstab</code>. Делается это просто:</p>
<p><code>server:/myshare  /mountdir   nfs   intr,soft,lock</code></p>
<p>где, intr – позволяет прервать процесс при необходимости, soft – предотвращает от зависания в случае недоступности удалённой машины.<br />
Единственный минус, если на клиентской машине смонтировать сразу несколько NFS разделов, то машинка начинает ощутимо подтормаживать.</p>
<p><strong>Настройка FTP.</strong><br />
Изредка нужно что-нибудь забросить/стянуть с сервера, причем в/из директории, которая остается за рамками экспорта NFS, и иногда удобнее делать это именно по FTP.<br />
В стандартной поставке Slackware есть vsftpd, маленький, шустрый и достаточно безопасный FTP сервер. Его конфигурация предельно проста, так что описывать ее я не стану, все что вам понадобится, это конфигурационный файл <code>vsftpd.conf</code>. Для автозапуска сервера достаточно прописать в <code>/etc/rc.d/rc.local</code> следующую строчку:</p>
<p><code>/usr/sbin/vsftpd &amp;</code></p>
<p><strong>Настройка терминального доступа.</strong><br />
Непосредственный терминальный доступ к серверу мне оказался без необходимости, хватает ssh, если кому интересно, может погуглить на тему xrdp. В большей степени меня интересовал терминальный доступ к виртуальным машинам, которые крутятся на сервере (к вопросу о виртуальных машинах, <a href="http://lushpai.net/archives/18">ранее я писал о локализации приложения</a>, так вот, из-за огромного количества библиотек среды <a href="http://gnome.org">Gnome</a>, которые этому приложению требовались и которые ну никак не хотелось ставить на свой ноутбук, я тестировал приложение на Ubuntu 8.10, которая установлена на одной из виртуальных машин, ну и естественно, при тестировании верстки никак нельзя забывать об Internet Explorer, а эта вещь лучше всего себя чувствует в своей родной среде). При создании виртуальной машины в <a href="http://www.sun.com/software/products/virtualbox/index.jsp">VirtualBox</a>, достаточно включить &laquo;Удаленный дисплей&raquo; и назначить порт для соединения, после чего, на сервере можно запустить виртуальную машину следующим образом:</p>
<blockquote>
<h5><code>$ VBoxVRDP -s <em>имя_виртуальной_машины</em> &amp;</code></h5>
</blockquote>
<p>Я делаю это зайдя на сервер по ssh, а так как данный процесс я запускаю в фоновом режиме, то спокойно закрыв ssh соединение, уже на своем ноутбуке, обращаюсь к запущенной виртуальной машине посредством rdesktop:</p>
<blockquote>
<h5><code>$ rdesktop 192.168.0.100:3389</code></h5>
</blockquote>
<p>Попытка стартовать виртуальные машины при запуске системы на сервере у меня успехом не увенчалась, но думаю решение скоро будет найдено.</p>
<p><strong>Настройка торрент клиента.</strong><br />
В качестве торрент клиента я выбрал <a href="http://www.transmissionbt.com/">Transmission</a>. Клиент довольно простой и незатейливый, обладает самыми необходимыми функциями и стабилен в работе. Помимо всего, предоставляет несколько вариантов работы: через графический интерфейс, через командную строку, и через веб интерфейс. Последний пункт является в нашем случае пожалуй самым удобным. Для того что бы использовать веб интерфейс, необходимо запустить transmission в режиме демона, это делается довольно просто:</p>
<blockquote>
<h5><code>$ transmission-daemon [options]</code></h5>
</blockquote>
<p>Что бы не вводить все опции, я внес изменения в конфигурационный файл и запускаю с одной опцией:</p>
<blockquote>
<h5><code>$ transmission-daemon -g ~/.config/transmission-daemon/</code></h5>
</blockquote>
<p>Основные опции я опущу, отмечу только следующее: для запуска  в режиме демона необходимо скомпилировать transmission с флагом &#8211;with-daemon, а для доступа через веб интерфейс с других машин, нужно в конфигурационном файле указать следующее:</p>
<p><code><br />
"rpc-whitelist": "192.168.0.102,192.168.0.104", (список разрешенных адресов)<br />
"rpc-port": номер порта, (по умолчанию 9091)<br />
"rpc-username": пользователь, (если включена аутентификация)<br />
"rpc-password": пароль, (если включена аутентификация)<br />
</code></p>
<p>А чтобы все это добро стартовало вместе с запуском системы, я внес эту команду в <code>/etc/rc.d/rc.local</code>. Теперь достаточно на клиентской машине в адресной строке браузера набрать 192.168.0.100:9091, и, если ip вашей машины в списке доверенных (если вы конечно вообще активировали список доверенных машин), то после ввода логина/пароля вы попадете в веб интерфейс торрент клиента, который, кстати, на мой взгляд, весьма и весьма удобный.</p>
<p><strong>Настройка MPD &#8211; музыкального демона.</strong><br />
Одна из приятных плюшек. Музыкальный демон <a href="http://ru.wikipedia.org/wiki/Music_Player_Daemon">MPD</a> позволяет создавать и управлять плейлистами на стороне сервера, а так же управлять воспроизведением музыки прямо на сервере. Акустика подключена у меня именно к серверу и порой удобно порулить музыкой которая проигрывается на нем. После установки создаем конфиг <code>/etc/mpd.conf</code> и заполняем его как-то вот так:<br />
<code><br />
music_directory "/media/hd0/audio" #тут будет вся музыка<br />
playlist_directory "/media/hd0/mpd/playlists"<br />
db_file "/media/hd0/mpd/tag_cache"<br />
log_file "/media/hd0/mpd/mpd.log"<br />
error_file "/media/hd0/mpd/errors.log"<br />
pid_file "/media/hd0/mpd/pid"<br />
bind_to_address "192.168.0.100"<br />
port "6600"<br />
</code></p>
<p>Так же нужно создать директорию, которую мы указали в <em>playlist_directory</em>. После чего запускаем <code>/usr/bin/mpd</code>. Я, опять таки, повесил запуск на автозагрузку, то бишь в <code>/etc/rc.d/rc.local</code>.<br />
Оговорюсь сразу, клиентов для этого чуда мысли немало, и тут дело вкуса, кому что подойдет, я лично выбрал <a href="http://gmpc.wikia.com/">gmpc</a>, а жене на субноутбук поставил расширение для Firefox, которое довольно забавно называется &#8211; <a href="http://mpd.wikia.com/wiki/Client:Mpm">Music Player Minion</a>. После установки клиента, скармливаем ему адрес сервера, порт и наслаждаемся <img src='http://blog.lushpai.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Вот вкратце и все. Так как я наверняка буду продолжать эксперименты над сервером, то вероятнее всего вскоре стоит ожидать продолжения этой статьи.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lushpai.org/archives/21/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Broadcom wireless и Slackware 12.2</title>
		<link>http://blog.lushpai.org/archives/20</link>
		<comments>http://blog.lushpai.org/archives/20#comments</comments>
		<pubDate>Wed, 22 Apr 2009 21:38:10 +0000</pubDate>
		<dc:creator>gwinn</dc:creator>
				<category><![CDATA[запись]]></category>
		<category><![CDATA[drivers]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[wi-fi]]></category>

		<guid isPermaLink="false">http://lushpai.net/archives/20</guid>
		<description><![CDATA[Для пользователей линукс, которым довелось стать счастливыми обладателями ноутбуков с встроенным wireless адаптером от Broadcom, не секрет, что в ряде дистрибутивов не все гладко с этим чудом техники. Итак, краткая инструкция. 1. Скачиваем и устанавливаем драйвер $ mkdir /usr/src/hybrid_wl &#38;&#38; cd /usr/src/hybrid_wl $ wget http://www.broadcom.com/docs/linux_sta/hybrid-portsrc-x86_32-v5_10_79_10.tar.gz $ tar -xzf hybrid-portsrc-x86_32-v5_10_79_10.tar.gz $ make -C /usr/src/linux M=`pwd` $ [...]]]></description>
			<content:encoded><![CDATA[<p>Для пользователей линукс, которым довелось стать счастливыми обладателями ноутбуков с встроенным wireless адаптером от Broadcom, не секрет, что в ряде дистрибутивов не все гладко с этим чудом техники. Итак, краткая инструкция.</p>
<p><strong>1. Скачиваем и устанавливаем драйвер</strong></p>
<blockquote>
<h5 style="font-size: 10px">$ mkdir /usr/src/hybrid_wl &amp;&amp; cd /usr/src/hybrid_wl<br />
$ wget http://www.broadcom.com/docs/linux_sta/hybrid-portsrc-x86_32-v5_10_79_10.tar.gz<br />
$ tar -xzf hybrid-portsrc-x86_32-v5_10_79_10.tar.gz<br />
$ make -C /usr/src/linux M=`pwd`<br />
$ cp wl.ko /lib/modules/$(uname -r)/kernel/<br />
$ depmod &amp;&amp; modprobe wl</h5>
</blockquote>
<p><em>информация взята из блога <a href="http://blog.uptimebox.ru/2009/04/broadcom-2629.html">Прикладная дебианавтика</a>,</em> <em>за что автору сего блога мое большое спасибо</em></p>
<p><strong>2. Настройка</strong><br />
По вышеупомянутой ссылке рекомендуется в случае неработоспособности внести в блек лист модуль <em>b43</em>, в Slackware этого делать не нужно, в противном случае интерфейс wlan просто перестанет определяться.<br />
Правка /etc/rc.d/rc.inet1.conf особых результатов не принесла, разбираться с /etc/rc.d/rc.wireless.conf было лениво, поэтому просто прописал в<em> </em>/etc/rc.d/rc.local следующее:</p>
<blockquote>
<h5 style="font-size: 10px">/sbin/iwconfig wlan0 essid <em>имя_точки_доступа</em><br />
sleep1<br />
/sbin/iwconfig wlan0 key <em>wep_ключ</em><br />
sleep1<br />
/sbin/dhcpcd wlan0</h5>
</blockquote>
<p>Тут маленькое замечание, при вызове <em>dhclient wlan0</em> получение ip почему-то не происходит, тогда как <em>dhcpcd wlan0</em> срабатывает на ура. Собственно все, теперь подключение интерфейса и получение ip происходит при загрузке.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lushpai.org/archives/20/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Индикатор батареи для Slackware.</title>
		<link>http://blog.lushpai.org/archives/19</link>
		<comments>http://blog.lushpai.org/archives/19#comments</comments>
		<pubDate>Wed, 22 Apr 2009 21:10:25 +0000</pubDate>
		<dc:creator>gwinn</dc:creator>
				<category><![CDATA[запись]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[slackware]]></category>

		<guid isPermaLink="false">http://lushpai.net/archives/19</guid>
		<description><![CDATA[Намедни озадачился отсутствием индикатора заряда батареи в xfce-4.4.3, который идет в стандартной поставке Slackware 12.2. Плагин, который можно скачать с офф. сайта проекта xfce мне не понравился хотя бы только потому, что тянет за собой ряд зависимостей, захламлять которыми машину как-то не хочется, плюс установить удалось только одну из версий, которая толком и не работала. [...]]]></description>
			<content:encoded><![CDATA[<p>Намедни озадачился отсутствием индикатора заряда батареи в xfce-4.4.3, который идет в стандартной поставке Slackware 12.2. <em><a href="http://goodies.xfce.org/projects/panel-plugins/xfce4-battery-plugin">Плагин</a></em>, который можно скачать с офф. сайта проекта xfce мне не понравился хотя бы только потому, что тянет за собой ряд зависимостей,  захламлять которыми машину как-то не хочется, плюс установить удалось только одну из версий, которая толком и не работала. С другой стороны, на машинке уже установлена <em><a href="http://www.galago-project.org/news/index.php">libnotify</a></em>, которая позволяет выводить всплывающие уведомления, так почему бы не вспользоваться ей. Решение и реализация заняли всего 10 минут.</p>
<p><strong>1. </strong><strong>Определяемся, где у нас лежит информация о батарее.</strong></p>
<address>$ cat /proc/acpi/battery/BAT1/state &#8211; информация о состоянии, отсюда будем брать текущий заряд.</address>
<address>$ cat /proc/acpi/battery/BAT1/info &#8211; общая информация, отсюда будем брать общую емкость, для вычисления процентов.</address>
<address>Возможно у Вас путь будет немного другой, например /proc/acpi/battery/BAT0/state</address>
<p><strong> 2. Пишем скрипт.</strong></p>
<p>Первое что пришло на ум, это perl, хотя уверен, реализовать такое легко и на bash</p>
<blockquote><p>
<code>
<div style="font: 10px Tahoma">1. #!/usr/bin/perl -w<br />
2. my ($file1,$file2,@data,$damage,$current);<br />
3. <em>#читаем файл с информацией о батарее</em><br />
4. open F1, '/proc/acpi/battery/BAT1/info'; while (&lt;F1&gt;) { $file1 .= $_; }; close F1;<br />
5. open F2, '/proc/acpi/battery/BAT1/state'; while (&lt;F2&gt;) { $file2 .= $_; }; close F2;<br />
6. <em>#выбираем интересующие нас данные</em><br />
7. return unless @data[0] = $file1 =~ /design\scapacity\:\s+(\d+)\s\w+/;<br />
8. return unless @data[1] = $file1 =~ /last\sfull\scapacity\:\s+(\d+)\s\w+/;<br />
9. return unless @data[2] = $file2 =~ /remaining\scapacity\:\s+(\d+)\s\w+/;<br />
10. <em>#считаем проценты</em><br />
11. $damage = 100-(@data[1]/40);$damage = sprintf("%.1f",$damage);<br />
12. $current = (@data[2]*100)/@data[1];$current = sprintf("%.1f",$current);<br />
13. <em>#вызываем внешнюю программу для отображения данных</em><br />
14. `notify-send -u critical -t 7000 -i battery "<br />
15. \tТекущий заряд батареи $current%<br />
16. \n\tИзнос батареи $damage%<br />
17. "`</div>
<p></code>
</p></blockquote>
<p>Вот собственно и все, при вызове этой программки получаем нечто подобное:</p>
<p style="text-align: center;"><img class="aligncenter" style="margin-top: 1px; margin-bottom: 1px;" title="всплывающее уведомление" src="http://blog.lushpai.org/wp-content/uploads/1.png" alt="всплывающее уведомление" hspace="1" vspace="1" align="middle" /></p>
<p>При желании можно вызывать скрипт посредством bash скрипта, а если сделать симлинк на этот скрипт в /usr/local/bin, то можно, в добавок, повесить вызов уведомления на хоткей.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lushpai.org/archives/19/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
