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.: существует возможность "спросить время" и у веб-сервисов, например, тут.

20 нояб. 2009 г.

Lenny + hplip 3.9.10

Дабы установить свеженький hplip, который я хочу заюзать для печати HP LaserJet P1005 (foo2xqx почему то бледнит), необходимо запускать инсталлятор 1) от пользователя, имеющего право на su; 2) сделать ему export LANG=C, иначе установщик не может принять пароль суперпользователя.
Хрен знает почему. Баг, видимо. Но предложенное решение работает.
А еще эта ересь не в состоянии сразу выдать список того, чего ему не хватает для установки. Выдает по одному наименованию за раз. И это при том, что говорит, мол де, нужно 6 зависимостей удовлетворить, вот тебе первая. Приходи за второй, блять...
Короче говоря, нужно еще поставить вот что:
  • python2.5-dev
  • libcups2-dev
  • libusb-dev
  • libtool
  • libcupsimage2-dev
Это на моей системе, где уже что-то когда то собиралось (те же ядерные модули), так что в иных случаях этот список может быть длиннее.

12 нояб. 2009 г.

Пересборка пакета mc с поддержкой smb

Не знаю почему, но в репозиториях Debian Lenny пакет mc, Midnight Commander-а то есть, собран с --without-samba, что выливается в невозможность подключиться из файлового менеджера к SMB-ресурсам сети. Причем, если просто попытаться пересобрать пакет, воспользовавшись src-репозиторием и dpkg-buildpackage, то результат будет аналогичным. Далее следует кратенькое повествование, как заиметь самосборный deb-пакет mc, имеющий все необходимые опции.
Вообще говоря, никто не мешает взять оффсайта тарболл и проделать следующую последовательность:
wget -c http://www.midnight-commander.org/downloads/3 -O mc-4.6.2.tar.gz
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
Правильнее будет собрать пакет, особенно если имеется несколько lenny-based серверов. Можно в примере выше использовать dpkg-buildpackage -b после make. А можно так:
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 \
--enable-charset --with-samba --enable-nls --with-screen=slang
Если требуется, можно добавить и другие опции, которые выше мы посмотрели по ./configure --help. Далее остается только собрать и установить пакет:
wajig build mc
wajig install ./mc_4.6.2~git20080311-4_i386.deb
P.S.: О том, что такое wajig, и почему он такой удобный, можно почитать здесь.

9 нояб. 2009 г.

PXE multuboot menu

Преотличнейшая статья по вопросу создания многофункционального сетевого загрузчика. Действуя по аналогии, можно создать уникальное для собственных задач меню netboot-инсталлера любого количества операционных систем - лишь бы для них был образ для загрузки по сети. Давно уже витала мысль состряпать что-то подобное, дабы не лазить в настройки DHCP-сервера, чтобы изменить отдаваемый в сеть netboot-образ (Debian или Ubuntu). А тут откопалось готовое решение.

19 окт. 2009 г.

Восстановление после неудачной установки .deb-пакета

Если вы устанавливали некий deb-пакет, и в процессе вас постигла неудача, выполните следующее (воспользуйтесь этим способом только в случае неудачной установки):
cd /var/lib/dpkg/info
rm package-name.*
Откройте (с правами администратора) в любимом текстовом редакторе файл /var/lib/dpkg/status. Вам нужно удалить секцию с примерно следующим содержанием:
Package: package-name
Status: install ok installed
Priority: extra
Section: alien
Installed-Size: 8440
Maintainer: root

Architecture: amd64

Version: v4.0rc9-999

Depends: blablabla

Conffiles:
Description: blahblahblah
 .
Ну а потом сделать apt-get -f install, дабы удалить следы остаточных конфликтов.
Первоисточник и вдохновитель - тут.

12 окт. 2009 г.

Openfire + Java heap error

При использовании Jabber-сервера Openfire (у меня 3.6.3, но думаю, актуально и на более старых версиях) в linux влюченные plugin-ы, особенно IM Gateway, охочи до памяти. При достаточной активности и количестве подключенных пользователей, пользующих те или иные транспорты, возможно переполнение выделенной java-машине памяти и выпадение сервера в ошибку java.lang.OutOfMemoryError: Java heap space. В качестве решения можно предложить увеличение объема отдаваемой java-машине памяти (по умолчанию дается 32MB). Для этого нужно поправить init-скрипт openfire - ищем определение переменной DAEMON_OPTS и определяем ее следующим образом:
DAEMON_OPTS="$DAEMON_OPTS -server -Xmx128m -DopenfireHome=${DAEMON_DIR} \
-Dopenfire.lib.dir=${DAEMON_LIB} -classpath ${DAEMON_LIB}/startup.jar\
-jar ${DAEMON_LIB}/startup.jar"
Жирным маркером выделена свежедобавленная опция. В данном примере java-машине (и openfire-у соответственно) выделяется 128 метров памяти, чего хватить должно с избытком. Осталось лишь перезапустить сервер /etc/init.d/openfire restart.

5 окт. 2009 г.

Apache 2 + vhosts

Короткое и информативное HOW-TO по настройке нескольких VirtualHost-ов в apache2.

Проблемы при обновлении MySQL

Столкнулся с проблемой при обновлении mysql5:
error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
При том, что мускуль сам по себе работает и с консоли к себе нормально пускает. Добавление GRANT'ом пользователя debian-sys-maint в СУБД не помогает. Решение оказалось очень простым. Зачем то дебиановский инсталлер создает файл /etc/mysql/debian.cnf следующего содержания:
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 - взгляд с подвыподвертом.

А вдруг да пригодится... Занимательная статейка на предмет IPv4-адресации, систем счисления и манипуляций с цифирками.. ;)

3 сент. 2009 г.

inotifywait / incron - базовое использование


Часто требуется мониторить какой-то системный каталог на предмет создания/изменения/удаления файлов в нем и совершать в зависимости от произошедшего события некие действия: просканить на вирусы, изменить права доступа, послать сообщение, etc. 
Наиболее удобным средством для подобного мониторинга мне видится inotify - подсистема ядра Linux, занимающаяся слежением за событиями на уровне файловой системы. Ее возможности как раз соответствуют поставленным парой предложений выше задачам, а также оставляют немалый "запас прочности" на более широкий спектр вопросов. Для работы с inotify следует установить пакет inotify-tools. Это даст возможность воспользоваться в своих скриптах утилитами inotifywait и inotifywatch.
Первая утилита, inotifywait, ждет определенных изменений заданного файла (или файлов в каталоге) и при их возникновении завершает свою работу или пишет в STDOUT лог произошедших действий (если работает в режиме монитора -m). Идеальна для использования в скриптах. К примеру, 
#!/bin/bash
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 
Сей скрипт будет давать права 777 файлу $file при его создании, модификации, перемещении в заданную $TARGET директорию.
inotifywatch, вторая утилита пакета, предназначена для мониторинга заданного файла/каталога на предмет определенных действий над оным за заданный промежуток времени с последующей выдачей статистики.  Ее выгодно применять для какого-нить дебага нибудь-чего.

Вместо использования inotifywait для мониторинга внутри скрипта, с последующим выполнением какого-то действия, очень удобно использовать демон incron (это отдельный пакет, использующий ту же подсистему inotify), который занимается по сути тем же самым, и при совершении заданного действия запускает указанный ему скрипт. Очень хороший русскоязычный док по работе с incron'ом можно поглядеть тут, имеются и примеры использования. Дабы не увеличивать степень энтропии интернетов, копировать сюда думаю излишне. В качестве примера, сейчас работает вот такой скрипт:
#: /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/
Также можно, аналогично работе с cron, использовать утилиту incrontab для записи правил срабатывания incron-a. "Внутрь" его записывается то же, что сохраняется в /etc/incron.d/.
А если в двух словах - работа с incron абсолютно идентична работе с cron. Вообще, incron = inotify cron.

28 авг. 2009 г.

Определение типа файла по расширению

Думаю, перед каждым вставала задача - понять, что делать с файлом неизвестного расширения. Или хотя бы определить, откуда он мог взяться. Конечно, обычный гуглинг спасает, но далеко не по первому запросу, а то и на первой странице. К тому же, оказывается, есть замечательный ресурс, где в одном месте собрана и структурирована информация об огромном количестве расширений файлов и сопутствующей информации. Сие есть http://open-file.ru/. Более того, ресурс похоже отечественный, так что непонятные англицкие буквы здесь только в расширениях =)

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 Транспорт

Так как в используемом (и достаточно успешно) мной jabber-сервере Openfire нет собственного mrim-транспорта. А хочется ;) Однако есть возможность подключать внешние компоненты и использовать их ресурсы как свои собственные. Эта возможность в данном случае и используется. На питоне написан (и вроде даже как по сегодняшний день развивается) mrim-транспорт, скачать и поставить который особого труда не составляет. Дабы не увеличать и без того высокий уровень энтропии Сети, просто запоминаем сцылко, где можно взять пошаговое руководство по настройке этого дела. Дистрибутив значения не имеет.

23 июл. 2009 г.

Автоматизируем обновления dev-билдов Chrome

На сколь хватило моих близконулевых познаний в баше (я учусь тока =) ), накропал скриптец, который следит за обновлениями dev-билдов Google Chromium и тырит свежие билды, распаковывая куда надо и устанавливая свеженький "хромчег". В принципе, неделю уже сижу под этими билдами...фсе работает, особо не валится, летает шустренько.
Вот сам скрипт:
#!/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
Вдруг кому сгодится...
З.Ы.: для включения работы с flash-ом, нужно создать в корне chrome-a папку plugins и слинковать или скопировать в нее библиотеку libflashplayer.so. При запуске указать опцию --enable-plugins.

17 июл. 2009 г.

Brother MFC-7420 + xsane

Для того, чтобы заработал xsane на Debian Lenny с МФУ Brother-MFC7420R, недостаточно слить/установить драйвера с оффсайта. Нужно еще проследовать вот таким вот инструкциям, иначе попытка ткнуться к сканеру обламывается ошибкой доступа. Имеем в виду!
Для того, чтобы сканить могла вся локалка, потребуются пакеты sane и sane-utils со своими зависимостями конечно. После их установки достаточно поправить /etc/default/saned, поставив директиву RUN=yes, и /etc/sane.d/saned.conf, котором добавим адрес локалки по примеру.
Далее /etc/init.d/saned start и все, запущенный на любой машинке означенной локальной сети xsane сам найдет и подключит расшаренные сканеры.

15 июл. 2009 г.

Установка debmirror в OpenSuSE

Так как интернету сейчас много и широкого, за что спасибо Эр-Телекому с его "московским безлимитом", то появилась задачка - под управлением домашней OpenSuSE11.1 запустить скачивание и последующее обновление репозитория для Debian Lenny. wget отломился сразу, ибо он вытащит все подряд, для полутора десятков архитектур. С rsync-ом тоже как то не сложилось, ибо требуется учетка на сервере, откуда ты собираешься это все тянуть. Хотя, имейся она на mirror.yandex.ru, было бы беспроблемно. Сами дебиановцы рекомендуют использовать rsync и даже имеют готовые наборы скриптов для создания зеркала дистрибутива.
Мы же будем развлекаться с debmirror'ом, тем более что уже есть наработанные скрипты для обновления нужных репозиториев (main, backports, multimedia). Единственной проблемой является отсутствие пакета для SuSE самого debmirror'a. Но это не проблема на самом деле, ведь есть alien! Наши действия:
zypper refresh
zypper in alien
Все необходимые зависимости поставятся самостоятельно. После этого берем deb-пакет debmirror'a и создаем из него .rpm:
wget -c http://ftp.ru.debian.org/debian/pool/main/d/debmirror_20070123_all.deb
alien --to-rpm --scripts -T debmirror_20070123_all.deb
Опция -Т alien'a проверит полученный пакет, а --scripts сконвертирует внутренние скрипты пакета под новое окружение.Однако после zypper in ./debmirror-20070123-noarch.rpm и попытке запустить debmirror валится с ошибкой
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.
Сие означает отсутствие требуемых модулей Perl'a. Гуглинг показал, что я не один в своих исканиях, поэтому список всех необходимых модулей нашелся довольно быстро:
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
В принципе, если ставить через cpan install Module::Name, то достаточно брать имена модулей, которые без "-", остальные притянутся зависимостями. Модуль libwww-perl - не CPAN'овая запись, его можно поставить через zypper.
После установки всего необходимого - можно зеркалить репы сколько угодно, хоть Debian-ские, хоть Ubuntu-шные. Неплохая документация по тому, как создать скрипт зеркалирования на базе debmirror, есть тут.

9 июл. 2009 г.

Увеличение размера RAM внутри VZ-контейнера

По умолчанию в openvz-контейнере доступно для ОС 256MB RAM. Крайне маловато, если использовать ее для сервера БД, например. Для увеличения этого размера используется параметр privvmpages, однако значение этого параметра выражается в pages а не в привычных мегабайтах. Чтобы понять, сколько попугаев в удаве страниц в требуемом нам объеме (пусть это будет 1Gb), используем великий и ужасный bash:
echo $(($((1024 * 1024)) / $(($(getconf PAGE_SIZE) / 1024))))

Полученное значение (в моем случае 262144) отдаем виртуальной машине:
vzctl set 200 --privvmpages 262144 --save
где 200 - VEID машины, --save - сохранение параметра в конфиге. Без save проведенная настройка будет действительна лишь до перезагрузки контейнера.

6 июл. 2009 г.

VistualBox + usb проблемы

Как ни странно, но до сих пор актуальна проблема работы с usb-девайсами VirtualBox в окружении *buntu. А посему, в закладки краткий пошаговый howto, что где поправить и переписать, дабы все заработало. Там же есть ссылки на более подробные треды по сабжу.

Большие размеры bin-логов mysql

Столкнулся тут с неожиданной проблемой - кончилось место на жестком диске. И очень странным показался размер каталога /var/log/mysql - аж прям в пару гигабайт. эти логи были в бинарном формате, то есть так просто и не поглядишь, что там есть. В этих ваших интернетах нашлось описание, что такое MySQL Binary Log, и нахрена он нужен. Оказалось, что для моих целей - даром не нужен, ибо используется это чудо в целях повышения надежности при восстановлении данных и реплицирования. Как показывает практика, и без этого мелкие огрехи "мускуль" сам правит неплохо, а для крупных крахов суествуют бекапы, занимающие зачастую меньше места ;) Короче, отключаем:
nano /etc/my.cnf #грохаем комментируем строки, относящиеся к log_bin
#log_bin
#expire_logs_days = 10
#max_binlog_size = 100M

Перезапускаем mysqld
/etc/init.d/mysql restart

Усе.

2 июн. 2009 г.

Медленные ssh-соединения

Проблема: при хождении к удаленному linux-хосту с linux же машинки по ssh (авторизация по ключу), налицо некоторая задумчивость ssh-а. Запуск в verbose mode ( ssh -v) выдает много чего, но интерес вызвали следующие строки:
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 г.

Блокировка пакетов, нежелательных к обновлению

Замечательный хинт для deb-based дистрибов (ну, для Debian/*buntu точно), позволяющий запрещать к обновлению некоторые пакеты. Зачем это нужно? А вот... Есть к примеру пакет rdesktop, который по умолчанию очень хреново работает с переключением раскладок во время RDP-сессии. А есть патченная версия его же, но от Etersoft'a, доступная также свободно. Версия последнего - старее, поэтому при любом apt-get upgrade apt норовит обновить его. Что влечет за собой последующие дополнительные действия по скачиванию пакета, и его установке. Нет, можно конечно взять исходники и патчи Этерсофта, и скомпилить самому свеженький rdesktop'чик. Но ведь лень ;)
Гораздо проще блокировать изменения данного пакета. Чтобы это сделать, пишем от root:
echo {PACKAGENAME} hold | dpkg --set-selections
В нашем случае,
apt-get update
echo rdesktop hold | dpkg --set-selections
apt-get upgrade
После чего обновятся все пакеты дистрибутива, версии которых новее установленных, однако rdesktop (или какой то иной пакет) останется неизменным.
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 уже маять =) Если вкратце - национальные доменные имена - это пиздец!

Загрузчики

Много где это описано, с картинками, видео, рисунками...не знаю с чем еще.. но все равно когда нужно, можно забыть и напортачить. А посему, пусть и тут будет, под рукой. Речь идет о восстановлении загрузчиков - виндового после убийства его grub'ом/lilo/bsd и grub'a после аналогичных действий с другой стороны =)
Системы всегда разные, разбиение и количество hdd тоже, но в общем действия такие:
1) GRUB
Грузимся с любого linux-liveCD, который окажется в наличии.
Запускаем grub. Приглашение консоли должно измениться на grub>
Далее вбиваем две команды: 
root (hd0,1)
setup (hd0)
TAB работает, так что не забываем его пользовать, дабы не ошибиться во вводе. hd0 - первый винт, 1 - второй раздел этого винта (то есть указываем, где лежит stage2 загрузчика. setup'ом устанавлием stage1 в MBR. 
Все, линукс онлайн! ;) Причем, если в menu.lst восстанавливаемого линуха было несколько записей, они вернутся в целости и сохранности.
2)WIN
Грузимся с любого диска установки Windows, у которого есть консоль восстановления (XP и выше точно..насчет win2k не уверен). Также должны подойти диски вроде HirenBootCD. Попав в консоль (нажать R когда инсталлер спросит, устанавливать винду, восстанавливать или передумать), выбираем копию установленной ОС, как правило она одна, так что жмакать 1. Далее вводим пароль учетки Администратор/Administrator. Залогинившись, последовательно вводим две команды - FIXMBR и FIXBOOT. Ребутимся.
Винда онлайн! ;)

20 мар. 2009 г.

Настройка авторизации пользователя через .htaccess в Apache2

Возникла следующая задачка: нужно отдать файл через http, но только нужному пользователю. Наиболее простое имхо решение - apache2+аутентификация доступа. То есть это будет выглядеть как линк, http://example.com/restricted, по которому пользователя спросят явки/пароли. Если он их знает - велкам, иначе - лесом. Все просто. Реализуется это, как выяснилось, тоже элементарно. Работать будем под Debian Etch. Вообще, все нижеописанное справедливо для любой ОС, под которой запущен apache, однако некоторые моменты, вроде имени пользователя, от которого работает веб-сервер, или команда перезапуска, будут различны, и это стоит иметь в виду.
Итак, пусть у нас уже есть установленный и работающий апач. Для начала создадим файл aliases, в котором опишем необходимый алиас для доступа (можно было замутить более пальцевеерно выглядящий виртуальный хост - http://restricted.example.com, но в данном случае это некритично, поэтому ограничимся более простым вариантом):
interra:/# nano /etc/apache2/aliases

<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>
Далее расскажем об этом файле apache2:
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

AuthName "Restricted Access. Authenficate yourself!"
AuthType Basic
AuthUserFile /srv/www/restricted/.htpasswd
<Limit GET>
order deny,allow
allow from all
require valid-user
</Limit>
То бишь теперь доступ к папке /restricted будет блокироваться всем, кроме списка valid-user'ов из /srv/www/restricted/.htpasswd и то только при их успешной аутентификации. Осталось создать файл .htpasswd.
Делается это одноименной утилитой, лежать файл может где угодно, ну и прав на чтение его стоит дать поменьше.. например 0600. Создаем тестового пользователя test c паролем test:
interra:/srv/www/restricted# htpasswd -c /srv/www/restricted/.htpasswd test
New password:
Re-type new password:
Adding password for user test
И если поглядеть на файл .htpasswd изнутри, то...
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'ные <> в идеологически правильные &lt и &gt".

24 янв. 2009 г.

Suse Studio

Мегаклассная инициатива от Novell Inc. под названием SuSE Studio. О чем она, и что из себя представляет, можно поподробнее узнать из вот этой статьи или прямо на сайте, поглядев скринкаст по сабжу. 
Если коротко и по-русски, то данный проект - web-конструктор для образов suse-систем исходя из конкретных задач. Система собирается через вебморду по кирпичикам, с учетом всех зависимостей и требований. Возможна загрузка сторонних пакетов, не входящих в репозитории. На выходе получаем контейнер для VMware или Xen, образ .iso или .img по вкусу. Их можно прямо к себе скачать или где-нить опубликовать.
В общем... айс, берем на заметку.

man zypper

Хотел я как то, помнится, написать что нибудь типа справчоки краткой по zypper-y, ибо после постоянной работы с debian'овским apt-get топать в YaST'овый менеджер пакетов до жути лениво. А пока собирался, узнал что "все уже украдено до вас" (с). То есть, собственно, вот. Читаем, запоминаем, пользуемся. 

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.