downshiftertech.eu

Describe your website

Email LinkedIn

/* Title: Настройка PhileCMS на Raspberry Pi model B на базе piCore 6 Description: An off-topic article that hopefully makes it to a whole new website Date: 2015/12/07 Category: System administration Keywords: Linux, RaspberryPi, piCore, TinyCoreLinux Template: post_rus */

Я также являюсь обладателем Raspberry Pi model B, которая была подарена мне на день Рождения моими друзьями пару лет назад.

Честно говоря, Raspberry Pi собирал пыль на полке бОльшую часть времени, т.к. он оказался не самым лучшим медиа-цнтром.

И вот он я: пытаюсь смигрировать этот самый сайт с моего хостинга на zone.ee, которые дерут с меня по 6.60 евро в месяц пратически ни за что.

Требования у меня весьма скромные: этот сайт бегает на PhileCMS, не используя MySQL или какие-то другие ресурсоёмкие программы, полагаясь лишь на Markdown.

Итак, одним тёмным и холодным декабрьским вечером в Эстонии я решил проверить способности моего Raspberry Pi.

Технические характеристики моего Raspbery Pi таковы:

Процессор: 700 MHz
Оперативная память: 512 МБ
Сеть: 10/100 Мбит/с

Я решил, что этого будет достаточно, чтобы гонять простую конфигурацию Apache.


Настройка piCore

Для начала пойдём на сайт Tiny Core и скачаем piCore-6.0-SSH.zip. Эта конкретная версия даст нам openssh и mc из коробки, что довольно удобно.

Распакуйте архив и запишите .img образ на свободную SD-карту (у меня имелась карта на 128 МБ, и этого вполне достаточно для Tiny Core).

