WSL 上で Ubuntu 16.04 -> 18.04 にあげてみた
Tags: wsl, ubuntu
Published: 2020-03-26 00:36:52

Windows Subsystem for Linux の Ubuntu 16.04 LTS をずっと使っていましたが、そろそろ環境を一新したいと思い、Ubuntu 18.04 LTS にアップグレードすることにしました。

その時の作業ログと嵌った内容をメモしていきます。

# 環境

* PC OS: Windows 10 Pro
* 作業 OS: Ubuntu 16.04 LTS (Windows Subsystem for Linux)

# パッケージ更新

18.04 LTS にあげる前に既存のパッケージを 16.04 LTS の最新にアップデートしていきます。
コマンドはこんな感じ

```
$ sudo apt-get update -y
$ sudo apt-get upgrade -y
```

# mysql-server 5.7 アップデートのエラー対応

パッケージ更新前の mysql version はメモしてなかったので忘れてしまったのですが、Xenial 標準なので 5.7 のはず。
そのため、特に問題は起きないだろうと思っていたら、いきなり嵌りました。

## /var/run/mysql/mysqld.sock に繋がらないというエラー

エラーはこんな感じ

```
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)
```

touch コマンドで mysqld.sock 作成したり、/var/run/mysqld の権限変更しても全くダメで、/etc/mysql/mysql.conf.d/mysqld.conf の sock パスを /tmp/mysql/mysqld.sock などにしてみたけど駄目でした。

全く原因がつかめなかったので、一度 mysql-server と mysql-server-5.7 を uninstall することにしました。
uninstall は purge 付きでまっさらに。

```
$ sudo apt-get remove --purge mysq-server-5.7 mysql-server
```

## post-installation スクリプトエラー

改めて mysql を再インストールすると、こんどは post-installation スクリプトでエラーが発生。

```
$ sudo apt-get install mysql-server-5.7
mysql-server-5.7 (5.7.25-0ubuntu0.16.04.2) を設定しています ...
invoke-rc.d: could not determine current runlevel
 * Stopping MySQL database server mysqld                                                                                                                [ OK ]
invoke-rc.d: could not determine current runlevel
invoke-rc.d: could not determine current runlevel
 * Stopping MySQL database server mysqld                                                                                                                [ OK ]
dpkg: パッケージ mysql-server-5.7 の処理中にエラーが発生しました (--configure):
 サブプロセス インストール済みの post-installation スクリプト はエラー終了ステータス 1 を返しました
処理中にエラーが発生しました:
 mysql-server-5.7
```

/var/lib/dpkg/info/mysql-server-5.7.postinst を覗いた感じだと、バージョンアップに伴う migrate なども実行している模様。
というわけで /var/log/mysql/error.log を見ると

```:/var/log/mysql/error.log
2019-04-07T11:37:22.245232Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-04-07T11:37:22.249995Z 0 [Note] mysqld (mysqld 5.7.25-0ubuntu0.16.04.2) starting as process 9312 ...
2019-04-07T11:37:22.261040Z 0 [Note] InnoDB: PUNCH HOLE support available
2019-04-07T11:37:22.261120Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2019-04-07T11:37:22.261133Z 0 [Note] InnoDB: Uses event mutexes
2019-04-07T11:37:22.261145Z 0 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
2019-04-07T11:37:22.261156Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.8
2019-04-07T11:37:22.261167Z 0 [Note] InnoDB: Using Linux native AIO
2019-04-07T11:37:22.261586Z 0 [Note] InnoDB: Number of pools: 1
2019-04-07T11:37:22.261764Z 0 [Note] InnoDB: Using CPU crc32 instructions
2019-04-07T11:37:22.267945Z 0 [ERROR] InnoDB: Linux Native AIO interface is not supported on this platform. Please check your OS documentation and install appropriate binary of InnoDB.
2019-04-07T11:37:22.267982Z 0 [Note] InnoDB: You can disable Linux Native AIO by setting innodb_use_native_aio = 0 in my.cnf
2019-04-07T11:37:22.267996Z 0 [Warning] InnoDB: Linux Native AIO disabled.
2019-04-07T11:37:22.270010Z 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M
2019-04-07T11:37:22.282543Z 0 [Note] InnoDB: Completed initialization of buffer pool
2019-04-07T11:37:22.289178Z 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
2019-04-07T11:37:22.303956Z 0 [Note] InnoDB: Highest supported file format is Barracuda.
2019-04-07T11:37:22.307061Z 0 [Note] InnoDB: Log scan progressed past the checkpoint lsn 2643657451
2019-04-07T11:37:22.307115Z 0 [Note] InnoDB: Doing recovery: scanned up to log sequence number 2643657470
2019-04-07T11:37:22.307143Z 0 [ERROR] InnoDB: Ignoring the redo log due to missing MLOG_CHECKPOINT between the checkpoint 2643657451 and the end 2643657470.
2019-04-07T11:37:22.307162Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2019-04-07T11:37:22.608051Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
2019-04-07T11:37:22.608108Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2019-04-07T11:37:22.608126Z 0 [ERROR] Failed to initialize builtin plugins.
2019-04-07T11:37:22.608137Z 0 [ERROR] Aborting

2019-04-07T11:37:22.608155Z 0 [Note] Binlog end
2019-04-07T11:37:22.608686Z 0 [Note] mysqld: Shutdown complete
```

