среда, 10 февраля 2010 г.

Multicast forward/routing Linux, OpenBSD (iptv).

/*

в эпоху модемов с поддержкой V.22 (1,200 бит/с) даже думать о потоковом контенте было страшно. времена меняются и в медвежьи берлоги вламываются результаты "электрификации всей стганы" с более-менее приемлимыми тарифными планами. при этом вполне оправдано появление устройств из категории "домашние роутеры", принимающих канал доступа в internet/локалку от провайдера и раздающих ресурсы грубо говоря "на всю квартиру". зачастую эту функцию берут на себя старенькие компы уровня Pentium-Pentium III под управлением Linux/OpenBSD. при этом зачастую Провайдер даёт выход в сеть internet при помощи vpn/dsl туннеля/подключения, а мультикаст (как например услуга iptv - потокового вещания видео) "крутится" в сегменте "локальной" сети. ниже постараюсь описать принципы настройки роутера для работы в данных условиях. материал не претендует на исчерпывающее изложение и какую-либо оригинальность. здесь не будет готовых рецептов - только общие рекомендации. если Вам понравилось или есть чем дополнить - милости прошу оставить комментарий.


***********************************************

намеренно оставил за рамками роутеры на FreeBSD, так как imho (хотел бы ошибаться, но практика, Господа...) эта система не содержит механизмов, позволяющих нормально решать вопросы динамического роутинга/форварда мультикаста одновременно с NAT-ом, о чём честно предупреждает handbook:

31.2.8 Multicast Routing

FreeBSD supports both multicast applications and multicast routing natively. Multicast applications do not require any special configuration of FreeBSD; applications will generally run out of the box. Multicast routing requires that support be compiled into the kernel:

options MROUTING

In addition, the multicast routing daemon, mrouted(8) must be configured to set up tunnels and DVMRP via /etc/mrouted.conf. More details on multicast configuration may be found in the manual page for mrouted(8).

Note: As of FreeBSD 7.0 the mrouted(8) multicast routing daemon has been removed from the base system. It implements the DVMRP multicast routing protocol, which has largely been replaced by pim(4) in many multicast installations. The related map-mbone(8) and mrinfo(8) utilities have also been removed. These programs are now available in the FreeBSD Ports Collection as net/mrouted.

также стоит помнить, что сам по себе демон "mrouted" морально устарел (Ben, it's dead! RIP...) и не рекомендован к использованию при наличии альтернатив.

***********************************************


OpenBSD


тут всё очень просто и понятно. сам механизм прекрасно документирован:

OpenBSD Multicasting

"dvmrpd" работает практически без нареканий и не вызывает трудностей при конфигурировании. также доступен и "старый" mrouted, если вдруг по каким-то причинам Вас не устроит dvmrpd. что-то добавить к замечательно изложенному материалу желания не возникает.


Linux


именно тот случай, когда обилие "оболочек"/(сиречь дистрибутивов) плодит анархию. начну с кратенького обзора специальных девайсов, разработанных в качестве роутеров для домашней сети.

вне зависимости от "железа" основную роль тут играют "прошивки". они могут быть закрытыми ("фирменными", что предустановлены на заводе-изготовителе) или открытыми (как dd-wrt, прошивки Олега для ASUS-ов и т.п.). с задачей форварда/роутинга мультикаста "из коробки" на отлично справляются лишь прошивки от Олега (вне зависимости от наличия vpn соединения). по крайней мере до сего дня dd-wrt содержали баг в ядре и в исходниках igmpproxy, препятствующий нормальному функционированию. подробности.

рассмотрим пример конфигурации роутера:

eth0 - интерфейс к локальной сети Провайдера (пусть будет сеть 10.0.0.0/8), обозначим как $IF_IN
ppp0 - vpn туннель с выходом в internet, обозначим как $IF_VPN
eth1 - интерфейс к "домашней" сети (адреса в пределах 192.168.1.0/24), обозначим как $IF_OUT

для "домашних роутеров" схема конфига осложняется тем, что в качестве eth1 (интерфейса к "домашней" подсети) выступает (как правило) бридж (br0), объединяющий Ethernet и Wireless интерфейсы (ессно при наличии этого самого wifi).

теперь немного чтива для любознательных:

общее описание мультикаста (English Wiki)

1. Multicast over TCP/IP HOWTO - старый, но добрый хау-ту.

2. Multicast Routing Code in the Linux Kernel - тоже не Откровение, но даёт понятие о (как минимум) двух стоящих внимания "хомячка" переменных:

/proc/net/ip_mr_vif - список интерфейсов, вовлечённых в обмен мультикаст пакетами
/proc/net/ip_mr_cache - текущий статус MFC (Multicast Forwarding Cache - кэш мультикаст пакетов)

3. Configuring Linux For Network Multicast - начальные сведения о конфигурации Linux ядра для роутинга мультикаста.

собсно с конфигурирования ядра и начнём. в обязательном порядке нам нужны следующие опции:

CONFIG_IP_ADVANCED_ROUTER=y (или же CONFIG_IP_ROUTER=y)
CONFIG_IP_MROUTE=y
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
CONFIG_IP_MULTICAST=y
CONFIG_NET_IPIP=y

кроме того может возникнуть необходимость проконтролировать (cat имя_файла) и/или изменить (echo $ЗНАЧЕНИЕ > имя_файла) некоторые дополнительные параметры:

разрешаем форвард ipv4 пакетов:

$ cat /proc/sys/net/ipv4/conf/default/forwarding
1

разрешаем форвард мультикаста:

$ cat /proc/sys/net/ipv4/conf/[ $IF_IN | $IF_OUT ]/mc_forwarding
1

отключаем reverse path filtering:

$ cat /proc/sys/net/ipv4/conf/$IF_IN/rp_filter
0

для ядер 2.6.* может потребоваться принудительное указание "типа"/версии igmp пакетов (варианты значений - 0, 1 или 2, описание есть в исходниках ядра - /usr/src/linux/net/ipv4/igmp.c):

$ cat /proc/sys/net/ipv4/conf/[ $IF_IN | $IF_OUT ]/force_igmp_version
{0,1,2}


с ядром более-менее разобрались, остался вопрос к прикладному софту. потребуется:

iptables
igmpproxy
пакеты "net-tools" (route, traceroute) и "iproute2" (ip) для управления маршрутами/(роутинг)
tcpdump/wireshark для мониторинга


в роли igmpproxy может выступить pimd или проприетарный gated (эт если из пушки да по воробьям засадить...). есть ещё smcroute, но оно умеет только "статику" (не наш метод). ещё на просторах сети где-то бродят сборки "родного" древнего многострадального mrouted-а с патчами для Linux. не будем ворошить труп. RIP.

для начала на роутере очищаем все цепочки iptables (flush) и рисуем что-то типа:

-A INPUT -d 224.0.0.0/240.0.0.0 -p 2 -j ACCEPT # некоторые опускают ключ -d 224.0.0.0/240.0.0.0 и разрешают весь входящий igmp трафик
-A INPUT -d 224.0.0.0/240.0.0.0 -p udp -m udp ! --dport 1900 -j ACCEPT
-A FORWARD -d 224.0.0.0/240.0.0.0 -p udp -j ACCEPT

также можно включить некоторую страховку от сволочной и шкурной натуры Провайдера, принудительно увеличив TTL мультикаст-потока на одну единичку при прохождении нашего роутера (а то особо умные принудительно на мультикаст ставят TTL == 1, чтобы потешить ЧСВ, не иначе):

-t mangle -A PREROUTING -d 224.0.0.0/240.0.0.0 -p udp -j TTL --ttl-inc 1


после чего делаем тупой конфигурационный файл (читаем man!) для igmpproxy (вместо значений переменных $IF_IN/$IF_OUT подставить имена соответствующих интерфейсов ессно):

$ cat /etc/igmpproxy.conf

# good things to begin with :)
quickleave

phyint $IF_IN upstream
altnet 0.0.0.0/0

phyint $IF_OUT downstream


и запускаем демона (от рута):

# igmpproxy -c /etc/igmpproxy.conf


для того, чтобы тело взлетело осталось лишь правильно настроить роутинг/(маршрутизацию). здесь надо помнить, что источники выдачи сигнала могут присутствовать помимо указанных в плейлисте того же iptv. т.е. кроме собсно мультикаста (net 224.0.0.0/240.0.0.0 ) источник может иметь "левые" ip-ы типа 88.210.40.0/24, 77.94.170.0/24 и т.п.. это легко отслеживается tcpdump-ом/wireshark-ом если непосредственно на роутере стартануть VLC или MPlayer, собранный с поддержкой live555 и получить "картинку" видео. роутинг к этим "левым" адресам должен идти через $IF_IN, не затрагивая $IF_VPN! объясняться подобный "казус" может довольно просто. Провайдер зачастую делает пиринг с теми, кто держит нехилые "фермы", раздающие сам трафик, что и приводит к появлению в локальной сети (Провайдера) подобных "левых" адресов. или же "фермам" присваивают адреса "от фонаря". другими словами адрес, что прописан в плейлисте - это адрес для JOIN/LEAVE ("подписки" и "выписки" из мультикаст-группы), а сам источник udp потока может приползти откуда угодно.

напоследок могу лишь посоветовать посматривать на статистику $IF_IN при пользовании igmpproxy. известно, что [далеко] не всегда "отписка" проходит корректно и это вполне может забить канал рано или поздно (при активной смене каналов вы быстро заметите если что-то пойдёт не так...).

удачи.

*/

пятница, 5 февраля 2010 г.

SuSE: иного нет у нас пути...

