Вышел долгожданный релиз, главное его достоинство в том, что он просто работает и просто настраивается.
Исправлены некоторые ошибки, в том числе та самая досадная со сменой паролей:
https://bugzilla.novell.com/show_bug.cgi?id=392057
Ограничение количества соединений с ssh
Используя ssh сервер, легко можно заметить, что существуют злоумышленники которые пытаются подбирать пароли к вашим аккаунтам, или просто использовать часто встречающиеся комбинации. Это создаёт проблему в виде большого количества бесполезных и более того нежелательных соединений к вашему серверу. Модуль hashlimit из пакетного фильтра iptables позволяет интеллектуально ограничить доступ, он устанавливает индивидуальные ограничения для каждой пары srcip,dstport ( как в моем примере ).
Рассмотрим подробнее... Последняя команда отправляет все запросы на соединение с портом 22 (ssh) в цепочку ssh_input, которая действует по следующим правилам - либо запрос подтверждается и отправляется дальше, либо обработка прерывается и отправляется ответ tcp-reset. Во втором случае подсоединение к ssh будет выглядеть так, как-будто сервер не запущен.
Таким образом, в то время как ваш ssh сервер будет подвергнут flood-атаке, вы сможете беспрепятственно зайти с любой своей машины на него. В случае использования модуля limit вместо hashlimit в приведённом примере, вам бы пришлось подключаться со злоумышленником на равных условиях, т.е. из-за сработавших ограничений вы бы скорее всего не попали на сервер до окончания атаки.
Надо сказать, что --hashlimit и --hashlimit-burst в моем примере достаточно либеральны, и по накопленной статистике запросы на подключение распределяются так: треть - пропущено ( включая полезные ), две трети - отказано.
Как действуют --hashlimit и --hashlimit-burst. Легко понять на примере. Пусть у нас есть счётчик, причём каждый раз когда срабатывает правило с limit его значение увеличивается на единицу. Пусть теперь, его первоначальное значение - ноль. Далее вы пять раз соединились с ssh ( как в этом примере ) за достаточно короткое время, после этого счётчик стал равен 5. Больше значения --hashlimit-burst этот счётчик стать не может и далее правила не будут срабатывать ( в этом примере это означает что ваши запросы будут отклонены ). --hashlimit - это скорость с которой счётчик откручивается назад, например: 5/m - это значит пять раз в одну минуту значение счётчика будет уменьшено на единицу, пока не достигнет ноля. Значит, подождав 12 секунд, у вас будет ещё ровно один шанс соединиться с ssh.
iptables -N ssh_input
iptables -A ssh_input \
-m hashlimit \
--hashlimit 5/m \
--hashlimit-burst 5 \
--hashlimit-mode srcip,dstport \
--hashlimit-name ssh \
--hashlimit-htable-expire 3600000 \
-j ACCEPT
iptables -A ssh_input \
-p tcp \
-j REJECT --reject-with tcp-reset
iptables -A INPUT \
-m state -m tcp \
-p tcp --dport 22 --state NEW -j ssh_input
Рассмотрим подробнее... Последняя команда отправляет все запросы на соединение с портом 22 (ssh) в цепочку ssh_input, которая действует по следующим правилам - либо запрос подтверждается и отправляется дальше, либо обработка прерывается и отправляется ответ tcp-reset. Во втором случае подсоединение к ssh будет выглядеть так, как-будто сервер не запущен.
- --hashlimit 5/m -- подобно модулю limit, это скорость срабатываний
- --hashlimit-burst 5 -- подобно модулю limit, это максимальное количество срабатываний
- --hashlimit-mode srcip,dstport -- возможные ключевые слова srcip, dstip, srcport, dstport и любые их комбинации через запятую; hashlimit может составлять свою хэш таблицу на основе любой комбинации указанных параметров. например, при указании srcip - каждая запись будет характеризоваться адресом источника, т.е. для каждого источника будет индивидуальный лимит, независимо от других параметров. При задании например srcip,dstport - индивидуальный лимит будет для каждой пары источника и запрашиваемого им порта, т.е. с одного и того-же адреса при запросе двух разных портов на вашей машине будут разные эффекты
- --hashlimit-name ssh -- в файле /proc/net/ipt_hashlimit/ssh можно посмотреть непосредственно саму таблицу ограничений
- --hashlimit-htable-expire 3600000 -- время, которое запись будет храниться в таблице, по истечению этого времени она будет удалена, в данном примере - 1 час ( в миллисекундах )
Таким образом, в то время как ваш ssh сервер будет подвергнут flood-атаке, вы сможете беспрепятственно зайти с любой своей машины на него. В случае использования модуля limit вместо hashlimit в приведённом примере, вам бы пришлось подключаться со злоумышленником на равных условиях, т.е. из-за сработавших ограничений вы бы скорее всего не попали на сервер до окончания атаки.
Надо сказать, что --hashlimit и --hashlimit-burst в моем примере достаточно либеральны, и по накопленной статистике запросы на подключение распределяются так: треть - пропущено ( включая полезные ), две трети - отказано.
Как действуют --hashlimit и --hashlimit-burst. Легко понять на примере. Пусть у нас есть счётчик, причём каждый раз когда срабатывает правило с limit его значение увеличивается на единицу. Пусть теперь, его первоначальное значение - ноль. Далее вы пять раз соединились с ssh ( как в этом примере ) за достаточно короткое время, после этого счётчик стал равен 5. Больше значения --hashlimit-burst этот счётчик стать не может и далее правила не будут срабатывать ( в этом примере это означает что ваши запросы будут отклонены ). --hashlimit - это скорость с которой счётчик откручивается назад, например: 5/m - это значит пять раз в одну минуту значение счётчика будет уменьшено на единицу, пока не достигнет ноля. Значит, подождав 12 секунд, у вас будет ещё ровно один шанс соединиться с ssh.
Настройка списка рассылки с помощью mlmmj и postfix
http://mlmmj.mmj.dk
mlmmj -- очень простой и тривиальный менеджер списков рассылки, наверное не может сравниться с монстрами типа GNU Mailman. Но, будучи простым и тривиальным, обладает преимуществом в простоте настройки, собственно никакой настройки там и нет, открываете файл README, он помогает создать новый список, открываете TUNABLES, там написано как его сконфигурировать.
Будем считать, что Postfix уже настроен, и посылает и получает письма из внешнего мира.
Для начала, нужно изменить настройки Postfix, установив recipient_delimiter в положение '+', можно сделать либо руками в main.cf, либо командой
которая изменит main.cf и перезапустит демон.
Теперь можно создать списки рассылки как указано в README. А вот дальше начинаются проблемы с правами доступа. mlmmj хранит свое имущество в /var/spool/mlmmj, соответственно mlmmj-recieve должен иметь право туда писать.
Один из возможных вариантов -- добавить нового системного пользователя и сменить права на /var/spool/mlmmj:
Теперь нужно объяснить Postfix что делать с письмами; для этого создаем в /etc/aliases.d/mlmmj файл с нужным содержимым:
и делаем на него
Это означает, что mlmmj-recieve будет запущен Postfix от имени пользователя mlmmj ( по умолчанию он запускает от nobody, или смотри man ).
Дальше делаем
Это маленький кусочек черной магии. SuSEconfig просматривая aliases.d сам сообразит, что нужно переделать базы привязок, но для создания mlmmj.db потребуются права для пользователя mlmmj на создание файлов в aliases.d, поскольку перестройка базы привязок произойдёт от имени того пользователя, которому принадлежит файл. В конце концов, в aliases.d должны оказаться два файла mlmmj и mlmmj.db, владелец которых mlmmj, а в
скажет что-то подобное
В /etc/cron.d/mlmmj добавляем, в соответствии с инструкцией
mlmmj -- очень простой и тривиальный менеджер списков рассылки, наверное не может сравниться с монстрами типа GNU Mailman. Но, будучи простым и тривиальным, обладает преимуществом в простоте настройки, собственно никакой настройки там и нет, открываете файл README, он помогает создать новый список, открываете TUNABLES, там написано как его сконфигурировать.
Будем считать, что Postfix уже настроен, и посылает и получает письма из внешнего мира.
Для начала, нужно изменить настройки Postfix, установив recipient_delimiter в положение '+', можно сделать либо руками в main.cf, либо командой
postconf -e 'recipient_delimiter=+'
которая изменит main.cf и перезапустит демон.
Теперь можно создать списки рассылки как указано в README. А вот дальше начинаются проблемы с правами доступа. mlmmj хранит свое имущество в /var/spool/mlmmj, соответственно mlmmj-recieve должен иметь право туда писать.
Один из возможных вариантов -- добавить нового системного пользователя и сменить права на /var/spool/mlmmj:
groupadd -r mlmmj
useradd -c "User for mlmmj" -d /var/spool/mlmmj -g mlmmj -r -s mlmmj
chown mlmmj:mlmmj /var/spool/mlmmj
Теперь нужно объяснить Postfix что делать с письмами; для этого создаем в /etc/aliases.d/mlmmj файл с нужным содержимым:
mlmmj-test: "|/usr/bin/mlmmj-recieve -L /var/spool/mlmmj/mlmmj-test/"
и делаем на него
chown mlmmj:mlmmj /etc/aliases.d/mlmmj
Это означает, что mlmmj-recieve будет запущен Postfix от имени пользователя mlmmj ( по умолчанию он запускает от nobody, или смотри man ).
Дальше делаем
setfacl -m user:mlmmj:rwx /etc/aliases.d
SuSEconfig --module postfix
Это маленький кусочек черной магии. SuSEconfig просматривая aliases.d сам сообразит, что нужно переделать базы привязок, но для создания mlmmj.db потребуются права для пользователя mlmmj на создание файлов в aliases.d, поскольку перестройка базы привязок произойдёт от имени того пользователя, которому принадлежит файл. В конце концов, в aliases.d должны оказаться два файла mlmmj и mlmmj.db, владелец которых mlmmj, а в
postconf alias_maps
скажет что-то подобное
alias_maps = hash:/etc/aliases, hash:/etc/aliases.d/mlmmj
В /etc/cron.d/mlmmj добавляем, в соответствии с инструкцией
0 */2 * * * mlmmj /usr/bin/mlmmj-maintd -F -L /var/spool/mlmmj/mlmmj-test
IDE
Принтсервера D-Link
Тут товарищ вчера собственноручно подавил последнее сопротивление точки доступа D-Link'овской, которая как принт-сервер умеет работать. Модель конкретную не знаю, да и не важно. Кто-бы мог подумать что название очереди LPD будет lpUSB0. Меня больше другое удивило - под альтернативной ОС требовалась установка специальных программ для того чтобы заставить печатать по сети, однако альтернативная ОС умеет печатать через LPD из коробки практически, надо только установить драйвера нужные с диска, в интернете есть инструкций море с картинками.
Полезная ссылка прилагается: Gentoo HOWTO
Полезная ссылка прилагается: Gentoo HOWTO
eBOX-4300
Дали поиграть что-то типа такого компьютера.
Сделано на платформе VIA: VIA Eden 500Mhz и встроенная DDR2 512 Мб, из устройств хранения данных - разъём CompactFlash, который обнаруживается как Primary Slave IDE. Все в среднем работает, незначительный конфуз вышел только когда via82cxxx из ядра 2.6.18.2 (которое на загрузочном диске openSUSE 10.2) отказался признавать устройство IDE-контроллер 1106:5324 (оно-же VIA CX700M2). Однако, что интересно, такой-же модуль из 2.6.18.8 (которое в том же дистрибутиве, но в обновлениях) об этом устройстве знает. Смущают две вещи - температурный диапазон от 0°С, и торчащая из корпуса карта памяти, которая играет роль диска. С такими же размерами (12x12 см.) в этой же линейке есть и мощнее модели. Резюме такое: маленький, дешёвый и достаточно мощный, а самое главное тихий и потребляет не так много электричества.
Сделано на платформе VIA: VIA Eden 500Mhz и встроенная DDR2 512 Мб, из устройств хранения данных - разъём CompactFlash, который обнаруживается как Primary Slave IDE. Все в среднем работает, незначительный конфуз вышел только когда via82cxxx из ядра 2.6.18.2 (которое на загрузочном диске openSUSE 10.2) отказался признавать устройство IDE-контроллер 1106:5324 (оно-же VIA CX700M2). Однако, что интересно, такой-же модуль из 2.6.18.8 (которое в том же дистрибутиве, но в обновлениях) об этом устройстве знает. Смущают две вещи - температурный диапазон от 0°С, и торчащая из корпуса карта памяти, которая играет роль диска. С такими же размерами (12x12 см.) в этой же линейке есть и мощнее модели. Резюме такое: маленький, дешёвый и достаточно мощный, а самое главное тихий и потребляет не так много электричества.
00:00.0 Host bridge: VIA Technologies, Inc. CX700 Host Bridge (rev 03)
00:00.1 Host bridge: VIA Technologies, Inc. CX700 Host Bridge
00:00.2 Host bridge: VIA Technologies, Inc. CX700 Host Bridge
00:00.3 Host bridge: VIA Technologies, Inc. CX700 Host Bridge
00:00.4 Host bridge: VIA Technologies, Inc. CX700 Host Bridge
00:00.7 Host bridge: VIA Technologies, Inc. CX700 Host Bridge
00:01.0 PCI bridge: VIA Technologies, Inc. VT8237 PCI Bridge
00:08.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
00:0f.0 IDE interface: VIA Technologies, Inc. Unknown device 5324
00:10.0 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 90)
00:10.1 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 90)
00:10.4 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 90)
00:11.0 ISA bridge: VIA Technologies, Inc. CX700 PCI to ISA Bridge
00:11.7 Host bridge: VIA Technologies, Inc. CX700 Internal Module Bus
00:13.0 PCI bridge: VIA Technologies, Inc. CX700 Host Bridge
01:00.0 VGA compatible controller: VIA Technologies, Inc. Unknown device 3157 (rev 03)
02:01.0 Audio device: VIA Technologies, Inc. VIA High Definition Audio Controller (rev 10)
processor : 0
vendor_id : CentaurHauls
cpu family : 6
model : 13
model name : VIA Eden Processor 500MHz
stepping : 0
cpu MHz : 498.748
cache size : 128 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce apic sep mtrr pge cmov pat clflush acpi mmx fxsr sse sse2 tm nx up pni est tm2 xtpr rng rng_en ace ace_en ace2 ace2_en phe phe_en pmm pmm_en
bogomips : 998.55
openSUSE Build Service 0.9
Вчера вышел релиз openSUSE Build Service 0.9. Это пакет серверных приложений позволяющих собирать пакеты под различные архитектуры и дистрибутивы на удалённом сервере в практически автоматическом режиме.
От себя добавлю что версия 0.9 действительно работает и готова к установке и использованию. Пакет сопровождается свежей инструкцией по настройке и установке :). Очень важной особенностью является возможность взаимодействия с другими серверами. Теперь, например, чтобы собрать пакет под какую-то версию дистрибутива на своем сервисе не нужно держать копию всех пакетов на своём диске, ваш сервер может соединятся с build.opensuse.org и скачать от туда эти пакеты.
Установка и настройка заняла пять минут, в итоге получается нечто очень похожее на build.opensuse.org но на вашей машине. Пакеты действительно собираются. Необходимо так же особо отметить, что сборка может проводиться на нескольких машинах, объединённых в локальную сеть, что ускоряет её процесс, если в очереди много пакетов.
Написано это на ruby и использует lighttpd в качестве web-сервера. Особо хочу обратить внимания на дикие тормоза в работе всего этого.
От себя добавлю что версия 0.9 действительно работает и готова к установке и использованию. Пакет сопровождается свежей инструкцией по настройке и установке :). Очень важной особенностью является возможность взаимодействия с другими серверами. Теперь, например, чтобы собрать пакет под какую-то версию дистрибутива на своем сервисе не нужно держать копию всех пакетов на своём диске, ваш сервер может соединятся с build.opensuse.org и скачать от туда эти пакеты.
Установка и настройка заняла пять минут, в итоге получается нечто очень похожее на build.opensuse.org но на вашей машине. Пакеты действительно собираются. Необходимо так же особо отметить, что сборка может проводиться на нескольких машинах, объединённых в локальную сеть, что ускоряет её процесс, если в очереди много пакетов.
Написано это на ruby и использует lighttpd в качестве web-сервера. Особо хочу обратить внимания на дикие тормоза в работе всего этого.
Конвертер IDE/SATA на USB
Попал в закрома родины девайс. Самое ценное в этом комплекте - блок питания ноутбучного вида 220В на 4-пинное питание 5/12В. С его помощью можно питать диски 3.5 с 40-пинным IDE, или сам девайс при подключении к нему SATA устройств. Диски ноутбучного форм-фактора 2.5 c 44-пинным IDE могут питаться прямо с шины USB. Причем, если вдруг диск потребляет больше чем сможет выдать один порт, предусмотрен второй штурок USB, исключительно для снятия дополнительного питания с другого порта.
Работает через usb-storage, соответсвенно устройства опознаются как обычные SCSI-устройства.
Работает через usb-storage, соответсвенно устройства опознаются как обычные SCSI-устройства.
Сеть через IEEE1394
Сегодня поднял сеть через ieee1394 интерфейс между двумя компьютерами - заработало все сразу, стало даже не очень интересно. Применения этой штуке пока не могу придумать, но сам по себе интерфейс все больше и больше впечатляет.
Есть модуль в ядре, который называется eth1394, все остальное настраивается как обычный Ethernet-порт.
Два компьютера ( один из которых ноутбук ), были связаны через ieee1394, 3-х метровым кабелем ( 4 на 6 ) - все тривиально: один конец - в один компьютер, другой - в другой. Использовался openSUSE 10.2 с ядром 2.6.18.8.
Есть модуль в ядре, который называется eth1394, все остальное настраивается как обычный Ethernet-порт.
Два компьютера ( один из которых ноутбук ), были связаны через ieee1394, 3-х метровым кабелем ( 4 на 6 ) - все тривиально: один конец - в один компьютер, другой - в другой. Использовался openSUSE 10.2 с ядром 2.6.18.8.
ESO Midas 08FEBpl1.0
На FTP у европейцев давно валяется, анонса так и не было, терпение моё за сим лопнуло и я отправил собираться новую версию на openSUSE BuildService.
ftp://ftp.eso.org/pub/midaspub/08FEB
Репозитарии, которые добавлять:
http://download.opensuse.org/repositories/science/
Комментарии на любом известном мне языке приветствуются в почту или jabber.
ftp://ftp.eso.org/pub/midaspub/08FEB
Репозитарии, которые добавлять:
http://download.opensuse.org/repositories/science/
Комментарии на любом известном мне языке приветствуются в почту или jabber.
История о пользователях Jabber, которые никогда не слышали о Jabber.
Jabber - это основанный на XMPP протокол обмена мгновенного обмена сообщениями. Все стандарты RFC 3920, RFC 3921, RFC 3922, RFC 3923, RFC 4622, RFC 4854, RFC 4979, и около двухсот XEP'ов (XMPP Extension Protocols) могут быть найдеты на сайте www.xmpp.org
Это открытый протокол, любой человек или организация могут написать свой клиент или сервер, которые будут поддерживать протокол и расширения в том или ином объеме. Любой человек или организация могут установить на своем компьютере Jabber сервер и подключится к федерации ( ну, или не делать этого ).
Поиск в google ( который я оставляю на совести читателя ) позволяет узнать о множестве серверов и клиентов Jabber, под различные ОС, распространяемые под различными лицензиями ( естественно, в том числе и GPL ).
А теперь о тех людях, которые используют Jabber, но, возможно, никогда о нем не слышали:
Если у вас есть зарегистрированная почта на GMail или вы используете программу GTalk, вы используете XMPP. Не могли не заметить "чат" слева в веб-интерфейсе.
Если у вас есть почта GMail, но вы никогда не использовали GTalk, сначала вам следует пройти по ссылке
https://www.google.com/accounts/Login?service=talk
и ввести там ваши логин и пароль вашей учетной записи google.
Теперь вы можете использовать любой Jabber клиент ( в том числе и GTalk ), чтобы подключиться используя вашу учетную запись в GTalk/GMail.
Так же в ближайшем будущем, возможно полноценное появление официального гейта в сети AIM/ICQ на сервере google, что естественно позволит общаться с пользователями этих сетей.
Настройки:
В вашем контакт-листе автоматически будет присутствовать бот, который оповестит о новых письмах, пришедших на ваш почтовый ящик на Yandex.
LJTalk тоже использует протокол XMPP.
К сожалению, я никогда не пользовался LiveJournal. Но обещают, что так же будет присутствовать бот, который оповестит о новых комментариях.
Видимо, администрация NextMail проявила большую заботу о своих пользователях: на сервере доступны гейты в AIM/ICQ и MSN. NXT-IM тоже использует XMPP и гейты для доступа к сетям AIM/ICQ и MSN.
По сообщениям некоторых пользователей, гейты доступны для публичного доступа, т.е. можно использовать гейт в AIM/ICQ например не имея учетной записи Jabber конкретно на сервере nextmail.ru.
Используя любую из этих учетных записей вы имеете возможность общаться с любым пользователем Jabber, независимо от того, на каком сервере он использует учетную запись. Просто добавьте адрес в свой список контактов.
Просто установите Jabber клиент и зарегистрируйте себе учетную запись на любом понравившемся сервере.
Это открытый протокол, любой человек или организация могут написать свой клиент или сервер, которые будут поддерживать протокол и расширения в том или ином объеме. Любой человек или организация могут установить на своем компьютере Jabber сервер и подключится к федерации ( ну, или не делать этого ).
Поиск в google ( который я оставляю на совести читателя ) позволяет узнать о множестве серверов и клиентов Jabber, под различные ОС, распространяемые под различными лицензиями ( естественно, в том числе и GPL ).
А теперь о тех людях, которые используют Jabber, но, возможно, никогда о нем не слышали:
Пользователи GTalk/GMail
Если у вас есть зарегистрированная почта на GMail или вы используете программу GTalk, вы используете XMPP. Не могли не заметить "чат" слева в веб-интерфейсе.
Если у вас есть почта GMail, но вы никогда не использовали GTalk, сначала вам следует пройти по ссылке
https://www.google.com/accounts/Login?service=talk
и ввести там ваши логин и пароль вашей учетной записи google.
Теперь вы можете использовать любой Jabber клиент ( в том числе и GTalk ), чтобы подключиться используя вашу учетную запись в GTalk/GMail.
Так же в ближайшем будущем, возможно полноценное появление официального гейта в сети AIM/ICQ на сервере google, что естественно позволит общаться с пользователями этих сетей.
Настройки:
JabberID (JID): ваш_адрес@gmail.com
Пароль: ваш пароль
Использовать SSL
Разрешить передачу пароля открытым текстом
Сервер: talk.google.com
Порт: 5223
Пользователи почты Yandex
JabberID (JID): ваш_адрес@ya.ru ( обязательно ya.ru, даже если почта - yandex.ru )
Пароль: ваш пароль
Использовать SSL
Разрешить передачу пароля открытым текстом
Сервер: xmpp.yandex.ru
Порт: 5223
В вашем контакт-листе автоматически будет присутствовать бот, который оповестит о новых письмах, пришедших на ваш почтовый ящик на Yandex.
Пользователи LiveJournal
LJTalk тоже использует протокол XMPP.
JabberID (JID): ваш_адрес@livejournal.com
Пароль: ваш пароль
Сервер: livejournal.com
Порт: 5222
К сожалению, я никогда не пользовался LiveJournal. Но обещают, что так же будет присутствовать бот, который оповестит о новых комментариях.
Пользователи NextMail.ru
Видимо, администрация NextMail проявила большую заботу о своих пользователях: на сервере доступны гейты в AIM/ICQ и MSN. NXT-IM тоже использует XMPP и гейты для доступа к сетям AIM/ICQ и MSN.
По сообщениям некоторых пользователей, гейты доступны для публичного доступа, т.е. можно использовать гейт в AIM/ICQ например не имея учетной записи Jabber конкретно на сервере nextmail.ru.
JabberID (JID): например ваш_адрес@nextmail.ru
Пароль: ваш пароль
Использовать SSL
Разрешить передачу пароля открытым текстом
Cервер: ваш сервер
Порт: 5223
Используя любую из этих учетных записей вы имеете возможность общаться с любым пользователем Jabber, независимо от того, на каком сервере он использует учетную запись. Просто добавьте адрес в свой список контактов.
Те, кто не пользуется этими сервисами
Просто установите Jabber клиент и зарегистрируйте себе учетную запись на любом понравившемся сервере.
Борьба с Video 4 Linux 2
Сегодня я боролся с pwc драйвером, вернее с интерфейсом Video 4 Linux 2. Поскольку дома из устройств работающих через v4l оказалась только одна камера, не считая ноутбучной, и не считая цифрового фотоаппарата 2000 (!) года покупки, использовался образец Philips SPC 900NC вместе с драйвером pwc из ядра 2.6.18 и pwc 10.0.12-rc1 с ядром 2.6.8.
Пара полезных ссылок, которые должен запомнить каждый:
Теперь имею представление, как этим интерфейсом пользоваться. Написал простенькую программку, которая тут-же гордо сообщила:
или с другой камерой, Philips 840K:
А вот дальше началось самое интересное, поскольку опытным путём было выяснено, что VIDIOC_STREAMON и VIDIOC_STREAMOFF останавливает ( или запускает соответственно ) передачу и освобождают канал:
Этот факт особенно радостен, т.к. например camsource работает так, что драйвер pwc дропает неиспользованные кадры, а канал постоянно занят. Поэтому при подсоединении двух камер к компьютеру на базе Vortex86 обнаружилось, что usb-хост тянет передачу с двух камер в формате 640x480 только при максимальной компрессии, которая сказывается на качестве изображения. Т.е. это открываешь девайс, потом сцапал кадр и затаился на минуту, сцапал ещё...
В то же время, к сожалению, действие флага PWC_FPS_SNAPSHOT не было вообще обнаружено.
p.s. Перечитал этот бред и понял что с согласованием оборотов русского языка у меня действительно плохо.
Пара полезных ссылок, которые должен запомнить каждый:
Теперь имею представление, как этим интерфейсом пользоваться. Написал простенькую программку, которая тут-же гордо сообщила:
Camera capables:
Driver: pwc
Device: Philips SPC 900NC webcam
Bus: usb-0000:00:1d.2-2
Kernel: 10.0.12
Capables:
* capture
* readwrite
* streaming
Formats:
0 (1) Raw Philips Webcam [843274064]
1 (0) 4:2:0, planar, Y-Cb-Cr [842093913]
Current: 640x480 460800 842093913
или с другой камерой, Philips 840K:
Camera capables:
Driver: pwc
Device: Philips 740 webcam
Bus: usb-0000:00:10.0-1
Kernel: 10.0.12
Capables:
* capture
* readwrite
* streaming
Formats:
0 (1) Raw Philips Webcam [843274064]
1 (0) 4:2:0, planar, Y-Cb-Cr [842093913]
Current: 640x480 460800 842093913
А вот дальше началось самое интересное, поскольку опытным путём было выяснено, что VIDIOC_STREAMON и VIDIOC_STREAMOFF останавливает ( или запускает соответственно ) передачу и освобождают канал:
B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0
Этот факт особенно радостен, т.к. например camsource работает так, что драйвер pwc дропает неиспользованные кадры, а канал постоянно занят. Поэтому при подсоединении двух камер к компьютеру на базе Vortex86 обнаружилось, что usb-хост тянет передачу с двух камер в формате 640x480 только при максимальной компрессии, которая сказывается на качестве изображения. Т.е. это открываешь девайс, потом сцапал кадр и затаился на минуту, сцапал ещё...
В то же время, к сожалению, действие флага PWC_FPS_SNAPSHOT не было вообще обнаружено.
p.s. Перечитал этот бред и понял что с согласованием оборотов русского языка у меня действительно плохо.
web-камера
Опять засыпало снегом, ничего не видно уже вторые сутки. Датчики ветра опять примерзли )
А вот тут снег начал отваливаться от неё:
Веб-камеры Philips SPC 900NC, работает с pwc драйвером. Кроме нескольких замечаний, работает нормально.
update: забыл, драйвер работает на ядре linux 2.6.8.
А вот тут снег начал отваливаться от неё:
Веб-камеры Philips SPC 900NC, работает с pwc драйвером. Кроме нескольких замечаний, работает нормально.
update: забыл, драйвер работает на ядре linux 2.6.8.
Перестановка байтов
Что-то последнее время мне приходится заниматься исключительно переделыванием 16-битных целых чисел из MSB в LSB и назад. То-ли от того это что камера IIDC в непонятном формате отдает кадры, то-ли от того это что FITS в непонятном формате их хранит, но скорее всего просто потому, что компьютеры у меня x86 совместимые.
Итак, стандарт POSIX.1-2001 дает нам отличную для этого функцию - swab, в glibc 2.5 реализована она следующим образом:
По моим замерам в моей системе реализация, с эталонным количеством 51.2 мегабайт мусора, справляется в среднем за 110744 миллионных долей секунды.
Но так как просто так было не интересно, а в списке рассылок libdc1394-devel была год назад была обсуждена эта проблема и промелькнуло слово SSE2 ( кстати, новая спецификация IIDC позволит в теории указывать порядок байтов, только где-же таких камер взять нам? ), мой вариант написанный сегодня с использованием SSE2:
Компилятору gcc надо скормить -msse2, для компиляции безобразия. Работает в среднем за 98323 миллионных секунды. откуда делаем вывод, что никакого толка в этой затее нет, а происходит некое соревнование меня и оптимизатора gcc :)
p.s. На ассемблере писал первый раз в жизни... и больше не буду )
update: только вчера заметил, что можно обойтись тремя регистрами вместо четырех.
Итак, стандарт POSIX.1-2001 дает нам отличную для этого функцию - swab, в glibc 2.5 реализована она следующим образом:
void
swab (const void *bfrom, void *bto, ssize_t n)
{
const char *from = (const char *) bfrom;
char *to = (char *) bto;
n &= ~((ssize_t) 1);
while (n > 1)
{
const char b0 = from[--n], b1 = from[--n];
to[n] = b0;
to[n + 1] = b1;
}
}
По моим замерам в моей системе реализация, с эталонным количеством 51.2 мегабайт мусора, справляется в среднем за 110744 миллионных долей секунды.
Но так как просто так было не интересно, а в списке рассылок libdc1394-devel была год назад была обсуждена эта проблема и промелькнуло слово SSE2 ( кстати, новая спецификация IIDC позволит в теории указывать порядок байтов, только где-же таких камер взять нам? ), мой вариант написанный сегодня с использованием SSE2:
void swab_sse2(const void *from, void *to, ssize_t n) {
const char xmm_mask_1[] __attribute__ ((aligned(16))) = {0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};
const char xmm_mask_2[] __attribute__ ((aligned(16))) = {0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00};
const char *cfrom = (const char *) from;
char *cto = (char *) to;
asm("\
movapd (%0),%%xmm2; \n\
movapd (%1),%%xmm3; \n\
" :
: "r" (xmm_mask_1), "r" (xmm_mask_2)
);
ssize_t i = 0;
while( i < n && ( n - i ) >= 16 ){
asm("\
movupd (%0),%%xmm0; \n\
movapd %%xmm0,%%xmm1; \n\
pslldq $1,%%xmm0; \n\
psrldq $1,%%xmm1; \n\
andpd %%xmm2,%%xmm0; \n\
andpd %%xmm3,%%xmm1; \n\
orpd %%xmm0,%%xmm1; \n\
movupd %%xmm1,(%1); \n\
" :
: "r" (from + i), "r" ( to + i ) );
i += 16;
}
while ( i < n && ( n - i ) >= 2 ){
const char b0 = cfrom[i++], b1 = cfrom[i++];
cto[i - 1] = b0;
cto[i - 2] = b1;
}
}
Компилятору gcc надо скормить -msse2, для компиляции безобразия. Работает в среднем за 98323 миллионных секунды. откуда делаем вывод, что никакого толка в этой затее нет, а происходит некое соревнование меня и оптимизатора gcc :)
p.s. На ассемблере писал первый раз в жизни... и больше не буду )
update: только вчера заметил, что можно обойтись тремя регистрами вместо четырех.
Петиция VIA Technologies по поводу нормальной поддержки Linux.
Собственно, в хозяйстве: ноутбук, старинная материнка на VIA и, главное, два VIA-Epia.
Не в восторге особенно от видео на VIA-Epia, от поддержки сенсоров I2C. Хотя все остальное вроде и работает.
http://www.petitiononline.com/vialinux/petition.html
Не в восторге особенно от видео на VIA-Epia, от поддержки сенсоров I2C. Хотя все остальное вроде и работает.
http://www.petitiononline.com/vialinux/petition.html
Подписаться на:
Сообщения (Atom)