30.01.2011

Установка Perl 5.12 на Debian Squeeze.

Я хочу поиграться с Perl 5.12, но на Debian Squeeze по умолчанию стоит 5.10. Собирать deb пакет и замещать текущий Perl я не хочу: если я где-то накосячу и пакет соберётся неправильно, я могу если не убить систему, то подарить ей (а заодно и себе) прекрасный геморрой. Поэтому устанавливать я буду в /opt/perl.

Итак...

Для начала нужно скачать исходники.

$ git clone git://perl5.git.perl.org/perl.git perl-5.12


(Я предпочитаю git, но можно использовать rsync. Подробности здесь.)

И через некоторое время в ~/perl-5.12 у нас есть исходники самой свежей версии.

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

$ mkdir /tmp/perl/build
$ cd /tmp/perl/build/


Теперь конфигурируем (параметр -Dmksymlinks говорит конфигуратору, что в текущей директории нужно создать необходимо создать нужные ссылки):

$ sh ~/perl-5.12/Configure -Dmksymlinks -Dprefix=/opt/perl -des


Собираем:

$ make


Тестируем:

$ make test


И устанавливаем (предпочитаю делать это из-под root'а):

$ sudo make install


И проверяем работоспособность:

$ /opt/perl/bin/perl -E 'say "Hello!";'
Hello!


Ура! :)

01.07.2010

15.06.2010

NFS и /etc/exports (unfs3)

После перезагрузки сервера внезапно отвалился NFS. Любая попытка примонтировать удалённую папку ругалась ошибкой:

$ sudo mount -v server:/opt/share $HOME/remote_folder
mount: no type was given - I'll assume nfs because of the colon
mount.nfs: timeout set for Tue Jun 15 23:58:08 2010
mount.nfs: text-based options: 'addr=1.2.3.4'
mount.nfs: mount(2): Permission denied
mount.nfs: access denied by server while mounting server:/opt/share


Я использую unfs3. Все попытки заставить его работать, магия с опциями в /etc/exports, /etc/hosts.deny и /etc/hosts.allow, упорное гугление по всевозможным форумам и документациям, просмотр логов и т.п. ничего не дали. Т.е. вообще ничего.

Оказалось, в /etc/exports у меня была строка:

/opt/music <my-subnet>(rw,sync,no_subtree_check)

Но саму директорию /opt/music я давным давно переместил куда-то и забыл. NFS был запущен ещё до перемещения и работал так примерно месяц. После обновления ядра я перезапустил сервер, unfs3 при попытке примонтировать другие директории спотыкался о /opt/music и отказывал в доступе вообще. Ни в логах, ни в консоли, ни в ответе клиенту ничего об ошибке конфигурации не было сказано.

Вывод: все директории, указанные в /etc/exports должны существовать.

09.08.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/


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

:)

08.08.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.07.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.06.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, которая должна существовать.

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