воскресенье, 27 декабря 2009 г.

Интересные сайты по микроконтроллерам и пр.

http://www.microsyl.com/ - обязательно изучить вдоль и поперек

суббота, 12 декабря 2009 г.

psi - установка jabber клиента.

Основная страница http://psi-im.org/
Качаем отсюда http://sourceforge.net/projects/psi/files/Psi/0.14/psi-0.14.tar.gz/download

Дальше все как обычно, кроме make install. Вместо DESTDIR=/xx применяем INSTALL_ROOT=/xx
И еще, при установке в bin закидывается кроме самого psi еще и psi.debug весом по 60 мег, удалил, все и без него работает

среда, 9 декабря 2009 г.

firefox = плагины и оптимизация

Поменяли открытие в табах. не удобно стало, испльзуем плагин - море настроек
Tab mix plus https://addons.mozilla.org/ru/firefox/addon/tab-mix-plus/


То что нужно непременно:

NoScript https://addons.mozilla.org/en-US/firefox/addon/722
Adblock Plus https://addons.mozilla.org/en-US/firefox/addon/1865
Flashblock https://addons.mozilla.org/en-US/firefox/addon/433
Tab Mix Plus https://addons.mozilla.org/en-US/firefox/addon/1672

Оптимизация быстродействия и памяти.

user_pref("browser.sessionhistory.max_total_viewers", 1);
user_pref("config.trim_on_minimize", true);
user_pref("nglayout.initialpaint.delay", 0);
user_pref("network.http.pipelining", true);
user_pref("network.http.pipelining.maxrequests", 8);
user_pref("network.http.proxy.pipelining", true);

==================================================
user_pref("content.notify.backoffcount", 5);
user_pref("plugin.expose_full_path", true);
user_pref("ui.submenuDelay", 0);

==================================================

Сделайте vacuum-очистку баз данных.
Firefox хранит все данные в базе sqlite, при интенсивной работе эти базы разрастаются из-за кусков пустого места, кроме того, оказываются довольно сильно фрагментированными. Операция "Vacuum" в sqlite приводит к пересозданию базы в новом файле. Таким образом удаляются все пустые места и исчезает фрагментация.

Для этого откройте "Инструменты -> Консоль ошибок", вставьте в поле "Код" следующий код:
Components.classes["@mozilla.org/browser/nav-history-service;1"].getService(Components.interfaces.nsPIPlacesDatabase).DBConnection.executeSimpleSQL("VACUUM");

Linux
find ~/.mozilla/firefox/ -name '*.sqlite' -print0 | xargs -0 -I {} sqlite3 {} "vacuum;"

Flashblock === https://addons.mozilla.org/en-US/firefox/addon/433
AdblockPlus === https://addons.mozilla.org/en-US/firefox/addon/1865

Еще для отладки и разработки:
Live Http Headers - позволяет смотреть заголовки и ответы от вебсерверов
https://addons.mozilla.org/en-US/firefox/addon/3829/

HTTP Resource Test - позволяет создавать GET/POST запросы
https://addons.mozilla.org/en-US/firefox/addon/15045/

вторник, 8 декабря 2009 г.

fdisk на "живом" диске, перечитывание таблицы разделов.

После переразбиения диска с помощью fdisk ядро до перезагрузки не перечитывает новую таблицу разделов. Что бы избежать перезагрузки и перечитать таблицу, можно использовать
partprobe /dev/sd..
или
echo 1 > /sys/block/sdc/device/rescan (сам не пробовал, но пишут, что работает)

Если при partprobe выдалась ошибка о том, что устройство занято, то надо проверить, может он куда смонтировано, или как в моем случае часть его была "подключена" к неработающему райду.

понедельник, 7 декабря 2009 г.

Настройка Apache и SSL

Почти что все утащено с http://www.freebsdrocks.ru/index.php/guides/application-installs/57-apache-22.html

Пути нужно поменять на свои.

Настроим SSL:
# mkdir /usr/local/etc/apache22/ssl.key
# mkdir /usr/local/etc/apache22/ssl.crt
# chmod 0700 /usr/local/etc/apache22/ssl.key
# chmod 0700 /usr/local/etc/apache22/ssl.crt

Создаем сертификат:
# cd /root
# openssl genrsa -des3 -out server.key 1024
# openssl req -new -key server.key -out server.csr
# openssl x509 -req -days 3650 -in /root/server.csr -signkey /root/server.key -out /root/server.crt

Сертификат будет действителен 3650 дней. Вполне достаточно, чтобы не вспоминать эту процедуру каждый год :-)
Хотите знать больше о SSL Certs, вам сюда: http://httpd.apache.org/docs-2.0/ssl/ssl_faq.html#aboutcerts


Копируем сертификаты:
# cp /root/server.key /usr/local/etc/apache22/ssl.key/
# cp /root/server.crt /usr/local/etc/apache22/ssl.crt/

Установим права:
# chmod 0400 /usr/local/etc/apache22/ssl.key/server.key
# chmod 0400 /usr/local/etc/apache22/ssl.crt/server.crt

Правим конфигурационный файл:

# cd /usr/local/etc/apache22/extra
# ee httpd-ssl.conf

Приводим к виду:

DocumentRoot "/usr/local/www/apache22/data" — смените путь на ваш httpd.conf document root.
ServerName www.example.com:443 - Смените www.example.com на ваше доменное имя (domain name).
ServerAdmin : Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript - Смените на ваш e-mail адрес
ErrorLog /var/log/httpd-error.log — Вы можете расскоментировать эту линию .
TransferLog /var/log/httpd-access.log - Вы можете расскоментировать эту линию .
SSLCertificateFile "/usr/local/etc/apache22/ssl.crt/server.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl.key/server.key"

Удаляем pass-phrase (опционально):

# cp /usr/local/etc/apache22/ssl.key/server.key /usr/local/etc/apache22/ssl.key/server.key.org
# cd /usr/local/etc/apache22/ssl.key/
# openssl rsa -in server.key.org -out server.key
Enter pass phrase for server.key.org:
writing RSA key
# chmod 400 server.key

Разрешаем HTTPS:

# ee /usr/local/etc/apache22/httpd.conf

Include etc/apache22/extra/httpd-ssl.conf

Перезапускаем APACHE:

суббота, 5 декабря 2009 г.

Видеонаблюдение и Motion

Брать здесь http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome
Ему требуется ffmpeg (вроде заточенный под него)

http://www.lavrsen.dk/foswiki/bin/view/Motion/VideoFourLinuxLoopbackDevice
http://www.lavrsen.dk/foswiki/bin/view/Motion/LoopbackDevice
video loopback
mplayer tv:// -tv device=/dev/video9:driver=v4l:input=0:width=640:height=480:normal=pal -fps 25

