Mediatomb DLNAサーバーのコンソール管理

長い間、私はMediatombをホームDLNAサーバーとして使用しています。 これは非常に信頼性が高く軽量なサーバーであり、DLNAをサポートする任意のデバイスからvideo-audio-photoアーカイブにアクセスできます。

Mediatombには、指定されたサーバーの制御下でメディアデータを含むディレクトリを追加できるインタラクティブなWEBインターフェイスがあります。 ただし、コンソールではなく、このサーバーのコンソール管理の可能性が必要でした。特に、メディア情報を含むフォルダーを追加および削除する必要がありました。 残念ながら、システムはこれらの操作のための通常のツールを提供していません。そのため、CURLに基​​づいて小さなスクリプトが作成されました。



おそらく、行われた作業は他の誰かが必要とする可能性があるため、Habréで再現することにしました。



実際には、初期条件、すなわち:





ここでは説明しませんが、Mediatombによって制御されるメディアディレクトリを管理するbashスクリプトを作成する手順に直接進みます。



Mediatombデータベースにアクセスするための追加のMYSQLユーザーを作成する



実際、MYSQLに新しいユーザーを追加する特別な必要はありません。/etc/mediatomb/config.xml構成ファイルで指定されたユーザーの詳細を使用できます。



<mysql enabled="yes"> <host>localhost</host> <username>mediatomb</username> <database>mediatomb</database> </mysql>
      
      





ただし、既存のmediatombユーザーにパスワードなく、そのアクセスはlocalhostのみに制限されているため、Mediatomb自体が存在する場所とは異なるホストでも機能するスクリプトの場合、MySQLデータベースmediatombにmtパスワードを持つユーザーmtを作成します。



 reate user 'mt'@'%' identified by 'mt'; grant select on mediatomb.* to 'mt'@'%';
      
      





Mediatombライブラリにディレクトリを追加する



Mediatombメディアライブラリに再帰的な走査を有効にしてディレクトリを追加すると、ブラウザは次のリクエストをサーバーに送信します。



 http://<mediatomb_ip>:50500/content/interface?req_type=autoscan&return_type=xml&sid=33a2c429c3c4c82e03baca9564f05908&action=as_edit_save&object_id=2f6d6e742f566964656f&from_fs=1&scan_mode=inotify&scan_level=full&recursive=true&hidden=true&cancel=Cancel
      
      





ご覧のとおり、カタログを追加するために何らかの方法で計算する必要がある、必要なクエリ属性は次のとおりです。





セッションID 、簡単に取得できることが判明しました。 Mediatombメインページに初めてアクセスすると、ブラウザは次のリクエストを送信します。



 http://<mediatomb_ip>:50500/content/interface?req_type=auth&return_type=xml&sid=null&action=get_sid
      
      





そして答えを得る:



 <?xml version="1.0" encoding="UTF-8"?> <root sid_was_valid="0" sid="a8ffd95c341aa410a44afaeaf354e105" logged_in="1" success="1"/>
      
      





したがって、sidで文字列を取得すると同時に、次のように引用符から解放します。



 sid=`curl -s "http://<mediatomb_ip>:50500/content/interface?req_type=auth&return_type=xml&sid=null&action=get_sid" | grep sid | awk '{print $3}' | sed -e 's/\"//g'`
      
      





オブジェクト識別子がもう少し複雑なため、文字列2f6d6e742f566964656fは、追加されたオブジェクト(ファイルおよびディレクトリ)へのパスが16進数に変換された文字列の単純なバイトシーケンスであることがわかりました。 16進数の行は、行/ mnt / Video (Mediatombに追加したディレクトリ)だけです。



つまり たとえば、bashスクリプトの2番目のパラメーターからobject_Idを取得するには、次のアルゴリズムを使用できます。



 catalog=$2 oid="" for ((i=0;$i<${#catalog};i=$(($i+1)))) do sym=`printf '%0.2x' "'${catalog:$i:1}"` oid=$oid$sym done
      
      





CURLリクエストで上記のすべてを収集すると、MediaTombライブラリに/ mnt / Videoディレクトリを追加するコマンドが取得されます。



 curl -s -o /dev/null "http://<mediatomb_ip>:50500/content/interface?req_type=autoscan&return_type=xml&$sid&action=as_edit_save&object_id=$oid&from_fs=1&scan_mode=inotify&scan_level=full&recursive=true&hidden=true&cancel=Cancel"
      
      





Mediatombライブラリからディレクトリを削除する



Mediatombライブラリからディレクトリを削除することは、次の追加に似ています。



 http://<mediatomb_ip>:50500/content/interface?req_type=remove&return_type=xml&sid=ea2d65d2dbc72d96ed1ed37dc1d2bbf6&object_id=686994&all=0&updates=check
      
      





ただし、ここのobject_idはすでに、MYSQLデータベースで削除するリソースの識別子です。 次のSQLクエリを使用して、データベースから、たとえば/ mnt / Videoディレクトリのobject_idを取得できます。



 select id from mt_cds_object where location="D/mnt/Video"
      
      





したがって、bashスクリプトの2番目の引数からディレクトリ識別子を取得すると、次のようになります。



 catalog=$2 oid=`echo "select id from mt_cds_object where location=\"D$catalog\"" | mysql mediatomb | grep -v id`
      
      





また、メディアライブラリからディレクトリを削除するためのCURLリクエスト:



 curl -s -o /dev/null "http://<meditomb_ip>:50500/content/interface?req_type=remove&return_type=xml&$sid&object_id=$oid&all=0&updates=check"
      
      





まあ、それがおそらくすべてです。 最後に、2つのパラメーターを取るmtombスクリプトの全文を提供します。



 mtomb <add | del> <  >
      
      





バッシュコード:
 #!/bin/bash cmd=$1 catalog=$2 mediatomb_ip=192.168.7.10 mtombdb="mysql -h $mediatomb_ip mediatomb -umt -pmt" #            if [ "${catalog:(-1):1}" = "/" ]; then catalog=${catalog:0:(-1)} fi if [ "$cmd" = "add" ]; then echo "Try add $catalog in mediatomb" #  object_id (   16- ) oid="" for ((i=0;$i<${#catalog};i=$(($i+1)))) do sym=`printf '%0.2x' "'${catalog:$i:1}"` oid=$oid$sym done #  SID (Session ID) sid=`curl -s "http://$mediatomb_ip:50500/content/interface?req_type=auth&return_type=xml&sid=null&action=get_sid" | grep sid | awk '{print $3}' | sed -e 's/\"//g'` #   if [ -a "$catalog" ]; then curl -s -o /dev/null "http://$mediatomb_ip:50500/content/interface?req_type=autoscan&return_type=xml&$sid&action=as_edit_save&object_id=$oid&from_fs=1&scan_mode=inotify&scan_level=full&recursive=true&hidden=true&cancel=Cancel" else echo "Nothing to add..." fi fi if [ "$cmd" = "del" ]; then echo "Try delete $catalog from mediatomb" #  SID (Session ID) sid=`curl -s "http://$mediatomb_ip:50500/content/interface?req_type=auth&return_type=xml&sid=null&action=get_sid" | grep sid | awk '{print $3}' | sed -e 's/\"//g'` #       (object_id) oid=`echo "select id from mt_cds_object where location=\"D$catalog\"" | $mtombdb | grep -v id` #   if [ -n "$oid" ]; then curl -s -o /dev/null "http://$mediatomb_ip:50500/content/interface?req_type=remove&return_type=xml&$sid&object_id=$oid&all=0&updates=check" else echo "Nothing to delete..." fi fi
      
      







GISTリンク: https : //gist.github.com/mitshel/6b140467182c3377c000




All Articles