30 дек. 2009 г.
26 дек. 2009 г.
сборка deb-пакета с помощью checkinstall
24 дек. 2009 г.
VirtualBox + libfontconfig + undefined symbol: FT_Select_Size
Задача:
VirtualBox: supR3HardenedMainGetTrustedMain: dlopen("/usr/lib/virtualbox/VirtualBox.so",) failed: /usr/lib/libfontconfig.so.1: undefined symbol: FT_Select_Size
Итак, причина данной ошибки в том, что бинарник 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)
~$ 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
21 дек. 2009 г.
cuneiform + yagf
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Считаем, что сканер уже подключен и настроен, и пользователь, от имени которого происходит запуск yagf'а, находится в группе scanner. Или добавляем его в эту группу.
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
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 за пару минут
mkdir -p /srv/ftp/incoming
chown -R ftp /srv/ftp
chmod 555 /srv/ftp
chmod 777 /srv/ftp/incoming
su -
apt-get install vsftpd
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
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
13 дек. 2009 г.
Приход
9 дек. 2009 г.
Перевод Unix Date в удобочитаемый вид
#date -d @1234567890
Сбт Фев 14 02:31:30 MSK 2009
#!/bin/bash
DATE=/bin/date
ARGS="-d @"
$DATE $ARGS$1
20 нояб. 2009 г.
Lenny + hplip 3.9.10
- python2.5-dev
- libcups2-dev
- libusb-dev
- libtool
- libcupsimage2-dev
12 нояб. 2009 г.
Пересборка пакета mc с поддержкой smb
wget -c http://www.midnight-commander.org/downloads/3 -O mc-4.6.2.tar.gzПравильнее будет собрать пакет, особенно если имеется несколько lenny-based серверов. Можно в примере выше использовать dpkg-buildpackage -b после make. А можно так:
tar -xzvf mc-4.6.2.tar.gz
cd mc-4.6.2
./configure --help
./configure --выбранные опции (--prefix=/usr --with-samba для нашей цели)
make && make install && make clean
wajig source mcНайти строчку
nano mc-4.6.2~git20080311/debian/rocks
DEB_CONFIGURE_EXTRA_FLAGS := --with-glib2 --without-ext2undel \и изменить ее на
--enable-charset --without-samba --with-screen=slang
DEB_CONFIGURE_EXTRA_FLAGS := --with-glib2 --without-ext2undel \Если требуется, можно добавить и другие опции, которые выше мы посмотрели по ./configure --help. Далее остается только собрать и установить пакет:
--enable-charset --with-samba --enable-nls --with-screen=slang
wajig build mcP.S.: О том, что такое wajig, и почему он такой удобный, можно почитать здесь.
wajig install ./mc_4.6.2~git20080311-4_i386.deb
9 нояб. 2009 г.
PXE multuboot menu
19 окт. 2009 г.
Восстановление после неудачной установки .deb-пакета
cd /var/lib/dpkg/info
rm package-name.*
Package: package-nameНу а потом сделать apt-get -f install, дабы удалить следы остаточных конфликтов.
Status: install ok installed
Priority: extra
Section: alien
Installed-Size: 8440
Maintainer: root
Architecture: amd64
Version: v4.0rc9-999
Depends: blablabla
Conffiles:
Description: blahblahblah
.
Первоисточник и вдохновитель - тут.
12 окт. 2009 г.
Openfire + Java heap error
DAEMON_OPTS="$DAEMON_OPTS -server -Xmx128m -DopenfireHome=${DAEMON_DIR} \
-Dopenfire.lib.dir=${DAEMON_LIB} -classpath ${DAEMON_LIB}/startup.jar\
-jar ${DAEMON_LIB}/startup.jar"
5 окт. 2009 г.
Проблемы при обновлении MySQL
error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
Automatically generated for Debian scripts. DO NOT TOUCH![client]
host = localhost
user = debian-sys-maint
password = aIOlSOy4SM3GGIhA
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
user = debian-sys-maint
password = aIOlSOy4SM3GGIhA
socket = /var/run/mysqld/mysqld.sock
basedir = /usr
14 сент. 2009 г.
IPv4 - взгляд с подвыподвертом.
3 сент. 2009 г.
inotifywait / incron - базовое использование
Часто требуется мониторить какой-то системный каталог на предмет создания/изменения/удаления файлов в нем и совершать в зависимости от произошедшего события некие действия: просканить на вирусы, изменить права доступа, послать сообщение, etc.
#!/bin/bashСей скрипт будет давать права 777 файлу $file при его создании, модификации, перемещении в заданную $TARGET директорию.
INF=/usr/bin/inotifywait
TARGET=/home/share/
$INF -mrqq --format '%w%f' -e close -e moved_to -e create -e modify $TARGET | while read file; do chmod -R 777 $file; done
#: /home/interra# cat /etc/incron.d/temp
/home/share/ IN_CREATE,IN_ACCESS,IN_MODIFY /home/interra/temper.sh
#: /home/interra# cat /home/interra/temper.sh
#!/bin/bash
/bin/chmod -R 777 /home/share/
А если в двух словах - работа с incron абсолютно идентична работе с cron. Вообще, incron = inotify cron.
28 авг. 2009 г.
Определение типа файла по расширению
18 авг. 2009 г.
5 авг. 2009 г.
Отправка e-mail с вложением из консоли
Возникла необходимость в сабже в интересах автоматизации. Возможные решения:
1) (cat; uuencode file_name file_name) | mail -s "Subject" email
2) tar cf - src_tree | compress | uuencode src_tree.tar.Z | mail sys1!sys2!user
3) echo "text" | mutt -x -s "Subj" -a /path/to/file email
31 июл. 2009 г.
Openfire + Mail.ru IM Транспорт
23 июл. 2009 г.
Автоматизируем обновления dev-билдов Chrome
#!/bin/bash BASE=/home/delayer/\!/ URL=http://build.chromium.org/buildbot/snapshots/chromium-rel-linux/ FILE=chrome-linux.zip
OLD=`cat LATEST` # версия текущего на момент обновления билда
NEW=`curl $URL/LATEST` # версия последнего билда
if [ $OLD -eq $NEW ] # изменилась ли версия билда
then exit 0 # обновлений не произошло, отбой
else
echo "$NEW" > LATEST # новая версия билда для последующих обновлений
wget $URL/$NEW/$FILE # скачать архив свежего билда
if [ -s $FILE ] then unzip -o -d $BASE $FILE # если файл существует и не нулевого размера, разархивировать.
fi
if [ $? -eq "0" ] #проверить, успешна ли (возвратила 0) последняя операция (unzip)
then echo "Updated from $OLD to $NEW at `date`" >> update.log # записать лог, если разархивация прошла успешно
else echo "Update failed at `date`" >> update.log # записать лог о неуспешной операции
fi
fi
17 июл. 2009 г.
Brother MFC-7420 + xsane
Для того, чтобы сканить могла вся локалка, потребуются пакеты sane и sane-utils со своими зависимостями конечно. После их установки достаточно поправить /etc/default/saned, поставив директиву RUN=yes, и /etc/sane.d/saned.conf, котором добавим адрес локалки по примеру.
Далее /etc/init.d/saned start и все, запущенный на любой машинке означенной локальной сети xsane сам найдет и подключит расшаренные сканеры.
15 июл. 2009 г.
Установка debmirror в OpenSuSE
zypper refreshВсе необходимые зависимости поставятся самостоятельно. После этого берем deb-пакет debmirror'a и создаем из него .rpm:
zypper in alien
wget -c http://ftp.ru.debian.org/debian/pool/main/d/debmirror_20070123_all.deb
alien --to-rpm --scripts -T debmirror_20070123_all.deb
Can't locate LockFile/Simple.pm in @INC (@INC contains: /usr/lib/perl5/5.8.8/i486-linux-thread-multi /usr/lib/perl5/5.8.8 /usr/
lib/perl5/site_perl/5.8.8/i486-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl .) at ./debmirror lin
e 366.
BEGIN failed--compilation aborted at ./debmirror line 366.
Dash-prefixed modules are dependencies of the last package in a 'list'
-Compress::Raw::Zlib
-IO::Compress::Base
-IO::Compress:Zlib
Compress::Zlib
Digest::SHA1
-MIME::Base64
-URI
-HTML::Tagset
-HTML::Parser
-libnet ( already installed )
-Digest::MD5
libwww-perl
После установки всего необходимого - можно зеркалить репы сколько угодно, хоть Debian-ские, хоть Ubuntu-шные. Неплохая документация по тому, как создать скрипт зеркалирования на базе debmirror, есть тут.
9 июл. 2009 г.
Увеличение размера RAM внутри VZ-контейнера
echo $(($((1024 * 1024)) / $(($(getconf PAGE_SIZE) / 1024))))
Полученное значение (в моем случае 262144) отдаем виртуальной машине:
vzctl set 200 --privvmpages 262144 --save
где 200 - VEID машины, --save - сохранение параметра в конфиге. Без save проведенная настройка будет действительна лишь до перезагрузки контейнера.
6 июл. 2009 г.
VistualBox + usb проблемы
Большие размеры bin-логов mysql
nano /etc/my.cnf #
#log_bin
#expire_logs_days = 10
#max_binlog_size = 100M
Перезапускаем mysqld
/etc/init.d/mysql restart
Усе.
2 июн. 2009 г.
Медленные ssh-соединения
debug1: An invalid name was supplied
Cannot determine realm for numeric host address
debug1: An invalid name was supplied
A parameter was malformed
Validation error
debug1: An invalid name was supplied
Cannot determine realm for numeric host address
debug1: An invalid name was supplied
A parameter was malformed
Validation error
Гуглинг и "ман ридинг" привели к следующему решению. В настройках ssh-клиента, глобальных (/etc/ssh/ssh_config), или локальных (~/.ssh/config) запрещаем GSSAPIAuthentication: GSSAPIAuthentication no. Проблема перестает проявляться после реконнекта к удаленному хосту, так как ssh перечитывает конфиги (локальный приритетнее) при создании новой сессии.
26 мая 2009 г.
Блокировка пакетов, нежелательных к обновлению
Гораздо проще блокировать изменения данного пакета. Чтобы это сделать, пишем от root:
echo {PACKAGENAME} hold | dpkg --set-selectionsВ нашем случае,
apt-get update
echo rdesktop hold | dpkg --set-selections
apt-get upgrade
delayer@interro:~# apt-get upgrade
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Пакеты, которые будут оставлены в неизменном виде:
rdesktop
...
20 мая 2009 г.
CUPS hint: (client-error-forbidden)
При попытке подключить к CUPS одного Debian сервера принтер, подключенный, настроенный и расшаренный (опция в Administration - Share published printers connected to this system) к другому Debian серверу (обе машинки соединены openvpn туннелем) напоролся на неприятную ошибку, вынесенную в топик. Игры с настройками, попытка внести vpn-подсеть в /etc/networks на обеих сторонах не привели к желаемому результату. Решение оказалось следующим: в /etc/cups/cupsd.conf того CUPS, который отдает принтер, в секции
<Location />
Order Deny,Allow
Allow From ip_cups_client
</Location>
(чтобы такое вставить в HTML-ный блог, юзаем сервис специальный)
ip_cups_client в данном случае - адрес CUPS'а, к к которому подключается нужный принтер.
После рестарта "отдающего" CUPS все начинает работать и ошибка более не проявляется.
8 мая 2009 г.
IDN links
IDN, Punycode и все-все-все - стоит прочитать и попытаться вникнуть.. Хотя можно и RFC уже маять =) Если вкратце - национальные доменные имена - это пиздец!
Загрузчики
20 мар. 2009 г.
Настройка авторизации пользователя через .htaccess в Apache2
interra:/# nano /etc/apache2/aliasesДалее расскажем об этом файле apache2:
<IfModule alias_module>
Alias /restricted "/srv/www/restricted/"
<Directory "/srv/www/restricted/">
Options Indexes MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</IfModule>
echo "Include /etc/apache2/aliases" >> /etc/apache2/apache2.confПосле рестарта сервиса /etc/init.d/apache2 restart данная директория будет доступна через браузер по http://example.com/restricted.
Однако ее еще физически нет на сервере ;) Создаем, даем права доступа для www-data (пользователя, от имени которого работает www-сервер)
mkdir /srv/www/restricted; chown www-data.www-data /srv/www/restrictedТеперь ограничение доступа. Ограничивать мы будем с помощью локального .htaccess (именно для этого при описании алиаса используется AllowOverride all директива - для преимущества параметров .htaccess над глобальными настройками сервера). Создадим этот файл в корне /restricted со следующим содержанием:
interra:/# nano /srv/www/restricted/.htaccessТо бишь теперь доступ к папке /restricted будет блокироваться всем, кроме списка valid-user'ов из /srv/www/restricted/.htpasswd и то только при их успешной аутентификации. Осталось создать файл .htpasswd.
AuthName "Restricted Access. Authenficate yourself!"
AuthType Basic
AuthUserFile /srv/www/restricted/.htpasswd
<Limit GET>
order deny,allow
allow from all
require valid-user
</Limit>
Делается это одноименной утилитой, лежать файл может где угодно, ну и прав на чтение его стоит дать поменьше.. например 0600. Создаем тестового пользователя test c паролем test:
interra:/srv/www/restricted# htpasswd -c /srv/www/restricted/.htpasswd testИ если поглядеть на файл .htpasswd изнутри, то...
New password:
Re-type new password:
Adding password for user test
interra:/# more /srv/www/restricted/.htpasswdЗайдя по вышеозначенному адресу, мы получим приглашение аутентифицировать себя. В случае успешной аутентификации увидим содержимое директории. Иначе,
test:IWF8pgFr9p2o.
This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.что по-русски звучит как "идите в лес" =)
Данный материал навеян этой страничкой, там присутствуют также описания всех используемых в работе директив Apache. То, чего нет там, можно узнать тут.
PS: при написании заметки неоценимую помощь оказала эта страничка, автоматом декодирующая HTML'ные <> в идеологически правильные < и >".
24 янв. 2009 г.
Suse Studio
Мегаклассная инициатива от Novell Inc. под названием SuSE Studio. О чем она, и что из себя представляет, можно поподробнее узнать из вот этой статьи или прямо на сайте, поглядев скринкаст по сабжу.
Если коротко и по-русски, то данный проект - web-конструктор для образов suse-систем исходя из конкретных задач. Система собирается через вебморду по кирпичикам, с учетом всех зависимостей и требований. Возможна загрузка сторонних пакетов, не входящих в репозитории. На выходе получаем контейнер для VMware или Xen, образ .iso или .img по вкусу. Их можно прямо к себе скачать или где-нить опубликовать.
В общем... айс, берем на заметку.
man zypper
7 янв. 2009 г.
zypper tunes
zypper mr --keep-packages --remoteПосле этого для всех удаленных (то есть сетевых) репозиториев пакетов - ключ --remote - загруженные при установке/обновлении софта пакеты будут кешироваться в /var/cache/zypp/packages. Убрать сие - ключом
zypper mr --no-keep-packages --remoteОчистить кеш - можно как-то через modifyrepo (сам zypper я так понял, не умеет) но похоже, так как в качестве входных параметров оно требует название репы, то придется для каждого подключенного репозитория в отдельности выполнять clean. Нафиг надо, уж проще просто очистить папку /var/cache/zypp/packages старым добрым rm -rf.