Среда web-разработки на Mac OS X Leopard (вступление) Среда web-разработки на Mac OS X Leopard (часть 2)
Сен 30

Сегодня я постараюсь подробно описать процесс сборки и инициализации баз данных MySQL и PostgreSQL на платформе Mac OS X. Начальные шаги для подготовки системы к сборке описаны здесь, так что если вы не выполнили описанных там шагов, вряд ли что-то получится.

Итак, приступим:

Логотип MySQL Логотип PostgreSQL



Сборка MySQL

Начнём мы с MySQL. В моём примере будет рассматриваться сборка версии 5.1.39 (последняя в ветке 5.1 на сегодняшний день), но принцип одинаков и для других версий. Также хочется отметить, что в моих примерах сервер MySQL будет установлен в директорию /usr/local, и все команды приведены с учётом этого пути, так что если вы решите устанавливать сервер в другую директорию, изменяйте предложенные в примерах команды в соответствии с необходимыми вам путями.
Чтобы начать, необходимо скачать исходники MySQL нужной вам версии. Для этого нужно зайти на эту страницу, и в разделе "Sources" выбрать для скачивания один из пакетов. Распакуйте исходники из архива: это можно сделать при помощи встроенного в Leopard инструмента для работы с архивами (просто кликните по архиву два раза). Теперь переходим к сборке. Откройте Terminal и перейдите в директорию с исходниками. Далее список команд, которые необходимо последовательно выполнить в терминале.

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

./configure --help

Вы увидите огромный перечень параметров с описанием того, на что они влияют. Если раньше вам приходилось иметь дело с MySQL, вы поймёте, в чём дело. Если же нет, рекомендую подробнее почитать об этом на сайте MySQL. Я не буду задерживаться на параметрах, перейдём к конфигурации исходников для последующей сборки. Лично я конфигурировал сервер со следующими опциями:

./configure --prefix=/usr/local/mysql-5.1.39 --enable-profiling --with-charset=utf8 --with-extra-charsets=all --with-plugins=all

Этими параметрами я указываю, куда именно я хочу установить сервер, а также включаю ряд опциональных параметров.
После того, как конфигурация успешно завершилась, запускаем компиляцию:

make

Запаситесь терпением, поскольку выполнение этой команды займёт довольно много времени. Посе завершения компиляции, необходимо выполнить команду установки от имени суперпользователя:

sudo make install

Если до этого всё было хорошо (очень на это надеюсь), теперь у вас установлен сервер MySQL, и необходимо выполнить пару шагов для завершения установки. Для начала запустите от имени суперпользователя команду создания ссылки на директорию с сервером (для удобства) и инициализации базы данных:

sudo ln -s /usr/local/mysql-5.1.39/ /usr/local/mysql && sudo /usr/local/mysql/bin/mysql_install_db

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

sudo cp support-files/mysql.server /usr/local/mysql/ && sudo chmod 700 /usr/local/mysql/mysql.server

Тем самым вы скопируете скрипт запуска сервера в каталог с установленным MySQL и дадите права на его исполнение только владельцу файла (его мы изменим позже) либо суперпользователю.

Следующая команда установит пользователя mysql (он присутствует в системе Mac OS X Leopard сразу после установки) владельцем всех файлов установленного сервера:

sudo chown -R mysql:mysql /usr/local/mysql-5.1.39

Вот и всё, теперь осталось лишь запустить сервер. Для этого выполните команду:

sudo /usr/local/mysql/mysql.server start

Если после выполнения этой команды вы увидите на экране слово SUCCESS, значит всё прошло успешно, сервер запустился. Чтобы остановить сервер, замените параметр start в команде, данной выше, на stop. Чтобы ознакомиться со всеми командами, доступными скрипту, запустите его без аргументов, и он выведен на экран доступный для использования список параметров.


Сборка PostgreSQL

Непосредственно сборка этой базы данных мало чем отличается от MySQL: всё те же ./configure, make и make install, но в зависимости от конфигурационных установок, вам может потребоваться установка дополнительных библиотек. Но обо всём по порядку.