[ERROR] InnoDB: Ignoring the redo log due to missing MLOG_CHECKPOINT between the checkpoint 2643657451 and the end 2643657470.

が出ていて、おそらく ib_logfile が大きくなりすぎたのだろうと予想。
対処方法はいくつかあると思いますが、開発環境のデータベースで、いつでも壊して作り直せる状態にしていたので、今回は mysql datadir ごと消しました

```
$ sudo rm /var/lib/mysql/*
```

こういう怖いコマンドは、本来は dump したりしてからすべきですが、rails の db/seed.rb からいつでもデータを復旧させられるので、消しちゃった。

REDO LOG のエラーが出た時は、下記のページなどを参考にしたほうが正しいやり方に近いのではないでしょうか。
https://yoku0825.blogspot.com/2019/01/blog-post.html

REDO LOG 消しちゃっても良いよっていう人は、下記のページ参考に (REDO LOG 消してよいと判断できる人はエラー見て対応しちゃいそうですが)
https://4to.pics/article/post/121


# do-release-upgrade

(---ここから 2019/04/07 追記 ---)
結果的に source.list 更新 & dist-upgrade することになってしまった上、do-release-upgrade で中途半端な対応を行ったことで dist-upgrade 時に依存が壊れてしまって解決に時間が掛かったので、do-release-upgrade はやらない方が良いかもしれません。
source.list 更新および dist-upgrade のやり方は、こちら参考にして下さい。
https://linuxconfig.org/how-to-upgrade-to-ubuntu-18-04-lts-bionic-beaver#h9-how-to-upgrade-ubuntu-the-debian-way
(---ここまで-----------------------)

WSL 上で何が起こるか分からないのが、この do-release-upgrade だったのですが、かなりの時間を要しものの基本放置で問題なかったです。

```
$ sudo do-release-upgrade -d
```

無事に OS 自体はアップデートできました。

```
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:        18.04
Codename:       bionic
```

唯一上手くアップデートできなかったパッケージがこちら

```
$ sudo dpkg -a --configure
dpkg: 依存関係の問題により anthy の設定ができません:
 anthy は以下に依存 (depends) します: libanthyinput0 ...しかし:
  パッケージ libanthyinput0 はまだインストールされていません。

dpkg: パッケージ anthy の処理中にエラーが発生しました (--configure):
 依存関係の問題 - 設定を見送ります
処理中にエラーが発生しました:
 anthy
```

知らないパッケージだったのですが、これはどうも日本語のかな漢字変換ソフトウェアらしく、WSL のテキストインプット周りは Windows さんのお仕事なので不要そうってことで放置。
https://ja.wikipedia.org/wiki/Anthy

```
$ sudo apt --fix-broken install
```

上記で anthy を削除して完了。

# (ここから追記 2019/04/07)

# source.list 更新

do-release-upgrade の完了時に anthy でエラーが出ていたためか、source.list が xenial のままでした。

```
$ tail -n 10 /etc/apt/sources.list
# deb-src http://archive.canonical.com/ubuntu xenial partner

deb http://security.ubuntu.com/ubuntu/ xenial-security main restricted
# deb-src http://security.ubuntu.com/ubuntu/ xenial-security main restricted
deb http://security.ubuntu.com/ubuntu/ xenial-security universe
# deb-src http://security.ubuntu.com/ubuntu/ xenial-security universe
deb http://security.ubuntu.com/ubuntu/ xenial-security multiverse
# deb-src http://security.ubuntu.com/ubuntu/ xenial-security multiverse
deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable
# deb-src [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable
```

不安になって mysql の version 見てみたら 16.04 のままっぽい

```
$ dpkg -l | grep mysql-server
ii  mysql-server                         5.7.25-0ubuntu0.16.04.2                    all          MySQL database server (metapackage depending on the latest version)
ii  mysql-server-5.7                     5.7.25-0ubuntu0.16.04.2                    amd64        MySQL database server binaries and system database setup
ii  mysql-server-core-5.7                5.7.25-0ubuntu0.16.04.2                    amd64        MySQL database server binaries
```

というわけで、bionic に変更して改めて update & dist-upgrade します (涙

#  dist-upgrade
```
$ sudo sed -i 's/xenial/bionic/g' /etc/apt/sources.list
$ sudo apt update && sudo apt -y dist-upgrade
```

source.list 編集してアップデートするのであれば、do-release-upgrade 意味なかったのではなかろうか。。。

## 再び anthy

dist-upgrade に伴って再度 anthy の更新を行うとするようで、改めて dist-upgrade に失敗する

```
以前に未選択のパッケージ libanthy1:amd64 を選択しています。
(データベースを読み込んでいます ... 現在 94988 個のファイルとディレクトリがインストールされています。)
.../libanthy1_1%3a0.3-6ubuntu1_amd64.deb を展開する準備をしています ...
libanthy1:amd64 (1:0.3-6ubuntu1) を展開しています...
.../anthy_1%3a0.3-6ubuntu1_amd64.deb を展開する準備をしています ...
anthy (1:0.3-6ubuntu1) で (9100h-25ubuntu1 に) 上書き展開しています ...
dpkg: 警告: 古いディレクトリ '/var/lib/anthy' を削除できません: ディレクトリは空ではありません
以前に未選択のパッケージ m17n-db を選択しています。
.../m17n-db_1.7.0-2_all.deb を展開する準備をしています ...
m17n-db (1.7.0-2) を展開しています...
以前に未選択のパッケージ libotf0:amd64 を選択しています。
.../libotf0_0.9.13-3build1_amd64.deb を展開する準備をしています ...
libotf0:amd64 (0.9.13-3build1) を展開しています...
以前に未選択のパッケージ libm17n-0:amd64 を選択しています。
.../libm17n-0_1.7.0-3build1_amd64.deb を展開する準備をしています ...
libm17n-0:amd64 (1.7.0-3build1) を展開しています...
dpkg: libuim-data: 依存関係に問題があります。しかし要求に従い削除しています:
 uim-anthy は以下に依存 (depends) します: libuim-data (>= 1:1.8.6-15).
 uim-utils は以下に依存 (depends) します: libuim-data (>= 1:1.8.6-15).
 uim-fep は以下に依存 (depends) します: libuim-data (>= 1:1.8.6-15).
 uim-xim は以下に依存 (depends) します: libuim-data (>= 1:1.8.6-15).

(データベースを読み込んでいます ... 現在 95596 個のファイルとディレクトリがインストールされています。)
libuim-data (1:1.8.6-15) を削除しています ...
dpkg: uim-common: 依存関係に問題があります。しかし要求に従い削除しています:
 uim-anthy は以下に依存 (depends) します: uim-common (>= 1:1.8.6-15) ...しかし:
  パッケージ uim-common は削除されようとしています。
 libuim-scm0:amd64 は以下に依存 (depends) します: uim-common (>= 1:1.8.6-15).
 libuim-custom2:amd64 は以下に依存 (depends) します: uim-common (>= 1:1.8.6-15).
 uim-utils は以下に依存 (depends) します: uim-common (>= 1:1.8.6-15) ...しかし:
  パッケージ uim-common は削除されようとしています。
 libuim8:amd64 は以下に依存 (depends) します: uim-common (>= 1:1.8.6-15).
 uim-fep は以下に依存 (depends) します: uim-common (>= 1:1.8.6-15) ...しかし:
  パッケージ uim-common は削除されようとしています。
 uim-xim は以下に依存 (depends) します: uim-common (>= 1:1.8.6-15).

uim-common (1:1.8.6-15) を削除しています ...
dpkg: `uim-data' のインストール によって壊れた uim-anthy の設定削除を考えています ...
dpkg: 問題ありません。(uim-data によって壊れた) uim-anthy の設定削除をします
(データベースを読み込んでいます ... 現在 95385 個のファイルとディレクトリがインストールされています。)
.../uim-data_1%3a1.8.6+gh20180114.64e3173-2build2_all.deb を展開する準備をしています ...
uim-anthy (1:1.8.6-15) を設定削除しています ...
Error: in load: file "/usr/share/uim/lib/sigscheme-init.scm" not found
dpkg: アーカイブ /var/cache/apt/archives/uim-data_1%3a1.8.6+gh20180114.64e3173-2build2_all.deb の処理中にエラーが発生しました (--unpack):
 installed uim-anthy package pre-removal script subprocess returned error exit status 1
処理中にエラーが発生しました:
 /var/cache/apt/archives/uim-data_1%3a1.8.6+gh20180114.64e3173-2build2_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
```

```
$sudo apt --fix-broken install
...
uim-anthy (1:1.8.6-15) を設定削除しています ...
Error: in load: file "/usr/share/uim/lib/sigscheme-init.scm" not found
dpkg: アーカイブ /var/cache/apt/archives/uim-data_1%3a1.8.6+gh20180114.64e3173-2build2_all.deb の処理中にエラーが発生しました (--unpack):
 installed uim-anthy package pre-removal script subprocess returned error exit status 1
処理中にエラーが発生しました:
 /var/cache/apt/archives/uim-data_1%3a1.8.6+gh20180114.64e3173-2build2_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
```

uim-anthy 削除しようとしてるけど、/usr/share/uim/lib/sigscheme-init.scm なくて怒られる

```
$ sudo apt-get remove --purge uim-anthy
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
これらを直すためには 'apt --fix-broken install' を実行する必要があるかもしれません。
以下のパッケージには満たせない依存関係があります:
 anthy : 依存: libanthyinput0 しかし、インストールされようとしていません
 libuim-custom2 : 依存: uim-common (>= 1:1.8.6-15) しかし、インストールすることができません
 libuim-scm0 : 依存: uim-common (>= 1:1.8.6-15) しかし、インストールすることができません
 libuim8 : 依存: uim-common (>= 1:1.8.6-15) しかし、インストールすることができません
 uim-fep : 依存: libuim-data (>= 1:1.8.6-15) しかし、インストールすることができません
           依存: uim-common (>= 1:1.8.6-15) しかし、インストールすることができません
 uim-utils : 依存: libuim-data (>= 1:1.8.6-15) しかし、インストールすることができません
             依存: uim-common (>= 1:1.8.6-15) しかし、インストールすることができません
 uim-xim : 依存: uim-common (>= 1:1.8.6-15) しかし、インストールすることができません
           依存: libuim-data (>= 1:1.8.6-15) しかし、インストールすることができません
E: 未解決の依存関係です。'apt --fix-broken install' を実行してみてください (または解法を明示してください)。
```

uim-anthy 単体で削除しようとしたが、依存がぶっ壊れている
仕方がないので、依存関係のあるパッケージを一度削除してみる

```
$ sudo apt-get remove --purge uim-anthy uim-common anthy libanthyinput0 libuim-custom2 uim-common libuim-scm0 libuim8 uim-fep libuim-data uim-utils uim-xim
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
パッケージ 'uim-common' はインストールされていないため削除もされません
パッケージ 'uim-common' はインストールされていないため削除もされません
パッケージ 'libanthyinput0' はインストールされていないため削除もされません
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  anthy-common im-config libanthy1 libgcroots0 libm17n-0 libotf0 m17n-db
これを削除するには 'sudo apt autoremove' を利用してください。
以下のパッケージは「削除」されます:
  anthy* libuim-custom2* libuim-data* libuim-scm0* libuim8* uim-anthy* uim-fep* uim-utils* uim-xim*
アップグレード: 0 個、新規インストール: 0 個、削除: 9 個、保留: 390 個。
5 個のパッケージが完全にインストールまたは削除されていません。
この操作後に 1,063 kB のディスク容量が解放されます。
続行しますか? [Y/n] y
(データベースを読み込んでいます ... 現在 95385 個のファイルとディレクトリがインストールされています。)
uim-anthy (1:1.8.6-15) を削除しています ...
Error: in load: file "/usr/share/uim/lib/sigscheme-init.scm" not found
dpkg: パッケージ uim-anthy の処理中にエラーが発生しました (--remove):
 installed uim-anthy package pre-removal script subprocess returned error exit status 1
libuim-custom2:amd64 (1:1.8.6-15) を削除しています ...
uim-xim (1:1.8.6-15) を削除しています ...
uim-fep (1:1.8.6-15) を削除しています ...
dpkg: libuim-scm0:amd64: 依存関係に問題があります。しかし要求に従い削除しています:
 uim-anthy は以下に依存 (depends) します: libuim-scm0 (>= 1:1.5.7).
 uim-utils は以下に依存 (depends) します: libuim-scm0 (>= 1:1.5.7).
 libuim8:amd64 は以下に依存 (depends) します: libuim-scm0 (>= 1:1.5.7).

libuim-scm0:amd64 (1:1.8.6-15) を削除しています ...
dpkg: anthy: 依存関係に問題があります。しかし要求に従い削除しています:
 uim-anthy は以下に依存 (depends) します: anthy ...しかし:
  パッケージ anthy は削除されようとしています。

anthy (1:0.3-6ubuntu1) を削除しています ...
dpkg: uim-utils: 依存関係に問題があります。しかし要求に従い削除しています:
 uim-anthy は以下に依存 (depends) します: uim-utils (>= 1:1.8.6-15) ...しかし:
  パッケージ uim-utils は削除されようとしています。

uim-utils (1:1.8.6-15) を削除しています ...
dpkg: libuim8:amd64: 依存関係に問題があります。しかし要求に従い削除しています:
 uim-anthy は以下に依存 (depends) します: libuim8 (>= 1:1.5.7) ...しかし:
  パッケージ libuim8:amd64 は削除されようとしています。

libuim8:amd64 (1:1.8.6-15) を削除しています ...
処理中にエラーが発生しました:
 uim-anthy
E: Sub-process /usr/bin/dpkg returned an error code (1)
```

やはり uim-anthy でエラーになる
なので、libuim8 を先に消すようにしないとダメっぽい

```
$ sudo apt-get remove --purge libuim8
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
パッケージ 'libuim8' はインストールされていないため削除もされません
これらを直すためには 'apt --fix-broken install' を実行する必要があるかもしれません。
以下のパッケージには満たせない依存関係があります:
 uim-anthy : 依存: libuim-scm0 (>= 1:1.5.7) しかし、インストールされようとしていません
             依存: libuim8 (>= 1:1.5.7) しかし、インストールされようとしていません
             依存: uim-utils (>= 1:1.8.6-15) しかし、インストールすることができません
             依存: libuim-data (>= 1:1.8.6-15) しかし、インストールすることができません
             依存: uim-common (>= 1:1.8.6-15) しかし、インストールすることができません
             依存: anthy しかし、インストールされようとしていません
E: 未解決の依存関係です。'apt --fix-broken install' を実行してみてください (または解法を明示してください)。
```

依存壊れる。。。が、これである程度、削除フラグは立っているはずなので、--fix-broken で直るか試してみる

```
$ sudo apt --fix-broken install
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
依存関係を解決しています ... 完了
以下の追加パッケージがインストールされます:
  anthy libanthyinput0 libdouble-conversion1 libegl-mesa0 libegl1 libegl1-mesa libevdev2 libgbm1 libglvnd0 libinput-bin libinput10 libmtdev1 libqt5core5a
  libqt5dbus5 libqt5gui5 libqt5network5 libqt5svg5 libqt5widgets5 libqt5x11extras5 libuim-custom2 libuim-scm0 libuim8 libwam-bin libwacom-common libwacom2
  libwayland-client0 libwaylan1-mesa libwayland-server0 libxcb-dri3-0 libxcb-icccm4 libxcb-imd0 libinput-bin libinput10 libmtdev1 libqt5core5a libqt5dbus5 lbqt5network5 libqt5svg5 libqt5widgets5 libqt5x11extras5 libuimlibwacom-bin libwacom-common libwacom2 libwayland-egl1
  libuild2         amd64        Universal Input Method - uim-custo  Universal Input Method - GTK+2.x front end
ii  uim-gtk2.0-i          1:1.8.6+gh20180114.64e3173-2build2         amd64    lugins:amd64                    1:1.8.6+gh20180114.64e3173-2bu.7.25-0ubuntu0.18.04.2            all          MySQL databasee depending on the latest version)
ii  mysql-server-5.7      アップデートはこれまで。

# まとめ

意外と嵌ってしまって時間を要しましたが、ひとまずはアップデート出来て良かったです。
細かい部分で問題がないかの確認して、新しく環境を作り直したほうが早かった