[Настройка Linux, Nginx, Серверное администрирование, Хранение данных] Домашний медиа сервер minidlna
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
На кой черт это надо?Так сложились обстоятельства, что мне удалось скоммуниздить старенький ПК, да и чтобы он просто не пылился, так как такое старье продавать за 5-7 тысяч (цена в моем регионе за подобную конфигурацию) мне стыдно, а получать за него 3 тысячи — ну такое. Я решил, сделаю дома небольшую библиотеку фильмов, музыки, да и у жены очень много фотографий, которые её очень дороги. Задумка была следующей.
- Некий медиа сервер, который будет транслировать медиаконтент на телевизор.
- Некое локальное хранилище для файлов, порой приходится с флешками побегать, а то жесткого диска на 500ГБ не хватает.
- Торрент клиент, который будет качать все что я пожелаю.
Цели поставлены, осталось их реализовать. Вряд ли опытные пользователи найдут здесь что-то полезное для себя, наверное, только начинающие пользователи Linux, так как все действия очень простые в исполнении.Установка LinuxТо, как поставить линукс, я думаю, не стоит говорить. Я просто опишу что я сделал после установки. Во-первых, пока компьютер был возле меня, я настроил статический адрес в файле /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
#ens34
network:
ethernets:
ens34:
addresses:
- 192.168.31.5/24
gateway4: 192.68.31.1
nameservers:
addresses: [192.168.31.1, 8.8.8.8]
optional: true
version: 2
Думаю, тут вроде понятно, что где что и как. Конечно, правильнее было бы привязать ip-адрес через роутер, но у меня роутер Xiaomi, и там все в иероглифах... Я просто сделал статический ip-адрес на компьютере. После этого я его отнес в подвал и подключил к роутеру и сел за рабочую машину. Теперь стоит создать пару ssh-ключей для удобства
maks@Kubuntu:~/.ssh$ ssh-keygen -f ~/.ssh/home
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/maks/.ssh/home
Your public key has been saved in /home/maks/.ssh/home.pub
The key fingerprint is:
SHA256:i4rpsCZdQq5S+M2JyPWavEtCZqjsIJj2rHa69dzPgz0 maks@Kubuntu
The 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 keys
maks@192.168.31.5's password:
Number of key(s) added: 1
Now 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-интерфейс transmissiontransmission почти готов теперь настрою проксирование через NGINXУстановка NGINX и настройка проксированияЯ поставил весь nginx, но в теории достаточно и самого пакета nginx
sudo apt install -y nginx-full
После установки проверю, работает ли веб сервер зайдя на ip-адрес машины
Приветственное сообщение от 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;
}
}
Немного объясню файл. listen 80 указываем на каком порту будет слушаться сайт, root /var/wwww/home я создал папку от имени root и поместил туда простую страницу html взятую из интернета для проверки как будет все работать.
html страница скачанная из интернетаТак же я добавил строку 192.168.31.5 home.ru в рабочей машине в файл /etc/hosts для того что бы сайт мог открываться в браузере с рабочей машины по адресу home.ru что и указал в файле home.conf server_name home.ruНастройка проксирования transmission-daemon через nginxNGINX вообще мощная фигня, и для того что бы открывать 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-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 заработалНаписание скриптаТак сложилось, что у меня телевизор Samsun толком не воспроизводит видео в формате avi, а если и воспроизводит то как то криво. Нельзя перемотать, длительность фильма такая — что люди стока не живут, да и самое неприятное заключается в том что посреди фильма он может просто оборваться. А вот формат mkv он ест нормально. И поэтому я решил написать небольшой скрипт на bash который будет запускать сам transmission-daemon после загрузки файла. Немного подумав над логикой и посмотрев как качаются разные файлы, выстроил себе цепочку действий. Во-первых надо понять, скачалась папка или файл. Если папка, то создать такую же папку в директории для DNLA сервера, если файл, то пропускаем. Возвращаемся к папке, теперь смотрим на содержимое папки, если файлы avi то конвертируем их через ffmpeg в конечную папку, если в папке файлы mkv то просто перемещаю их, но если там то-то другое, просто кидаю в /tmp для дальнейшего анализа. Теперь возвращаемся к началу скрипта, если же это не папка, а файл то, смотрим на формат и при необходимости конвертируем. Вроде ничего сложного, вот сам скриптскрипт download.sh
#!/bin/bash
COMPLETE="путь_к_конечным_файлам"
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
dir
else
file
fi
send_message
#Удаляю старые файлы если они есть
rm -rf $TR_TORRENT_DIR/$TR_TORRENT_NAME
rm -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
===========
Похожие новости:
- [Data Mining, Big Data, Хранение данных, Хранилища данных] Озеро, хранилище и витрина данных (перевод)
- [Информационная безопасность, Платежные системы, Big Data, Хранение данных] В России активизируется сбор биометрических данных граждан для госуслуг и коммерции
- [Системное администрирование, Виртуализация, Серверное администрирование] Proxmox VE обновился для версии 6.4 (перевод)
- [Настройка Linux, *nix, Разработка под Linux] Релиз ядра Linux 5.12
- [Настройка Linux, Системное администрирование, *nix, Разработка под Linux] Почему /usr/bin/test на 4Кб меньше, чем /usr/bin/[? (перевод)
- [Настройка Linux, Node.JS, Серверное администрирование, Go] Слабо поднять такой крошечный контейнер? Создаем контейнеризованный HTTP-сервер на 6kB (перевод)
- [Хранение данных, Криптовалюты] Разговор с майнером Chia, имеющим 1ПБ ёмкости
- [Хранение данных, Накопители] Три зеттабайта: действительно так много?
- [Настройка Linux, Open source, Софт] Пссст, %username%, Ubuntu 21.04 уже здесь
- [Системное администрирование, Серверное администрирование] AWS Control Tower и почему мы его не используем
Теги для поиска: #_nastrojka_linux (Настройка Linux), #_nginx, #_servernoe_administrirovanie (Серверное администрирование), #_hranenie_dannyh (Хранение данных), #_dlnaserver (dlna-сервер), #_nginx, #_nastrojka_linux (
Настройка Linux
), #_nginx, #_servernoe_administrirovanie (
Серверное администрирование
), #_hranenie_dannyh (
Хранение данных
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:55
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
На кой черт это надо?Так сложились обстоятельства, что мне удалось скоммуниздить старенький ПК, да и чтобы он просто не пылился, так как такое старье продавать за 5-7 тысяч (цена в моем регионе за подобную конфигурацию) мне стыдно, а получать за него 3 тысячи — ну такое. Я решил, сделаю дома небольшую библиотеку фильмов, музыки, да и у жены очень много фотографий, которые её очень дороги. Задумка была следующей.
# This is the network config written by 'subiquity'
#ens34 network: ethernets: ens34: addresses: - 192.168.31.5/24 gateway4: 192.68.31.1 nameservers: addresses: [192.168.31.1, 8.8.8.8] optional: true version: 2 maks@Kubuntu:~/.ssh$ ssh-keygen -f ~/.ssh/home
Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/maks/.ssh/home Your public key has been saved in /home/maks/.ssh/home.pub The key fingerprint is: SHA256:i4rpsCZdQq5S+M2JyPWavEtCZqjsIJj2rHa69dzPgz0 maks@Kubuntu The 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 keys maks@192.168.31.5's password: Number of key(s) added: 1 Now 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. Host home
HostName 192.168.31.5 User maks IdentityFile /home/maks/.ssh/home %sudo ALL=(ALL:ALL) NOPASSWD:ALL
$ sudo apt update && sudo apt upgrade -y && sudo apt install -y transmission-daemon
$ sudo systemctl stop transmission-daemon.service
$ mkdir -p /media/torrent/{downloads,complete}
$ sudo chown -R debian-transmission:debian-transmission /media/torrent
sudo systemctl start transmission-daemon.service
web-интерфейс transmissiontransmission почти готов теперь настрою проксирование через NGINXУстановка NGINX и настройка проксированияЯ поставил весь nginx, но в теории достаточно и самого пакета nginx sudo apt install -y nginx-full
Приветственное сообщение от 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; } server {
listen 80; root /var/www/home; server_name home.ru; location / { index index.html; try_files $uri $uri/ =404; } } html страница скачанная из интернетаТак же я добавил строку 192.168.31.5 home.ru в рабочей машине в файл /etc/hosts для того что бы сайт мог открываться в браузере с рабочей машины по адресу home.ru что и указал в файле home.conf server_name home.ruНастройка проксирования transmission-daemon через nginxNGINX вообще мощная фигня, и для того что бы открывать 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-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 заработалНаписание скриптаТак сложилось, что у меня телевизор Samsun толком не воспроизводит видео в формате avi, а если и воспроизводит то как то криво. Нельзя перемотать, длительность фильма такая — что люди стока не живут, да и самое неприятное заключается в том что посреди фильма он может просто оборваться. А вот формат mkv он ест нормально. И поэтому я решил написать небольшой скрипт на bash который будет запускать сам transmission-daemon после загрузки файла. Немного подумав над логикой и посмотрев как качаются разные файлы, выстроил себе цепочку действий. Во-первых надо понять, скачалась папка или файл. Если папка, то создать такую же папку в директории для DNLA сервера, если файл, то пропускаем. Возвращаемся к папке, теперь смотрим на содержимое папки, если файлы avi то конвертируем их через ffmpeg в конечную папку, если в папке файлы mkv то просто перемещаю их, но если там то-то другое, просто кидаю в /tmp для дальнейшего анализа. Теперь возвращаемся к началу скрипта, если же это не папка, а файл то, смотрим на формат и при необходимости конвертируем. Вроде ничего сложного, вот сам скриптскрипт download.sh #!/bin/bash
COMPLETE="путь_к_конечным_файлам" 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 dir else file fi send_message #Удаляю старые файлы если они есть rm -rf $TR_TORRENT_DIR/$TR_TORRENT_NAME rm -rf /tmp/$TR_TORRENT_NAME.message sudo mv download.sh /etc/transmission-daemon/
sudo chmod +x download.sh
sudo chown debian-transmission:debian-transmission /etc/transmission-daemon/download.sh
sudo systemctl stop transmission-daemon
"script-torrent-done-enabled": true,
"script-torrent-done-filename": "/etc/transmission-daemon/download.sh", sudo apt install -y 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 =========== Похожие новости:
Настройка Linux ), #_nginx, #_servernoe_administrirovanie ( Серверное администрирование ), #_hranenie_dannyh ( Хранение данных ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:55
Часовой пояс: UTC + 5