вторник, 14 мая 2013 г.

Установка Bacula+WeBacula на Ubuntu 12.04

Итак, нам зачем-то потребовалось установить и настроить систему для резервного копирования Bacula. Что ж, начинаем наш нелегкий путь.



apt-get update
apt-get install bacula

БД для Bacula должна создаваться автоматически, но у меня не создалась. На этот случай есть скрипт инициализации БД, который нужно запустить с параметрами:

/usr/share/bacula-director/make_mysql_tables -u root -p

Ну и ввести пароль от mysql

У меня скрипт сработал, но пользователя не создал, поэтому вручную выполняем sql запрос


GRANT ALL ON `bacula`.* TO bacula@localhost IDENTIFIED BY 'baculapass';

Вносим в конфигурационный файл директора bacula-dir.conf реквизиты доступа к БД
nano /etc/bacula/bacula-dir.conf

Изменяем секцию
Catalog {
Name = MyCatalog
dbname = "bacula"; dbuser = "bacula"; dbpassword = "baculapass"
}

Тут все хорошо, bacula установлена, остается только настроить. Поэтому переходим к установке webacula.

Ставим веб-сервер Apache2 и парочку необходимых пакетов
apt-get install apache2 php5 libapache2-mod-php5 php5-mysql php5-gd

Активируем модуль php5 и mod_rewrite.
a2enmod php5
a2enmod rewrite

Качаем приложение webacula отсюда. Потом создаем рабочий каталог для webacula
mkdir /var/www/webacula
и копируем в него файлы из скачанного архива.

Теперь ставим ZendFramework: качаем, распаковываем и складываем в папку /var/www/webacula/library/
wget https://packages.zendframework.com/releases/ZendFramework-1.12.3/ZendFramework-1.12.3.tar.gz
tar -vxf ZendFramework-1.12.3.tar.gz
mv ZendFramework-1.12.3/library/Zend/ /var/www/webacula/library/

Устанавливаем владельца папки webacula
chown -R www-data:www-data /var/www/webacula

Далее нужно устанавить расширение pdo и pdo_mysql

Для начала ставим pear:
apt-get install php-pear

Далее pdo и драйвер pdo_mysql:
pecl install pdo
pecl install pdo_mysql

Возможные ошибки (у меня были все)

configure: error: Cannot find MySQL header files under
ERROR: `/tmp/tmpRiQ5ax/PDO_MYSQL-1.0.2/configure' failed


Нужно установить пакет libmysqlclient15-dev
apt-get install libmysqlclient15-dev


make: *** [pdo_dbh.lo] Error 1
ERROR: `make' failed


Нужно в /usr/include/php5/Zend/zend.h в район 320 строки добавить

#define refcount refcount__gc
#define is_ref is_ref__gc

А в /usr/include/php5/Zend/zend_API.h в район 50 строки

#define object_pp object_ptr

Далее настраиваем подключение webacula к БД bacula
Редактируем config.ini:
nano /var/www/webacula/application/config.ini

[general]
db.adapter = PDO_MYSQL
db.config.host = localhost
db.config.username = bacula
db.config.password = baculapass
db.config.dbname = bacula
Заодно настраиваем часовой пояс (смотрим тут)

def.timezone = "Asia/Yekaterinburg"
И локаль

locale = "ru"

Webacula использует утилиту bconsole, соответственно www-data должен иметь возможность ee запуска.
bacula.sudo = "/usr/bin/sudo"
bacula.bconsole = "/usr/bin/bconsole"
bacula.bconsolecmd = "-n -c /etc/bacula/bconsole.conf"

Однако www-data не включен в группу sudo, поэтому в /etc/sudoers пишем
www-data ALL = NOPASSWD: /usr/bin/bconsole

И добавляем www-data в группу bacula, которая создалась при установке
sudo usermod -aG bacula www-data

Устанавливаем права на файлы
chown root:bacula /usr/sbin/bconsole
chmod u=rwx,g=rx,o= /usr/sbin/bconsole

chown root:bacula /etc/bacula/bconsole.conf
chmod u=rw,g=r,o= /etc/bacula/bconsole.conf

После этого необходимо создать таблицы для webacula. Как я уже писал выше, с какой-то версии webacula пользуется не своей БД, а той же, что и bacula.
Сперва внесем реквизиты доступа к БД в файл /var/www/webacula/install/db.conf:
db_name="bacula"
db_user="bacula"
db_pwd="baculapass"

Скрипты для создания таблиц лежат в /var/www/webacula/install/MySql
./10_make_tables.sh
./20_acl_make_tables.sh

При выполнении второго скрипта при создании таблицы webacula_where_acl у меня возникла ошибка
Specified key was too long; max key length is 767 bytes
Происходит из-за того, что в UTF8 один символ занимает не байт, а 3 байта

Лечится это небольшой правкой скрипта
CREATE TABLE IF NOT EXISTS webacula_where_acl
(
id integer not null auto_increment,
name TEXT CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
order_acl integer,
role_id integer,
PRIMARY KEY (id),
INDEX (id, order_acl),
UNIQUE INDEX (name(256), role_id)
);

Теперь настраиваем apache2. Вот мой конфиг /etc/apache2/sites-enabled/webacula.local

<VirtualHost *:80>
ServerName webacula.local
ServerAdmin youremail@yourdomain.tld

#Во всех мануалах зачем то сделана Basic авторизация. 
#Зачем, я не понял и делать не стал, но если кому очень нужно,
#то для virtualhost она делается в <Location>
# <Location />
# AuthType Basic
# AuthName "Webacula"
# AuthUserFile /etc/apache2/webacula.users
# Require valid-user
# </Location>

DocumentRoot /var/www/webacula/html
<Directory />
php_flag magic_quotes_gpc off
php_flag register_globals off
Options Indexes FollowSymLinks
AllowOverride All
Order deny,allow
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/webacula-error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/webacula-access.log combined
</VirtualHost>

После этого добавил в корпоративный DNS домен webacula.local и перезапустил веб-сервер
/etc/init.d/apache2 restart

Разумеется, ничего не заработало и еще пришлось поправить /var/www/webacula/html/.htaccess
Строку RewriteBase /webacula заменить на
RewriteBase /
И в /var/www/webacula/html/index.php поменять версию с 12 на 14
define('BACULA_VERSION', 14); // Bacula Catalog version

Вот после этого веб-интерфейс завелся и я не смог насладиться ничем, потому что конкретно задолбался. Поэтому настройку заданий резервирования оставляю на следующий раз.

14 комментариев:

  1. при выполнении pecl install pdo:
    sh: 1: make: not found
    ERROR: `make' failed

    при выполнении pecl install pdo_mysql:
    configure: error: Cannot find php_pdo_driver.h.
    ERROR: `/tmp/pear/temp/PDO_MYSQL/configure' failed

    libmysqlclient15-dev установлен, правка zend.h и zend_API.h не помогает

    ОтветитьУдалить
    Ответы
    1. А такой файл у вас есть? Должен лежать где-то в /usr/include/php5

      Поискать можно так: find /usr/include/php5 -type f -name "*pdo*" -print
      Если файл есть, то вот тут посоны решили проблему http://php.ru/forum/viewtopic.php?t=9556

      Удалить
    2. Проблемка как оказалось решается банально:
      sudo apt-get install build-essential

      А вот с вебом не понятно.
      при переходе по адресу машины - пишет It works!
      при переходе по адресу http://host/webacula - выдает список каталогов.

      Все сделал по мануалу. ошибок не было

      Удалить
    3. Страничка "It works!" - стандартная страница Apache после установки, лежит в /var/www/ . Если вы ее видите, это значит, что apache смотрит не в ту дирректорию, в которую вам нужно.
      У меня свой DNS в локалке, все сервисы я вешаю на доменные имена 2го уровня: например http://webacula.local или http://glpi.local Под это мой конфиг и собран.
      Если же вам нужно, чтобы сервис был доступен по адресу машины, вам необходимо поменять DocumentRoot в apache2.conf на папку, где у вас лежит приложение (/var/www/webacula/html)
      Если нужно, чтобы был доступен по ip/webacula - нужно описывать alias, как это сделано например тут http://ceekay80.blogspot.ru/2010/06/baculawebacula-ubuntu-server.html

      Удалить
    4. Попробовал сделать алиасом:
      Alias "/webacula" "/var/www/webacula/html"

      Так же выдает список каталогов директории webacula. При переходе ручками http://ip-адрес/webacula/html/ - открывается пустая страница..
      Увы, я совсем профан в поднятии веба...

      Удалить
    5. Ну, по идее должен быть стандартный конфиг апача. А все, что нужно сделать:

      1. В папку /etc/apache2/conf.d/ положить файл /var/www/webacula/install/apache/webacula.conf
      2. Поправить в этом файле пути. По умолчанию они /usr/share/webacula/html а нужно /var/www/webacula/html (все остальные по аналогии)
      3. Проверить, чтобы в /etc/apache2/apache2.conf была строчка Include conf.d/ (обычно она в конце)
      4. Перезапустить веб-сервер.

      Вся движуха с VirtualHost, описанная у меня - не нужна. Папочка /etc/apache2/sites-enabled/ пустая должна быть

      Удалить
    6. Спасибо, на этом этапе помогло. Мелкие ошибки решил сам, веб завелся. но... При попытке авторизоваться:
      "Имя или пароль неверны"

      Я правильно понимаю, что для доступа к вебу мы используем пользователя bacula его пароль? или есть какой-то нюанс?

      Удалить
    7. Нет, имя пользователя "root" а пароль вы задается в файле

      /var/www/webacula/install/db.conf

      в секции

      # CHANGE_THIS
      webacula_root_pwd=""

      Удалить
    8. Спасибо огромное! Все здорово!

      Удалить
  2. Добрался до момента создания баз webacula. db.conf поправил как в примере, но /var/www/webacula/install/MySql/10_make_tables.sh: 6: .: Can't open ../db.conf. Права 755, пользователь www-data. Что я делаю неправильно?

    ОтветитьУдалить
    Ответы
    1. Они (скрипт и конфигурационный файл) точно в одной папке лежат? Если да, то еще может быть дело в том, что в скрипте указаны относительные пути, можно попробовать запустить не /var/www/webacula/install/MySql/10_make_tables.sh
      а
      cd /var/www/webacula/install/MySql/
      ./10_make_tables.sh

      Удалить
    2. Да, проблема была в относительности путей. Благодарю.

      Удалить
  3. root@backup1:/var/www/webacula/install/MySql# cd /var/www/webacula/install/MySql/
    root@backup1:/var/www/webacula/install/MySql# ./10_make_tables.sh
    -bash: ./10_make_tables.sh: Отказано в доступе

    как быть7

    ОтветитьУдалить
    Ответы
    1. Поставь права доступа на оба скрипта для www-data

      Удалить