Домашний сервер на Ubuntu 22.04 LTS. Часть 1: покупка, настройка, старт

a hard drive being removed from a hard drive
Photo by Andrey Matveev on Unsplash

Привет. Вообще, я не хотел писать пост об этом сюда, потому что в сети уже навалом такого добра, повторяться не хочется. Да и в моём канале уже есть некоторые выкладки по хештегу #околоNAS. Там, скорее, поток мыслей и прикидки как бы сделать дома сервачок.

Но пока разбирался с сабжем, подумал — да чё нет-то? Возьму и запилю посты в блоге, с нормальной конкретикой. Я же пишу о том, как сам решаю свои проблемы, вот и будет кому-то ещё пища для размышлений. И себе будущему, чтобы не забыть.

Зачин, как я люблю, небольшой предысторией.

Я давно возжелал домой какой-нибудь сервачок. В сущности, варианта было два: Synology DS220+ или самосборка с авиты. Оба подхода валидны и жизнеспособны, однако мне хотелось гибкости, юзер-френдливости, кастомизируемости, да подешевше и чтоб компактно. Это, знаешь ли, сложно совместить.

Дома валялся еле живой ноутбук HP Pavilion G6, прикинул палец к носу, погонял думы… Однако, долго ли, коротко ли, купил я себе б/у системник Dexp Aquilon O111.

Фото из объявления. В общем, таким я его и взял, без подставки, которая шла с завода. Верхняя съёмная решётка открывает доступ к БП (вентиляция, выключатель, вилка).

Привалило мне это счастье за 3500р (три тысячи пятьсот российских рублей). «Пфффф», скажешь ты? А вот какие ТТХ я получил:

  • Материнская плата Biostar J2900NH3 ver 6.0 (по ссылке мамка-родственница с другим ЦП):
    • Intel Celeron J2900 (распаян, маленьк, пассивен охлаждением, ест 10 Вт, не атом);
    • HDMI x1 + DE15Hd x1;
    • USB3.2 x1 + USB2.0 x4 (взаду) + USB2.0 x2 (вперде);
    • 2 канала DDR3 SO-DIMM 1333 МГц (до 16 ГБ);
    • Realtek RTL8111G 1 Гб/с x1;
    • Mini PCI-E 2.0 x1;
    • SATAII x2;
  • WD Blue 500 ГБ (2012 года сборки с безупречным SMARTом);
  • ОЗУ Kingston KVR16LS11/4 DDR3 4 ГБ x1;
  • БП FinePower DNP-350 300Вт;
  • DVD-RW привод.

Не топ, но достаточно убедительно, не так ли? Комп был списан какой-то организацией. На нём стоял Debian 9 с забытым root-паролем и, как выяснилось, с поломанным lightdm. Комп списали, он попал в руки какому-то пареньку, который по сабжу ни в зуб ногой и поэтому так сильно скинул ценник. Хотя комп по железу на 100% рабоч.

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

Символично, что произошло это 31 марта 2023 — во Всемирный день бекапа.

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

Общая подкапотка

Шлейфы SATA были заменены на адекватные. Шумный ноунемовый дерьмокулер, который стоял на потолке корпуса, заменён на подшипниковый светящийся Zalman. Всё из загашников.

Термопаста на ЦП, разумеется, оказалась высохшей. Отшкарябал, поменял. Радиатор на пластиковых (целых) подпружиненных ножках, поэтому много времени это не заняло.

БП шумит как самолёт. Надо его либо менять целиком (на потише и может даже послабее, а то 300 Вт тут ни к чему), либо чё-т придумывать с кулером. Я его уже разбирал для чистки, но, понятное дело, это не(сильно) помогло.

Накопители

Это самое важное, ради чего всё затевалось. У меня есть разные винчестеры, и исторические архивы были неравномерно по ним размазаны. Корзина в этом системнике устроена так, что в неё можно поставить ноутбучный дивидюк с панелькой, 1 винт на 3.5″ и 1 винт на 2.5″. Плюс ещё 1 винт на 2.5″ можно прикрутить к полу корпуса.

После долгих перезаливов всего отовсюду вовсюду, получился такой конфиг:

  • Seagate ST1000LM024 1 ТБ 2.5″ — для данных (старенький, но бодрый);
  • Toshiba MK3265GS 320 ГБ 2.5″ — для ОС (из упомянутого в начале ноута; у него даже нет SMART, настолько он стар).

Вот и заняты все саты на мамке винтами на 5400 rpm. А вот желаемый конфиг:

  • 1x SSD <= 240 ГБ — для ОС (на TLC чипах);
  • 2x HDD >= 2 ТБ — для данных и их копии (7200 rpm).

