Сетевой media сервер для PS3

от автора

PS3Давно валялась в черновиках данная заметка, все никак не мог собраться ее оформить и опубликовать. Но как говорят это вечно длится не может, так что приступим к повествовании. Собственно в чем же задача, спросите вы? У кого есть PS3 с установленной CFW, тот знает что записать файл больше 4Гб нельзя на внешний диск, так как это ограничение файловой системы FAT32 (сейчас файловые менеджеры для PS3, такие как Multiman поддерживают возможность чтения с томов NTFS, но эта функциональность появилась довольно недавно). Для решения этой проблемы можно было применить два метода:

  • записывать игру на внутренний диск
  • использовать специальные программы которые разбивали большие файлы на части, которые понимал файловый менеджер PS3 (в конечном итоге он все равно склеивал эти файлы и копировал на внутренний диск приставки)

Но существовал и еще один метод, это поднять медиа-сервер для «стриминга» контента на PS3. Собственно этим мы займемся 🙂
У меня на PS3 установлена CFW с функцией Cobra, что позволяет использовать ISO образы, и не требует разворачивания образа в отдельный каталог, как того требуется. Дополнительно у меня еще установлен webMAN что позволяет мне монтировать образы игр не запуская файловый менеджер и даже управлять образами и самой приставкой из веб-браузера (даже с мобильного). Но не это есть предметом данного сообщения. Кому интересно, может обратиться к документации по этому ПО или мне написать личное сообщение.
Собственно, ничего сложного в сборке этого нет (сложно было найти это все в разных форумах и собрать вместе), скачиваем подготовленный архив с исходными файлами. Этот архив предназначен для платформы Linux x86_64, хотя я его собирал и под FreeBSD и даже для роутера ASUS RT-N56U. Я уже не помню всех нюансов сборки под данную платформу, если вас интересует данный вопрос, можете мне написать в личку или почитать Issue 1106: compiling ps3netsrv. В данный архив уже включены измененные файлы «main.cpp» и «netiso.h». Разворачиваем архив и собираем.

$ tar -xzvf ps3netsrv.tar.gz $ make 

Примечание.
В архиве есть скелет rc-скрипта для автоматического запуска/остановки сервиса, но я пошел другим путем и так его и не закончил.
Запускаем все это очень просто:

$ ./ps3netsrv /mnt/media/ps3netsrv 

— где /mnt/media/ps3netsrv root-директория где будет лежать контент для PS3. Внутри корневой директории создаем папки — GAMES, PS3ISO. В первую складываем обычные распакованые образы, а в вторую образы в формате ISO.
Как я и говорил рание, мы не будем использовать rc-скрипты для управление сервисом, а создадим отдельный контейнер для данного сервиса используя возможности Docker.
Создадим отдельную папку для размещения файла конфигурации создания контейнера и скопируем в него скомпилированый файл (смотрите предедущую часть). Для примера:

$ cd ~/docker/ps3netsrv $ cp ~/source/ps3netsrv/ps3netsrv ./ 

Создадим файл конфигурации:

$ vim Dockerfile 

FROM sovicua:jessie MAINTAINER Viktor M. Sytnyk <sovicua@sovic.org.ua> ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get upgrade -y RUN groupadd -g 1000 ps3netsrv RUN useradd -u 1000 -g 1000 -m -c "PS3 Media Server" ps3netsrv VOLUME /home/ps3netsrv/media RUN chown ps3netsrv:ps3netsrv /home/ps3netsrv/media COPY ps3netsrv /home/ps3netsrv/ RUN chown ps3netsrv:ps3netsrv /home/ps3netsrv/ps3netsrv WORKDIR /home/ps3netsrv CMD ./ps3netsrv ./media 

Создаем образ для данного сервиса:

$ docker build -t sovicua:ps3netsrv . 

И запускаем контейнер:

$ docker run --net=host --name=ps3netsrv --user=ps3netsrv -v /mnt/media/ps3netsrv:/home/ps3netsrv/media -i -t -d sovicua:ps3netsrv 

— где /mnt/media/ps3netsrv — корневой каталог в основной операционной системе, который монтируется в /home/ps3netsrv/media в контейнере. Все можно проверять работу нашего медиа-сервера на PS3. Думаю что вы сможете дальше не составить труда вам разобрать что и как.
В дальнейшем я планирую выгрузить данный контейнер в общий пул Docker Hub, что бы каждый мог воспользоваться данным готовым контейнером для создания медиа-сервера.
Хотелось бы услышать ваше мнение по данному вопросу.

P.S. Изначально я для базового образа забыл установить правильную временную зону, по умолчанию для контейнера была установлена UTC. Процедура изменения временной зоны для базового образа описана в небольшой статье Установка timezone в базовом образе Docker.

ссылка на оригинал статьи http://habrahabr.ru/post/261937/


Комментарии

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

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