Я поставил самому себе задачу – автоматизировать установку сервиса “Умный Дом” в лице приложения MajorDoMo на Ubuntu 18.04 Server amd64. В процессе написания использовал систему контроля версий mercurial, Virtualbox и тестовый образ. Сражу предупрежу, что скрипт не окончательный и в первую очередь для себя будет дополняться все новыми и новыми возможностями. Главное что у меня получилось настроить систему под разворачиваемое приложение, как я это уже описывал в этой заметке, но теперь уже не как команды который нужно указывать в терминале, а как единый скрипт команд.
От 30.04.2019 – Решил проверить работу скрипта, перестал подниматься сервис MajorDoMo, разбираюсь где проблема, проблема в базе sql которая на сайте разработчика.
Исходные данные:
ekzorchik@srv-bionic:~$ uname -a
Linux srv-bionic 4.15.0-23-generic #25-Ubuntu SMP Wed May 23 18:02:16 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Образ: ubuntu-18.04-live-server-amd64.iso
Ниже сам скрипт:
Рабочая эталонная база:
ekzorchik@srv-bionic:~$ wget https://www.ekzorchik.ru/wp-content/uploads/db_terminal_30_04_2019_default.zip ekzorchik@srv-bionic:~$ unzip db_terminal_30_04_2019_default.zip Archive: db_terminal_30_04_2019_default.zip inflating: db_terminal_30_04_2019_default.sql ekzorchik@srv-bionic:~$ mkdir mproject/ ekzorchik@srv-bionic:~$ mv db_terminal_30_04_2019_default.sql mproject/
ekzorchik@srv-bionic:~$ nano mproject/majordomo
#!/bin/bash # Codepage UTF-8 # Обновленный скрипт установки Majordomo на Ubuntu Bionic Server от 30.04.2019 mysqlroot="712mbddr@" mysqluser="612mbddr@" apt-get install -y git curl apache2 apache2-bin apache2-utils libapache2-mod-php7.2 php7.2-curl mysql-client mysql-server dbconfig-mysql php7.2-mbstring php7.2-mysql php-mysql ntpdate unlink /etc/apache2/sites-available/000-default.conf unlink /etc/apache2/sites-available/default-ssl.conf unlink /etc/apache2/sites-enabled/000-default.conf rm -Rf /var/www/html/ tee /etc/apache2/sites-available/majordomo.conf << EOF <VirtualHost *:80> DocumentRoot /var/www/ <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> EOF a2ensite majordomo.conf mysqladmin -u root password $mysqlroot a2enmod rewrite rm -rf /var/lib/mysql/db_terminal rm -Rf /usr/src/majordomo/ rm -Rf /usr/src/majordomo-master/ rm -Rf /usr/src/master.zip #git clone https://github.com/sergejey/majordomo.git /usr/src/majordomo wget https://github.com/sergejey/majordomo/archive/master.zip -P /usr/src/ unzip /usr/src/master.zip -d /usr/src/ # Переносим систему в директорию WEB-сервера cp -rp /usr/src/majordomo-*/* /var/www cp -rp $PWD/mproject/db_terminal_30_04_2019_default.sql /var/www/db_terminal.sql cp -rp /usr/src/majordomo-*/.htaccess /var/www # Создаем конфигурационный файл для системы cp /var/www/config.php.sample /var/www/config.php rm /var/www/config.php.sample # Назначаем права и владельца для директории с системой chown -R www-data:www-data /var/www find /var/www/ -type f -exec chmod 0666 {} \; find /var/www/ -type d -exec chmod 0777 {} \; tee /etc/mysql/conf.d/disable_strict_mode.cnf << EOF [mysqld] sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION EOF # Настраиваем Apache sed -i 's/None/All/g' /etc/apache2/apache2.conf echo "ServerName localhost" | sudo tee -a /etc/apache2/apache2.conf sed -i '/short_open_tag/s/Off/On/' /etc/php/7.2/apache2/php.ini sed -i '/error_reporting/s/~E_DEPRECATED & ~E_STRICT/~E_NOTICE/' /etc/php/7.2/apache2/php.ini sed -i '/max_execution_time/s/30/90/' /etc/php/7.2/apache2/php.ini sed -i '/max_input_time/s/60/180/' /etc/php/7.2/apache2/php.ini sed -i '/post_max_size/s/8/200/' /etc/php/7.2/apache2/php.ini sed -i '/upload_max_filesize/s/2/50/' /etc/php/7.2/apache2/php.ini sed -i '/max_file_uploads/s/20/150/' /etc/php/7.2/apache2/php.ini #timezone sed -i 's#^;date\.timezone[[:space:]]=.*$#date.timezone = "Europe/Moscow"#' /etc/php/7.2/apache2/php.ini # Настраиваем PHP для командной строки sed -i '/short_open_tag/s/Off/On/' /etc/php/7.2/cli/php.ini # Создаю базу, пользователя и пароля для сервиса mysql mysql -u root -p$mysqlroot -e "drop database db_terminal" mysql -u root -p$mysqlroot -e "drop user 'us_majordomo'@'localhost'" mysql -u root -p$mysqlroot -e "create database db_terminal character set utf8" mysql -u root -p$mysqlroot db_terminal < /var/www/db_terminal.sql mysql -u root -p$mysqlroot -e "create user 'us_majordomo'@'localhost' identified by '$mysqluser'" mysql -u root -p$mysqlroot -e "grant all on db_terminal.* to 'us_majordomo'@'localhost';" # Прописываю в файле сервиса MajorDoMo данные по пользователю MySQL, базе и паролю cp /var/www/config.php.sample /var/www/config.php sed -i "s/Define('DB_NAME', '')/Define('DB_NAME','db_terminal')/" /var/www/config.php sed -i "s/Define('DB_USER', 'root')/Define('DB_USER','us_majordomo')/" /var/www/config.php sed -i "s/Define('DB_PASSWORD', '')/Define('DB_PASSWORD','$mysqluser')/" /var/www/config.php # Создаем описание сервиса для запуска основного цикла системы tee /etc/systemd/system/majordomo.service << EOF [Unit] Description=MajorDoMo [Service] Requires=mysql.service Requires=apache2.service Type=simple WorkingDirectory=/var/www ExecStart=/usr/bin/php /var/www/cycle.php Restart=always User=www-data Group=www-data [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable majordomo.service systemctl restart majordomo.service usermod -aG audio www-data #Cycle in crontab echo "@reboot /usr/bin/php /var/www/cycle.php" | tee -a /var/spool/cron/crontabs/root # Обновляем и перезапускаем службы service mysql restart systemctl restart apache2 rm -f /var/www/modules/control_modules/installed # Смена языка интерфейса mysql -u us_majordomo -p$mysqluser -h localhost db_terminal -e "update settings set value='Europe/Moscow' where id='74'"; #по умолчанию данной строки в таблице нет и ее нужно добавить mysql -u us_majordomo -p$mysqluser -h localhost db_terminal -e "delete from settings where NAME='SITE_LANGUAGE'" mysql -u us_majordomo -p$mysqluser -h localhost db_terminal -e "insert into settings(NAME,TITLE,VALUE,TYPE) VALUES('SITE_LANGUAGE','Language','ru','text')" #sudo mysql -u us_majordomo -p$mysqluser -h localhost db_terminal -e "update settings set value='ru' where Name='SITE_LANGUAGE'"; mysql -u us_majordomo -p$mysqluser -h localhost db_terminal -e "update settings set value='ru' where name='VOICE_LANGUAGE'"; mysql -u us_majordomo -p$mysqluser -h localhost db_terminal -e "update users set EMAIL='support@ekzorchik.ru'" mysql -u root -p$mysqlroot -h localhost db_terminal -e "flush privileges" #Reboot System sudo shutdown -r now
ekzorchik@srv-bionic:~$ chmod +x mproject/majordomo
ekzorchik@srv-bionic:~$ sudo mproject/majordomo
Дополнения по скрипту:
от 11.11.2018 закомментирована строка #sudo rm -f /var/lib/dpkg/lock
вместо нее добавлены проверки на существование файлов и если они есть удалить, они блокируют установку обновлений и тем самым весь скрипт рушится. По мере свободного времени с учетом всех проверок скрипт модернизируется.
Пока на этом все, скажу напоследок, что использовать Mercurial в ходе написания скрипт здорово экономило время плюс контроль что я делал днями ранее и что изменял после. На этом я прощаюсь, заметка по установке MajorDoMo на Ubuntu 18.04 Server amd64 мною автором Олло Александр aka ekzorchik завершена и работает.