FreeBSDのportsでOpenSSLからLibreSSLに変更

LibreSSL

OpenSSLのTLSv1.3正式対応が秒読みかという頃になってOpenSSLからLibreSSLに替えるなんていうととち狂ってるのかと思われるかもしれないが、すぐにTLSv1.3対応は要らないだろうと思われるFreeBSDホスト数台をOpenSSLより安全性が高く無駄な贅肉を落としたLibreSSLに替えてみた。いままで替えてなかったのがバカみたいなんだけど。ただし、速度はOpenSSLの方がかなり速いという話も。

FreeBSDのportsではsecurity/opensslがOpenSSL 1.0.x系、security/openssl-develが1.1.0xとなっている。(2018年8月17日現在)
おそらく、TLSv1.3対応のOpenSSL 1.1.1が(正式に)リリースされたらsecurity/openssl-develがそれになるのかなと思っている。
現在はウェブサーバをChaCha20-Poly1305に対応させたいということでOpenSSL 1.1.0系であるsecurity/openssl-develを利用しているので、今後もOpenSSLを使い続ける予定のホストについてはsecurity/openssl-develにOpenSSL 1.1.1が来てくれるとTLSv1.3対応で苦労しなくても済むのかなという期待をしている。

しかし、FreeBSDのportsのsecurity/openssl-develは(というかOpenSSL 1.1.0系は)一部のアプリケーションと相性が悪くて自分でパッチ当てでもしなければ正常に動かない。
特に、意外とよく使うPythonのTLS系が全滅なので、それが非常に困る。パッチ無しで使おうと思ったら最悪security/opensslをインストールしているホストから/usr/local/lib/python2.7/site-packages以下から必要なファイルをコピーしてきて置き換えるという方法も使えるが、ゴマカシはあまりよろしくはないと思う。

LibreSSLのFreeBSD用portsはsecurity/libresslとsecurity/libressl-develで、2018年8月17日時点ではsecurity/libresslがLibreSSL 2.7.4、security/libressl-develがLibre2.8.0となっている。OpenSSL 1.1 API対応はLibreSSL 2.7系からなのでどちらでも良さそう。
security/libressl, security/libressl-develともに他のportsとの相性は目立って悪いということは無い様子。PythonのTLS関係も正常に動くっぽい。
そこで、今回はsecurity/libressl-develを採用。

インストール済みportsをLibreSSL対応に再ビルド

/etc/make.conf (変更)
1
2
3
4
#DEFAULT_VERSIONS+=ssl=openssl-devel
DEFAULT_VERSIONS+=ssl=libressl-devel
#OPENSSL_PORT=security/openssl-devel
OPENSSL_PORT=security/libressl-devel
# pkg update && portsnap fetch update && portsdb -uU     パッケージ情報とportsツリーを最新状態に更新
# portupgrade -fo security/libressl-devel security/openssl-devel    これでOpensslからLibreSSLに切り替え
# portupgrade -fr libressl-devel                   LibreSSLとLibreSSLに依存するportsを更新

curlの再ビルド

おそらくcurlは再ビルドに失敗するはず。(インストールしていたらだけど)

/etc/make.conf (追記1行)
ftp_curl_UNSET= TLS_SRP
# portupgrade -fr curl      curlとcurlに依存するportsを更新

上のportsupgradeが失敗する場合は以下。

# rm -R /var/db/ports/ftp_curl
# pkg delete curl                     
	ここでcurlに依存するportsも削除するメッセージが出るのでそのportsリストをメモる。
	削除するにはy で同意する。
# cd /usr/ports/ftp/curl
# make install
	ビルドオプションは基本的には変更無しで

	同様に先ほど削除した他のportsをインストールする。

portsをアンインストールしても基本的には設定ファイルやデータは残っているので再インストール後もそのまま利用できる筈だが、どうしても心配ならアンインストール前にバックアップしておく。

Pythonとそのモジュールも強制再帰更新 portupgrade -fr hoge しておくのが無難かも。

必要なports更新が全部完了したら少なくともウェブサーバやメールサーバなどTLSに関係しそうなサービスを再起動する。面倒ならシステム再起動。
このときLibreSSLの依存関係を適切に満たさないままサービスを再起動しようとすると起動に失敗し、適切な再ビルド対応が終わるまで長時間のサービスのダウンタイム発生に繋がるのでports更新漏れや更新失敗が発生していないか目を光らせておく。
同じ理由で、ports更新前にサービスを停めてからports更新しようとすると大きなダウンタイム発生になるので更新し終わるまでサービスを停めない。
ただし、デーモンとして動くプログラムではなく、バッチ処理のスクリプト等や処理中にコマンドを呼び出して実行するプログラムがあって、その呼び出される側が更新対象に入っているなら呼び出す側を更新前に停めておく方が安全。(←とても迂闊な「がとらぼ」の中の人への言い聞かせ用)

Linuxでオーディオファイルにタグを付ける (ファイル名から)