Для начала необходимо скачать исходники: взять коды нужной вам версии можно отсюда. В моих примерах будет рассматриваться сборка версии 8.4.1, но принцип тот же и для других версий, — единственное, что нужно будет делать, в случае, если вы используете отличную от моих примеров версию, — указывать правильные пути к файлам. Как и в случае с MySQL, описанном выше, устанавливать эту базу данных я буду в директорию /usr/local.
Распакуйте исходники, запустите терминал и перейдите в появившуюся у вас директорию.

Список доступных конфигуратору опций вызывается командой

./configure --help

Поскольку я буду собирать базу с поддержкой XML и XSLT, мне потребуется библиотека libxml2, отсутствующая в Mac OS X Leopard (хотя, могу и ошибаться, возможно она там есть, но довольно старая. В подробности не углублялся). Тут-то и потребуется наличие у вас MacPorts, об установке которого я писал во вступлении. Для того, чтобы установить в систему эту библиотеку, необходимо в терминале выполить следующую команду:

sudo /opt/local/bin/port install libxml2

После чего в вашу систему будет автоматически установлен ряд библиотек (gperf, libiconv, zlib), необходимых для установки libxml2, а так же нужная нам библиотека.
Теперь приступаем к конфигурированию PostgreSQL

./configure --prefix=/usr/local/postgresql-8.4.1 --with-python --with-libxml --with-libxslt

Затем копиляция (она тоже небыстрая) и установка в систему:

make && sudo make install

Теперь предстоит проделать ряд манипуляций с системными пользователями, чтобы получить группу и пользователя, необходимых для работы PostgreSQL. В отличие от mysql, пользователь postgres в Leopard отсутствует. Его, конечно, можно создать при помощи пункта "Учётные записи" в Системных настройках, но тогда этот пользователь появится и в окне приглашения входа в систему, что вам, уверен, совершенно ни к чему. А потому придётся действовать через консольную утилиту dscl - Directory Service command line utility. Все команды, которые необходимо последовательно выполнить, я объединил в одну, так что для создания группы и пользователя с именем postgres, скопируйте указанную ниже команду и выполните её в терминале:

sudo dscl localhost -create /Local/Default/Groups/postgres PrimaryGroupID 123 && sudo dscl localhost -create /Local/Default/Groups/postgres RealName "PostgreSQL Users" && sudo dscl localhost -create /Local/Default/Users/postgres && sudo dscl localhost -create /Local/Default/Users/postgres RecordName postgres && sudo dscl localhost -create /Local/Default/Users/postgres UserShell /bin/sh && sudo dscl localhost -create /Local/Default/Users/postgres RealName "PostgreSQL Server" && sudo dscl localhost -create /Local/Default/Users/postgres UniqueID 123 && sudo dscl localhost -create /Local/Default/Users/postgres PrimaryGroupID 123 && sudo dscl localhost -create /Local/Default/Users/postgres NFSHomeDirectory /usr/local/pgsql

Поскольку у вас появился пользователь postgres, необходимо назначить его владельцем свежеустановленного сервера PostgreSQL. Для этого выполните команду:

sudo chown -R postgres:postgres /usr/local/postgresql-8.4.1

Теперь необходимо инициировать создание начальной данных структуры для сервера и указать серверу, где ему следует хранить данные. Сделать это надо от имени созданного вами пользователя postgres, но чтоб по много раз не переключаться, воспользуемся встроенными средствами системы:

sudo su - postgres -c "/usr/local/postgresql-8.4.1/bin/initdb -D /usr/local/postgresql-8.4.1/data"

Теперь завершающие шаги: сделайте симлинк на директорию с сервером (для удобства в будущем):

sudo ln -s /usr/local/postgresql-8.4.1 /usr/local/pgsql

И можете запускать свой сервер:

sudo su - postgres -c "/usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data -l /usr/local/pgsql/logfile"

Чтобы остановить сервер, достаточно выполнить команду

sudo su - postgres -c "/usr/local/pgsql/bin/pg_ctl stop -D /usr/local/pgsql/data -l /usr/local/pgsql/logfile"

