\chapter{Установка}

Mongrel2 компилируется на большинстве Unix-систем, в частности на Linux и Mac OSX.
Он написан на C (\emph{не на Ruby}) и использует достаточно простой код и стандартные
библиотеки. В остальном же, после того как вы поставите все зависимости,
команды \shell{make \&\& sudo make install} будет достаточно, чтобы поставить Mongrel2.

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

Итак, идея понята? Отлично, приступим.

\section{Установка зависимостей}

Чтобы всё заработало, нужно установить следующее:

\begin{itemize}
\item GNU make (gmake).
\item \href{http://zeromq.org}{ZeroMQ 2.0.10} для передачи сообщений.
\item \href{http://www.sqlite.org/}{SQLite3}.
\end{itemize}

Если вы будете устанавливать программы в перечисленном порядке, то всё должно быть хорошо.

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

\begin{code}{Установка зависимостей на ArchLinux}
\begin{lstlisting}
# install ZeroMQ
> wget http://www.zeromq.org/local--files/area:download/zeromq-2.1.7.tar.gz
> tar -xzvf zeromq-2.1.7.tar.gz
> cd zeromq-2.1.7/
> ./configure
> make
> sudo make install

# install sqlite3
> sudo pacman -S sqlite3
\end{lstlisting}
\end{code}

Если в процессе установки вы наткнётесь на какие-либо пакеты, которые
не установлены по-умолчанию в вашем дистрибутиве, что вполне может быть
в системах Debian и SuSE, то вам также придётся их доставить.

\section{Загрузка исходников}

Если всё прошло гладко, то вы можете скачать исходники Mongrel2 и
попытаться скомпилировать. Исходники можно получить двумя путями:

\begin{enumerate}
\item Установить \href{http://fossil-scm.org}{Fossil SCM} (это такая система управления версиями) и сделать check-out.
\item Взять исходники с сайта, распаковать и установить.
\end{enumerate}

\subsection{Загрузка исходников из .tar.bz2}

Самый простой способ установки --- из запакованных исходников, которые лежат на сайте.
Зайдите в \href{http://mongrel2.org/home#download}{раздел Download} и скачайте .tar.bz2 или .zip файл.

\subsection{Загрузка исходников с помощью Fossil}

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

\begin{enumerate}
\item Зайдите на \href{http://www.fossil-scm.org/download.html}{страничку скачивания fossil},
    возьмите инсталяционный файл для вашей системы, либо исходные коды в tar.gz. 
\item Выполните \href{http://fossil-scm.org/index.html/doc/tip/www/build.wiki}{инструкции по установке}
    и поставьте на свою машину.
\item Если у fossil возникнут проблемы с подключением к mongrel2.org, дайте мне знать ---
    возможно мне придётся обновиться.
\end{enumerate}

Как только установите fossil, вы можете создать копию Mongrel2:

\begin{code}{Клонирование исходников}
\begin{lstlisting}
> mkdir ~/fossils
> fossil clone http://mongrel2.org:44445 ~/fossils/mongrel2.fossil
> mkdir mongrel2
> cd mongrel2
> fossil open ~/fossils/mongrel2.fossil
\end{lstlisting}
\end{code}

Убедитесь, что вы выполняете команды в заданном порядке, иначе будут ошибки.
Например, если вы не создадите директорию \file{\~{}/fossils},
fossil не сможет склонировать файл и т.п. В общем, будьте бдительны и не вините fossil
во всех грехах.

\section{Сборка и установка}

Все сводится к выполнению одной единственной команды: \shell{make all install}

Не нужно запускать \shell{./configure}, да её и нет, поскольку Mongrel2 избегает
какой-либо зависимости от операционной системы и все различия обрабатывает в коде.

Конечный результат таков:

\begin{enumerate}
\item Mongrel2 компилируется без ошибок.
\item Все юнит-тесты работают. \footnote{Если что-то не работает, пожалуйста, сообщите.}
\item Утилита m2sh установлена.
\item Наконец, программа mongrel2 установлена.
\end{enumerate}

Если вы допустили ошибку и что-то из перечисленного выше не сработало --- найдите
и устраните ошибку и выполните \shell{make clean all \&\& sudo make install} --- всё скомпилируется
заново.

\section{Тестирование}

Когда вы закончите, вы скорее всего захотите проверить, что всё установилось
правильно. Вы можете провести испытание на тестовом конфигурационном файле ---
\file{tests/config.sqlite}:

\begin{code}{Первый пробный запуск}
\begin{lstlisting}
> mkdir run
> mkdir logs
> mkdir tmp
> m2sh servers -db tests/config.sqlite
> m2sh start -db tests/config.sqlite -host localhost
\end{lstlisting}
\end{code}

Пока что нажмите CTRL-C, чтобы выйти, а позже мы ещё поиграемся с настройками.

\section{Обновление}
\begin{code}{Обновите свою рабочую директорию}
\begin{lstlisting}
> cd mongrel2
> fossil pull http://mongrel2.org
> fossil up trunk
\end{lstlisting}
\end{code}

Не забываем --- \shell{make clean all \&\& sudo make install}.


\section{Далее}

Теперь у вас есть веб-сервер Mongrel2, который запускается и работает, а также
утилита m2sh для его настройки. В последующих разделах руководства мы
научимся делать больше --- создавать свои конфигурации, писать
обработчики и другие интересные вещи.