Volumioでは以前は音楽ファイルにタグ情報(ID3)が登録されていない音楽ファイルは曲名としてファイル名をデータベースに取り込み表示していた。
久しぶりにVolumioのデータベースを更新したらタグ情報のない音楽ファイルは全てタイトルが「 - 」(ハイフン)になってしまった。
「データベースをアップデート」と「再スキャン」のどちらでも同じ結果になるので楽曲情報の管理がそのように変更されたのだろう。

ファイル名からタグを付ける 1
タグが登録されていない曲は全て「 - 」になっているのでどれが何の曲なのかさっぱりわからない。

ここ10年程度(もっと?)にCDをリッピングしたものはリッピングアプリがCD情報のデータベースサービス(CDDB)にアクセスして自動的にタグ情報を付けてくれているので特に不都合はないのだが、リッピングアプリがタグ情報に対応していないくらい昔にリッピングしたWAVE(WAV)ファイルやレコードを取り込んだファイルなどは楽曲の情報はファイル名頼りだったりする。これが軒並み「 - 」で表示されるともう何がなんだかわからない。
そこで、ファイル名を元にタグ情報を付けることにする。手作業で1曲ずつタグを入れるというのは数千曲もあるとよほどの根気がないと無理なので一括で変換する。もちろん、そのためのファイル名の付け方のルールは統一されているものとする。 なお、WAVEファイルそのままはさすがにアレなのでタグ付け前にFLACに変換した。その変換についてはこの記事では省略。FLACにするのはWAVEにタグを付けたらダメということではなくファイルサイズの問題ね。

今回はタグ情報を付けるアプリはEasyTAGとする。Linuxではおそらく定番なので各ディストリビューションのアプリケーション管理アプリでeasytagを検索すれば簡単にインストールできる筈。以下はEasyTAGを起動して楽曲のあるフォルダを開いたところから。

ファイル名からタグを付ける 2
EasyTAGのメイン画面、左列がディレクトリツリー、中央列が選択したディレクトリのファイルリスト、右列が楽曲ファイル(複数ファイル選択時は最初の1ファイル)に登録されているタグ情報。
上の画像では中央列の1番上の水色行のファイルは右列が全て空白なのでタグが何も登録されていないというのがわかる。中央列の他のファイルを選択すると右列の情報が更新されてその選択ファイルのタグが表示される。今回はすべての楽曲でタグは登録されていない。

ファイル名からタグを付ける 3
メイン画面の最上段のView→Show Scannerをクリック。

ファイル名からタグを付ける 4
スキャン画面が開くので最上段の「フィールドを編集する」タブを選択。
ファイル名からタグに変換するルールとして「 _ 」(アンダーバー)は半角空白に変換するを選択する。(初期値の筈) これはファイル名の付け方のポリシーによるので、「いつの時代のやり方だよ、いまどきファイル名の空白替りにアンダバーなんか使わないよ」ということであればDo not convertを選択。

この記事でタグ付けするファイル名は次の命名ルールとする。
アーティスト名_-_リリース年_題名.flac

ファイル名からタグを付ける 5
スキャン画面の最上段の「タグを付与する」タブを選択。
その下は凡例にある変数を参考にファイル名をどのように分割するかを指定。上の画像の例であれば%a - %b/&n-%tとなっているが、最初のハイフンまでが%aのアーティスト名、ハイフンの次が%bでアルバム名の筈だが/ が邪魔をして認識無し、/ を指定するとファイル名の最初に戻るらしく、最初のハイフンまでが%nでトラック番号、ハイフンの後がすべて%tのタイトルとして認識される。当然だがこれは現状のファイル名とタグの対応ルールとしては不適切なので適当に変更する。変更した結果は逐次その下の赤枠部分に表示される。

ファイル名からタグを付ける 6
今回は対応ルールとしては%a_-_%y_%tとした。正直アンダーバーは2つ前の手順で空白扱いにすることにしたので指定する必要はないが今回は書いている。これで%aに正しくアーティスト名が入り、%yにリリース年が入り、%tに曲の題名が入った(上の画像の赤字の↑部分)
正しく対応付けできたら右下の「Scan Files」ボタンを押す。

ファイル名からタグを付ける 7
選択していたファイルについて、右列のタグ情報に「タイトル」「演奏者」(アーティスト)、製作年(リリース年)が入るのを確認する。
問題なければ以下。
1. 中央列の全ファイルを選択。
2. スキャン画面の右下の「Scan Files」をクリック。これで選択した全ファイルにファイル名に対応したタグが付けられる。
3. 中央列で1つずつファイルを選択して右列のタグ情報が正しく入っているか確認。中央列のファイルを再度全選択する。
メイン画面の上段の保存ボタンをクリック。これでタグ情報がファイルに書き込まれる。
逆に、保存ボタンを押すまでは右列に表示されるタグ情報はファイルには書き込まれていないのでトライ&エラーは好きなだけできる。

タグ情報を書き込んだファイルをファイルサーバに置くとかVolumioに転送するなどして、Volumioのデータベースを更新(または再スキャン)する。

ファイル名からタグを付ける 8
上のルールとは違うが、こんな感じでVolumioに曲名が表示されるようになった。

関連記事:
Up