Собственно, это не совсем сервер, просто несколько внешних дисков, подключенные к Raspberry Pi через USB-HUB. Дело в том, что у меня скопилось порядочное количество архивов - семейные фотографии в RAW, рабочие архивы, коллекция любимых и не очень фильмов с правильным переводом... Ну и так далее.

Хранить все это на компьютере нецелесообразно, да и опасно, в некоторой степени. Диски же крутятся все время, вырабатывая свой ресурс, даже если к ним не обращаются. Поэтому было принято вынести их отдельно, заодно поиграться со свежеприобретенной платой Raspberry.

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

Содержание


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

Железо
Программная часть
   Установка Openmediavault
      Вариант 1
      Вариант 2
      1. Установка системы на Raspberry
      2. Установка Openmediavault
   Настройка Openmediavault
      1. Общие настройки
      2. Расшаривание папок
      3. Ошибка доступа в Windows
   Docker и Portainer. Установка и настройка
   Установка Transmission
Заключение

Железо


Итак, мой сервер состоит из собственно, Raspberry Pi 4 B+ с 4Гб памяти, USB 3.0 хаба, гигабитного свитча и нескольких внешних дисков. Еще имеется роутер Zyxel Keenetic какой-то древней ревизии. Он занимается добыванием интернета, посредством USB-модема и распространением его в моей домашней сети. Схему подключения можно увидеть на картинке:

Как видно, один диск подключен напрямую к малине. Это сделано, потому что он 2.5" и не имеет внешнего питания, а хаб с ним не справляется. Кроме того, этот диск используется для промежуочных операций, поэтому он должен работать быстрее. Я искренне верю, что без хаба он работает быстрее :)

Программная часть


Как я уже упоминал, сервер работает под управлением Openmediavault 5.5. В него встроен Docker и интерфейс управления им - Portainer. В Docker'е мной установлен торрент-клиент Transmission и веб-сервер Nginx (зачем-то). Я не очень понимаю, как работает Docker. Вроде он умеет запускать приложения, каждое в своем контейнере и они друг другу не мешают. А он (Docker) занимается распределение ресурсов между ними. Как-то так.

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

Установка Openmediavault

Вариант 1

Здесь должно было быть написано про то, как скачать с сайта openmediavault.org готовый образ системы для Raspberry с установленным Openmediavault, но случилось так, что этот вариант больше не работает, вот по этой причине, поэтому переходим сразу к варианту 2.

Вариант 2

Собственно, это будет вольным пересказом вот этого документа, который является официальной инструкцией по установке Openmediavault 5.5 на ARM-устройства. Если вы хорошо знаете английский язык, можете прочитать все там. Если нет - едем дальше.

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

Для того, чтобы установить систему на Raspberry, понадобится карта памяти MicroSD. Рекомендуется не менее 8 Гб, но лучше больше, так как вы захотите туда установить дополнительные приложения. Моя, к слову, 32Гб. Поставил и забыл.

Итак, скачиваем образ системы по этой ссылке. Нужно пролистать до заголовка "Raspberry Pi OS" и выбрать "Raspberry Pi OS Lite". Это Debian в минимальной комплектации. Там нет графической оболочки и дополнительного софта. В принципе, можно установить любой из трех вариантов, представленных на той странице, но если вы не планируете подключать к Raspberry монитор и клавиатуру с мышью - смысла в них нет.

Если все скачалось удачно, можно развернуть образ системы на MicroSD карту. В официальной инструкции настоятельно рекомендуется проверить контрольную сумму файла, чтобы подтвердить его целостность, но я этого не делал, понадеявшись... на русское авось, наверное.

Чтобы развернуть образ, понадобится программа Raspberry Pi Imager. Вставляем карту памяти в кардридер, кардридер вставляем в USB порт и запускаем "Raspberry Pi Imager". Там всего три кнопки - ошибиться невозможно

Нажимаем "Choose OS", листаем вниз до пункта "Use custom" и выбираем на диске наш свежескачанный образ.

Затем нужно выбрать диск назначения и "WRITE". После записи и верификации, ваша карта памяти готова к переезду в . Но перед этим нужно сделать одну важную вещь. Откройте карту памяти со свежезаписанным образом в проводнике и создайте в корне пустой файл с именем "ssh". Просто имя, без расширения. Это включит протокол SSH, ведь по-другому вы общаться с малиной не сможете.

Вставляем карту памяти в слот Raspberry, подключаем сетевой кабель и питание. Через несколько минут система запустится и можно будет подключиться к Raspberry по протоколу SSH. Но прежде всего нужно узнать ее IP-адрес. Для этого нужно зайти в интерфейс роутера и посмотреть на новые устройства, появившиеся в сети.

