Все чаще автоматизируя я подхожу к моменту когда мне не достает единого центра управления, а то все разрознено по отдельным скриптам. Поиск по интернету вывел меня на такой проект, как MajorDoMo (Major Domestic Module или Главный Домашний Модуль) — просто и понятно если долго с ним работать, а самое главное то, нужен центр управления который можно использовать на Ubuntu 14.04.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-интерфейс управления домашней автоматизацией:
Беглый просмотр возможностей показал, что все же есть ошибка на главной странице почему-то остановлен цикл 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"
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/
Для справки по циклам:
циклы должны запускаться вместе со стартом системы и не закрываться в процессе работы. Инициируются циклы запуском скрипта ./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.