9 авг. 2009 г.

Skype, Debian, amd64 и libuuid1

Только вчера заявил, что проблемы перехода от 32-битной архитектуры на 64-битную меня не коснулись, как у меня перестал работать скайп. Что бы я ни делал, он упорно писал:

$ skype
/usr/bin/skype: error while loading shared libraries: libuuid.so.1: cannot open shared object file: No such file or directory


Произошло это вчера после обновления пакета ia32-libs. Полдня гуглил, искал выискивал, читал перечитывал – никакого результата. Все ссылки вели к объяснению того, что нужно сказать --force-architecture после apt-get install, или aptitude install, или dpkg -i. Всё это хорошо и понятно, но это не помогало.

Но потом как-то нечаянно нашёл я одно позавчерашнее обсуждение (к сожалению, ссылку уже не вспомню), где люди столкнулись с точно такой же проблемой. Один небольшой ответ поставил всё на свои места.

Сам файл libuuid.so.1 в системе есть, находится в директории /lib и является символической ссылкой на /lib/libuuid.so.1.2. Кроме того, есть в корне файловой системы символическая ссылка /lib64, которая ссылается как раз на /lib. Но этот файл всё равно не находился.

Дело в том, что skype – 32-битное приложение, поэтому запускается он в режиме эмуляции через chroot, где вместо /lib64 используется /lib32. А вот файла /lib32/libuuid.so.1 как раз и не было.

Решение



1. Нужно скачать пакет libuuid1_1.41.3-1_i386.deb (или какая там последняя версия):

$ mkdir uuid; cd uuid
$ wget -c http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libuuid1_1.41.3-1_i386.deb


2. Распаковать содержимое пакета:

$ mkdir libuuid1_1.41.3-1_i386
$ dpkg-deb -x libuuid1_1.41.3-1_i386.deb ./libuuid1_1.41.3-1_i386
$ $ ls -la ./libuuid1_1.41.3-1_i386/lib/
итого 24
drwxr-xr-x 2 andrei andrei 4096 Окт 13 2008 .
drwxr-xr-x 4 andrei andrei 4096 Окт 13 2008 ..
lrwxrwxrwx 1 andrei andrei 14 Авг 9 19:08 libuuid.so.1 -> libuuid.so.1.2
-rw-r--r-- 1 andrei andrei 12912 Окт 13 2008 libuuid.so.1.2


3. В директории ./libuuid1_1.41.3-1_i386/lib/ мы видим два файла, которые нужно переписать в /lib32:

$ sudo cp libuuid1_1.41.3-1_i386/lib/* /lib32/


Теперь должно работать.

:)

8 авг. 2009 г.

XChat и "Ошибка сегментирования" (Segmentation fault)

У меня уже довольно давно не работал xchat, вместо него приходилось использовать xchat-gnome, который, если честно, мне не очень-то нравился. Сам xchat просто выдавал segmentation fault при попытке соединиться.

И вот сегодня меня это окончательно достало и я решил разобраться, в чём дело. Форумы убунты и ссылки типа этой советуют удалить xchat-gnome, удалить в домашней директории все настройки xchat (т.е. удалить директорию $HOME/.xchat2) и установить xchat заново.

Этот способ у меня не сработал. Несколько раз не сработал. Тогда я добавил в поисковый запрос слово "Debian" и первый же результат всё объяснил.

Оказывается, xchat падал не при попытке соединения, а при попытке отобразить иконку в трее, что, очевидно, конфликтовало с пакетом xchat-systray. Итак, достаточно было всего лишь сделать

# aptitude remove xchat-systray


чтобы всё встало на свои места.

20 июл. 2009 г.

Восстановление GRUB2

Вчера я совершил страшное – обновил grub2 на своём Debian'е и на все вопросы установщика отвечал нажатием Enter, т.е. дал ответы по умолчанию. А делать так не следовало, потому что grub2 сломался и компьютер не грузился.

Здесь я расскажу, ка я его починил.

Я нашёл Live CD с Ubuntu (ну, какой был :), в принципе, любой подошёл бы) и загрузился с него. Прямо с этого диска восстановиться не удалось, потому что мой Debian на архитектуре AMD64, а Ubuntu – i386. Мне нужно было найти что-то загрузочное с той же архитектурой, что и мой Debian.

Немного погуглив, я обнаружил, что у Debian'а тоже есть Live CD, и даже Live USB. Найти можно здесь: http://live.debian.net/debian-cd/5.0.1/amd64/usb-hdd/ . Мне не нужны были красивости рабочего стола, поэтому я скачал просто образ для восстановления. Чтобы записать его на флешку, нужно выполнить команду (которая УДАЛИТ ВСЮ ИНФОРМАЦИЮ С ФЛЕШКИ):

# dd if=/path/to/the/debian-live-501-amd64-rescue.img of=/dev/sdX


Здесь /path/to/the/ директория, где хранится образ, /dev/sdX – устройство USB-накопителя, которое к моменту выполнения команды должно быть размонтировано.

После того, как образ был записан, я просто перезагрузился с флешки.

Все дальнейшие действия подразумевают, что выполняющий их знает, на каком разделе что у него находится. Если нет уверенности, можно поочерёдно примонтировать каждый раздел, скажем, в /mnt, посмотреть и даже записать, чтобы не убить систему окончательно.

У меня разделы расположены так:

/dev/sda5 -- /
/dev/sda2 -- /boot


Поэтому на восстановительной системе я делал следующее:

# mount /dev/sda5 /mnt
# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount /dev/sda2 /mnt/boot


Или по-русски:

1. Примонтировали корневой раздел жёсткого диска в /mnt;
2. "Приязали" /dev к новому корню;
3. То же самое с /proc;
4. Примонтировали /boot к новому корню.

Всё это делалось для того, чтобы сделать:

# chroot /mnt


т.е. чтобы поменять корень и работать практически в своей системе.

И последний штрих:

# grub-install /dev/sda


И всё! :)

14 июн. 2009 г.

ImageMagick: изменить размер всех изображений в директории

Довольно часто возникает задача все изображения, только что сброшенные с web-камеры, уменьшить, чтобы разместить в своём фотоальбоме какой-нибудь социальной сети отправить по электронной почте. Конечно, есть GIMP, но это хорошо, если изображений штук 10. А если их 100? 1000?

На этот случай есть такой чудесный комплект консольных утилит, как Imagemagick, который умеет делать с изображениями практически всё.

Для уменьшения изображения достаточно ввести команду:

$ convert -resize 75% -quality 80 image.jpg resized_image.jpg

В результате мы получим изображение размером 75% от исходного (image.jpg) с качеством 80% в файле resized_image.jpg.

Теперь нам нужно выполнить эту команду для всех файлов директории:

$ for i in `ls *.jpg`; do convert -resize 75% -quality 80 $i resized/$i; done

Теперь все файлы с расширением *.jpg в текущей директории будут уменьшены до 75% с качеством 80% и записаны в директорию ./resized, которая должна существовать.

Теперь можно все изображения отправлять на одноклассники по электронной почте.

12 июн. 2009 г.

SSH-туннель

Иногда мне нужно поработать с удалённой БД PosgreSQL через pgAdminIII. Сервер, на котором крутится база, из интернета недоступен. Зато доступен другой сервер, с которого можно попасть на сервер БД. Чтобы мой pgAdminIII мог добраться до PostgeSQL, я пробрасываю туннель с моей машины на сервер с БД через доступный мне сервер. Примерно так:

$ ssh -f -L 15432:postgresql.server:5432 i.can.get.here -N

Что делает эта команда?

Во-первых, она соединяется с сервером i.can.get.here.
Во-вторых, соединение происходит в фоновом режиме (ключ -f).
В-третьих, все запросы на мой локальный порт 15432 перенаправляются на порт 5432 сервера postgresql.server через сервер i.can.get.here (-L 15432:postgresql.server:5432).
В-четвёртых, не выполняет на удалённом сервере команду, которая выполняется при обычном входе.

Теперь, чтобы добраться до БД, я могу в pgAdminIII настроить соединение с localhost:15432, или выполнить команду:

$ psql -h localhost -p 15432 -U username -W password


Такое же туннелирование можно использовать, если, например, вам закрыли порты для почты или ICQ, но у вас есть доступ к прокси. :)

10 июн. 2009 г.

Установка VirtualBox в Debian

В последних версия тестового Debian'а есть несоответствие версий пакета virtualbox-ose и virtualbox-ose-modules, из-за чего virtualbox не работает.

Чтобы обойти этот недочёт мэйнтэйнеров пакетов, нужно пересобрать пакет virtualbox-ose-modules из исходников. Делается это так.

1. Устанавливаем нужные пакеты:

# apt-get install virtualbox-ose virtualbox-ose-source virtualbox-ose-guest-source module-assistant


(virtualbox-ose-guest-source, вообще говоря, необязателен)

2. "Готовим" пакет для сборки:

# m-a prepare virtualbox-ose


3. Собираем и устанавливаем:

# m-a a-i virtualbox-ose


4. Повторяем шаги 2 и 3 для virtualbox-ose-guest-source.

5. Добавляем себя в группу vboxusers:

# adduser `whoami` vboxusers


6. Если вендовые привычки ещё не искоренены, то можно перезагрузиться и работать. Но лучше сделать:

# modprobe vboxdrv


И работать.

GNOME: убрать иконки с рабочего стола

Одна из причин, по которой я не люблю Windows – это иконки на рабочем столе. Если посмотреть на рабочий стол среднестатистического клерка, то там можно обнаружить кучу иконок со всякой ерундой, аккуратно расставленных вокруг переднего плана обоев. Как правило, среднестатистический клерк разворачивает окна всех приложений (кроме QIP и Skype, пожалуй) на весь экран, поэтому для доступа к нужной ему информации он в лучшем случае сворачивает окна, или, как правило, закрывает и ищет по множеству папок на рабочем столе нужный ему файл. Наблюдать за этим процессом забавно первые три раза, потом это просто раздражает.

Вот и меня раздражает наличие этих самых иконок, которые всё равно мною практически никогда не используются.

Раньше я пользовался fluxbox'ом, потом некоторое время сидел на WindowMaker. Оба оконных менеджера лёгкие, быстрые и просто конфигурируемые. Для слабых машин как раз то, что надо. И иконок на рабочем столе у них нет (хотя добавить можно).

Но со временем я всё-таки решил пересесть на GNOME, поскольку он, всё-таки, DE, а не просто WM.

И всё меня в GNOME устраивало, кроме этих самых иконок для рабочего стола. Но немного погуглив и поковырявшись в настройках, я нашёл способ убрать иконки.

Делается это так:

1. Открываем gconf-editor (Приложения->Системные->Редактор конфигурации).

2. Снимаем галочку со свойства /apps/nautilus/preferences/show_desktop

Всё! :)

9 июн. 2009 г.

Вставка кириллицы из X-приложений в Emacs

Часто бывает нужно вставить в Emacs кириллический текст из X-приложения, скажем, из браузера. Но вместо привычного и горячо любимого моноширного шрифта, почему-то вставляются кириллические символы с засечками.

Эта проблема решается примерно так:

1. В файл ~/.Xdefaults добавляем строки:

Emacs.FontBackend: xft
Xft.hinting: none
Xft.dpi: 96


2. Выполняем команду:

$ xrdb -merge ~/.Xdefaults


3. В ~/.emacs добавляем:

(set x-select-request-type (quote (UTF8_STRING COMPOUND_TEXT TEXT STRING)) t)


или где-то в секции custom-set-variables вставляем строку

(custom-set-variables
;;; ...
'(x-select-request-type (quote (UTF8_STRING COMPOUND_TEXT TEXT STRING)) t)
;;; ...
)


Часть информации взята отсюда.

nXhtml-mode для шаблонов Template::Toolkit и HTML::Template

Есть такое замечательное дополнение к Emacs – nXhtml, которое умеет работать с (X)HTML, CSS, JavaScript и много чем ещё одновременно. Более того, nXhtml может работать даже с шаблонами Template::Toolkit. HTML::Template не поддерживается, и есть проблемы с подсветкой синтаксиса (в силу самого синтаксиса HTML::Template), но всё же лучше плохая подсветка, чем никакой.

Чтобы включать правильный nxhtml-mode при загрузке файлов TT и HTML::Template, нужно добавить в ~/.emacs:

;;; NXHTML
(load "~/emacs/nxhtml/autostart.el")
(require 'nxhtml-mumamo)
(add-to-list 'auto-mode-alist '("\\.tmpl$" . nxhtml-mumamo-mode))
(add-to-list 'auto-mode-alist '("\\.tt2*$" . tt-html-mumamo-mode))


При этом сам nXhtml должен находиться в папке ~/emacs/nxhtml/autostart.el.

Генерация классов для DBIx::Class

При создании приложения на Catalyst'е с бэкэндом DBIx::Class можно воспользоваться хэлпером самого каталиста:

$ script/myapp_create.pl model MyAppDB DBIC::Schema MyAppDB \
dbi:SQLite:myapp.db '' '' '{ AutoCommit => 1 }'

См. тут.

Этот способ хорош, если база данных создана давно и почти не меняется. Но если база большая, сложная и в неё часто добавляются новые схемы, то перестраивать заново все классы для всех таблиц, мягко говоря, неразумно. С другой стороны, далеко не все драйвера БД поддерживают работу со схемами (DBD::Pg, например, не поддерживает), и для таких баз генерируются классы только для главной схемы.

Чтобы сгенерировать класс для какой-то отдельной схемы, нужно в консоли ввести команду:

perl -MDBIx::Class::Schema::Loader=make_schema_at,dump_to_dir:./lib -e \
'make_schema_at("MyApp::MyAppSchema::DBSchema", { debug => 1, db_schema => "dbschema" }, \
[ "dbi:Pg:dbname=dbname","user","password", { AutoCommit => 1 } ])'


Эта команда создаст классы для таблиц из схемы базы данных dbschema в директории ./lib/MyApp/MyAppSchema/DBSchema/, а так же класс схемы ./lib/MyApp/MyAppSchema.pm, в котором пропишет доступ к базе PostgreSQL dbname для пользователя user с паролем password и отключит транзакции.

Выделенные фрагменты нужно заменить на реальные данные.

Настройка карты broadcom bcm4312 wireless, laptop hp 6730s, Debian sqweeze

Ура-ура-ура!

Карта заработала. При настройке пользовался how-to отсюда.

Если лень ходить по ссылке, копирую всё оттуда с небольшой ретушью.

Пункт 6 я не делал, потому что в папке /etc/modprobe.d/ создаётся файл broadcom-sta-common.conf, в котором эта ситуация разруливается.

1. потребуется установить, при отсутствии оного, module-assistant:

$ aptitude install module-assistant


2. устанавливаем пакет

$ aptitude install broadcom-sta-common broadcom-sta-source


3. выполняем

$ m-a prepare
$ m-a a-i broadcom-sta-source


на этом непосредственно установка драйвера завершена

4. далее добавим необходимые модули драйверов на подгрузку при запуске системы, т.е. впишем их (редактором) в файл /etc/modules:

lib80211_crypt_tkip
wl


5. в файл /etc/modprobe.d/blacklist.conf добавим следующую строку:

blacklist ssb


для блокировки ненужного теперь модуля ssb, после выполняем

$ update-initramfs -u


6. перезагружаемся

7. командой

$ iwconfig


проверяем, запустился ли искомый беспроводной интерфейс, если да - далее дело выбора ПО для работы с сетями (будут ли это network manager'ы из Вашего DE или еще что, выбор за Вами, детали - в гугле).

p.s. все действия выше выполняются администратором


Вот и всё! Осталось найти какую-нибудь сеть и протестировать.