Русский
Русский
English
Статистика
Реклама

Домашний медиа сервер minidlna

На кой черт это надо?

Так сложились обстоятельства, что мне удалось скоммуниздить старенький ПК, да и чтобы он просто непылился, так как такое старье продавать за 5-7 тысяч (цена в моем регионе за подобную конфигурацию) мне стыдно, а получать за него 3 тысячину такое. Ярешил, сделаюдома небольшую библиотеку фильмов, музыки, да и у жены очень много фотографий, которые её очень дороги. Задумка была следующей.

  • Некиймедиа сервер,который будет транслировать медиаконтент на телевизор.

  • Некое локальное хранилище для файлов, порой приходится с флешками побегать, а то жесткого диска на 500ГБ не хватает.

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

Целипоставлены, осталось их реализовать.Вряд лиопытные пользователи найдутздесьчто-то полезное для себя, наверное, тольконачинающиепользователи Linux, так как все действия очень простые в исполнении.

Установка Linux

То, как поставитьлинукс,я думаю, не стоит говорить. Я просто опишу что я сделал после установки.Во-первых, пока компьютер был возле меня, я настроил статический адрес в файле /etc/netplan/00-installer-config.yaml

# This is the network config written by 'subiquity'#ens34network:ethernets:ens34:addresses:- 192.168.31.5/24gateway4: 192.68.31.1nameservers:addresses: [192.168.31.1, 8.8.8.8]optional: trueversion: 2

Думаю, тут вроде понятно, что где что и как.Конечно,правильнее было быпривязатьip-адрес через роутер, но у меня роутер Xiaomi, и там все виероглифах... Я просто сделал статический ip-адрес на компьютере. После этого я его отнес в подвал и подключил к роутеру и сел за рабочую машину. Теперь стоит создать пару ssh-ключей для удобства

maks@Kubuntu:~/.ssh$ ssh-keygen -f ~/.ssh/homeGenerating public/private rsa key pair.Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/maks/.ssh/homeYour public key has been saved in /home/maks/.ssh/home.pubThe key fingerprint is:SHA256:i4rpsCZdQq5S+M2JyPWavEtCZqjsIJj2rHa69dzPgz0 maks@KubuntuThe key's randomart image is:+---[RSA 3072]----+|                 ||                 ||                 ||. .              ||.B      S        ||O.+..  . .       ||OX.O... +        ||X*@+Bo...E       ||**OO=o ..oo      |+----[SHA256]-----+maks@Kubuntu:~/.ssh$ 

Ну и отправил ключ на медиа сервер

$ ssh-copy-id -i ~/.ssh/home.pub maks@192.168.31.5/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/maks/.ssh/home.pub"/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed%sudo   ALL=(ALL:ALL) NOPASSWD:ALL/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keysmaks@192.168.31.5's password: Number of key(s) added: 1Now try logging into the machine, with:   "ssh 'maks@192.168.31.5'"and check to make sure that only the key(s) you wanted were added.

Теперь настрою файл ~/.ssh/config

Host home        HostName        192.168.31.5        User            maks        IdentityFile    /home/maks/.ssh/home

И теперь для подключения достаточно написать ssh home,и последний момент, которой наверное не стоит делать, это убрать ввод пароля при использовании sudo. Для этого достаточно добавить NOPASSWD в файл /etc/sudoerc что бы вышло так

%sudo   ALL=(ALL:ALL) NOPASSWD:ALL

Установка transmission-daemon

И так, начну с торрент-клиента transmiss-daemon.

$ sudo apt update && sudo apt upgrade -y && sudo apt install -y transmission-daemon

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

$ sudo systemctl stop transmission-daemon.service 

Если править файл конфигурации /etc/transmission-daemon/settings.json в тот момент как демон работает, изменения не сохранятся. И так мне надо поправить несколько строк, но для начала создам папки куда будет всекачаться. Я создам все папки для медиа контента в /media и будет /media/torrent/downloads для загружаемых файлов и /media/torrent/complete для файлов которые уже загрузились

$ mkdir -p /media/torrent/{downloads,complete}

сразу сменю владельца на папки для загрузки на debian-transmission

$ sudo chown -R debian-transmission:debian-transmission /media/torrent

Теперь можно приступать к настройке transmission. Как уже говорилось, все настройки хранятся в файле /etc/transmission-daemon/settings.json. Нам необходимо поправить несколько строк, а именно

  • "download-dir": "/var/lib/transmission-daemon/downloads"- указываем папку куда будутпомещатьсязагруженныефайлы, у меня в /media/torrent/complete Лучше указывать полный путь

  • "incomplete-dir": "/var/lib/transmission-daemon/Downloads"- указываем папку в которойбудут хранитьсяне докачавшиесяфайлы, у меня /media/torrent/downloads

  • "incomplete-dir-enabled": false- указываем true что бы хранитьскачавшиесяфайлы отдельно

  • "rpc-authentication-required": true - меняем на false для отключения авторизации по логину и паролю, это пожеланию

  • "rpc-host-whitelist-enabled": true- меняем на false для отключения использования "белого списка ip-адресов"

  • "rpc-password":"{a3edc70552a46d634e81ad9fabca6f51f9303197F8.No4L4"- указываем свой пароль для авторизации, если вы оставили авторизацию по паролю. Так же сразу хочу сказать, что после того как вы включите transmiss-daemon то пароль автоматическизашифруется

  • "rpc-username": "transmission"- указываем логин для авторизации

  • "rpc-whitelist-enabled": true-опять-такиотключаем авторизацию по разрешенным ip-адресам меняя true на false соответственно

Изапускtransmission

sudo systemctl start transmission-daemon.service

и захожу в web-панель transmission по ip-адресу и порту 9091, у меня это 192.168.31.5:9091

web-интерфейс transmissionweb-интерфейс transmission

transmission почти готов теперь настрою проксированиечерез NGINX

Установка NGINX и настройка проксирования

Я поставил весь nginx,нов теории достаточно и самого пакета nginx

sudo apt install -y nginx-full

После установкипроверю, работаетли веб сервер зайдя на ip-адрес машины

Приветственное сообщение от NginxПриветственное сообщение от Nginx

Теперь выполню настройку nginx. Всеконфигурационныефайлы находятся в /etc/nginx/*. Для начала я удалю все лишнее из файла /etc/nginx/nginx.conf и приведу его к такому виду

nginx.conf
user www-data;worker_processes auto;pid /run/nginx.pid;include /etc/nginx/modules-enabled/*.conf;events {        worker_connections 768;}http {        sendfile on;        tcp_nopush on;        types_hash_max_size 2048;        include /etc/nginx/mime.types;        default_type application/octet-stream;        access_log /var/log/nginx/access.log;        error_log /var/log/nginx/error.log;        include /etc/nginx/conf.d/*.conf;        include /etc/nginx/sites-enabled/home.conf;}

И создам файл /etc/nginx/sites-enabled/home.conf с базовым содержимым

home.conf
server {        listen 80;        root /var/www/home;        server_name home.ru;        location / {                index index.html;                try_files $uri $uri/ =404;        }}

Немногообъяснюфайл.listen80 указываем на каком порту будет слушаться сайт, root /var/wwww/home я создал папку от имени root и поместил туда простую страницу html взятую из интернетадляпроверки как будет все работать.

html страница скачанная из интернетаhtml страница скачанная из интернета

Так же я добавил строку 192.168.31.5 home.ru в рабочей машине в файл /etc/hosts для того что бы сайт моготкрыватьсяв браузере с рабочей машины по адресу home.ru что и указал в файле home.conf server_name home.ru

Настройка проксирования transmission-daemon черезnginx

NGINXвообще мощная фигня, и для того что бы открывать web-панель transmisson через http://home.ru/transmission/ его будет более чем достаточно. Все правки я буду делать в файле /etc/nginx/sites-enabled/home.conf для начала добавлю новый location и в нём укажу что бы онпроксировалзапрос с home.ru/transmission/ на 127.0.0.1:9091

блок location для transmission
        location /transmission/ {                proxy_pass http://localhost:9091 ;        }
transmission-daemon просит X-Transmission-Session-Idtransmission-daemon просит X-Transmission-Session-Id

Перенаправление пошло, но вот только transmission жалуется на отсутствие хедера X-Transmission-Id. Немного поковырявши хедеры, так же добавив 2 блока location мне удалось завести transmission. Вот полный файл конфигурации

полный файл home.conf
server {        listen 80;        root /var/www/home;        server_name home.ru;        location / {                index index.html;                try_files $uri $uri/ =404;        }        location /transmission/ {                proxy_read_timeout 300;                proxy_pass_header  X-Transmission-Session-Id;                proxy_set_header   X-Forwarded-Host $host;                proxy_set_header   X-Forwarded-Server $host;                proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;                proxy_pass         http://127.0.0.1:9091/transmission/web/;        }        location /rpc {                proxy_pass         http://127.0.0.1:9091/transmission/rpc;        }               location /upload {                proxy_pass         http://127.0.0.1:9091/transmission/upload;        }}
transmission заработалtransmission заработал

Написание скрипта

Так сложилось, что у меня телевизор Samsun толком не воспроизводит видео в формате avi, а если и воспроизводитто как то криво. Нельзя перемотать, длительность фильма такаячто люди стока не живут, да и самое неприятное заключается в том что посреди фильма он можетпростооборваться. А вот формат mkv он ест нормально. И поэтому я решил написатьнебольшойскрипт на bash который будет запускать сам transmission-daemon после загрузки файла. Немного подумав над логикой и посмотрев как качаются разные файлы, выстроил себе цепочку действий.Во-первыхнадо понять,скачаласьпапка или файл. Если папка, тосоздатьтакую жепапку в директории для DNLA сервера, если файл, то пропускаем. Возвращаемся к папке, теперь смотрим на содержимое папки, если файлы avi то конвертируем их через ffmpeg в конечную папку, если в папке файлы mkv то просто перемещаю их, но если там то-то другое, просто кидаю в /tmp для дальнейшего анализа. Теперь возвращаемся к началу скрипта, если же это непапка, афайл то, смотрим на формат и при необходимости конвертируем. Вроде ничего сложного, вот сам скрипт

скрипт download.sh
#!/bin/bashCOMPLETE="путь_к_конечным_файлам"CHAT_ID="сюда_чат_айди"TELEGRAM_BOT="сюда_айди_телеграм_бота"#Функция для обработки папкиdir () {        #Создаю папку для медиасервера        mkdir $COMPLETE/$TR_TORRENT_NAME        #Прохожу по всем файлам в папке        for movie in $(ls $TR_TORRENT_DIR/$TR_TORRENT_NAME)        do                #Если фильм ави                if [[ $movie == *avi ]]; then                        #Конвертирую его в mkv                        ffmpeg -i $TR_TORRENT_DIR/$TR_TORRENT_NAME/$movie $COMPLETE/$TR_TORRENT_NAME/$movie.mkv                #Если фильм mkv                elif [[ $movie == *mkv ]]; then                        #Перемещаю фильм в конечную папку                        mv $TR_TORRENT_DIR/$TR_TORRENT_NAME/$movie $COMPLETE/$movie                #Если непонятный файл, отправляю его в /tmp                else                        mkdir /tmp/$TR_TORRENT_NAME                        mv $TR_TORRENT_DIR/$TR_TORRENT_NAME/$movie /tmp/$TR_TORRENT_NAME/$movie                        echo -e "$movie\nбыл непонятен скрипту. Нужно сюда заглянуть\n/tmp/$TR_TORRENT_NAME/$movie" >> /tmp/$TR_TORRENT_NAME.message                fi        done        echo -e "Торент\n$TR_TORRENT_NAME\nзагружен" >> /tmp/$TR_TORRENT_NAME.message}#Если скачался просто файлfile () {        #Так же проверяю на формат        if [[ $TR_TORRENT_DIR/$TR_TORRENT_NAME == *avi ]]; then                #Крнвертирую                ffmpeg -i $TR_TORRENT_DIR/$TR_TORRENT_NAME $COMPLETE/$TR_TORRENT_NAME.mkv        elif [[ $TR_TORRENT_DIR/$TR_TORRENT_NAME == *mkv ]]; then                #Перемещаю                mv $TR_TORRENT_DIR/$TR_TORRENT_NAME $COMPLETE/$TR_TORRENT_NAME        else                mkdir /tmp/$TR_TORRENT_NAME                mv $TR_TORRENT_DIR/$TR_TORRENT_NAME /tmp/$TR_TORRENT_NAME/$TR_TORRENT_NAME                echo -e "Торрент\n$TR_TORRENT_NAME\nзагружен и не понятен скрипту" >> /tmp/$TR_TORRENT_NAME.message        fi        echo -e "Торрент\n$TR_TORRENT_NAME\nзагружен" >> /tmp/$TR_TORRENT_NAME.message}send_message () {        curl https://api.telegram.org/bot$TELEGRAM_BOT/sendMessage?parse_mode=markdown -d chat_id=$CHAT_ID -d text="$(</tmp/$TR_TORRENT_NAME)"}if [[ -d $TR_TORRENT_DIR/$TR_TORRENT_NAME ]]; then        direlse        filefisend_message#Удаляю старые файлы если они естьrm -rf $TR_TORRENT_DIR/$TR_TORRENT_NAMErm -rf /tmp/$TR_TORRENT_NAME.message

Скрипт далек от идеала, может потом его доработаю под собственные нужды, например что бы скачанные файлы.iso перемещались сразу в папку дляшаринга. Так же он отправляет в телеграмуведомлениео загруженном файле, и если есть ошибки, он тоже об этом сообщит. Скрипт писал на быструю руку, и он не проходит повложеннымпапкам, если будет в этом необходимость то его поправлю. На данный момент он выполняет то что мне и надо. После того как скрипт написан, и яопределилсяс конечными папками, перемещаю скрипт к transmission

sudo mv download.sh /etc/transmission-daemon/ 

даю скрипту права на исполнения

sudo chmod +x download.sh

и меняю владельца

sudo chown debian-transmission:debian-transmission /etc/transmission-daemon/download.sh

После останавливаю transmission-daemon

sudo systemctl stop transmission-daemon

и меняю 2 параметра в /etc/transmission-daemon/setings.json

  • "script-torrent-done-enabled": false

  • "script-torrent-done-filename": ""

done-enabled перевожу на true,то-естьвключаю активацию скрипта по окончаниюзагрузки, аdone-file указываю полный путь к файлу, можно указать только название файла если файл лежит в папке transmission, но мне легче указать полный путь.

"script-torrent-done-enabled": true,"script-torrent-done-filename": "/etc/transmission-daemon/download.sh",

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

В качествемедиа сервераDNLA я выбрал minidlna. Ставится из репозитория ubuntu, прост в настройке.

sudo apt install -y minidlna

Файл конфигурации находится /etc/minidlna.conf, я в нем внес несколько правок, а именно, указал где находятся медиаконтент

  • media_dir=A,/media/gerbera/music

  • media_dir=P,/media/gerbera/photo

  • media_dir=V,/media/gerbera/movie

Указал где хранить базуданныхфайлов minidlna

db_dir=/var/cache/minidlna

Указал куда писать логи

log_dir=/var/log/minidlna

и указал имя сервера

friendly_name=Home_Media

и в конце перезапустил сервер

sudo systemctl restart minidlna

И получил результат

Напоследок

Писать о том как я настроил временно samba не буду. Есть очень много мануалов в которомвсе описано куда лучше, чем смогу описать я, но хочу поделится несколькими мыслями на будущие) Целый комп для этого излишнее, тем более у меня есть роутер с прошивкой OpenWRT на котором можно все этореализовать, но жена мне раз дала идею сделать мониторинг цен. Ятакоеуже делал, написал небольшой скрипт на bash которыйпарсилстраницу, брал оттуда название товара, картинку и цену. Скриптзапускалсячерез cron. Идея неплохая, но для каждого сайта необходимо делать свой шаблон. И скорее всего сайты по типу Wildberries при авторизации будут показывать другую цену. Идею думаю реализовать на C++, которые будут братьссылкудля просмотра из БД и смотреть нацену. Если цена записанная в БД будет больше, тоотправлять сообщение в том жетелеграмео том что на такой-то товар ценнаизменилась. Да и для разных экспериментов и обучения можноподнимать серверевиртуальную машину и её ковырять. Так же есть идея реализовать некую запись телепередач. У нас нет обычного телевидения, есть всего 1 канал XD, и жена смотрит несколько передач. Думаю просто настроить запись их в тот же медиа сервер. Но все это планы, желание на исполнения не много.

P.S.

Я впервые пишу такой длинный текст, и вообще в первые куда-то пишу по мимо личных сообщений. Не судите строго.

Источник: habr.com
К списку статей
Опубликовано: 30.04.2021 02:06:43
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Настройка linux

Nginx

Серверное администрирование

Хранение данных

Dlna-сервер

Категории

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

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru