Linux Mint 17 и DLNA

    Зачем это все надо


    Linux Mint — отличная домашняя ОС. Богатый выбор графических сред на любой вкус, простая и понятная даже новичку установка, сразу после установки имеем основной набор необходимого софта, удобный менеджер приложений, основные мультимедийные кодеки. В общем, отличная система для перехода и ознакомления с Linux.

    image

    Но возникает проблема для тех, у кого нет дома NAS или чего-то подобного, а смотреть контент с ПК на других устройствах, поддерживающих DLNA хочется. Под Linux существует множество различных DLNA-серверов, но оптимальным, все же, является MiniDLNA. И тому есть несколько причин. Во-первых, это типичный Unix-way: этот сервер является именно DLNA-сервером, а не комбайном с кучей свистелок, при этом контент без проблем воспринимается на любом устройстве. Даже телевизоры Samsung со своим AllShare прекрасно подключаются к нему. Также можно отметить и замечательную скорость работы и нетребовательность к ресурсам этого сервера.

    И все бы было хорошо, но вот в с помощью команды
    sudo apt-get install minidlna
    установить его не получится — нет его в репозитарии.

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

    Подготовка

    Если будете выполнять команды в консоли, запущенной с правами root, команду sudo писать не нужно.

    Для начала нужно установить необходимые библиотеки:

    Обновляемся:

    sudo apt-get update
    И устанавливаем сами библиотеки:
    sudo apt-get install libavcodec-dev libavformat-dev libavutil-dev libflac-dev libvorbis-dev libogg-dev libid3tag0-dev libexif-dev libjpeg-dev libsqlite3-dev
    


    Самая свежая версия MiniDLNA на данный момент — 1.1.3, ее можно скачать здесь, либо загрузить из консоли:
    wget --trust-server-names http://sourceforge.net/projects/minidlna/files/latest/download
    ключ перед адресом нужен, чтобы сохранилось оригинальное имя, с выхдом новой версии имя файла будет отличатся. После этого архив нужно распаковать:

    tar -xf minidlna-1.1.3.tar.gz
    Теперь перейдем в распакованную папку с исходниками
    cd minidlna-1.1.3


    Если вы хотите, чтобы на устройстве отображались сразу папки с файлами, нужно немного подправить код:
    Открывайте спойлер
    Для отключения запроса способа отображения файлов нужно в папке с исходниками (minidlna-1.1.3, мы в нее уже должны были перейти) подправить файл upnpsoap.c, но сначала сделаем его резервную копию:

    sudo cp upnpsoap.c upnpsoap.c.old
    и откроем в редакторе
    sudo nano upnpsoap.c
    поиском (F6), ищем процедуру:

    "BrowseContentDirectory"static void
    BrowseContentDirectory(struct upnphttp * h, const char * action)
    {


    В начале процедуры выполняется разбор SOAP/XML-запроса, затем его обработка и возврат результата. Разбор запроса завершается формированием отладочного сообщения:
    DPRINTF(E_DEBUG, L_HTTP, "Browsing ContentDirectory:\n"
    			 " * ObjectID: %s\n"
    			 " * Count: %d\n"
    			 " * StartingIndex: %d\n"
    			 " * BrowseFlag: %s\n"
    			 " * Filter: %s\n"
    			 " * SortCriteria: %s\n",
    			ObjectID, RequestedCount, StartingIndex,
    			BrowseFlag, Filter, SortCriteria);


    Далее реализован выбор корневого контейнера в зависимости от конфигурационного параметра root_container:

    	// Если запрошен корневой контейнер
    	if( strcmp(ObjectID, "0") == 0 )
    	{
    		// Выставляем флаг корневого контейнера
    		args.flags |= FLAG_ROOT_CONTAINER;
    		// Если в конфиге задан корневой контейнер
    		if( runtime_vars.root_container )
    		{
    			// Если клиентом является аудио плейер и в конфиге задан обзор папок
    			// Отправляем его в папку с музыкой
    			if( (args.flags & FLAG_AUDIO_ONLY) && (strcmp(runtime_vars.root_container, BROWSEDIR_ID) == 0) )
    				ObjectID = MUSIC_DIR_ID;
    			else // Иначе выставляем контейнер, заданный в конфиге
    				ObjectID = runtime_vars.root_container;
    		}
    		else // Если контейнер в конфиге не задан
    		{
    			// Если клиентом является аудио плейер
    			// Отправляем его в папку с музыкой
    			if( args.flags & FLAG_AUDIO_ONLY )
    				ObjectID = MUSIC_ID;
    		}
    	}


    Сразу после этого блока и перед блоком с запросами к БД добавляем код перенаправления папок для видео, музыки и изображений:

    	//Redirect video to folder
    	if( strcmp(ObjectID, VIDEO_ID) == 0 )
    	{
    		ObjectID = VIDEO_DIR_ID;
    	}
    
    	//Redirect music to folder
    	if( strcmp(ObjectID, MUSIC_ID) == 0 )
    	{
    		ObjectID = MUSIC_DIR_ID;
    	}
    
    	//Redirect images to folder
    	if( strcmp(ObjectID, IMAGE_ID) == 0 )
    	{
    		ObjectID = IMAGE_DIR_ID;
    	}
    В итоге правленный фрагмент должен выглядеть следующим образом:
            if( strcmp(ObjectID, "0") == 0 )
            {
                    args.flags |= FLAG_ROOT_CONTAINER;
                    if( runtime_vars.root_container )
                    {
                            if( (args.flags & FLAG_AUDIO_ONLY) && (strcmp(runtime_vars.root_containe$
                                    ObjectID = MUSIC_DIR_ID;
                            else
                                    ObjectID = runtime_vars.root_container;
                    }
                    else
                    {
                            if( args.flags & FLAG_AUDIO_ONLY )
                                    ObjectID = MUSIC_ID;
                    }
            }
    
            //Redirect video to folder
            if( strcmp(ObjectID, VIDEO_ID) == 0 )
            {
                    ObjectID = VIDEO_DIR_ID;
            }
    
            //Redirect music to folder
            if( strcmp(ObjectID, MUSIC_ID) == 0 )
            {
                    ObjectID = MUSIC_DIR_ID;
            }
    
            //Redirect images to folder
            if( strcmp(ObjectID, IMAGE_ID) == 0 )
            {
                    ObjectID = IMAGE_DIR_ID;
            }
    
            if( strcmp(BrowseFlag+6, "Metadata") == 0 )
            {
                    args.requested = 1;
                    sql = sqlite3_mprintf("SELECT %s, " COLUMNS
                                          "from OBJECTS o left join DETAILS d on (d.ID = o.DETAIL_ID$
                                          " where OBJECT_ID = '%q';",
                                          (args.flags & FLAG_ROOT_CONTAINER) ? "0, -1" : "o.OBJECT_I$
                                          ObjectID);
                    ret = sqlite3_exec(db, sql, callback, (void *) &args, &zErrMsg);
                    totalMatches = args.returned;
            }
    


    Чтобы упростить процедуру последующего обновления, сохраним патч с внесенными изменениями:
    diff -u upnpsoap.c.old upnpsoap.c > ../minidlna-folders.patch


    Теперь вместо редактирования файла, достаточно применить патч:

    cd ~/src/minidlna/minidlna-НоваяВерсия
    patch < ../minidlna-folders.patch
    Теперь можно переходить к конфигурированию.
    Если вам это не нужно, переходите сразу к конфигурированию:

    ./configure


    И компилируем:

    make


    Установка

    1) Для тех, кто в дальнейшем захочет обновить версию, предыдущую можно удалить (конфигурационные файлы при этом сохраняются), если этого не сделать, то в случае, если в новой версии состав установочных файлов изменится, в /usr/local могут остаться старые файлы, при первой установке — переходим сразу к пункту 2.

    Для удаления заходим в папку с предыдущей установкой и выполняем команду:
    sudo apt-get remove minidlna
    2) Запускаем установку (в комментариях предложили более правильный путь, чем make install):

    sudo checkinstall -D
    Ключ -D указывает, что должен быть создан Debian-пакет

    3)Если мы производим первоначальную установку, нужно создать init-скрипт:
    sudo nano /etc/init.d/minidlna
    , если мы обновляем версию, больше ничего делать не нужно, при первоначальной установке у нас откроется пустой файл, в который нужно внести следующий код:

    Листинг
    #!/bin/sh
    #
    # MiniDLNA initscript
    #
    # Based on the mediatomb debian package.
    # Original authors: Tor Krill <tor@excito.com>
    #                   Leonhard Wimmer <leo@mediatomb.cc>
    #                   Andres Mejia <mcitadel@gmail.com>
    #
    # Modified by: Benoit Knecht <benoit.knecht@fsfe.org>
    #
    ### BEGIN INIT INFO
    # Provides:          minidlna
    # Required-Start:    $network $local_fs $remote_fs
    # Required-Stop::    $network $local_fs $remote_fs
    # Should-Start:      $all
    # Should-Stop:       $all
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Start minidlna at boot time
    # Description:       Manage the minidlna daemon, a DLNA/UPnP-AV media server.
    ### END INIT INFO
    
    unset USER
    
    # PATH should only include /usr/* if it runs after the mountnfs.sh script
    PATH=/sbin:/usr/sbin:/bin:/usr/bin
    DESC="DLNA/UPnP-AV media server"
    NAME=minidlnad
    DAEMON=/usr/local/sbin/minidlnad
    PIDDIR=/run/$NAME
    PIDFILE=$PIDDIR/$NAME.pid
    SCRIPTNAME=/etc/init.d/minidlna
    DEFAULT=/etc/default/minidlna
    
    # Exit if the package is not installed
    [ -x $DAEMON ] || exit 0
    
    # Read configuration variable file if it is present
    [ -r $DEFAULT ] && . $DEFAULT
    
    # Load the VERBOSE setting and other rcS variables
    . /lib/init/vars.sh
    
    # Define LSB log_* functions.
    # Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
    . /lib/lsb/init-functions
    
    # Do not start the daemon if NO_START is enabled in DEFAULT
    if [ "$START_DAEMON" != "yes" ] && [ "$1" != "stop" ]; then
            log_warning_msg "$NAME: Not starting $DESC."
            log_warning_msg "$NAME: Disabled in $DEFAULT."
            exit 0
    fi
    
    # Set the default configuration file
    if [ -z $CONFIGFILE ]; then
            CONFIGFILE=/etc/minidlna.conf
    fi
    
    # Set the default log file
    if [ -z $LOGFILE ]; then
            LOGFILE=/var/log/minidlna.log
    fi
    
    # Run as `minidlna' if USER is not specified or is `root'
    if [ -z $USER ]; then
            USER=minidlna
    fi
    
    # If no group is specified, use USER
    if [ -z $GROUP ]; then
            GROUP=$USER
    fi
    
    DAEMON_ARGS="-f $CONFIGFILE -P $PIDFILE $DAEMON_OPTS"
    
    #
    # Function that starts the daemon/service
    #
    do_start()
    {
            # Return
            #   0 if daemon has been started
            #   1 if daemon was already running
            #   2 if daemon could not be started
            touch $LOGFILE && chown $USER:$GROUP $LOGFILE || return 2
            if [ ! -d $PIDDIR ]; then
                mkdir $PIDDIR || return 2
            fi
            chown $USER:$GROUP $PIDDIR || return 2
    
            start-stop-daemon --start --quiet --pidfile $PIDFILE \
                    --chuid $USER:$GROUP --exec $DAEMON --test > /dev/null \
                    || return 1
            start-stop-daemon --start --quiet --pidfile $PIDFILE \
                    --chuid $USER:$GROUP --exec $DAEMON -- \
                    $DAEMON_ARGS \
                    || return 2
    }
    
    #
    # Function that stops the daemon/service
    #
    do_stop()
    {
            # Return
            #   0 if daemon has been stopped
            #   1 if daemon was already stopped
            #   2 if daemon could not be stopped
            #   other if a failure occurred
            start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
            RETVAL="$?"
            [ "$RETVAL" = 2 ] && return 2
            # Wait for children to finish too if this is a daemon that forks
            # and if the daemon is only ever run from this initscript.
            start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
            [ "$?" = 2 ] && return 2
            # Many daemons don't delete their pidfiles when they exit.
            rm -rf $PIDDIR
            return "$RETVAL"
    }
    
    case "$1" in
      start)
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME"
        do_start
        case "$?" in
                    0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                    2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
            esac
      ;;
      stop)
            [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
            do_stop
            case "$?" in
                    0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                    2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
            esac
            ;;
      status)
           status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" && exit 0 || exit $?
           ;;
      restart|force-reload)
            log_daemon_msg "Restarting $DESC" "$NAME"
            do_stop
            case "$?" in
              0|1)
                    if [ "$1" = "force-reload" ]; then
                            # Rescan the collection
                            DAEMON_ARGS="$DAEMON_ARGS -R"
                    fi
                    do_start
                    case "$?" in
                            0) log_end_msg 0 ;;
                            1) log_end_msg 1 ;; # Old process is still running
                            *) log_end_msg 1 ;; # Failed to start
                    esac
                    ;;
              *)
                    # Failed to stop
                    log_end_msg 1
                    ;;
            esac
            ;;
      *)
            echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
            exit 3
            ;;
    esac
    
    :
    , сохранить комбинацией клавиш Ctrl+O и выйти из редактора — Ctrl+X.

    4) После этого даем права на запуск скрипта:
    sudo chmod 755 /etc/init.d/minidlna
    5) И активируем запуск init-скрипта:
    sudo update-rc.d minidlna defaults
    6) Так как по умолчанию служба запускается под пользователем minidlna, нам нужно создать соответствующую учетную запись:

    sudo adduser --system --home /var/lib/minidlna --group --gecos "MiniDLNA server" minidlna
    7) Правим файл конфигурации сервера:
    sudo nano /etc/minidlna.conf
    В нем нам нужно следующее содержимое (здесь подправлен интервал, с которым сервер себя анонсирует, так как не все телевизоры опрашивают сервер, также вам надо прописать путь к папке с медиа, к примеру так: «media_dir=V,/mnt/sdb6/Video/Alex/» в соответствующем разделе файла):

    Листинг minidlna.conf
    # Порт сервера
    port=8200
    
    # Привязка к сетевому интерфейсу
    # Можно задать несколько интерфейсов
    # в формате network_interface=eth0,eth1
    #network_interface=eth0
    
    # Имя пользователя или UID, под которым будет работать служба
    # Добавлен в версии 1.1.0
    # В Debian задается в параметрах init-скрипта
    #user=jmaggard
    
    # Путь к папке с медиа-файлами
    # Для сканирования нескольких папок, укажите несколько параметров media_dir
    # Чтобы сканировать файлы определенного типа, укажите соответствующий префикс:
    #   A - аудио: media_dir=A,/home/jmaggard/Music
    #   V - видео: media_dir=V,/home/jmaggard/Videos
    #   P - изображения: media_dir=P,/home/jmaggard/Pictures
    # Начиная с версии 1.1.0, можно задать несколько типов:
    #   PV - изображения и видео: media_dir=AV,/var/lib/minidlna/digital_camera
    #
    # При изменении параметра, потребуется повторное сканирование файлов.
    # Необходимо выполнить команду "service minidlna force-reload" от имени root.
    # Начиная с версии 1.1.0, при изменении параметра, сканирование выполняется автоматически.
    media_dir=/var/lib/minidlna
    
    # Имя DLNA-сервера, отображаемое клиентом
    # По умолчанию: "$HOSTNAME:$USER"
    #friendly_name=
    
    # Путь к папке для хранения базы данных и кэша обложек альбомов
    db_dir=/var/lib/minidlna
    
    # Путь к папке с лог-файлами
    log_dir=/var/log
    
    # Уровень детальности лога
    # В формате log_level=источник1,источник2=значение1,источник3,источник4=значение2 ...
    # Доступные источники: "general", "artwork", "database", "inotify", "scanner", "metadata", "http", "ssdp", "tivo"
    # Возможные значения: "off", "fatal", "error", "warn", "info" or "debug"
    #log_level=general,artwork,database,inotify,scanner,metadata,info,ssdp,tivo=warn
    
    # Перечень имен файлов-обложек альбомов, разделитель: "/"
    album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg
    
    # Автообнаружение новых файлов
    # Включено по умолчанию
    inotify=yes
    
    # Поддержка устройств TiVo
    #enable_tivo=no
    
    # Строго следовать DLNA-стандарту
    # Использовать серверное масштабирование для очень больших JPEG-изображений
    # Что может снизить скорость их обработки.
    #strict_dlna=no
    
    # Адрес веб-страницы устройства
    # По умолчанию IP-адрес и заданный порт сервера
    #presentation_url=http://www.mylan/index.php
    
    # Интервал отправки SSDP-уведомлений, в секундах
    notify_interval=30
    
    # Серийный номер и номер модели DLNA-сервера, сообщаемый клиенту
    serial=12345678
    model_number=1
    
    # Путь к сокету MiniSSDPd, если установлен
    # Требуется для обеспечения работы нескольких DLNA/UPnP служб на одном сервере
    #minissdpdsocket=/run/minissdpd.sock
    
    # Контейнер, используемый в качестве корневой папки для клиентов
    #   * "." - стандартный контейнер
    #   * "B" - "Обзор папки"
    #   * "M" - "Музыка"
    #   * "V" - "Видео"
    #   * "P" - "Изображения"
    # Если задано "B" и клиент представится как аудиоплеер, в качестве корня будет использована папка "Music/Folders"
    #root_container=.
    
    # Всегда использовать заданный критерий сортировки, вместо значения, запрошенного клиентом
    #force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title
    
    # Максимальное число одновременных подключений
    # Учтите: многие клиенты открывают несколько подключений одновременно
    #max_connections=50
    8)Затем проверяем параметры init-скрипта /etc/default/minidlna:
    sudo nano /etc/default/minidlna
    Обычно корректировка не требуется. Если файл отсутствует, при первичной установке из исходников, копируем листинг:
    # Запускать демон, если задано "yes"
    START_DAEMON="yes"
    
    # Путь к файлу конфигурации
    #CONFIGFILE="/etc/minidlna.conf"
    
    # Путь к лог-файлу
    #LOGFILE="/var/log/minidlna.log"
    
    # Запуск от имени заданного пользователя и группы
    # По умолчанию: minidlna
    #USER="minidlna"
    #GROUP="minidlna"
    
    # Дополнительные ключи запуска
    DAEMON_OPTS=""
    Обычно после этого не требуется дополнительных настроек, но если есть проблемы с доступом к медиа (или хотите перестраховаться), можно настроить права доступа:

    Настройка прав доступа:
    Поскольку служба работает под пользователем с ограниченными правами, публикуемые папки и файлы должны быть доступны на чтение для всех пользователей, следовательно, иметь разрешения 644: «rw- r-- r--», для файлов и 755: «rwx r-x r-x», для папок.

    Проверяем доступность для каждой папки, заданной в minidlna.conf, командой:
    sudo -u minidlna ls -l папка
    Если папка недоступна, задаем права доступа:
    sudo chmod -R 755 папка
    Вышестоящие папки также должны быть доступны на чтение всем пользователям. Проверяем доступность на чтение каждой папки, указанной в пути. Для вышестоящих папок используем chmod без ключа -R, если не требуется сброс разрешений для всех дочерних файлов и папок.
    В качестве альтернативы смене разрешений, можно запустить MiniDLNA от имени пользователя или группы-владельца файлов. Для этого необходимо задать параметры USER и GROUP в /etc/default/minidlna, и сменить владельца папки /var/lib/minidlna командой:
    sudo chown -R пользователь:группа /var/lib/minidlna


    Запуск сервера

    Запускаем:

    sudo service minidlna force-reload


    Проверяем, работает ли служба, также смотрим параметры запуска:

    ps ax | grep minidlna


    Проверяем, слушается ли порт:

    sudo ss -4lnp | grep minidlna


    Проверяем лог:

    cat /var/log/minidlna.log


    В случае успешного старта, лог должен быть примерно следующим:

    Gothician gothician # cat /var/log/minidlna.log
    [2014/07/27 10:05:31] minidlna.c:1014: warn: Starting MiniDLNA version 1.1.3.
    [2014/07/27 10:05:31] minidlna.c:355: warn: Creating new database at /var/lib/minidlna/files.db
    [2014/07/27 10:05:31] minidlna.c:1053: warn: HTTP listening on port 8200
    [2014/07/27 10:05:31] scanner.c:706: warn: Scanning /var/lib/minidlna
    [2014/07/27 10:05:31] scanner.c:793: warn: Scanning /var/lib/minidlna finished (0 files)!
    [2014/07/27 10:05:31] playlist.c:125: warn: Parsing playlists...
    [2014/07/27 10:05:31] playlist.c:259: warn: Finished parsing playlists.
    [2014/08/03 09:25:35] minidlna.c:1053: warn: HTTP listening on port 8200


    Если видим: «WARNING: Inotify max_user_watches [8192] is low.», необходимо увеличить число дескрипторов слежения inotify до 100 000. Для этого в файл /etc/sysctl.conf добавим строки:

    #MiniDLNA warning fix
    fs.inotify.max_user_watches = 100000


    Вручную редактором:

    sudo nano /etc/sysctl.conf


    Или копипастом команды:

    sudo sh -c 'printf "\n\n#MiniDLNA warning fix\nfs.inotify.max_user_watches = 100000\n" >> /etc/sysctl.conf && cat /etc/sysctl.conf'


    Изменение параметра вступит в силу после перезагрузки системы.
    Открываем в браузере адрес.сервера:8200, видим количество файлов в библиотеке, начиная с версии 1.1.2, также отображается список подключенных клиентов.

    Настройка DLNA/UPnP-AV сервера завершена.

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

    sudo service minidlna force-reload


    Служба при этом будет перезапущена, подключенные клиенты будут отключены.

    Для сканирования медиа-библиотеки при каждом старте системы можно задать ключ запуска: "-R" в параметре DAEMON_OPTS в файле /etc/default/minidlna. Сканирование большой медиа-библиотеки существенно нагружает диск, что может замедлить загрузку системы.

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

    Все это опробовано на своей системе, пользуйтесь на здоровье. Надеюсь, количество пользователей Linux будет постоянно увеличиваться.

    По материалам http://itadept.ru/, wiki.archlinux.org.
    Share post

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 62

      +15
      Раз уж статья ориентирована на новичков, лучше с младых ногтей приучать вместо make install делать checkinstall, см. help.ubuntu.com/community/CheckInstall
      Use CheckInstall instead of just running «sudo make install», as that will likely put files all over the filesystem, with no easy way of removing them if things go wrong.
        +3
        Спасибо большое, исправил в тексте. Если есть еще какие-то замечания, напишите, пожалуйста.
          0
          а лучше уж вообще правильно пакет собрать )
          +16
          > sudo ./configure
          > sudo make

          Не делайте так никогда. Для компилирования программ с исходников достаточно прав непривилегированного пользователя.
            –4
            Вот как раз .configure без sudo не смогло выполниться
              +17
              Это ненормальное для configure поведение, и стоит разобраться, почему так происходит, а не бездумно выполнять его от рута.
                –1
                Где можно почитать насчет разобраться? Configure — это же скрипт, если он пишет в какие-то системные каталоги и дать юзеру право туда писать — это же будет неправильно… Как можно найти выход?
                  +6
                  Configure всего лишь проверяет наличие системных библиотек и утилит. Он не должен ничего никуда писать кроме как в родной каталог.
                    0
                    Убрал sudo, пусть будет сразу правильно.
                    • UFO just landed and posted this here
            +4
            Про мейк инсталл уже писали выше и наверное напишут ниже.
            Я же вомущусь — какого фига его нет в репах минта, если он есть в репах убунты…
              –2
              В Минте убунтовские репы. Такого пакета не находит. С ppa ставиться не захотело, решил не заморачиваться и поставить из исходников. Все нормально заработало.
                +4
                Странно. В прошлых версиях убунты minidlna был в основном канале, а в 14.04 перенесли в backports:
                packages.ubuntu.com/ru/trusty-backports/minidlna

                Можно включить этот канал через
                $ software-properties-gtk -> Обновления -> trusty-backports, или через редактирование /etc/apt/souces.list
              +6
              или просто google: minidlna ppa
              вот например первый попавшийся launchpad.net/~chrisfu/+archive/ubuntu/minidlna
                +7
                sudo make install

                По рукам бы вам за это надавать, чтоб никогда больше этого не писали в статьях к бинарным дистрибютивам.
                  –9
                  Предложите свой вариант. Во всех примерах идет именно sudo, вариант без приводит к ошибке копирования файлов в системные разделы. Как вариант — можно запускать консоль под root, не вижу разницы между этими вариантами.
                    +4
                    sudo checkinstall -D 
                    

                    Как минимум, никогда не используйте make install на бинарных дистрибутивах, во-первых процедура uninstall может быть не описана в make файле, может быть кривой, это заставляет хранить сорсы, загаживает систему и приводит к глюкам при обновлении пакета, собрать в пакет можно одной командой, зачем гадить себе в систему и учить этому других.
                      +1
                      Спасибо, исправил. Так как делал по руководствам, допустил такие ошибки. Надеюсь, будут еще хорошие замечания. Если что — буду исправлять текст.
                  +2
                  Кто бы написал нормальный обзор на DLNA серверы. Уже года два пытаюсь настроить чтобы все работало, все равно какая-нибудь хрень вылезает. Перепробовал Home Media Server, Universal Media Server, Plex Media Server, PS3 Media Server. Либо форматы не поддерживает, либо глючит, либо не умеет нормально в связке с DMC работать.
                  У меня пожалуй основной затык в том, что я не только фильмы хочу смотреть, но и музыку в сеть раздавать, так как у меня AV-ресивер понимает DLNA.
                    0
                    MiniDLNA отлично работает. У меня телевизор Самсунг. Plex стал и вроде работал, телевизор файлы видел, но играть не хотел. Поставил MiniDLNA — все отлично. Да, пришлось поправить конфигурационные файлы и почитать, но теперь работает как часы.
                      +1
                      У меня проблема с ними в другом. Фильмы это ерунда. А вот музыка. Есть у меня медиатека собираемая еще с 2000-х годов, в ней несколько десятков гигов музыки. Все разложено по жанрам, исполнителям, годам, альбомам, т.е. есть иерархия. И есть у меня AV-ресивер, который умеет музыку по DLNA воспроизводить. Но проблема в том, что учитывая мою организацию файлов, играть он самостоятельно может только из одной папки, а там обычно 1 альбом. Плейлисты он не умеет.
                      И тут в спецификации DLNA есть такая замечательная штука как DMC (Digital Media Controller), в дополнение к обычной паре DMS (Digital Media Server) и DMR (Digital Media Renderer). Она позволяет брать файлы из DMS и играть их на указанном DMR. И вот тут просто жесть сколько проблем. Например, у меня есть пара альбомов во FLAC. Ресивер их замечательно играет, если его самого туда направить. А вот через DMC — отказывается. Хотя mp3 играет и так и так. Короче, устойчивого воспроизведения музыки мне пока добиться не удалось.
                      DMC найти кстати тоже проблема. Есть для Android/iOS, а уже даже на винду или линукс — полтора землекопа.
                        0
                        В MiniDLNA, если не править upnpsoap.c, сразу предлагается выбор — все файлы или по папкам, так что можно настроить, чтобы предлагало все файлы. Но это, конечно, не самый лучший выход.
                          0
                          А разве FLAC входит в спецификацию DLNA?
                        0
                        Фактически выбора нет :) Или minidlna или Serviio на яве.
                        Serviio почему-то не умеет flac и тд.
                        На Самсах minidlna не умеет «продолжить воспроизведение» :(
                          0
                          Самсунговский Олшер (AllShare) в плане совместимости — корявый до жути. Сужу из личного опыта.
                          Друг купил телевизор Samsung. Ни один DMC на андроиде не смог его заставить что-либо проиграть.
                          Прошивка всего и вся на последнюю версию ничего не дала.
                          Что характерно, на заработал даже стандартный DMC, в одном из телефонов, Samsung AllShare — он предложил обновиться, но для Android 2.3 новой версии не было.
                          Через компьютер с помощью Windows Media Player и HomeMediaServer тоже ничего не получилось.
                          В то время как телевизор от LG молча все показывал и охотно взаимодействовал со всеми DLNA устройствами.
                          Спустя где-то полгода, после очередного обновления прошивки телевизора Samsung, алилуя, он начал кое-как понимать DMC на андроиде.
                          При этом как-то кособоко — в частности, если DMC отключается от сети, то телевизор прекращает проигрывание. Спрашивается — с какого перепугу?
                          Например, телевизор LG спокойно продолжает проигрывание, что очень удобно — запускаешь с телефона мультфильм детям и идешь по своим делам.
                          В общем, на текущий момент, я агитирую за покупку LG.
                            +2
                            На Philips также ужасно работает, в процессе воспроизведения может отвалиться, листать неудобно, сабы не работают и т.п. Но я вот агитирую за покупку отдельного HTPC, возможно даже в виде андроид свистка, функционал лучше любых смарттв в разы и докупается за разницу в цене между смарт и не смарт моделями.
                              0
                              Xbmc + ubuntu server хорошо сочетаются. У Debian проблемы со свежим релизом xbmc. Какую-то библиотеку никак не поделят.
                                +1
                                Вариантов реализации вагон, я вот построил на базе mac mini, но в любом случае это отдельный HTPC, все что я видел встроенным в телевизоры — полная дрянь, самого угораздило вляпаться в SmartTV год назад, следующий купленный мной телек, будет тупо экраном, все остальное лучше реализовать через отдельную приставку, если конечно телек покупается не для того чтоб смотреть рекламу по эфирному ТВ.
                                  –1
                                  Это вы кстати зря. Я вот тоже купил LG модель 2011 года. DLNA работает, но субтитры не понимает, аудиодорожки не переключает и т.п. И вот я купил на кухню свежий Samsung со SmartTV (они уже от 10к пошли). И все работает, и субтитры и дорожки и работает все быстрее. В общем платформу пилят постепенно. Хотя в плане расширяемости конечно отдельный HTPC круче. Я сам попеременно использую то DLNA на телике, то XBMC через компьютер на том же телике.
                              +1
                              У меня обратная ситуация, LG хуже чем Samsung. Но дело скорее в том, что у LG модель старше Samsung. Я думаю если взять свежие модели, и там и там будет нормально.
                                0
                                Хм, возможно — за новые ничего не скажу.
                                В моем случае оба телика 2012 года — и примерно в одной ценовой категории 600$-700$.
                              0
                              Serviio по какой-то причине не понравился, а minidlna не умеет транскод. Бида-бида.
                              0
                              Plex пока что устраивает полностью. Плюс агента добавил Kinopoisk.
                              И с планшета теперь удобно смотреть, с описаниями и постерами.
                                0
                                Музыку с ним не удобно. К моей иерархии папок он добавляет свою, папку в папке в папке. Навигация становится непростым квестом. Хотя родной клиент очень симпатичный и обложки с описаниями действительно подкупают. Вот только с сериалами и фильмами разбитыми на две части у меня как-то не получилось. Мешанина выходит.
                                  +1
                                  у меня rtorrent качает по разным папкам Фильмы/Сериалы и соответственно легко скармливается plex'ом.
                                    0
                                    Да там иерархия получается ого-го, приведу пример: Plex Media Server\Music\Музыка\By Folder\Rock\Foreign\Anneke Van Giersbergen\2013 — Drive
                                    Моя иерархия начинается после By Folder. Мне столько уровней вложнности не надо.
                                0
                                Кто бы написал нормальный обзор на DLNA серверы

                                А что его писать?
                                Год назад, когда настраивал, попробовал несколько, пришел к Minidlna.
                                Остальные гораздо более невменяемые — либо водоплавающий комбайн вертикального взлета, либо чего-то не умеет, либо собирается только с бубном из кожи девственного мамонта…
                                  0
                                  Меня лично больше всего заботит работа с DMC и возможность переключения дорожек и подмешивания внешних субтитров. Можно конечно сразу после скачивания конвертировать в правильный формат, но тогда на раздаче не повисишь.
                                –3
                                true unix way
                                  +4
                                  Часы это Conky? Можно конфиги?
                                    0
                                    Вот здесь 19-м пунктом идет про Conky. Предлагается запустить Conky Manager из меню приложений и добавить виджеты на рабочий стол.
                                  +2
                                    0
                                    serviio.org/ сам еще может кодировать налету, если клиент не поддерживает файло.
                                      +3
                                      ppa:djart/minidlna — PPA со свежим релизом, ничего собирать не нужно.
                                      За наводку на сам сервер спасибо, как раз сегодня купил новый телевизор =)
                                        0
                                        Вот я бы тоже первым шагом пошёл бы искать PPA…
                                        0
                                        Существуют разные варианты устранения этого недоразумения, но самый правильный путь — установка из исходников.

                                        Хорошо, допустим, мы выбраи «самый правильний путь» для 100 подобных приложений.
                                        Каким образом вы их потом обновлять собираетесь? :)
                                        Заранее благодарен за то, что поделитесь опытом.
                                          0
                                          Имелось в виду — отсутствие в репозитарии. Вряд ли у пользователя будет 100 приложений, требующих регулярного обновления, которых нет в репозитарии. И тут уже подсказали по поводу CheckInstall.
                                            0
                                            В репозитарии он есть, только не в стандартных :)
                                            См. комментарий выше.
                                              0
                                              Ничего не понимаю, в каких таких «не стандартных»? У меня, к примеру, ни одного PPA не добавлено в системе, и тем не менее:

                                              mikhail@jupiter ~ $ cat /etc/lsb-release 
                                              DISTRIB_ID=Ubuntu
                                              DISTRIB_RELEASE=14.04
                                              DISTRIB_CODENAME=trusty
                                              DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"
                                              
                                              mikhail@jupiter ~ $ aptitude show minidlna
                                              Package: minidlna                        
                                              State: installed
                                              Automatically installed: no
                                              Version: 1.1.2+dfsg-1~ubuntu14.04.1
                                              Priority: optional
                                              Section: universe/net
                                              Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
                                              Architecture: amd64
                                              Uncompressed Size: 482 k
                                              Depends: adduser, initscripts (>= 2.88dsf-13.3), lsb-base, libavformat54 (>= 6:9.1-1), libavutil52 (>= 6:9.1-1),
                                                       libc6 (>= 2.15), libexif12, libflac8 (>= 1.3.0), libid3tag0 (>= 0.15.1b), libjpeg8 (>= 8c), libogg0 (>=
                                                       1.0rc3), libsqlite3-0 (>= 3.5.9), libvorbis0a (>= 1.1.2)
                                              Conflicts: minidlna
                                              Description: lightweight DLNA/UPnP-AV server targeted at embedded systems
                                               MiniDLNA (aka ReadyDLNA) is server software with the aim of being fully compliant with DLNA/UPnP-AV clients. 
                                               
                                               The minidlna daemon serves media files (music, pictures, and video) to clients on your network.  Example clients
                                               include applications such as totem and xbmc, and devices such as portable media players, smartphones, and
                                               televisions. 
                                               
                                               MiniDLNA is a simple, lightweight alternative to mediatomb, but has fewer features. It does not have a web interface
                                               for administration and must be configured by editing a text file.
                                              Homepage: http://sourceforge.net/projects/minidlna/

                                                0
                                                Какое отношение ваша домашняя Убунта 14.04 и ее репозитории имеют к упомянутому в топике Linux Mint 17?
                                                  0
                                                  >Какое отношение ваша домашняя Убунта 14.04 и ее репозитории имеют к упомянутому в топике Linux Mint 17?

                                                  Примерно такое:
                                                  Linux Mint 17 is based on Ubuntu 14.04
                                                  linuxmint.com/rel_qiana_cinnamon.php

                                                  Думаю, если вы заглянете в файл /etc/apt/sources.list в Mint 17, вы будете немало удивлены ;)
                                                    0
                                                    Т.е. вы хотите сказать, что автор поста не смог найти ПО в стандартных репозиториях его собственной ОС? ;-)
                                                      +1
                                                      Я хочу сказать, что автор слегка погорячился, когда сказал, что
                                                      Существуют разные варианты устранения этого недоразумения, но самый правильный путь — установка из исходников.

                                                      Я вполне допускаю, что в Mint по дефолту отключен убунтовский universe репозиторий, но самым правильным путем было бы просто подключить его, но уж точно не собирать из сорцов. И даже PPA не понадобится, вполне достаточно стандартных убунтовских реп ;)
                                                        0
                                                        Так мой первый комментарий в дереве — о том же)
                                                          0
                                                          Так я и не на первый ваш комментарий отвечал, а на тот, где вы отсылали к PPA ;)
                                          +1
                                          Берем minidlna, берем 10 гиговый .mkv, включаем, мотаем 10 минут… иии… нет, не профит. Все повиснет.

                                          Берем Plex, и получаем перемотку/обложки/рейтинги/етс, все, кроме смены аудиодорожек :)
                                            –1
                                            Всегда было интересно. Как из английского слово repository кто-то смог получить репозитарий? Это что ли как дендрарий-бестиарий-репозитарий? Мне и на слух гораздо больше нравится репозиторий.
                                              +1
                                              но оптимальным, все же, является MiniDLNA
                                              Из каких?
                                              самый правильный путь — установка из исходников
                                              Почему?
                                                0
                                                Изменение параметра вступит в силу после перезагрузки системы.

                                                Это не так, достаточно просто написать:

                                                sudo sysctl -p
                                                
                                                  0
                                                  Кстати, сейчас minidlna ставится из репозиториев прекрасно через apt-get и замечательно работает! Спасибо большое за статью! Поставил в виртуалбокс нативное приложение LG Smartshare — телевизор его не видит. С minidlna все заработало; линукс рулит :-)

                                                  Only users with full accounts can post comments. Log in, please.