Уже заказана карта расширения PCI-E ещё на две саты. В итоге их будет 4 и я даже зачем-то смогу подключить дивидюк. Он, разумеется, сейчас отключен, но стоит на месте просто как затычка с панелькой (не оставлять же дыру на морде). То есть, он в любом случае останется на месте, вопрос только в необходимости подключения.

Типоразмер HDD для данных ещё буду подбирать. Например, системный SSD можно приклеить на днище, а маленькие HDD прикрутить в штатные места. Посмотрю.

Можно даже вместо дивидюка поставить ещё один SSD (такой же, как первый) и поставить оба в RAID1, чтобы не пролюбить ОСь. Но это вообще опционально, в случае чего мне не составит труда накатить всё с нуля.

Про RAID

Ну, и, раз уже заикнулся, сразу вынесу в подзаголовок и эту важную тему.

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

Основные данные уже собраны вместе, но остальное всё ещё размазано по винтам. Я же хочу всё в одну резервируемую кучу на сервере.

Моя задача — сохранение инфы любой ценой. А рейды, в первую очередь, всё же не про бекапинг, а аппаратную отказоустойчивость. Это кроличья нора и другой уровень заморочек.

Возможно, вместо этого решусь на выгрузку в «ледяной» S3-бакет в Ya.Cloud, опыт с ним у меня уже есть. Если по-нормальному, то бекапы должны быть распределены на независимых хранилищах (а что если оба винта сдохнут?).

Я уже писал пост о том, как работать с S3-хранилищем Yandex.Cloud для резервирования данных:

Остальные железяки

Решил для себя так. Трогать остальное железо и корпус пока не хочу. Надо выжать максимум из имеющегося. Например, можно было бы найти более подходящий microITX-корпус с нормальной корзиной, и мать туда вроде ляжет, но всё же не в этом году.

А вот ОЗУ надо хотя бы удвоить: текущих 4 ГБ пока хватает, но глобально это ничтожно мало. Хочу 16 ГБ (это максимум, который вывозит мамка), но и 8 до поры сойдёт.

Периферия

Была закуплена некоторая мелочь, чтобы хоть как-то настраивать сервак.

🖱 Мышь — Aceline WM-902GU. Простой беспроводной пластиковый грызун. 🪙 350 ₽

⌨️ Клава — Dexp KW-1206BU. Низкопрофильная, без выключателя, без F11F12, без физического цифроблока, с USB-приёмником и очень приятными клавишами. Сидеть на диване перед теликом вполне сгодится. Хочу всё же тонкую микроклаву с тачпадом, но в наличии нигде не было. 🪙 950 ₽

📶 Wi-Fi — Dexp WFA-601. USB-фигулина с антенной, ловит отлично. По драйверам на убунте без особых проблем. 🪙 799 ₽

О том, как я подключал этот wi-fi адаптер, читай здесь:

Сеть

В моём случае, домашней сетью управляет D-Link DIR-615A. Простой как дверь, за годы ни единого нарекания.

Все девайсы получают от него адрес по DHCP, подключаясь по воздуху (на витухе только мой комп). Серверу же я выделил конкретный IP-шник. Всё, тут мне больше нечего сказать.

Софт

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

Зиждится всё на десктопной Ubuntu MATE 22.04 LTS. Она вполне справляется со всем необходимым.

Матэ как гуйня весьма нетребовательна, привычна и проста. Да, местами она глюкавая, но здесь экспериментировать с ней не собираюсь, пусть работает по дефолту. Всё в порядке.

И да, я видел и хренолоджи, и openmediavault, и сигму! Долго думать не стал, вежливо послал их в пекло и просто взял всё, что гарантированно стабильно работает, на что я не буду жаловаться и смогу контроллировать в нужной мере. Да и какие проблемы могут быть под убунтой на железе из начала десятых?

SSH

Разумеется, без него никуда. Хотя комп стоит на вытянутой руке и подключён к настенному ТВ, а клава/мышь беспроводны, доступ к нему из терминала должен быть в любом случае: так можно настраивать софт, пока кто-нибудь залипает в экран.

Ставится буквально в одну команду:

$ sudo apt install -y openssh-server

Всё, можно подключаться. Да. Ну, можно пошаманить с настройками по желанию и необходимости, я же забил болт.

Теперь у меня дома два смартфона и два компа могут подключаться друг к другу по SSH. Почитай как я это сделал:

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

Samba

Эта штука понадобится, чтобы шарить папки в сеть, да так, чтобы с ними могла работать виндось. (Да, у меня дома ещё один ноутбук.)

Здесь всё несложно:

$ sudo apt install -y samba

Но перед дальнейшими шагами нужно было научить ОСь монтировать винчестер автоматически при старте, чтобы не приходилось делать это ручками. Для этого я воспользовался утилитой gnome-disks. Можно и без, но так проще и быстрее.

После запуска утилиты я:

  1. встал слева на нужный винт;
  2. справа в меню раздела выбрал “Edit Mount Options…”
  1. переопределил настройки примерно следующим образом (скриншот с другого компа, но суть та же):

По нажатию на OK будет запрошен root-пароль и в /etc/fstab появится такая запись:

$ tail -n 1 /etc/fstab
/dev/disk/by-uuid/c0fdb886-71fa-44ed-8347-0fc982258f71 /mnt/Seagate1TB2.5 auto nosuid,nodev,nofail,x-gvfs-show,x-gvfs-name=Seagate1TB2.5 0 0

У тебя будет другая, эту копипастить себе не надо! Я привёл её для примера.

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

$ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
$ sudo bash -c 'grep -v -E "^#|^;" /etc/samba/smb.conf.bak | grep . > /etc/samba/smb.conf'
$ sudo nano /etc/samba/smb.conf

И добавил в конец этого файла следующее:

; AAA ========================
[family]
    comment = Seagate 1TB 2.5
    path = /mnt/Seagate1TB2.5
    read only = no
    public = yes
    writeable = yes
    guest ok = yes
    valid users = user
    create mask = 0644
    directory mask = 0755

Суть проста. Указали какую директорию шарить, задали права чтения/записи и пользователя, которому будет доступно удовольствие.

При доступе по паролю, юзер ОС должен совпадать с юзером самбы и находиться в группе sambashare. Для этого я выполнил

$ sudo usermod -aG sambashare user
$ sudo smbpassword -a user

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

Включаем автозапуск службы, перезапускаем её и проверяем подключение чем угодно:

$ sudo systemctl enable --now smbd
$ sudo systemctl restart smbd

Если ты решишь гонять большие объёмы данных по самбе — погоди. Я попробовал ради эксперимента отправить на сервер папку с фильмами — ушло около 6 суток, с обрывами и перезаливами. Гора больших файлов с hdd на hdd по сети — ну чего ещё тут ожидать?

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

MiniDLNA

Эта штука понадобится нам для раздачи того же самого контента, но, скажем так, не через подключение к диску сервера, а через подключение к серверу как к медиастанции. То есть сервак будет показывать какая мультимедиа у него есть для плеера (клиента), а тот запускать воспроизведение (слушать аудио, смотреть синематограф, смотреть пикчи), с перемотками и прочими прелестями, будто всё лежит на его компе. Например, буквально сейчас я пишу этот текст и слушаю Nickelback потоком с сервера через VLC.

Ставлю minidlna и открываю конфиг на правку:

$ sudo apt install -y minidlna
$ sudo nano /etc/minidlna.conf

Далее в нём:

# ...
media_dir=A,/mnt/Seagate1TB2.5/Музыка
media_dir=V,/mnt/Seagate1TB2.5/Фильмы
media_dir=PV,/mnt/Seagate1TB2.5/Фото
merge_media_dirs=yes
db_dir=/var/cache/minidlna
log_dir=/var/log/minidlna
friendly_name=Axenov DLNA
inotify=yes
# остальное оставляю как есть

В параметрах media_dir, буква A значит аудио, V — видео и P — пикчи. Их можно комбинировать для одной директории.

Если для самбы у нас тот же юзер, что в ОС, и с правами сильно париться не надо было, то тут надо сделать ещё один шаг. ЕМНИП, директория для монтирования диска по дефолту имеет права 0700 (rwx------). Надо открыть доступ на чтение для всех. В моём случае:

$ sudo chmod a+rx /mnt/Seagate1TB2.5/

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

Но в параметре user конфига /etc/minidlna.conf можно указать другого юзера. Я не стал с этим корячиться, ты же можешь пойти этим путём.

Перезапускаем демона:

$ sudo systemctl restart minidlna

В идеале он сразу должен начать сканирование библиотеки, составляя свою БД с инфой о раздаваемых файлах. А поскольку в конфиге мы сказали inotify=yes, то демон будет также отслеживать изменения указанных директорий. То есть новые мультимедиа файлы будут синхронизироваться с базой данных minidlna и в реальном времени (не)доступны клиентам.

Прикольная фича софтинки в качестве бонуса: браузером открываем localhost:8200 (либо по IP сервера в локалке) и смотрим состояние библиотеки и список подключений.

Если происходит первоначальное сканирование (например, после очередного перезапуска демона), то перед списком подключений будет соотв. предупреждение.

