Шукати в цьому блозі

субота, 18 вересня 2010 р.

UPD: Linux (Ubuntu) + ffmpeg with amr, mp3, faac, libgsm

Дополнительно к заметке.

п.6. В версии Ubuntu 10.04 Package libopencore-amrnb-dev и libopencore-amrwb-dev

Если хотим добавить libgsm :

sudo apt-get install libgsm1-dev libgsm-tools

Информация о пакетах (Ubuntu libgsm package):

libgsm-tools: User binaries for a GSM speech compressor
libgsm1: Shared libraries for GSM speech compressor
libgsm1-dbg: Shared libraries for GSM speech compressor (debug symbols)
libgsm1-dev: Development libraries for a GSM speech compressor



UPD 30.09.2010: В Ubuntu 10.04 ("Lucid Lynx") если необходимо установить libxvid.

Необходимо вместо libxvidcore4-dev указывать в комманде libxvidcore-dev т.е.

sudo apt-get install libxvidcore-dev

понеділок, 31 травня 2010 р.

xubuntu 10.04 + VNC Server

Задача установить VNC сервер с графической средой XFCE.
Устанавливаем сервер:
apt-get install tightvncserver xtightvncviewer

Создаем файл (пользователь emutant разрешение экрана 800х600):
sudo nano /etc/init.d/vncserver


С содержимым:
#!/bin/sh -e
### BEGIN INIT INFO
# Provides: vncserver
# Required-Start: networking
# Default-Start: S
# Default-Stop: 0 6### END INIT INFO
PATH="$PATH:/usr/X11R6/bin/"

# The Username:Group that will run VNC
export USER="emutant"
#${RUNAS}
# The display that VNC will use
DISPLAY="1"

# Color depth (between 8 and 32)
DEPTH="16"

# The Desktop geometry to use.
GEOMETRY="800x600"
#GEOMETRY="1024x768"
#GEOMETRY="1280x1024"

# The name that the VNC Desktop will have.
NAME="emutant-vnc-server"
OPTIONS="-name ${NAME} -depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}"

. /lib/lsb/init-functions

case "$1" in
start)
log_action_begin_msg "Starting vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver ${OPTIONS}"
;;

stop)
log_action_begin_msg "Stoping vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver -kill :${DISPLAY}";;
restart)
$0 stop
$0 start
;;
esac

exit 0


делаем исполняемым

sudo chmod +x /etc/init.d/vncserver

-rwxr-xr-x 1 root root 994 2010-05-31 11:49 vncserver

Создаем каталог:mkdir /home/emutant/.vnc

а также файл запуска XFCE4: nano /home/emutant/.vnc/vnc-xfce4
с содержимым:

#!/bin/sh
xfce-mcs-manager &
xfwm4 &
xfdesktop &
xfce4-panel &


Делаем исполняемым: chmod +x /home/emutant/.vnc/vnc-xfce4

Создаем xstartup script: nano /home/emutant/.vnc/xstartup

с содержимым:
#!/bin/sh
exec dbus-launch ~/.vnc/vnc-xfce4


Делаем исполняемым: chmod +x /home/emutant/.vnc/xstartup


Запускаем: /etc/init.d/vncserver start

Отвечаем на вопросы - назначаем пароли для доступа.

В результате в каталоге /home/emutant/.vnc появляются еще 3 файла: *.pid, *.log, passwd

В качестве клиента используем TightVNC или RealVNC

При соединении указываем ip:1.

bash script - find and kill pid

Иногда, необходимо "убить" запущенный скрипт (в моем случае Perl-script scriptname.pl) не зная его pid, решение на bash приведено ниже:

#!/bin/bash
PID=`ps -ef | awk '/scriptname.pl/{ print $2 }'|sed -n 1p`
echo $PID
kill $PID




UPDATE: 30.06.2010г.
Один камрад по имени Максим, жутко раскритиковал мой метод за нерациональность и привел свой пример, код ниже:

#!/bin/bash
PID=`ps ux | awk '/scriptname.pl/ && !/awk/ {print $2}'`
echo $PID
kill $PID

понеділок, 18 січня 2010 р.

Perl. LWP + proxy + авторизация

Возникла необходимость грабить и парсить одну страничку, находясь в локальной сети с MS Windows Server Active Directory и через прокси (в моем случе - это MS ISA-Server).
Дано:
пользоваетль - user000
домен - trand
пароль - passWooRDa
адрес прокси - 10.35.10.100
порт прокси - 8080

Код:

#!/usr/bin/perl -w
use strict;
use LWP::UserAgent;
my $proxy = 'http://10.35.10.100:8080/';
my $url = "http://www.bank.gov.ua/Fin_ryn/OF_KURS/Currency/FindByDate.aspx";
my $username = 'trand\user000';
my $password = 'passWooRDa';