/*
-М-м-м-у-у-у-у!!!
-Шо за "му"?! Опять нажрался, свинота?!

начну с элементарного - русификации консоли (tty/mingetty) в современных SLE/SuSE. где-то с версии SuSE-9.1 "проблема" как-бы исчезла полностью благодаря поддержке UTF-8, но как и что делать вроде никто в отдельную заметку не выносил. по поводу русификации ранних версий есть отличная статейка:

Русификация SuSE 9

но увы и ах - "бойянЪ". задача раскладывается на три составляющие (при условии, что Ваша "локаль" уже задана в /etc/sysconfig/language как RC_LANG="en_US.UTF-8" или RC_LANG="ru_RU.UTF-8"):

1) выбрать "правильный" шрифт (содержащий UTF-8 символы кириллицы как минимум).

чешем в "/usr/share/kbd/consolefonts/" и выбираем тот, который нравится больше всего. после чего вносим его в "/etc/sysconfig/console" как шрифт по умолчанию (пример):

CONSOLE_FONT="UniCyr_8x16.psf.gz"
CONSOLE_MAGIC="(K"

2) задаём UTF-8 кодировку терминала для вывода символов, отличных от ASCII, в "/etc/sysconfig/console":

CONSOLE_ENCODING="UTF-8"

3) выбираем подходящую "раскладку" и "переключалку" (доступные варианты можно просмотреть в /usr/share/kbd/keymaps/i386/qwerty/) и вносим её в "/etc/sysconfig/keyboard" (пример с переключением по правому ALT-у):

KEYTABLE="ru1_win-utf.map.gz"

кроме этого тут же можно установить "шорткат" для переключения между активными терминалами (например по кнопке "Win"):

COMPOSETABLE="clear winkeys"

завершающий штрих - рестарт сервиса "kbd":

/sbin/service kbd restart

после чего можно смело переключиться в "чистую" консоль (Ctl+Alt+F1) и оценить результат.
mission сукесфули комплитед.



Девушки бывают разные:
чёрные, белые, красные...

SuSE/SLE довольно специфичный дистрибутив, ибо содержит огромное количество "вкусностей", недоступных остальным "из коробки". это требует от пользователя определённого знания системы и вырианты решений тех или иных задач могут существенно отличаться (в этом-то и проявляется специфика). где-то эдак годика с 2005-го SuSE включила в базовую поставку системы свою собственную "надстройку" (называйте как хотите - "морда", гуй и т.п.) для управления пакетным фильтром iptables - SuSEfirewall, что до сих пор, imho, остаётся лучшим решением по управлению трафиком.

вся настройка идёт путём правки единственного файла:

$ sudo vim /etc/sysconfig/SuSEfirewall2

файл отлично документирован комментариями и поверхностного знания английского языка будет вполне достаточно. для применения новых значений используем связку:

$ sudo /sbin/SuSEfirewall2 stop
$ sudo /sbin/SuSEfirewall2 start

анализ эффективных цепочек правил легче всего делать при помощи:

$ sudo /usr/sbin/iptables-save | less

"черновую" настройку можно набросать в "гуях" YAST-а:

$ gksu yast2 -> Security and Users -> Firewall

после чего настоятельно рекомендую ввести изменения в силу и в дальнейшем редактировать "/etc/sysconfig/SuSEfirewall2" вручную. особая ценность решения от SuSE в том, что оно не накладывает никаких ограничений "творческой мысли" при редактировании цепочек. если Вы не осилили предлагаемые готовые "пресеты", то никто не запрещает указать:

FW_CUSTOMRULES="/etc/sysconfig/scripts/SuSEfirewall2-custom"

и подгрузить из файла "SuSEfirewall2-custom" свои собственные правила. причём ситуаций, которые требуют подобного вмешательства - масса. в указанном выше файле содержатся примеры с кратким описанием ситуаций для их применения.

основным преимуществом использования SuSEfirewall можно считать чётко структурированный подход к работе цепочек фильтрации. по сути это одно большое наглядное практическое пособие о том, как Правильно работать с iptables. весь трафик сперва делится на "зоны" - DMZ, "внешний"/external, "внутренний"/internal, lo - с возможностью определить дополнительные при желании - wlan и т.п.. после чего для каждой "зоны" создаётся отдельная "цепочка" эффективных правил, фильтрующая весь трафик. также идёт прямое указание на загрузку необходимых Вам модулей ядра (пример):

FW_LOAD_MODULES="nf_conntrack_netbios_ns xt_conntrack xt_owner \
xt_iprange xt_CONNMARK xt_limit xt_TCPMSS xt_state\
nf_conntrack_ftp nf_nat_ftp"

в результате мы получаем красивую и логичную схему действующих правил, которая ещё и минимизирует издержки при обработке трафика благодаря stateful природе пакетного фильтра. суть stateful пожалуй можно перевести как установление "статуса" активного соединения и разбору дальнейших пакетов на его основе. т.е. если какое-то соединение признано валидным/состоявшимся, то оно получает статус ESTABLISHED/(установлено), после чего весь соответствующий ему трафик обрабатывается на основе этого статуса, "минуя" цепочки фильтрации. рассмотрим простой пример, наглядно демонстрирующий преимущества решений SuSE:

> sudo iptables-save -t raw

*raw
:PREROUTING ACCEPT [38828:15020523]
:OUTPUT ACCEPT [36327:4135365]
-A PREROUTING -i lo -j NOTRACK
-A OUTPUT -o lo -j NOTRACK
COMMIT

(параметр FW_LO_NOTRACK="yes")

вроде бы "мелочь" - вывод всего трафика lo из под "опёки" цепочек фильтрации, а на загруженных машинах это ой как приятно. или:

-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

здесь мы "синхронизируем" активное соединение с MSS (Maximum Segment Size in TCP), тем самым предотвращая пересылку слишком больших пакетов, требующих насильственного "деления".

рассмотрим далее упрощённый вариант того, что у нас творится в основных "цепочках" таблицы filter (как пример, без наворотов типа DMZ или специальных "зон" - ситуация "из коробки" так сказать...):

> sudo iptables-save -t filter | less

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:forward_ext - [0:0]
:forward_int - [0:0]
:input_ext - [0:0]
:input_int - [0:0]
:reject_func - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p icmp -m state --state RELATED -j ACCEPT
-A INPUT -i tap0 -j input_int
-A INPUT -i eth1 -j input_ext
-A INPUT -i wlan1 -j input_ext
-A INPUT -i wmaster0 -j input_ext
-A INPUT -j input_ext
-A INPUT -m limit --limit 3/min -j LOG --log-prefix "SFW2-IN-ILL-TARGET " --log-tcp-options --log-ip-options
-A INPUT -j DROP
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -i tap0 -j forward_int
-A FORWARD -i eth1 -j forward_ext
-A FORWARD -i wlan1 -j forward_ext
-A FORWARD -i wmaster0 -j forward_ext
-A FORWARD -m limit --limit 3/min -j LOG --log-prefix "SFW2-FWD-ILL-ROUTING " --log-tcp-options --log-ip-options
-A FORWARD -j DROP
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m limit --limit 3/min -j LOG --log-prefix "SFW2-OUT-ERROR " --log-tcp-options --log-ip-options
*********************
**** прочее обрезано
*********************

нет никакого бардака. определены пять "функции" (отдельные цепочки правил для обработки трафика):

:forward_ext - [0:0]
:forward_int - [0:0]
:input_ext - [0:0]
:input_int - [0:0]
:reject_func - [0:0]

и весь траф поделён на "зоны":

int - "внутренний" - внутри локальной сети
ext - "внешний" - трафик из сетей, которые мы не контролируем (интернет и т.п.)

нетрудно заметить, что к "внутренней" зоне отнесён лишь один сетевой интерфейс - tap0. все остальные интерфейсы работают с "внешним" трафиком. нра? то-то...

для "краткого курса молодого бойца" необходимо и достаточно ознакомиться со следующим файлом:

> vim /usr/share/doc/packages/SuSEfirewall2/EXAMPLES

где дают исчерпывающие примеры по начальной конфигурации пакетного фильтра путём редактирования любимого файла "/etc/sysconfig/SuSEfirewall2". описывают восемь "сценариев":

1. Simple dialup
2. Small home network
3. Small home network with additional WLAN
4. Small company with external mail and web server
5. Company with IPsec tunnel to subsidiary
6. Company with web server in DMZ
7. Complex scenario
8. Laptop in private network but with additional public IP adresses

поскольку копипастить содержимое этого файла смысла нет, то пожалуй остановлюсь на некоторых деталях. начну с типовой ситуации для хомячков:

ISP предлагает тариф, позволяющий "качать" порно на скорости 768kbit/s, а вот "отдавать" трафик можно лишь на скорости в 256kbit/s. при этом возможна ситуация, когда при активной "отдаче" вы заметите "паралич" загружаемых файлов. лечение (при условии, что Вы на впн соединении с интерфейсом dsl0):

FW_HTB_TUNE_DEV="dsl0,250"

тут мы при помощи HTB режем исходящий трафик и резервируем 6kbit/s на "технические" нужды (пакеты TCP ACK или interactive SSH).

по умолчанию (для EXT зоны) зарезан broadcast и multicast. это может быть неудобно, поэтому внимательно смотрим на следующие переменные:

FW_ALLOW_FW_BROADCAST_EXT="no"
FW_ALLOW_FW_BROADCAST_INT="no"
FW_ALLOW_FW_BROADCAST_DMZ="no"
# ниже мы игнорируем логирование "дропнутых" ранее броадкастов
FW_IGNORE_FW_BROADCAST_EXT="yes"
FW_IGNORE_FW_BROADCAST_INT="yes"
FW_IGNORE_FW_BROADCAST_DMZ="yes"

для broadcast пакетов имеет смысл лишь открыть определённые порты, т.е. разрешить лишь выбранным приложениям принимать их. для multicast сперва надо ознакомиться с содержимым файла /etc/protocols, после чего уже разрешать определённые протоколы (например):

FW_SERVICES_EXT_IP="GRE MTP PIM"

и/или цепляем FW_CUSTOMRULES=файл_с_ручными_правками_правил, где рисуем:

iptables -A INPUT -j ACCEPT -d 224.0.0.0/24

тем самым разрешая "входящий" мультикаст на все протоколы/интерфейсы.

не будет лишним обратить внимание на:

FW_KERNEL_SECURITY="yes"

этот параметр включает некоторые скрытые защитные механизмы ядра (icmp_ignore_bogus_error_responses, icmp_echoreply_rate, icmp_destunreach_rate, icmp_paramprob_rate, icmp_timeexeed_rate, ip_local_port_range, log_martians, rp_filter, routing flush, bootp_relay, proxy_arp, secure_redirects, accept_source_route, icmp_echo_ignore_broadcasts, ipfrag_time)

если у вас большая и "шаловливая" локалка, то имеет смысл сделать:

FW_REJECT="no"
FW_REJECT_INT="no"

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

имеет смысл как страховку от тупого DDOS-а выставить

FW_ALLOW_FW_SOURCEQUENCH="no"

тут мы "вырезаем" атаку по icmp которая возможна, при следующем условии:

-A input_ext -p icmp -m icmp --icmp-type 4 -j ACCEPT

но теряем на оповещении о статусе соединения от ISP (ежели он соизволит оное раздать ессно, что далеко не факт...)

последняя стадия "Enlightenment-а"/(сиречь Просветления, Мудрости и Духовной Силы) - это прямое редактирование скрипта, ведающего формированием цепочек правил:

> sudo vim /sbin/SuSEfirewall2

тут уж "вольному - воля". кто смел духом - дерзайте (бэкап оригинала не забудьте сохранить на всякий).

Use SuSE, Luke!

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

с новым гадом!

/*

-Мальцик, мальцик сам виноват!
/вопль судьи (после речи обвиняемого) на слушании дела по изнасилованию несовершеннолетнего.../

всех со всеми, всего, того же и туда же... надеюсь, что НГ удался на славу и вы можете по крупицам восстанавливать хронологию событий в ближайшем будущем. эта заметка планировалась как "последняя" в "цикле" про OBS, но, планы эт одно, а каменная жопа реальности - совсем другое дело. к тому же один мой друг скоро должен академическим языком (в отличие от аффтара) изложить свои мысли и наработки по OBS - должно быть весьма занимательно, пропиарю, не сумлевайтесь.

поскольку сей очерк содержит несколько ключевых "идей" (сиречь посланий, что должны быть где-то зафиксированы как минимум), то выстроить логическую цепочку изложения материала проблематично. возможно, что материал будет жестоко корректироваться после публикации.

предыдущие серии нашего "опуса" можно считать "обзорными" - сиречь обо всём и ни о чём. тут же - другое дело. сугубо практика и описание "ухабов" на легендарном пути "из Петербурга в Маскву". будем задавать себе вопросы и искать на них пральные ответы (тихо сам с собою, умным человеком, я веду беседу...). вопрос первый:

1. Какого хуя при локальной сборке пакета (rpmbuild -bb file.spec) всё путём, а OBS не может понять, что все зависимости заданы корректно?!


т.е. Вы, как пионэр, в "BuildRequires:" прописали всё, что надо (и даже больше), но сборка сыпется с сообщениями, что требуемого пакета в "сборочном окружении" нет (хотя лог показывает, что сей пакет корректно установлен!). в 99% случаев это жестокий "прикол" утилиты "/usr/bin/pkg-config", связанный с разблядовкой собранной программы на "-devel" и прочие "обычные" пакеты. OBS/(rpm в частности) самостоятельно отслеживает динамических линковку либ/бинарей и выставляет корректный "Requires:" (прямые зависимости пакета) для результата. но, это, сцуко, только для "non devel related" пакетов! соответственно команда:

> rpm -qR имя_пакета

выдаст вам на гора список прямых зависимостей. поэтому ежели вы ваяете "devel" пакет, то "аз, буки, веди" - вхуярить в спек файл следующее:

%devel [-n новое_имя]
Group: чего-то там
Summary: И вас туда же (да-да-да, с Заглавной, мать её, буквы!)
Requires: %{name} = %{version}

то, что дано в квадратных скобках - [] - опционально. но пример выше лишь указывает, что при установке "devel" пакета в систему надо обязательно тащить и "основной пакет". "прямые" зависимости на "devel" пакеты OBS/rpm НЕ ОТСЛЕЖИВАЕТ! и у "pkg-config" (который работает исключительно с "devel" пакетами) сносит крышу, когда, допустим, требуется для сборки "curl", в "сборочное окружение" "libcurl" установлен, но, "/usr/lib/pkgconfig/libcurl.pc" файла-то НЕТ! ибо надо ручками, самому, в секцию "%devel" дорисовывать:

Requires: пакет1-devel пакет2-devel .....

т.е. риска для "хомячков" (которым spec-файл и в кошмарном сне не привидится) нет никакого, а вот "господа мейнтейнеры" огребают по полной (причём справедливо, по результатам теста на IQ).

как это ловить:

если "rpmbuild -bb[-ba] файл.spec" проходит на ура, а в OBS - жопа, то даём команду:

> osc build

в результате у нас в "/var/tmp/build-root/" будет сформировано окружение для сборки. можно сделать:

> sudo chroot /var/tmp/build-root/
> pkg-config --modversion имя_требуемого_пакета

если всё путём - то последняя команда выдаст версию установленного пакета, если нет - то вы хоть поймёте где накосячили. соответственно исправляем/(пинаем мейнтейнера) косяки.

очень полезно в данном случае вдумчиво ознакомиться с политикой Партии по обновлению пакетов, да!

2. Бля, всё собралось, репо не обновляется! Шозахуйня?!

сынок, не ссы, всё путём! одна из "фишек" OBS именно в том, что репо не будет обновлено до тех пор, пока не произойдёт удовлетворение ВСЕХ зависимых пакетов (хомячки в восторге писают гранулированным кипятком, их системы всегда будут в рабочем состоянии)! поясню. допустим мы вносим изменения в пакет А, от которого зависят пакеты B и С. репо не будет обновлено до тех пор, пока пакеты B и С не отрапортуют об успешной пересборке с ИЗМЕНИВШИМСЯ пакетом А. это вам не "ебиан" и не "федорино горе" - привыкайте заботиться о Пользователях, Господа хорошие! одним из следствий этого являются "большие" номера "релизов" в SLE/SUSE ("Release: №"), ибо значение этого поля состоит из двух цифр, разделённых точкой (.). первая цифирь - судит о том, как долго вы ебались со спеком, прежде чем он собрался в OBS, вторая - сколько раз перехуяривали зависимости к вашему пакету... кроме того, есть такая штука, как scheduler - это некий виртуальный администратор на раздачу заданий в OBS - он может быть завален работой по самое ни-ни и не стоит требовать в данном случае от него немедленного удовлетворения ваших низменных потребностей.

3. Ёб вашу мать! Пакет в порядке, какого хуя сборка упала?!

"shit happens, you know..." будьте готовы к тому, что некоторые "сборочные цеха" примут ваш заказ на исполнение и уйдут в запой немедленно. результат - "failed" статус для полностью корректного пакета по причине того, что виртуальный "XEN-build-host" наебнулся с ошибкой в собственной конфигурации. ничего страшного, кроме того, что рестартовать сборку надо вручную (оно само пока не способно себя же контролировать). хомячки этого даже не заметят.

4. А-а-а! Демоны! Демоны!

как правило подобные "эмоции" характерны для товарищей, не осиливших макросы при сборке rpm-пакетов. это особенно актуально для модулей пистона (python), жемчужины (perl) и прочих скриптовых языков. с версии openSUSE-11.2 идёт тенденция спихнуть это всё на "noarch" архитектуру (ибо скрипты одинаковы для всех), что порождает порой забавные ситуации (забавные - эт если со стороны смотреть...). совет тут один - "читайте книжки"...


5. Слышь, начальник, я это, свой OBS хочу намутить! Шо делать надо?

читать! здеся:

Build_Service всё и неоднократно...

*************

вскоре вместо этих "звёздочек" появится материал по работе с модулями ядра при Code11 или же ознакомьтесь с подробной документацией, пжалста....

кроме того могу проинформировать всех SLE/SUSE пользователей Enlightenment Desktop Shell об успешном апдейте репов на E-svn-20100103_r44860 и о сборке python-EFL "bindings" для openSUSE-11.2. там же вы можете найти кучу новых пакетов, типа виртуальной клавиатуры на EFL/elementary или же медиа-центра "Canola" (который пока не пашет должным образом, ибо EFL у нас дюже "новэнький", а "canola" хочет более старых версий...)

всем удачи и творческих узбеков в новом, 2010-ом, году!

*/

четверг, 24 декабря 2009 г.

всех с наступающим!

и дабы как-то отметить уходящий год на старых струнах (грешен, да, им скоро 4 года исполнится... ппц...) записал своё хуёрчество (лажа так и прёт...):


Waiting For A Weekend
Sleepy
Stardust

писалось "тупняком" - Burny RLC-60S(Китай) в Boss ME8(Japan) где добавлен реверок и "Presence" на эквалайзер в районе 50 (чтобы компенсировать хоть как-то старые струны) и arecord снимал с линейного входа.

пинайте!

P.S. не пугайтесь, если Ваши комменты не появятся сразу в блоге - из-за рекламы выставлен режим модерирования. удаляю только посты, нарушающие законодательство РФ. можете смело обкладывать аффтара буями - такие комменты пропущу :).

четверг, 10 декабря 2009 г.

мысли вслух...

/*

...хоронили тёщу, порвали два баяна...

эта заметка сделана "для себя", чтобы как-то упорядочить ощущения от "общения" с гитарами где-то с конца 80-х годов прошлого столетия. за это время поменялось многое, не сказать, что всё в лучшую сторону. радует одно: в 80-х (в СССР) не было широкого доступа ни к информации, ни к инструментам (электрогитарам в частности). ноне - раздолье. да только вот вместо отсутствия информации как таковой имеем хорошо развитые техники по "оболваниванию" покупателя. "правда" - она ведь разная, есть белая, а есть красная. возможно лично Вы не согласитесь со многими тезисами этой заметки - Ваше право. в данном случае автор - сторона абсолютно не заинтересованная "материально", далёкая от музыкальной индустрии и изредка лишь тренькающая пару аккордов перед сном.

терминология

сингл/single - датчик с одной катушкой (как правило) по размерам подходящий для "фендерообразных" гитар ("стратов" и "теле")

спарка/humbucker - датчик из двух синглов (двух индукционных катушек), катушки которых намотаны в противоположных направлениях (reverse wound reverse polarity) и подключены последовательно (возможны варианты коммутации). изобретён/(запатентован) товарищем Seth Lover-ом/(компанией Gibson).

быки - два опорных винта, вкручивающихся в деку и "держащих" на себе все "машинки" типа Floyd Rose.

винтаж/vintage - в идеале это довольно старый инструмент (от 30-40 лет возраста), дошедший до нас (до нашего времени) в оригинальной комплектации. рынок "винтажных" инструментов переполнен мошенниками, леваком, да и сама концепция "винтажа" не предполагает активного использования, что ведёт к ухудшению качества инструмента (дерево не раскрывает свой потенциал). но ощущения от игры на инструменте скажем 1952-го года выпуска весьма своеобразны (есть у меня один такой...)

MS[R]P - Manufacturer Selling [Retail] Price - цена продажи в розницу со склада производителя

ghostbuilder - человек/компания, кто делает (как правило) отличные инструменты на заказ для известных мастеров и вешает на них шильдик от другой компании (которая инструмент хорошо сделать не может, но контракт с гитаристом на продвижение своего бренда уже таки подписала...). за примерами далего идти не надо: Joe Despagne (AKA JEM) сделал для Steve Vai-я его личные "JEM" гитарёшки; PBC Guitars делает американский custom shop для Ibanez-а; Kramer вообще не имел своих производственных мощностей и собирал из комплектующих (их "Made in USA" делались в Канаде компанией "Godin Guitar Company", "именные" инструменты от Kramer как правило ваял Том Андерсон, остальной ширпотреб - ESP, после чего и выяснялось, что "есть, Петька, нюансы..."); Epiphone - хрен поймёшь кто там в Китае реально делает для "эпифона", проще перечислить, кто НЕ делает... и т.д. и т.п...

самопал - так называемый мастеровой инструмент, непонятно кем сделанный (как правило Российского или восточноевропейского производства). в СССР свято верили, что самопалы, сделанные на продажу - говно это одно, а вот самопалы, сделанные мастерами "для себя, для души" - это СОВСЕМ другое дело. утверждение сие абсолютно корректно и справедливо...

винт - деформация грифа гитары, при готорой накладка с ладами выгибается на подобие лопасти винта самолёта (гриф "перекручивает")

хто здесь?!

электрогитара с одной стороны очень отличается от акустической, но с другой - по сути в "электричке" работают те же физические принципы, что и в "классике": звук формируется колебанием струны, на которое влияет акустический резонанс, резонанс твёрдого тела - самой гитары, резонанс/параметры звукоснимателя/(-лей), каскады усилителя/(преда) и особенности самого "кабинента" - параметры динамиков, акустические свойства "колонки". это накладывается на акустику помещения и попадает к нам в уши. влияет всё - от техники звукоизвлечения/(качества струн) и до... поэтому бытует вполне справедливое замечание, что звук электрогитары - это 50% сам инструмент и 50% - "комбик" (усилитель + "кабинет" - колонка с динамиками).

на сегодня существует несколько базовых форм/(комплектаций) электрогитар, закладывающих основу звука:

1) "гибсонообразные" (для простоты включим сюда всю "линейку" - Les Paul, SG, Flying V, Explorer)

2) "фендерообразные" (strat, tele, и множесво моделей на ту же тему от других производителей)

3) "полуакустические" (ES175, ES335 и прочая к ним - коротко именуются как "джазовые")

утверждение: чем богаче/лучше чистый звук у инструмента (хорошие гармоники, обертона, слабое магнитное поле датчика не препятствует естественному колебанию струн, датчик подобран по тональным характеристикам к инструменту и не мешает ему) - тем больше вероятность, что с исказителем (типа "distortion") добиться хорошего результата будет проблематично. и наоборот. при этом электрогитара с хорошим чистым звуком вполне способна удивить "воткнувшись" в ламповый предусилитель (или в полностью ламповый усилитель и пред). суть этого есть элементарная физика. использование цифровых исказителей позволяет как-то сгладить эту ситуацию ценой "убийства" оригинального звука инструмента. ещё один путь - это тщательный подбор датчиков к инструменту по тональным/резонансным характеристикам, использование (экранированных) "спарок", использование комбинированных схем съёма звука (т.е. пьезодатчик + спарка/сингл), использование различных по характеристикам датчиков, расположенных у грифа (чистый звук) и у нижнего порожка (для работы с исказителем).

нетрудно заметить, что вариаций на тему "стратов" и "телеков" в разы больше, чем прочих. это обусловлено как агрессивной политикой компании Gibson по судебному преследованию "пиратов" (а-ля Fernandes, Tokai, Ibanez, PRS, etc.), так и тем, что с 1925-го года в Gibson работали люди, типа Ллойда Лоуэра (Lloyd Loar), который сперва рассчитывал модель гитары математически, а потом лишь делал макет. такой подход оставляет очень мало места для "дизайнерских" изысков, зато способствует формированию "классических канонов" (ES175). вполне возможно, что данный подход (опора на математическую модель) обусловил и хроническую болезнь всех "гибсонов" - черезвычайно слабый гриф с тенденцией поломки в районе головки. бытует мнение, что компании Gibson стоит принудительно ломать все грифы прям на фабрике до момента покраски, потом клеить/чинить (прочность склеенного шва выше прочности исходного материала в разы), красить и продавать. ибо трещины (различимы невооружённым глазом) в районе порожка (нулевой лад) и на стыке с декой в новых инструментах абсолютная норма (к сожалению...), особенно ежели длительная транспортировка имела счастье приключиться. абсолютно аналогичная картина характерна и для "пиратских подделок".

форма инструмента, материал (тип используемой древесины, пластика, и т.п.), тип (магнитного) датчика ("сингл"/"спарка"/"пьезо"), способ и место его/(датчика) крепления, материал и конструкция нижнего порожка, способ крепления струны, угол наклона головки грифа, материал и тип ладов - всё влияет на звук в той или иной степени. даже тип (лакового) покрытия (возможен вариант "масляного" покрытия - обычно делается конопляным маслом), хотя это и не так сильно выражено, как в акустических инструментах или в скрипках. если с формой всё понятно и без объяснений (физика твёрдого тела отлично умеет искать/рассчитывать резонансные точки любой конструкции), то очерк по свойствам пород древесины, особенностям заготовки дерева (имеет значение не только время заготовки, но и "место") даже начинать не буду. нюансов тут предостаточно. опишу лишь кратко технологию заготовки дерева для изготовления "массовых" электрогитар:

1) покупается на рынке необработанная кубатура (стволы)
2) идёт распил на заготовки
3) заготовки засовывают в "микроволновку", где они "текут" - удаляются смолы, излишняя влага и т.п.

на этом подготовительный этап заканчивается и идёт сама сборка

4) после "микроволновки" заготовки засовывают в CNC "шайтан-машину" и она мигом вырезает деки, грифы и/или накладки на гриф (Anderson, Baker, Gibson, PRS, Fender, ESP, Ibanez, Washburn, Yamahaha и многие другие используют CNC. термин "ручная работа"/"handmade" для электрогитар деградировал - его зачастую используют некорректно. мне известна лишь одна компания, которая с момента своего основания в начале 20-го века не изменила техпроцесс и делает всё "по-старинке" вручную. от и до. это Eastman. точка. абзац.)
5) схожий набор "шайтан-машин" набивает лады, красит и т.д. и т.п.

собственно инструмент готов. если производителя жаба душит раскошеливаться на CNC - используются аналоги оборудования, применяющегося в мебельной промышленности ("станки с ЧПУ" - хз как это по английски будет). нетрудно догадаться, что себестоимость конечной продукции при описанном выше методе изготовления крайне мала, различия в звуке могут появиться при использовании датчиков с различными (резонансными) характеристиками. при использовании качественных комплектующих и надлежащем контроле качества за производством электрогитара (конечный Продукт) вполне способна удовлетворить потребности подавляющего большинства покупателей. спустя лет эдак 20-30 (особенно если на электрогитаре будут регулярно играть) дерево окончательно "дозреет" и инструмент "раскроется" полностью (опять же, если есть чему "дозревать" и "раскрываться" - зачастую трава остаётся травой, редко когда трава становится дровами, ну а шанс, что дрова вырастут во что-то приличное балует отнюдь не многих). после чего (если вы не горите желанием продать инструмент "винтажникам") рекомендуется сделать глобальное ТО, поменять датчики/лады/фурнитуру и пользовать дальше в своё удовольствие.

почем опиум для народа?

перечитайте ещё раз пару абзацев вверху. теперь откройте любой ценник/("прайс-лист", мать его) музыкального магазина. пройдитесь по списку. подумайте. ещё раз подумайте. ваши выводы?

для полной картины примем в рассчёт формулу ценообразования для РФ:

Цена(РФ) = (цена Покупки + Цена Доставки) * 1.15 (Таможенная Пошлина) * 1.18 (НДС) + Таможенное Оформление (мизер) + Маржа Продавца

при этом "цена Покупки" != MSRP, она зачастую значительно ниже, ибо для рынка РФ идёт подсос остатков на складах ("на тебе Боже, чего нам не гоже!"). суммы дисконта могут быть весьма значительными. MSRP - это так называемая "каталожная" цена. MSRP всегда выше, чем "Street Price" (уличная цена). а "цена Покупки" вполне может быть как на уровне, так и ниже именно "уличной цены".

формула по расчёту цены продажи на единицу продукции для производителя:

MSRP = Прямые расходы (материалы, труд, электроенергия) + Косвенные расходы (складские) + Затраты на Маркетинг + Административные Затраты + Маржа производителя

соответственно коммерчески успешный производитель электрогитар имеет "Маржу Производителя", которая позволяет противостоять инфляции (как минимум!) и в цену инструмента закладываются маркетинговые (реклама - двигатель торговли) и прочие накладные расходы. MSRP призвана регулировать уровень цен у дилеров/розницы и зачастую не имеет никакого отношения к реальной закупочной цене крупного дилера.

теперь можно огласить список "Барыг-чемпионов" - компаний, цена на инструменты которых ОЧЕНЬ сильно завышена (т.е. покупка инструментов этих брэндов оправдана только если вам деньги больше девать некуда или если вы решили реализовать свою детскую мечту и надеетесь, что она избавит вас от каких-то комплексов). оглашать будем без привязки к российским реалиям/дилерам - тут всё более-менее прозрачно.

на почётном первом месте наблюдаем беспощадную борьбу двух "толстых корпоративных котиков" - Gibson и ESP. выделить абсолютного чемпиона довольно сложно, ибо если в случае с "гибсоном" где-то 2/3 от розничной цены приходится на брэнд (цена репутации == воздух в нашем случае, ибо ничем не оправдана. ещё ни разу не слышал, чтобы кто-то добился компенсаций явного брака по их Lifetime Warranty. да и зачастую кажется, что новые "гибсона" топором вырезали из заготовок, даже наждачки на "обточку" пожалели...), то ESP (у ESP и Schecter один хозяин кстати - Hisatake Shibuya) имеет производственные мощности исключительно в Азии (Корея, Индонезия) и в качестве "целевой" аудитории избрала поклонников "тяжёлого металла" - что позволяет не заморачиваться с "чистым" звуком и откровенно гнать лажу на рынок ("Distortion"/"Metal Zone" всех уравняют на выходе).

imho: сколько этих ESP/LTD/Cort/(other crap) палок не смотрел - убого, особенно на фоне Fernandes/Burny или на фоне "американцев" Jackson/Charvell. визуально и "на ощупь" качество у ESP/LTD приличное (инструменты более "вылизаны", чем Gibson, хотя скажем честно - надо ОЧЕНЬ постараться, чтобы сделать инструмент хуже, чем родной "гипсон": накладка с ладами выступает за поверхность грифа - фигня! сколы и трещины на грифе/деке - фигня! сам гриф "винтом" - какая мелочь! лады и нижний порожек не отшлифованы - не парит никого...), но... не звучат и всё тут. даже модели со сквозным грифом не радуют.

самое весёлое - Gibson постоянно на протяжении последних лет эдак *дцати находится в состоянии, близком к банкротству. в конце 80-х (в 90-х) компанию по сути "вытащил" Slash, игравший на инструментах Криса Деррига (Kris Derrig) (к компании Gibson эти инструменты не имели никакого отношения, кроме своей формы корпуса). также многие утверждают, что Slash использовал/использует инструменты от "Макса" (MAX/Peter Barant), являющиеся репликами модели "Les Paul".

P.S.: не спешите обвинять автора в предвзятости - он прекрасно знает о чём тут идёт речь, ибо являлся как обладателем ESP (Eclipse custom), так и является собственником "стандарта" (который и в Африке стандарт). розничная цена на новые инструменты даже с учётом нормы прибыли производителя/дилеров - завышена в разы.

второе место среди Барыг отдадим славной компании PRS, ибо:

1) с ценообразованием наблюдаются такие же "проблемы", как и у компании Gibson.
2) оформление накладки на гриф с "драконом" - дело рук Ларри Сифеля из компании "Пёрлворкс", Балтимор (Larry Siffel, Pearlworks, Baltimore) при помощи CNC.
3) все инструменты у PRS сделаны при помощи CNC машин - с какого интересно тогда такие цены?

третье и прочие места оставлю на ваше усмотрение. достаточно лишь начать думать, чтобы сразу же увидеть потенциально завышенную цену на электрогитару.

информация к размышлению:
в Китае на распродаже можно легко и непринуждённо купить "Squier Stratocaster" за USD $28.00 . дальше - сами, если есть желание.

что в имени тебе моём?! ты зацени груди объём!

основных игроков на рынке электрогитар считанные единицы. обилие марок и названий - ширма, за которой спрятались "толстые котики":

Gibson Guitar Corporation (Gibson USA):
Epiphone, Baldwin, Garrison, Maestro, Wurlitzer, Tobias, Valley Arts Guitar, Slingerland, MaGIC, Gibson Amphitheatre, Hamilton, Chickering, Kramer, Steinberger, Electar, Aeolian, etc.

Fender Musical Instruments Corporation (FMIC):
Squier, Gretsch, Jackson Guitars, Charvel, Hamer, Tacoma, Guild Guitar Company, SWR, Sound Corporation, Brand X, Orpheum, Olympia, Heartfield, etc.

Washburn прикупил Parker-а и вроде как пользует те же корейские производственные мощности, что и ESP/Schecter/Cort, альянсы японских Gakki довольно "извилисты" и где-то 60% - 70% всего рынка электрогитар делает Samick.

окромя ентих "котиков" вовсю процветает ghostbuild (см. терминологию). эта каша и кутерьма низводит понятие "бренд" в ноль. можно найти за копейки какого-нибуть "китайца" с (!относительно!) хорошим деревом и нормальным качеством изготовления, попотеть над подбором датчиков и результат уделает боком легко и непринуждённо любой аналогичный/(схожий по типу) серийный ширпотреб (включая линейку "made in USA"). можно поймать момент завоза Burny, озаботиться наличием лампового комбика, перебрать всё и выбрать инструмент, который по самые гланды будет засаживать "оригинальным гипсонам" и "гипсонообразным" сородичам (толика везения таки должна присутствовать, но задача вполне решаема). ничего нового в данной ситуации нет. точно так же дело обстояло и в конце 70-х, когда Edward Van Halen за $130 USD прикупил "запчасти" (гриф и деку) у компании "Boogie Bodies", самостоятельно покрасил деку в белый цвет из аэрозольного баллончика и магнитной плёнкой наколбасил чёрные полоски. после чего на этой "гитаре" был записан альбомчик "Van Halen I". а посему - "не имей амати, а умей играти!"

ищите да обрящете...

допустим, что возможности позволяют и хочется чего-то особенного. imho - можно посмотреть в сторону мелкосерийного производства с элементами ручной работы: Baker, Quicksilver или присмотреться к Eastman - вряд ли пожалеете. не помешает побродить по сайтику г-на Романа, только учитывайте, что человек болен здоровым американским шовинизмом (он - патриот своей страны), поэтому пропускайте все его статьи через призму здравого смысла. с доставкой в РФ и растаможкой проблем нет никаких. сравнить цены можно с сетью Sweetwater. ориентироваться на Ebay не советую - там жулики и нет никакой гарантии, что вы покупаете именно то, что и ожидаете купить. впрочем полностью игнорировать Ebay не стоит. относитесь к нему как к справочному бюро. это некий индикатор упоминавшейся выше "уличной цены" на оборудование. не стоит забывать об "особенностях расейского рынка/менталитета", особенно если вы планируете перепродать инструмент через некоторое время. тогда на первый план выходит задача "сохранения стоимости". какие брэнды в этой стране не теряют в цене - вопрос интересный. рискну предположить, что либо те, которые и так стоят неприлично дёшево (до $100 USD), либо мелкосерийка с бирками "Made in Japan/USA". на китайцев/корейцев рассчитывать сложно - только в привязке к какому-либо брэнду. именно поэтому в заметке упомянута несколько раз компания Fernandes - она (помимо великолепной репутации/истории) разработала прекрасную "электрику" - sustainer и не менее прекрасные датчики для своих гитар. современные Ibanez-ы разочаровали. перенос производства/(субконтракт) в Корею на пользу звуку и качеству не пошёл. по мне так их линейка с 80-х и до начала 90-х (а то и до середины) загнёт и вложит аналогичным современным моделям по самое "не хочу". мнение это субъективно, если ваши ощущения говорят об обратном - спорить не стану. на вкус и цвет. "китаёзы" прогрессируют день ото дня. их подводят дерьмовая фурнитура/комплектующие и (!временное!) отсутствие хороших датчиков в их ценовом диапазоне. что ни говори, но себестоимость хорошего (действительно хорошего) электромагнитного датчика для китайского "no name" сегодня получается "как крыло самолёта" (относительно себестоимости остальной гитары), что есть серьёзное (!временное!) затруднение.

утро красит нежным цветом...

прогресс наметился и в нашей стране. пусть в свободной продаже и не появилась марка "Red Bear"/"Novik" (а хотелось бы, может спроса нет? странно), зато "выстрелил" г-н Ерасов. неплохо найти дилера, кто имеет несколько "комбиков"/усилителей и начать прослушивание с моделей, не отягчённых избытком тумблеров и крутилочек. ламповый усилитель должен давать надёжную основу звука. есть опция лампового перегруза - отлично. нет - не страшно. вся обработка - от задержек/реверберации и до ... - дело десятое.

г-н Шамрай продолжает прокладывать тернистый путь к звёздам. большому кораблю - большая дорога. удачи, творческих узбеков и самые наилучшие от чистого сердца. как звучит его нонешний custom shop - не знаю. выглядит многообещающе. первые модели под брэндом "Russtone" ("Shamray" отделился в 1998-ом согласно официальной версии) - это "спаси и сохрани мя, грешного..." (AFAIR). сейчас - совсем другое дело. не стыдно людям показать. зачем Russtone занимается галиматьёй с размещением заказов в Индонезии - не понятно, ну да это не моё дело. дай Бог памяти, но то ли "рустон", то ли "шамрай" (то ли оба) в "детстве" отличался слабым грифом. через некоторое непродолжительное время гриф вело "винтом". надеюсь, что подобное осталось лишь в воспоминаниях.

finita la comedia...

на звкуску - тёплые и добрые слова в адрес Peavey - за отличные комбики (как бывший владелец "50 Classic 2x12' Celestion" и бывший владелец "51/50 head"), нормальные цены и высокое качество продукции (у них и гитарёшки очень даже приятные во всех отношениях). про остальных "котиков" (или про "толстых корпоративных котиков") пусть расскажет кто другой - сам пока не сталкивался вплотную. ежели тема интересна - могу накатать чуток отсебятины по ламповым усилителям, датчикам и чему-нибудь ещё.

добро пожаловаться!
удачи...

*/

