Разные, на мой взгляд, интересные замечания, связанные с компьютерами в частности и техникой вообще.

воскресенье, 26 декабря 2010 г.

Весёлый hddtemp.

ВНИМАНИЕ: Диск /dev/sdb не включен в базу данных поддерживаемых приводов.
ВНИМАНИЕ: Но с использованием распространенных параметров он что-то выдает.

Понимаю, что ничего необычного в этом выводе нет, но всё же как-то бросается в глаза фраза "он что-то выдаёт". :) Звучит настораживающе. 

вторник, 21 декабря 2010 г.

Украшаем процесс загрузки в Debian GNU/Linux

Вот тут для welinux.ru описал, как настроил у себя заставку grub2 и usplash на нетбуке под управлением Debian GNU/Linux.
А вот тут можно посмотреть, как оно выглядит.

суббота, 30 октября 2010 г.

Мои пакеты для debian.

Обзавёлся недавно доменом, поднял небольшой сервер и теперь балуюсь со всякими настройками. Пока что там особо ничего интересного нет, но один из планируемых разделов - собранные(или портированные) мной пакеты для debian. Пока что не оформлено в виде отдельного репозитария, в дальнейшем организую, с учётом архтектур и версий дистрибутива(заранее скажу, что поддерживать буду только stable и oldstable для архитектур i386 и x86_64). Пока доступно по адресу http://cppmm.net.ru/debian_packages/
Из планов на будущее, поднять небольшую вику с используемыми мной типичными конфигами и скриптами.
На данный момент скорость почти никакая - всё на стадии разработки, в дальнейшем ситуация улучшится.

четверг, 30 сентября 2010 г.

Автоматическое изменение яркости экрана Asus EeePC 701 4G в Debian

Я обычно работаю на своём нетбуке с яркостью, поднятой на максимум. Но при переходе в режим работы от батареи это даёт очень неслабую нагрузку на неё. Fn-клавиши, конечно, работают, но постоянно повышать/понижать яркость руками лень. Вот я и решил поковырять acpi на предмет автоматизации процесса. В принципе, ничего сложного.
Из man acpid можно узнать принципы работы acpi-скриптов. В /etc/acpi/events/ лежат файлы событий формата
event=событие
action=скрипт, который выполняется на это событие
Чтобы узнать, на какое именно событие реагировать, можно воспользоваться функцией acpi_listen.
В моём случае результат её работы выглядит так при выдёргивании блока питания из розетки:
[root@skynet ~]# acpi_listen
ac_adapter AC0 00000080 00000000
battery BAT0 00000080 00000001
hotkey ATKD 00000051 0000001e
battery BAT0 00000080 00000001
ac_adapter AC0 00000080 00000000
и вот так при подключении:
[root@skynet ~]# acpi_listen
ac_adapter AC0 00000080 00000001
battery BAT0 00000080 00000001
hotkey ATKD 00000050 0000001c
battery BAT0 00000080 00000001
ac_adapter AC0 00000080 00000001
Так как мне надо всего лишь сменить яркость, я не стал заморачиваться на параметры и указал реагировать просто на любые изменения в ac_adapter
Итоговый файл события у меня выглядит так:
[root@skynet ~]# cat /etc/acpi/events/auto_brightness
# /etc/acpi/events/auto_brightness
# Called when ac off and we need to switch brightness down or up when ac on.
#

event=ac_adapter.*
action=/etc/acpi/auto_brightness.sh
Теперь надо написать непосредственно скрипт, меняющий яркость взависимости от того, есть питание или нет. Здесь есть два пути - смотреть напрямую в /proc и парсить то, что там имеется или воспользоваться готовой функцией из acpi-support. Я выбрал второй вариант. Для тех, кому больше по душе первый, текущее положение адаптера отображается в /proc/acpi/ac_adapter/AC0/state

Я же использую функцию getState() из /usr/share/acpi-support/power-funcs. Она при вызове передаёт переменной STATE либо значение AC, либо BATTERY в зависимости от режима работы нетбука.
Осталось только найти способ менять яркость. Тут тоже всё просто. Пробежался быстро по тем же acpi'шным скриптам и выяснил, что уровень яркость указывается в /sys/class/backlight/eeepc/brightness. От 1 до 15, где 15 - максимально яркое, 1 соответсвенно тусклое.
Итоговый скрипт получился такой:
[root@skynet ~]# cat /etc/acpi/auto_brightness.sh
#!/bin/bash

