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.