Прочее ПО

Поскольку я не знаю, что мне понадобится сделать на этом серваке в очередной раз, я поставил ещё много чего, потенциально (бес)полезного. В списке ниже есть и такие пакеты, которые надо было бы упомянуть в начале поста, но, думаю, ты уже разобрался и часть из этого уже стоит:

$ sudo apt install -y \
    alien \
    apt-transport-https \
    build-essential \
    ca-certificates \
    cmake \
    curl \
    dialog \
    gettext \
    gparted \
    hardinfo \
    htop \
    libaio1 \
    libcurl4-gnutls-dev \
    libexpat1-dev \
    libghc-zlib-dev \
    libssl-dev \
    lsb-release \
    lsp-plugins \
    make \
    mc \
    nano \
    net-tools \
    nmap \
    p7zip-full \
    pulseeffects \
    software-properties-common \
    ubuntu-restricted-extras \
    unzip \
    vlc \
    ffmpeg \
    inotify-tools \
    notify-osd \
    libnotify-bin \
    gnome-software \
    gnome-software-plugin-flatpak \
    gnome-software-plugin-snap \
    terminator \
    geoclue-2.0 \
    redshift \
    redshift-gtk

Другие скрипты установки разного софта под Ubuntu можно найти в моём репозитории:

https://git.axenov.dev/anthony/my-env

Как ты знаешь, я всегда вытачиваю визуал в идеал, иначе работать за компом просто не могу. Меня вполне устраивает как реализована тёмная Yaru в матэ, поэтому мне осталось только поставить иконки:

$ sudo snap install icon-theme-papirus

и указать Papirus Dark в настройках темы.

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

wget "https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb" && \
    sudo dpkg -i google-chrome-stable_current_amd64.deb

В кедах я привык к виндовой комбинации Super+R для запуска krunner. На матэ я всегда использовал ulauncher для тех же целей:

sudo add-apt-repository -y ppa:agornostal/ulauncher && \
    sudo apt install -y --autoremove ulauncher

Syncthing всему голова. Применять его по назначению пока не приходится, с этим я поработаю, а вот ставится он как нефиг делать:

sudo curl -s -o /usr/share/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg && \
    echo "deb [signed-by=/usr/share/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list && \
    echo "deb [signed-by=/usr/share/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing candidate" | sudo tee /etc/apt/sources.list.d/syncthing.list && \
    sudo apt update && sudo apt install -y --autoremove syncthing && \
    wget "https://raw.githubusercontent.com/syncthing/syncthing/main/etc/linux-desktop/syncthing-start.desktop" -O $HOME/.local/share/applications/syncthing-start.desktop && \
    wget "https://raw.githubusercontent.com/syncthing/syncthing/main/etc/linux-desktop/syncthing-ui.desktop" -O $HOME/.local/share/applications/syncthing-ui.desktop && \
    ln -sf $HOME/.local/share/applications/syncthing-start.desktop $HOME/.config/autostart/syncthing-start.desktop

Docker, NextCloud, VPN, DNS и прочее такое я пока не поднимал. Решил не торопиться: что из этого необходимо пойму со временем, к тому же конфиг по винтам меня не устраивает и неокончателен. Когда построю что-то приемлемое, тогда и посмотрим.


Заключение

Наверное, ничего не забыл.

Вторая часть будет нескоро. Мне предстоит ещё многое доработать в этом системнике. По результатам сделаю ещё пост, в котором разложу по полочкам к чему я пришёл, что получилось, насколько это (не) успешно работает и разорило мою семью.

Использованные материалы

https://git.axenov.dev/anthony/my-env

https://selectel.ru/blog/tutorials/how-to-install-and-configure-samba-on-ubuntu-20-04/

https://linuxconfig.org/how-to-configure-samba-server-share-on-ubuntu-22-04-jammy-jellyfish-linux

https://phoenixnap.com/kb/ubuntu-samba

https://computingforgeeks.com/install-and-configure-samba-server-share-on-ubuntu/

https://linux.how2shout.com/how-to-install-samba-on-ubuntu-22-04-lts-jammy-linux/

https://itadept.ru/linux-dlna-server-minidlna/

https://mediadoma.com/nastrojka-minidlna-v-ubuntu

https://help.ubuntu.com/community/MiniDLNA

http://mediaunix.com/minidlna-na-ubuntu-server/

https://askubuntu.com/questions/164926/

https://developerinsider.co/auto-mount-drive-in-ubuntu-server-22-04-at-startup/

1 Комментарий

  1. Спасибо, примерно тоже самое хочу повторить, но ещё привязать DNS-320. Облако хочу

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *