Уголок СУ-11 на просторах вселенной

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

Передача звука с микрофона по сети

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

Для чтения с устройства hw:2,0, с временем прерывания 5 секунд, в формате wav
нужно использовать команду:

arecord -F 5 -D hw:2,0 -t wav -f dat -c 1

имя устройства можно узнать так:

cat /proc/asound/pcm
01-00: SAA7134 PCM : SAA7134 PCM : capture 1
00-01: AD198x Digital : AD198x Digital : playback 1
00-00: AD198x Analog : AD198x Analog : playback 1 : capture 1
02-00: USB Audio : USB Audio : capture 1

Для преобразование в mp3 потока из stdin и выводе результата в stdout:

lame -

Для проигрывания mp3 потока с stdin

mpg123 -

В итоге команда для прослушивания выглядит так:

ssh user@host "arecord -F 5 -D hw:2,0 -t wav -f dat -c 1 | lame -" | mpg123 -

или

ssh user@host "arecord -F 5 -D hw:2,0 -t wav -f dat -c 1 | lame -" > listening.mp3

При подключение к host запускается команда записи с микрофона, конвертирования
и записи потока "звука" в stdout который передаётся через ssh на локальный
компьютер, на котором этот поток направляется в mp3 проигрыватель или файл

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

узнать модель материнской платы

dd if=/dev/mem bs=64k skip=15 count=1 | strings | less

пятница, 3 апреля 2009 г.

Спасение RAID5 в Linux или восстановление mdadm на другой машине



взято от сюда http://uragana.ru/2009/04/rescue-raid-lvm думаю всем бдует полезно

Сегодня на работе сдох сервер. Без признаков жизни и включения. А на нем важная информация.
Не срочная, но важная. Главня проблема в том что нужные файлы были на рэйде (mdadm), да еще и на LVM.
Расскажу, как спасал информацию...

Отключаю диски, достаю, кладу на стол. Сервер отвожу в ремонт. И начинаю реанимировать диски.
А схема там такая - из 3-х 400 гигабайтных дисков собран RAID5 в mdadm,
поверх рэйда - LVM, на LVM - файловая система XFS.

Подключаю все диски к рабочему компьютеру, пытаюсь загрузиться со своего рабочего диска - не грузится.
Некогда разбираться - пробую грузится с live-cd с Ubuntu. Загрузилось!

Начинается самое интересное:

N.B. - все операции проводились под root, поэтому нужно в консоли сделать sudo su

1) Поскольку диски sata - открываем консоль и смотрим, что нашлось (ненужные строчки пропущены):

root@ubuntu:/home/ubuntu# dmesg | grep sd
[ 40.566532] sd 2:0:0:0: [sda] 488397168 512-byte hardware sectors (250059 MB)
[ 40.592220] sd 2:0:1:0: [sdb] 781422768 512-byte hardware sectors (400088 MB)
[ 40.611879] sd 3:0:0:0: [sdc] 781422768 512-byte hardware sectors (400088 MB)
[ 40.635162] sd 3:0:1:0: [sdd] 781422768 512-byte hardware sectors (400088 MB)
root@ubuntu:/home/ubuntu#

ага. есть 4 диска - 1 диск sda-250GB - это рабочий, остальные (sdb,sdc,sdd) - части рэйда.

2) В live-cd Ubuntu нет ни mdadm, ни lvm. Исправим это. Настраиваем сеть, и выполняем в терминале:

root@ubuntu:/home/ubuntu# apt-get update && apt-get install mdadm lvm2

Установилось. Хорошо, едем дальше.

3) Пытаемся пересобрать RAID в автоматическом режиме:

root@ubuntu:/home/ubuntu# mdadm --assemble --scan
mdadm: /dev/md0 has been started with 2 drives (out of 3) and 1 spare.

root@ubuntu:/home/ubuntu# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdc1[0] sdd1[1]
781417472 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
unused devices:

Видим что массив нашелся, но сломанный - один диск отвалился.
Игнорируем, потому что рэйд пятого уровня - позволяет сохранить данные при поломке одного диска.
Массив нашелся, поднялся. Двигаемся дальше.

4) Поднимаем LVM:

Загружаем модуль

root@ubuntu:/home/ubuntu# modprobe dm-mod

Активируем LVM:

root@ubuntu:/home/ubuntu# vgchange -a y
1 logical volume(s) in volume group "files" now active

Проверяем какие logical volumes у нас есть:

root@ubuntu:/home/ubuntu# lvscan
ACTIVE '/dev/files/filesrv' [700,00 GB] inherit

видим один раздел - /dev/files/filesrv на 700 гигов.

Создаем точку монтирования и монтируем раздел:

root@ubuntu:/home/ubuntu# mkdir /files
root@ubuntu:/home/ubuntu# mount /dev/files/filesrv /files

Смотрим что получилось:

root@ubuntu:/home/ubuntu# ls -lh /files/
total 20K
drwxrwxrwx 79 root root 8,0K 2009-03-30 06:24 other
drwxrwxrwx 15 root root 4,0K 2008-12-08 05:55 public
drwxrwxrwt 7 1000 1000 76 2009-04-02 10:33 vmdata
drwxrwxrwx 5 1000 1000 47 2009-02-20 10:22 webfiles

Ура! Все файлы видны и доступны!
Теперь можно скопировать их на рабочий диск:

root@ubuntu:/home/ubuntu# mkdir /workhdd
root@ubuntu:/home/ubuntu# mount /dev/sda4 /workhdd
root@ubuntu:/home/ubuntu# cp -r /files/vmdata /workhdd/

или через ssh на другой сервер:

root@ubuntu:/home/ubuntu# scp -r /files/vmdata root@192.168.1.6:/files/

После того как все скопировалось - можно заняться восстановлением RAID. Проверяем еще раз статус:

root@ubuntu:/home/ubuntu# cp -r /files/vmdata/
root@ubuntu:/home/ubuntu# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdc1[0] sdd1[1]
781417472 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
unused devices:

видим что в RAID сейчас два диска - sdc и sdd. Недостающий диск - sdb.
Добавим его:

root@ubuntu:/home/ubuntu# mdadm /dev/md0 --re-add /dev/sdb1
mdadm: re-added /dev/sdb1

Диск добавился. Следим за его пересборкой:

root@ubuntu:/home/ubuntu# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb1[3] sdc1[0] sdd1[1]
781417472 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
[>....................] recovery = 0.0% (95748/390708736) finish=3261.8min speed=1994K/sec

Прогрессбар движется, до окончания пересборки осталось 3261 минута, то есть больше 2 суток.
Это уже не нормально, да и диск начал слышно стучать. Понятно. Пора ему на свалку.

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

Обработка XML данных в командной строке при помощи xmlstarlet

Думаю что в хозяйстве однозначно пригодится
Обработка XML данных в командной строке при помощи xmlstarlet

В составе Debian, Ubuntu и других Linux дистрибутивах можно найти пакет xmlstarlet (http://xmlstar.sourceforge.net/),
представляющий собой набор утилит командной строки для преобразования, выборки данных и проверки XML документов.
Реализует для работы с XML функции похожие на утилиты grep, tr, sed, awk, diff, patch, join и т.п.,
что очень удобно для разбора XML документов в скриптах.

Например, для парсинга RSS и вывода заголовков можно использовать:

curl url_rss | xmlstarlet sel -t -m /rss/channel/item -v title -n

вывод из RSS ссылки и заголовка, разделенные символом "|"

curl url_rss | xmlstarlet sel -t -m /rss/channel/item -v link -o "|" -v title -n

Для ленты в формате Atom, с построчным разделением URL от заголовка:

curl url_rss | sed 's/xmlns=/_xmlns=/'| xmlstarlet sel -t -m /feed/entry -v link/@href -n -v title -n


Опция -t информирует о начале задания шаблона, определенного далее идущими директивами.
-m указывает, параметры XPath выборки, в нашем случае, обработка всех внутри внутри .
-v - определяем содержимое какого поля выводить.
-n - инициирует вывод символа перевода строки,
-o - позволяет вывести произвольный текст.

Быстрый просмотр текста в ODT файле

unzip -p document.odt content.xml | xmlstarlet sel -N text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" \
-T -t -m '//text:p' -v . -n

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

cat test.html| xmlstarlet sel --html -t -m "//img" -v "@src" -n

Примеры использования xmlstarlet для различных ситуаций можно найти в директории /usr/share/doc/xmlstarlet/examples

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

установка флеша x64

Обновив в отпуск свой компьютер установил систему x64, тут описано небольшое руководство по установке альфа версии флеша для 64ёх разрядных систем
sudo apt-get remove flashplugin-nonfree nspluginwrapper
cd ~/Desktop
tar -zxvf libflashplayer-10.0.d20.7.linux-x86_64.so.tar.gz
mkdir ~/.mozilla/plugins
cp libflashplayer.so ~/.mozilla/plugins
а вот таким образом можно откатиться назад к x32:
rm ~/.mozilla/plugins/libflashplayer.so
sudo apt-get install flashplugin-nonfree

понедельник, 13 октября 2008 г.

Софт для анализа профайлинг-логов в Unix

KCachegrind (есть билд под QT4)
GraphViz
Valgrind - дебагер - не обязателен

понедельник, 7 июля 2008 г.

Запуск "кластера 1С 8.1 Предприятие" в Slackware Linux

Встала задача поставить 1С 8.1 кластерную на линукс. В списке рекомендованных систем для установки только Red Hat и производные. А у меня из мощностей только свободный сервер под Slackware Linux 12.1. В целом с установкой самой 1С'ы сложностей не возникло. Я только переписал стартовые скрипты, System V отказались работать, написал свои:
root@srv-pdc:~# cat /etc/rc.d/rc.postgresql
#!/bin/sh
# Start/stop/restart/status the PostgreSQL:

PATH=/usr/bin
DBCLUSTER=/mnt/storage0/1CDB/pgsql
SERVERLOG=/var/log/pgsql/server.log

pgsql_start() {
echo "Starting PostgreSQL Server"
/bin/su postgres -c "pg_ctl start -D $DBCLUSTER -l $SERVERLOG"
}

pgsql_stop() {
echo "Stoping PostgreSQL Server"
/bin/su postgres -c "pg_ctl stop -D $DBCLUSTER -m smart"
sleep 10
}

pgsql_restart() {
echo "Restarting PostgreSQL Server"
/bin/su postgres -c "pg_ctl reload"
}

pgsql_status() {
echo "Status PostgreSQL Server"
/bin/su postgres -c "pg_ctl status -D $DBCLUSTER"
}

case "$1" in
'start')
pgsql_start
;;
'stop')
pgsql_stop
;;
'status')
pgsql_status
;;
'restart')
pgsql_restart
;;
*)
echo "usage $0 start|stop|restart|status"
esac
-----------------------------------------------------------------------------
root@srv-pdc:~# cat /etc/rc.d/rc.srv1cv81
#!/bin/sh
# Start/stop/restart the srv1cv81:

AGENTUSR=usr1cv81
INSTDIR=/opt/1C/v8.1/i386

srv_start() {
echo -n "Starting 1C:Enterprise 8.1 server: "
/bin/su $AGENTUSR -c "$INSTDIR/ragent -daemon"
}

srv_stop() {
echo -n "Stopping 1C:Enterprise 8.1 server: "
killall ragent
killall rmngr
killall rphost
sleep 10
}

srv_restart() {
echo -n "Restarting 1C:Enterprise 8.1 server: "
srv_stop
srv_start
}

case "$1" in
'start')
srv_start
;;
'stop')
srv_stop
;;
'restart')
srv_restart
;;
*)
echo "usage $0 start|stop|restart"
esac
--------------------------------------------------------------------------
root@srv-pdc:~# cat /etc/rc.d/rc.local
#!/bin/sh
#
# /etc/rc.d/rc.local: Local system initialization script.
#
# Put any local startup commands in here. Also, if you have
# anything that needs to be run at shutdown time you can
# make an /etc/rc.d/rc.local_shutdown script and put those
# commands in there.
/usr/sbin/dhcpd
/opt/hasp/aksusbd
/etc/rc.d/rc.postgresql start
/etc/rc.d/rc.srv1cv81 start
--------------------------------------------------------------------------
root@srv-pdc:~# cat /etc/rc.d/rc.local_shutdown
#!/bin/sh
#
# /etc/rc.d/rc.local: Local system initialization script.
#
# Put any local startup commands in here. Also, if you have
# anything that needs to be run at shutdown time you can
# make an /etc/rc.d/rc.local_shutdown script and put those
# commands in there.
killall /usr/sbin/dhcpd
killall /opt/hasp/aksusbd
/etc/rc.d/rc.postgresql stop
/etc/rc.d/rc.srv1cv81 stop

среда, 25 июня 2008 г.

изменение sid'ов у пользователей домена под управлением Samba

Итак, вводные:
PDC по управлением Samba 3.26 (и до 3.30 включительно ситуация идентчина)
бекэенд для хранения паролей tdbsam
пользователи добавлялись в домен с помощью smbpasswd
затем мне понадоиблось имзенить ихние сиды, точнее только последний разряд - RID. Для этого я прибег к утилите входящей в самбу под названием pdbedit. У нее есть соответсвующий ключик для изменения сидов и ридов.
На примере себя делаю так:
#pdbedit -u skonev -U 1115 -r
для тех кто в танке - 1115 это RID моего SID'а
в результате имеем следующее сообщение, это при уровне дебага - 1
Server's Role (logon server) NOT ADVISED with domain-level security
Unable to modify TDB passwd ! Error: Record does not exist
occured while storing the RID index (RID_0000045b)
Unable to modify entry!
Но при этом мой SID изменился, домен функционирует, все в порядке. Но! делаем второй ход, меняем мне пароль через smbpasswd:
#smbpasswd skonev
New SMB password:
Retype new SMB password:
Unable to modify TDB passwd ! Error: Record does not exist
occured while storing the RID index (RID_0000045b)
Failed to modify entry for user skonev.
Failed to modify password entry for user skonev
Опаньки, а проль не изменился, пробуем порулить моей учетной записью из консоли Windows - пользвоатель не найден.
Вообщем бился я с этой проблемой весь вечер, итог таков:
Начальный способ заведения пользвоателя в базу значения не имеет, это может быть как и smbpasswd, так и "pdbedit -u Vasiliy -a". При изменении сида или рида (значения не имеет) pdbedit, чтото колечит в базе. Чтоже делать? Сид мне необходимо изменит во чтобы то ни стало. И способ был найден.
для начала удаляем "кривого" пользователя из базы
#pdbedit -x skonev
причем процедуру лутше провести дважды, для надежности
а далее создаем его снова, только средствами именно pdbedit, и в качестве парметра указываем нужный нам RID или SID (кому что нужно)
#pdbedit -u skonev -a -U 1115 -b tdbsa
и радость - все работает, пользвоатель добавлен с нужным мне сидом, база цела, ничего не глючит. И есть возожность руления доменом из винды!
Как будет настроение я напишу как рулить самбой из винды и напишу как я реализовал в несколько усеченом виде групповые политики в самбе.

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

Аутентификация Ubuntu-desktop в домене Active Directory

Дано: FQDN домена: MYDOMAIN.LOCAL, FQDN домен-контроллера: PDC.MYDOMAIN.LOCAL, netbios-имя машины, которую добавляем: UBUNTU, netbios-имя домена: MYDOMAIN, учетная запись с правами администратора домена: quizz.

1. Установим следующие пакеты (и все зависимости, которые они за собой тянут):

sudo apt-get update
sudo apt-get install krb5-user winbind samba

2. Поправим /etc/krb5.conf (sudo gedit /etc/krb5.conf), он должен выглядеть точно так, как написано ниже, только конечно же не забудьте заменить имена домена, компьютера и т.д. своими именами:

[logging]
default = FILE10000:/var/log/krb5lib.log
[libdefaults]
ticket_lifetime = 24000
default_realm = MYDOMAIN.LOCAL
default_tkt_enctypes = des3-hmac-sha1 des-cbc-crc
default_tgs_enctypes = des3-hmac-sha1 des-cbc-crc
[realms]
MYDOMAIN.LOCAL = {
kdc =PDC.MYDOMAIN.LOCAL
admin_server = PDC.MYDOMAIN.LOCAL
default_domain = MYDOMAIN.LOCAL
}
[domain_realm]
.domain.internal =MYDOMAIN.LOCAL
domain.internal = MYDOMAIN.LOCAL

3. Отредактируем /etc/samba/smb.conf (sudo gedit /etc/samba/smb.conf):

[global]
security = ads
netbios name = UBUNTU
realm = MYDOMAIN.LOCAL
password server = PDC.MYDOMAIN.LOCAL
workgroup = MYDOMAIN
idmap uid = 500-10000000
idmap gid = 500-10000000
winbind separator = +
winbind enum users = no
winbind enum groups = no
winbind use default domain = yes
template homedir = /home/%D/%U
template shell = /bin/bash
client use spnego = yes
domain master = no

4. Сделаем /etc/nsswitch.conf (sudo gedit /etc/nsswitch.conf) точно таким, как написано ниже:

passwd: compat winbind
group: compat winbind
shadow: compat
hosts: files dns wins
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis

5. Отредактируем настройки PAM (для редактирования каждого из следующих файлов требуются права суперпользователя):
* /etc/pam.d/common-account должны содержать только следующие строки:

account sufficient pam_winbind.so
account required pam_unix.so

* в /etc/pam.d/common-auth должно быть только это:

auth sufficient pam_winbind.so
auth required pam_unix.so nullok_secure use_first_pass

* поправим the /etc/pam.d/common-password так, чтобы параметр max был 50, в качестве примера:

password required pam_unix.so nullok obscure min=4 max=50 md5

* убедитесь, что /etc/pam.d/common-session содержит следующие строки:

session required pam_mkhomedir.so umask=0022 skel=/etc/skel

6. Создадим home-директорию для пользователей Active Directory:

sudo mkdir -p /home/MYDOMAIN

7. Отредактируйте /etc/hosts:

127.0.0.1 ubuntu.mydomain.local ubuntu localhost

8. Инициализируем Kerberos:

sudo kinit quizz@MYDOMAIN.LOCAL

FQDN домена пишем заглавными буквами, точно так же, как писали в файле krb5.conf file. Проверить, что мы получили билет от Kerberos можно командой klist.
9. Добавим компьютер в Active Directory:

sudo net ads join -U quizz@MYDOMAIN.LOCAL

10. Перезапустим службы в следующем порядке:
sudo /etc/init.d/samba stop
sudo /etc/init.d/winbind stop
sudo /etc/init.d/samba start
sudo /etc/init.d/winbind start

На этом все!!! Перезагрузимся и попробуем зайти в систему под любым пользователем домена.
Не забываем, что для рабочей станции с установленной ubuntu администратор домена является не более, чем простым пользователям.
Основные источники информации: Официальный форум Ubuntu, официальный сайт проекта Samba.

суббота, 15 марта 2008 г.

Как в Linux привязать процесс к CPU и установить атрибуты планирования

Как в Linux привязать процесс к CPU и установить атрибуты планирования

При необходимости увеличить производительность определенного процесса в системе,
можно жестко привязать его к определенному CPU (CPU affinity), исключив
ситуацию мигрирования между процессорами, а также изменить для него алгоритм работы
планировщика задач и увеличить приоритет.

Привязка к CPU осуществляется командой taskset, а изменение параметров real-time
планирования командой chrt. Обе команды можно использовать каскадно, вызывая
одну в качестве аргумента другой.

Например:

taskset -c 2-3 chrt -f 1

привяжет выполнение команды к CPU со 2 по 3 ("-c 2-3", можно перечислять
процессоры через запятую, например, "-c 2,3"), а также задействует политику
планирования SCHED_FIFO ("-f") и установит приоритет 1 уровня.

Политики планирования (описание - man sched_setscheduler):
-b SCHED_BATCH
-f SCHED_FIFO
-o SCHED_OTHER
-r SCHED_RR

Изменение параметров для уже запущенного процесса производится при помощи опции "-p".
Например, изменение параметров процесса с PID 123:
taskset -c 2-3 -p 123
chrt -f 1 -p 123