Debian jessie に java8 をインストールする

Synology の NAS に OpenHAB2 をインストールするのに、java8 が必要なことが分かった。簡単ではなかったので、記録に残しておく。

環境は Synology DS216j, DSM 6.2.1, Debian Chroot 8.4-7, Debian 8.11 (jessie) である。この環境で java8 をインストールするということは、oracle-java8-installer や oracle-java8-set-default をインストールすることではなく、openjdk-8-jdk をインストールすることを意味する。

openjdk-8-jdk は通常のセットに入っておらず、backports に入っているので、これを追加する (debian - Failed to fetch jessie backports repository - Unix & Linux Stack Exchange)。

# echo "deb [check-valid-until=no] http://archive.debian.org/debian jessie-backports main" | tee /etc/apt/sources.list.d/backports.list

apt の更新をオプション付きで実行する。

# apt -o Acquire::Check-Valid-Until=false update

このオプションをつけないと、backports のところでエラーになる。このエラーは通常の更新では問題にならないが、エラーを見たくない場合は /etc/apt/apt.conf を新規に作成して、中にこのオプションを書き込んでおくという方法がある。ただし、毎回すべての更新に対して適用されるので注意が必要である。

# echo "Acquire::Check-Valid-Until "false";" | tee /etc/apt/apt.conf

さて、いよいよ openjdk-8-jdk をインストールすることになるが、これもオプションなしで実行するとエラーになる。

# apt install openjdk-8-jdk
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 openjdk-8-jdk : Depends: openjdk-8-jre (= 8u171-b11-1~bpo8+1) but it is not going to be installed
                 Depends: openjdk-8-jdk-headless (= 8u171-b11-1~bpo8+1) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

そこで次のようにオプション付きで実行する (docker - Trouble in installing Openjdk-8 in Debian Jessie - Stack Overflow)。

# apt install -t jessie-backports openjdk-8-jdk
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  adwaita-icon-theme at-spi2-core ca-certificates-java fontconfig fonts-dejavu-extra glib-networking glib-networking-common glib-networking-services gsettings-desktop-schemas
  hicolor-icon-theme java-common libasound2 libasound2-data libasyncns0 libatk-bridge2.0-0 libatk-wrapper-java libatk-wrapper-java-jni libatk1.0-0 libatk1.0-data libatspi2.0-0
  libcairo-gobject2 libcroco3 libdatrie1 libdrm-amdgpu1 libdrm-freedreno1 libdrm-nouveau2 libdrm-radeon1 libdrm2 libflac8 libgdk-pixbuf2.0-0 libgdk-pixbuf2.0-common libgif4
  libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libgraphite2-3 libgtk-3-0 libgtk-3-bin libgtk-3-common libgtk2.0-0 libgtk2.0-bin libgtk2.0-common libharfbuzz0b libice-dev libice6
  libjasper1 libjson-glib-1.0-0 libjson-glib-1.0-common libllvm3.8 libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpcsclite1 libproxy1 libpulse0 librest-0.7-0 librsvg2-2
  librsvg2-common libsensors4 libsm-dev libsm6 libsndfile1 libsoup-gnome2.4-1 libsoup2.4-1 libthai-data libthai0 libtxc-dxtn-s2tc0 libwayland-client0 libwayland-cursor0
  libx11-xcb1 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-sync1 libxcomposite1 libxcursor1 libxdamage1 libxfixes3 libxi6 libxinerama1 libxkbcommon0 libxrandr2
  libxshmfence1 libxt-dev libxt6 libxtst6 libxxf86vm1 openjdk-8-jdk-headless openjdk-8-jre openjdk-8-jre-headless xkb-data

これで完了である。

AbemaTV の動画をダウンロードしたい

ABEMA | テレビ&ビデオエンターテインメント大友克洋AKIRA が配信されるという。期間限定で、見る時間がない。後で見たいのでダウンロードしたい。Streamlink を使うとできるようだ。Windows 版については詳しい解説がある (AbemaTVをStreamlinkで直接録画・ダウンロードする | つくみ島だより)。

環境は MacOS 10.11.6 El Capitan である。

Streamlink をインストールする方法が案内されているが (Installation — Streamlink 1.4.1 documentation)、以下のように SSL のエラーが出てしまう。

$ sudo easy_install -U streamlink
Searching for streamlink
Reading https://pypi.python.org/simple/streamlink/
Download error on https://pypi.python.org/simple/streamlink/: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) -- Some packages may not be found!
Couldn't find index page for 'streamlink' (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading https://pypi.python.org/simple/
Download error on https://pypi.python.org/simple/: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) -- Some packages may not be found!
No local packages or download links found for streamlink
error: Could not find suitable distribution for Requirement.parse('streamlink')

Homebrew でのインストール方法もあるが試していない。今のところ MacPorts には登録がなかった。

$ sudo port install streamlink
Error: Port streamlink not found

諦めようと思ったが、pip で成功した。

pip install streamlink
Defaulting to user installation because normal site-packages is not writeable
Collecting streamlink
  Downloading streamlink-1.4.1-py2.py3-none-any.whl (382 kB)
     |████████████████████████████████| 382 kB 7.0 MB/s 
...
Successfully built iso-639
Installing collected packages: isodate, iso-639, websocket-client, pycryptodome, iso3166, PySocks, certifi, chardet, idna, requests, streamlink
Successfully installed PySocks-1.7.1 certifi-2020.4.5.1 chardet-3.0.4 idna-2.9 iso-639-0.4.5 iso3166-1.0.1 isodate-0.6.0 pycryptodome-3.9.7 requests-2.23.0 streamlink-1.4.1 websocket-client-0.57.0

streamlink コマンドの一番簡単な使い方は次の通り (GitHub - streamlink/streamlink: Streamlink is a CLI utility which pipes video streams from various services into a video player)。このようにオプションをつけないで起動すると、ローカルの動画プレーヤー (例えば VLC) が起動する。

$ streamlink STREAMURL best

STREAMURL には動画の URL を入力する。最後の best は画質の指定で、配信されている画質の中から指定する。例えば、streamlink でダウンロードを始めると Available streams: 180p (worst), 240p, 360p, 480p, 720p, 1080p (best) のように表示されるので、この中から選択する。best は最高画質ということで、この場合は 1080p と指定するのと同じである。配信によって最高画質は異なる。2時間の映画の場合、1080p だと容量が 2 GB 超えしてしまうので、720p 程度にしている。このあたりはお好みで。

オプション -o とファイル名をつければ、そのファイル名でダウンロードできる。AbemaTV は TS フォーマットで配信されているので、ファイル名の拡張子には「.ts」をつけている。

$ streamlink https://abema.tv/video/episode/13-116_s0_p1 best -o "AKIRA.ts"

720p でダウンロードしたところ、容量は 1.01 GB になった。

Mac で Domoticz が動かない

Mac で Domoticz を起動しようとしたら,エラーになってしまった。

$ domoticz 
dyld: Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
  Referenced from: /Users/naganuma/domoticz/domoticz
  Reason: image not found
Trace/BPT trap: 5

ライブラリを確認してみると,確かに libssl.1.0.0.0.dylib がなく,代わりに libssl.1.1.dylib がある。

$ ls /usr/local/opt/openssl/lib/libssl.*
libssl.1.1.dylib  libssl.a          libssl.dylib

インストールされている OpenSSL のバージョンを確認すると次のようになっている。

$ port installed openssl
The following ports are currently installed:
  openssl @1.0.2r_0
  openssl @1.0.2s_0
  openssl @1.1.1d_0 (active)

そこで,OpenSSL をダウングレードしてやることにした (mac osx - Downgrade Package in Macports - Server Fault)。

$ sudo port activate openssl @1.0.2s_0
--->  Computing dependencies for openssl
--->  Deactivating openssl @1.1.1d_0
--->  Cleaning openssl
--->  Activating openssl @1.0.2s_0
--->  Cleaning openssl

確認する。

$ port installed openssl
The following ports are currently installed:
  openssl @1.0.2r_0
  openssl @1.0.2s_0 (active)
  openssl @1.1.1d_0

これで起動することができた。

$ domoticz 
2020-04-11 17:07:22.373  Domoticz V3.5877 (c)2012-2016 GizMoCuz
2020-04-11 17:07:22.373  Build Hash: 15b013c, Date: 2016-11-11 00:44:33
2020-04-11 17:07:22.373  Startup Path: /Users/naganuma/tmp/domoticz/
2020-04-11 17:07:22.417  Active notification subsystems: http (1/12)
2020-04-11 17:07:22.420  WebServer(HTTP) started on address: :: with port 8080
2020-04-11 17:07:22.435  Error: WebServer(SSL) startup failed on address 0.0.0.0 with port: 443: bind: Permission denied
2020-04-11 17:07:22.435  Error: WebServer(SSL) check privileges for opening ports below 1024
2020-04-11 17:07:22.435  Proxymanager started.
2020-04-11 17:07:22.436  Starting shared server on: :::6144
2020-04-11 17:07:22.436  TCPServer: shared server started...
2020-04-11 17:07:22.436  RxQueue: queue worker started...
2020-04-11 17:07:24.448  EventSystem: reset all events...
2020-04-11 17:07:24.448  EventSystem: reset all device statuses...
2020-04-11 17:07:24.448  EventSystem: Started

DS video アプリで探せない動画

DS video は、Synology NAS に保存した動画を見るための iOS アプリである。DS video はよくできたアプリだが、探せない動画があるという欠点がある。バグかというと微妙なところ。

動作環境は Synology DiskStation DS216j、DS video 3.4.3、DS file 5.13.1 である。

動画は、GYAO で公開中の映画「グエムル -漢江の怪物-」で、ffmpeg でダウンロードしたものを DS216j に保存した。ファイル名は「グエムル -漢江の怪物-.ts」で、フォーマットは MPEG2-TS である。

ほとんどの動画はファイル名で検索できるのだが、「グエムル -漢江の怪物-.ts」は検索結果に出てこないのである。「すべて」で動画のリスト一覧を表示させると、タイトルが「The Host」となっていることが分かった。そして「Host」で検索すればヒットした。「The Host」は「グエムル -漢江の怪物-」の英語タイトルである。タイトルの「The Host」をタップすると、映画の英語での説明が表示された。

f:id:nlogn:20200329134750j:plainf:id:nlogn:20200329134820j:plain
The Host
ジャケットはヒョンソが怪物に捕まっている場面で、灰色の写真はヒョンソが幼い子供と一緒に溝に捕らえられている場面である。

Gang-du is a dim-witted man working at his father's tiny snack bar near the Han River. Following the dumping of gallons of toxic waste in the river, a giant mutated squid-like appears and begins attacking the populace. Gang-du's daughter Hyun-seo is snatched up by the creature and he and his family are taken into custody by the military, who fear a virus spread by the creature. In detention, Gang-du receives a phone call from Hyun-seo, who is not dead, merely trapped in a sewer. With his family to assist him, he sets off to find Hyun-seo.

英語の説明も、この映画の説明になっていた。

Delicious ブックマークを Diigo にインポートする場合の方法

GitHub - szafranek/delicious-exporter: Ruby script for exporting public bookmarks from del.icio.us を使って Delicious ブックマークをエクスポートすると,非公開のブックマークには ___private というタグがつく。
Diigo にインポートする場合,インポート時に「Public (すべて公開)」「Private (すべて非公開)」「Keep (属性にしたがう)」の3つが選べる。Diigo は ___private というタグを認識しないので,「Keep」を選択した場合はすべて「非公開」になる。Diigo のブックマークの形式は,非公開ブックマークの HTML 属性が PRIVATE="1",公開ブックマークの HTML 属性が PRIVATE="0" となるので,Delicious からエクスポートするときにこの形式にしてしまった方がよい。
delicious-exporter.rb のソースファイルを編集して,

  unless el.css("li.privateText").empty?
    tags << "___private"
  end
  tags_str = tags.join(",")
  %Q(<DT><A HREF="#{url}" ADD_DATE="#{add_date}" LAST_VISIT="#{add_date}" LAST_MODIFIED="#{add_date}" TAGS="#{tags_str}">#{title}</A>#{description_str}\n)

の部分を次のように書き換える。

  unless el.css("li.privateText").empty?
    private = 1
  else
    private = 0
  end
  tags_str = tags.join(",")
  %Q(<DT><A HREF="#{url}" ADD_DATE="#{add_date}" LAST_VISIT="#{add_date}" LAST_MODIFIED="#{add_date}" TAGS="#{tags_str}" PRIVATE="#{private}">#{title}</A>#{description_str}\n)

保存して Delicious が死にそうなのでブックマークをエクスポート - カラクタリ・コラクリ と同じように実行してやれば Diigo 形式でエクスポートされる。

Delicious が死にそうなのでブックマークをエクスポート

ソーシャルブックマークの Delicious が Pinboard に買収されたそうだ。
Deliciousさん、今度こそサヨナラ:Yahooに始まる5度の買収、長きにわたる大惨事から学ぶ – TechDoll.
Delicious のブックマークは Pinboard にエクスポートできるらしいが,有料になるとのこと。期限は6月15日。
そんなことしなくても直接エクスポートしておけばいいではないかと思って,Delicious にログインして Profile→Settings→Export とたどってみると,次のメッセージが表示された。

We're sorry, but due to heavy load on our database we are no longer able to offer an export function. Our engineers are working on this and we will restore it as soon as possible.

自力で保存するしかないが,手作業では膨大な時間がかかってしまう。調べてみると,ブックマークを保存するための Ruby プログラムが Github で公開されていた。
GitHub - szafranek/delicious-exporter: Ruby script for exporting public bookmarks from del.icio.us からソースをダウンロードして展開。Mac ならば MacPorts か Homebrew で Ruby をインストールしておいて,次のコマンドを起動する。

$ ruby export.rb -u Username -p Password -o delicious.html

Username と Password は自分のものを使い,保存先のファイル名 delicious.html はお好みで。
600個弱のブックマークのエクスポートが完了した。ありがたい。
これをどこに移転するかが問題だ。

はてなブックマークの bookmarklist が「見つかりません」になった

はてなブックマークには,指定したブログについたブックマークを一覧できる機能がある。
b.hatena.ne.jp/bookmarklist?url=ブログのURL
例えば,はてなブックマーク全体だったら次のように指定する。
b.hatena.ne.jp/bookmarklist?url=http://b.hatena.ne.jp/
しかし,最近になって「404 Not Found おさがしのページは見つかりませんでした」と表示されるようになってしまった。

障害なのか,仕様変更なのか。アナウンスされていないので,はてなの中の人が何かやっちまったのではないかと思うのだが,どうだろうか。