WSL のUbuntu 20.04 LTS が公開されていたのでUbuntu 18.04 LTS から移行しました。

マイクロソフトストアには以下の3つのUbuntu が存在しています。「Ubuntu」からはdo-release-upgradeでバージョンアップできるけれど、「Ubuntu 18.04 LTS」からはバージョンアップできないんですね。

  • Ubuntu
  • Ubuntu-18.04
  • Ubuntu-20.04

環境

  • Windows 10 Insider Preview Build 20150
    • 移行前WSL
      • Ubuntu 18.04 (Ubuntu 18.04 LTS)
      • bash 4.4.20
      • node v13.9.0
      • npm 6.13.7
      • Docker version 19.03.6
      • Docker Compose version 1.24.0
    • 移行後WSL
      • Ubuntu (Ubuntu 20.04 LTS)
      • bash 5.0.16
      • node v14.4.0
      • npm 6.14.5
      • Docker version 19.03.11
      • Docker Compose version 1.26.0

構築

WSL のインストール

  1. マイクロソフトストアから「Ubuntu」をインストール
  2. Ubuntu を起動してアカウントubuntuを作成

WSL 側の設定

日本語設定

  • 日本語オンラインマニュアルのインストール
    $ sudo apt install language-pack-ja manpages-ja manpages-ja-dev
    $ sudo update-locale LANG=ja_JP.UTF8
    $ exit
  • ~/.bash_aliases の設定
    ~/.bash_aliases
    alias upd='sudo apt update && sudo apt dist-upgrade && sudo apt autoremove -y'
    alias en='export LC_ALL=en_US.UTF8'
    alias ja='export LC_ALL=ja_JP.UTF8'

    function sshu() {
    command ssh ubuntu@192.168.11.$1
    }

Node.js

  • n でNode.js をインストール
    $ sudo apt update && sudo apt upgrade
    $ sudo apt install nodejs npm
    $ sudo apt clean all
    $ sudo npm install n -g
    $ sudo n latest
    $ sudo ln -sf /usr/local/bin/node /usr/bin/node
    $ sudo apt purge nodejs npm
    $ sudo apt clean all
    $ sudo apt autoremove

Chinachu

  • chinachu のインストール
    $ sudo apt install build-essential curl git-core vainfo python
    $ sudo npm install pm2 -g
    $ sudo pm2 startup
    $ git clone git://github.com/kanreisa/Chinachu.git ~/chinachu
    $ cd ~/chinachu/
    $ ./chinachu installer
    $ cp config.sample.json config.json
  • ~/chinachu/config.json の設定
    "uid": "ubuntu",
    "mirakurunPath": "http://192.168.11.2:40772/",
    "recordedDir" : "/mnt/j/home/chinachu/recorded/",
    "wuiUsers": [
    ],
  • 起動
    $ echo [] > ~/chinachu/rules.json
    $ ./chinachu service wui execute
    # 問題なく起動できたらCtrl+\で終了
    $ ./chinachu update
    # EPG取得テスト(エラーが出た場合は恐らく Mirakurun に接続できていません)
    $ sudo pm2 start processes.json
    $ sudo pm2 save
  • 起動スクリプト
    /home/ubuntu/bin/wsl-chinachu.sh
    #!/bin/bash

    cd /home/ubuntu/chinachu
    /usr/local/bin/pm2 restart processes.json

Docker

  • Docker のインストール
    $ sudo apt install curl
    $ curl -fsSL https://get.docker.com/ | sh
    $ sudo usermod -aG docker ubuntu
    $ sudo /etc/init.d/docker start
    $ exit
    $ docker system info

Docker Compose

  • 最新版のDocker Compose をインストールするワンライナー
    $ curl --silent "https://api.github.com/repos/docker/compose/releases/latest" | jq --arg PLATFORM_ARCH "$(echo `uname -s`-`uname -m`)" -r '.assets[] | select(.name | endswith($PLATFORM_ARCH)).browser_download_url' | xargs sudo curl -L -o /usr/local/bin/docker-compose --url && sudo chmod 755 /usr/local/bin/docker-compose
  • Portainer のインストール
    $ wget https://downloads.portainer.io/docker-compose.yml
    $ docker-compose up -d

Hexo

  • hexo インストール
    $ npm install hexo
    $ echo 'PATH="$PATH:./node_modules/.bin"' >> ~/.profile
    $ . ~/.profile
    $ npx hexo init blog
    $ cd blog
    $ npm install
    $ npm i -S hexo-tag-googlecharts
    $ npm i -S hexo-tag-twitter
    $ npm i -S hexo-pdf
    $ npm i -S hexo-deployer-git
    $ npm i -S hexo-generator-search
    $ npm i -S hexo-generator-feed
    $ npm i -S hexo-related-popular-posts
  • ライブラリの修正
    https://ktkr3d.github.io/2020/02/27/hexo-related-popular-posts/
  • データの移行
    $ scp -r ubuntu@localhost:/home/ubuntu/blog/_config.yml         ~/blog/
    $ scp -r ubuntu@localhost:/home/ubuntu/blog/google-services.pem ~/blog/
    $ scp -r ubuntu@localhost:/home/ubuntu/blog/source ~/blog/
    $ scp -r ubuntu@localhost:/home/ubuntu/blog/scaffolds ~/blog/
    $ scp -r ubuntu@localhost:/home/ubuntu/blog/themes/freemind ~/blog/themes/
  • キーの移行
    $ scp -r ubuntu@localhost:/home/ubuntu/.ssh ~
  • キャッシュのクリア
    $ hexo clean

ポートフォワードの設定

  • ポートフォワードスクリプトの作成
    /home/ubuntu/bin/wsl-portforward.sh
    #!/bin/bash

    IP=$(ip -f inet -o addr show eth0 | cut -d\ -f 7 | cut -d/ -f 1)

    for PORT in 22 4000 8000 9000 20772; do
    /mnt/c/Windows/system32/netsh.exe interface portproxy delete v4tov4 listenport=$PORT
    /mnt/c/Windows/system32/netsh.exe interface portproxy add v4tov4 listenport=$PORT connectaddress=$IP
    done

sshd の設定

  • キーの作成
    $ sudo su
    # ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
    # ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

Windows 10 側の設定

WSL のデフォルトを変更

  • コマンドプロンプトでWSL のデフォルトをUbuntu に変更
    >wslconfig /list
    Linux 用 Windows サブシステム ディストリビューション:
    Ubuntu-18.04 (既定)
    Ubuntu

    >wslconfig /setdefault Ubuntu

    >wslconfig /list
    Ubuntu (既定)
    Ubuntu-18.04

タスクスケジューラの設定

  • ポートフォワードの自動設定
    名称: wsl-portforward
    プログラム: wsl
    引数: -u root bash /home/ubuntu/bin/wsl-portforward.sh
    権限昇格: あり
  • sshd の自動起動
    名称: wsl-sshd
    プログラム: wsl
    引数: -u root bash service ssh restart
    権限昇格: あり
  • chinachu の自動起動
    名称: wsl-chinachu
    プログラム: wsl
    引数: -u root bash /home/ubuntu/bin/wsl-chinachu.sh
    権限昇格: あり
  • docker の自動起動
    名称: wsl-docker
    プログラム: wsl
    引数: -u root -- /etc/init.d/docker start
    権限昇格: あり