Как видно, в моей сети малине дали адрес 192.168.1.44. Имя "PI4" я назначил уже сам и закрепил постоянный IP за этим устройством. Дело в том, что выдачей адресов у меня там командует DHCP, так что если оставить, как есть, в следующий раз адрес может смениться - поди ищи его потом.

Отлично, адрес мы нашли, теперь нужно подключиться к командной строке Linux. Сделать это рекомендуется про помощи Putty - это бесплатный SSH и Telnet клиент, но у меня свой путь. Я нашел программу Bitvise SSH Client, которая мне нравится больше. Выглядит она вот так:

На скриншоте уже введены IP-адрес и логин с паролем. Сделайте так-же. Логин и пароль по умолчанию будут:

pi
raspberry

И нажимаем кнопку "Log in". Программа при первом подключении выведет окошко с предупреждением:

Нажимаем кнопку "Accept and Save" и видим такую картину:

Теперь сюда можно вводить команды. И первой командой будет обновление ПО Raspberry. Вернее, это будут три команды:

sudo apt-get update 

sudo apt-get upgrade -y 

sudo rm -f /etc/systemd/network/99-default.link 

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

Итак, после первой команды вы получите что-то такое:

После второй - такое:

А третья команда просто удаляет какую-то ссылку, видимо, ненужную. Ну вот и все, система установлена, обновлена и готова к установке Openmediavault.

Перед этим нужно выполнить еще одну команду:

sudo reboot now

Думаю, объяснения тут не требуются

2. Установка Openmediavault

Запускаем команду:

wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash

Ждем. Команда эта - ссылка на скрипт, который все загрузит и установит. По времени это может занять до получаса. В это время не закрывайте окно терминала, иначе все сломается. В конце установки Raspberry перезагрузится автоматически.

Вот и все. Openmediavault установлен и готов к работе.

Настройка Openmediavault

Открываем браузер и вводим IP-адрес, по которому у нас находится Raspberry в сети. И сразу попадаем в веб-интерфейс Openmediavault.

Логин/пароль по умолчанию:

admin
openmediavault

После загрузки нас встречает такой экран:

Интерфейс тут несложный, можно прогуляться по ссылкам слева, думаю, многое станет понятно.

1. Общие настройки

Для начала зайдем в настройки ("General Settings"):

Лично мне здесь интересен пункт "Auto logout". Я сделал его "Disabled", чтобы меня не выкидывало из системы каждые 5 минут. Далее, на этой же странице можно переключиться на вкладку "Web Administrator Password" и поменять пароль.

Не забывайте каждый раз нажимать кнопку "Save". Особенно, когда вверху страницы появляется такая желтая плашка.

Теперь выбираем ссылку ("Network"). Тут нас интересует две вкладки. Первая, она уже открыта "General", тут можно поменять "Hostname".

Это имя будет появляться в сетевом окружении. Вторая вкладка "Interfaces". Тут находятся сетевые интерфейсы, которые используются в текущий момент.

Тут можно изменить имеющиеся или добавить/удалить новые сетевые интерфейсы, например, WiFi. У меня подключен проводной интерфейс, пусть так и остается.

2. Расшаривание папок

Теперь посмотрим наши подключенные диски. Если вы их подключили, конечно. Слева нажмите ссылку "Disks". Мои диски выглядят вот так:

Далее, выберите слева ссылку "File Systems", чтобы проверить, все ли доступные диски смонтированы в системе:

Из моих смонтирован оказался только один. Ну ладно, вообще ни одного, этот я сам смонтировал вручную, только что. Чтобы смонтировать файловую систему, нужно выбрать ее в списке и нажать кнопку "Mount". Потом обязательно сохранить настройки. И так повторить со всеми несмонтированными файловыми системами.

А теперь самое время расшарить пару папок, чтобы их было видно в сети. Для этого слева переходим на страницу "Shared Folders"

Нажимаем "+ Add" и появляется такое окно:

Поля там конечно будут пустые, вам их нужно заполнить. В поле "Name" пишем название, которое появится в списке сетевых папок в вашем проводнике, в поле "Device" выбираем файловую систему, на которой нужно расшарить папку, в поле "Path" выбираем нужную папку. И все. "Permissions" оставляем по-умолчанию, в комментарии пишем комментарии. Или не пишем. В конце нажимаем "Save". Так же сохраняем общую конфигурацию. Желтая плашка с ней появится чуть позже.

Повторяем то-же самое для остальных папок, которые нужно расшарить. В итоге получится как-то так:

Несмотря на то, что мы расшарили папки, в проводнике мы их пока не увидим. Дело в том, что система Linux способна расшарить папки вовне только при помощи протокола Samba, который нам еще предстоит включить и настроить. Для этого слева выбираем ссылку "SMB/CIFS" и попадаем на страницу настройки протокола SMB.

В разделе "General Settings" Жмем на "Enable", сохраняем. Потом еще раз сохраняем и переходим во вкладку "Shares".
Тут снова Нажимаем "+ Add" и появляется такое окно:

Тут параметров значительно больше, но нам нужно только несколько. В поле "Shared folder" выбираем одну из расшаренных ранее папок, в поле "Public" выбираем "Only Guests", чтобы папка была видна всем.
Еще можно запретить запись/удаление для папки, установив параметр "Read only". Ну и все. Нажимаем "Save", затем "Apply" и все. Первая папка расшарена. Можно открыть проводник и проверить.

3. Ошибка доступа в Windows

Если же папку открыть не удалось и вообще видно только сетевое имя, а открыть его нельзя - появляется ошибка, значит вы все сделали неправильно вы являетесь счастливым обладателем Windows 10, какой-то там версии, с которой Microsoft ужесточил правила безопасности при пользовании сетевыми ресурсами. Короче, анонимныый доступ к ресурсам сети запрещен на уровне системы.

В этом случае нужно создать пользователя специально для доступа к расшаренным папкам и выдать ему соответствующие полномочия.
Для этого слева переходим на страницу "User" и видим там одного единственного пользователя "pi", который является администратором системы. Использовать его пароль в Windows мне не удалось по какой-то причине, поэтому просто создадим нового.

Нажимаем "+ Add", вводим имя, например "guest" и такой-же пароль. Сохраняем все, что можно и переходим на страницу "Shared folders". Выделяем нужную папку и нажимаем кнопку "Privileges".

Открывается окно с привилегиями для данной папки. Там ставим галку напротив пользователя "guest", разрешая ему что-то делать с этой папкой и сохраняем все.

Опять переходим на страницу "SMB/CIFS", переходим на вкладку "Shares" и дважды щелкаем на папке, которую нужно расшарить.

В поле "Public" ставим значение "No" и сохраняем все. Пробуем открыть в проводнике и все работает. Только сначала нужно ввести логин и пароль пользователя "guest".

После этого папка доступна.

Итак, мы только что расшарили папку и дали ей возможность открываться в Windows 10. Получилось весьма сумбурно, поэтому изложу еще раз, вкратце:

  1. Создаем пользователя guest
  2. Расшариваем папку в "Shared folders"
  3. Тут-же задаем ей привилегии. Кнопка "Privileges", галка на пользователе "guest"
  4. Создаем шару в "SMB/CIFS", в поле "Public" ставим "No"
  5. Открываем шару в Windows Explorer, вводим guest/guest
  6. Радуемся.

Docker и Portainer. Установка и настройка

Docker служит для установки сторонних приложений и запуска их в изолированной среде, так называемых "контейнерах". Но сначала его самого нужно установить. Делается это нажатием одной кнопки в интерфейсе Openmediavault.

Слева выбираем "OMV-Extras" и на открывшейся странице переходим во вкладку "Docker". Там нажимаем на кнопку "Docker" и выбираем в выпадающем списке "+ Install".

Во всплывающем окне будет показан процесс установки. Как только он завершится, это окно можно закрыть.

Теперь установим Portainer. Для этого нужно сделать почти то-же самое, только нажать другую кнопку:

После установки закрываем всплывающее окно и нажимаем соседнюю кнопку "Open Portainer". Приветственный экран Portainer откроется в новой вкладке.

Тут нужно установить пароль и изменить имя, если нужно. После этого нажимаем кнопку "Create user" и попадаем в главное окно Portainer. Интерфейс очень напоминает Openmediavault. Те же ссылки слева, открывающие окна справа.

У меня при первом запуске не работало добавление приложений, Portainer выдавал ошибку, что дескать не настроен "Endpoint", однако при втором подключении я получил вот такой экран:

Знающие люди из Гугла подсказали, что выбирать нужно кнопку Docker, для того, чтобы он работал локально. В общем, в итоге все заработало.

Я уже упоминал ранее, что я не очень понимаю, как это работает. Просто я поставил себе задачу и решил ее. Система вполне работоспособна, хоть и требует доработок. А вы, если хотите узнать больше о работе с Docker, лучше воспользуйтесь специализированными ресурсами.

Тем не менее, напоследок расскажу, как установить и настроить приложение в Docker. Вернее, получится сперва настроить, а потом установить, потому что там это происходит именно так.

Установка Transmission

Большинство нужных приложений можно найти на hub.docker.com. Transmission я взял там-же, как и инструкцию по установке. Мы будем устанавливать Transmission через Stacks, потому что так проще.

Итак, открываем Portainer и приступаем. Выберите слева "Stacks" и откроется такая страница:

Нажимаем синюю кнопку "+ Add stack" и идем на hub.docker.com за Transmission. Листаем вниз, до заголовка "docker-compose". Отсюда нам нужно взять текст:

---
version: "2.1"
services:
  transmission:
    image: ghcr.io/linuxserver/transmission
    container_name: transmission
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/London
      - TRANSMISSION_WEB_HOME=/combustion-release/ #optional
      - USER=username #optional
      - PASS=password #optional
      - WHITELIST=iplist #optional
    volumes:
      - <path to data>:/config
      - <path to downloads>:/downloads
      - <path to watch folder>:/watch
    ports:
      - 9091:9091
      - 51413:51413
      - 51413:51413/udp
    restart: unless-stopped

И поправить его под свою конфигурацию. Собственно, это и есть настройка. Итак, нас тут интересует: "PUID/PGID", "TZ", "USER/PASS" и рабочие папки программы.

PUID/PGID - это идентификатор пользователя. Узнать его можно командой "id" в терминале. В ответ получите список идентификаторов:

Нас тут интересует "uid" и "gid", они равны 1000, а значит ничего менять не придется. Далее TZ - это Time Zone. Пишем часовой пояс, в котором мы находимся. Я написал "Europe/Samara". С логином-паролем все понятно, только пишите его тут безо всяких кавычек. Если система локальная и контроль доступа не нужен, можно оставить просто пустое место.

Рабочие папки нужно создать на рабочем диске, очень желательно не на том, где стоит система. Для этого возвращаемся в Openmediavault и создаем расшаренную папку. Ну как, создаем. Нажимаем "Добавить", вводим имя, выбираем диск и вводим путь. Если такого пути нет, система его создаст.

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

И тогда мы его увидим. Самое интересное начинается сейчас. Я нашел решение у одного товарища на ютубе. Проблема в том, что путь слишком длинный для набора вручную и максимально неудобен для запоминания, а скопировать текст в этих полях нельзя. Открываем инспектор кода. В Google Chrome это "Ctrl + Shift + C", тыкаем на абсолютный путь и получаем его в виде кода документа:

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

---
version: "2.1"
services:
  transmission:
    image: ghcr.io/linuxserver/transmission
    container_name: transmission
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Samara
      - TRANSMISSION_WEB_HOME=/combustion-release/ #optional
      - USER=
      - PASS=
      - WHITELIST=
    volumes:
      - /srv/dev-disk-by-uuid-D0B29CC0B29CAD0A/tmp/transmission_config:/config
      - /srv/dev-disk-by-uuid-D0B29CC0B29CAD0A/tmp/transmission_downloads:/downloads
      - /srv/dev-disk-by-uuid-D0B29CC0B29CAD0A/tmp/transmission_watch:/watch
    ports:
      - 9091:9091
      - 51413:51413
      - 51413:51413/udp
    restart: unless-stopped

Хочу обратить внимание на три параметра, которые могут повлиять на доступность Web-интерфейса. Это "USER", "PASS" и "WHITELIST". Их нужно оставить пустыми.

Кажется все готово. Возвращаемся в Portainer. Там должна быть открыта страница добавления нового стека. Пишем его название в поле "Name". Можно назвать просто "transmission" и вставляем содержимое нашего конфига в редактор ниже. Целиком, включая три верхних тире:

И в самом низу страницы нажимаем кнопку "Deploy the stack", несколько минут ждем, пока все загрузится и вуаля!

Открываем новую вкладку в браузере и вводим адрес малины с портом 9091. В моем случае это будет 192.168.1.44:9091

Дальше, я думаю, понятно, что делать. Можно нажать "+" и загрузить торрент-файл, а можно его просто скопировать в папку "watch" и программа загрузит его автоматически.

Заключение

Итак, у меня теперь есть хранилище файлов, не привязанное к компьютеру. Бонусом имеется торрентокачалка и целый hub.docker.com для установки других нужных приложений.

Следующая запись

Добавить комментарий

Комментарии

Попробовал все воспроизвести в докере на openmediavault 6, в итоге получаю ошибку: Deployment error failed to deploy a stack: Network transmission_default Creating Network transmission_default Error failed to create network transmission_default: Error response from daemon: Failed to program FILTER chain: iptables failed: iptables --wait -I FORWARD -o br-42a6aaf68984 -j DOCKER: iptables v1.8.7 (nf_tables): RULE_INSERT failed (Invalid argument): rule in chain FORWARD (exit status 4) С докером ранее не работал.
Написан в Wed, 22 Feb 2023 22:56:05 от Виталий
Довольно интересная статья, спасибо за информацию.
Написан в Mon, 14 Nov 2022 05:50:31 от Andrei
Спасибо за гайд, земляк. Поставил на Raspberry 3B, буду тестить
Написан в Wed, 22 Jun 2022 08:26:39 от Денис
Спасибо за гайд, земляк. Поставил на Raspberry 3B, буду тестить
Написан в Wed, 22 Jun 2022 08:14:31 от Денис