вторник, 20 сентября 2011 г.

Доступ к Postgresql в Linux из Windows в VirtualBox'е на примере Holdem Manager

Как всё начиналось...

Сначала на десктопе было несколько убунт, потом, когда их глючность окончательно достала, Debian Squeeze, потом я купил новый Asus K73E и поставил туда уже Gentoo. Объединяла эти три системы, как ни странно, венда, установленная в VirtualBox, а ещё больше - установленные туда клиенты покеррумов и Holdem Manager. Собственно было создано два динамических виртуальных диска для венды - один системный на 12 Гб и для всяких там историй рук на 50 Гб.

В общем, занимался я покером, всё было хорошо, иногда не очень(особенно всякие Чёрные Тяпницы и навернувшийся в связи с этим Full Tilt), но в целом неплохо. Тем более, ноут как раз на эти деньги и куплен, на покерные. В какой-то момент случился алярм с Holdem Manager'ом. Если в двух словах, PokerStars изменили названия столов с fast на Fast, и после этого перестала автоматически вылезать статистика после посадки за стол и отыгрыша первой руки. Приходилось каждый раз лезть в TableFinder.

Слава разрабам HM'а, они довольно оперативно пофиксили бяку, выпустив обновление. Тут то я и встрял по самые помидоры. После установки обновления HM решил, что ему надо обновить базы. И давай обновлять. Минут через двадцать выдаёт ошибку, что месту на диске хана. И не запускается!

Тут то и обнаружилось, что хоть HM и был установлен на большом диске, пострег один хрен был на C:/(или как там они у вас обозначаются в винде). И сожрал нахрен там всё место, разумеется...


Ай што делать што делать!!!

Первым делом полез уменьшать размеры, да только вот уменьшилось всего на 1 Гб, может чуть больше. Затем вспомнил про совет в виде вот этого мануала, и решил перенести базу в хост, то есть, в Gentoo.

И снова появились проблемы. В первую очередь, мануал не совсем подходил к моим целям. В нём описывается доступ с компа с вендой к postgresql на компе с linux-системой по локальной сети(или не по локальной, по внешнему IP). А мне то надо было не через жопу локалку соединить VBox с Gentoo, а по-людски. Как я ни мудохался, порты какие-то пробрасывал, что-то где-то прописывал, ничего не получалось. Решение было найдено совершенно случайно.


А теперь за дело.

Для начала поставим пострег. Тут западло вот в чём. Установить полностью по мануалу у меня не получилось, так что в принципе можно его не читать, но не помешает ввиду полезной информации(да и небольшой мануал то). Дело в том, что редактирование параметра
DATA_DIR="/var/lib/postgresql/9.0/data"
 
в /etc/conf.d/postgresql-9.0 никак не влияло на последующие действия. То есть, при emerge --config dev-db/postgresql-server:9.0
система всё равно пыталась задействовать как папку для хранения баз именно /var/lib/postgresql/9.0/data, что меня ну никак не устраивало.

Так что алгоритм действий для установки пострега получился такой:
# emerge dev-db/postgresql-server
Затем я создал прямо в /home папку пострега и кинул на неё симлинк:
# mkdir /home/postreg
# ln -s /home/postreg /var/lib/postgresql
Вместо /home/postreg может быть в принципе что угодно. Плюс, симлинк добавляет гибкости. Например, можно куда-нибудь свободно перемещать эту инфу и затем снова кидать симлинк. Можно создать раздел xfs и кинуть это дело туда, как рекомендуется в оригинальном мануале, но мне это делать лень, и так всё отлично работает.

Теперь завершаем установку пострега:

# emerge --config dev-db/postgresql-server:9.0
Всё, пострег установлен. Запустим сервер:
# /etc/init.d/postgresql-9.0 start
Далее шаги снова частично из исходного мануала. Но у нас поменьше действий. Создадим нового пользователя:
# su postgres
$ createuser -P -s -R -d ballzofsteel
Enter password for new role: boobs
Enter it again: boobs
$ exit
 Теперь у нас есть новый пользователь с именем ballzofsteel и паролем boobs. На всякий случай перезапустим пострег:
# /etc/init.d/postgresql-9.0 restart
Теперь лезем в венду, запускаем там командную строку и перемещаемся куда надо(версия пострега может отличаться, у меня была 8.4:
cd "C:\Program Files\PostgreSQL\8.4\bin"
 И делаем дамп всех баз:
pg_dumpall.exe --username=postgres > holdem.dump
Поскольку, как я уже говорил ранее, у меня диск C был под завязку забит, у меня команда выглядела чуть иначе:
pg_dumpall.exe --username=postgres > D:\holdem.dump
Собственно holdem - это и есть имя HM'овской базы. Оно может быть и другим, если Вы его сделали не дефолтным. У меня было дефолтным и имя, и пароль. Пароль - postgrespass почему-то надо было ввести аж четыре раза: два раза в начале дампа и два в конце. Это нормально, как оказалось. Хотя я из-за этого стремался и раз пять этот дамп переделывал.

Если одолел склероз и не помним ни названия базы, ни пароля, идём в папку HM'а и чуть дальше: "...\Holdem Manager\Config\HoldemManager.config" - в этом файле смотрим и видим третью строчку:
SERVER=10.0.2.2;PORT=5432;UID=holdem;PWD=holdem
Где UID - название базы, а PWD - пароль от неё же.

Теперь переместим holdem.dump в хост-систему. Это уж описывать не буду, делается через "Общие папки". Затем развернём базу:
# su postgres
$ psql -f holdem.dump postgres
$ exit 
 Теперь делаем так: "Пуск >> Программы >> Postgresql >> Stop Server" или что-то типа того(а лучше сразу удаляем пострег в венде через "Панель управления"), после чего запускаем HM, который не сможет теперь соединиться с сервером и вылезет соответствующее окно. Либо можно просто напрямую его запустить, это DBControlPanel.exe в папке HM'a на диске. И там указываем:
Server Name: 10.0.2.2(вот она, главная хитрость!!!)
Port Name: 5432(оставляем прежним)
Login Name: ballzofsteel
Password: boobs
Затем жмём Connect, указываем  нашу базу базой по умолчанию(Set as Default) и Start Holdem Manager.

Готово! Теперь наши базы в гораздо большей безопасности, за пределами вражеской территории!

Комментариев нет: