В статьях цикла "Домашний хостинг" будет рассказано о этапах создания экономичного домашнего хостинга на основе одноплатного компьютера Cubietruck (Cubieboard 3) стоимостью около 100$.

В этой статье будет рассказано о прошивке нового Сubietruck, установке накопителя и подготовке к дальнейшей работе. В следующей статье будут рассмотрены аспекты настройки роутера, и получения IP-адреса, пригодного для доступа к серверу из всего мира с целью дальнейшей привязки к доменному имени. Наконец мы рассмотрим как устанавливать на сервер PHP приложения, например популярные CMS, такие как Joomla и Wordpress. В качестве бонуса вы можете узнать как разворачивать приложения на Django а также как создать на нем простой git-репозитарий, для контроля версий разрабатываемых проектов.

Развитие современных процессорных архитектур применяемых во встраиваемых системах, привило к тому, что по функциональным возможностям и производительности они уже встали в ряд с младшими процессорами настольных и мобильных ПК. На сегодняшний день ARM-ы и MIPS-ы устойчиво заняли свою нишу в производстве роутеров и смартфонов. Одной из относительно новых областей их применения являются одноплатные компьютеры, такие как Raspberry Pi, BeagleBone, Cubieboard. Встраиваемые компьютеры в основном применяются в качестве готовых компьютерных модулей для встраивания в разрабатываемую цифровую аппаратуру, и подключаемых в систему путем стандартного набора интерфейсов, таких как SPI, UART, I2C, 1WIRE, GPIO и т.д. В то же время одноплатник обычно способен функционировать отдельно в качестве полноценного компьютера. 

Cubietruck построен на основе двух-ядерного процессора Allwinner A20 с ядром ARM Cortex-A7, работающего на частоте 1 GHz. Имеет 2GB оперативной памяти DDR3 работающей на частоте 480 MHz. На плате присутствуют модули Wi-Fi, Bluetooth, Ethernet адаптер 10M/100M/1G. Встроенная флешка на 8 Гб (NAND), есть слот для micro-SD, а также присутствует SATA 2.0 для подключения винчестеров 2.5' и SSD, кроме этого есть возможность подключить жесткий диск 3.5', подав на него дополнительное питание 12 В. Наружу выведены два разъема USB-хост, один USB OTG (через него также выполняется прошивка), HDMI, VGA, SPDIF, ИК-порт, разъем для нушников, четыре светодиода, кнопки включения, сброса, входа в режим загрузки прошивки по USB. Все это умещается на платку 11 х 8 х 1.4 мм! 

В поставке идет лишь панельный корпус из оргстела, но в продаже также есть специальный пластиковый корпус, примерно за 10$ (фотка справа). Также недавно появился металлический корпус в виде радиатора. Для питания Сubitruck нужен БП на 5В. Если планируется использовать внутренний жесткий диск или ssd, мощность БП должна быть не менее 2.5А, иначе достаточно 2А.

Для начала мы установим ОС lubuntu server на встроенную флешку. Она поставляется производителем в виде образа прошивки, скачать последнюю версию можно на тут: http://docs.cubieboard.org/tutorials/a20-cubietruck_lubuntu_server_releases . Я буду устанавливать версию 1.02, которая на момент написания статьи является последней. На странице загрузки предлагается два варианта: lubuntu-server-nand-hdmi.img.gz и lubuntu-server-nand-vga.img.gz, так как возможности переключения vga/hdmi нет - выбирайте тот который вам удобнее (хотя для сервера монитор вообще не нужен). Из архива .gz нужно достать файл .img.

Для прошивки понадобится программа PhoenixSuit (если у вас Windows), или LiveSuit (если linux или MAC). Скачать можно тут http://docs.cubieboard.org/downloads. Эти программы позволяет прошивать NAND память, подключенную к процессорам фирмы Allwinner по USB (в так называемом FEL-режиме).

Прошивка из Windows

Итак в Windows нужно скачать архив PhoenixSuit1.0.7.rar, распаковать, запустить PhoenixSuit.exe. На вкладке Firmware указать файл .img:

phoenixSuitcubie.jpg

Теперь нужно отключить питание от Cubietruck, нажать кнопку FEL и не отпуская её подключить кабель mini-USB (Питания от USB хватит для прошивки). Если после подключения драйвер в Windows автоматически не установится, нужно в диспетчере устройств "Обновить драйверы", указав папку с распакованным PhoenixSuit и отметив галочку про вложенные папки. После установки драйвера, Fhoenix Suit предложит выполнить Mandatory Format, можно выбрать Yes. Затем нужно подождать несколько минут до завершения прошивки. После ее завершения появится диалог с кнопкой ОК. 

Также в зависимости от уже установленной прошивки вход в FEL может оказаться другим, таким как указано в инструкции PhoenixSuit:

1) Зажмите кнопку Power на 10 сек что бы выключить девайс

2) Нажмите FEL и не отпускайте

3) Подключите Mini USB

4) Нажмите кнопку Power 10 раз.

4) Отпустите Fel

Прошивка из Linux

Предоставленный установщик LiveSuit отказался у меня работать на Arch Linux, скорее всего он поддерживает только под Debian - подобные и RPM-based дистрибутивы. Если у вас такой дистрибутив, то можете зайти в папу с установщиком и запустить его: ./LiveSuit.run. Если же у вас другой дистрибутив, то можно попробовать собрать из исходников (http://linux-sunxi.org/LiveSuit), но мне показалось быстрее будет воспользоваться виртуалкой с виндой.

После прошивки

По завершению прошивки можно выключить Cubietruck путем зажатия кнопки PWR на несколько секунд (пока не погаснут светодиоды). Затем нужно вытащить mini-USB и подключить Jack для питания а также монитор. При этом он автоматически начнет загружаться, но стоит быть готовым к тому что  первая загрузка будет длиться весьма долго - до нескольких минут. В это время система выполняет подготовку свежей системы к работе. Завершение загрузки будет видно по приглашению командной строки root-а. Последующие загрузки выполняются значительно быстрее. Убедившись, что загрузка прошла успешно, можно подключать сервер в сеть по кабелю. 

Перенос системы на жесткий диск/SSD

По дефолту система прошивается на внутреннюю nand флешку 8ГБ. Для ускорения загрузки, увеличения объема постоянной памяти и увеличения её ресурса можно перенести систему на жесткий или SSD диск. Также есть дешевый вариант - использовать для этого micro-SD флешку (не меньше class 10), но при условии частого изменения файлов, записи логов и т.д. ресурс флешки тоже может иссякнуть за пару лет.

Я буду использовать жеский диск HITACHI 500 ГБ 7200rpm  SATA3 (в оригинале поддерживается SATA2 но SATA третей версии обратно совместима со второй).

Установив новый накопитель подключаем к CT клаву и монитор и запускаем его. Либо если девайс в сети и вы узнали его айпи(на веб-интерфейсе рутера) можете зайти на него по ssh [email protected]айпи с паролем linaro и перейти в режим рута выполнив sudo bash. 

Посмотрим какие диски есть в системе и какие на них разделы выполнив fdisk -l:

[email protected]:~# fdisk -l
Disk /dev/nand: 7700 MB, 7700742144 bytes
255 heads, 63 sectors/track, 936 cylinders, total 15040512 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/nand doesn't contain a valid partition table
Disk /dev/nanda: 67 MB, 67108864 bytes
255 heads, 63 sectors/track, 8 cylinders, total 131072 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
     Device Boot      Start         End      Blocks   Id  System
Disk /dev/nandb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders, total 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/nandb doesn't contain a valid partition table
Disk /dev/nandc: 5469 MB, 5469372416 bytes
255 heads, 63 sectors/track, 664 cylinders, total 10682368 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xffffffff
Disk /dev/nandc doesn't contain a valid partition table
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000
Disk /dev/sda doesn't contain a valid partition table

Как видно, внутренняя флешка /dev/nand разбита на три раздела:

  1. /dev/nanda - 67 МБ, там находится загрузчик основной системы
  2. /dev/nandb - около 2 ГБ, этот раздел содержит основную систему и смонтирован на /
  3. /dev/nandc - остальное место пака не смонтирован никуда, предполагается что будет использоваться пользователем для своих данных

Также мы видим в списке винчестер /dev/sda. Если он не отобразился а вы его подключили, проверьте достаточная ли мощность БП (должно быть не менее 2.5 А).

Запускаем прогу для управления разделами fdisk:

fdisk /dev/sda

В интерактивную командную строку последовательно вводим:

  1. n<enter> (создать новый раздел)
  2. p<enter> (тип - первичный)
  3. 1<enter>(номер раздела)
  4. <enter>(первый сектор оставляем дефолтный)
  5. <enter>(последний тоже, что бы использовать весь размер диска)
  6. p <enter> (проверим список разделов)
  7. w<enter> (записать таблицу разделов и выйти)

Выглядеть это все должно так:

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-976773167, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-976773167, default 976773167):
Using default value 976773167
Command (m for help): p
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0xea765ca2
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048   976773167   488385560   83  Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

Создаём файловую систему:

mkfs.ext4 /dev/sda1

Запускаем копирование раздела с системой на новый раздел:

dd if=/dev/nandb of=/dev/sda1 bs=1M

Выбрать раздел с которого нужно загружаться можно в файле uEnv.txt, который лежит в корне раздела с загрузчиком. Смонтируем этот раздел на путь /mnt и откроем в текстовом редакторе:

mount /dev/nanda /mnt 
nano /mnt/uEnv.txt

В последней строке изменяем путь к разделу с системой :

console=tty0
extraargs=console=ttyS0,115200 hdmi.audio=EDID:0 disp.screen0_output_mode=EDID:1280x720p50 rootwait panic=10 rootfstype=ext4 rootflags=discard
nand_root=/dev/sda1

Ctrl+X, Y, <enter>

Синхронизируем изменения, отмонтируем раздел и перезагрузимся:

sync
umount /mnt
reboot

После загрузки необходимо расширить раздел (так как мы использовали dd):

resize2fs /dev/sda1

Теперь можете проверить доступное место:

dh -h

У меня показывает:

Filesystem      Size  Used Avail Use% Mounted on
/dev/root       460G  656M  441G   1% /

На этом все.

Читайте продолжение в следующих статьях:

Для обеспечения бесперебойного питания, вы можете соорудить небольшой ИБП для роутера и Cubietruck .