NAS-хранилище и медиасервер на Raspberry Pi 4 (часть 2)

Опубликовано: 18.01.2022
Автор: Виталий Бочкарев
Поддержать автора статьи по этой ссылке

Эта заметка - продолжение статьи NAS-хранилище и медиасервер на Raspberry Pi 4 (часть 1).

Операционная система

Установка операционной системы

После того, как оборудование собрано, можно приступить к установке программного обеспечения.

Сначала нужно вынуть диск из корпуса RaspberryPI и подключить диск к компьютеру с помощью USB-SATA адаптера.

NAS and Media server at Raspberry PI - 20

Когда диск подключен компьютеру в командной строке, запущенной от имени администратора, можно проверить разметку подключенного диска. В моем случае показан диск, на котором нет никаких разделов - пустой диск без данных.

NAS and Media server at Raspberry PI - 21

Далее на компьютер нужно установить программу Raspberry Pi Imager, через которую "залить" на подключенный диск образ операционной системы Rapian Lite.

NAS and Media server at Raspberry PI - 22

NAS and Media server at Raspberry PI - 23

Когда содержимое образа скопировано на диск, то через командную строку с правами администратора можно посмотреть на новую разметку диска.

На диске появились 2 раздела:

  • небольшой раздел (256 МБ) с загрузочной информацией (метка тома на этом разделе - boot, а формат тома - FAT32),
  • основной раздел с данными (1 ГБ), который позже будет расширен на весь диск, но Windows не видит томов на этом разделе, так как формат томов - EXT4, который разработан для Linux.
NAS and Media server at Raspberry PI - 24

Теперь нужно отключить и заново подключить диск к компьютеру, чтоб в проводнике обновилось информация о дисках. В проводнике появится загрузочный том "boot", а так же сообщение, что второй раздел не содержит томов - нужно проигнорировать это сообщение.

Далее нужно записать и отредактировать несколько файлов конфигурации:

  • ssh - пустой файл без расширения, который является "флагом" для системы, что разрешено управление по SSH протоколу.
  • wpa_supplicant.conf - файл настроек WiFi сети со следующим содержанием:
country=RU
ctrl_interface=DIR=/var/run/wpa_aupplicant GROUP=netdev
update_config=1
network={
scan_ssid=1
ssid="имя_wifi_сети"
psk="пароль_wifi_сети"
key_mgmt=WPA=PSL
}

Важно! Файл wpa_supplicant.conf должен быть в формате кодовой страницы ANSI с разрывом строк в формате UNIX, а не Windows. Установить этот формат кодировки можно в текстовом редакторе Notepad2.

  • config.txt - файл, который хранит начальную конфигурацию системы Raspbian OS, где нужно указать нужные параметры экрана (раскомментировать и отредактировать строки):
hdmi_group=1
hdmi_mode=5

Некоторые значения для параметра hdmi_mode:

hdmi_mode resolution frequency screen aspect
1 VGA (640x480) 60Hz 4:3
2 480p 60Hz 4:3
3 480p 60Hz 16:9
4 720p 60Hz 16:9
5 1080i 60Hz 16:9

 

Когда все файлы записаны, диск нужно отключить от компьютера и установить в корпус NASPi.

Так как встроенная в плату Raspberry PI антенна WiFi очень слабая, то я рекомендую либо не устанавливать сборку плат и диска в алюминиевый корпус на этом этапе, либо использовать проводное подключение непосредственно к домашнему роутеру.

NAS and Media server at Raspberry PI - 25

NAS and Media server at Raspberry PI - 26

Найти на роутере адрес микрокомпьютера.

NAS and Media server at Raspberry PI - 27

Войти в SSH сессию под пользователем pi с паролем raspberry и с IP-адресом, найденным на роутере, используя такую команду:

ssh pi@192.168.0.15
NAS and Media server at Raspberry PI - 28
Примечание.
Команда ssh присутствует в Windows 10 последних сборок по умолчанию. В более ранних версиях её нет, поэтому в этих случаях вместо ssh я рекомендую использовать либо программу Putty, либо установить клиент ssh из GitHub или через PowerShell.

