Установка на чистой Raspberry Pi
Описанные ниже действия производятся на "чистой" системе Raspbian. Процедура установки не эталонная, поэтому замечания и пожелания приветствуются.
Установка пакетов
После загрузки первым делом запускаем raspi-config и расширяем файловую систему на всю карточку (extend partitition), а так же выставляем временную зону (time zone).
sudo raspi-config
Далее устанавливаем обновления ядра и компонентов операционной системы.
sudo apt-get update sudo apt-get upgrade sudo apt-get clean
Или же делаем следующее:
sudo su apt-get -y update && apt-get -y dist-upgrade && apt-get -y autoremove && apt-get -y autoclean
удаляем ненужные локали (у меня освободилось около 150 метров!):
apt-get install localepurge
отключаем screen saver в консолях:
nano /etc/kbd/config
BLANK_TIME=30 заменяем на BLANK_TIME=0
Следующим шагом ставим все необходимы пакеты.
sudo apt-get install -y libav-tools ntpdate mc apache2 apache2-utils mpd php5 libapache2-mod-php5 php5-common mysql-client php-pear php5-mysql php5-curl php5-gd php5-idn php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl php5-json mplayer libusb-1.0-0 libusb-1.0-0-dev
После установки мы должны получить работающий веб-сервер и на всякий случай проверим так ли это, зайдя браузером по сетевому адресу, который получила наша плата. Например, это может быть http://192.168.0.58/
Настройка веб-сервера
Немного подкрутим настройки веб-сервера Apache, а точнее сделаем так, чтобы процессы веб-сервера работали от имени пользователя pi (не уверен, что это необходимо, но тем не менее...)
Останавливаем сервер:
sudo service apache2 stop
Редактируем файл /etc/apache2/envvars (здесь и ниже все изменения в файлах настроек представлены в виде списка изменяемых параметров -- остальные параметры остаются такими, какие они есть):
APACHE_RUN_USER=pi APACHE_RUN_GROUP=pi
Меняем права на папки веб-сервера и запускаем его снова:
sudo chown pi:pi /var/www sudo chmod 777 /var/www sudo chown pi:pi /var/lock/apache2 sudo chown pi:pi /var/log/apache2/
Включаем модуль rewrite для Apache:
sudo a2enmod rewrite
Так же включаем обработку .htaccess в файле /etc/apache2/site-enable/default:
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>
Кстати, там же можем закомментировать строчку с CustomLog -- лишний лог, лишняя нагрузка на файловую систему.
Перезапускаем apache:
sudo service apache2 restart
Настройка PHP
Немного изменяем настройки PHP (отключаем лишние сообщения об ошибках, выключаем логи, меняем максимальный размер файла для загрузки).
Редактируем /etc/php5/apache2/php.ini:
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT display_errors = On log_errors = Off post_max_size = 50M upload_max_filesize = 50M
Перезапускаем веб-сервер, чтобы настройки вступили в силу:
sudo service apache2 restart
Так же немного правим файл настроек PHP для вызова из командной строки. Редактируем /etc/php5/cli/php.ini
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT display_errors = On
Настройка базы данных
Устанавливаем пакет mysql-сервера (в процессе установки будет запрошен пароль для root-а базы данных, ставим его к примеру rootpsw):
sudo apt-get install -y mysql-server
Для удобства установим еще phpmyadmin (в процессе будет запрошен тип веб-сервера, выбираем Apache2, а так же пароль для администраторского аккаунта -- его мы установили выше в rootpsw; кроме того будет запрошен дополнительный пароль для phpmyadmin, его поставим phpmyadminpsw):
sudo apt-get install -y phpmyadmin
После установки phpmyadmin рекомендуется перезапустить систему:
sudo shutdown -r now
Проверим, что он работает, перейдя по ссылке http://IP/phpmyadmin/
Для входа используем root / rootpsw
И, раз уж мы здесь, создадим базу данных db_terminal (используем collation utf8-general-ci) и импортируем в неё дамп из дистрибутива в файле db_terminal.sql (сам дамп можно скачать отсюда)
Настройка FTP
Так же для удобства я обычно запускаю FTP-сервер. Устанавливаем пакет vsftpd:
sudo apt-get install vsftpd
Немного модифицируем файл настроек /etc/vsftpd.conf:
#anonymous_enable=YES local_enable=YES write_enable=YES
Перезапускаем сервис:
sudo service vsftpd restart
Загрузка и установка MajorDoMo
Скачиваем последнюю версию системы из исходников:
cd /var/www sudo rm -rf * sudo git clone --depth=1 https://github.com/sergejey/majordomo.git ./
Переименовываем файл config.php.sample в config.php и редактируем его со следующими параметрами:
Define('DB_PASSWORD', 'rootpsw');
Меняем права на папки и файлы:
chown -Rf pi:pi * chmod -Rf 0777 * chmod -Rf 0777 ../www
Для авто-запуска и удобного управления majordomo создадим файл /etc/init.d/majordomo:
#!/bin/sh ### BEGIN INIT INFO # Provides: SmartLiving # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start daemon at boot time # Description: Enable service provided by daemon. ### END INIT INFO dir="/var/www/" user="root" cmd="php /var/www/cycle.php" name=`basename $0` pid_file="/var/run/$name.pid" stdout_log="/var/log/$name.log" stderr_log="/var/log/$name.err" get_pid() { cat "$pid_file" } is_running() { [ -f "$pid_file" ] && ps `get_pid` > /dev/null 2>&1 } case "$1" in start) if is_running; then echo "Already started" else echo "Starting $name" cd "$dir" (while true; do sudo -u "$user" $cmd done)>> "$stdout_log" 2>> "$stderr_log" & echo $! > "$pid_file" if ! is_running; then echo "Unable to start, see $stdout_log and $stderr_log" exit 1 fi fi ;; stop) if is_running; then echo -n "Stopping $name.." kill `get_pid` sudo killall php for i in {1..10} do if ! is_running; then break fi echo -n "." sleep 1 done echo if is_running; then echo "Not stopped; may still be shutting down or shutdown may have failed" exit 1 else echo "Stopped" if [ -f "$pid_file" ]; then rm "$pid_file" fi fi else echo "Not running" sudo killall php fi ;; restart) $0 stop if is_running; then echo "Unable to stop, will not attempt to start" exit 1 fi $0 start ;; status) if is_running; then echo "Running" else echo "Stopped" exit 1 fi ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 ;; esac exit 0
Выставим на него права и добавим в авто-загрузку:
chmod 0755 /etc/init.d/majordomo sudo update-rc.d majordomo defaults
Оптимизация для работы с SD-картой
С большего всё работает, но MajorDoMo достаточно интенсивно работает с файловой системой, что пагубно отражается на сроке жизни SD-карты, а поэтому нам нужно это как-то оптимизировать.
Перед внесением изменений остановим сервис majordomo и базу данных mysql:
sudo service majordomo stop sudo service mysql stop
Перейдём в папку /var/www и создадим там папку database_backup для периодического скидывания базы данных на карту памяти:
cd /var/www mkdir database_backup chmod 0777 database_backup
Активируем цикл периодического сохранения базы данных (он запустится автоматически при следующем запуске системы):
cp /var/www/scripts/periodical_db_save.php /var/www/scripts/cycle_db_save.php
Отключим swap-файлы:
sudo swapoff --all sudo apt-get remove dphys-swapfile
Т.к. часть папок мы перенесём в файловую систему tmpfs, то при загрузке нам надо будет воссоздавать необходимую структуру, ведь эти файлы будут жить до следующей перезагрузки. Создаём файл /etc/init.d/prepare-dirs:
#!/bin/bash # ### BEGIN INIT INFO # Provides: prepare-dirs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Required-Start: # Required-Stop: # Short-Description: Create needed directories on /var/log/ for tmpfs at startup # Description: Create needed directories on /var/log/ for tmpfs at startup ### END INIT INFO # needed Dirs DIR[0]=/var/log/apache2 DIR[1]=/var/log/cups DIR[2]=/var/log/apt DIR[3]=/var/log/ConsoleKit DIR[4]=/var/log/fsck DIR[5]=/var/log/mysql DIR[6]=/var/log/news DIR[7]=/var/log/ntpstats DIR[8]=/var/log/samba DIR[9]=/var/log/lastlog DIR[10]=/var/log/exim DIR[11]=/var/log/watchdog DIR[12]=/tmp/mysql DIR[13]=/var/www/cached DIR[14]=/var/www/debmes DIR[15]=/var/log/mpd DIR[16]=/var/www/cached/urls DIR[17]=/var/www/cached/voice case "${1:-''}" in start) typeset -i i=0 max=${#DIR[*]} while (( i < max )) do mkdir ${DIR[$i]} chmod 777 ${DIR[$i]} i=i+1 done # set rights chown pi:pi ${DIR[0]} cp -R /var/lib/mysql/* /tmp/mysql/ chown -Rf mysql:mysql /tmp/mysql/* chown mysql:mysql /tmp/mysql ;; stop) ;; restart) ;; reload|force-reload) ;; status) ;; *) echo "Usage: $SELF start" exit 1 ;; esac
Меняем на него права и ставим в авто-запуск:
sudo chmod 755 /etc/init.d/prepare-dirs sudo update-rc.d prepare-dirs defaults 01 99
Далее вносим правки в настройку файловой системы tmpfs. Добавляем в файл /etc/fstab следующее:
tmpfs /tmp tmpfs defaults,noatime,nosuid,size=200m 0 0 tmpfs /var/tmp tmpfs defaults,noatime,nosuid,size=200m 0 0 tmpfs /var/run tmpfs defaults,noatime,nosuid,mode=0755,size=2m 0 0 tmpfs /var/log tmpfs size=20M,defaults,noatime,mode=0755 0 0 tmpfs /var/cache/apt/archives tmpfs size=200M,defaults,noexec,nosuid,nodev,mode=0755 0 0 tmpfs /var/www/cached tmpfs size=100M,defaults,noatime,mode=0755 0 0
Вносим изменение в /etc/mysql/my.conf, в частности меняем путь к файлам базы данных:
datadir = /tmp/mysql
... и добавляем (чтобы сократить размер базы файлов данных):
ignore_builtin_innodb default_storage_engine=MyISAM
Перезапускаем систему
sudo shutdown -r now
Запуск Watchdog-а
Watchdog позволяет автоматически перезапустить систему в случае каких-либо критических зависаний.
Загружаемый встроенный модуль ядра watchdog:
$ sudo modprobe bcm2708_wdog
Для автозагрузки модуля добавляем его в файл /etc/modules командой:
echo "bcm2708_wdog" | sudo tee -a /etc/modules
Теперь проверим, что он добавился командой lsmod, должны быть такие строки:
bcm2708_wdog 3537 0
Ставим демона watchdog:
sudo apt-get install watchdog chkconfig sudo chkconfig watchdog on sudo /etc/init.d/watchdog start
Изменяем настройки /etc/watchdog.conf:
watchdog-device = /dev/watchdog watchdog-timeout = 14
Запускаем watchdog:
sudo /etc/init.d/watchdog restart