Как установить Majordomo на Ubuntu Trusty

Posted by

Все чаще автоматизируя я подхожу к моменту когда мне не достает единого центра управления, а то все разрознено по отдельным скриптам. Поиск по интернету вывел меня на такой проект, как (Major Domestic Module или Главный Домашний Модуль) — просто и понятно если долго с ним работать, а самое главное то, нужен центр управления который можно использовать на .5 Trusty Server amd64 системе, быть полностью бесплатным и открытым. В качестве фона/схемы для визуального видения на плане выступит программа именуемая, как Sweet Home 3D которую можно поставить на рабочей системе Ubuntu Trusty Desktop amd64 (Gnome Classic).

Итого, каждый (точнее заинтересованный и технически подкованный) захотевший внести в свой дом современные технологии, что повлечет за собой удобство и комфорт, сможет. В первую очередь это просто интерес, попробовать прикрутить обычную лампочку чтобы из Web-интерфейса включать или выключать, как измерять/мониторить температуру/влажность и т.д. Если у Вас дом, то как смотреть за газовым котлом, вот вопросы самые насущные у любого кто первый раз сталкивает и по прочитанным/просмотренным руководствам хочет такого же. Но не знает как подступиться, так вот проект MajorDoMo — это Ваш Web-интерфейс, серверная часть к которой подключаются различные датчики, скрипты, сервисы и посредством них происходит задуманное. Я же как системный администратор, люблю все разбирать, правда иногда при сборке остается уж очень много лишних деталей, но устройство не теряет своей работоспособности после этого. Да и мои руководства составленные на основе наработок применяются с различными вариациями и в других моих начинаниях.

А сейчас мне нужно задокументировать все шаги по установке единого центра на систему Ubuntu Trusty 14.04.5 Server amd64

Текущие характеристики системы:

  • RAM = 4
  • CPU = 2
  • HDD = 50

ekzorchik@srv-server:~$ sudo rm -Rf /var/lib/apt/lists/

ekzorchik@srv-server:~$ sudo apt-get update && sudo apt-get upgrade -y

ekzorchik@srv-server:~$ sudo apt-get install linux-generic-lts-xenial linux-image-generic-lts-xenial -y

ekzorchik@srv-server:~$ sudo nano /etc/update-manager/release-upgrades

Prompt=never

ekzorchik@srv-server:~$ sudo reboot

ekzorchik@srv-server:~$ uname -a && lsb_release -a

Linux srv-server 4.4.0-57-generic #78~14.04.1-Ubuntu SMP Sat Dec 10 00:14:47 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

No LSB modules are available.

Distributor ID: Ubuntu

Description: Ubuntu 14.04.5 LTS

Release: 14.04

Codename: trusty

ekzorchik@srv-server:~$ sudo rm /etc/localtime

ekzorchik@srv-server:~$ sudo ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Синхронизирую время на сервере когда система загружается:

ekzorchik@srv-server:~$ sudo apt-get install ntpdate -y

ekzorchik@srv-server:~$ whereis ntpdate

ntpdate: /usr/sbin/ntpdate /usr/share/man/man8/ntpdate.8.gz

ekzorchik@srv-server:~$ sudo ntpdate -s 0.pool.ntp.org

ошибок быть не должно

ekzorchik@srv-server:~$ sudo crontab -e

@reboot /usr/sbin/ntpdate -s 0.pool.ntp.org > /dev/null

ekzorchik@srv-server:~$ sudo nano /etc/profile

export LC_ALL="en_US.UTF-8"

ekzorchik@srv-server:~$ source /etc/profile

ekzorchik@srv-server:~$ sudo tasksel install lamp-server

New password for the MySQL «root» user: 712mbddr@

Repeat password for the MySQL «root» user: 712mbddr@

ekzorchik@srv-server:~$ php --version

PHP 5.5.9-1ubuntu4.20 (cli) (built: Oct 3 2016 13:00:37)

Copyright (c) 1997-2014 The PHP Group

Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies

with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies

ekzorchik@srv-server:~$ mysql --version

mysql Ver 14.14 Distrib 5.5.53, for debian-linux-gnu (x86_64) using readline 6.3

ekzorchik@srv-server:~$ sudo mysql_secure_installation
ekzorchik@srv-server:~$ sudo nano /etc/apache2/apache2.conf

во всех вхождения AllowOverride None

на AllowOverride All

получается четыре вхождения: Replaced 4 occurrences

а после добавляем строку:

ServerName srv-server

ekzorchik@srv-server:~$ sudo service apache2 restart

Теперь приводим настройки интерпретатора PHP (Web-сервера) к следующему виду:

ekzorchik@srv-server:~$ sudo nano /etc/php5/apache2/php.ini

short_open_tag = On

error_reporting = E_ALL & ~E_NOTICE

max_execution_time = 300

max_input_time = 180

post_max_size = 200M

upload_max_filesize = 50M

max_file_uploads = 150

и в данном файле (для запуска из командной строки) также изменяем параметры на подобию выше

ekzorchik@srv-server:~$ sudo nano /etc/php5/cli/php.ini

Скачиваю последнюю версию пакета MajorDoMo и устанавливаю:

ekzorchik@srv-server:~$ wget http://majordomo.smartliving.ru/download/_majordomo_linux_100b.tar.gz -P /var/www/

ekzorchik@srv-server:~$ sudo tar zxf /var/www/_majordomo_linux_100b.tar.gz -C /var/www/

ekzorchik@srv-server:~$ sudo cp -rp /var/www/html/* /var/www/

ekzorchik@srv-server:~$ sudo cp -rp /var/www/html/.htaccess /var/www

ekzorchik@srv-server:~$ sudo rm /var/www/_majordomo_linux_100b.tar.gz

согласно файлу readme.txt в каталоге /var/www/ необходимо выставить следующие права на внутренние каталоги проекта majordomo:

ekzorchik@srv-server:~$ sudo find /var/www/ -type d -exec chmod 0777 {} \;

ekzorchik@srv-server:~$ sudo find /var/www/ -type f -exec chmod 0666 {} \;

ekzorchik@srv-server:~$ sudo chown -R www-data:www-data /var/www/

Проверяем, что у всех каталогов /var/www права вида: rwxrwxrwx, где аббревиатуры означают:

  • r → чтение
  • w → запись
  • x → исполнение

, а у файлов права вида: -rw-rw-rw, где

  • r → только чтение
  • w → только запись

Но этого мало. Необходимо дать права на доступ к звуку: Т.е. добавить www-data в группу audio. Делаем usermod:

ekzorchik@srv-server:~$ sudo usermod -aG audio www-data

Теперь нужно наполнить созданную базу данных структурой, файл структуры беру из архива скачанного проекта majordomo который я распаковал в директорию /var/www/файл именуется, как: db_terminal.sql.

Создаю пользователя и пароль и даю полный права на базу db_terminal

ekzorchik@srv-server:~$ mysql -u root -p712mbddr@ -e "create database db_terminal character set utf8"

ekzorchik@srv-server:~$ mysql -u root -p712mbddr@ db_terminal < /var/www/db_terminal.sql

ekzorchik@srv-server:~$ mysql -u root -p712mbddr@ -e "create user 'us_majordomo'@'localhost' identified by '612mbddr@'"

ekzorchik@srv-server:~$ mysql -u root -p712mbddr@ -e "grant all on db_terminal.* to 'us_majordomo'@'localhost';"

ekzorchik@srv-server:~$ mysql -u root -p712mbddr@ -e "flush privileges;"

Теперь нужно подкорректировать конфигурационный файл из скачанного архива на предмет как подключать к базе и под каким пользователем:

ekzorchik@srv-server:~$ sudo nano /var/www/config.php

Define('DB_HOST', 'localhost');

Define('DB_NAME', 'db_terminal');

Define('DB_USER', 'us_majordomo');

Define('DB_PASSWORD', '612mbddr@');

Define('SERVER_ROOT', '/var/www');

Удаляю дефолтные настройки Web-cервера по части описания сайта:

ekzorchik@srv-server:~$ sudo unlink /etc/apache2/sites-available/000-default.conf

ekzorchik@srv-server:~$ sudo unlink /etc/apache2/sites-available/default-ssl.conf

ekzorchik@srv-server:~$ sudo unlink /etc/apache2/sites-enabled/000-default.conf

Создаю сайт для приложения Majordomo:

ekzorchik@srv-mon:~$ sudo nano /etc/apache2/sites-available/majordomo.conf

<VirtualHost *:80>

ServerName srv-server

DocumentRoot /var/www

LogLevel warn

ErrorLog /var/log/apache2/majordomo-error.log

CustomLog /var/log/apache2/majordomo-access.log combined

ServerSignature Off

</Virtualhost>

Активирую сайт для доступа к странице majordomo на текущем сервере:

ekzorchik@srv-server:~$ sudo a2ensite majordomo.conf

Enabling site majordomo.

To activate the new configuration, you need to run:

service apache2 reload

ekzorchik@srv-server:~$ sudo service apache2 reload

ekzorchik@srv-server:~$ sudo chown -R www-data:www-data /var/www/

Включаю модуль mod_rewrite:

ekzorchik@srv-server:~$ sudo a2enmod rewrite

ekzorchik@srv-server:~$ sudo chown -R www-data:www-data /var/www

ekzorchik@srv-server:~$ sudo service apache2 restart

Теперь захожу на Web-интерфейс:

http://IP&DNS/

  • указываю часовой пояс: Time zone: Europe/Moscow (GMT +3)
  • указываю тип языка: ru ru
  • указываю тему: Light

и нажимаю Continue → и вот сам Web-интерфейс управления домашней автоматизацией:

Web-интерфейс системы MajorDoMo на Ubuntu Trusty

Беглый просмотр возможностей показал, что все же есть ошибка на главной странице почему-то остановлен цикл main (все циклы располагаются в каталоге /var/www/scripts/cycle(*.php))

Сперва нужно проверить, а будут ли работать циклы, ручной режим:

ekzorchik@srv-server:~$ sudo php /var/www/cycle.php

Connecting to database...

PHP Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /var/www/cycle.php on line 23

CONNECTED TO DB

Running startup maintenance

Checking modules.

Clearing the cache.

Target: /var/www/backup/20170115

Full backup: 1

Backing up files...OK

Checking table [admin_users] ...OK

Checking table [app_quotes] ...OK

Checking table [blockly_code] ...OK

Checking table [cached_values] ...OK

Checking table [calendar_categories] ...OK

Checking table [calendar_events] ...OK

Checking table [classes] ...OK

Checking table [collections] ...OK

Checking table [commands] ...OK

Checking table [country] ...OK

Checking table [elements] ...OK

Checking table [elm_states] ...OK

Checking table [events] ...OK

Checking table [gpsactions] ...OK

Checking table [gpsdevices] ...OK

Checking table [gpslocations] ...OK

Checking table [gpslog] ...OK

Checking table [history] ...OK

Checking table [ignore_updates] ...OK

Checking table [jobs] ...OK

Checking table [layouts] ...OK

Checking table [locations] ...OK

Checking table [log4php_log] ...OK

Checking table [media_favorites] ...OK

Checking table [media_history] ...OK

Checking table [methods] ...OK

Checking table [myblocks] ...OK

Checking table [myblocks_categories] ...OK

Checking table [newsletter] ...OK

Checking table [objects] ...OK

Checking table [patterns] ...OK

Checking table [performance_log] ...OK

Checking table [phistory] ...OK

Checking table [pinghosts] ...OK

Checking table [plugins] ...OK

Checking table [prod_categories] ...OK

Checking table [product_categories] ...OK

Checking table [product_codes] ...OK

Checking table [product_log] ...OK

Checking table [products] ...OK

Checking table [project_modules] ...OK

Checking table [properties] ...OK

Checking table [pvalues] ...OK

Checking table [readit_channels] ...OK

Checking table [readit_urls] ...OK

Checking table [rss_channels] ...OK

Checking table [rss_items] ...OK

Checking table [safe_execs] ...OK

Checking table [scenes] ...OK

Checking table [script_categories] ...OK

Checking table [scripts] ...OK

Checking table [security_rules] ...OK

Checking table [settings] ...OK

Checking table [shoplist] ...OK

Checking table [shopping_list_items] ...OK

Checking table [shoutrooms] ...OK

Checking table [shouts] ...OK

Checking table [system_errors] ...OK

Checking table [system_errors_data] ...OK

Checking table [tdwiki] ...OK

Checking table [terminals] ...OK

Checking table [usbdevices] ...OK

Checking table [userlog] ...OK

Checking table [users] ...OK

Checking table [webvars] ...OK

Missing: admin.atHome

Missing: admin.Coordinates

Missing: admin.CoordinatesUpdatedTimestamp

Missing: admin.fullName

Missing: admin.isMoving

PHP Fatal error: Call to undefined function curl_init() in /var/www/modules/objects/objects.class.php on line 426

Ага в моей системе чего-то хватает, опытным путем установил, что нужно в систему доустановить нижеследующие пакеты:

ekzorchik@srv-server:~$ sudo apt-get install libcurl3 libcurl3-dev php5-curl -y

Проверяю еще раз (ручной режим запуска, прежде чем я настрою на автоматический запуск самой системой):

ekzorchik@srv-server:~$ sudo php /var/www/cycle.php

на этот раз ошибок нет.

Теперь создаю скрипт посредством которого можно будет, как вручную запускать так и останавливать работу циклов приложения majordomo.conf:

ekzorchik@srv-server:~$ sudo nano /etc/init/majordomo.conf

description "Ekzorchik and Majordomo"

author "http://www.creative-impulse.ru"

start on runlevel [2345]

stop on runlevel [!2345]

console none

respawn

post-start script

echo "date_$(date '+%d_%m_%Y_%k_%M') : $UPSTART_JOB started" >> /var/www/debmes/$UPSTART_JOB.log

end script

exec /usr/bin/php /var/www/cycle.php

post-stop script

echo "date_$(date '+%d_%m_%Y_%k_%M') : $UPSTART_JOB stoped" >> /var/www/debmes/$UPSTART_JOB.log

end script

После этого можно запускать и останавливать главный цикл без перезагрузок ОС.

ekzorchik@srv-server:~$ sudo start majordomo

&&

ekzorchik@srv-server:~$ sudo stop majordomo

Проверяем, что цикл работает: (также он запуститься сам после перезагрузки)

ekzorchik@srv-server:~$ sudo start majordomo

majordomo start/running, process 7960

ekzorchik@srv-server:~$ ps aux | grep php

а в логах:

ekzorchik@srv-server:~$ cat /var/www/debmes/majordomo.log

date_15_01_2017_16_07 : majordomo started

date_15_01_2017_16_07 : majordomo stoped

date_15_01_2017_16_07 : majordomo started

ekzorchik@srv-server:~$ sudo crontab -e

@reboot /usr/bin/php /var/www/cycle.php

Вот теперь все в норме об этом как раз и свидетельствуют значки Web-интерфейса развернутой системы majordomo:
http://IP&DNS/

Поправлена работа с циклами в MajorDoMo

Для справки по циклам:

циклы должны запускаться вместе со стартом системы и не закрываться в процессе работы. Инициируются циклы запуском скрипта ./cycle.php. Что делает этот скрипт — он смотрит в папке ./scripts/ все файлы с именем cycle_*.php и создаёт паралельные процессы на запуск каждого из этих «дочерних» скриптов. Соответственно, каждый cycle-скрипт самостоятельно определяет, какие именно действия он должен производить.

На данный момент имеются вот такие основные циклы (их количество может меняться в зависимости от конфигурации системы):

  • cycle_main.php — самый базовый цикл системы, обновляет системное время, а так же отвечает за работу объектов класса Timer
  • cycle_scheduler.php — отвечает за выполнение задач, запланированных с помощью функций setTimeOut, AddScheduledJob и им подобных
  • cycle_execs.php — цикл, отвечающий за запуск команд, добавленных через функцию safe_exec
  • cycle_webvars.php — цикл, обеспечивающий обновление веб-переменных
  • cycle_bluetooth.php — цикл сканера bluetooth-устройств
  • cycle_onewire.php , cycle_onewire_starred.php — циклы опроса 1-wire сети
  • cycle_ping.php — цикл опроса устройств online
  • cycle_rss.php — цикл обновления RSS-потоков
  • cycle_skype.php (windows), cycle_X101_skype.php (linux) — цикл/демон скайп-бота
  • cycle_snmp.php — цикл опроса SNMP-устройств
  • cycle_states.php — цикл обновления статусов состояния системы
  • cycle_watchfolders.php — цикл сканирования изменений папок
  • cycle_zwave.php — цикл опроса Z-Wave устройств

Все работает. Итого я для себя разобрал шаги по разворачиванию системы домашней автоматизации Majordomo, просто я видел и не раз как опубликованные инструкции разнятся раз за разом на различных ресурсам, а единой точки вхождения по установке нет ни у кого. Многие моменты, как всегда опущены и это присутствует во всех проектах. Я же сделал себе шпаргалку, все действия были проделаны применительно к Ubuntu Trusty 14.04.5 Server amd64. В дальнейшем я познакомлю Вас читатели как и использую и что можно сделать с помощью этого проекта, ведь если нет примеров то как использовать. А пока все, до новых встреч, с уважением Олло Александр aka ekzorchik.