Если у вас установлен Линукс, то наберите sudo dd if=*path_to_img* of =/dev/*mmcblk0* && sudo sync

Не забудьте заменить /dev/mmcblk0 на путь до вашей SD-карты.

Следуйте инструкциям, чтобы расширить второй раздел вашей SD-карты, на котором будут храниться ваши программы (первый раздел будет только для чтения).

Если вы хотите иметь доступ к нескольким консолям, то в таком случае вам нужно добавить multivt в файле cmdline.txt на первом разделе SD-карты.


Приготавливаем флэш-накопитель

TinyCore поддерживает только файловые системы ext2, ext3 и ext4, поэтому ваш обычный накопитель с FAT32 не будет работать. Я отформатировал свой в ext2, потому что использование файловой системы с журналированием заметно сократит срок службы вашей флэшки. Я не буду описывать процесс форматирования флэшки в ext2, так что поищите соответствующие руководства в интернете.

Обязательно создайте папку /opt на флэшке, иначе Tiny Core её не найдёт.


Загрузка

Теперь вы можете вставить флэшку с папкой /opt и SD-карту в Raspberry Pi и включить её.

Система загрузится довольно быстро и автоматически зайдёт под пользователем tc. После загрузки автоматически запустится openssh сервер и генерация необходимых публичных и приватных ключей.

Есть несколько файлов, необходимых для корректной работы Tiny Core:

  • /opt/.filetool.lst
  • /opt/.xfiletool.lst
  • /opt/bootlocal.sh
  • /opt/bootsync.sh
  • /opt/shutdown.sh
  • /opt/tcemirror

Если они не сохранены на постоянном носителе, то Tiny Core будет генерировать их каждый раз призапуске системы.

Некоторые из этих файлов могут и не быть в папке /opt на флэшке, но bootlocal.sh и .filetool.lst обязательно должны быть скопированы на флэш-накопитель. Я скопировал все эти файлы, чтобы упростить работу.


Настройка SSH ключей

piCore с предустановленным SSH-сервером будет генерировать новые ключи SSH при каждом старте системы, если вы не укажете папку для постоянных файлов и не скопируете туда ваши ключи.

  1. Автоматически сгенерированные ключи будет располагаться в папке /usr/local/etc/ssh. Вы можете запустить mc и скопировать их все на ваш фдэш-накопитель. Если вам нужно открыть новое окно консоли, вы можете нажать Ctrl + Alt + F2, чтобы переключиться на второе окно (например, для создания папки /opt на флэш-накопителе).

    Для удобства я создал новую папку ssh в папке /opt флэш-накопителя и скопировал туда свои сгенерированные ключи.

  2. Далее, мы должны сказать piCore где он должен искать ключи. Для этого мы отредактируем файл /opt/bootlocal.sh и добавим следующее перед строкой # Start openssh daemon:

		# Symlink keys
		ln -sf /opt/ssh/ssh_host_dsa_key /usr/local/etc/ssh/
		ln -sf /opt/ssh/ssh_host_dsa_key.pub /usr/local/etc/ssh/
		ln -sf /opt/ssh/ssh_host_ecdsa_key /usr/local/etc/ssh/
		ln -sf /opt/ssh/ssh_host_ecdsa_key.pub /usr/local/etc/ssh/
		ln -sf /opt/ssh/ssh_host_ed25519_key /usr/local/etc/ssh/
		ln -sf /opt/ssh/ssh_host_ed25519_key.pub /usr/local/etc/ssh/
		ln -sf /opt/ssh/ssh_host_rsa_key /usr/local/etc/ssh/
		ln -sf /opt/ssh/ssh_host_rsa_key.pub /usr/local/etc/ssh/

Это будет создавать ссылки на файлы ключей и перезапивать уже имеющиеся файлы в папке /usr/local/etc/ssh при старте системы.

Удалите следующие строки из файла /opt/.filetool.lst:

/usr/local/etc/ssh/ssh_host_dsa_key
/usr/local/etc/ssh/ssh_host_dsa_key.pub
/usr/local/etc/ssh/ssh_host_ecdsa_key
/usr/local/etc/ssh/ssh_host_ecdsa_key.pub
/usr/local/etc/ssh/ssh_host_ed25519_key
/usr/local/etc/ssh/ssh_host_ed25519_key.pub
/usr/local/etc/ssh/ssh_host_rsa_key
/usr/local/etc/ssh/ssh_host_ed25519_key.pub

Изменяем профили пользователей и устанавливаем пароли

По умолчанию, piCore будет входить в систему пользователем tc, не спрашивая при этом пароля, хотя пароль для этого пользователя ‘piCore’. Вы должны обязательно поменять этот пароль, когда ваша система будет настроена, чтобы предотвратить доступ третьих лиц с правами root. Запустите терминал и наберите sudo passwd tc, набрав при этом ваш новый пароль. Когда это будет сделано, скопируйте следующие файлы в папку /opt/etc:

  • /etc/passwd
  • /etc/group
  • /etc/shadow
  • /etc/gshadow

Проще всего это сделать в mc.

После этого отредактируйте файл /opt/bootlocal.sh и добавьте следующие строки после # ------ Put other system startup commands below this line:

# Load users and passwords
ln -sf /opt/etc/shadow /etc/
ln -sf /opt/etc/gshadow /etc/
ln -sf /opt/etc/passwd /etc/
ln -sf /opt/etc/group /etc/

Затем удалите из файла /opt/.filetool.lst строки:

/etc/shadow
/etc/gshadow
/etc/passwd
/etc/group

Установка приложений

Как я упоминал ранее, мы будем использоватьPhileCMS, который требует наличия PHP 5.4. Сначала я планировал использовать lighttpd, но я не хотел заниматься настройкой PHP.

Хорошая новость заключается в том, что в репозитории piCore уже имеется расширение apache2.4-mod-php5, что существенно облегчает нашу задачу. Нам также понадобится rsync, но об этом я расскажу позже. Запустите tce-load -wi apache2.4-mod-php5 rsync. Эта команда скачает пакет со всеми его зависимостями на второй раздел вашей SD-карты.


Настройка Apache

Apache хранит свои файлы конфигурации в папке /usr/local/etc/httpd/. Сами файлы *.html находятся в /usr/local/apache2/htdocs/

Скопируйте /usr/local/etc/httpd/httpd.conf в /opt/apache2/ и добавьте следующее в конец файла /opt/bootlocal.sh:

# Apache
rm /usr/local/apache2/htdocs/index.html
ln -sf /opt/apache2/httpd.conf /usr/local/etc/httpd/
apachectl start

Вам также нужно включить mod_rewrite, необходимый для PhileCMS. Откройте /opt/apache2/httpd.conf и раскомментируйте #LoadModule rewrite_module modules/mod_rewrite.so


Настройка PhileCMS

Скачайте PhileCMS с сайта проекта и распакуйте архив в папку /opt/apache/htdocs/ на вашем флэш-накопителе. Проверьте, чтобы в файле config.php был указан ключ для шифрования, и что у папок выставлены нужные права доступа. Следуйте иструкциям. Необходимые права указаны в разделе Post Installation->Permissions.


Синхронизация содержимого сайта между флэш-накопителем и оперативной памятью

У PhileCMS есть своя система кэширования содержимого вашего сайта, однако, она не совсем нам подходит, поскольку количество циклов записи на нашем флэш-накопителе ограничено, и мы хотим продлить срок жизни нашей карты.

Поэтому мы будем синхронизировать содержимое папки htdocs с оперативной памятью. Это должно также немного ускорить работу сайта.

Для того, чтобы синхронизировать данные с флэш-накопителя с памятью, мы должны добавить в файл /opt/bootlocal.sh строку:

rsync -av /opt/apache2/htdocs/phile/ /usr/local/apache2/htdocs >> /usr/local/var/logs/rsync.log 

Вы также можете запускать данную команду каждые 5, 10 или 15 минут при помощи cron, чтобы ваш сайт автоматически обновлялся, когда вы будете закачивать новые файлы Markdown. Rsync достаточно умён, чтобы копировать только изменённые файлы, поэтому процесс будет занимать намного меньше времени, чем простое копирование файлов из /opt/apache2/htdocs/.


Настройка параметров загрузки ядра piCore

Для того чтобы изменить параметры загрузки ядра piCore, мы должны изменить файл cmdline.txt в разделе piCore SD-карты.

Я добавил следующее: showapps multivt tz=EET-2EEST opt=UUID="cc39f15a-fe96-47d1-9002-0d3f4ad45174"

Объясню по порядку:

showapps показывает приложения, загружаемые в память при запуске piCore. Это удобно при настройке системы, поскольку позволяет проследить процесс запуска приложений. Эта опция может быть удалена, когда система настроена и работает.

multivt даёт возможность открывать несколько окон консоли. Это тоже очень удобно при установке и отладке системы. Скорей всего, вы будете редактировать файлы в Midnight Commander на одном экране и перезапускать сервисы, вроде Apache, на другом. Если вы захотите переключиться на второй экран, то можете использовать для этого комбинацию клавиш Ctrl + Alt + F2 и т.д.

tz=EET-2EEST устанавливает часовой пояс, в котором я нахожусь (Эстония). Воспользуйтесь поисковиком, чтобы найти свой часовой пояс.

opt=UUID=... это код UUID моего флэш-накопителя, на котором хранятся настройки веб-сервера и мои файлы Markdown для PhileCMS. Для того, чтобы узнать код UUID вашего устройства, запустите sudo blkid -S UUID */dev/sdb1*. Замените /dev/sdb1 путём до вашего устройства.

Tiny Core также позволяет использовать внешние устройства и для остальных системных папок, но у меня возникли проблемы с использованием того же флэш-накопителя для папки /tce. В таком случае, вы можете также задать устройство при помощи его пути /dev (это можно безопасно использовать, если у вас только одно такое устройство, потому что идентификаторы даются в порядке обнаружения при загрузке системы, и одно и тоже устройство может иметь другой путь при следующем запуске).


Итоги

Теперь у вас есть CMS, которая ищет в папке /opt/apache2/htdocs/content файлы Markdown и генерирует из них веб-страницы на лету. У моей системы это занимает порядка 3 секунд, что довольно неплохо для Raspberry Pi, которая просто собирала пыль на полке.

А теперь и вам пришло время найти полезное применение для этого крошечного устройства, установив на него Tiny Core Linux.