my $ua = new LWP::UserAgent;
$ua->agent("Mozilla/6.0");
$ua->proxy('http',$proxy);

my $req = new HTTP::Request GET => $url;
$req->proxy_authorization_basic($username, $password);
my $res = $ua->request($req);

my $content='';
if ($res->is_success)
{
$content= $res->content;
print $content
}


Источник

середа, 11 листопада 2009 р.

mySQL + UTF8 проблема с поиском данных с кириллицей при использовании фунций ( lower/upper )

Исходные данные: Ubuntu server 9.04 + MySQL 5.1.x, была какая-то база MBASE с таблицей abase, в которую вносились данные в кодировке utf8, все запросы происходили посредством самописных Perl скриптов.

Так сложилось, что появилась необходимость использовать регистронезависимый поиск.
Самым простым способом реализации регистронезависимого поиска, является преобразование строки поиска и значения поля(ей) таблиц к верхнему(upper) или нижнему(lower) регистру.

Пример банального SELECT-а ввыглядит бля таблици abase так:

select * form abase where locate(lower('ЯбЛо'),lower(message0))>0;

т.е. строка поиска "ЯбЛо" и значение в поле message0 таблицы abase преобразовывается
к нижнему регистру и ищется вхождение.

К сожалению поиск не работал. Однако, не работал для кирилических символов, т.е. регистрозависимый в стиле:

select * form abase where messages0 LIKE 'Ябло%';

отрабатывал, но как только использовалось преобразование регистров, переставал работать.

Залогинившись mysql -uroot -ppass побросал запросы напрямую - увидел, что после использования функций преобразования регитров символов, отдает какю-то ересь из квадратиков.

Погуглив, нашел подсказку в указании кодировки по-умолчание в файле конфигурации MySQL:


[mysqld]
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci
init-connect="SET NAMES utf8"
skip-character-set-client-handshake

[mysqldump]
default-character-set=utf8

[client]
default-character-set = utf8


Вписав эти инструкции и перегрузив сервер MySQL сервер, получил еще ведро ошибок в стиле:
'Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE)'


Вобщем, плохо все, нашел совет перекодировать:

alter table `abase` convert to character set utf8
collate utf8_swedish_ci;


Однако, то ли я не разобрался, то ли еще почему-то, но не получилось.

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

CREATE DATABASE vizor CHARACTER SET utf8 COLLATE utf8_general_ci;

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

пʼятниця, 30 жовтня 2009 р.

Быстрая установка и настройка lighttpd на Ubuntu server 9.04 + SSL

Возникла необходимость поднять легкий(на слабом компьютере) веб-сервер с поддержкой SSL.
Был выбран lighttpd с установкой на имеющиюся платформу на базе ОС Ubuntu Server Edition 9.04 (Jaunty Jackalope).

Установка веб-сервера:
sudo apt-get install lighttpd

Для поддержки SSL:
sudo apt-get install openssl

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


sudo mkdir -p /var/www/Abase/
sudo mkdir -p /var/www/Abase/cgi-bin/
sudo mkdir -p /var/www/Abase/cgi-bin/.access
sudo mkdir -p /etc/lighttpd/certs
sudo mkdir -p /var/www/log.Abase
sudo chown www-data:www-data /var/www/log.Abase
sudo chmod 755 /var/www/log.Abase



Редактируем файл конфигурации:

cd /etc/lighttpd
vim lighttpd.conf


lighttpd.conf

Подключаемые модули:
server.modules = (
"mod_access",
"mod_alias",
"mod_accesslog",
"mod_compress",
"mod_cgi",
"mod_auth",

)


Указываем корень сервера и лог-файлов:

server.document-root = "/var/www/Abase/"
server.errorlog = "/var/log/lighttpd/error.log"
accesslog.filename = "/var/log/lighttpd/access.log"


Указываем файлы, которые будут подставляться, в качестве индексных файлов:
index-file.names = ( "index.cgi", "index.html",
"index.htm", "default.cgi",
"index.shtml" )



Описываем правила для CGI скриптов (в моем случае-это скрипты написанные на Perl):

static-file.exclude-extensions = ( ".cgi",".pl" )

cgi.assign = ( ".pl" => "/usr/bin/perl",
".cgi" => "/usr/bin/perl" )

$HTTP["url"] =~ "/cgi-bin/" {
cgi.assign = (".cgi" => "/usr/bin/perl",
".pl" => "/usr/bin/perl" )
}


Описываем авторизацию при доступе к серверу, в даном случае от корня и всем разрешенным пользователям:
auth.debug = 2
auth.backend = "plain"
auth.backend.plain.userfile ="/var/www/Abase/cgi-bin/.access/.lpassword"
auth.require = ( "/" => (
"method" => "basic",
"realm" => "Password protected area",
"require" => "valid-user"
)
)


Назначаем порт, на котором будет работать сервер, если эта инструкция за комментирована, то по-умолчанию порт 80.
server.port = 8080


SSL инструкции:

$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd/certs/lighttpd.pem"
server.document-root = "/var/www/Abase/"
server.errorlog = "/var/www/log.Abase/Abase.error.log"
accesslog.filename = "/var/www/log.Abase/Abase.access.log"
}


UID от которых будет работать lighttpd:
server.username = "www-data"
server.groupname = "www-data"



Lighttpd по-умолчанию разрешает листать все каталоги от корня и показывать все вложенные файлы. Поэтому введем некоторые ограничения на каталоги /cgi-bin/.access/ и /cgi-bin/, а именно запретим листание и показ файлов начинаемых с точки:

$HTTP["url"] =~ "^/cgi-bin/.access/($|/)" {
dir-listing.activate = "disable",
dir-listing.hide-dotfiles = "enable"
}
$HTTP["url"] =~ "^/cgi-bin/($|/)" {
dir-listing.activate = "disable",
dir-listing.hide-dotfiles = "enable"
}


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

Небольшое отступление от параноика, я всегда думаю, о том что-то упустил в настройках по безопасности, потому в каталоге /var/www/Abase/cgi-bin/ разместил индексный файл с редиректом на корень, вот его листинг:

cat /var/www/Abase/cgi-bin/default.cgi

#!/usr/local/bin/perl
use CGI;
my $query = CGI->new();
print $query->redirect('/')


Создание сертификатов.
Конечно, если Вы работаете в большой солидной компании, но лучше прикупить сертификатов, но в частном случае можно сгенерировать и свои:

cd /etc/lighttpd/certs
openssl req -new -x509 -keyout lighttpd.pem -out lighttpd.pem -days 365 -nodes
chmod 400 lighttpd.pem


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

Создаем файл, где будут хранится списки разрешенных пользователей и их пароли:
cat > .lpassword
username1:username1password
username2:username2password
username3:username3password

^D
Добавили три пользователя username1, username2, username3 с паролями username1password, username2password, username3password.

sudo chown root:www-data /var/www/Abase/cgi-bin/.access
sudo chmod 750 /var/www/Abase/cgi-bin/.access
sudo chown root:www-data /var/www/Abase/cgi-bin/.access/.lpassword
sudo chmod 640 /var/www/Abase/cgi-bin/.access/.lpassword



Теперь редактировать файл пользователей Вы сможете только указав прямую ссылку на файл:
sudo vim /var/www/Abase/cgi-bin/.access/.lpassword


Перезапускаем наш веб-сервер:
/etc/init.d/lighttpd restart

Проверяем в браузере.

источник 1
источник 2

четвер, 29 жовтня 2009 р.

Установка Perl модуля DBD::mysql. Ошибка Can't exec "mysql_config".

Ubuntu linux 9.04 server ed.
Имея установленный mysql-client при установке, с помощью cpan, модуля DBD::mysql, процесс завершался ошибой:

Can't find mysql_config. Use --mysql_config option to specify where mysql_config is located
Can't exec "mysql_config": No such file or directory at Makefile.PL line 464.
Can't find mysql_config. Use --mysql_config option to specify where mysql_config is located
Can't exec "mysql_config": No such file or directory at Makefile.PL line 464.
Can't find mysql_config. Use --mysql_config option to specify where mysql_config is located
Failed to determine directory of mysql.h. Use

perl Makefile.PL --cflags=-I dir

to set this directory. For details see the INSTALL.html file,
section "C Compiler flags" or type

perl Makefile.PL --help
Warning: No success on command[/usr/bin/perl Makefile.PL INSTALLDIRS=site]
Warning (usually harmless): 'YAML' not installed, will not store persistent state
CAPTTOFU/DBD-mysql-4.013.tar.gz
/usr/bin/perl Makefile.PL INSTALLDIRS=site -- NOT OK
Running make test
Make had some problems, won't test
Running make install
Make had some problems, won't install
Could not read '/root/.cpan/build/DBD-mysql-4.013-2UEonO/META.yml'. Falling back to other methods to determine prerequisites
Failed during this command:
CAPTTOFU/DBD-mysql-4.013.tar.gz : writemakefile NO '/usr/bin/perl Makefile.PL INSTALLDIRS=site' returned status 512


Решение - установка дополнительного пакета libmysql++-dev который содержит C++ API для запросов к Mysql (и других SQL баз):
sudo apt-get install libmysql++-dev