Обновить систему, загрузив и установив последние версии используемых пакетов. Команды, которые надо выполнить поочередно:

sudo apt-get update
sudo apt-get upgrade
sudo reboot
NAS and Media server at Raspberry PI - 29

Установка драйверов вентилятора корпуса NASPi

После перезагрузки опять войти в SSH сессию.
Установить драйвер вентилятора NASPI, выполнив команды поочередно (полная инструкция написана на сайте производителя корпуса):

cd ~
sudo apt-get install -y git pigpio 
sudo apt-get install -y python-pigpio python3-pigpio
sudo apt-get install -y python-smbus python3-smbus
git clone https://github.com/geekworm-com/x-c1.git
cd x-c1
sudo chmod +x *.sh
sudo bash install.sh
echo "alias xoff='sudo /usr/local/bin/x-c1-softsd.sh'" >> ~/.bashrc

Установка драйверов внешнего WiFi-адаптера Realtek с811

Подключить внешний WiFi-адаптер в USB-порт сборки.

NAS and Media server at Raspberry PI - 30

Чтобы узнать, какие устройства подключены через USB порты, нужно выполнить команду:

sudo lsusb

В ответ будет выдана краткая информация о портах USB и устройствах в них. Среди них нужно найти, определился ли подключенный адаптер:

Bus 001 Device 004: ID 0bda:c811 Realtek Semiconductor Corp.

Или другую команду об информации из ядра системы с фильтрацией по слову usb:

sudo dmesg | grep usb

В ответ будет выдана полная информация о USB-портах и устройствах, подключенных через них. В полученном выводе нужно найти, определился ли подключенный адаптер:

[    3.225177] usb 1-1.3: new high-speed USB device number 4 using xhci_hcd
[    3.356356] usb 1-1.3: New USB device found, idVendor=0bda, idProduct=c811, bcdDevice= 2.00
[    3.356380] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[    3.356401] usb 1-1.3: Product: 802.11ac NIC
[    3.356418] usb 1-1.3: Manufacturer: Realtek
[    3.356434] usb 1-1.3: SerialNumber: 123456

Если устройство RTL8811cu определено, то теперь можно установить для него драйвер, выполнив команды поочередно (здесь используется проект драйвера rtl8811cu с GitHub):

Внимание! После обновления операционной системы и модулей в апреле 2022 года, используемый ниже проект драйвера RTL8811CU перестал работать. Вместо него я сейчас использую проект https://github.com/morrownr/8821cu-20210118. Порядок установки драйвера описан на главной странице проекта.
cd ~
sudo apt-get install -y bc git dkms build-essential raspberrypi-kernel-headers
git clone -b v5.8.1 https://github.com/fastoe/RTL8811CU_for_Raspbian
cd RTL8811CU_for_Raspbian
make
sudo make install
sudo modprobe 8821cu
sudo reboot
NAS and Media server at Raspberry PI - 31

После перезагрузки системы опять войти в SSH сессию.
Посмотреть какие сетевые устройства установлены в системе, выполнив команду:

cat /proc/net/dev

NAS and Media server at Raspberry PI - 32

Среди wlan-устройств нужно определить то, которое использует недавно установленный драйвер -  для обоих wlan-устройств нужно выполнить команду:

ethtool -i wlan1 | grep driver

В ответ будет выдан драйвер устройства. То устройство, которое использует драйвер rtl8821cu, и есть внешний wifi-адаптер. В моем примере внешний адаптер имеет имя wlan0.

NAS and Media server at Raspberry PI - 33

Примечание.
Если имя интерфейса не wlanX, а служебный идентификатор, то нужно задать интерфейсу, который использует драйвер rtl8821cu, имя wlanX через файл /etc/udev/rules.d/72-static-name.rules.
Открыть файл на редактирование:

sudo nano /etc/udev/rules.d/72-static-name.rules

В файл вставить строку, где заменить X свободным числом. Например внутренний модуль имеет номер 0, тогда внешнему можно поставить 1:

ACTION=="add", SUBSYSTEM=="net", DRIVERS=="rtl8821cu", NAME="wlan1"

Когда имена адаптеров распознаны, нужно удостовериться, что оба адаптера подключились к домашнему WiFi, используя пароль, переданный системе в файле wpa_supplicant.conf. Для этого нужно выполнить команду:

ifconfig -a
NAS and Media server at Raspberry PI - 34

В моем примере оба адаптера получили IP адрес от домашнего роутера

wlan0 = 192.168.0.17
wlan1 = 192.168.0.15

Чтобы проверить качество приема по каждому из WiFi-модулей, нужно поочередно выполнить команды:

sudo iwlist wlan1 scan | egrep "Cell|ESSID|Signal|Rates"
sudo iwlist wlan0 scan | egrep "Cell|ESSID|Signal|Rates"

В ответ будет выдана информация о качестве сигнала.

NAS and Media server at Raspberry PI - 35

В моем примере внешний WiFi-модуль rtl8821cu поймал 8 WiFi-сетей, а качество сигнала по домашней сети очень хорошее.

После того, как внешний адаптер настроен, то внутренний WiFi-модуль больше не нужен и его можно отключить.
Для отключения встроенного в плату Raspberry Pi 4B модуля WiFi, нужно в файл /boot/config.txt в секцию [all] добавить строку dtoverlay=disable-wifi. Сделать это можно, выполнив команду:

sudo nano /boot/config.txt

и вставить в конец (так как секция [all] обычно в конце)

dtoverlay=disable-wifi

Сохранить файл и перезагрузить устройство:

sudo reboot
NAS and Media server at Raspberry PI - 36

Теперь, когда внешний модуль WiFi полностью функционирует, то можно надеть на сборку алюминиевый корпус.

NAS and Media server at Raspberry PI - 37

А полностью собранное устройство установить к телевизору и подключить все необходимые кабели. Дальнейшая настройка будет производиться только по WiFi.

NAS and Media server at Raspberry PI - 38

Найти на роутере IP адрес устройства, так как если прошло достаточно длительное время, то время удержания динамического адреса за устройством может истечь, а адрес может измениться (в моем случае я продолжал настройку на следующий день).

NAS and Media server at Raspberry PI - 39

Чтобы каждый день не искать, какой IP-адрес получил NASPi, нужно закрепить за микрокомпьютером найденный адрес, зафиксировав MAC-адрес адаптера в таблице резервации DHCP домашнего роутера.

NAS and Media server at Raspberry PI - 40

Настройка операционной системы

Далее можно приступать к настройке операционной системы.
Войти в SSH сессию под пользователем pi с паролем raspberry и с IP-адресом, найденным на роутере, используя такую команду:

ssh pi@192.168.0.17

Войти в настройки Raspian с помощью команды:

sudo raspi-config

В меню настроек системы выбрать пункт System Options:

NAS and Media server at Raspberry PI - 41

Внутри системных опций выбрать Hostname, чтобы переименовать имя устройства, и задать новое имя, например raspi-nas:

NAS and Media server at Raspberry PI - 42

В том же подменю выбрать Password, чтобы установить новый пароль для входа в систему, и задать новый пароль, например raspinas:

NAS and Media server at Raspberry PI - 43

Вернуться в главное меню, выбрать Finish и перезагрузить устройство:

NAS and Media server at Raspberry PI - 44

После перезагрузки микрокомпьютера в таблице клиентов роутера удостовериться, что IP адрес устройства не изменился, а имя теперь новое:

NAS and Media server at Raspberry PI - 45

Войти в SSH сессию с новым паролем.
В файл /etc/hosts прописать имя компьютера, чтобы операционная система знала соответствие между IP-адресом "внутренней петли" и именем в разных его вариантах.

sudo nano /etc/hosts

в конец файла дописать:

127.0.0.1    raspi-nas raspi-nas.home raspi-nas.local
NAS and Media server at Raspberry PI - 46

Сетевые протоколы для обмена файлами

Установка SMB-сервера

Войти в SSH сессию к микрокомпьютеру.
Установить пакет SMB сервера, используя команду:

sudo apt-get install -y samba samba-common-bin

Создать нового пользователя nas с паролем NasUser, используя команду:

sudo adduser nas

В ответ команда запросит заполнить следующие поля (можно оставить их пустыми, ввести надо только пароль):

Adding user 'nas' ...
Adding new group 'nas' (1001) ...
Adding new user 'nas' (1001) with group 'nas' ...
Creating home directory '/home/nas' ...
Copying files from '/etc/skel' ...
New password: NasUser
Retype new password: NasUser
passwd: password updated successfully
Changing the user information for nas
Enter the new value, or press ENTER for the default
    Full Name []:
    Room Number []: 
    Work Phone []: 
    Home Phone []: 
    Other []: 
Is the information correct? [Y/n] y

Создать папку хранилища для общих файлов:

sudo mkdir /shared
sudo chmod -R 777 /shared

Прописать созданную папку в конфигурации SMB-сервера, которая хранится в файле /etc/samba/smb.conf. Открыть файл конфигурации:

sudo nano /etc/samba/smb.conf

В конец файла дописать строки:

[shared]
comment = hdd
path = "/shared"
writeable = yes
guest ok = yes
create mask = 0644
directory mask = 0755
force user = nas

Перезапустить сервис SMB-сервера:

sudo systemctl restart smbd

Создать пользователя nas с паролем NasUser в окружении SMB-сервера, используя команды:

sudo smbpasswd -a nas
sudo smbpasswd -e nas

Установка FTP-сервера

Войти в SSH сессию к микрокомпьютеру.
Установить пакет FTP сервера, используя команду:

sudo apt-get install -y vsftpd

Прописать созданную ранее папку в конфигурации FTP-сервера, которая хранится в файле /etc/vsftpd.conf. Открыть файл конфигурации:

sudo nano /etc/vsftpd.conf

В конец файла дописать строки:

local_root=/shared

Перезапустить сервис FTP-сервера:

sudo service vsftpd restart

Проверка подключения к хранилищу с Windows компьютера

Чтобы открыть хранилище по протоколу SMB, необходимо ввести в проводнике \\raspi-nas\shared, указать пользователя nas и пароль NasUser.

NAS and Media server at Raspberry PI - 47
NAS and Media server at Raspberry PI - 48

Чтобы открыть хранилище по протоколу FTP, необходимо в проводнике или браузере ввести ftp://raspi-nas/, , указать пользователя nas и пароль NasUser.

NAS and Media server at Raspberry PI - 49
NAS and Media server at Raspberry PI - 50

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

Войти в SSH сессию к микрокомпьютеру.
Создать папку хранилища для торрент файлов:

sudo mkdir /torrent
sudo chmod -R 777 /torrent

Изменить размер swap-файла со 100 МБ на 256 МБ. Открыть файл /etc/dphys-swapfile:

sudo nano /etc/dphys-swapfile

Найти строку с параметром CONF_SWAPSIZE и изменить значение на 256:

CONF_SWAPSIZE=256

Установить пакет Торрент клиента, используя команду:

sudo apt-get install -y transmission-daemon

Остановить сервис торрент клиента

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

Открыть файл конфигурации торрент клиента:

sudo nano /etc/transmission-daemon/settings.json

Отредактировать параметры в соответствии с рекомендациями ниже, что позволит не загружать домашнюю сеть торрентом на всю возможную полосу пропускания - установить ограничения:

"cache-size-mb": 1,
"dht-enabled": false,
"download-dir": "/shared",
"download-limit": 50,
"download-queue-size": 2,
"encryption": 0,
"incomplete-dir": "/torrent",
"peer-limit-global": 10,
"peer-limit-per-torrent": 5,
"preallocation": 0,
"prefetch-enabled": false,
"rpc-host-whitelist-enabled": false,
"rpc-password": "NasUser",
"rpc-username": "nas",
"rpc-whitelist": "127.0.0.1 192.168.0.*",

Запустить сервис торрент клиента

sudo /etc/init.d/transmission-daemon start

Проверка торрент клиента с компьютера

Чтобы открыть веб-интерфейс торрент-клиента нужно в браузере ввести http://raspi-nas:9091/, указать пользователя nas и пароль NasUser.

