Медиамагия: Приходишь домой, берёшь пульт и выбираешь, чтобы посмотреть с трекера из песочницы
Позвольте мне начать своё повествование с рассказа про свободное время, семью и тягу к прекрасному. Свободного времени, которое я могу провести с женой, обычно очень мало. То я занят, то жена. То мы оба. Но иногда высвобождается час-другой, который можно провести вместе. А что можно сделать вместе? Ну, кроме того что вы подумали, можно ещё посмотреть вместе фильм. Сходить в кино, например, выбрав один из пяти унылых фильмов в кинотеатре. Или достать с полки DVD и в 5й раз посмотреть «Новинки 2006 года, 8 в 1». Но кому нужны новинки 2006 года в качестве для мобильного телефона или платить деньги за билеты в кино, если всё что нужно для удовольствия можно сделать у себя дома практически бесплатно? Если есть трекер на котором постоянно выкладываются сотни интересных фильмов? Если есть хороший телевизор и диван, на котором смотреть фильмы намного приятнее? Нет, иногда, конечно, приятно сходить в кино, или пересмотреть новинки 2006, но в большинстве случаев мы хотим (1) дома, (2) бесплатно посмотреть (3) новый фильм (4) в хорошем качестве (5) не дожидаясь пока он скачается.
Как бывает у меня. Ну, точнее, было раньше. Если появлялось свободное время, когда и я и жена оба можем и хотим посмотреть фильм, я включал компьютер, шёл на трекер, долго листал новинки, читал описания, выбирал фильм, ставил в закачку, дожидался окончания скачивания, подключал компьютер к телевизору, счастливый поворачивался к жене и… понимал что она уже полчаса как уснула, пока я всё это делал. В какой-то момент мне это надоело и я пошёл другим путём, о котором я сейчас вам расскажу.
Для начала я избавился от необходимости подключения компьютера к телевизору. Из старого железа я собрал компьютер, выделенный специально под роль медиасервера. На этот комп я поставил сборку линукса «mythbuntu», специально созданную для этих целей. Нашёл инфракрасный ресивер, купленный 7 лет назад вместе c сотовым телефоном Sony Ericsson. Купил в метро пульт за 190 рублей. Подключил собранный комп к телевизору и таким образом у меня получился медиасервер с интуитивной графической оболочкой, управляемой с пульта. Вот фотка. Лежащее под PS3 — это мой сервер.
А это — фотография оболочки MythTV.
А дальше начинается самое интересное. Я поставил на этот компьютер торрент-клиент, запущенный 24 часа в сутки и написал скрипт, который скачивает с трекера все популярные фильмы по определённым критериям (должно быть более 70 сидов, но не качать экранки и сериалы), скачивает описания фильмов, кто режиссёр, актёры, картинку релиза итд. Всё это он помещает MythTV, и шлёт мне письмо, что началось скачивание нового фильма. Сидя на работе за рабочим компом я получаю письмо от своего сервера, с описанием, картинкой итд, и если фильм кажется мне заведомо унылым, я отвечаю на это письмо с меткой, что фильм надо удалить. Сервер читает ответы, останавливает закачку и удаляет фильм. Вот так, кстати, выглядит письмо
А когда у меня выдаётся возможность посмотреть с женой фильм, я больше не трачу время на поиск, скачивание, итд. Я беру в руки пульт, падаю к жене на диван, и мы вместе выбираем, что посмотреть. Уже из скачанного. Нашим сервером, пока мы работали. Выглядит это примерно вот так: Это, вот, список фильмов
А это, вот, описание фильма:
В реальности — время потраченное на создание сервера и написание скрипта того стоило.
Неожидал такой популярности, и как мне посоветовали делаю отдельную статью по настройке.
Подробности под катом.
1.Устанавливаем торрент-клиент rtorrent Устанавливать приложения в Ubuntu можно несколькими способами. Например, можно воспользоваться графическим клиентом Synaptic,, или же запустить процесс установки из консоли. Мы пойдём вторым путём, потому что, во-первых, это проще поддаётся описанию, а во-вторых, всегда бывает полезно уметь пользоваться консолью. Тем более, нам ещё не раз придётся к ней обращаться (мы же в линуксе, как ни крути). Для начала запустим терминал, если он ещё не запущен. И скопируем туда эту строчку: sudo apt-get install rtorrent Для новичков вкратце объясню что это значит. «sudo» означает, что команду нужно запустить с правами администратора. «apt-get» — это консольный клиент для установки приложений. «install» это команда клиенту «apt-get», сообщающая о необходимости «установить» приложение. rtorrent, соответственно, название приложения, которое мы устанавливаем. Ещё один маленький совет тем, кто только начинает разбираться с линуксом — в консоли очень удобно использовать кнопку TAB, которая «дописывает» команды/пути/итд и выводит их список, если есть более одного варианта дописывания. Например, можно набрать команду так: sudo apt-g[TAB] i[TAB] rto[TAB] Ok, набрали команду, ввели пароль, запустилась установка. Apt-get переспросит, уверены ли вы в том, что делаете. Нажмите «Д» (или просто Enter) и установка пойдёт дальше. Ok, мы установили приложение. Для проверки в консоли пишем:rtorrent жмём Enter и перед нами должен появится интерфейс рторрента. Ok, супер. Всё работает. Жмём Ctrl+q чтобы выйти из приложения.
2.Настраиваем rtorrent В начале создадим директории, с которыми мы будем работать. В консоли это делается командой mkdir и указанием директории, которую мы хотим создать. Соответственно пишем в консоли:mkdir ~/torrents mkdir ~/.rtorrent-session mkdir /var/lib/mythtv/videos/downloads "~" — это сокращение в линуксе, указывающее путь к вашей домашней директории Итак мы создали директорию «torrents», в которой у нас будут лежать torrent-файлы, директорию ".rtorrent-session" в которой rtorrent будет хранить свою сессию и директорию «downloads», в которую rtorrent будет скачивать фильмы. Настройки rtorrent хранятся в файле, который называется .rtorrent.rc и который хранится в вашей домашней директории. Но при установке приложения такой файл не создаётся, поэтому для начала нам придётся его создать. Пишем в консоли:nano ~/.rtorrent.rc откроется консольный текстовый редактор с пустым содержимым. Вставим туда следующие строки:download_rate = 1000 upload_rate = 100
Не забываем в двух местах заменить «вашеимя» на ваше имя в системе (то есть на путь к вашей домашней директории)
Теперь опишу, что значат все эти настройки: download_rate, upload_rate — ограничение по скорости даунлода и аплода соответственно. В килобайтах. directory — директория для сохранения скачанных файлов session — директория, необходимая rtorrent'у для сохранения сессий закачки
schedule = u_night_mode,02:00:00,24:00:00,upload_rate=0 schedule = u_day_mode,07:00:00,24:00:00,upload_rate=100 schedule = d_night_mode,02:00:00,24:00:00,download_rate=0 schedule = d_day_mode,07:00:00,24:00:00,download_rate=1000 Эти четыре строчки говорят, что с 7 утра до 2х ночи нужно ограничивать скорость до 1000/100 kbps (down/up), а с 2х ночи до 7 утра работать без ограничений по скорости.
schedule = low_diskspace,5,60,close_low_diskspace=100M Это означает, что нужно раз в минуту проверять не кончается ли место на винчестере и останавливать все закачки, если осталось менее чем 100 мегабайт.
schedule = watch_directory,10,10,load_start=/home/вашеимя/torrents/*.torrent каждые 10 секунд проверять, не появились ли новые торрент-файлы в этой директории
schedule = tied_directory,10,10,start_tied= Стартовать закачку, если появился новый торрент файл
schedule = untied_directory,10,10,stop_untied= Останавливать закачку, если торрент файл удалён
schedule = ratio,60,60,«stop_on_ratio=200,200M,2000» Останавливать закачку, если её рейтинг>=2.00, при этом было заапложено более 200Мб ИЛИ рейтинг>=20.00
min_peers, max_peers — минимальное и максимальное кол-во пиров на торрент. Если честно, плохо понимаю что значит «min peers» max_uploads — максимальное количество аплодов на торрент encryption — шифрование port_range — порт. не забудьте пробросить порт на DSL-модеме/роутере, кстати.
scgi_port — порт, по которому веб-клиент (который мы потом поставим) будет работать с rtorrent encoding_list — кодировка umask — маска прав по умолчанию
подробнее о тех или иных настройках можно почитать на сайте rtorrent
А мы сохраняем файл (Ctrl+o, Enter) и выходим из редактора (Ctrl+x)
запускаем rtorrent, кидаем в директорию ~/torrents/ какой-нибудь торрент-файл, проверяем что всё работает. Закачка должна стартануть и в директории videos/downloads появится скачиваемый файл. Ура.
3. Учим rtorrent работать в бэкграунде и стартовать автоматически. Заодно поборем один баг с зависанием рторрента. В начале ставим screen: sudo apt-get install screen дальше создаём директорию и скрипты для запуска: mkdir ~/bin nano ~/bin/myrtorrent.sh
Внутри пишем #!/bin/bash PROGRAM="/usr/bin/rtorrent" GRACE_DELAY=15 while true; do "$PROGRAM" RETURNED=$? if [ $RETURNED -ne 0 ] then echo "$PROGRAM did not exit cleanly with status code $RETURNED" echo "pausing for $GRACE_DELAY seconds before restarting $PROGRAM" sleep $GRACE_DELAY; else echo "$PROGRAM exited cleanly. It will not be restarted automatically" exit 0 fi done
сохраняем, выходим (ctrl+o, Enter, ctrl+x) пишем в консоли nano ~/bin/checkrtorrent.sh В редакторе пишем: nano ~/bin/checkrtorrent.sh
не забудьте сменить «вашеимя» на ваше имя в системе. Сохраняем, выходим.
Таким образом, мы создали несколько скриптов, которые запускают rtorrent в фоновом режиме и следят за тем, что он успешно запустился.
Теперь заставим эти скрипты запускаться. Вначале сделаем их «запускаемыми» chmod +x ~/bin/checkrtorrent.sh chmod +x ~/bin/myrtorrent.sh
ставим скрипты в планировщик задач crontab -e crontab — это приложение, запускающее в определённый момент другие приложения. При первом старте он спросит какой текстовый редактор мы хотим использовать. «3 — nano», конечно же ответим мы. Ок. Видим nano со следующим содержимым: # m h dom mon dow command Очень здорово. Теперь впишем строкой ниже нужный нам текст. */10 * * * * /home/вашеимя/bin/checkrtorrent.sh только не забудем заменить вашеимя на ваше имя в системе. Ctrl+o, Enter, Ctrl+x. Можно перегрузить систему, чтобы проверить что всё работает. для этого после перезагрузки ждём несколько минут (скрипт срабатывает раз в 10 минут) и набираем в консоли screen -r после этого должен показаться интерфейс рторрента. Чтобы выйти из рторрента, но оставить его работать в фоновом режиме НЕ ЖМИТЕ НА Ctrl+q, а вместо этого нажмите «Ctrl+a», а затем «d». программа останется работать. Вы в любой момент можете посмотреть что у вас происходит, набрав «screen -r» и выйти нажав «ctrl+a, d»
4.Устанавливаем необходимые для работы скриптов Mediagic пакеты. пишем в консоли sudo apt-get install php5-cli php5-curl php5-gd php5-imap
5.Устанавливаем сами скрипты.Правим config.xml
Скачиваем архив со скриптами и разархивируем его на своём компьютере с Виндоус (или что там у вас). Предлагаю править его на своём компьютере, а не на медиацентре, потому что так быстрее Открываем и видим несколько папок и файлов. Открываем файл config.xml из корня. Начинаем аккуратно заполнять значения. Оставляем как есть значения verbose, system_encoding Доходим до группы параметров <mediagic_db> localhost mythtv вписасть_сюда_пароль <db_name>mediagic</db_name> </mediagic_db> Открываем консоль на медиацентре. Набираем cat /etc/mythtv/mysql.txt|grep DBPassword эта хитрая команда позволит нам увидеть генерированный пароль от базы данных MythTV. Вписываем этот пароль в поле password.
Следующий интересующий нас параметр называется user_agent. Раньше можно было обойтись без этого параметра. user_agent — это название вашего браузера, в котором вы авторизованы на трекере. Нам понадобится название браузера и cookies. Для того чтобы выдрать значение кукис я рекомендую использовать браузер Opera (наверняка значение cookies можно посмотреть и в других браузеров, но я не знаю как, потому что пользуюсь оперой). Итак заходим на трекер с оперы, вводим логин-пароль (если ещё не авторизованы), после чего заходим на сайт whatsmyuseragent.com/ (понадобится интернет). Всё это можно сделать со своего рабочего компа, а не с медиацентра. Сайт покажет нам какое-то кол-во информации, в самом начале можо прочитать: Your User Agent is: Opera/9.80 (Macintosh; Intel Mac OS X; U; en) Presto/2.2.15 Version/10.00 или нечто подобное. Скорее всего у вас будет написано Opera/9.80 (Windows; чтото там) Копируем содержимое строчки (начиная со слова Opera) в буфер и вставляем в xml-файл заместо указанного там значения. Следующий интересующий нас параметр называется «coverarts» Открываем консоль на медиасервере и пишем: mkdir ~/.mythtv/MythVideo/ возвращаемся к конфигурационному файлу и пишем: /home/вашеимя/.mythtv/MythVideo/ разумеется, заменив «вашеимя» на ваше имя в системе. смотрим дальше. trash. Ок, предлагаю использовать для этого системную корзину, но можно и любую другую папку. Системная корзина лежит тут. /home/вашеимя/.local/share/Trash/files/ как всегда, заменив «вашеимя» на ваше имя в системе. Следующая группа значений, которая нас интересует, называется mythtv Ничего тут не меняем, только пишем тот же пароль, что мы писали в поле mediagic_db/password выше.
Далее идёт блок настройки email, но я предлагаю его пока не трогать и настроить потом.
6.Правим trackers/tracker.*название трекера*.xml
Открываем файл. Открываем Opera. Открываем в опере любимый трекер. Кликаем правой кнопкой и выбираем «Edit Site Preferences/Настройки для сайта». Выбираем вкладку «Cookies». Внизу будет список переменных и значений. Кликая двойным кликом на каждое из значений, можно будет открыть его в новом окне и скопировать. Аккуратно заполняем все параметры из xml-файла, чтобы получилось что-то вроде <phpbb3_cqeo2_u>1</phpbb3_cqeo2_u> <phpbb3_cqeo2_k></phpbb3_cqeo2_k> <phpbb3_cqeo2_sid>a3ac2ae1232c43237eac4183726370ac</phpbb3_cqeo2_sid> 1234 2abc8bf34fb7b2948dc38749cc2cacbc b55476116f38bcd5a91e22dc6280e4ee a3f616f38bcd58ab16f8bcd54916f8bc563 1234_iUn9k ednIu8Jd7wOjw09JHw672lJkwdjhfwJhdeU63Jdg22hsdjciIh7HdgeY7t <hsdn_top>1</hsdn_top>
Далее меняем значение minimum_number_of_seeds на интересующее нас. Ставим в фильтры filters/decline то, что не хотим качать ни при каких обстоятельствах. Указываем max_size и min_size. Меняем directories/torrents_dir на необходимое нам значение /home/вашеимя/torrents/ не забываем заменить «вашеимя», затем меняем значение directories/datafiles_dir на /var/lib/mythtv/videos/downloads/ в результате у меня это выглядит так:
копируем весь блок cookies из предыдущего файла и вставляем в соответствующее место сюда. Несмотря на то, что может показаться глупостью писать 2 раза одно и тоже в разных местах, в этом есть определённый смысл. Позвольте мне вкратце рассказать, как это всё работает и за что отвечают вышеперечисленные файлы. Файлы, лежащие в trackers/ отвечают за работу с трекерами. Можно создать файл trackers/torrents.ru.xml, прописать туда необходимые значения и Медиаджик будет работать ещё и с torrents.ru. Файлы, лежащие в scrubbers/ отвечают за скачивание информации о фильме. Так как в случае с локальным трекром мы берём информацию непосредственно с описания торрента, получается, что место откуда мы качаем торрент-файлы и откуда мы берём информацию — это один и тот же сайт. Но может получится, что мы захотим качать фильмы c PirateBay или torrents.ru, а информацию о них брать с кинопоиска или с тех-же локальных торрентов. Или наоборот как-то Получается, что место откуда мы качаем фильмы и место, откуда мы берём информацию, не всегда одно и то же, просто в нашем конкретном случае это один и тот же сайт.
8.Устанавливаем скрипты и разворачиваем базу. копируем всю папку mediagic со всеми поправленными конфиг-файлами на медиасервер. Рекомендую скопировать их в /var/www. Для этого вначале копируем папку куда угодно, например в домашнюю директорию, а затем из консоли пишем sudo mv ~/mediagic /var/www/ набираем пароль и вуяля — скрипты там. Теперь давайте создадим базу данных. набираем в консоли mysql -u root -p вводим ваш пароль и попадаем внутрь MySQL. vadim@vadim-vmware:~$ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 135 Server version: 5.0.75-0ubuntu10.2 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
Пишем следующее:
GRANT ALL ON *.* TO 'mythtv'@'localhost';
Возвращаемся в стандартную консоль. Для дальнейшей работы нам понадобится пароль, который мы выяснили, когда правили config.xml набираем mysql -u mythtv -p и вводим этот генерированный пароль от базы данных. Попадаем назад в mysql но уже под пользователем «mythtv». Пишем: create database mediagic; SHOW DATABASES;
в результате мы должны увидеть 4 базы данных mysql> create database mediagic; Query OK, 1 row affected (0.00 sec)
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mediagic | | mysql | | mythconverg |
пишем exit и выходим из MySQL. Пишем в консоли: mysql --user=mythtv --password=пароль mediagic < /var/www/mediagic/mediagic.sql заменив «пароль» на генерированный пароль из config.xml Ура. База данных создана.
9.Проверяем, что всё работает набираем в консоли php /var/www/mediagic/autodownload.php И внимательно смотрим на то, что выдаёт скрипт. Если всё сделали правильно, то он не выдаст никаких ошибок, а успешно скачает и запишет в базу данных всё, что надо. По результатам действия скрипта в Mythtv должны появиться несколько новых (но ещё не скачанных) фильмов а в rtorrent новые закачки. Напоминаю, что rtorrent можно посмотреть в консоли набрав «screen -r» и выйти из него набрав «Ctrl+a, d». Чтобы удалить закачку в rtorrent выберите её кнопками вверх-вниз и нажмите 2 раза Ctrl+d (закачка остановится, но частично скачанный файл останется). MythTV можно запустить через Applications->Аудио и видео->MythTV Frontend. 10. пишем в терминале sudo touch /var/log/updatetorrents.log sudo chmod 777 /var/log/updatetorrents.log crontab -e и добавляем ещё одну строчку в самый низ 0 * * * * /usr/bin/php /var/www/mediagic/autodownload.php > /var/log/updatetorrents.log Теперь раз в час медиаджик будет проверять не появилось ли новых фильмов, качать их и сохранять информацию в базу MythTV.
На сегодня всё. В следующий раз будем бороться с драйверами и кодеками, делать MythTV красивым, работать с rtorrent через красивый веб-интерфейс, прикручивать пульт, учить Mediagic писать и читать почту, а также скачивать интересующие нас сериалы в отдельные директории сразу же после появления хотя-бы одного сида на трекере. Кроме этого, этим же макаром мы будем учить Mediagic скачивать ожидаемые релизы как только они появятся.
Если у вас не получилось что-то — пишите, разберёмся. Если вы делали всё в точности как я описал — то проблем возникнуть не должно, если, конечно, я не описАлся