На этом заканчивается первая часть: установка баз данных. Приношу извинения за задержку материалов. Дело в том, что я заболел, так что сейчас мне немного не до компьютера. Остальные материалы опубликую после выздоровления.
Очень надеюсь, что у вас не возникнет проблем со сборкой данных пакетов. Все вопросы и указания на ошибки в тексте, как всегда, можете публиковать в комментариях.

Если этот блог нравится Вам настолько, что Вы хотели бы перечислить его автору денег, просто сделайте это, нажав на кнопку Donate:

Спасибо в любом случае. :)

Связанные записи

метки: , , , , , , ,

оценка:
НеинтересноИнтересно - рейтинг: +8, голосов: 8

Комментарии к статье “Среда web-разработки на Mac OS X Leopard (часть 1)”

  1. KsenZ

    Статья отличная, только вот мне не понятно, зачем собирать из сорцов если есть пакеты для мака (http://dev.mysql.com/downloads/mysql/5.1.html#macosx-dmg)???

  2. admin

    Дело в том, что во время сборки из сорцов можно указать именно те опции, которые вам требуются, установить именно туда, куда нужно и стартовать так, как вам удобно.
    А может быть это просто сила привычки. :)

  3. Evgeniy

    а в чем проблема ставить все из портов? зачем тогда ставить mac ports ели ставим все ручками? а если надо будет обновится? что потом делать с зависимостями?

  4. KsenZ

    Еще у меня появилась бешенная мысль, для всего этого написать веб морду, что бы можно было управлять всем этим добром. Т.е. редактирование конфигов через веб, рестарт сервисов, добовление виртуальных хостов и т.д. Потом все это дело в пакет dmg, и почти “Denwer for Mac OS X Leopard” :) Удобно для последующей установки…

  5. admin

    Евгений,

    а в чем проблема ставить все из портов?

    Можно, конечно, ставить и из портов, но от выхода последней версии продукта в состояние STABLE до появления пакета в портах проходит некоторое (иногда, довольно продолжительное) время. Самостоятельная же сборка позволяет поставить продукт сразу же (или до выхода в STABLE).

    зачем тогда ставить mac ports ели ставим все ручками?

    Из портов ставим только служебные (системные) библиотеки, дабы отслеживать зависимости и легко обновлять.

    а если надо будет обновится?

    Обновить версию БД? Никто не мешает. Собираем в другой каталог (для этого при сборке я указываю установку в директорию с номером версии), запускаем на другом порту, тестируем. Если всё хорошо – заменяем симлинк и пользуемся новой версией, а старую убираем. Ну или имеем две независимых ветки продукта (необходимости бывают разные).

    что потом делать с зависимостями?

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

  6. KsenZ

    Что то продолжения долго нету…

  7. admin

    Приношу за это свои извинения.
    Просто в начале прошлой недели я довольно сильно заболел, и последствия того недуга до сих пор не позволяют полноценно прийти в себя и вернуться к делам. :(

  8. KsenZ

    Ясно. Желаю скорейшего выздоровления, блог подождет.

    И еще вопрос, возможно ли публиковать что то свое?

  9. admin

    Желаю скорейшего выздоровления, блог подождет.

    Благодарю за пожелание и понимание.

    И еще вопрос, возможно ли публиковать что то свое?

    Не вполне понял, о чём конкретно идёт речь. Вы хотите опубликовать свою статью? Если так, то это, разумеется, не проблема. Главное, чтобы материал по моим субъективным оценкам был достаточно интересным. Можете присылать свои идеи мне на rodion.baskakov@gmail.com, обсудим детали в переписке.

  10. KsenZ

    >>Не вполне понял, о чём конкретно идёт речь. Вы хотите опубликовать свою статью? Если так, то это, разумеется, не проблема.

    Именно это я и имел ввиду :)

  11. admin

    В таком случае Вы можете связаться со мной по указанному в моём предыдущем комментарии адресу email для обсуждения подробностей.

  12. junkies

    у вас в примерах в место 2х черточек стоит тире
    ./configure –help
    ./configure –help

  13. Rodion Baskakov

    Прошу прощения, что не обратил на это внимание. Это, по всей видимости, движок Wordpress производит такую замену. :(

    Сегодня же перепишу везде, как нужно.

    P.S. Проверил статьи в редакторе административного интерфейса, там всё нормально. Значит, подменяет при выводе, а не при сохранении. :(

  14. junkies

    sudo su – postgres -c ‘/usr/local/postgresql-8.4.1/bin/initdb -D /usr/local/postgresql-8.4.1/data’

    а что делает эта команда? выдает ошибку su: no directory

  15. Rodion Baskakov

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

    Выполняет от имени суперпользователя запуск сервера от имени пользователя postgres (как бы нелепо и запутанно это ни звучало :) )

    выдает ошибку su: no directory

    Вы создавали пользователя postgres по инструкции, описанной выше?

  16. junkies

    Создалась только группа а юзер нет
    выдает ошибку
    create: Invalid Path
    DS Error: -14009 (eDSUnknownNodeName)

  17. Rodion Baskakov

    junkies

    Только что скопировал весь блок, создающий группу и пользователя postgres, и вставил в терминал на Snow Leopard — и пользователь и группа создались без единой ошибки.

    Не могли бы Вы точнее описать, на какой именно из всех команд вылетает указанная Вами ошибка?

  18. Аноним

    столкнулся с такой же проблемой как и JUNKLES

    попробовал ввести аналогичную команду:
    sudo su – postgres -c ‘echo $PATH’
    на что получил ответ такой же ответ:
    su: no directory

    скрипт с манипуляциями системными пользователями вводил как целиком, так и по отдельности каждую команду, заключенную между &&. Разницы не почувствовал. Все предыдущие команды выполнились безошибочно.

  19. Rodion Baskakov

    Попробуйте выполнить в терминале вот такую команду:

    sudo dscl localhost -create /Local/Default/Users/postgres NFSHomeDirectory /usr/local/pgsql

    Это должно решить проблему.

  20. игорь (Аноним)

    почти прошло ) после выполнения предыдущей команды и команды sudo su – postgres -c ‘/usr/local/postgresql-8.4.1/bin/initdb -D /usr/local/postgresql8.4.1/data’:

    The files belonging to this database system will be owned by user “postgres”.
    This user must also own the server process.
    The database cluster will be initialized with locale C.
    The default database encoding has accordingly been set to SQL_ASCII.
    The default text search configuration will be set to “english”.
    creating directory /usr/local/postgresql8.4.1/data … initdb: could not create directory “/usr/local/postgresql8.4.1″: Permission denied

    я новичок в юникс подобных системах, поэтому не вполне представляю себе что делать с сообщением в последней строке?

  21. Rodion Baskakov

    Игорь, попробуйте ещё раз задать права на эту директорию пользователю postgres

    sudo chown -R postgres:postgres /usr/local/postgresql-8.4.1

    а после это ещё раз запустите инициализацию, которая у Вас закончилось ошибкой

  22. игорь (Аноним)

    Успех!!! Спасибо. Только вот смущает сообщение:

    server starting
    mcount: gmon.out: Permission denied

  23. Rodion Baskakov

    Это сообщение появляется в том случае, если конфигурировать PostgreSQL с опцией --enable-profiling

    В причине его появления я пока, признаться, не разобрался. Если Вас это сообщение сильно смущает, пересоберите PostgreSQL, предварительно сконфигурировав его без указанной выше опции, и всё будет в порядке.

  24. игорь (Аноним)

    спасибо за помощь.
    а вообще, этот цикл статей очень полезный и нужный.

  25. mixazen

    Отличный цикл статей, спасибо! Вот кто подскажет если уже стоит MAMP и MySQL версии 5.0.11 – как лучше проапргейдить новым MySQL, если он уже установлен?

  26. daniel

    excitatory@keeping.tam” rel=”nofollow”>.…

    good!!…

  27. Ivan

    ministers@romanticizing.vibrating” rel=”nofollow”>.…

    thank you!!…

Написать отзыв

Подписаться именем или OpenID