. /usr/share/acpi-support/power-funcs

getState

if [ "$STATE" = "AC" ]
then
    echo 15 > /sys/class/backlight/eeepc/brightness
else
    echo 1 > /sys/class/backlight/eeepc/brightness
fi
Всё. Рестартим acpid и радумаемся.

воскресенье, 29 августа 2010 г.

Userfrendly OS

Я тут рассказывал, как ставил Fedora 13 на ноут для тестов. Протестил, всё отлично работает. но хозяевам нужна была на этом компе Vista, которая шла вместе с ноутом. Вот, небольшая оценка времени, затраченного на обустройстов первой и второй системы.
Тестовая площадка - ноутбук MSI PR200
Обновления и установка софта зависят от скорости интернета - 256 кбит/с
--
Fedora GNU/Linux 13
Время установки - 30 минут(получаем вполне юзабельную систему, в которой есть всё, кроме офиса и проигрывания mp3).
Настройка сети(wi-fi) - 5 минут.
Настройка дополнительных репозитариев - 10 минут.
Полное обновление системы - 40 минут.
Установка нужного софта(проприетарные кодеки, skype, OO.o, разные программы для тестирования железа) - 10 минут.
Настройка панелей, рюшечек, компиза и прочего - 20 минут.
Итого - 1 час 55 минут до полностью рабочей системы.
--
Windows Vista Home Basic
Время установки - 1 час(получаем систему, в которой не работает ничего кроме блокнота с разрешением 800х600, без звука, без сети).
Установка драйверов - 30 минут на скачивание на другом компе(сеть не поднялась из коробки), 30 минут на установку(с учётом перезагрузок). Камера не завелась, bluetooth не завёлся, звук не завёлся. Ещё +30 минут на танцы с бубном.
Настройка сети(wi-fi) - 15 минут(оказалось не так просто найти, где же прописывать сети со скрытым SSID и вспоминать, какое же шифрование TKIP или AES - все три мои linux-машины, это автоматом определяют).
Базовое обновление(только обновления безопасности и важные багфиксы) - 3 часа(причём после того, как всё скачалось и устанавливается - ноут неюзабелен).
Установка нужного софта(кодеки, firefox, skype, OO.o, разная мелочь) - 30 минут(разумеется установка не автоматическая, надо сидеть и периодически нажимать "Далее").
Итого - 6 часов 15 минут.
--
Выводы делайте сами.

пятница, 13 августа 2010 г.

Пара слов о nginx.

После нескольких обсуждений и разговоров написал небольшую ознакомительную статью о nginx для welinux.ru.

пятница, 4 июня 2010 г.

Настройка атоматического выбора wi-fi сети в Debian.

Есть у меня одна замечательная вещь - Asus EeePC. И, так как тут имеется wi-fi карта, не пользоваться услугами беспроводной связи просто грех. Но хорошо, когда сеть одна. А что, если их много и надо в одном месте включать одну, в другом другую? И при этом всякие графические монструозные комбайны ставить не хочется. Как быть? Настроить имеющиеся в Debian'е инструменты работы с сетью. Это на самом деле намного проще, чем может показаться на первый взгляд.
Управление сетевыми интерфейсами осуществляется в Debian'е через файл /etc/network/interfaces и скрипт /etc/init.d/networking. Для нас важен файл настроек. Если заглянуть в его man, то можно найти замечательный параметр mapping. Эта опция даёт возможность создавать разные логические интерфейсы на одном физическом и автоматически выбирать нужный по определённым параметрам. Проще говоря - что-то типа профилей. Для выбора надо набросать небольшой скриптик и прописать условия.
Итак, к делу.
Условие определения логического интерфейса могут быть любые. Мне лично удобно по mac-адресу(логичнее, конечно, кажется по SSID, но мне этот вариант не подходит, потому что на всех, настроенных мной точках, я выставляю опцию SSID Broadcast в off, поэтому увидеть его стандартными средствами, не подключившись проблематично, но если у вас не так, то разумеется определение профиля по SSID более правильный выбор). Логика работы проста - при поднятии интерфейса, система сканирует сеть, смотрит, какая из знакомых ей точек доступна и подключается к ней. Основную работу за нас будет делать небольшой скрипт. Примеры таких скриптов можно глянуть в /usr/share/doc/ifupdown/examples/ . Там же лежат примеры настройки файла interfaces. У меня скрипт получился такой:

#!/bin/sh
#
# Auto wi-fi choise.

iface="$1"
ifconfig=$(which ifconfig)
iwlist=$(which iwlist)
which=""

# Проверка на случай, если wi-fi карта выключена.
if [ ! "$(grep $iface /proc/net/dev)" ]; then exit 1; fi

# Без этого не получится просканировать сеть.
$ifconfig $iface up

# Собственно выбор.
while read mac scheme; do
    if [ "$which" ]; then continue; fi
    if [ "$($iwlist $iface ap | grep $mac)" ]; then which="$scheme"; fi
done

# Передача выбора системным скриптам и выход.
if [ "$which" ]; then echo $which; exit 0; fi
exit 1

Как можно заметить, несмотря на простоту, в скрипте есть несколько особенностей. Первая - ему по умолчанию в качестве первого аргумента передаётся имя интерфейса. Вторая - он читает построчно заданные в настройках параметры. Третья - он должен вернуть выбранное логическое имя интерфейса и код выхода(0 - всё хорошо, работаем, 1 - ошибка, выходим). Если первое и последнее - понятно, то второе требует небольшого пояснения. Скрипту передаются параметры, заданные в interfaces. Последним параметром обязательно должно быть имя логического интерфейса. И всё, что делает скрипт, в конечном счёте направлено на то, чтобы это имя вернуть на stdout. Как видно, в моём случае я сканирую воздух, и, если попадается знакомый mac, тут же выбираю соответствующее ему имя. Если знакомых нет, разумеется подключение прерывается. Маки и имена указаны в interfaces. Для тех, кто будет использовать выборку по SSID, надо будет сделать что-то типа iwlist $iface scanning | grep $ssid.
И наконец, запись в interfaces:

mapping ath0
    script /usr/local/sbin/awfc.sh
    map 11:22:33:44:55:66    ath0-home
    map AA:BB:CC:DD:EE:FF    ath0-tmp

allow-hotplug ath0
# Домашняя сетка
iface ath0-home inet dhcp
    wireless-essid        HomeNet
    wpa-ssid        HomeNet
    wpa-psk            *********
# моё любимое кафе с wi-fi
iface ath0-tmp inet dhcp
    wireless-essid        TMPNet

Я для примера показал две точки, но их на самом деле может быть сколько угодно. Главное соблюдать формат записи - map mac-адрес логическое_имя. Разумеется, параметры для каждой из точек могут совершенно любыми.
И последний штрих. Дело в том, что по умолчанию при загрузке /etc/init.d/networking стартует достаточно рано относительно других сервисов. Оно понятное дело нужно, когда у меня сервер со всякими sshd, apache и прочими радостями. Но на нетбуке это совершенно лишнее. А из-за такой "спешки" не успевают подгрузиться все нужные для работы выбирающего скрипта части. А именно, не инициализировался до конца интерфейс, поэтому команда iwlist не возвращала ожидаемого результата. Я решил это просто - двумя командами перенёс загрузку сети с ранних этапов на стандартные, вместе с основными частями системы:

# update-rc.d -f networking remove
# update-rc.d networking defaults

Всё. При загрузке, если я нахожусь в зоне действия знакомой сети, нетбук автоматом к ней подключится. Если я не выключал нетбук и перешёл от одной знакомой сети к другой, достаточно рестартануть сеть и всё будет отлично.
Именно за такие простые и удобные вещи я и люблю Linux вообще и Debian в частности.

четверг, 18 марта 2010 г.

Дискриминация по национальному признаку или баним страны.

Так получилось, что понадобилось прикрыть доступ к серверу из некоторых стран. Понимаю, что кровавая гебня и всё такое, но задача есть, надо сделать.
Вот здесь находим архивчик с базой IP-адресов и их национальной принадлежностью. Далее за нас работает небольшой скрипт:
#!/bin/bash
#
TMPDIR=/tmp/geoiptban
IP_BBASE=$TMPDIR/bbase.csv
IP_EBASE=$TMPDIR/ebase.csv
DB_ZIP=$TMPDIR
PERL=/usr/bin/perl
FILE_BCOUNTRY=$1
COUNTRY_DB_URL=http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
mkdir -p $TMPDIR
# Стягиваем и распаковываем базу айпишников.
wget -q -O $DB_ZIP $COUNTRY_DB_URL
unzip -p $DB_ZIP > $IP_BBASE
# Убираем лишние символы из базы, для простоты обработки.
if [ -e "$IP_BBASE" ]
then
        cp $IP_BBASE $IP_EBASE
        $PERL -pi -e 's/"//g' $IP_EBASE
else
        echo "Source ip-base-file not found."
        exit 0;
fi
# Обработка базы. Форматируем базу сперва в вид диапазонов ip-адресов, а потом в список подсетей.
# Получившиеся подсети скармливаем iptables'у.
if [ -e "$FILE_BCOUNTRY" ]
then
        for country in $(cat ${FILE_BCOUNTRY})
        do
                grep $country $IP_EBASE | awk -F "," '{print $1," - ",$2}' > $TMPDIR/$country.il
                for ((i=1;i<=$(wc -l ${TMPDIR}/${country}.il | awk '{print $1}');i++))
                do
                        ipcalc $(head -n ${i} ${TMPDIR}/${country}.il | tail -n 1) | grep -v deaggregate >> $TMPDIR/$country.nl
                done
        done
        for country_network_list in $(ls ${TMPDIR} | grep nl)
        do
                for ((i=1;i<=$(wc -l ${TMPDIR}/$country_network_list | awk '{print $1}');i++))
                do
                        iptables -t filter -A INPUT -s $(head -n ${i} ${TMPDIR}/$country_network_list | tail -n 1) -j DROP
                done
        done
else
        echo "List of blocked countries not found."
        exit 0;
fi
rm -rf $TMPDIR
Для определения списка стран, которые надо забанить используется файл, в котором просто перечисляются их коды:
[root@gateway ~]# cat country_list
RU US GB
Запускается скрипт очень просто:

[root@gateway ~]# ./geoiptban.sh country_list

пятница, 29 января 2010 г.

Gentoo

Наконец собрался написать про Gentoo.
Давно хотел попробовать этото дистрибутив в работе. Я его, конечно, пробовал до этого, но так, мельком. Пару раз ставил, пару раз настраивал, но со временем забрасывал. Потом так получилось, что пришлось повозиться с уже установленной системой, которую надо было довести до ума. Как это всегда бывает, система попалась полумёртвая и восстанавливать её приходилось долго и непросто. Но в процессе этого восстановления я открыл для себя некоторые довольно интересные вещи. Тогда-то и появилась мысль взяться за этот дистрибутив серьёзно. Порывшись в куче старого железа был извлечён винт на сосрок гигов, закуплено кофе и запланированы пару спокойных ночей. В итоге - ура. На компе в качестве второй системы(рядом с родным Debian Lenny) стоит Gentoo. Но как-то всё тоже выходило неудачно. То иксы криво стартовали, то софт при компиляции ошибки выдавал, то ещё какие-нибудь косяки и никак не хватало времени довести до ума. Но за несколько дней до Нового Года, наконец, время позволило взяться за Gentoo серьёзно...
И вот, в новый 2010 год я вошёл, имея на компе стабильную gentoo с kde4.
Как у меня всегда бывает, вышло несовсем гладко. То забывал нужный драйвер в ядро вкомпилить, то USE-флаги криво выставлял, но так или иначе, сейчас могу сказать честно: новой системой я доволен.
А теперь несколько подробностей.
Ну, во-первых:
[cppmm@damned ~]$ uname -a
Linux damned 2.6.31-gentoo-r6-cppmm-v7 #1 SMP Fri Jan 29 07:25:45 NOVT 2010 x86_64 AMD Athlon(tm) 64 X2 Dual Core Processor 5600+ AuthenticAMD GNU/Linux