среда, 25 ноября 2009 г.

Заебали пидарасы...

уважаемые Господа,

прошу помощи. есть некие гандоны, что постят в комментариях рекламу, нарушающую законодательство РФ. как с ними бороться? запрещать постинг комментов для всех - не хочется. закрывать глаза на нарушение законодательства - становишься соучастником. с удовольствием рассмотрю все идеи. в идеале было бы изложение способов связи с google (поскольку blogspot.com им и принадлежит) с последующими санкциями. если наши правоохранительные органы заинтересованы в участии - не вопрос. вопрос лишь как это всё организовать без излишней суеты.

спасибо.

вторник, 24 ноября 2009 г.

SOAD-Linux-3.3.1 is out

/*

Ladies and Gents,

the new SOAD-Linux based on openSUSE-11.2 is out:

Download page
List of installed packages
README
Version 3.3.1 download link

It's a hybrid "iso" image capable to run in VM (qemu, etc.), to be burned on CD/DVD or to be "dumped" to USB-sticks. We're providing the extended set of a drivers for devices/filesystems along with the extended set of WM's for your convenience. Please be aware that we can not assure the correct behavior of "Ecomorph" despite on installed NVIDIA driver (you need to build from official "NVIDIA*.run" sources to avoid "White screen" compiz bug for a modern NVIDIA GPU's). Also due to a "lzma+squashfs" compression method we can't provide the small "xdelta" patches yet.

You're always welcome to leave your comments here.

Have fun!

***********************************************

Дамы и Господа,

предлагаем Вашему вниманию новую версию SOAD-Linux, основанную на openSUSE-11.2:

Страница загрузки
Список предустановленных пакетов
README
Скачать образ

С удовольствием учтём Ваши пожелания при подготовке следующих релизов.

Удачи!

*/

