GitBucketを4.23.1にUpgradeしたところjava.lang.NoSuchMethodError~Lscala/Tuple2が発生

しばらくバージョン放置気味だったGitBucketを4.23.1にUpgradeしつつ、きちんとTomcatから起動するように変更。

ところがログインして動かしていると至る所で「java.lang.NoSuchMethodError:gitbucket.core.helper.html.dropdown$.apply$default$5()Lscala/Tuple2;」が発生する。

随分と悩んだが原因は単純なところにあった。GitBucketに管理者でログインした後、SystemAdministrationにあるPuginsに異常なプラグインが。どうもデータベースの変換途中でエラーが発生したらしく「Notifications Plugin」が複数導入されている状態になっていた。重複した「Notifications Plugin」を削除したところ、正常に動作。

apt-get updateに異常に時間がかかる場合の対処法

Ubuntu 16.04LTSのapt-get updateに異常に時間がかかるので調べてみると、どうもIPv6周りの挙動に問題があるらしい。

apt-get -o Acquire::ForceIPv4=true update

上記のようにコマンドラインオプションを指定すると、強制的にIPv4を使用して接続させることが出来る。
私もこれで問題が解決した。

だがしかし、私は忘れっぽい性格なので、毎度コマンドライのプションを指定するというのは頂けない。
その場合は「/etc/apt/apt.conf.d/99force-ipv4」と言うファイルを新規に作成し、ファイルに下記の内容を記載する。

Acquire::ForceIPv4 "true";

これで都度オプションを指定せずとも、毎回IPv4を使用して動作するようになる。

参考:Force Apt-Get to IPv4 or IPv6 on Ubuntu or Debian

nginxでhttp/2(SPDY)を有効にする

サーバーが欧州にある事もあってnginxのキャッシュが機能していても結構遅い。そこでhttp/2に対応することにしました。nginxでhttp/2を有効にするのはとっても簡単。

server {
  listen 443;
  ...
}

上のlistenを、下のように書き換えるだけ。

server {
  listen 443 ssl http2;
  ...
}

その後「sudo service nginx restart」でnginxを再起動すればhttp/2が有効になります。たったこれだけなのに、今までhttp/2を有効にしていなかったとか・・・orz

http/2が有効になったことで、ページの表示完了までにかかる時間が半分以下になりました。

letsencrypt renewでunexpected error: ‘server’が発生する

常時SSLを実現するためにLetsEncryptを使用しています。サーバーの移行に伴い、旧サーバーから/etc/letsencrypt以下のファイルをシンボリックリンクも含めてすべて複製していました。問題なく動作していそうなので安心していたのですが、証明書を更新しようとすると以下のようなエラーが発生してしまいます。

~$ sudo letsencrypt renew
Processing /etc/letsencrypt/renewal/www.example.net.conf
2017-10-25 03:17:34,835:WARNING:letsencrypt.cli:Attempting to renew cert from /etc/letsencrypt/renewal/www.example.net.conf produced an unexpected error: 'server'. Skipping.

設定ファイル(www.example.net.conf)の記述内容が古いバージョンのものであることが原因のようです。/etc/letsencrypt/renewal/www.example.net.confを編集し、serverパラメータを追加します。

# Options and defaults used in the renewal process
[renewalparams]
#・・・
server = https://acme-v01.api.letsencrypt.org/directory
#・・・

[[webroot_map]]
www.example.net = /var/www

その後、あらためて「–force-renew」オプションを付けて証明書の更新をおこないます。

~$ sudo letsencrypt renew --force-renew
Processing /etc/letsencrypt/renewal/www.code-lab.net.conf
new certificate deployed without reload, fullchain is /etc/letsencrypt/live/www.code-lab.net/fullchain.pem

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/www.code-lab.net/fullchain.pem (success)

となり証明書の更新に成功しました。www.example.net.confの内容も、先ほど追記した1行以外にも大幅に書き換えられて、新しいバージョンに適合する物に更新されたようです。

参考:Fix Lets Encrypt renewal error on Ubuntu 16.04

Ubuntu 16.xでUFWを有効にする

ufw(Uncomplicated FireWall)はFiewwallソフトです。ScaleWayのSecurity Groupではデフォルトの設定を接続不可にすることができないので、安全に使用するためには別途irewallを設定することが必須です。Linuxで標準的に使われるiptablesでもよいのですが、iptablesは設定が煩雑なので、シンプルで分かりやすいufwを使うことにします。

sudo apt-get install ufw
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw default DENY
sudo ufw enable

sudo ufw enableを実行するとFirewallが有効になります。sshなどを許可しないままFirewallを有効にすると、完全にハマるので気を付けましょう。

sudo iptables -L

上記コマンドを実行すると、ufwによってiptablesがどのように設定されているか確認できます。

参考:Ubuntuのソフトウェアファイアウォール:UFWの利用