30 дек. 2009 г.

xpgnome

Об-windpws-ить убунту? Нет ничего проще - велкам.
Можно также и сделать из старой доброй XP-юши знатную бубунтищу.

26 дек. 2009 г.

сборка deb-пакета с помощью checkinstall

На днях отрелизился (наконец-то!) свежий Midnight Commander с многочисленными вкусностями (changelog). Однако на сегодняшний день в deb-репозиториях наличествует только -pre3 версия, в бинарном и src-виде, поэтому единственный способ получить "свежачок" - собрать самому. Ввиду отсутствия "репозиторных сорцев" собрать пакет описанным ранее способом не выйдет. Поэтому берем "сорец", обычным образом распаковываем, конфигурим, собираем. А далее финт - вместо make install устанавливаем замечательную утилитку checkinstall и вбиваем в консоль checkinstall -D.  Ответив на пару вопросов, мы получим а) установленный mc; б)  deb-пакет, который можно ставить на других машинах без заморочек со сборкой.

24 дек. 2009 г.

VirtualBox + libfontconfig + undefined symbol: FT_Select_Size

Дано: Debian Sid/Squeeze, Virtualbox-3.1.
Задача:
VirtualBox: supR3HardenedMainGetTrustedMain: dlopen("/usr/lib/virtualbox/VirtualBox.so",) failed: /usr/lib/libfontconfig.so.1: undefined symbol: FT_Select_Size
Такая вот шняга при запуске вибокса. Убил на ее решение практически целый день, перерыв кучу форумов и перепробовав кучу рецептов, а также по всякому напереустанавливав как сам Виртуалбокс (третью и вторую версии, из репозитория и вручную), так и всё, что хоть как то связано с libfontconfig. В ход был даже пущен strace (хоть я и не особо умею им пользоваться).
Решение выгуглилось неожиданно и в треде, не связанном с вопросами виртуализации.
Итак, причина данной ошибки в том, что бинарник Virtualbox'a получает по запросу не ту версию библиотеки libfreetype, которую ему надобно. А так как без libfreetype.so.6 не может работать libfontconfig.so.1, то он и валит вышеозначенный error. Это удалось проследить следующим образом:
~$ ldd /usr/lib/libfontconfig.so.1
linux-gate.so.1 => (0xb7f56000)
libfreetype.so.6 => /usr/local/lib/libfreetype.so.6 (0xb7ea8000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7e93000)
libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb7e6c000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7d25000)
/lib/ld-linux.so.2 (0xb7f57000)
Вывод ldd гласит, что необходимая для работы libfontconfig'a библиотека libfreetype.so.6 находится в /usr/local/lib/, тогда как "родная" дебиановская libfreetype (что из пакета libfreetype6) устанавливается в /usr/lib. Не знаю, откуда взялась сабжевая версия... Скорее всего, при одной из ранних компиляций какого-то иного софта. Это уже не важно. В итоге, так как
 ~$ ls -l /usr/local/lib/libfreetype.so.6
lrwxrwxrwx 1 root staff 35 Дек 24 17:23 /usr/local/lib/libfreetype.so.6 -> libfreetype.so.6.3.6
, а
~$ ls -l /usr/lib/libfreetype.so.6
lrwxrwxrwx 1 root root 21 Дек 24 17:07 /usr/lib/libfreetype.so.6 -> libfreetype.so.6.3.22
, из-за такого несхождения версий ошибка и случалась.
Таким образом, если мы проделаем следующие действия:
~$ sudo -s
~# rm /usr/local/lib/libfreetype.so /usr/local/lib/libfreetype.so.6
~# ln -s /usr/lib/libfreetype.so.6.3.22 /usr/local/lib/libfreetype.so.6
~# ln -s /usr/lib/libfreetype.so.6.3.22 /usr/local/lib/libfreetype.so
~# ldconfig
, то Virtualbox порадует нас своим окном принятия лицензии =). Конечно, можно было сделать иначе - удалить из /usr/local/lib/ все упоминания о некорректной версии libfreetype'a, и переназначить через ldconfig путь к правильной версии этой библиотеки, но я хз, как это правильно сделать  ;). Главное, что цель достигнута.
Надеюсь, данная заметка пригодится товарищам по несчастью.

21 дек. 2009 г.

cuneiform + yagf

Если есть сканер с saned, и есть linux (в данном случае Ubuntu 8.04 и Debian Lenny), то можно порешать задачу настройки системы распознавания текстов. Некогда проприетарная, OCR-система Cuneiform сегодня распространяется под свободной лицензией. Ее linux-порт разрабатывается сообществом под Simplified BSD лицензией. Некоторую информацию, а также официальные релизы проекта можно почерпнуть на официальной страничке. Также существует отдельная ветка, разрабатываемая Андреем Боровским, целью которой является работа Cuneiform'a в Linux с текстами на смешанных языках (русский-английский и т.д.). Им же разрабатывается графический интерфейс к консольному cuneiform, под названием YAGF. Вот это все счастье и будем заставлять работать.