вторник, 17 ноября 2009 г.

upgrade to openSUSE-11.2

/*
пуркуа бы и не па?

основные принципы остаются теми же, что и были описаны ранее:

схема проведения апгрейда

есть несколько уточнений. расписывать в деталях нет желания. по шагам:

1) определяем количество "вендоров" ПО в текущей системе:

> rpm -qai | grep Vendor | awk -FVendor '{ print $2 }' | sort | uniq

2) желательно все полученные выше линии внести через запятую в файл:

> sudo vim /etc/zypp/vendors.d/openSUSE

также можно создать несколько файлов в каталоге "/etc/zypp/vendors.d/". формат файла:

> cat /etc/zypp/vendors.d/openSUSE

[main]
vendors=openSUSE,SUSE LINUX Products GmbH,none,openSUSE Build Service,Packman,packman.links2linux.de,openSUSE Education,openSUSE-Education,(none),j.engelh,obs://build.opensuse.org/Emulators,obs://build.opensuse.org/home:anubisg1,obs://build.opensuse.org/home:dmitry_serpokryl,obs://build.opensuse.org/Moblin:UI,obs://build.opensuse.org/network:utilities,obs://build.opensuse.org/OpenOffice.org:EXTRAS,obs://build.opensuse.org/OpenOffice.org:STABLE,obs://build.opensuse.org/openSUSE:Factory,obs://build.opensuse.org/openSUSE:Tools,obs://build.opensuse.org/server:database,obs://build.opensuse.org/Virtualization:Appliances,obs://build.opensuse.org/X11,http://packman.links2linux.de


3) правим репы на версию 11.2:

> cd /etc/zypp/repos.d/
> sudo sed -i 's|11.1|11.2|g' *

4) проверяем содержимое каталога "/etc/zypp/repos.d/" на предмет того, что все "url=" вылидны.

5) выполняем сам апгрейд. можно в два прохода (сперва качаем контент, сохраняем локально, потом ставим):

> sudo zypper mr -k --all #optional
> sudo zypper mr --all --no-refresh #optional
> sudo zypper dup -D #optional
> sudo zypper dup
> sudo zypper clean #optional


6) перезагрузка.

в зависимости от скорости соединения и общей захламлённости системы процесс может занять достаточно длительное время. впрочем, даже на машинах с более чем 60-ю активными репо финал порадовал хорошими результатами. стоит обновляться сейчас или подождать - зависит от вас и того набора ПО, которым вы пользуетесь. далеко не все репы в OBS (включая и "официальные") "проапгрейдили" контент до openSuSE-11.2 (владельцы ATI как обычно с завистью смотрят на хозяев NVIDIA).

imho - обновиться стоит обязательно. очень много новых вкусных плюшек в виде поддержки файловых систем, переработанное ядро и т.п.

удачи.

*/

суббота, 14 ноября 2009 г.

reiser4 для openSUSE-11.2

