今までDLNAサーバーとして長年mediatombを使ってきましたが、今となってはアップデートされず、先日のemerge -uDN @worldでライブラリとの整合性も合わなくなり、ついに起動すらしなくなりました。
で、mediatombの後継、Gerberaを使おうとしてハマったので、防備録。
GerberaそのものもStableになっておりませんし、Gerbera-1.4.0が要求するlibupnpのバージョンが1.8.6以上と言うことで、それもTest中。ついでにduktapeも。そこで、これら3つに~amd64のキーワードを与えます。
# cat /etc/portage/package.accept_keywords =net-misc/gerbera-1.4.0 ~amd64 >=net-libs/libupnp-1.8.3 ~amd64 dev-lang/duktape ~amd64
v
で、emerge =net-misc/gerbera-1.4.0すると、libupnpが最新版のnet-libs/libupnp-1.12.0-r1がemergeされ、Gerberaのコンパイル時にこんなエラーが出ます。
In file included from /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/server.h:38, from /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/main.cc:47: /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/request_handler.h:41:26: エラー: ‘IN’ has not been d eclared 41 | virtual void getInfo(IN const char *filename, OUT UpnpFileInfo *info) = 0; | ^~ /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/request_handler.h:41:41: エラー: two or more data type s in declaration of ‘filename’ 41 | virtual void getInfo(IN const char *filename, OUT UpnpFileInfo *info) = 0; | ^~~~~~~~ /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/request_handler.h:41:49: エラー: expected ‘)’ before ‘,’ token 41 | virtual void getInfo(IN const char *filename, OUT UpnpFileInfo *info) = 0; | ~ ^ | ) /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/request_handler.h:41:51: エラー: 変数またはフィールド ‘OUT’ が void と宣言されています 41 | virtual void getInfo(IN const char *filename, OUT UpnpFileInfo *info) = 0; | ^~~ /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/request_handler.h:41:51: エラー: メンバ宣言の最後には ‘;’ が予期されます 41 | virtual void getInfo(IN const char *filename, OUT UpnpFileInfo *info) = 0; | ^~~ | ; /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/request_handler.h:41:69: エラー: メンバ宣言の最後には ‘;’ が予期されます 41 | virtual void getInfo(IN const char *filename, OUT UpnpFileInfo *info) = 0; | ^~~~ | ; /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/request_handler.h:41:73: エラー: expected unqualified- id before ‘)’ token 41 | virtual void getInfo(IN const char *filename, OUT UpnpFileInfo *info) = 0; | ^ /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/request_handler.h:43:38: エラー: ‘IN’ has not been d eclared 43 | virtual zmm::Ref<IOHandler> open(IN const char* filename, IN enum UpnpOpenFileMode mode, IN zmm::String r ange) = 0; | ^~ /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/request_handler.h:43:53: エラー: two or more data type s in declaration of ‘filename’ 43 | virtual zmm::Ref<IOHandler> open(IN const char* filename, IN enum UpnpOpenFileMode mode, IN zmm::String r ange) = 0; | ^~~~~~~~ /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/request_handler.h:43:61: エラー: expected ‘)’ before ‘,’ token 43 | virtual zmm::Ref<IOHandler> open(IN const char* filename, IN enum UpnpOpenFileMode mode, IN zmm::String r ange) = 0; | ~ ^ | ) /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/request_handler.h:43:5: エラー: ‘IN’ declared as a ‘virtual’ field 43 | virtual zmm::Ref<IOHandler> open(IN const char* filename, IN enum UpnpOpenFileMode mode, IN zmm::String r ange) = 0; | ^~~~~~~ /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/request_handler.h:43:63: エラー: メンバ宣言の最後には ‘;’ が予期されます 43 | virtual zmm::Ref<IOHandler> open(IN const char* filename, IN enum UpnpOpenFileMode mode, IN zmm::String r ange) = 0; | ^~ | ; /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/request_handler.h:43:94: エラー: メンバ宣言の最後には ‘;’ が予期されます 43 | virtual zmm::Ref<IOHandler> open(IN const char* filename, IN enum UpnpOpenFileMode mode, IN zmm::String r ange) = 0; | ^~ | ; /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/request_handler.h:43:94: エラー: redeclaration of ‘Up npOpenFileMode RequestHandler::IN’ /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/request_handler.h:43:63: 備考: previous declaration ‘ zmm::Ref<IOHandler> RequestHandler::IN’ 43 | virtual zmm::Ref<IOHandler> open(IN const char* filename, IN enum UpnpOpenFileMode mode, IN zmm::String r ange) = 0; | ^~ /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/request_handler.h:43:109: エラー: メンバ宣言の最後には ‘;’ が予期されます 43 | virtual zmm::Ref<IOHandler> open(IN const char* filename, IN enum UpnpOpenFileMode mode, IN zmm::String r ange) = 0; | ^ ~~~~ | ; /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/request_handler.h:43:114: エラー: expected unqualified -id before ‘)’ token 43 | virtual zmm::Ref<IOHandler> open(IN const char* filename, IN enum UpnpOpenFileMode mode, IN zmm::String r ange) = 0; | ^ [7/116] /usr/bin/x86_64-pc-linux-gnu-g++ -DHAVE_AVSTREAM_CODECPAR -DHAVE_FFMPEG -DHAVE_INOTIFY -DHAVE_JS -DHAVE_LIBEX IF -DHAVE_MAGIC -DHAVE_MATROSKA -DHAVE_MYSQL -DHAVE_NL_LANGINFO -DHAVE_SETLOCALE -DHAVE_SQLITE3 -DHAVE_TAGLIB -DPACKA GE_DATADIR=\"/usr/share/gerbera\" -DPACKAGE_NAME=\"Gerbera\" -DUPNP_HAS_EXTRA_HEADERS_LIST -DUPNP_HAS_REQUEST_COOKIES -DVERSION=\"1.4.0\" -D__FILENAME__=\"src/autoscan_inotify.cc\" -I/var/tmp/portage/net-misc/gerbera-1.4.0/work/gerber a-1.4.0/src -I/usr/include/upnp -I/usr/include/mysql -I/usr/include/ffmpeg -I/usr/include/libexif -I/usr/include/ebml -I/usr/include/matroska -DNDEBUG -march=btver2 -mtune=btver2 -O3 -pipe -fomit-frame-pointer -Wall -std=c++17 -MD -MT CMakeFiles/libgerbera.dir/src/autoscan_inotify.cc.o -MF CMakeFiles/libgerbera.dir/src/autoscan_inotify.cc.o.d -o CMakeFiles/libgerbera.dir/src/autoscan_inotify.cc.o -c /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src /autoscan_inotify.cc /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/autoscan_inotify.cc: コンストラクタ ‘AutoscanInotify: :AutoscanInotify()’ 内: /var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0/src/autoscan_inotify.cc:53:17: 警告: unused variable ‘max _watches’ [-Wunused-variable] 53 | int max_watches = trim_string(read_text_file(_(INOTIFY_MAX_USER_WATCHES_FILE))).toInt(); | ^~~~~~~~~~~ ninja: build stopped: subcommand failed. * ERROR: net-misc/gerbera-1.4.0::gentoo failed (compile phase): * ninja -v -j2 -l0 failed * * Call stack: * ebuild.sh, line 125: Called src_compile * environment, line 2600: Called cmake_src_compile * environment, line 931: Called cmake_build * environment, line 910: Called eninja * environment, line 1369: Called die * The specific snippet of code: * "$@" || die "${nonfatal_args[@]}" "${*} failed" * * If you need support, post the output of `emerge --info '=net-misc/gerbera-1.4.0::gentoo'`, * the complete build log and the output of `emerge -pqv '=net-misc/gerbera-1.4.0::gentoo'`. * The complete build log is located at '/var/tmp/portage/net-misc/gerbera-1.4.0/temp/build.log'. * The ebuild environment file is located at '/var/tmp/portage/net-misc/gerbera-1.4.0/temp/environment'. * Working directory: '/var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0_build' * S: '/var/tmp/portage/net-misc/gerbera-1.4.0/work/gerbera-1.4.0'
これは、libupnpの1.8.6を使うことでエラーが出ずにemerge出来ます。
# emerge -C =net-libs/libupnp-1.12.0-r1 # emerge =net-libs/libupnp--1.8.6-r1
これで強力なインポート機能を持つmediatombの後継、Gerberaを利用することが出来るようになりました!