日本時間の5月7日、GWの最終日にMastodon v1.3.3がリリースされた。早速Myインスタンスをアップデートしつつ、少し環境を整えたのでメモ書き。
ディスク容量不足!?
何時ものようにgitでコードを更新した後、docker-compose buildを実行すると途中でerror。原因は容量不足で書き込めない。dfで調べると確かにもう99%使っている。
考えてみればテストも兼ね何度もDockerをup/downしているので、不要なコンテナとイメージが蓄積され、ほぼ容量を使い切っている状態だった。
とりあえず綺麗さっぱり忘れるために以下のコマンドを実行。大幅に容量が増えたのを確認。
1 2 3 4 |
# コンテナの削除 $ docker ps -aq | xargs docker rm # イメージの削除 $ docker images -aq | xargs docker rmi |
HTTP/2対応へ
アップデートが終わり、v1.3.3を起動しTootを眺めていると、HTTP/2の文字が。「そう言えばまだやっていなかったな…。」と対応することに。
ただCentOS 7で普通にyumすると、OpenSSLはv1.0.1系が入るものの、HTTP/2にするにはv1.0.2系が必要。更にnginxがそれを参照しなければならない。と言うことで面倒だがmake決定。
CentOS 7はminimalを使った関係上、開発環境が入っていない。以下必要なコマンドなどをインストール。
1 2 |
yum -y groupinstall 'Development Tools' yum -y install wget openssl-devel libxml2-devel libxslt-devel gd-devel perl-ExtUtils-Embed GeoIP-devel rpmdevtools |
次に/usr/local/srcでOpenSSLコードを展開。makeして、バイナリを入れ替える。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# cd /usr/local/src # wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz # tar zxvf openssl-1.0.2k.tar.gz # cd openssl-1.0.2k # ./config shared -fPIC # make # make test # make install # cd /usr/bin/ # cp /usr/bin/openssl /usr/bin/openssl~ # rm -f /usr/bin/openssl # ln -s /usr/local/ssl/bin/openssl # openssl version OpenSSL 1.0.2k 26 Jan 2017 |
今度はnginx。事前に./configureに指定するパラメータを現バージョンでメモしておく(configure arguments:)。
1 2 3 4 5 6 7 8 9 |
# nginx -V nginx version: nginx/1.12.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013 TLS SNI support enabled configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log . . --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' |
以降は普通のmake。先にメモした./configureのオプション最後に、
1 2 |
--with-openssl=/usr/local/src/openssl-1.0.2k \ --with-openssl-opt='-fPIC' |
この2つを加えて./configureする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# cd /usr/local/src # wget https://nginx.org/download/nginx-1.13.0.tar.gz # tar zxvf nginx-1.13.0.tar.gz # cd nginx-1.13.0 # ./configure \ --prefix=/etc/nginx \ --sbin-path=/usr/sbin/nginx \ --modules-path=/usr/lib64/nginx/modules \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ . . --with-openssl=/usr/local/src/openssl-1.0.2k \ --with-openssl-opt='-fPIC' # make # make install # nginx -V nginx version: nginx/1.13.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) built with OpenSSL 1.0.2k 26 Jan 2017 TLS SNI support enabled |
既に.confには
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
http2の記述があるのでnginxをリスタートするだけでいい。
確認はChromeの検証でNetwork / Protocolがh2になっているか(冒頭の画面キャプチャ)、nginxのaccess.logでHTTP/2.0の文字が見えればOKだ。
追記:.confのサンプルではHSTSの設定がこうなっているが、
add_header Strict-Transport-Security “max-age=31536000”;
サブドメインでインスタンスを運用する時には、includeSubdomainsを追加しないと効いてない感じだ。
add_header Strict-Transport-Security “max-age=31536000; includeSubdomains”;
Qualys SSL LABSのスコアがA-!?
いろいろ変わったので再度チェックしたところ、v1.2系でインスタンスを上げた時はA+だったのに何故かA-に落ちてしまった。違いは…と考えてみるとnginxの.confが一部異なっている。
1 2 3 4 5 6 |
# これだとA-になる ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA!RC4; # これでA+ ssl_ciphers EECDH+AESGCM:EECDH+AES; ssl_ecdh_curve prime256v1; |
ここのサンプルをそのまま使うとA-になるので、当初の内容へ戻すとA+に。これで一件落着!
余談になるが今回、安定版の1.3-stableと先行版にBranchした。新機能の購読言語指定などはこの1.3-stableには入っていない。
しかし比較的天候に恵まれたGWに何をやってるのか(笑)