Video loopback (http://novotorg.net/motonpublic/15-motion-vloopback)


MjpgStreamer
(http://www.lavrsen.dk/foswiki/bin/view/Motion/MjpgStreamer)
Ну в общем-то работает. И даже вещает по заданному порту. Только у меня нужно было с video loopback девайса взять сигнал, так вот плагин input_uvc отказался с ним работать (типа не смог опросить устройство), а у плагина input_gspcav1 была проблемма с установкой palette, ну в общем пришлось его исходники варварски допилить и он таки заработал. В настоящем девайсе наверное проблеммы такой не будет.
Запускалось все это вроде так =
mjpg_streamer --input "input_gspcav1.so -d /dev/video9" --output "output_http.so -p 8084"
Ну и еще допилить плагин output_http, в нем "фишек" разных много реализовано, кот. мне не нужны были (типа доп. параметров - вывод статической картинки, вывод потока и прочего). А мне просто нужно было как в motion сделать, "присосался" к нужному порту и получай поток. Еще из минусов input_gspcav1 - он не умеет ограничивать fps как в плагине input_uvc, в итоге firefox на удаленной машине получает поток реальных кадров (к примеру 25fps) и начинает дико кушать ресурсы (память и проц). И практически виснет через короткое время. В общем надо будет самому прикрутить делитель fps.

И пару слов, а на кой мне это все надо было пробовать.
Не знаю как у вас, а у меня motion (версия 3.2.11.1) когда почуял движение выдает загрузку проца что-то около 27-33% (htop). Так вот если в этот момент брать поток (в смысле смотреть через "сетку") на удаленном компьютере, загрузка motion возрастает практически в 2 раза. Даже если ограничить webcam_maxrate 2. Казалось бы куда уж ниже (1 и так по умолчанию). Вот с помощью video loopback и mjpg_streamer и удалось "решить" эту проблему. При это связке загрузка проца вырастала дополнительно на 5-10%, что конечно гораздо меньше чем было с одним motion и его встроенном сервере.
Затем покопав исходник motion.c нашел там интересный момент, при сработке детектора он начинает отправлять ВСЕ полученные кадры в функцию webcam_put (что в webcam.c), та выделяет память под буфер, формирует его, список клиентов и пр. и уже только ПОСЛЕ этого "принимается" решение а вообще его слать или нет в соответствии с заданным webcam_maxrate (расчитывается время прошлого кадра, теперешнее време - что-то вроде этого). Сделано там с одной стороны все правильно и логично, НО! зачем к примеру при fps=2 обрабатывать 25 кадров, выделяя под них динамически память и копируя туда-сюда. ну в общем как-то так. Более детально я в исходник не лез, мало времени, а заказчику надо уже сдаваться.
Так что на скору руку подкрутил здесь строку, добавив в нее инструкцию по отправлению каждого 5 кадра в функцию webcum_put(). Что при условии fps=25 на входе, на выходе (webcam) получим:
первый кадр отправляем в любом случае, а дальше 5,10,15,20 -- fps=5

вот что было
if (conf->webcam_motion && !conf->setup_mode && img->shot != 1)
event(cnt, EVENT_WEBCAM, img->image, NULL, NULL, &img->timestamp_tm);

вот что получилось
if (conf->webcam_motion && !conf->setup_mode && img->shot != 1 && img->shot%5 == 0)
event(cnt, EVENT_WEBCAM, img->image, NULL, NULL, &img->timestamp_tm);

При этом загрузка проца при просмотре со встроенного в motion сервера возрастает с 30% (засекли движение, но не смотрим с порта) до 40% (есть движение и смотрим). что для меня вполне приемлемо. топорное и "тупое" решение. Можно было бы сделать все это поизящнее, но время поджимает и главное лень. работает ведь.
Будут мысли или уточнения, критика? Может кто уже наступал на эти грабли?

В общем можно на скору руку именно в webcam.c (stream.c) в функции webcam_put (stream_put) после переменных и строки
Код:
char len[20]; /* will be used for sprintf, must be >= 16 */

добавить что-то вроде этого:
Код:
if (! (( cnt->shots%3 ==0 && cnt->shots != 0 ) || cnt->shots == 1 )) return;

т.е. примитивно выпрыгиваем из функции ничего не делая если не удвлетворяем условиям отбора кадров. (а еще раскрыть скобки в условии и применить not и записать по-людски)
В данном примере будет на порт выводиться примерно каждый 3 кадр. При этом motion.c не трогаем, пусть живет.

Посмотрел на загрузку проца, такая же как и при правке motion.c (а с чего ей и изменяться существенно, принцип фильтрации кадров тот же).

вторник, 1 декабря 2009 г.

Переустановка сервера

Поднять сервер на софтовом райде. Можно сначала разбить диски и создать райд, а потом на него поставить.

Для начала дать файлы и интернет. Затем уже все остальное.

1. Файлы паролей. Проверить номер группы users и добавить недостающие группы. скорректировать файлы /etc/group /etc/passwd /etc/shadow

2. Samba - скопировать и допилить конфиги. Ну и конечно скопировать данные. Сделать скрипт запускаемым.

3. Firewall - копируем наш rc.firewall

4. Сетевые интерфейсы определялись не в том порядке eth1 eth0. Надо было подкрутить номера в /etc/udev/rules.d/70-persistent-net.rules

5. ДНС (DNS). Копируем /var/named /etc/named.conf /etc/resolv.conf. И делаеам запускаемым /etc/rc.d/rc.bind
Так же в /var/log/messages валяться в огромном количестве строчки вида network unreachable resolving. Это из-за попытки работать с IPv6. Отредактируем в /etc/rc.d/rc.bind запуск named с ключем -4, тем самым заставив его работать только с версией IPv4.

6. Интернет. В /etc/ppp копируем прежний конфиг и подкручиваем запуск в /etc/rc.d/rc.local

7. Squid. брать здесь = http://www.squid-cache.org/Versions/
собирать с опцией --enable-delay-pools
и проверить права на лог-каталоги и каталог кэша /usr/local/squid/var/...
запускать с ключем "/usr/local/squid/sbin/squid -z" для создания каталогов кэша
настройки копируем со старого сервера, и не забыть подкрутить права и собственника (nobody.nogroup) на каталоги
добавляем запуск в /etc/rc.d/rc.local в виде squid -D т.е. без проверки ДНС потому как интернета на момент запуска проксика может и не оказаться.

Далее уже по мере сил и желания поднимаем все остальное.

8. Mysql. Смонтируем все базы в /var/lib/mysql. Сделать исполняемым /etc/rc.d/rc.mysqld

9. Jabber берем здесь http://codex.xiaoka.com/wiki/jabberd2:start
Этой ... понадобилась либа udns, взять здесь http://www.corpit.ru/mjt/udns.html#download. Но на нормальный make install у них видно не хватило ума. Короче здесь http://repository.slacky.eu/slackware-12.2/libraries/udns/0.0.9/src/udns.SlackBuild есть билд скрипт для слаквари (или самому ручками файлы затолкать куда надо).
Еще нужен gsasl здесь http://www.gnu.org/software/gsasl/#downloading
Так же надо вручную создать каталоги /usr/local/var/{db,log,pid} и выставить права доступа к ним
Ну и настройки берем от старого конфига.
Есть еще конфиг пользователей, который через скрипт загоняется в базу jabber. Надо объеденить все эти разрозненные конфиги.

10. Сервер времени. Копируем /etc/ntp.conf /etc/adjtime и делаем исполняемым /etc/rc.d/rc.ntpd
Надо еще подкрутить adjtime !!!!

11. Запустить скрипт UPS (это надо было сделать в самом начале).

12. Скрипт для byfly. Понадобились перл модули LWP, Text::Iconv, IO::Socket::SSL.

13. Так же для сообщений внутри сети потребовался модуль Net::Jabber.

14. Слежение и перезапуск интернета.

15. mldonkey брать здесь http://mldonkey.sourceforge.net/Main_Page. Ему как обычно очень нужен Ocaml который он прделожит скачать с сайта caml.inria.fr
Скопировать настройки downloads.ini, users.ini, donkey.ini
Еще для скриптов включающих настройки mldonkey по telnet нужен модуль Net::Telnet

16. Обновление НСПИ, создать правильный симлинк

17. Напоминалка и очищалка общественного хранилища файлов. У нее есть свой конфиг для отправки напоминаний пользователям - его надо допилить.

18. Напоминалка о почте. понадобился модуль Net::IMAP::Client.

19. Монитор слежения за температурами и системой.
Выполнил sensors-detect. В результате стало ясно, что модуль для чипа it87 - добавить в rc.local
hddtemp - скомпилировать и добавить в базу винтов наши винты
Допилить скрипт.

20. Подсчет трафика - понадобился модуль Date::Simple

21. Apache. Нужно перенести настройки или создать по новой. Не забыть про копирование или генерацию ключа SSL.
Скопировать все скрипты из cgi-bin и инфо из htdocs

22. Для авторизации пользователей нужен еще модуль CGI::Session
Spreadsheet::WriteExcel

23. Х-терминалы
Копируем /tftpboot /opt/ltsp /home/xterm /etc/dhcpd.conf /etc/export /etc/rc.d/rc.xterm (в нем запускается dhcpd и прочие нужные действия)
/etc/rc.d/rc.nfsd делаем исполняемым
/etc/rc.d/rc.local добавляем запуск rc.xterm
в /etc/inetd.conf раскоментировать протокол tftp и перезапустить демон /etc/rc.d/rc.inetd restart
копируем /etc/ssh/sshd_config и перезапускаем демон /etc/rc.d/rc.sshd restart

24. Модуль Time::Simple
Chart::Points
XBase

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

Компиляция модуля ядра

Понадобилось перекомпилить ОДИН модуль ядра.
Заходим в каталог с модулем, правим исходники и затем:

make -C /usr/src/linux-`uname -r` SUBDIRS=$PWD modules

Правда потом надо было еще вручную подбросить их в соответствующий каталог в /lib/....

Про то как заставить работать Orient HW-504 http://novotorg.net/video-linux/13-orienthw-504
Целиком утащил с сайта автора - не для того что бы обидеть, а что бы было всегда под рукой.
===========================================================================================
Устанавливаю ее в компьютер и вижу, что моя система (Debian Etch 4.0) её увидела, но не опознала. Вернее опознала как четыре UNKNOWN/GENERIC карты с кодеками SAA7130 от Philips (хотя во всех обзорах и прайсах писали о BT878A) и предложила мне выбрать модель карты из списка, в котором ничего похожего на Orient HW-504 я не обнаружил. Ну что ж, отчаиваться рано. Несколько дней проведённых в Google привел меня к мысли, что надо самому пробовать осуществить поддержку моей карты модулем SAA7134. Собственно эта статья о том, как это сделать. Для нормальной работы карты необходимо правильно инициализировать её регистры. Выяснить параметры инициализации можно с помощью программы flytest.Работает она под Windows, как и софт, который идет в комплекте с картой. И так. Устанавливаем карту в компьютер, загружаем Windows, инсталлируем драйвера и софт. Перед рестартом системы надо удалить запуск программы DVR из автозагрузки. Рестарт. Запускаем программу flytest, я использовал версию 1.5, далее надо выбрать чип из выпадающего списка и нажать кнопку “Dump SAA713x PCI registers” из полученной информации нам потребуется следующее:

SAA7130 (0x7130, SubVenID:1131, SubDevID:0000, Rev: 01)

I2C slave devices found:
No devices

GPIO pins:
Mode: 0x00389200
Value: 0x00010000

Video input: 3
Audio input: Analog Line1

Далее необходимо проделать тоже самое для остальных чипов платы. Получится следующее:

SAA7130 (0x7130, SubVenID:1131, SubDevID:0000, Rev: 01)

I2C slave devices found:
No devices

GPIO pins:
Mode : 0x00389200
Value: 0x0001FC00

Video input: 3
Audio input: Analog Line1

Для второго чипа

SAA7130 (0x7130, SubVenID:1131, SubDevID:0000, Rev: 01)

I2C slave devices found:
No devices

GPIO pins:
Mode : 0x00389200
Value: 0x00010000

Video input: 3
Audio input: Analog Line1

Для третьего чипа

SAA7130 (0x7130, SubVenID:1131, SubDevID:0000, Rev: 01)

I2C slave devices found:
No devices

GPIO pins:
Mode : 0x00389200
Value: 0x00010000

Video input: 3
Audio input: Analog Line1

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

SAA7130 (0x7130, SubVenID:1131, SubDevID:0000, Rev: 01)

I2C slave devices found:
No devices

GPIO pins:
Mode : 0x00389C00
Value: 0x00016C00

Video input: 3
Audio input: Analog Line1

Для первого чипа

SAA7130 (0x7130, SubVenID:1131, SubDevID:0000, Rev: 01)

I2C slave devices found:
No devices

GPIO pins:
Mode : 0x00389200
Value: 0x00010000

Video input: 3
Audio input: Analog Line1

Для второго чипа

SAA7130 (0x7130, SubVenID:1131, SubDevID:0000, Rev: 01)

I2C slave devices found:
No devices

GPIO pins:
Mode : 0x00389200
Value: 0x00010000

Video input: 3
Audio input: Analog Line1

Для третьего чипа

SAA7130 (0x7130, SubVenID:1131, SubDevID:0000, Rev: 01)

I2C slave devices found:
No devices

GPIO pins:
Mode : 0x00389200
Value: 0x00010000

Video input: 3
Audio input: Analog Line1

Для четвертого чипа.
Это вся информация, которую можно получить в Windows для удачной правки модуля SAA7134. Все дальнейшие действия надо проводить в Linux, я использую Debian Etch 4.0. Для получения дополнительной информации надо выполнить команду lspci –vn (утилита v4l-info входит в состав пакета xawtv).
Интерес для нас представляет только та часть лога команды, где фигурирует Subsystem: 1131:0000 (Subsystem = SubVenID & SubDevID, которые берем из лога программы flytest).
Вот часть лога, интересная для нас:

02:0c.0 0480: 1131:7130 (rev 01)
Subsystem: 1131:0000
Flags: bus master, medium devsel, latency 64, IRQ 201
Memory at fe9ff000 (32-bit, non-prefetchable) [size=1K]
Capabilities: [40] Power Management version 1

02:0d.0 0480: 1131:7130 (rev 01)
Subsystem: 1131:0000
Flags: bus master, medium devsel, latency 64, IRQ 185
Memory at fe9ff400 (32-bit, non-prefetchable) [size=1K]
Capabilities: [40] Power Management version 1

02:0e.0 0480: 1131:7130 (rev 01)
Subsystem: 1131:0000
Flags: bus master, medium devsel, latency 64, IRQ 177
Memory at fe9ff800 (32-bit, non-prefetchable) [size=1K]
Capabilities: [40] Power Management version 1

02:0f.0 0480: 1131:7130 (rev 01)
Subsystem: 1131:0000
Flags: bus master, medium devsel, latency 64, IRQ 169
Memory at fe9ffc00 (32-bit, non-prefetchable) [size=1K]
Capabilities: [40] Power Management version 1

Поля первой строки имеют следующие значения:

PCI ID DeviceClass Vendor ID Device ID
02:0c.0 0480 1131 7130

Ну вот, теперь у нас имеются все необходимые данные, пора ковырять модуль SAA7134. Сначала надо установить исходные тексты ядра, запускаем aptitude и устанавливаем пакет linux-source-2.6.18 со всеми зависимостями. После этого в каталоге /usr/src/ появится архив с исходными текстами, распакуем их в каталог /usr/src/linux-source-2.6.18/. Я пользуюсь Midnight Commander’ом, поэтому не привожу здесь консольные команды. Переходим в каталог /usr/src/linux-source-2.6.18/drivers/media/video/ и на всякий случай делаем копию каталога ./saa7134/ в ./saa7134_orig/. Дальнейшие действия делаем в «родном» каталоге ./saa7134/.
Открываем для редактирования файл saa7134.h, находим там список карт, из которого нам в самом начале предлагалось выбрать кару. В самый конец добавляем нашу карту, назовем ее SAA7134_BOARD_ORIENT_HW_504 и присваиваем ей следующий номер 96:

#define SAA7134_BOARD_AVERMEDIA_A169_B1 92
#define SAA7134_BOARD_MD7134_BRIDGE_2 93
#define SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS 94
#define SAA7134_BOARD_FLYVIDEO3000_NTSC 95
#define SAA7134_BOARD_ORIENT_HW_504 96

#define SAA7134_MAXBOARDS 8
#define SAA7134_INPUT_MAX 8

/* ----------------------------------------------------------- */

Сохраняемся, закрываем файл.
Открываем для редактирования файл saa7134-input.c, находим там вот такой участок кода и добавляем нашу карту:

/* detect & configure */
switch (dev->board) {
case SAA7134_BOARD_FLYVIDEO2000:
case SAA7134_BOARD_FLYVIDEO3000:
case SAA7134_BOARD_ORIENT_HW_504:
case SAA7134_BOARD_FLYTVPLATINUM_FM:
case SAA7134_BOARD_FLYTVPLATINUM_MINI2:
ir_codes = ir_codes_flyvideo;
mask_keycode = 0xEC00000;
mask_keydown = 0x0040000;
break;

Больше в этом файле ничего писать не надо, т.к. пульта ДУ у карты нет. Сохраняемся, закрываем файл.
Открываем для редактирования файл saa7134-cards.c, находим там вот такой участок кода и добавляем описание нашей карты:

.radio = {
.name = name_radio,
.amux = LINE2,
.gpio = 0x2000,
},
.mute = {
.name = name_mute,
.amux = TV,
.gpio = 0x8000,
},
},
[SAA7134_BOARD_ORIENT_HW_504] = {
/* Orient HW-504 (Возможно Orient HW-508 и Hawell HW-404M7) */
/* Богословский Виктор E-mail: Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript */
.name = "Orient HW-504",
.audio_clock = 0x00200000,
.tuner_type = UNSET,
.radio_type = UNSET,
.tuner_addr = ADDR_UNSET,
.radio_addr = ADDR_UNSET,

.gpiomask = 0x01fc00,
.inputs = {{
.name = name_comp1, /* название входа */
.vmux = 3, /* номер канала видео микшера */
.amux = LINE1, /* название канала аудио микшера */
.gpio = 0x389c00, /* битовая маска GPIO */
}
}},[ [SAA7134_BOARD_FLYVIDEO2000] = {
/* "TC Wan" < Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript > */
.name = "LifeView/Typhoon FlyVIDEO2000",
.audio_clock = 0x00200000,
.tuner_type = TUNER_LG_PAL_NEW_TAPC,
.radio_type = UNSET,
.tuner_addr = ADDR_UNSET,
.radio_addr = ADDR_UNSET,

Думаю, будет уместно рассмотреть здесь поля структуры SAA7134_BOARD_ORIENT_HW_504

* .name – имя карты, которое будет присвоено ей после определения модулем, пишем "Orient HW-504"
* .audio_clock - аудио частота (как правило, 2 варианта 0x00200000 или 0x00187de7) и хотя аудио наша плата не поддерживает, я написал 0x00200000
* .tuner_type – тип TV тюнера у нас, его нет, пишем UNSET
* .radio_type – тип радио, и его у нас нет, пишем UNSET
* .tuner_addr – адрес TV тюнера, пишем ADDR_UNSET
* .radio_ addr – адрес радио, пишем ADDR_UNSET
* .gpiomask – битовая маска GPIO оказывает самое важное влияет на работу платы в целом. Значение маски GPIO можно получить путем побитового сложения всех его значений (берем все значения GPIO Value из программы flytest), т.е. 0x00010000 | 0x0001FC00 | 0x00016C00 = 0x01fc00, пишем 0x01fc00
* .name – название входа, пишем name_comp1
* .vmux – номер канала видео микшера, смотрим лог программы flytest - Video input: 3, пишем 3
* .amux – название канала аудио микшера, пишем LINE1 (flytest – Audio input: Analog Line1), думаю можно вообще не описывать этот параметр, т.к. аудио наша плата не поддерживает
* .gpio – Возможно надо формировать так же, как gpiomask , я полностью не разобрался и просто взял значение из первого чипа, после инициализации (flytest – GPIO Mode: 0x00389C00), тем более результат будет таким же, пишем 0x389c00

Далее в этом же файле ищем вот такой участок кода и добавляем описание нашей карты, как устройства в целом, для того, чтобы модуль смог сам опознать карту:

.vendor = PCI_VENDOR_ID_PHILIPS,
.device = PCI_DEVICE_ID_PHILIPS_SAA7134,
.subvendor = 0x4e42, /* "Typhoon PCI Capture TV Card" Art.No. 50673 */
.subdevice = 0x0138,
.driver_data = SAA7134_BOARD_FLYVIDEO3000,
},{
.vendor = 0x1131,
.device = 0x7130,
.subvendor = 0x1131, .subdevice = 0x0000,
.driver_data = SAA7134_BOARD_ORIENT_HW_504,
},{
.vendor = PCI_VENDOR_ID_PHILIPS,
.device = PCI_DEVICE_ID_PHILIPS_SAA7130,
.subvendor = 0x5168,
.subdevice = 0x0138,
.driver_data = SAA7134_BOARD_FLYVIDEO2000,

Здесь поля структуры имеют следующие значения:

* .vendor – берем из лога команды lspci –vn Vendor ID, пишем 0x1131 (можно PCI_VENDOR_ID_PHILIPS)
* .device – берем из лога команды lspci –vn Device ID, пишем 0x7130 (можно PCI_DEVICE_ID_PHILIPS_SAA7130)
* .subvendor – берем из лога программы flytest - SubVenID, пишем 0x1131
* .subdevice – берем из лога программы flytest - SubDevID, пишем 0x0000
* .driver_data – то, как назвали карту в файле saa7134.h, пишем SAA7134_BOARD_ORIENT_HW_504

Сохраняемся, закрываем файл.
Ну вот, все необходимые исправления сделаны, пора компилировать наш новый модуль. Переходим в каталог /usr/src/linux-source-2.6.18/ и выполняем следующие команды:
make oldconfig – для сохранения текущей конфигурации и
make modules – для компиляции модулей.
Возможно, гуру поморщатся и предложат еще десяток «самых правильных» вариантов компиляции, но гуру почему-то таких статей не пишут и наверное не читают, так что все в порядке.
После завершения компиляции копируем из каталога:
/usr/src/linux-source-2.6.18/drivers/media/video/ файлы:

saa6752hs.ko,

saa7134.ko,

saa7134-alsa.ko,

saa7134-dvb.ko,

saa7134-empress.ko,

saa7134-oss.ko

в каталог: /lib/modules/2.6.18-4-686/kernel/drivers/media/video/saa7134/, предварительно сохранив оригинальные файлы. Теперь можно очистить исходные тексты, от результатов компиляции выполнив команду make clean и перезагрузить систему.
Чтобы посмотреть загрузился ли наш модуль надо выполнить команду v4l-info /dev/video0 | head -n 9 (утилита v4l-info входит в состав пакета xawtv) вот результат ее работы:

### v4l2 device info [/dev/video0] ###
general info
VIDIOC_QUERYCAP
driver : "saa7134"
card : "Orient HW-504"
bus_info : "PCI:0000:02:0c.0"
version : 0.2.14
capabilities : 0x5000015 [VIDEO_CAPTURE,VIDEO_OVERLAY,VBI_CAPTURE,READWRITE,STREAMING]

А чтобы посмотреть, как она работает надо выполнить команду:

xawtv -nodga -noxv -geometry 640x480 -c /dev/video0

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

Программный (soft) RAID массив.

Есть два диска. Грузимся с DVD и с одним диском устанавливаем slackware как обычно.

Создаем через cfdisk или fdisk идентичные разделы, или c помощью sfdisk автоматически копируем структуру разделов первого диска /dev/sda:
sfdisk -d /dev/sda | sfdisk /dev/sdb

Затем на втором диске надо сделать тип разделов "Linux raid autodetect" c кодом 0xFD!!!

mdadm --create /dev/md0 -l 1 -n 2 /dev/sdb2 missing
мы создаем и запускаем райд с level=1 (-l 1) на двух дисках (-n 2) причем указываем только диск /dev/sdb2, а /dev/sda2 указываем отсутвующим (missing)
А когда закончим с созданием и загрузкой с райда, добавим второй диск (mdadm --add /dev/md0 /dev/sda2)

И так аналогично для всех остальных разделов райда. Проверить можно глянув в /proc/mdstat

Теперь создаем файловую систему на разделах райда
mkfs.ext4 -j /dev/md0
mkfs.ext4 -j /dev/md1
и т.д.

Создадим файлик с конфигами (хотя как говорят, смысла в этом особого нет, все и так работает)
mdadm --detail --scan > /etc/mdadm.conf
можно скопировать предварительно старый

Создадим каталог для переноса файлов на райд
mkdir /mnt/raid
и смонтируем его и прочие каталоги райда (глянте в fstab)
в моем случае все два раздела - корень и /var т.е.

mount /dev/md0 /mnt/raid
mkdir /mnt/raid/var
mount /dev/md1 /mnt/raid/var

Ну а теперь копируем (с сохранением ВСЕХ атрибутов, ключ -a) все и вся (перечень каталогов с ключиком -r) с нашей работающей системы на райд. КРОМЕ каталогов /dev /proc /sys - их система создает динамически (я их создаю руками, не забыть права 755 = dev,sys 555 = proc). Ну и с /mnt вручную перекинуть, что бы не утворить рекурсивное копирование райда в самого в себя (вряд ли получиться)

cp -ar bin home и т.д. /mnt/raid

Теперь надо на разделе с райдом (/mnt/raid/) подкрутить /etc/fstab и отредактировать его на использование для корня /dev/md0 и для /var /dev/md1

Еще один "сложный" момент загрузчик lilo
boot = /dev/md0
raid-extra-boot = /dev/sda,/dev/sdb #потом поменяем, когда полностью поднимем райд на mbr, а можем и не менять
root = /dev/md0
Что бы установить новый загрузчик придется передать ему параметр -r с новым корневым каталогом (/mnt/raid), а так же параметр -H, т.к. не оба диска включены в райд
И еще надо пробросить /dev в /mnt/raid/dev
mount /dev /mnt/raid/dev -o bind
и вот теперь
lilo -H -r /mnt/raid
лило поругается

Теперь добавим недостающие диски в райд, для этого поменяем их тип с помощью fdisk на fd, а затем
mdadm --add /dev/md0 -/dev/sda2
и так для всех остальных дисков
Можно посмотреть на процес зеркалирования в /proc/mdstat

Есть альтернативны способ с помощью raidtools http://people.redhat.com/mingo/raidtools/
В общем про установку райда все.

Теперь если случилось страшное и один из дисков "заболел"
http://meandubuntu.ru/2009/04/mdadm-%D0%B1%D0%B8%D1%82%D1%8B%D0%B9-%D0%B4%D0%B8%D1%81%D0%BA-%D0%B1%D0%B5%D0%B7-%D0%BF%D0%B0%D0%BD%D0%B8%D0%BA%D0%B8/ - это статья о том, что SMART может повлиять на монтирование софт райда и как это можно побороть. Цитата:
"Поставив пакет smartmontools, я вывел всю инфу по сбойному диску, в которой не нашел никаких отклонений. После некоторых раздумий, я запустил тест диска по команде smartctl –test=short /dev/sdb… Пришлось ждать целых 2 минут, пока закончится тестирование " После этого у автора собрался и заработал райд, а до этого падал mdadm с ошибкой "faulty spare rebuilding"

Если уж совсем все плохо с диском, то его надо пометить сбойным (он и так уже будет помечен) и отключить.
mdadm --fail /dev/md0 /dev/sdb1
mdadm --remove /dev/md0 /dev/sdb1
затем заменить диск, "разбить" его и добавить к райду
mdadm --add ........

Ну и еще такой момент: JBD: barrier-based sync failed on md1 – disabling barriers
Такое вот предупреждение выдает dmesg. Вообщем то с этим жить можно. Можно решить проблему добавив в параметры монтирования фс barrier=0. Вот здесь есть инфо (англ) http://kernelnewbies.org/Ext4

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

Прием спутникового телевидения и спутниковая рыбалка.

Прием спутникового телевидения и спутниковая рыбалка.

LinuxTV dvb-apps
http://www.linuxtv.org/wiki/index.php/LinuxTV_dvb-apps
Это набор утилит для сканирования каналов (scan и dvbscan), настройки (szap czap)и библиотеки.

Справочное пособие для Video Disk Recorder (VDR) от Клауса Шмидингера
http://www.free-x.de/wiki/index.php/

The Video Disk Recorder
http://www.tvdr.de/

как настроить DVB в Slackware Linux
http://litec.ru/page.php?id=19

Цифровое небо, или организуем прием спутникового вещания
http://av5.com/journals-magazines-online/1/6/68

Спутниковый интернет на SkyStar1 и SkyStar2 под Linux
http://www.opennet.ru/docs/RUS/linuxsat/

http://wiki.linuxmce.ru/index.php/VDR
http://www.fedoralinux.ru/forum/viewtopic.php?id=1409
http://www.satnavigator.ru/page-id-42.html

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

Полезные ссылки по Linux and Slackware

http://pingvinus.ru/programs/text/editors - обзор редакторов Linux

четверг, 15 октября 2009 г.

Abiword

Скачал http://www.abisource.com/downloads/abiword/2.6.8/source/

Тут же потребовался:
http://ftp.gnome.org/pub/gnome/sources/libgnomeprint/
---> http://ftp.gnome.org/pub/gnome/sources/libgnomecups/
http://ftp.gnome.org/pub/gnome/sources/libgnomeprintui/
---> http://ftp.gnome.org/pub/gnome/sources/libgnomecanvas/

http://sourceforge.net/projects/wvware/ (http://wvware.sourceforge.net/) Вот ее я и не скомпилил, вывалило на ошибки, надоело. Взял с http://repository.slacky.eu/slackware-13.0/libraries/wv/
Да и аби здесь же прихватил.

Проверка русского языка взята здесь ftp://ftp.gnu.org/gnu/aspell/dict/0index.html
Скомпилировал и порядок.

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

Хороший терминал urxvt и "плохие" клавиши Home и End

Терминал urxvt "неправильно" обрабатывает Home и End. Нужно добавить в ~/.Xdefaults

URxvt*keysym.Home: \033[1~
URxvt*keysym.End: \033[4~

Также выяснилось, что после изменения не работают клавиши Home и End в mc, но это легко решилось настройками распознавания клавиш (F9 -> Настройки -> Обучение клавиш).

Так же по urxvt. При инсталяции он компилирует описание терминала в домашний каталог ~/.terminfo/r/rxvt-unicode. НО! из-за этого при этом при запуске от другого пользователя не работает как надо. Выход - скопировать этот файлик в общую базу известных терминалов /usr/share/terminfo/r/
Если в домашнем каталоге этого файла нет, его можно скомпилировать вручную.
tic rxvt-unicode.terminfo
Этот файл находится в исходниках ./doc/etc
Второй путь, это сразу выполнять из-под root make install DESTDIR=/... Тогда файлик попадет куда нужно (/usr/share/terminfo).



~/.bashrc
#привычное приглашение баша
export PS1="\u@\h:\w$ "
export PATH=/usr/local/sbin:/usr/sbin:/sbin:$PATH

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

Slackware 13

Установил.
1. DVD (sata) подхватился автоматом.

2. Переключение в Х клавиатуры с помощью HAL взято тут
======= Первый вариант:
в /etc/X11/xorg.conf
вставляется следующее:
Section "ServerFlags"
Option "AutoAddDevices" "false"
Option "AllowEmptyInput" "false"
EndSection
после этого работают настройки клавиатуры из xorg.conf

======= Второй вариант:
Надо из /usr/share/hal/fdi/policy/10osvendor/10-keymap.fdi скопировать в /etc/hal/policy и отредактировать
<merge key="input.xkb.options" type="string"> terminate:ctrl_alt_bksp,grp:caps_toggle </merge>
<merge key="input.xkb.layout" type="string"> us,ru </merge>
<merge key="input.xkb.variant" type="string"> ,winkeys </merge>
Надо обязательно перезапустить hal - /etc/rc.d/rc.hald restart и перестартануть иксы
Ну и еще можно посмотреть изменения lshal | grep 'input.x'

3. OpenOffice совет по установке http://linux16.net/node/495, а именно в дистре Ооо выполнить rpm --install --nodeps --force *.rpm, хотя я обычно перегонял рпм в тгз

4. Темы для IceWM http://www.box-look.org/content/download.php?content=101203& id=1&tan=7264456

5. IceWM
Установка PcmanFM. скомпилировал, нужны темы иконок от Tango http://tango.freedesktop.org/Tango_Icon_Library
там два пакета icon-naming-utils-0.8.90.tar.gz и tango-icon-theme-0.8.90.tar.gz
Скомпилировал. Установил.
В ~/.gtkrc-2.0 (создал заново) добавил строчку
gtk-icon-theme-name="Tango"
После этого PcmanFM заработал.

6. XXKB - переключалка и индикатор клавиатуры
http://sourceforge.net/projects/xxkb/

7. idesk потребовал
imlib2 (http://sourceforge.net/projects/enlightenment/files/)
(доп. иконки) idesk-extra http://ftp.nluug.nl/pub/os/Linux/distr/amigolinux/download/DeskTop/IconMgmt/idesk-extras-1.37/

8. conkey - монитор состояния
http://sourceforge.net/projects/conky/
ему захотелось LUA5 http://www.lua.org/download.html
так вот эта lua не закинула свою lua.pc в /usr/local/lib/pkgconfig и conkey ее упорно не находил, пришлось бросить ручками.
О настройке можно почитать здесь http://mydebianblog.blogspot.com/2007/10/conky.html
http://www.linuxcenter.ru/lib/articles/soft/conky_as_example.phtml
http://conky.sourceforge.net/screenshots.html - примеры

9. leafpad - простой текстовый редактор
http://download.savannah.gnu.org/releases-noredirect/leafpad/
http://tarot.freeshell.org/leafpad/
В принципе ему еще нужен libgnomeprint+libgnomeprintui, но это если хотим с него печатать, можно в конфигураторе отключить.

10. Калькулятор SpeedCrunch
Решил не использовать КДЕшный калик. Взял тут http://speedcrunch.org/en_US/download.html
В папке с исходниками создаем папку build и из нее cmake ../src Затем make
В результате отличный калькулятор.

среда, 7 октября 2009 г.

Ссылки на радиотех.

Сайт DiHalt - много интересного для новичков (и не только) в радиотехе http://easyelectronics.ru

Скрипт для расчета стабилизатора напряжения на MC34063A http://www.nomad.ee/micros/mc34063a/index.shtml

Много по ИК ДУ пультам и форматам передачи команд http://woodocat.ru/ir.php

вторник, 29 сентября 2009 г.

Mysql и "битая" таблица

Если вдруг пропал доступ и в ошибки начало валиться - "Table 'xxxx' is marked as crashed and should be repaired" или "Checking for corrupt, not cleanly closed and upgrade needing tables" то надо копать в сторону mysqlcheck с ключом -r
mysqlcheck [OPTIONS] database [tables]

mysqlcheck -r -u _юзер_ -p _база_ _битая_таблица_

В итоге если случай не сильно запущенный, все будет хорошо.

Еще вариант
mysqlcheck --check-upgrade --all-databases --auto-repair -u root -p
mysql_upgrade --force -u root -p

среда, 2 сентября 2009 г.

суббота, 29 августа 2009 г.

Множественное подключение к одному серверу или разделяемым ресурсам одним пользователем

Ошибка стандартная: при попытке смонтировать шару с сервера (Linux или windows) на винде ХР (при этом на ней уже есть примонтированные шары от основного пользователя) от имени другого пользователя (разрешенного к этой шаре) выскакивает - "Множественное подключение к серверу или разделяемым ресурсам одним пользователем с использованием одного или более пользователя неразрешено..." системная ошибка 1219.
Вот что советует мелкософт - http://support.microsoft.com/kb/938120

В двух словах:
1. можно использовать net use а вместо имени сервера подкинуть его IP
2. сделать на этот сервер в DNS алиас и монтироваться к нему.

Вот такие "удобные" вещи предлагает мелкософт. глюки обходяться с помощью глюков

вторник, 25 августа 2009 г.

Настройка сетевого "Рабочего стола" и перемещаемых профилей

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

Задача: сделать "Рабочий стол" и "Мои документы" сетевыми.
(кусок взят здесь http://www.opennet.ru/openforum/vsluhforumID14/746.html )

Настройка Linux PDC:

[profiles]
path = /home/samba/FileServer/share_2/User_profiles/%U/.winprofile
read only = No
store dos attributes = Yes
browseable = No
public = no
writable = yes
create mask = 0600
directory mask = 0700
csc policy = disable
[netlogon]
comment = Network Logon Service
path = /home/samba/FileServer/share_2/User_profiles/_netlogon
write list = root
browseable = No
[homes]
comment = Lichnaya - %S
path = /home/samba/FileServer/share_2/User_profiles/%U
read only = No
browseable = No

Таким образом каждый доменный юзер получает в свое распоряжение диск L:, на нем должны быть следующие каталоги (я их все сделал скрытыми .Documents .Desktop):
.winprofile/%U - здесь хранится профиль с именем пользвателя %U
Documents - "Мои документы"
Desktop - "Рабочий стол"
Названия могут быть и другие. Такая структура каталогов забивается в скелет (/usr/share/skel) и автоматически создается при заведении нового юзера. (у меня отдельный скрипт заводит юзеров. Там все и создается.) Важно - права и собственник на каталог с профайлом (.winprofile/%U), иначе профиль не захочет грузиться виндой.


Настройка Windows клиентских машин:

1. Запускаем редактор реестра regedt32. Переходим в HKEY_USERS, дальше Меню/Реестр/Загрузить куст C:\Documents and Settings\Default User\ntuser.dat. (каталог скрытый) Тем самым загрузим для редактирования ветвь реестра HKCU, которая создается для новых юзеров.
2. Внутри этого "куста" переходим к Software/Microsoft/Windows/CurrentVersion/Explorer/User Shell Folders. В этом разделе меняем значения параметров Desktop, Personal и My Pictures на L:\Desktop, L:\Documents и L:\Documents\Мои рисунки соответственно. (или около того)
3. Внутри этого же "куста" переходим к Software/Microsoft/Windows/CurrentVersion/Explorer/Shell Folders и удаляем там все параметры. (не обязательно)
Основная проблема: пользователи хранят на "Рабочем столе" кучу тяжелых документов (по рукам бить - не помогает). Имеем перемещаемый профиль и много трафика сети для синхронизации.

Задача: сделать "Рабочий стол" и "Мои документы" сетевыми.
(кусок взят здесь http://www.opennet.ru/openforum/vsluhforumID14/746.html )

Настройка Linux PDC:

[profiles]
path = /home/samba/FileServer/share_2/User_profiles/%U/.winprofile
read only = No
store dos attributes = Yes
browseable = No
public = no
writable = yes
create mask = 0600
directory mask = 0700
csc policy = disable
[netlogon]
comment = Network Logon Service
path = /home/samba/FileServer/share_2/User_profiles/_netlogon
write list = root
browseable = No
[homes]
comment = Lichnaya - %S
path = /home/samba/FileServer/share_2/User_profiles/%U
read only = No
browseable = No

Таким образом каждый доменный юзер получает в свое распоряжение диск L: На L: должны быть следующие каталоги:
.winprofile/%U - здесь хранится профиль с именем пользвателя %U
Documents - "Мои документы"
Desktop - "Рабочий стол"
Названия могут быть и другие. Такая структура каталогов забивается в скелет (/usr/share/skel) и автоматически создается при заведении нового юзера.
У меня отдельный скрипт заводит юзеров. Там все и создается. Важно - права и собственник на каталог с профайлом (.winprofile/%U), иначе профиль не захочет грузиться виндой.

Настройка Windows клиентских машин:

1. Запускаем редактор реестра regedt32. Переходим в HKEY_USERS, дальше Меню/Реестр/Загрузить куст C:\Documents and Settings\Default User\ntuser.dat. Тем самым загрузим для редактирования ветвь реестра HKCU, которая создается для новых юзеров.
2. Внутри этого "куста" переходим к Software/Microsoft/Windows/CurrentVersion/Explorer/User Shell Folders. В этом разделе меняем значения параметров Desktop, Personal и My Pictures на L:\Desktop, L:\Documents и L:\Documents\Мои рисунки соответственно. (или около того)
3. Внутри этого "куста" переходим к Software/Microsoft/Windows/CurrentVersion/Explorer/User Shell Folders. В этом разделе меняем значения параметров Desktop, Personal и My Pictures на L:\Desktop, L:\Documents и L:\Documents\Мои рисунки соответственно. (или около того)

4. Еще надо исключить эти перенаправленные папки из пути синхронизации профайла
Software/Microsoft/Windows NT/CurrentVersion/Winlogon и в параметр ExcludeProfileDirs добавляем через ";" "Рабочий стол" и "Мои документы"

5. Выгружаем куст (важно! - сам не выгрузится). Всё - теперь новые пользователи получат "Рабочий стол" и "Мои документы", лежащие на сервере.
6. То же самое делаем для каждого уже существующего профиля.
7. Отредактированный файл C:\Documents and Settings\Default User\ntuser.dat сохраните где-нибудь и копируйте на все клиентские машины, чтобы не проделывать ту же работу заново. (а вот это не пробовал, могут вылезти грабли)

Еще была проблема с автономным кэшированием - отключалась так:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\NetCache]
"GoOfflineAction"=dword:00000001
"SyncAtLogoff"=dword:00000000
"NoReminders"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\NetCache]
"Enabled"=dword:00000000

Итого с реестром (при условии, что default грузился в ветку DEF):
[HKEY_USERS\DEF\Software\Microsoft\Windows NT\CurrentVersion\Winlogon]
"ExcludeProfileDirs"="Local Settings;Temporary Internet Files;History;Temp;Рабочий стол;Мои документы"

[HKEY_USERS\DEF\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
"Personal"="L:\\.Documents"
"Desktop"="L:\\.Desktop"

[HKEY_USERS\DEF\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
"Desktop"=hex(2):4c,00,3a,00,5c,00,2e,00,44,00,65,00,73,00,6b,00,74,00,6f,00,\
70,00,00,00
"Personal"=hex(2):4c,00,3a,00,5c,00,2e,00,44,00,6f,00,63,00,75,00,6d,00,65,00,\
6e,00,74,00,73,00,00,00
"My Pictures"=hex(2):4c,00,3a,00,5c,00,2e,00,44,00,6f,00,63,00,75,00,6d,00,65,00,\
6e,00,74,00,73,00,00,00

[HKEY_USERS\DEF\Software\Microsoft\Windows\CurrentVersion\NetCache]
"GoOfflineAction"=dword:00000001
"SyncAtLogoff"=dword:00000000
"NoReminders"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\NetCache]
"SyncAtLogon"=dword:00000000
"SyncAtLogoff"=dword:00000000
"NoReminders"=dword:00000000
"Enabled"=dword:00000000

пятница, 14 августа 2009 г.

Строки и C (C++)

http://forum.vingrad.ru/articles/topic-60932.html - ссылка на статью

char* pStr = new char[255];// Берём с запасом

strcpy(pStr, "Тестовая строка");

strcat(pStr, " #1");// Добавление к строке, pStr = pStr + " #1"
strncpy(pStr, "String", 3);// Копирование n символов, pStr = "Str"
strncat(pStr, "ings", 3);// Добавление n символов, pStr = pStr + "ing"
size_t i = strlen(pStr);// Получение длины строки, i = 6
strcmp(pStr, "string");// Сравнение строк, возвратит не 0 - разные строки
stricmp(pStr, "string");// Сравнение без учёта регистра, возвратит 0
// Сравнение первых n символов, также возвратит 0
strncmp(pStr, "Strings", 6);
char* pc = strchr(pStr, 'i');// Поиск первого вхождения, pc = pStr+3 = "ing"
strcpy(pStr, "development");

// Аналогично функции:
strrchr// Поиск последнего вхождения
strstr// Поиск первого вхождения строки
strpbrk// Поиск первого вхождения одного из символов
strspn// Число символов до любого символа из строки
strcspn// Число символов до любого символа не из строки

среда, 12 августа 2009 г.

работа с программатором avreal

Для начала поменять права на параллельный порт
sudo chmod 777 /dev/parport0 (что-то вроде этого)

затем

avreal +mega32 -ab -p/dev/parport0 -ew файл_программы.hex

понедельник, 27 июля 2009 г.

ati radeon видеозахват

http://pinouts.ru/Video/ati_video.shtml - описание разъема

http://gatos.sourceforge.net - драйвер для карты
от них нужны только
AVview - Audio-video viewer program
km - Linux kernel module that provides Video4linux capture interface for ATI video cards capable of video capture

С их сайта под новое ядро не хотит собираться. (ошибка)

http://www.thenerdshow.com/index.php?page=installation - здесь есть уже пропатченные исходники (а так же краткое пояснение - как грабить)
http://www.thenerdshow.com/rpm/km.f10.7z
http://www.thenerdshow.com/rpm/avview-0.80.7.f10.7z

еще понадобилась libzvbi - http://zapping.sourceforge.net/ZVBI/index.html
но и у них там небольшой глюк в исходнике - неправильно в одном месте прописан include (как выскочит ошибка, так и все сразу понятно)

Итак, подгружаем драйвера:

modprobe videodev
insmod km_api_drv.ko
insmod km_drv.ko

при этом появиться /dev/video /dev/video0

затем пускаем start_avview.no_install и можно настраивать просмотр




ссылки, которые использовал
http://ubuntuforums.org/showthread.php?t=46496&page=3
http://forums.fedoraforum.org/archive/index.php/t-159368.html
http://www.linuxlinks.com/Software/Multimedia/TV/index.shtml - обзор программок
http://www.slacky.eu/repository/slackware-12.0/multimedia/tvtime/1.0.2/ - репозитарий

http://linuxforum.ru/index.php?showforum=75 - форум по видеозахвату в linux
http://mydebianblog.blogspot.com/2007/08/blog-post_8710.html - интересный блог, и очень полезные коменты
http://linux.opennet.ru/prog/sml/112.shtml - подборка утилит
http://linux.yaroslavl.ru/docs/conf/hardware/bt848.html
http://linuxtv.org/v4lwiki/index.php/Main_Page
http://www.reades.com/radeon.html - мануал по установке
http://tvtime.sourceforge.net/cards.html - есть уточнение по работе с ATI и gatos -плохое


для сборки xawtv надо указать путь к библиотеке libFS и отредактировать channel.c comand.c channel.h - перекинуть объявление двух массивов из .h в указанные .c

воскресенье, 26 июля 2009 г.

Собираем ядро linux

Хорошие ссылки на сборку ядра:

http://www.linuxcenter.ru/lib/articles/system/kernel26_install.phtml
http://mydebianblog.blogspot.com/2006/12/blog-post_20.html
http://www.opennet.ru/base/sys/linux_kernel_compile.txt.html

1. Для очистки от прежних копиляций
make clean
или
make mrproper (убъет .config)

2. Настройка параметров ядра
make menuconfig

или

make oldconfig = Копируем ".config" в исходники нового ядра и даем эту команду с консоли, в этом случае не придется отвечать на все вопросы, будут заданы вопросы только по новым возможностям.
Главное, не забыть проверить, вкомпилена ли в ядро файловая система для /. (у меня ext3 - уже который раз забываю. в результате при загрузке kernel panic)

3. Компиляция
make bzImage modules

4. Установка

make modules_install = установит куда надо модули
а вто "make install" мне таки и не понравился. Он конечно копирует ядро в /boot и System.map
но не переименовывает их в соответствии с версией ядра. Да еще и в lilo лезет со своими изменениями. Так что лучше как прежде:
Копируем arch/i386/boot/bzImage в /boot с нужным нам именем типа vmlinuz-2.6.xx.xx-myx
в моем случае "arch/i386/boot/bzImage" - это симлинк на "arch/x86/boot/bzImage"
Копируем System.map - его необходимо переименовать в «System.map-версия-ядра»
т.е. System.map-2.6.xx.xx-myx

5. Подпилить lilo

понедельник, 29 июня 2009 г.

Создание новой базы в MySQL

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<password>

mysqladmin -u root -p create new_base
вводим пароль и база создана, теперь раздать на нее права, к примеру для traff

или в консоли mysql
CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;


mysql -u root -p
вводим пароль и получаем оболчку
mysql>

вводим
GRANT ALL PRIVILEGES ON new_base.* TO traff@localhost IDENTIFIED BY 'пароль';

Если при попытке создания новой базы вылезло
Can't create database 'database'. (errno: 13)'
значит или сменились права на каталог /var/lib/mysql или владелец - должен быть mysql:mysql

суббота, 13 июня 2009 г.

Perl и парсер полного имени файла

Для разделения полного имени файла на директорию, само имя, и расширение очень удобен модуль File::Basename

use File::Basename;

$fullname = "/usr/local/src/perl-5.6.1.tar.gz";

$file = basename($fullname);
# file="perl-5.6.1.tar.gz"

$dir = dirname($fullname);
# dir="/usr/local/src"


($file,$dir,$ext) = fileparse($fullname, qr/\..*/);
# dir="/usr/local/src/" file="perl-5" ext=".6.1.tar.gz"

($file,$dir,$ext) = fileparse($fullname, qr/\.[^.]*/);
# dir="/usr/local/src/" file="perl-5.6.1.tar" ext=".gz"

($file,$dir,$ext) = fileparse($fullname, qr/\.\D.*/);
# dir="/usr/local/src/" file="perl-5.6.1" ext=".tar.gz"

($file,$dir,$bak) = fileparse("/tmp/file.bak",
qr/~+$/, qr/\.(bak|orig|save)/)
# dir="/tmp/" file="file" ext=".bak"

($file,$dir,$bak) = fileparse("/tmp/file~",
qr/~+$/, qr/\.(bak|orig|save)/)
# dir="/tmp/" file="file" ext="~"

The File::Basename module provides functions to parse pathnames into their individual components. The dirname function pulls out the directory portion and basename the nondirectory portion. The more elaborate fileparse function picks out the full pathname into the directory name, the filename, and the suffix; you must supply a list of regular expressions describing the suffixes that interest you. The examples above illustrate how choice of suffix patterns affects the result. By default, these functions parse pathnames according to the native conventions of your current platform. The fileparse_set_fstype function selects a different platform's parsing rules, such as fileparse_set_fstype("VMS") to parse names using VMS rules, even when running on non-VMS systems.

пятница, 22 мая 2009 г.

Программатор avreal.

Пользуюсь редко, все время забываю коммандную строку.

Прочитать из микроконтроллера:
sudo avreal +mega8 -ab -p/dev/parport0 -r имя_программы.hex

Запрограммить микроконтроллер:
sudo avreal +mega8 -ab -p/dev/parport0 -ew имя_программы.hex

-ew = сначала стереть, а затем записать. можно сразу -w, но иногда из-за этого глюки в работе.
-ab = можно указать в файле конфига другие пины паралл. порта и включить этот конфиг

четверг, 14 мая 2009 г.

Cron и заполнение /var/spool/clientmqueu

Если вы настроили выполнение задач в cron, то надо обязательно позаботиться о выводе ваших команд.
Иначе весь вывод (stdout и stderr) будет валиться в /var/spool/clientmqueue, что может довольно скороо забрать на себя все дискрипторы файлов (огромное число (200000 не предел) маленьких файликов (50-600 байт). И в результате - место свободное есть (df -h), а записать ничего не получиться.

Как один из вариантов, написать после Вашей команды перенаправление
> /dev/null
однако сообщения об ошибках будут продолжать валиться в clientmqueue (что не так уж и плохо, для контроля)

1>/dev/null 2>&1
в этом варианте cron будет особенно молчалив - ни сообщение, ни ошибок

P.S. добавление в заголовок файла (crontab -e) строки вида MAILTO="" никакого положительного эфекта не дало.

вторник, 12 мая 2009 г.

Все для AVR-GCC и Atmega32

Если компилятор выбрасывает (съедает) нужный вам код, то в этом "виновата" оптимизация. Как один из примеров изменение переменных в прерывании и последующее сравнение с ними в main. Выброситься. Средство борьбы - объявить эти переменные volatile, для компилятора это табу, все что касается volatile не будет выкинуто.
==========================================================
Таймер 0


пример кода
TCCR0=(1 << CS02)|(1 << CS00); //prescaler 1024
TIMSK=(1 << TOIE0); //enable interrupt

ISR(TIMER0_OVF_vect) {};


регистр TCNT0 (Timer/Counter Register)
значение таймера

регистр OCR0 (Output Compare Register)
значение для сравнения

регистр TIMSK (Timer/Counter Interrupt Mask Register)
OCIE0 (1) -- разрешение прерывания по сравнению
TOIE0 (0) -- разрешение прерывания по переполнению

регистр TIFR (Timer/Counter Interrupt Flag Register)
OCF0 (1) -- флаг прерывания по сравнению
TOV0 (0) -- флаг прерывания по переполнению


регистр TCCR0 (Timer/Counter Control Register), биты:
FOC0 (7) -- ?? когда ШИМ в него надо писать 0, он всегда читается как 0
если в него записать 1, то на выходе поменяется значение
т.е. он форсирует изменение Waveform Generation и может
использоваться как строб (не вызывая прерываний)
WGM00 (6) -- режим Waveform Generation
WGM01 (3) --
0 0 - обычный режим счет
0 1 - ШИМ с корекцией фазы
1 0 - Clear Timer on Compare Match (CTC) - т.е. как только досчитал до
OCR0, так и обнулился.
1 1 - быстрый ШИМ
COM01 (5) -- в каком режиме на выход пина OC0 будет поступать инфо от таймера
COM00 (4) -- соответсвенный DDR должен быть настроен на вывод.
Для не-ШИМ или CTC
0 0 - обычный режим, пин отключен
0 1 - переключение пина
1 0 - сброс пина
1 1 - установка пина
Fast PWM
0 0 - пин отключен
0 1 - reserved
1 0 - сброс пина, когда OC0 = TOP
1 1 - установка пина, когда OC0 = TOP
CS02..0 (2..0) -- предделитель 000=stop 001=1 010=8 011=64 100=256 101=1024
110=внешний источник с пина T0 по спаду
111=внешний источник с пина T0 по росту

==========================================================
АЦП


Обязательно подключить AVCC к питанию!!!

регистр ADMUX (ADC Multiplexer Selection), биты:
REFS1 (7) -- куда подключен источник опорного напряжения
REFS0 (6) --
0 0 - AREF
0 1 - AVCC (с внешним кодером на AREF)
1 0 - reserved
1 1 - внутренние 2.56V (с внешним кодером на AREF)
ADLAR (5) -- если 1, то выравнивание результата измерения ВЛЕВО.
т.е. результат 8 бит в ADCH, а хвост в 2 бита в ADCL
при чтении ADCL, ADCH будет заблокирован от записи, и пока не
прочитаем ADCH, новый резултат не запишеться.
MUX4..0 -- при значениях n=0..7 - номер пина ADCn. В корпусах TQFP и MLF
(4..0) -- страшие значения определяют дифф.включение и усилитель. В DIP НЕТ!


регистр ADCSRA (ADC Control and Status Register A), биты:
ADEN (7) -- включение АЦП
ADSC (6) -- запуск конверсии, и будет "1", пока идет конверсия. по окончанию
станет "0", НО надо подождать еще ОДИН такт АЦП, что бы резултат
записался в ADCH и ADCL
ADATE (5) -- автозапуск конверсии по тригеру (условию) в регистре SFIOR
ADIF (4) -- флаг прерывания окончания конверсии.
ADIE (3) -- разрешение прерывания от АЦП
ADPS2..0 -- предделитель частоты 000=2 001=2 010=4 011=8 100=16 101=32
(2..0) 110=64 111=128

регистр SFIOR (Special FunctionIO Registe), биты:
ADTS2..0 (7..5) -- условия автозапуска коверсии. от какого прерывания
000 - свободный режим, запуск ни от чего не зависит?
001 - от компаратора
010 - внешнее INT0
011 - от таймера0 сравнения
100 - от таймера0 переполнения
101 - от таймера сравнения Match B (???)
110 - от таймера1 переполнения
111 - от таймера1 Capture Event
4 бит -- reserved -- для совместимости надо в него писать "0"

понедельник, 30 марта 2009 г.

Сборка xxkb и ошибка компиляции.

Если при сборке xxkb вылезли такого рода ошибки:

xxkb.o: In function `main':
xxkb.o(.text+0x1075): undefined reference to `XShapeQueryExtension'
wlist.o: In function `win_update':
wlist.o(.text+0x9a): undefined reference to `XShapeCombineMask'
wlist.o(.text+0xc1): undefined reference to `XShapeCombineMask'

то значит при выполнении xmkmf и создании Makefile не был добавлен линковочный параметр
-lXext

Открываем Makefile и добавляем после после -lXt еще и -lXext. Т.е. должно получиться вроде этого:

LOCAL_LIBRARIES = $(XONLYLIB) -lXpm -lXt -lXext


Ну и теперь make должно все собраться.

пятница, 27 марта 2009 г.

Установка Slackware 12.2 с DVD SATA.

Получил новое железо, все через SATA подключено. И DVD в том числе. Как и следовало ожидать, во время установки "автоматом" не нашелся "источник" установки. А все потому, что он определился как /dev/scd0, а не как более привычный /dev/sdb /dev/hdb. Т.е. в "ручном" режиме выбора привода (manual) ввел правильное значение и вперед.

понедельник, 16 марта 2009 г.

Установка (перенос) ltsp 4.2

Монтируем iso образ во временный каталог.
Достаем из него ltsp-utils/ltsp-utils-0.25-0.tgz -- ltspcfg + ltspadmin и запускаем ltspadmin. Подробных инструкций в сети море. Выбираем пункт Install/Update LTSP Packeges и затем вводим путь вида file:///tmp/.... к вашему смонтированному временному каталогу. Дальше все по умолчанию, и подтверждаем Correct? y
Список пакетов - берем все.

Далее настройки. У нас уже есть готовые настройки для ltsp и для sandbox. копируем в нужные места.
Надо теперь допилить запуск сервисов. Добавить пользователей и допилить настройки dhcp, ssh и т.д.
/etc - exports, dhcpd.conf, hosts
в sandbox поменять на правильных пользователей в home.

сгенерировать новые файлики ключей для ssh и закинуть их в sandbox, т.е.
ssh-keygen -t rsa (при запросе пароля (Enter passphrase) его не вводить (Enter и еще раз Enter для подтверждения)
id_rsa.pub нужно закинуть в ltsp для каждого пользователя.

---- inetd.conf надо раскоментировать запуск tftp да еще сделать killall -HUP inetd (что бы inetd перечитал настройки)

И еще при установке райда каким-то образом поменялись права на рут каталог (точнее не права, а собственник). Из-за этого не хотела chroot ssh.

среда, 18 февраля 2009 г.

Настройка Xorg и шрифтов

Полезная ссылка
http://citkit.ru/articles/369/ - хороший рассказ про системы шрифтов в Linux
http://rootshell.be/~sda00/fnt.html - еще одна
http://wiki.archlinux.org/index.php/Xorg_Font_Configuration_(Русский) - очень полезные примеры настройки

воскресенье, 15 февраля 2009 г.

Микрофон, alsa и IseWM

После настройки alsaconf не работает запись звука. Выкрутил в alsamixer микрофон по максимуму, и все равно не пишет ничего "arecord test.wav". На вкладке Capture (переход по Tab-у) то же навыкручивал на максимум все что касается микрофона и Capture. Не работает. Оказалось, надо же было еще на Capture нажать пробел, для того, что бы активировать захват. При этом еще появилась подпись
L.....R
CAPTURE

суббота, 14 февраля 2009 г.

Установка WineX

WineX ныне зовется Cedega. Ссылки на исходники и инструкции есть на
http://www.cedega.com/development/cvs/
Если коротко, то всего три шага:
1. cvs -d:pserver:cvs@cvs.transgaming.org:/cvsroot login
2. When prompted for the password enter "cvs"
3. cvs -z3 -d:pserver:cvs@cvs.transgaming.org:/cvsroot co winex

либо весь архив целиком http://www.cedega.com/downloads/source.html (читаем лицензию и соглашаемся кнопкой I AGREE в самом низу)
FAQ по установке и настройке:
http://www.opennet.ru/base/faq/winex_faq.txt.html
http://ru.wikibooks.org/wiki/LOR-FAQ-Wine
http://www.linux.org.ru/wiki/en/Wine/Cedega
http://www.xakep.ru/post/17532/default.asp

http://fedoranews.org/hoyt/wine/
Затем в каталоге исходника делаем:
autoconf
Он создает configure:
configure --with-x и прочие полезные опции
Устанавливаем командой:
./tools/wineinstall
И вот тут фиг что вышло. Сначала пошел configure по новой, затем началась сборка по новой и вывалилась по ошибке отсутствия файла. (make depmod)
тестируем:
wine regedit

пятница, 13 февраля 2009 г.

ltsp и usb мышь (не идет вниз)

Столкнулся с странным поведением usb мыши(hid). Влево-вправо еще кое как двигалась, немного вверх, а вниз не двигалась вообще. Оказалось что конфликт драйверов обычной usbmouse и usbhid.
После выгрузки usbmouse и "перезагрузки" все заработало как надо.
modprobe -r usbmouse
modprobe -r usbhid
modprobe usbhid

четверг, 12 февраля 2009 г.

ltsp, firefox и ограничение пользователей

Понадобилось в firefox ограничить доступ пользователей к настройкам, скачиванию файлов и т.д.
Нашлось дополнение Public Fox. Оно ограничивает изменение настроек и главное - блокирует about:config. Так же в файле профайла .../chrom/userChrome.css добавил строчки для отключения меню:
#toolbar-menubar {
display: none !important;
}
(кажется не ошибся, писал по памяти)
Еще отключу ctrl и alt в иксах (в киоске не нужны).
Осталось придумать способ ограничить аппетиты firefox на память.

Интересные ссылки

http://www.michurin.com.ru/xorg.shtml - мысли по использованию удаленного запуска программ в Иксах запущенных в уже имеющихся. (матрешка)

http://rus-linux.net/papers/xwin/X-Window.html - хорошо описаны этапы запуска Иксов

http://avreg.net/howto_icewm.html - Установка и настройка IceWM в минимальной конфигурации.

http://faqs.org.ru/softw/system/icewm.htm - Неофициальные Вопросы и Ответы по IceWM

http://mydebianblog.blogspot.com/2006/10/icewm.html - IceWM Window Manager: Ледяной десктоп антарктических пингвинов

http://www.opennet.ru/cgi-bin/opennet/man.cgi?topic=ssh&category=1 - О SSH по русски

ltsp и "залипание" клавиш на терминале

Настроил с помощью ltsp "интернет-киоск" для пользователей. Ltsp с не стандартным запуском X-ов (без запроса авторизации с сервера). Т.е. иксы запускаются сами по себе, а дальше устанавливается соединение по "ssh -X" с сервером (в chroot каталог), и из него запускается Icewm+firefox. Все отлично запустилось, chroot является некоторой защитой от излишне продвинутых хацкеров. НО! Стали заметны самопроизвольные "залипания" клавиш. Т.е. вдруг начинается автоповтор клавиши, которую уже отпустили и так до тех пор, пока не нажмешь другую клавишу. Особенно проблемно залипание ctrl.
А всего-то и надо было запускать "ssh -n"
Цитата:
"-n Перенаправляет стандартный ввод из /dev/null (фактически, предотвращает чтение из стандартного ввода). Это должно использоваться когда ssh выполняется в фоновом режиме. Типичный трюк используемый для запуска Х11 программ на удаленной машине. Например, ssh -n shadows.cs.hut.fi emacs & запустит emacs на shadows.cs.hut.fi , и соединение X11 будет автоматически перенаправлено через зашифрованный канал. Программа ssh будет переведена в фоновый режим. (Это не работает, если ssh нужен запрос пароля или парольной фразы; также смотри параметр -f.)"

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

вторник, 10 февраля 2009 г.

ltsp и Slackware 12.2

Понадобилось сделать свой аналог ltsp на Slackware. В оригинальной версии ltsp 4.2 были замечены отваратительные "заскоки" драйвера клавиатуры - самопроизвольные "залипания" клавиш.
Взял из Slackware пакеты a,n,x и повыкидывал из них все лишенее. Зате из ltsp перетянул настройки (/etc и некоторые файлы из /bin /sbin на отсутствие которых ругалось при загрузке вроде /sbin/pci_scan, ltsp_mount и т.д.)

При попытке старта иксов (сделал симлинки startx на /etc/screen.d/startx) ругнулось:
Fatal server error: Could not open default font 'fixed'
надо бы обновить кэш шрифтов fc-cache, НО, файловая система ro. Значит копируем из нашей рабочей системы /var/cache/fontconfig в соответствующий каталог ltsp имитируя выполнение кэширования (а можно на время настройке ать полный доступ к файловой системе)

Попытка установить и запустить в chroot blackbox то же выдала интересный глюк:
couldn't load default font
Естественное желание рыть в сторону шрифтов окончилось не удачно. Что только со шрифтами не делал, все без толку. Оказалось (опять помог strace), blackbox очень хотел увидеть /usr/shart/X11/locale. Скопировал в "песочницу" каталог и все заработало. И шрифты нашлись!

среда, 4 февраля 2009 г.

8139too и Transmit timed out (NETDEV WATCHDOG: eth0:)

Имеем старый компьютер (Pentium 188Mhz) и сетевую карту на чипе rtl8139c. При достаточно большом сетевом потоке через карту получаем "замирания" и глюки сети.

NETDEV WATCHDOG: eth0: transmit timed out
Transmit timed out
eth0: Transmit timeout, status 0c 0005 c07f media 00. (что то вроде этого)

Как оказалось, проблема была в настройке BIOS, а именно:
PCI IRQ из "edge" установить в "level". И все!


Сей благословенный совет нашел здесь:
http://lkml.indiana.edu/hypermail/linux/kernel/0403.1/1537.html

OK, just for completeness, this issue has been resolved.

In my BIOS, there was an option:

PCI IRQ (edge/level)

It was set to 'edge'. Setting to 'level' fixed the problem - the
8139too.c driver is perfectly OK (I am now on 2.6.4 with no
problems).

I would like to thank OGAWA Hirofumi for the time and debugging code
he done for me, and also successfully pinpointing the problem and
giving me an idea of what was going on and what to look for to fix
it.

8139too и опция media

Понадобилось загрузить драйвер для сетевой карты 8139too с особыми параметрами, т.е. с опцией media и force-duplex. В дeскрипторе драйвера (modinfo -p 8139too) сказано, что биты 4,5,9 меняют состояние. НО! Пока не выставишь биты 0-3 в "1", не будет никакого эффекта от применения опции media (в дeскрипторе об этом ни слова) Т.е.
Предположим, хотим стартануть карту в "10Mbps half-duplex"

modprobe -v 8139too media=0 --- не работает (биты 0-3 в "0")
modprobe -v 8139too media=15 --- работает (биты 0-3 в "1", а остальные "0")

понедельник, 2 февраля 2009 г.

initramfs распаковат, изменить, запаковать

С помощью этих командой можно посмотреть структуру существющего initramfs:

mkdir /tmp/initramfs
cd /tmp/initramfs
gunzip -c -9 /boot/initrd.img-2.6.18-1-686 | \
cpio -i -d -H newc --no-absolute-filenames


А запаковать обратно измененный можно командой:

cd /tmp/initramfs
find . | cpio -o -H newc | gzip -9 > /boot/initrd.img-2.6.18-1-686

Взято здесь http://www.opennet.ru/base/sys/initrd_intro.txt.html - хорошая статья

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

ltsp и ltspinfo

версия ltsp 4.2
ltspinfo --host=192.168.0.2 -cfg="параметр" работает.
Зато работает ltspinfo --host 192.168.0.2 -cfg=all вывод всех возможных значений.

Если понадобиться получить что-либо из терминала через ltspinfo, то на нем нужно создать файл в каталоге /tmp/info с именем вашего "параметра" и с содержанием "значения". При этом он станет доступным по ltspinfo

ltspinfo --host=192.168.0.2 --proc=<имя и путь к файлу> прочитает инфо из файла в /proc (надо разрешить это в lts.conf, т.е. ALLOW_PROCREAD = Y)

ssh без ввода пароля

Понадобился сабж, в скрипте запускать команды по ssh.

1. Нужно создать ключи
ssh-keygen -t rsa
при запросе пароля (Enter passphrase) его не вводить (Enter и еще раз Enter для подтверждения)

2. Публичный ключ ~/.ssh/id_rsa.pub нужно добавить в ~/.ssh/authorized_keys на другом компьютере, куда будем ходить без пароля.

3. Там же нужно перезапустить демон sshd

4. Что бы не ожидало подтверждения о правильном хосте (там где набираем в первый раз "yes") запускаем ssh с опцией "-o StrictHostKeyChecking=no"

пятница, 30 января 2009 г.

chroot, su и ошибка Sorry.

При смене окружения по chroot у нас остаются права рута. Понадобилось сменить их. Копируем su, смотрим и копируем необходимые библиотеки: ldd /bin/su. Готово. Нет, при попытке сменить пользователя получем: Sorry.
И все, ничего более. Патризан какой-то!
После анализа strace chroot /.... su оказалось, что нужна еще одна библиотека /lib/libnss_files.so.2
Добавляем ее в окружение и все работает.

четверг, 29 января 2009 г.

echo и перевод на новую строку

В команде echo есть небольшая фишка с переходом на новую строку /n.(и прочими /t /r и т.д.)
Так вот надо использовать ключ "-e" для распознования этих команд. Но и это еще не все, надо ставить ДВА слэша. т.е. вроде echo -e _первая_строка_\\n_вторая_строка_
У меня внешняя же команда echo и встроенная в bash ведут себя одинаков и требуют ключ -e

chroot и firefox.

Для чего все это понадобилось мне. Есть "случайные" пользователи, которые с Х-терминалов цепляются к серверу. Все что надо - выдать им только браузер с поисковой формой. Но если нажать Ctrl-O, браузер начинает "шариться" по серверу, что совсем плохо. Для этого загоним браузер в chroot окружение.

Как правильно засунуть приложение в chroot существует много пособий.
В дальнейшем под "_sandbox_" будем понимать католог с окружением для chroot.

Что потребовалось для firefox. Необходимо создать саму песочницу и ее каталоги (окружение):
_sandbox_/bin - взял целиком по привычке на время отладки (можно повыбрасывать лишнее)
_sandbox_/etc/{fonts,gtk-2.0,pango}
_sandbox_/lib - тут Вам поможет команда ldd firefox-bin Она расскажет, что нужно закинуть в lib
_sandbox_/usr/lib - то же, что и для lib. Плюс сам firefox (весь), pango (весь), seamonkey (только нужные библиотеки, см. ldd)
_sandbox_/usr/share/fonts - можно выбрать только нужные. Не знаю, как у вас, а у меня это каталог TTF
И главное не забыть о каталоге _sandbox_/tmp/.X11-unix Его надо "прокинуть" с реальной системы из /tmp/.X11-unix. (это касается запуска в песочнице на локальном компьютере)
mount -o bind /tmp/.X11-unix _sandbox_/tmp/.X11-unix
В противном случае при запуске из chroot _sandbox_ X приложений получим что-то вроде этого: "Error: cannot open display"

В принципе на этом все. Что-то возможно и упустил, но это уже мелочи.
Теперь можно запустить браузер и попробовать из него посмотреть файлову систему (Ctrl-O) и убедиться, что все в порядке:
chroot _sandbox_ /usr/lib/firefox/firefox

понедельник, 19 января 2009 г.

Slackware12 и локаль utf8

Устанавливаем локаль utf8.

1. Для начала правим /etc/profile.d/lang.csh делаем:
setenv LANG ru_RU.UTF-8

правим /etc/profile.d/lang.sh делаем:
export LANG=ru_RU.UTF-8

2. Из rc.font.new делаем rc.font (mv rc.font.new rc.font)
правим /etc/rc.d/rc.font делаем:
unicode_start cyr-sun16.psfu.gz
for i in 1 2 3 4 5 6; do
echo -ne "\033%G" > /dev/tty$i
done

эти команды загрузят консольный шрифт utf8, можно загрузить другой шрифт LatArCyrHeb-16.psfu.gz

3. В /usr/share/locale/locale.alias изменяем строку russian ... на
russian ru
ru ru_RU
ru_RU ru_RU.UTF-8
пример

4. Редактируем файл /etc/rc.d/rc.locale и в нем пишем /usr/bin/loadkeys ru-utf-by.map это раскладка клавиатуры с русским и белорусскими буквами с переключением англ-русс по CapsLock. В интернете можно поискать и другие.
Белоруская буква i - в русской раскладке - Alt+"и"
Белоруская буква "у кароткае" - в русской раскладке - Alt+"щ"
ru-utf.map.gz - только русский язык
ru-utf-by.map.gz - нужно скопировать в каталог /usr/share/kbd/keymaps/i386/qwerty

5. Теперь вопросы по менеджеру файлов MC.
MC берем из исходников, накладываем патч utf8 и собираем. Придется перекодировать из koi8-r -> utf8 файлы помощи и подсказки в /usr/local/share/mc/.

6. В /etc/fstab при монтировании windows разделов надо в опции монтирования добавить iocharset=utf8,codepage=866 Перезагружаемся и пробуем переключать раскладу клавиатуры (язык) и запускать mc.

пятница, 16 января 2009 г.

kppp и скорость модема 115200

Соединение устанавливается на скорости 115200. На самом деле гораздо меньшей, просто некоторые модемы по умолчанию показывают скорость последовательного порта, а не скорость соединия по телефонным линиям. Для исправления добавим к строке инициализации или дозвона ATW2.

kppp и ошибка "The remote system is required to authenticate itself"

Slackware 12.2. Kppp запускается, набирает номер, пищит и ошибка:

The remote system is required to authenticate itself
but I couldn't find any suitable secret (password) for it to use to do so.
(None of the available passwords would let it use an IP address.)


В файле конфига /etc/ppp/options коментируем опцию "auth" и раскоментируем опцию "noauth".
Все, работает.

Модем ноутбука fujitsu siemens C1020 (modem,no dialtone,no carrier)

Попался мне ноутбук fujitsu siemens C1020. Накатил Slackware 12.2. А вот с модем вышел небольшой казус. Итак, модем в данном ноутбуке Conexant и драйвер есть на сайте Linuxant (14.4к ограничение в FREE версии). Драйвера входящие в комплект Alsa (snd_via82xx_modem) не подходят!
Скачал, установил. И вот они грабли. Что бы ни делал, какие параметры драйверу звука (snd_via82xx) не задавал, модем упорно выдает "no dialtone" или "no carrier". Если не допустить загрузку драйвера звука (snd_via82xx), то тогда модем дозванивается и соединение устанавливается, но молча, как партизан. Как только подгружаешь драйвер звука, сразу те же глюки. Даже если затем драйвер выгрузить, ничего не помогает. Только перезагрузка. Связывался с тех.поддержкой Linuxant, то же ничего толкового не сказали. Говорят, что с моими настройками все должно работать, проблем нет (я им дамп отсылал, который их программка собирает из системной информации)
Начал изучать драйвер звука и нашел таки проблему.

Проблема была в следующих строчках кода via82xx.c
===============================================
if (chip->chip_type != TYPE_VIA686) {
/* Workaround for Award BIOS bug:
* DXS channels don't work properly with VRA if MC97 is disabled.
*/
struct pci_dev *pci;
pci = pci_get_device(0x1106, 0x3068, NULL); /* MC97 */
if (pci) {
unsigned char data;
pci_read_config_byte(pci, 0x44, &data);
pci_write_config_byte(pci, 0x44, data | 0x40);
pci_dev_put(pci);
}
}
================================================
В общем, говоря проще, драйвер активирует MC97 для того, что бы DXS каналы в режиме VRA нормально работали, а это и есть наш модем (0x1106, 0x3068), который мы уже запустили с помощью драйверов linuxant. Вот здесь и произошел затык.

Закоментировал эти строчки
// pci_write_config_byte(pci, 0x44, data | 0x40);
// pci_dev_put(pci);

Пересобрал драйвер. И все работает. Для проверки зашел в minicom дал команду набора номер ATDTxxxxxx и слышу тональный сигнал, набор номера, ответ удаленного модема. Звуковая подсистема тоже работает и DXS каналы (из-за запуска которых все это и закрутилось).
В виде патча оформлять не стал. Кому понадобиться, сам разберется с двумя строчками кода.