Да, как можно заметить, нормальное ядро удалось собрать только с седьмой попытки. И тут дело исключительно в моей невнимательности. Собственно, последняя пересборка понадобилась потому что неправильно были выставлены опции кодировок для файловой система FAT, из-за чего флешки либо монтировались криво, либо вообще отказывались подключаться.
Впечатления от системы хорошие. Когда говорят, что gentoo работает быстро - можете смело верить. Это действительно так. Например, даже со стандартным init'ом загрузка до рабочего стола проходит буквально за несколько секунд. При этом, я решил попробовать не старую добрую крысу(xfce4), а kde. И если раньше у меня было впечатление, что кеды - это что-то монструзно-торзмонутое, то тут всё совсем не так. Весь софт прямо сказать летает. Кроме всего прочего, раз уж стоят кеды, я  решил и софт использовать исключительно qt'шный.
Плеер: По-умолчанию в kde4 идёт JuK. Штука до безобразия простая, малофункциональная(даже по моим меркам). Немного повспоминав мандривовскую молодость было принято решение поставить amarok... Я даже не ожидал, насколько он стал хорош! Ну, старых проблем с кодировками тегов у меня быть не могло - все теги давно сконвертированы в utf. А вот интерфейс порадовал. Теперь он действительно удобен. Один раз задав пути к библиотеке, я забыл про мучительный поиск нужной песни и добавление её руками. Так же очень порадовала фишка с прикрученной википедией. Да-да. Когда я запускаю песню, amarok автоматом идёт в инет на википедию, и стягивает описание исполнителя. Ну и кроме этого он ещё откуда-то вытягивает текст песни и обложку. Если с описанием - это так, свистелки, то текст песни оказался как нельзя кстати. Очень удобно. Выглядит это всё примерно так:
 
 С видео-проигрывателем получилось практически так же. Дефолтный dragonplayer как-то неинтересн. Но память подсказала, что был когда-то неплохой kaffeine. Он тоже стал удобнее и функциональнее. Кушает всё, работает с dvd-меню и вообще в принципе устраивает во всём. Один раз, правда, он отказался играть хороший фильм(точнее, фильм играл, а вот звука не было). Поставил SMPlayer(фронтенд к mplayer), но тот тоже отказался. Попытка воспроизвести этот же фильм на другой системе, а потом и на другом компе показала, что проблема не в плеерах, а в самом фильме. :)
Теперь о интернет-приложениях. Вот что, по-моему, осталось таким же, как и много лет назад, так это konqueror. Как был кривоват, так и остался. :)
Пришлось компилять firefox. Всё бы хорошо, но gtk-ашная лиса смотрится в qt-окружении убого. Но, это лечится. Нужно сперва поставить x11-themes/gtk-engines-qtcurve, который несколько облагораживает гткшный софт. А для совсем эстетов, у лисы есть замечательный плагин Personas. Там есть множество разнообразных тем и украшений. И теперь моя лиса выглядит так:
 
 В качестве jabber-клиента был оставлен старый-добрый psi. А точнее, его модификация psi+(кстати, вот тут вот и проявляется одна из фишек гентушных портажей - при помощи простейших манипуляций, я ставлю софт нужной мне версии с нужным мне функционалом, не заморачиваясь сборкой пакета).
Единственное, что пока не радует, это irc-клиент. Привычный xchat как-то тут не понравился, но я решил попробовать что-нибудь kde'шное, а именно kvirc. Не, клиент очень неплохой. Но настроек у него.... Тьма! До сих пор до конца ещё не донастроил. :) Но работать можно.
Остальное всё использую родное kde'шное, не особо заморачиваясь.
На обслуживание системы много времени не уходит. Я это, в принципе, и раньше знал, но повторюсь для особо упёртых. Если один раз всё настроить, в дальнейшем обновления можно делать на автомате. Главное не допускать глупых ошибок. К примеру, если хочется изменить USE-флаги у какого-либо приложение, не стоит это делать на лету. Для этого есть специальный файлик в /et/portage/. Там же, кстати, можно очень удобно маскировать ненужные пакеты, управлять зависимостями и вообще делать со своей системой всё, что душе угодно.
В дальнейших планах разобраться с написанием своих ebuild'ов для сборки собственных пакетов(например, недавно вышел vacuum im 1.0.0 - очень хочется попробовать, но в репах пока его нет). 

Разумеется, этот переход на домашнем десктопе совершенно не значит, что я резко переметнулся из стана Debian'щиков в gentoo'шники. Нет. На нетбуке всё тот же lenny. Ну и на рабочем компе ничего не изменится в ближайшее время. А то, что лучшей системой для серверов является debian меня вряд ли кто-нибудь когда-нибудь переубедит. Всё это просто значит, что linux'ы бывают разные и многие из них хороши. А если есть желание разобраться и какие-то базовые знания, то пойдёт любой дистрибутив(за исключением всяких ubuntu :)).
И на последок общий вид рабочего стола: