NAS на базе Cubietruck
17 Nov 2016NAS (Network Attached Storage) — это небольшой домашний сервер. Полезная в хозяйстве штука, которая обычно играет роль файлохранилища для домашней вычислительной техники, а также может сама скачивать файлы из интернета по расписанию. Использовать в качестве такого сервера полноценный компьютер нерационально — большое потребление энергии, шум. На эту роль отлично подходят популярные сейчас одноплатные компьютеры. (Как вариант, можно купить готовый NAS.) Попробуем настроить собственный NAS на основе CubieTruck.
О CubieTruck
Пару лет назад я купил CubieTruck — одноплатный компьютер на основе SoC архитектуры ARM. Тогда он подкупил меня тем, что имел аппаратную поддержку SATA, и к нему можно было подключить жёсткий диск напрямую без переходников, как в RaspberryPi.
Основные характеристики:
- AllWinnerTech SOC A20, ARM® Cortex™-A7 Dual-Core, ARM® Mali400 MP2 Complies with OpenGL ES 2.0/1.1
- 2GB DDR3 @480MHz (960MTPS)
- Видеовыходы: HDMI & VGA 1080p
- 10M/100M/1G Ethernet
- Wifi+BT беспроводные интерфейсы с антенной на плате
- SATA 2.0 интерфейс, поддерживающий 2.5″ HDD, (для 3.5″ HDD потребуется дополнительное 12 V питание)
- Хранение данных: MicroSD
- 2 × USB HOST, 1 × OTG, 1 × Toslink (SPDIF Optical), 1 × IR, 4 × LED, 1 аудио, 3 кнопки
- Питание: DC 5 V @ 2.5 A с HDD, поддержка литиевых батареек для RTC
- 54 пина, поддерживающих I2S, I2C, SPI, CVBS, LRADC x2, UART, PS2, PWMx2, TS/CSI, IRDA, LINEIN&FMIN&MICIN, TVINx4 with 2.0 pitch connectors
- Размер платы: 11 cm × 8 cm × 1.4 mm, хорошо подходит подходит для установки 2.5″ HDD
Об этом компьютере не раз писали в Интернете:
Хотя сейчас есть одноплатные компьютеры и помощнее при меньшей цене, эта система всё ещё актуальна.
С самого начала предполагалось, что плата будет работать без монитора как NAS. Она бесшумная, шум создаёт только жёсткий диск.
В качестве операционной системы поддерживается как Linux, так и Android. Естественно, для NAS лучше подходит первый.
Ниже описаны шаги, позволяющие построить файлохранилище и автоматическую торренто-качалку. Конечно, можно было бы добавить ещё много чего, возможности этого компьютера очень велики.
Предполагается, что читатель немного знаком с работой в командной строке Linux.
Питание
Вопрос питания довольно важный, если к плате подключен жёсткий диск. Сначала я питал его двух зарядных устройств: одно было подключено к основному разъёму питания, а второе к MicroUSB. Они могут использоваться одновременно. Но это неудобно и возникали сложности с отключением от питания.
Поэтому я купил в Китае блок адаптер, способный выдавать 3 А, с разъёмом USB. Его оказалось достаточно для запуска платы и старта жёсткого диска. Кстати, как я понял, большой ток нужен лишь для старта, во время работы диск потребляет меньше.
Установка базовой системы
Предлагаемые официально образы основаны на Lubuntu (ядро Linaro 13.06) и, мягко говоря, устарели. Если хочется установить свежее программное обеспечение, придётся повозится. После одной из попыток обновиться пакеты у меня система и вовсе перестала загружаться. Я уж не стал искать причины, а попробовал найти альтернативы.
Оказывается, существует дистрибутив Armbian (бывший Cubian), поддерживающий широкий спектр одноплатных компьютеров на ARM. Он основан на актуальных версиях Ubuntu и Debian и постоянно обновляется.
Образы для Cubiebtruck (Cubieboard 3)
Для «безголового сервера» больше подходит ветка «Mainline». Если же нужен компьютер с монитором и поддержкой мультимедиа, то нужно устанавливать ветку «Legacy».
Для каждой ветки можно выбрать дистрибутив. Предполагается, что в дальнейшем используется образ Xenial Server, хотя разница в настройке будет незначительной.
Установка образа
Про это довольно много написано в Интернете. Установка выполняется очень просто. На «большом компьютере» скачиваем образ и записываем его побайтово на карточку:
sudo dd bs=1M if=filename.img of=/dev/sdX status=progress
sync
Не забудьте заменить /dev/sdX
на имя устройства, соответствующего карточке!
Команда dd
предназначена для побайтового копирования файлов блоками
указанного размера. Это размер задаётся параметром bs
. В нашем
случае он равен 1 мегабайту. if
и of
— входной и выходной файлы
соответственно. А параметр status=progress
заставляет во время
работы выводить информация о том, сколько байт уже скопировано, чтобы
мы не скучали.
Вставляем карточку и включаем систему. Первый запуск образа дольше обычного, так как создаётся swap и образ «растягивается» на всю карточку.
Первый запуск нужно проводить подключив монитор и клавиатуру, чтобы следить за диагностическими сообщениями и, если нужно, что-то подправить.
Хотя, хоть я это и не пробовал, наверное, можно после загрузки сразу подключиться через SSH. Главное узнать IP-адрес — он по умолчанию определяется динамически через DHCP.
Первоначальная настройка
По умолчанию вход выполняется от имени суперпользователя (root
) с паролем 1234
(ха!).
При первом запуске система сама запрашивает логин и пароль, а также
создаёт пользователя. И это правильно — лучше не сидеть от имени root
, чтобы что-то
не сломать и не подвергать компьютер лишнему риску.
Я создал пользователя vadim
.
Сразу обновим систему:
sudo apt update
sudo apt upgrade
Зададим имя нашему компьютеру (я назвал его archive):
sudo hostnamectl set-hostname archive
Сразу хочу оговориться, что это действие, как и многие другие можно выполнить
с помощью утилиты armbian-config
. Но мне нравится контролировать процесс настройки,
да и команды несложные, поэтому пользоваться мы ей не будем.
Тем не менее, если у вас нет опыта работы с Linux, то, возможно, эта утилита вам пригодится.
Запуск команд без пароля
Чтобы пользователю vadim
можно было запускать команды от имени
суперпользователя без запроса пароля, нужно подправить файл
/etc/sudoers
. Его нужно открыть на редактирование командой
visudo
. Добавим строчку:
vadim ALL=(ALL) NOPASSWD:ALL
Кто-то может счесть это дырой в безопасности. Однако, если
злоумышленник сможет зайти от имени пользователя vadim
, то это будет
меньшей из проблем, так как он получит доступ к файлам. В противном
же случае эта настройка на безопасность никак не влияет.
Локализация
Устанавливаем пакет с переводами:
sudo apt install language-pack-ru
Установка системной локали (язык, кодировка и разные настройки, связанные с ними):
sudo localectl set-locale LANG=ru_RU.UTF-8
Настройка часового пояса:
sudo timedatectl set-timezone Europe/Chisinau
Для переключения раскладки клавиатуры на русский язык правим файл
/etc/default/keyboard
:
XKBLAYOUT="us,ru"
XKBVARIANT=","
XKBOPTIONS="grp:alt_shift_toggle"
После этого раскладка будет переключаться по Alt+Shift.
Затем:
sudo dpkg-reconfigure kbd
Если требуется тонкая настройка шрифтов в консоли:
sudo dpkg-reconfigure console-setup
Последние шаги нужно выполнять только если предполагается сидеть в терминале через подключенный монитор. При работе через SSH это ни на что не влияет.
Полезные программы
Тут каждый ставит то, что хочет. Например, для установки пакетов я использую aptitude. Но здесь он уже есть из коробки.
Поэтому доустановим лишь Midnight Commander и текстовый редактор jed (легкий вариант моего любимого emacs):
sudo apt install mc jed
Настройка сети
Чтобы было удобнее подключаться, зададим нашему NAS статический IP-адрес. (Его нужно задавать так, чтобы он находился в той же подсети, что и остальные домашние компьютеры, и чтобы он не попадал в диапазон раздаваемых через DHCP адресов. Поэтому у вас адрес может быть и другим.)
У меня шлюз (в его роли выступает роутер) имеет адрес 192.168.0.254.
Итак, зададим статический IP 192.168.0.1 со шлюзом 192.168.0.254.
Есть два варианта настройки сети. (Спойлер: второй проще и скорее всего вам нужен именно он.)
1 способ. Настройка сети через systemd
Создаём файл /etc/systemd/network/wired.network
с содержимым:
[Match]
Name=eth0
[Network]
Address=192.168.0.1
Gateway=192.168.0.254
DNS=8.8.8.8
Включаем автонастройку сети через systemd
sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd
После этого systemd будет добавлять к указанному интерфейсу статический адрес. Но и адрес, полученный через DHCP тоже будет работать. Это бывает удобно.
2 способ. Настройка сети через /etc/network/interfaces
Настройка сводится к правке /etc/network/interfaces
:
allow-hotplug eth0
no-auto-down eth0
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0
gateway 192.168.0.254
auto lo
iface lo inet loopback
Для настройки DNS добавим в /etc/resolv.conf
строчки:
nameserver 8.8.8.8
nameserver 4.4.4.4
Это DNS от Google. Можете указать и свои. У меня, например, на самом деле прописан адрес роутера, который умеет кэшировать DNS-запросы.
После настройки нужно перезапустить сетевую подсистему:
sudo systemctl restart networking
Или же можно просто перезагрузиться.
Настройка WiFi
Если не хочется тянуть к NAS сетевой провод, можно использовать WiFi. Настраивается так же, как и проводная сеть.
Удалённый доступ
В дальнейшем планируется подключаться к NAS через SSH. Чтобы не вводить каждый раз пароль настроим доступ по ключу.
Проверка состояния сервера SSH (он установлен из коробки):
sudo systemctl status ssh
Все дальнейшие действия выполняются на большом компьютере (который будет подключаться).
Генерация ключа:
ssh-keygen -f ~/.ssh/archive
Пароль можно оставить пустым. (Тогда, главное, ключ никому не давайте!)
Добавление ключа в связку:
ssh-add ~/.ssh/archive
Копирование ключа на сервер:
ssh-copy-id -i ~/.ssh/archive.pub vadim@192.168.0.1
Теперь к NAS можно подключиться без пароля:
ssh vadim@192.168.0.1
Жёсткий диск
Для начала создадим системную группу для работы с жёстким диском. Все пользователи, от имени которых работают демоны (системный фоновые процессы), должны быть включены в эту группу, так как у диска будут права этой группы.
sudo addgroup --system data
Включаем основного пользователя в эту группу:
sudo usermod -a -G data vadim
Создание директории для монтирования жёсткого диска:
sudo mkdir /mnt/data
Для автоматического монтирования добавляем диск в /etc/fstab
:
/dev/sda1 /mnt/data ext4 defaults 0 2
Здесь /dev/sda1
— имя устройства, связанного с жёстким
диском. Скорее всего оно будет так называться, хотя гарантий нет.
Вместо /dev/sda1
можно указать UUID, который отображается командой blkid.
У каталогов, с которыми будут работать разные программы, должны быть права
vadim:data 2775
- 2 — SGID, чтобы для внутренних файлов использовались права группы владельца каталога.
- 7 — Пользователь может всё.
- 7 - Группа пользователя может всё.
- 5 — Остальные могут только читать и смотреть содержимое каталога.
Если на диске уже есть файлы, для смены прав доступа могут быть полезны команды:
find . -type d -exec chmod 2775 {} +
find . -type f -exec chmod 2664 {} +
Они находят все файлы и подкаталоги в текущем (не забудьте в него перейти) и меняют права.
Установка владельца для всех файлов и каталогов в текущем:
sudo chown -R vadim:data ПУТЬ
Торренты
Настроим автоматическую закачку торрентов по расписанию.
Установка Transmission
В качестве «качалки» будет использовать Transmission. У него есть вариант без графического интерфейса. Управлять программой можно через браузер или с помощью приложений, которые подключаются к нему по сети.
Я, например, использую Torrnado для Android.
Установка демона:
sudo apt install transmission-daemon
Добавляем демона к группе data:
sudo usermod -a -G data debian-transmission
Для настройки демона нужно сперва его остановить:
sudo systemctl stop transmission-daemon
Конфигурация демона находится в файле
/etc/transmission-daemon/settings.json
. Исправим следующие
параметры:
"download-dir": "/mnt/data/downloads",
"incomplete-dir": "/mnt/data/downloads",
"rpc-whitelist-enabled": false,
"port-forwarding-enabled": true,
"umask": 2,
Здесь umask=2
(или же 002) вместо 18 (=022) по умолчанию задаёт
файлам права 774 вместо 744. Этот параметр задаёт биты маски прав
доступа, которые не устанавливаются.
Пользователь и пароль по умолчанию: transmission:transmission. Чтобы задать пароль нужно вписать его в поле rpc-password.
Для пользователя и пароля vadim:PASSW0RD:
"rpc-password": "PASSW0RD",
"rpc-username": "vadim",
После перезапуска Transmission сам его хеширует и в следующий раз в конфигурации вместо пароля будет хеш.
Выключить пароль можно опцией rpc-authentication-required
.
Если поменять URL для RPC, то некоторые программы могут не работать. Будьте внимательны!
Запуск Transmission:
sudo systemctl start transmission-daemon
Установка Monitorrent
Раньше я пользовался Flexget — это необычайно мощная качалка файлов, которая, пожалуй, может всё. Но, поддавшись модным тенденциям, перешёл на Monitorrent. У него лучше поддержка популярных трекеров, но он пока не умеет, например, скачивать премьеры.
Проще всего устанавливать его через Docker. Для этого, конечно, нужно сперва установить сам Docker.
sudo apt install docker.io
Теперь запустим контейнер с Monitorrent:
sudo docker run -d \
--name monitorrent \
-p 6687:6687 \
--restart unless-stopped \
-v /mnt/data/monitorrent.db:/var/www/monitorrent/monitorrent.db:rw \
werwolfby/armhf-alpine-monitorrent
Здесь при помощи параметра -v
файл вне контейнера (база настроек) отображается
в контейнер. Это нужно, чтобы при обновлении или перезапуске
контейнера база не стёрлась.
Параметр --name
сразу даёт контейнеру имя monitorrent
, чтобы потом его
легко было найти.
Следующей командой можно получить список контейнеров и убедиться, что наш контейнер успешно создан и запущен.
sudo docker ps -a
Затем настраивается сам Monitorrent по адресу http://192.168.0.1:6687. Не забудьте задать пароль на вход.
Осталось только настроить уведомления. Тут уже каждый выбирает способ себе по душе. Для меня самыми удобными оказались уведомления через Telegram. Подробную инструкцию можно найти в wiki проекта.
Samba
Для доступа к файлам с компьютеров под управлением Windows нужна Samba.
Установка:
sudo apt install samba
Системный пользователь для входа:
sudo adduser --system --home /var/lib/samba/home samba
sudo usermod -a -G data samba
Добавление пользователя в Samba:
sudo pdbedit -a -u samba
Пример конфигурации /etc/samba/smb.conf
:
[global]
workgroup = HOME
netbios name = ARCHIVE
server string = %h server (Samba, Ubuntu)
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %d
server role = standalone server
passdb backend = tdbsam
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
pam password change = yes
map to guest = bad user
create mask = 0664
force create mode = 0664
directory mask = 0775
force directory mode = 0775
read only = no
[downloads]
path = /mnt/data/downloads
comment = Загруженные файлы
Можно добавить ещё несколько каталогов и использовать их для хранения или обмена файлами между компьютерами в локальной сети.
Dejadup
Для бэкапов я использую DejaDup. Он может пересылать бэкапы через SSH (точнее через SFTP). Для этого создадим пользователя, от имени которого он будет подключаться.
Добавление пользователя:
sudo adduser --system --home /var/lib/dejadup --shell /bin/sh dejadup
Пользователь в группе nogroup, без шелла sftp работать не будет.
Файлы хранятся в /mnt/data/backups. Нужно дать права на эту директорию пользователю dejadup:
sudo chown -R dejadup:data /mnt/data/backups
Syncthing
Для тех, кто ещё не знает, Syncthing — это программа для синхронизации директорий через Интернет. Незаменимая вещь как для создания «домашнего облака», так и для того, чтобы делиться файлами с друзьями. В использовании немного непривычна, но если разобраться, то всё становится понятным и логичным. (Кстати, есть приложения под все популярные платформы и архитектуры.)
Syncthing, к сожалению, отсутствует в официальном репозитории Armbian, но никто не мешает добавить репозиторий, где он есть.
Создадим файл /etc/apt/sources.list.d/syncthing.list
(естественно, от имени root) следующего содержания:
deb http://apt.syncthing.net/ syncthing release
И добавим ключ от этого репозитория:
curl -s https://syncthing.net/release-key.txt | sudo apt-key add -
После этого можно установить Syncthing как обычно:
sudo aptitude update && sudo aptitude install syncthing syncthing-inotify
Первый пакет — это сама утилита, а второй предназначен для отслеживания изменений в синхронизируемой директории.
Создадим пользователя, от имени которого будет работать демон. Он будет принадлежать группе data, чтобы упростить доступ к синхронизируемой директории.
sudo adduser --system --home /var/lib/syncthing syncthing
sudo usermod -a -G data syncthing
Теперь настроим автоматический запуск через systemd. Для этого создадим два файла.
Первый — /etc/systemd/system/syncthing.service
:
[Unit]
Description=Syncthing - Open Source Continuous File Synchronization
After=network.target
[Service]
ExecStart=/usr/bin/syncthing -no-browser -no-restart
Restart=on-failure
SuccessExitStatus=3 4
RestartForceExitStatus=3 4
User=syncthing
[Install]
WantedBy=default.target
Второй — /etc/systemd/system/syncthing-inotify.service
:
[Unit]
Description=Syncthing Inotify File Watcher
After=network.target syncthing.service
Requires=syncthing.service
[Service]
User=syncthing
ExecStart=/usr/bin/syncthing-inotify
SuccessExitStatus=2
RestartForceExitStatus=3
Restart=on-failure
ProtectSystem=full
ProtectHome=read-only
[Install]
WantedBy=multi-user.target
Так как синхронизируемые каталоги часто бывают очень большими, увеличим лимит на количество открытых файлов:
echo -e "fs.inotify.max_user_watches=204800" | sudo tee -a /etc/sysctl.conf
Остаётся включить автозапуск и запустить демоны:
sudo systemctl enable syncthing{,-inotify}
sudo systemctl start syncthing{,-inotify}
У этой утилиты есть веб-интерфейс, работающий на порту 8384 через который
можно добавить директории к синхронизации. Однако по умолчанию доступ разрешён
только с локального компьютера. Если же нужно обращаться к нему с удалённого компьютера,
то нужно открыть файл /var/lib/syncthing/.config/syncthing/config.xml
и изменить параметр /configuration/gui/address
на 0.0.0.0:8384
.
Однако, надо помнить, что тогда доступ к интерфейсу будет открыт для всех.
После изменений настроек, демоны нужно перезапустить:
sudo systemctl restart syncthing{,-inotify}
После первого запуска интерфейс (по адресу http://192.168.0.1:8384) Syncthing предложит задать пароль для входа. Настоятельно рекомендую это сделать.
Директорию для синхронизации создаём как обычно:
sudo mkdir /mnt/data/sync
sudo chown syncthing:data /mnt/data/sync
sudo chmod 0774 /mnt/data/sync
Остаётся лишь добавить её для синхронизации.
Что дальше?
К сожалению, многие вещи не были освещены:
- настройка файрволла (
ufw
), - создание прокси-сервера для удобного доступа ко всем сервисам,
- MPD-сервер — подключив колонки к CubieTruck можно крутить на нём музыку, управляя воспроизведением с компьютера или телефона.
- DLNA — автоматическое перекодирования мультимедиа для воспроизведения с устройств.
- VPN — использование CubieTruck как VPN-сервера.
- и многое другое.
Позже я дополню этот пост.