/*
И вновь продолжается бой,
И сердцу тревожно в груди.
И Ленин - такой молодой,
И юный Октябрь впереди!
/Н. Добронравов, 1974/

собсно продолжение "весёлой (1)" "истории (2)" с ура-патриотическим шовинистским наклоном.

потихоньку перечисляем причины, по которым задерживается/откладывается/херится компиляция рабочего софта для openSUSE-11.2:

* в текущей версии "binutils-2.19.51" кто-то умный (ОЧЕНЬ умный, да-да-да!) взял и догадался запретить "ld" делать статическую линковку бинарей по умолчанию.

абзац. передай CFLAGS параметр "-static" и можешь быть свободен (вопрос на засыпку: "а сколько проверок тех же autotools применяют статику для тестирования окружения?!"). из-за этого в Factory накрылась сборка "reiser4progs" и ваш покорный слуга "осилил" первым (damn, i'm good!) поднять "Титаник" из глубин:

пруфлинк :)

после чего встал раком вопрос о прикрутке ядрёного модуля для полноты ощущений. есть три варианта успешного развития событий:

1) тянем с kernel.org сырцы ядра, патчим по своему усмотрению, ставим;
2) ковыряем текущие исходники от SuSE (с учётом того, что некоторые патчи из "обоймы" reiser4 уже наложены);
3) берём diff-ы reiser4 и, радостные, лепим из них сырцы ядрёного модуля для последующей сборки по фэн-шую, выкладываем в OBS, лепим src.rpm и развлекаемся по полной программе матёрого эксгибициониста.

* история нумеро уно (светлая и радостная)

теперь по-порядку. при любых раскладах нам понадобятся исходники ядра от SuSE (чтобы припухнуть от количества патчей, выбрать нужные и хоть немного, но сообразить, почему ядро от SuSE заведётся даже на Gentoo, установленной на Mac Book, с поддержкой всего найденного оборудования):

> sudo zypper si kernel-source

для простоты из "/usr/src/packages/SOURCES/patches.suse.tar.bz2#utar/patches.suse/" дёргаем лишь файл "bootsplash" как пример. вам что-то ещё нужно?! - не стесняйтесь. можно себе позволить и правой рукой, и левой и обеими одновременно. именно тот случай.

частенько встречаются индивидуумы с синдромом "мля, это говно нибуя не компилиццо!". им может помочь (в плане уменьшения расхода нервных клеток ессно, IQ приходит с опытом/возрастом... правда не ко всем... и не всегда...) простенький конструкт (дёшево и сердито, рекомендую кстати):

> sudo zypper in ccache
> mkdir $HOME/bin
> ln -s /usr/bin/ccache $HOME/bin/cc
> ln -s /usr/bin/ccache $HOME/bin/gcc
> ln -s /usr/bin/ccache $HOME/bin/g++
> export PATH="$HOME/bin:$PATH"

если вы уже упёрли kernel-2.6.31.6 (налетай, падхады!), а с офсайта оттяпали набор reiser4 патчей для пионэров - то удача близка, как никогда ранее! осталось всего-ничего: состыковать это богатство в единое целое (Кама-Сутра нам поможет), компильнуть, инстальнуть и ребутнуться.

некоторые индивидуумы перед оправлением большой нужды не заботятся о наличии "облагораживающих рулонов бумаги" поблизости. "не наш метод"(с). выбор каталога для исходников ядра (KERNELSOURCEDIR) и выбор каталога для собранных, но не установленных, файлов (KERNELBUILDDIR) очень важен. хотя бы потому, что в процессе сборки они могут занять до 4-ёх Gb дискового пространства, а то и поболее (если мы лепим модули для разных вариантов настроек ядра). все детали очень хорошо описаны в файле "Linux-2.6*/README" - изучите. и подумайте о добавлении команд "make prepare && make scripts" в рутинный процесс компиляции.

для простоты эксперимента не будем мудрить (распакуем исходники ядра в "/usr/src/"):

> export KERNELSOURCEDIR=/usr/src/linux-2.6.31.6
> export KERNELBUILDDIR=/usr/src/linux-2.6.31.6

готовимся отпатчить исходники по самое "не балуй!":

> mkdir /usr/src/patch_reiser4
> cd /usr/src/patch_reiser4/
> tar xf $PATH_TO_SOURCE/reiser4-for-2.6.31.patch.bz2
> cd /usr/src/patch_reiser4/linux-2.6.3?/
> mkdir my_additional_patches
> cd ./my_additional_patches/
> cp $PATH_TO_SOURCE/bootsplash ./bootsplash.diff

решаем шкурный вопрос о патчах reiser4 *.diff файлов. либо делаем:

> mv /usr/src/linux-2.6.31.6 /usr/src/linux-2.6.31 # и корректируем переменные KERNEL*DIR

либо

> cd /usr/src/patch_reiser4/linux-2.6.31/
> find ./ -type f -exec sed -i 's|\ linux\-2\.6\.31|\ linux\-2\.6\.31\.6|' {} \;

приводим в порядок "bootsplash.diff" заменяя аморфные " a/" и " b/" на имя каталога с нашим новым ядром - "linux-2.6.31.6" или что-там-у-вас-получилось.

настал торжественный момент! "собирайтесь, девки, в кучу, я вам чучу отчебучу!" (наше дерево патчей - в "/usr/src/patch_reiser4/linux-2.6.31/"!)

> cd /usr/src/patch_reiser4/
> find ./linux-2.6.31/ -type f -exec cat {} \; | patch -d /usr/src/ -p0 -i -

если вас устраивает текущее ядро и нет желания изображать из себя "великого оптимизатора" - пришло время расслабиться:

> cd $KERNELSOURCEDIR/
> zcat /proc/config.gz > ./.config
> make oldconfig
> make O="$KERNELBUILDDIR"
> sudo make O="$KERNELBUILDDIR" modules_install install

новые записи уже добавились в меню grub-а, хотя можно и проверить/поправить дефолт:

> sudo vim /boot/grub/menu.lst

можно (и нужно) перегрузить машину на новое ядро и (ежели таки оргазм) - прислать аффтару пиффка для рыффка. последние штрихи:

> sudo depmod -a # на всякий...
> modprobe -v reiser4
insmod /lib/modules/2.6.31.6-0.1-desktop/kernel/lib/zlib_deflate/zlib_deflate.ko
insmod /lib/modules/2.6.31.6-0.1-desktop/kernel/lib/lzo/lzo_compress.ko
insmod /lib/modules/2.6.31.6-0.1-desktop/kernel/lib/lzo/lzo_decompress.ko
insmod /lib/modules/2.6.31.6-0.1-desktop/kernel/fs/reiser4/reiser4.ko

гы :). "Отдохнул - убери за собой!"(с):

> cd $KERNELSOURCEDIR/
> make clean
> zcat /proc/config.gz > ./.config
> make oldconfig
> make prepare
> make scripts

в остатке у нас няшный latest-kernel-stable с поддержкой bootsplash (выглядит как "родной"!) и reiser4 (надеюсь, что мои пакетики с "reiser4progs" уже установлены, да?). дерево исходников очищено от мусора и можно переходить к

* истории второй, печальной и тупой...

хвастать, признаю, пока нечем. первый яростный натиск потерпел фиаско. финал был комичен - загруженная машина где ничерта не работало, пришлось ядро переставлять с dvd (ибо модуль сетевой карточки тоже не загружалсо...). много про себя думал. в разных позах, обстоятельно. итак, на ваш суд выносим "тернистый путь ошибок трудных..."

засада начинается с разблядовки ядра на составляющие по-умолчанию (примерно так это выглядит):

> rpm -qa | grep kernel | sort

kernel-debug-devel-2.6.31.5-0.1.1.i586
kernel-default-devel-2.6.31.5-0.1.1.i586
kernel-desktop-2.6.31.5-0.1.1.i586
kernel-desktop-base-2.6.31.5-0.1.1.i586
kernel-desktop-devel-2.6.31.5-0.1.1.i586
kernel-firmware-20090821-4.1.noarch
kernel-pae-devel-2.6.31.5-0.1.1.i586
kernel-source-2.6.31.5-0.1.1.noarch
kernel-syms-2.6.31.5-0.1.1.i586
kernel-xen-devel-2.6.31.5-0.1.1.i586
linux-kernel-headers-2.6.31-3.4.noarch

получается, что алгоритм решения задачи должен быть примерно следующим:

a) "совместить" "объектные" файлы текущего ядра с основным деревом исходников - т.е. получить единое дерево исходников без разбивок на flavors (pae, xen, default, desktop, etc...) для ТЕКУЩЕГО! работающего ядра! т.е. сделать так, чтобы модуль мог быть подгружен в работающее ядро от SuSE!
b) удостовериться, что новое дерево стабильно и функционально (т.е. можно смело собирать бинари)
c) пропатчить новое дерево reiser4 diff-ами
d) собрать модуль reiser4, загрузить в текущее рабочее ядро
e) испытать оргазм

либо сразу отказаться от выпендрёжа и перейти к "третьему варианту" - подготовке исходников для нового модуля ядра и сборке в соответствии с CODE11.

нетрудно догадаться, что в творческом порыве аффтар не стал выполнять пункты a) и b), после чего ухитрился накомпилять ядро с новыми модулями, перетереть, старое, ребутнуться и "качнуть глибцов" по самые гланды. если кто-то думает, что всё прошло без сучка и задоринки (без разбора rej файлов, дополнительных патчей исходников...) - то он "наивный чукотский юноша". аффтар вспомнил всё и всех.

на вторую попытку силёнок не хватило. энтузиастам предложу ознакомиться с:

> ls /usr/src/linux-2.6.*-obj/$ARCH/$YOUR_FLAVOR

на предмет "соединения" с основным деревом исходников. иначе "не пойдёт!"(c). патчи - аналогично, НО:

N.B.: просмотрите в файлах (желательно пройтись по всем уже наложенным ессно)

/usr/src/packages/SOURCES/patches.suse.tar.bz2
/usr/src/packages/SOURCES/patches.fixes.tar.bz2

какие из патчей для "reiser4" уже присутствуют я ядре openSuSE и измените содержимое reiser4 diff-ов соответственно! иначе... будете как аффтар - ССЗБ.

делать "make install" не надо, тупо скопируйте "reiser4.ko" в "/lib/modules/"`uname -r`"/updates/" и, если всё хорошо, сделайте:

> sudo depmod -a
> modprobe -v reiser4

ня! (или как там получится по обстоятельствам...)

* история третья, коротенькая, но оптимистичная...

есть у меня махонький такой репо для экспериментов в часы досуга:

drivers

как только - так сразу там всё и появится. кому оно надо - загрузят "*.src.rpm" и разберутся без соплей. остальные упрут "reiser4-kmp-$FLAVOR" и будут похрюкивать от удовольствия.

* послесловие:

для модулей ядра стоит быть очень аккуратным с командой "strip". сделайте копию модуля, удалите debug символы, проверьте, загружается ли модуль после этого и только потом "режьте по живому". если нет ОСТРЕЙШЕЙ необходимости - оставьте модули как "not stripped".

вот такая вот музыка, такая, блин, Вечная Молодость...

на закуску перечислим прочие "заслуги" перед "родиной":

* в Enlightenment repo собрали новый снэпшот "fltk2" и "Dillo-2.1.1" (с поддержкой https/ssl - можно даже на gmail.com почту мусолить)

* там же в процессе грандиозная чистка spec-файлов от мусора

* там же обновлены практически все пакеты на текущие версии (включая git/svn/etc...)

* в игрушечном репо собрана новая версия "freetype2-lcd" и "igmpproxy" пропатчен для сборки/работы на openSUSE-11.2

* продолжаем готовить релиз SOAD Linux на базе oS-11.2 - тут всё грустно, ибо многие компоненты, что работают на openSUSE-11.1 в OBS не "портированы" на oS-11.2. да и прочих забот хватает.

пока так. поживём, а там видно будет.

всем удачи!

*/

четверг, 12 ноября 2009 г.

не было печали...

/*
- Вовочка, выйди из класса и зайди, как это делает твой папа!
- ... ща.
пинком выносит дверь с коробкой, рвёт пуговицы на рубашке и орёт в охуевший и притихший класс:
- Шо, с-суки, не ждали?!

история не нова. в очередной раз "тихо и незаметно" на весь OBS спустили новые проверочные пресеты из Factory. "... как это мило...". вроде бы радоваться надо, но... смотрим:

кривые зависимости в пакете
проблемы с автоконфигурацией устройств (заметим мимоходом, что alsaconf теперь "магёт" только ISA карточки и легко ломает нормальную рабочую настройку)
Top 100 - наши, мля, чемпионы...

на этом весёленьком, в цветочек, фоне новые проверки иначе как издевательскими не назовёшь. о начале этой вечеринки можно пофтыкать в одной из моих старых заметок. новый "хит сезона":

+ /usr/lib/rpm/suse_update_desktop_file.sh -r elementary_test Utility Accessibility
ERROR: //tmp/elementary-svn_20091112_r43627-build/usr/share/applications/elementary_test.desktop is not an UTF-8 file
+ exit 1
error: Bad exit status from /var/tmp/rpm-tmp.26363 (%install)

5 баллов. т.е.:
1) мы имеем АБСОЛЮТНО КОШЕРНЫЙ "elementary_test.desktop" файл
2) скармливаем его макросу "%suse_update_desktop_file ", чтобы эта тварь добавила строку "X-SuSE-translate=true" (исключительно специфика SuSE)
3) мы выучили все freedesktop-овы спеки на desktop файло для меню и всё делаем без косяков и по фэн-шую!
4) мы всё равно идём нахуй, ибо файл не UTF-8! (патамучта, бля, все символы "внутри" этого файла в пределах ASCII таблицы и ессно, что он и определяется как ASCII text! yeah baby, yeah!)

если кто-то решит ещё и "*.spec" файлы на UTF проверять - буду старательно рисовать матерные камменты. понятно, что по сути это мелочи, что было/есть благое намерение как-то поправить дела с локализацией и т.п. и т.д.. но на фоне существующих багов в ПО подобные "тонкости и политесы" явно не к месту (да и не ко времени).

возврат в Linux восле OpenBSD проходит тяжело. куда ни глянь - всюду бардак и нихера толком не работает как положено. примеры:

1) в OpenBSD-current моя wi-fi карточка (RT2500 802.11g - RaLink) - на wpa2 выдала "честные" 802.11g и держала канал как трактор накатанную колею - на полную. Linux - сперва прыгаешь с патчами, чтобы monitor mode нормально заработал (aircrack2), потом...

2) звук: в OpenBSD-current всё из коробки согласно списку поддерживаемого оборудования. Linux - ... (отсоси, потом проси...)

3) экспансия xml-конфигов в Linux без удобных средств для их редактирования (достаточно один раз поработать в Mac OS X чтобы понять, как это "для людей" делать надо)

4) Linux: бардак с hal/devkit/polkit/etc... - песнь. есть спеки - но хер поймёшь, что из этих спеков ноне работает. пример: требуется при помощи hal монтировать все "ufs" партиции с опцией "ufstype=44bsd". раньше было просто. добавляем в policy:

<merge key="storage.policy.default.mount_option.ufstype=44bsd" type="bool">true</merge>
<append key="volume.policy.mount_option.ufstype=44bsd" type="bool">true</append>

и мы в шоколаде. все строго по спекам. но нет, именно эти опции надо похерить и отдать на откуп DE (Desktop Environment), а то, что многие предпочитают не использовать DE и обходиться простыми WM-ами (Window Manager) - никого не парит.

и т.д. и т.п.. в результате получается, что c удовольствием рисуешь вот такие странички wiki, и смотришь на Linux чуток... по-другому. enterprise-то конечно из OpenBSD никакой, но...

скоро в моих репо будет всем обновление Enlightenment-DR17-svn (очень удачный и стабильный снэпшот получился) - пользуйте.

на этой мажорной ноте позвольте поздравить всех с релизом openSuSE-11.2 и откланяться.

удачи.

*/

пятница, 6 ноября 2009 г.

кратенько об openSuSE-11.2

/*
- Мы выдержали, мы выстояли, мы победили!
/Брежнев/

негоже сомневаться, что этот релиз будет принят на "ура" поклонниками свистелко-рюшегного kde, ибо теперь "галочка" kde-desktop стоит в инсталлере по умолчанию. удачи. речь пойдёт не о том. релиз намечен на 12 ноября, но кодовая база уже стабильна и Enlightenment-DR17 доступен для новой версии:

репо1 ("extended" set of available components)
репо2 ("official" minimum) - сборка для i586 в процессе

kde не понравился своей аляповатостью, тормозами и невменяемыми настройками (эт кроме багов ессно. тут отдельная история, даже писать не хочу - воротит, хотя не могу не отметить отсутствие Mono в базовом шаблоне установки kde - радует). "/etc/enlightenment/sysactions.conf" - наше всё (там элементарно настраиваются suspend, hibernate и прочие системные процедуры, помимо прочего), да и возможность устанавливать приоритет для ВСЕХ приложений/окон, контролируемых E (Settings -> Advanced -> Performance -> Application Priority) - очень радует. это гораздо более логичный подход для настройки "отзывчивости" иксов, чем перепил кода ядра (ждём, когда и эту идею адаптируют для быдломасс...).

посему, Дамы и Господа, смело можно накатить базовую систему или воспользоваться netinstall диском, если нет желания смотреть, как "-!...! плазма не падает, ЧЯДНТ!?"(c).

ядро - 2.6.31.5
e2fsprogs - 1.41.9 (можно ставить на ext4)
autoconf - 2.63
automake - 1.11
grub - 0.97 (grub-legacy)
gcc version 4.4.1 [gcc-4_4-branch revision 150839] (SUSE Linux)
java-1_6_0-openjdk - 1.6.0.0_b16 (Java 6 compatible Java Runtime Environment is based on OpenJDK 6 and IcedTea 6 - праздник!)
xorg-x11 - 7.4


OBS проекты, являющиеся основой openSuSE-11.2 (нужен Novell account!):
openSUSE:11.2
openSUSE:11.2:Contrib
openSUSE:11.2:Live
openSUSE:11.2:NonFree
openSUSE:11.2:Update

из новшеств - появление сборки ядра kernel-desktop (что ставится по умолчанию). это вариант kernel-pae cо следующими нюансами (заявлена оптимизация для десктопа, но "bfs" нам из коробки не светит...):

CONFIG_HZ_1000=y
CONFIG_HZ=1000
CONFIG_DEFAULT_IOSCHED="cfq"
CONFIG_NO_HZ=y
CONFIG_SMP=y
CONFIG_X86_BIGSMP=y
CONFIG_HIGHMEM64G=y

ничего сверхестественного. в остальном линейка ядер стандартна для oS (openSuSE): kernel-debug, kernel-default, kernel-pae, kernel-rt, kernel-trace (это вариант real-time ядра), kernel-vanilla, kernel-xen. тут только не забыть, что ядро разбито на субпакеты, в которых возможно наличие модулей для вашего железа. например:

i | kernel-desktop | Kernel optimized for the desktop | package
i | kernel-desktop-base | Kernel optimized for the desktop - base modules| package
i | kernel-desktop-devel | Development files necessary for building kernel modules

т.е. "kernel-desktop-base" по умолчанию не устанавливается, а в нём "есть многое, Горацио...". и дивный пакетик - "kernel-firmware" - многих обрадует.

после быстрой установки RC2 на ext2 (да! ибо у нас есть OpenBSD... и ext4 идёт....) начались долгожданные "приколы":

1) описанный ранее способ по прикрутке reiser4 не прокатил (WARNING: /lib/modules/2.6.31.5-0.1-desktop/updates/reiser4.ko needs unknown symbol breakpoint) - чешем на офсайт и чуток развлекаемся :)

2) многим (особенно встроенным!) звуковым картам резко поплохеет (звука не будет, феерично, ибо в OpenBSD-current/4.6 ВСЁ работает!), из дефолтного ядра модули вырезали, а к альсе пока не прикрутили (репо с kmp):
http://download.opensuse.org/repositories/multimedia:/audio:/KMP/
надеюсь, что это временная мера и за оставшиеся 6 дней появится репо/пакет с недостающими модулями. но, если оно не будет работать и дальше, - не удивлюсь ни капли. стоит заметить, что собранный вручную vanilla kernel 2.6.30.6 со звуком проблем не имел.

пересобрал для "kernel-desktop" (мне нужен "via82xx" например) из alsa-driver-kmp - соснул тунца, ибо alsaconf не увидел карточки даже с подгруженным модулем. ппц. надо попробовать откатиться на рабочий вариант из openSuSE-11.1.

рецепт лечения элементарен (выкидываем альсу, не пожалеете, в референсных мониторах разница очень хорошо различима):
* ставим:
kernel-desktop-2.6.31.5-0.1.1.i586
kernel-desktop-base-2.6.31.5-0.1.1.i586
kernel-desktop-devel-2.6.31.5-0.1.1.i586
kernel-firmware-20090821-4.1.noarch
kernel-source-2.6.31.5-0.1.1.noarch
kernel-syms-2.6.31.5-0.1.1.i586
linux-kernel-headers-2.6.31-3.4.noarch
gcc
make
"autotools"

* чешем за пряниками:
скачать OSS

* ставим:
> sudo rpm -Uhv --nodeps ./oss-linux-v4.2-2002.i386.rpm #(надо тупо обойти проверку на отсутствие kernel-devel пакета, ибо у нас он называется чуток по иному)

* стартуем "ossxmix" и кладём с пробором на alsa, pulse и прочие заморочки :)


3) смена раскладки клавиатуры непринуждённо настраивается засовыванием в автозагрузку чего-то похожего на:

#!/bin/sh
setxkbmap -layout us,ru -option grp:lctrl_lshift_toggle,grp_led:scroll -variant winkeys -model "pc(pc104)"

4) "официальные" репо для ATI/NVIDIA пока не готовы - ставим вручную (что даже лучше для целевой системы, что бы не возражали на это утверждение сторонники "пакетов").

5) хорошо, что не выкинули gfxboot с заменой на splashy (то ещё поделие...)

несмотря на статус RC2 система "сыровата". возможно это связано с новыми версиями "autotools"/devel пакетов, может аляповатость и тормознутость kde вызывают неприятие (хотя в моём случае вина на ублюдочной поддержке аудиокарточек, где openSuSE-11.2 соснула у OpenBSD-4.6). очень достойным шагом будет выкинуть нах Firefox из репо openSuSE и поставить с офсайта Mozilla - тем самым вы получите возможность обновляться без задержек и избавитесь от некоего "подтормаживания" при скроллинге страниц (хз почему, подозреваю какие-то косяки с pango - можно проверить параметры сборки, но Mozilla official и так работает без нареканий). единственное, что придётся поправить руками - пару симлинков на плагины.

многие OBS репо пока не готовы к выходу 11.2 - времени до релиза осталось не так много. ситуация повторяется. пинайте мейнтейнеров - самое время, пора прочухаться.

хвалебные оды уменьшению времени загрузки системы (и какая к буям разница, стартанёт оно за минуту или за 5 секунд - суть-то не в этом, а в том, как РАБОТАТЬ будет) и новому "гламурному" дизайну (не понравился) оставим другим. наше дело - прикрыть бронеплитой родную задницу и гарантировать спокойный сон за рабочим столом (подготовить достойный релиз SOAD Linux, лишённый недостатков "родителя")!

удачи!

P.S. недавно сравнивал последний midori и FF от Mozilla - FF откушал примерно на 5-15% больше памяти (10 вкладок, flash, JS и прочая) и субъективно уделал midori по всем остальным критериям. странно, что тест peacekeeper говорит об ином...

*/

воскресенье, 1 ноября 2009 г.

vsftpd - создание файлопомойки

/*
... есть такое слово - samba...

цели:
* выкинуть "самбу"
* анонимусов в chroot и дать им все возможности для самореализации
* локальных/виртуальных лузеров тоже в chroot по домашним каталогам
* всё файло, что зальют аноны, должно иметь mode 0666
* все новые каталоги - mode 0777 (чтобы не парить мозг с правами/чисткой и одминить удалённо тем же ftp-клиентом)
* админов сервиса - в chroot не ставить (или ставить - на выбор, лучше конечно в chroot)

платформа - OpenBSD (ибо тут есть где развернуться), но должно работать везде. подробности о том, как установить и запустить vsftpd опустим. всем пользователям прочих фтп (особенно proftpd) пожелаем удачных обновлений и не скучать :). поехали...

* создаём chroot для анонимусов:
(Прим.: лучше загнать в ~/tmp/vsftpd/anon, а одминов сервиса - в ~/tmp/vsftpd)

> mkdir -p ~/tmp/vsftpd
> chmod 555 ~/tmp/vsftpd
> sudo echo 'anon_root=!ПОЛНЫЙ_ПУТЬ!/tmp/vsftpd' > /etc/vsftpd.conf
> mkdir -p ~/tmp/vsftpd/pub
> chmod 555 ~/tmp/vsftpd/pub
> mkdir -p ~/tmp/vsftpd/upload
> chmod 777 ~/tmp/vsftpd/upload

* добиваем /etc/vsftpd.conf

# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
#anonymous_enable=NO
anonymous_enable=YES
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=000
anon_umask=000
chown_upload_mode=0666
file_open_mode=0666
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
dual_log_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/xferlog.log
vsftpd_log_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format.
# Note that the default log file location is /var/log/xferlog in this case.
xferlog_std_format=YES
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
nopriv_user=_vsftpd
ftp_username=anonftp
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
deny_email_enable=YES
# (default follows)
banned_email_file=/etc/vsftpd.banned_emails
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/ftpchroot
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
ls_recurse_enable=YES
#
#
# If enabled, vsftpd will load a list of usernames from the filename
# given by userlist_file. If a user tries to log in using a name in this
# file, they will be denied before they are asked for a password.
# This may be useful in preventing clear text passwords being transmitted.
userlist_enable=YES
#
# This option is the name of the file loaded when the userlist_enable
# option is active.
userlist_file=/etc/ftpusers
#
# This option should be the name of a directory which is empty. Also,
# the directory should not be writable by the ftp user. This directory
# is used as a secure chroot() jail at times vsftpd does not require
# filesystem access.
secure_chroot_dir=/var/empty
#
# The minimum port to allocate for PASV style data connections.
# Can be used to specify a narrow port range to assist firewalling.
pasv_min_port=49152
#
# The maximum port to allocate for PASV style data connections.
# Can be used to specify a narrow port range to assist firewalling.
pasv_max_port=65535
#
# By default, numeric IDs are shown in the user and group fields of
# directory listings. You can get textual names by enabling this parameter.
# It is off by default for performance reasons.
text_userdb_names=YES
# When "listen" directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
listen=YES


imho для новичков есть несколько моментов, заслуживающих внимания:

> sudo touch /etc/vsftpd.banned_emails
(иначе "не пойдёт!")

> sudo useradd -d !ПОЛНЫЙ_ПУТЬ!/tmp/vsftpd -s /sbin/nologin anonftp
(иначе в OpenBSD сервис не стартанёт, ибо ftp_username по-умолчанию не объявлен)

> sudo echo 'ИМЯ_ОДМИНА_СЕРВИСА' >> /etc/ftpchroot
(а все остальные гаврики встанут в chroot в своих домашних каталогах)

в "/etc/ftpusers" у нас список тех, кому доступ на ftp заказан. также у нас УЖЕ есть пользователь "_vsftpd" с шеллом "/sbin/nologin" и несуществующим домашним каталогом (требуется по nopriv_user параметру). ACHTUNG! при подобном раскладе все симлинки, "вылетающие" за chroot, идут лесом (и это правильно. в Linux используем конструкцию "mount --bind -o ro" для наполнения "~/tmp/vsftpd/pub", в OpenBSD аналога "mount --bind" нет, сосём заполняем вручную). в "~/tmp/vsftpd/pub" закидываем контент и пишем "~/tmp/vsftpd/README!" файл с общим набором правил пользования сервисом.

всё, база готова. но решение несколько не кошерно. можно (и нужно) одминов сервиса также загнать в chroot, дав им хомяка в ~/tmp, а лучше - скинув анона в ~/tmp/vsftpd/anon (и хомяк одминам в ~/tmp/vsftpd) - тогда все будут счастливо возиться в песочнице и ваш сон никто не потревожит.

на что можно обратить внимание:

anon_max_rate
The maximum data transfer rate permitted, in bytes
per second, for anonymous clients.
Default: 0 (unlimited)
local_max_rate
The maximum data transfer rate permitted, in bytes
per second, for local authenticated users.
Default: 0 (unlimited)
max_per_ip
If vsftpd is in standalone mode, this is the maxi-
mum number of clients which may be connected from
the same source internet address. A client will get
an error message if they go over this limit.
Default: 0 (unlimited)

очень нравятся настройки ниже - можно спокойно и DSA вломить:

ssl_enable=YES
# Should include both certificate and key
rsa_cert_file=/your/cert/file
force_local_logins_ssl=YES
force_local_data_ssl=YES
force_anon_data_ssl=YES
force_anon_logins_ssl=YES
ssl_ciphers=DES-CBC3-SHA

также для хостеров порно полезен параметр (файлы доступны только если знать их имя, просмотр директории их не отобразит):

hide_file={*.mp3,.hidden,hide*,*.avi}

управление дисковыми квотами оставляем за OCью (эт элементарно).

собсно наше упражнение сукесфули комплитед, все новые каталоги получают mode 777 (непринуждённо удаляются одминами сервиса), новое файло, залитое анонами, mode 666, "самба" RIP.

удачи.

*/

суббота, 31 октября 2009 г.

OpenBSD - штрихи к портрету (misc.)

/*

Страна замечательная, томики законов сразу рассылают в публичные дома, чтобы любой желающий мог повертеть на ..ю за символическую сумму.
/ЛОР/

сильнее всего мешает отсутствие поддержки multibyte encoding (utf8), что уже реализовано в NetBSD и FreeBSD. ждём-с, а пока каждый "строит коммунизм в отдельно взятой стране". ничего сложного. рассмотрим на примере терминала Eterm:

1) ставим "vim" и "w3m" (это наши будущие редактор и просмотрщик файлов/каталогов по умолчанию)

2) собсно обозначаем наши благие намерения:

> echo 'export PAGER=/usr/local/bin/w3m' >> ~/.profile
> echo 'export EDITOR=/usr/local/bin/vim' >> ~/.profile

w3m нам нужен хотя бы для просмотра (в Eterm) примонтированных партиций, поскольку команда ":edit ++enc=utf-8" в vim-е прекрасно работает с файлами, но сбоит на каталогах. EFM (Enlightenment File Manager) справляется с отображением UTF-8 на ура (особенно если evas собран с fribidi). после определения переменной PAGER это значение используется и для просмотра man-ов, что гораздо удобнее, чем дефолт ("more").

3) отучаем "mc" использовать "mcview" (рихтуем "~/.mc/ini"):

use_internal_View=0

тут же можно избавиться и от "mcedit", заменив его на $EDITOR

use_internal_edit=0

4) читаем "каноны":

http://www.openbsd.ru/docs/howto-cyrillic.html

5) делаем alias для запуска Eterm в нужной нам конфигурации:

alias eterm="Eterm -F -*-fixed-medium-r-normal-*-15-*-*-*-*-*-koi8-r"

после чего вызываем терминал по только что указанному "паттерну":

> eterm

6) опционально читаем "man w3m" и учимся эффективно использовать этот замечательный консольный браузер.

к этому моменту имеем полностью русифицированную рабочую систему, осталось лишь навести лоск в соответствии с личными предпочтениями (используем Enlightenment-DR17). рихтуем "/etc/enlightenment/sysactions.conf":

action: halt /sbin/halt -p
action: reboot /sbin/reboot
action: suspend /usr/sbin/zzz
action: hibernate /usr/sbin/zzz
user: $USER allow: *

с suspend и hibernate поосторожнее, может и не заработать. ставим из пакетов всё, что относится к "xdg*" и добавляем в "~/.profile" требуемые переменные:

export XDG_CACHE_HOME=$HOME/.cache
export XDG_CONFIG_DIRS=/etc/xdg
export XDG_CONFIG_HOME=$HOME/.config
export XDG_DATA_DIRS=/usr/share:/usr/local/share:/usr/X11R6/share
export XDG_DATA_HOME=$HOME/.local/share

после чего не мудрствуя лукаво копируем из openSuSE весь каталог "/etc/xdg/menu" (кто самый смелый - может рисовать xml-ные "менюшки" руками, автор - слабак, не осилил...). теперь мы имеем нормальное XDG/FDO Applications-menu. мелочь - а приятно.

последний штрих - не стоит менять настройки окружения root-а. как показывает практика успешная миграция на OpenBSD-current (это когда тащим cvs-ом исходники и компиляем всё сами) возможна только при буквальном соблюдении "канонов". т.е. если вы не имеете желания разбираться, какого буя сборка падает при "gcc version 4.2.4", но всё путём для "gcc version 3.3.5 (propolice)" - то не трогайте рутовое окружение (а падает оно патамучта gcc4 из пакетов имеет Thread model: posix и "_atomic_lock.c" из "libpthread" да и прочие аналогичные вещи ещё никто не рихтовал. у gcc3 Thread model: single).

всем - удачи!

*/