NAS and Media server at Raspberry PI - 51

В открывшемся окне можно управлять загрузками файлов: добавлять новые torrent-файлы, удалять закачки, останавливать и запускать задания.

NAS and Media server at Raspberry PI - 52

Веб-интерфейс администратора

Установка веб-консоли администратора

Войти в SSH сессию к микрокомпьютеру.
Установить консоль администратора, выполняя команды поочередно:

wget -nc - http://www.webmin.com/jcameron-key.asc
gpg --dearmor jcameron-key.asc > jcameron-key.gpg
sudo cp jcameron-key.gpg /etc/apt/trusted.gpg.d/
sudo cp jcameron-key.asc /etc/apt/trusted.gpg.d/
ls /etc/apt/trusted.gpg.d/

wget -qO - http://www.webmin.com/jcameron-key.asc | sudo apt-key add -
apt-key list
sudo apt-key del 1719003ACE3E5A41E2DE70DFD97A3AE911F63C51

sudo sh -c 'echo "deb http://download.webmin.com/download/repository sarge contrib" > /etc/apt/sources.list.d/webmin.list'
sudo apt-get update

sudo apt-get install -y webmin

Проверка веб-консоли администратора с компьютера

Чтобы открыть веб-интерфейс администратора нужно в браузере ввести https://raspi-nas:10000/, указать пользователя pi и пароль от этого пользователя (например у меня он raspinas).

Примечание! Консоль администратора работает только по протоколу HTTPS, поэтому важно в адресной строке указывать https://, а потом принять предупреждение браузера, что сертификат узла проверить не удалось и хост может быть опасен. Это нормально для локального решения.
NAS and Media server at Raspberry PI - 53

NAS and Media server at Raspberry PI - 54

NAS and Media server at Raspberry PI - 55

Медиацентр

Установка медиацентра

Войти в SSH сессию к микрокомпьютеру.
Установить медиацентр Kodi командой:

sudo apt-get install -y kodi

Чтобы медиацентр запускался автоматически при запуске компьютера, необходимо выполнить следующие команды:

sudo tee -a /lib/systemd/system/kodi.service <<_EOF_
[Unit]
Description = Kodi Media Center
After = remote-fs.target network-online.target
Wants = network-online.target

[Service]
User = pi
Group = pi
Type = simple
ExecStart = /usr/bin/kodi-standalone
Restart = on-abort
RestartSec = 5

[Install]
WantedBy = multi-user.target
_EOF_

sudo systemctl enable kodi.service

Примечание. Так так целью данной статья не является разбор возможностей Kodi, то тут приведены только начальные настройки медиасервера.

Настроить Kodi можно как через пользовательский интерфейс на экране монитора/телевизора, через веб-интерфейс по адресу http://raspi-nas:8080/ (если он включен в настройках) или через файлы XML в папке /home/pi/.kodi/userdata.

Чтобы активировать минимально нужные функции, я рекомендую открыть файл конфигурации медиасервера:

sudo nano /home/pi/.kodi/userdata/guisettings.xml:

и отредактировать параметры в соответствии с рекомендациями ниже:

    <setting id="locale.language">resource.language.ru_ru</setting>
    <setting id="locale.charset" default="true">DEFAULT</setting>
    <setting id="locale.keyboardlayouts">English QWERTY|Russian ЙЦУКЕН</setting>
    <setting id="locale.activekeyboardlayout" default="true">English QWERTY</setting>
    <setting id="locale.country">Russia</setting>
    <setting id="locale.timezonecountry">Russia</setting>
    <setting id="locale.timezone">Europe/Moscow</setting>

    <setting id="services.devicename" default="true">Kodi</setting>
    <setting id="services.webserver">true</setting>
    <setting id="services.webserverport" default="true">8080</setting>
    <setting id="services.webserverauthentication" default="true">true</setting>
    <setting id="services.webserverusername">nas</setting>
    <setting id="services.webserverpassword">NasUser</setting>
    <setting id="services.upnp">true</setting>
    <setting id="services.upnpserver">true</setting>

    <setting id="smb.workgroup" default="true">WORKGROUP</setting>
    <setting id="smb.winsserver" default="true">0.0.0.0</setting>
    <setting id="smb.minprotocol" default="true">0</setting>
    <setting id="smb.maxprotocol" default="true">3</setting>
    <setting id="smb.legacysecurity" default="true">false</setting>

    <setting id="weather.currentlocation" default="true">1</setting>
    <setting id="weather.addon">weather.gismeteo</setting>

Сохранить файл и перезагрузить систему.

Аналогичные настройки можно сделать через Интерфейс пользователя:

NAS and Media server at Raspberry PI - 56

NAS and Media server at Raspberry PI - 57

NAS and Media server at Raspberry PI - 58

NAS and Media server at Raspberry PI - 59

 

Проверка медиацентра на телевизоре

При  включении системы на экран выводится прогноз погоды.

NAS and Media server at Raspberry PI - 62

На главной странице медиацентра отображаются фильмы, которые есть в библиотеке, но еще не просмотрены.

NAS and Media server at Raspberry PI - 63

Из всех возможных дополнений я использую только YouTube и Transmission Control Panel.

NAS and Media server at Raspberry PI - 64

Чтобы система автоматически добавляла новые файлы в библиотеку, так же обновляла в библиотеке данные о фильмах, необходимо настроить типы содержимого папок "Видео" на диске и источники данных "The Movie Database Python".

Внимание! Сайт https://www.themoviedb.org/, который используется для получения данных о фильмах, в связи с санкциями заблокировал запросы из России. Но, как выяснилось, запрещен доступ не к самой базе данных, а к DNS-адресу базы данных. То есть, если в настройках DNS операционной системы прописать DNS сервер, который имеет запись themoviedb.org и не фильтрует запросы из России, то плагин The Movie Database Python работает. Исправить DNS можно в файле /etc/resolv.conf (надо иметь ввиду, что этот файл может перезаписываться DHCP клиентом при перезагрузке системы). В апреле 2022 года DNS сервер 94.140.14.140 (это DNS сервер ADGuard) давал разрешать имя themoviedb.org в IP адрес для запросов из России.
NAS and Media server at Raspberry PI - 65
NAS and Media server at Raspberry PI - 66
NAS and Media server at Raspberry PI - 67
NAS and Media server at Raspberry PI - 68

Проверка медиацентра на телефоне

Чтобы пользоваться медиацентром с телефона, нужно установить на телефон проигрыватель, который поддерживает DNLA потоки, например VLC for Android.

В приложении VLC на вкладке Обзор --> Локальная сеть должен отображаться медиасервер под именем Kodi (raspi-nas).

NAS and Media server at Raspberry PI - 60

NAS and Media server at Raspberry PI - 61

Полезные команды

Архитектура процессора

Команда:

arch

В ответ команда выдает:

armv7l

Напряжение на процессоре

Команда:

vcgencmd pm_get_status

В ответ команда выдает:

core=233333344 free=222914004 voltage=1.2v

Температура процессора

Команда:

vcgencmd measure_temp

В ответ команда выдает:

temp=60.3'C

Информация о процессоре

Команда

cat /proc/cpuinfo

В ответ команда выдает:

processor       : 0
model name      : ARMv7 Processor rev 3 (v7l)
BogoMIPS        : 270.00
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xd08
CPU revision    : 3

Hardware        : BCM2711
Revision        : c03111
Serial          : 10000000b4640fcc
Model           : Raspberry Pi 4 Model B Rev 1.1

Информация о памяти

Команда:

free -m

В ответ команда выдает:

                   total        used        free      shared  buff/cache   available
    Mem:            3837          62        2755           0        1020        3629
    Swap:             99           0          99

Здесь по строчке  Mem Total: 3837 можно понять, что я использую плату с 4 ГБ оперативной памяти.

IP-адрес компьютера

Команда:

hostname -I

В ответ команда выдает:

192.168.0.17

Очистка пакетов и кеша установки пакетов

Если что-то пошло не так, то можно удалить неиспользуемые пакеты и очистить кеш пакетов

sudo apt-get autoremove
sudo apt-get clean