Качаем исходные коды cuneiform'a и yagf'a:
wget -c http://symmetrica.net/cuneiform-linux/cuneiform-multilang-0.7.0.tar.gz
wget  http://symmetrica.net/cuneiform-linux/yagf-0.8.1.tar.gz
Далее необходимо установить некоторые дополнительные пакеты. Что-то может быть уже установлено ранее..
wajig install qt4-dev-tools imagemagick libmagick++9-dev libaspell-dev aspell-ru cmake build-essential
(еще необходим qmake, он, зараза, в зависимости от дистрибутива, шкерится в разных пакетах: в убунтах -  libqt4-dev, который доступен из backports-репозитория, в дебиане - qt4-qmake.)
Распаковываем tarball-ы и компилируем/устанавливаем оба пакета:
tar -xzvf cuneiform-multilang-0.7.0.tar.gz
tar -xzvf  yagf-0.8.1.tar.gz
cd cuneiform-multilang-0.7.0
cmake ./ && make && make install ( less readme.txt)
cd ../yagf-0.8.1
cmake ./ && make && make install
Считаем, что сканер уже подключен и настроен, и пользователь, от имени которого происходит запуск yagf'а, находится в группе scanner. Или добавляем его в эту группу.
adduser user scanner
Если при запуске распознавания cureiform не находит libpuma.so или другую необходимую ему библиотеку, то необходимо или пересобрать cuneiform с опцией -DCMAKE_INSTALL_PREFIX=/usr
или использовать скрипт, создающий симлинки на библиотеки из /usr/local/lib в /usr/lib:
#!/bin/bash
for lib in `ls /usr/local/lib/*.so`
do
LIBNAME=`echo $lib | awk -F "/" {'print $5'}`
ln -s $lib /usr/lib/$LIBNAME
done

17 дек. 2009 г.

vsftpd за пару минут

Бывает, что нужно быстро поднять фтп-шник для каких то разовых целей. А напишу-ка я здесь необходимые для этого действия. Ставить будем Very Secure FTP Daemon - vsftpd в Debian Lenny. Не потому что другие хуже, а потому что этот наиболее знаком.
Создаем нужные директории:
 mkdir -p /srv/ftp/incoming
 chown -R ftp /srv/ftp
 chmod 555 /srv/ftp
 chmod 777 /srv/ftp/incoming
Корень ftp-сервера (/srv/ftp/) должен быть недоступен для записи от имени пользователя, от которого запускается сервер. В incoming же мы собираемся писать/удалять все подряд, поэтому с правами можно не заморачиваться. Далее ставим vsftpd:
 su -
 apt-get install vsftpd
Простенький conf-файл для быстрого развертывания сервера:
listen=YES
anonymous_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=NO
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
chown_username=ftp
xferlog_file=/var/log/vsftpd.log
ascii_upload_enable=YES
ascii_download_enable=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
anon_root=/srv/ftp
anon_umask=077
no_anon_password=YES
anon_other_write_enable=YES

Возможно, что-то из представленного и лишнее в поставленной задаче поднятия ftp минимальной конфигурации - этот пример был создан из default-ного vsftpd.conf добавлением/удалением некоторых опций. Запускаем сервер:
/etc/init.d/vsftpd start
Если все было проделано верно, можно работать.
Здесь довольное познавательное обсуждение опций свежих версий vsftpd, может пригодиться при возникновении проблем. А здесь - максимально полный man. Настоятельно рекомендуется ознакомиться с добавляемыми в конфиг опциями...иначе как бы чего не вышло. ;)

UPD:  Доложу конфиг для ftp-сервера без анонимного доступа. Доступ разрешается всем системным пользователям, перечисленным в списке /etc/vsftpd.userlist
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=002
dirmessage_enable=NO
xferlog_enable=YES
connect_from_port_20=NO
chown_uploads=YES
chown_username=ftp
idle_session_timeout=180
data_connection_timeout=120
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_local_user=YES
ls_recurse_enable=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
log_ftp_protocol=YES

Содержимое  /etc/vsftpd.userlist состоит из списка (по одному на строку) имен пользователей, которым разрешен доступ к ftp-ресурсу. Остальным доступ запрещается еще до запроса пароля.

Skype to SIP

Интересное решение, позволяющее "шлюзовать" звонки из/в Skype на SIP-телефоны/адаптеры. За актуальную версию софта (java-based) просят символических денех ($2.5), предыдущая - раздается даром.

13 дек. 2009 г.

Приход

http://delayer.org - это теперь здесь ;) Старый адрес, конечно же, по-прежнему доступен.

9 дек. 2009 г.

Перевод Unix Date в удобочитаемый вид

DHCP/DNS сервер dnsmasq, используемый на многих подконтрольных мне серверах в качестве шустрой замены ICS DHCPD и BIND, записывает данные о выданных адресах с датой в формате Unix Epoch. Частенько требуется подглядеть, что-кому-когда выдано, поэтому для ориентации во времени хотелось бы иметь простой инструмент для перевода Unix Date'a в "Human Date" ;). Делаем так:
#date -d @1234567890
Сбт Фев 14 02:31:30 MSK 2009
Элементарно ;) Опция -d - считать заданную дату, а не текущую, @ - явное указание date'у на то, что ему отдается  UnixDate.
Можно сделать скриптом, в качестве параметра для которого будет использовать unixdate.
#!/bin/bash

DATE=/bin/date
ARGS="-d @"

$DATE $ARGS$1

P.S.: существует возможность "спросить время" и у веб-сервисов, например, тут.