FreeBSDのportsでOpenSSLからLibreSSLに変更

LibreSSL

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

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 (変更)
#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に曲名が表示されるようになった。

いまどきのLinuxにスキャナを接続する

前回はLinuxでプリンタを利用可能にしたが、brotherのDCP-J925Nは複合機型なのでスキャナも付いている。被写界深度が浅いというか1mmでもベッドから浮くと全く読み取れないCISってやつ。色乗りも良くはないのであまり積極的には使いたいとは思わないけど無いよりははるかに良い。他のスキャナはScanSnapしか持ってないのでおもちゃの様でもフラットベッドスキャナが1つあると助かるよね。

で、プリンタを使えるようにしただけでは当然スキャナは使えないのでこの記事ではそれを使えるようにする。
Linuxでスキャナを使いたいなら基本的にはスキャナドライバとスキャニングブログラムのXSane(SANE)をインストールする。
インストールするOSは前回に引き続きLinux LiteなのでUbuntu系のLinuxではほぼ同様の筈。

スキャナドライバのインストール

Linuxでスキャナを使う 1
brotherの公式サイトでLinuxのDEBパッケージを選択。[決定]を押す。

Linuxでスキャナを使う 2
今回は64bit版のLinux Liteにインストールするので64bit版のスキャナドライバをダウンロードする。Linuxが32bit用なら当然だけど32bit版のスキャナドライバをダウンロードする。 ダウンロードするのは基本的にはこのスキャナドライバ1つだけで良い。

以下3行はターミナルで操作

$ cd ~/Downloads
$ sudo -i brscan4-0.4.4-4.amd64.deb
$ sudo brsaneconfig4 -a name=brother_DCP-J925 model=DCP-J925 ip=192.168.4.64

1行めはホームフォルダを日本語名に変更していたら cd ~/ダウンロード になる。
192.168.4.64はDCP-J925のIPアドレスとする。name=のbrother_DCP-J925の部分は好みで。model=のDCP-J925は機種名で固定。

SANEのインストール

Linuxでスキャナを使う 3
デスクトップ左下のMenuから「システム」→「Install/Remove Software」を開く。パッケージ管理ツールのSynapticが起動する。

Linuxでスキャナを使う 4
上の画像は既にXSaneをインストールした状態で撮ったものなのでチェックとかグレーアウトとか微妙に違う部分があるが、やることは以下。
Synapticの最上段の検索欄に xsane を入力して検索。
リスト表示されたxsaneの行を右クリック。「インストール指定」にマークして最上段の[適用]でインストールする。

スキャンする

Linuxでスキャナを使う 5
先ずは、XSaneを起動してみる。
デスクトップ左下のMenuからグラフィックス→XSane Image scanning programを開く。

Linuxでスキャナを使う 6
スキャナの設定を適切に変更する。
右上のビューワの部分はスキャンの出力先、ここはとりあえずビューワのままにする。
上の画像で「FlatBed」の部分は複合機の場合は使用するスキャナ(ADFとかフラットベッドとか)の選択。使いたい方を選択する。
上の画像で「24bit Color[Fast]」の部分は色数モード。DCP-J925では[Fast]が無い方の「24bit Color」を選択してスキャンするとスキャナがハングアップして電源を抜く以外に方法が無くなるので基本は「24bit Color[Fast]」のままで。
上の画像で「1200」の部分は解像度(dpi)。最近のスキャナだと600〜1200dpi程度が実用的なところかな。もちろん、解像度を上げると詳細なスキャンになるけどスキャン時間が長くなるし取得したファイルが巨大なものになる。
上の画像では「フルカラーレンジ」には赤枠を付けていないけど、どうしてもモノクロでスキャンしたいならここを変更。

適切に設定できたら右下の[スキャン]を押す。数秒以内にスキャナが動き始めることとスキャン終了後に表示される画像が正しいことを確認。

Linuxでスキャナを使う7
スキャナを使うときは画像編集アプリGIMPを使うことが多いかな。
GIMPの最上段のメニューから「ファイル」→「画像の生成」→「XSane」→「Device dialog」を開く。
1つ前の画像と同じくXSaneの画面が開くので必要があれば設定変更を行う。「スキャン」ボタンを押す。

Linuxでスキャナを使う 8
スキャンが完了するとXSaneの画面が閉じて取得した画像がGIMPに生成される。それをGIMPで編集するということになるかと。
上の画像では中央にubuntuと書かれたのが取得した画像。縮小表示になっているので小さく見えるが1200dpiだとこれで約10000x12000pxという巨大な画像で取り込まれている。

スキャナドライバがパッケージマネージャで選ぶだけのインストールではないのでLinux初心者には面倒かもしれないけど、それでもメーカーがLinux用ドライバを用意してくれているとかなり簡単だと思う。