habrahabr

Cubietruck. Уютный, домашний сервер

  • воскресенье, 8 июня 2014 г. в 03:10:38
http://habrahabr.ru/post/225371/


Недавно купил вот такую красоту.
Поигрался с Android на ней и решил сделать домашний сервер на замену RaspberryPI.

*Картинка не моя… если разберу хлам — сделаю свою.
От автора, т.е. меня:
Не судите строго, это мой первая статья.
Буду рад конструктивной критике и помощи от более скиллованых пользователей!
Заранее Спасибо!

Ну чтож, начнем пожалуй!
  1. Введение
  2. Установка Системы
    • Установка системы в NAND
    • Установка системы на SD
    • Перенос системы в SATA
    • Перенос системы в NAND
  3. Первое включение
    • Смена порта SSH
    • Настройка сети
    • Установка часового пояса
    • Автоматическое монтирование раздела HDD
  4. Настройка сервера
    • Установка Nginx + php5-fpm + mysql
    • Установка торрент клиента Transmission
    • Установка Samba
  5. Удаленное управление Ajenti/Webmin



1. Введение


Основной задачей была замена малинки на что-то более шустрое и с нормальной скоростью доступа к жесткому диску, т.к. основное предназначение сего сервера — это файлопомойка, медиасервер, торрентокачалка.
Остановался на Cubietruck, она-же Cubieboard3.
Характеристики уже проскакивали на хабре habrahabr.ru/post/186576/
В дополнение я купил 1Тб SATA HDD Hitachi 7K1000
Т.к. на хабре не видел полного руководства по настройке данного девайса, решил сделать свой гайд с го и гейшами.


2. Установка системы


Для CubieTruck'а существует несколько вариантов установки системы.
Я сегодня буду рассматривать установку и настройку Cubian.

Установка системы в NAND


Мне лично такой вариант установки не очень нравится, т.к. NAND имеет ограниченное количество циклов записи/перезаписи, а если у вас будет стоять SQL сервер, то эти циклы очень быстро закончатся. ИМХО!
Скачиваете необходимый образ здесь
Если вы вользователь Linux, то:

Берете отсюда LinuxSuite (есть 32 и 64-битные версии)
Запускаете Livesuite
$ ~/Bin/LiveSuit/LiveSuit.sh

скрин

Выбирате образ для заливки
скрин


Переводите устройство в режим EFL
1. Зажимаете кнопку EFL
скрин

2. Втыкаете miniusb кабель в плату и ждете запрос от Livesuite.
ВНИМАНИЕ: многие USB порты не дадут нужного питания плате, поэтому перед тем как нажать «Да» — подключите плату к блоку питания (рекомендуется 5В не менее 3А)
3. Жмете «Да»
скрин


Дожидаетесь пока образ полностью зальется на ваше устройство.
скрин

Теперь можете отключать устройство от ПК и запускать отдельно ))

Если вы пользователь Windows, то:

— берете отсюда PhoenixSuite.

Запускаете PhoenixSuite:
скрин

Выбирате образ для заливки
скрин

Переводите устройство в режим EFL
1. Зажимаете кнопку EFL
скрин

скрин

2. Втыкаете miniusb кабель в плату и ждете запрос от Livesuite.
ВНИМАНИЕ: многие USB порты не дадут нужного питания плате, поэтому перед тем как нажать «Да» — подключите плату к блоку питания (рекомендуется 5В не менее 3А)
3. Жмете «Да»

Ждете пока образ полностью зальется на ваше устройство.
Теперь можете отключать устройство от ПК и запускать отдельно.

Установка системы на SD карту


Скачиваем необходимый образ отсюда:
Я для примера буду пользоваться дистрибутивом Cubian.
Если у вас Linux:
Разархивируйте скачанный архив.
Запишите образ на вашу SD карту
dd if=путь_к_образу of=/dev/ваша_sd_карта bs=4096; sync

Например:
dd if=/home/pupkin/Cubian-base-r5-a20-ct.img of=/dev/sdb1 bs=4096; sync

По окончании можете вытащить карту и установить её в ваш Cubietruck.

Если вы пользователь Windows:
— Скачиваете Image writer, github.com/downloads/openSUSE/kiwi/ImageWriter.exe или cubieplayer.github.io/Cubian/tools/;
— Разархивируйте полученный файл;
— Переименуйте файл из img в raw (программа находит только такое расширение).
— Запишите образ на вашу SD карту:

Перенос системы на SATA диск


Для переноса системы из NAND раздела на SATA диск вам потребуется выполнить несколько команд:
sudo su - root

логинимся под рутом

mkdir /tmp/1 /tmp/target

создаем папки для монтирования разделов
mount /dev/nandb /tmp/1

монтируем NAND раздел
mkfs.ext4 /dev/sda1

форматируем SATA раздел в ext4
mount /dev/sda1 /tmp/target

монтируем SATA раздел

Перемещаем систему
(cd /tmp/1; tar --backup -c *) |tar -C /tmp/target -xv


Изменяем настройки загрузки
mount /dev/nanda /mnt/
nano /mnt/uEnv.txt

(Замените root=/dev/sda1)
В итоге, файл должен выглёдеть так:

cat /mnt/uEnv.txt
root=/dev/sda1
extraargs=console=tty0 hdmi.audio=EDID:0 disp.screen0_output_mode=EDID:1280x720p50 rootwait panic=10 rootfstype=ext4 rootflags=discard

sync

Синхронизируем наши изменения
umount /mnt

Отмонтируем раздел
reboot

и ребут!

Перенос системы с SD карты в NAND раздел


После копирования образа и загрузки с SD карты вы можете перенести вашу систему в NAND раздел с помощью одной простой комманды:
sudo ~/nandinstall/install.sh


Если в вашем дистрибутиве нет такого скрипта вы можете его скачать и установить:
apt-get install cubian-nandinstall && sudo cubian-nandinstall


3. Первое включение


Итак зайдя в свой домашний роутер, я увидел, что мой кубик получил адрес 192.168.0.108
Подключаемся к нему. Если вы подключаетесь с Linux машины, то открываем терминал и пишем

ssh -p 36000 192.168.0.108 -l cubie

Где 36000, порт для SSH соединения. В целях безопасности выбран нестандартный порт, как его поменять написано здесь. cubie — это логин пользователя, пароль тоже cubie
После чего должно пройти соединение и появиться сообщение о добавлении ключа SSH соединения в базу данных ключей. Оно появляется только один раз, при добавлении новой комбинации ключ+устройство. Пишем yes.
Если подключаемся с Windows машины, то выбираем SSH клиент по вашему вкусу, в большинстве случаев это Putty.

Подключаемся и первым делом меняем пароль пользователя:
sudo passwd cubie

И создаем пользователя root, который по умолчанию отсутствовал в целях безопасности, но нам он потом будет нужен, так что создадим его сейчас:
sudo passwd root


Замена порта подключения SSH

Если вас не устраивает порт 36000 для SSH доступа, можно сменить его на стандартный порт 22:
Открываем файл /etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config

Находим строчку
Port 36000

Меняем на
Port 22

Теперь кубик доступен так:
ssh cubie@192.168.0.108


Настройка сети

По умолчанию настройки хранятся в файле /etc/network/interfaces.
Посмотрим что у нас:
sudo cat /etc/network/interfaces

Видим конфигурацию сети по умолчанию
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp

auto eth0 подразумевает автоконфигурирование интерфейса при загрузке
allow-hotplug eth0 и iface eth0 inet dhcp подразумевает, что когда ядро Linux определит физический интерфейс eth0, строка allow-hotplug поднимет его, а строка iface присвоит ему адрес по DHCP.
Внимание! Такая конфигурация настраивает сетевой адрес по DHCP если кабель подключен при загрузке. Если же кабель при загрузке не был подключен, то загрузка блокируется на одну минуту для ожидания таймаута DHCP. Таким образом, если вам совершенно не нужна проводная сеть, то закомментируйте или удалите строчку auto eth0 в /etc/network/interfaces, это секоомит вам время при загрузке.
Чтобы закомментировать просто добавьте # перед auto eth0, это выглядит так #auto eth0
Вы все еще сможете поднять и настроить интерфейс вручную, выполнив команду
ifup eth0

Если вам требуется прописать постоянный адрес кубику, то вот пример конфигурации
allow-hotplug eth0
iface eth0 inet static
    address 192.168.1.110
    netmask 255.255.255.0
    gateway 192.168.1.1
    dns-nameservers 192.168.1.1
Хотя я больше склоняюсь к автоматическому присвоению адреса от роутера.

Настройка wi-fi
Загрузка модуля
modprobe bcmdhd


Для того, чтобы wi-fi автомачтиески загружался при старте системы добавьте строку «bcmdhd» в конец файла /etc/modules.

Примеры команд для использования wi-fi:
iwlist scan
iwconfig wlan0 essid "ssid" key xxxx
iwconfig wlan0
ifconfig wlan0 up
dhclient wlan0


Установка часового пояса

Задаем часовой пояс
dpkg-reconfigure tzdata

Добавляем сервера:
sudo nano /etc/ntp.conf


server 0.debian.pool.ntp.org iburst
server 1.debian.pool.ntp.org iburst
server 0.ru.pool.ntp.org iburst
server 1.ru.pool.ntp.org iburst


— ближайшие сервера можете взять отсюда — www.pool.ntp.org/
sudo /etc/init.d/ntp start


Автоматическое монтирование раздела HDD

Статей о монтировании разделов существует уже огромное количество, но т.к. мне это тоже понадобилось, добавлю для полноты картины.

Создаем папку, куда будет смонтирован HDD
sudo mkdir /media/files

Даем право доступа на чтение/запись для всех пользователей
sudo chmod 777 /media/files


Чтобы посмотреть какие разделы у нас на hdd пишем
sudo fdisk -l

Смотрим в конец и видим примерно следующее
fdsik -l
Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 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: 0x673511d7

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    33556479    16777216   83  Linux
/dev/sda2        33556480  1953525167   959984344    5  Extended
/dev/sda5        33558528  1953525167   959983320   83  Linux

У меня три раздела на HDD, я буду монтировать третий (/dev/sda5)
Узнаем UUID нашего раздела:
sudo blkid

Пример вывода:
blkid
/dev/nanda: SEC_TYPE="msdos" LABEL="Volumn" TYPE="vfat"
/dev/nandb: UUID="fc870bf6-cf02-4f17-aab6-a2ee56137668" TYPE="ext4"
/dev/sda1: UUID="df0f786f-4b74-4710-a128-412b81a6bece" TYPE="ext4"
/dev/sda5: UUID="4dc5f707-d7fa-4a48-ad32-efddb23cbf97" TYPE="ext4"


Нам нужна строчка /dev/sda5, копируем все что в кавычках
4dc5f707-d7fa-4a48-ad32-efddb23cbf97

Помните у вас эта строчка будет иной!
Далее открываем /etc/fstab:
sudo nano /etc/fstab

Добавляем в самый конец:
UUID=4dc5f707-d7fa-4a48-ad32-efddb23cbf97       /media/files    ext4   defaults,acl,user,user_xattr,errors=remount-ro

* аттрибуты выставляете по своему вкусу

Записи разделяем либо пробелом, либо табуляцией
Перезагружаемся:
sudo reboot

После перезагрузки проверяем
mount

mount
/dev/root on / type ext4 (rw,relatime,discard,data=ordered)
devtmpfs on /dev type devtmpfs (rw,relatime,size=934508k,nr_inodes=137526,mode=755)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=186924k,mode=755)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=373840k)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /tmp type tmpfs (rw,relatime)
tmpfs on /var/tmp type tmpfs (rw,relatime)
/dev/sda5 on /media/files type ext4 (rw,nosuid,nodev,noexec,relatime,errors=remount-ro,data=ordered)

Видим, что третий раздел смонтирован в нужную папку.

4. Настройка сервера


Ну и так как у меня кубик все-же это сервер — настраиваем samba, nginx, transmission.
Вы можете воспользоватся скриптом github.com/igorpecovnik/Debian-micro-home-server

sudo apt-get -y install git
cd ~
git clone https://github.com/igorpecovnik/Debian-micro-home-server
chmod +x ./Debian-micro-home-server/install.sh
cd ./Debian-micro-home-server
sudo ./install.sh


Или установить только то что нужно

Установка Nginx + php5-fpm + mysql

Устанавливаем nginx:
sudo apt-get install nginx

Запускаем
sudo /etc/init.d/nginx start

Открываем браузер, пишем адрес кубика.
Видим следующую надпись

Welcome to nginx!

Сервер запущен
Для примера анши сайты будут хранится на уже примонтированном жестком диске.
Для этого нужно поправить конфиг nginx
sudo nano /etc/nginx/sites-available/default

Находим строчку
root /usr/share/nginx/www

Меняем на
root /media/files/www

Сохраняем, закрываем редкатор
Не забываем дать доступ пользователю nginx'a к папке:
sudo chown www-data -R /media/files/www/
sudo chmod 0755 -R /media/files/www/


Перезапускаем nginx
sudo /etc/init.d/nginx restart

или
sudo service nginx restart

Для статичных сайтов этого, в принципе, достаточно.
Если вам необходимо php скрипты — продолжаем редактировать /etc/nginx/sites-available/default
Находим в файле строку:
index index.html index.htm

Через пробел добавляем
index.php


Теперь включим возможность обработки php.
Находим блок
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #       fastcgi_split_path_info ^(.+\.php)(/.+)$;
        #       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
        #
        #       # With php5-cgi alone:
        #       fastcgi_pass 127.0.0.1:9000;
        #       # With php5-fpm:
        #       fastcgi_pass unix:/var/run/php5-fpm.sock;
        #       fastcgi_index index.php;
        #       include fastcgi_params;
        #}


Меняем на
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
               fastcgi_split_path_info ^(.+\.php)(/.+)$;
        #       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
        #
        #       # With php5-cgi alone:
        #       fastcgi_pass 127.0.0.1:9000;
        #       # With php5-fpm:
               fastcgi_pass unix:/var/run/php5-fpm.sock;
               fastcgi_index index.php;
               include fastcgi_params;
        }


Устанавливаем mysql
sudo apt-get -y install mysql-client mysql-server openssl libsasl2-modules

Устанавливаем php5-fpm и модули
sudo apt-get install -y php5-fpm
sudo apt-get install -y php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-memcached php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl memcached
sudo apt-get install -y php-apc
sudo apt-get install -y fcgiwrap


Установка торрент клиента Transmission


Установка Transmission-daemon
sudo apt-get install transmission-daemon


После завершения установки сервис автоматически запускается с настройками по умолчанию, остановим его
sudo /etc/init.d/transmission-daemon stop

или
service transmission-daemon stop


Теперь отредактируем конфиг
sudo nano /etc/transmission-daemon/settings.json

Все параметры рассматривать не будем, самые основные

«download-dir»: "/var/lib/transmission-daemon/downloads"
Путь к закачиваемым файлам
Меняем на свой, например:
"download-dir": "/mnt/hdd"

P.s. Надеюсь у вас по этому пути уже смонтирован жесткий диск

Разрешаем форвардинг, не забывая включить UPnP в своем роутере
"port-forwarding-enabled": false,

Меняем на
"port-forwarding-enabled": true


Если хотим заходить в веб интерфейс по паролю, оставляем:
"rpc-enabled": true

иначе меняем на:
"rpc-enabled": false


Удаляем все, что в кавычках, пишем вместо этого желаемый пароль. Пароль при запуске демона зашифруется.
"rpc-password": "{f40c259f547fb2b99f7faa1e27d6e9b31905e9c1DcVjhWHD"

Например:
"rpc-password": "cubietruck"


Порт, на который вешаем web интерфейс
"rpc-port": 9091


Имя пользователя:
"rpc-username": "transmission"

меняем на свое понравившееся:
"rpc-username": "pupkin"


Оставляем, если хотим, чтобы к веб интерфейсу был доступ только с локальной машины:
"rpc-whitelist-enabled": true

иначе меняем
"rpc-whitelist-enabled": false


Сохраняем конфиг

Запускаем сервис
sudo /etc/init.d/transmission-daemon start

или
service transmission-daemon start


Теперь проверим запустился ли сервис и веб интерфейс, открываем в браузере адрес
http://ip_вашего_кубика:9091

Если видим приглашение ввести логин и пароль, значит transmission работает.

Установка Samba


sudo apt-get install samba samba-common-bin

Так как мой кубик находится в домашней сети, я решил не устанавливать пароль на доступ к папкам, а просто настроил публичный шаринг для всей сети.
Для этого открываем файл smb.conf:
sudo nano /etc/samba/smb.conf


Вместо всего имеющегося содержимого пишем:
[global]
workgroup = WORKGROUP
guest ok = yes
netbios name = cubieT
security = share
browseable = yes

[files]
path = /media/files
writeable = yes
browseable = yes
<

Сохраняем. Перезапускаем Samba:
sudo /etc/init.d/samba restart


С этого момента в вашей сети появилось новое устройство cubieT, которое имеет папку files.
В ней Вы можете создать любые файлы, которые будут доступны для просмотра во всей сети с помощью браузера.

5. Удаленное управление Ajenti/Webmin


Webmin лидер на рынке свободного серверного ПО для администрирования, имеет множество подключаемых модулей на любой вкус.
Рассмотрим его установку
Добавим репозиторий Webmin в список репозиториев
sudo nano /etc/apt/sources.list


Вставляем в конец списка следующие строки
deb http://download.webmin.com/download/repository sarge contrib
deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib

Сохраняем, выходим из редактора.
Добавляем ключ репозитория в список ключей, для этого нужно быть под рутом.
Включаем суперюзера, переходим в домашнюю папку root, скачиваем ключ, устанавливаем.
sudo su
cd /root
wget http://www.webmin.com/jcameron-key.asc
apt-key add jcameron-key.asc


Обновляем список пакетов, устанавливаем webmin
sudo apt-get update && apt-get install webmin

Все зависимости установятся автоматически.

Открываем браузер, пишем
https://ip_вашего_кубика:10000

Браузер ругается и предлагает покинуть сайт, но мы добавляем сайт в доверенную зону и входим.
Пробуем сначала войти пользователем cubie, если не получается, то рутом.

Можно отключить шифрование (https):
Открываем файл конфигурации webmin
sudo nano /etc/webmin/miniserv.conf

находим строчку
ssl=1

1 меняем на 0
Перезапускаем webmin
sudo /etc/init.d/webmin restart

Теперь webmin работает по адресу
http://ip_вашего_кубика:10000


Если вас не устраивает webmin, можете попробовать ajenti. Тем более, что никаких дополнительных движений делать не нужно, ajenti уже установлен в Cubian, нужно лишь обновить систему и он заработает.
После обновления системы будет доступен по адресу
http://ip_вашего_кубика:8000


***В планах разобраться с возможностями GPIO, т.к. на малинке был организован небольшой логгер данных с датчиков DHT22 и DS18B20.