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. все действия выше выполняются администратором


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