tail -f /dev/null

If you haven't had any obstacles lately, you're not challenging. be the worst.

Setup ThinkPad T480s

2020/03 現在のオレオレ setup 方法です. 当該端末や環境依存な記述も少なからずありますがご容赦ください.

Env

OS 名:                  Microsoft Windows 10 Pro
OS バージョン:          10.0.18362 N/A ビルド 18362
プロセッサ:             1 プロセッサインストール済みです.
                        [01]: Intel64 Family 6 Model 142 Stepping 10 GenuineIntel ~1910 Mhz
BIOS バージョン:        LENOVO N22ET60W (1.37 ), 2019/11/25
物理メモリの合計:       24,410 MB
仮想メモリ: 最大サイズ: 33,626 MB

WSL

WSL version1

WSL activate

Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

drvfs meta を付与して c mount

sudo umount /mnt/c
sudo mount -t drvfs C: /mnt/c -o metadata

wsl.conf に追記して自動 mount されるようにする

[automount]
enabled = true
root = /mnt/
options = "metadata"
mountFsTab = true

[network]
generateHosts = true
generateResolvConf = true

[interop]
enabled = true
appendWindowsPath = true

WSL version2

wsl --install

WSL2 config

~/.wslconfig を配置する.

localhostForwarding=True # WSL2 上で AWS CLI を実行し port forwarding する場合, RDP 経由で WSL2 に接続できないためこの設定が必要

[wsl2]
swap=0
memory=3GB # Vmmem (WSL で使用される memory 使用量の最大値)

TCP socket を 0.0.0.0 で listen しないと Windows 側から port forwarding でアクセスできないため /etc/hosts0.0.0.0 localhost を定義する.

VPN 繋ぐと WSL2 で ssh のリクエストが返ってこない問題 を対処するため, MTU を小さくする.

sudo sh -c "echo 'sudo ip link set eth0 mtu 1400' >> ~/.zshrc

Install some packages on Ubuntu OS.

# package update & upgrade
sudo apt update
sudo apt upgrade
# Remove package is no longer required
sudo apt autoremove

# Add repository ubuntui-ja[jp]
wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-key add -
wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | sudo apt-key add -

# Add locale jp
sudo apt install -y language-pack-ja
sudo update-locale LANG=ja_JP.UTF-8

sudo apt install kpcli jpegoptim make lv unzip git gcc make openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev zlib1g-dev libncursesw5-dev libgdbm-dev libc6-dev zlib1g-dev libsqlite3-dev tk-dev libssl-dev openssl libffi-dev mysql-client vim-nox tmux docker-compose traceroute inetutils-traceroute fzf

### uninstall nano editor
sudo dpkg -P nano

mkdir ~/.ssh && chmod 0600 ~/.ssh

# zsh completions
sudo sh -c "echo 'deb http://download.opensuse.org/repositories/shells:/zsh-users:/zsh-completions/xUbuntu_19.10/ /' > /etc/apt/sources.list.d/shells:zsh-users:zsh-completions.list"
wget -nv https://download.opensuse.org/repositories/shells:zsh-users:zsh-completions/xUbuntu_19.10/Release.key -O Release.key
sudo apt-key add - < Release.key
sudo apt-get update
sudo apt-get install zsh-completions

# tmux-xpanes
# https://github.com/greymd/tmux-xpanes/wiki/Installation
$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:greymd/tmux-xpanes
$ sudo apt update
$ sudo apt install tmux-xpanes

# Neovim
sudo apt install software-properties-common python-software-properties
sudo apt-add-repository ppa:neovim-ppa/stable
sudo apt install neovim

# Python3
sudo apt install python3-pip
pip3 install --upgrade pip
pip3 install --user pipenv

# pyenv
curl https://pyenv.run | bash
vim ~/.zshrc
# export PATH="$HOME/.pyenv/bin:$PATH"
# eval "$(pyenv init -)"
# eval "$(pyenv virtualenv-init -)"

pyenv install 3.8.7

# rbenv
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH=$HOME/.rbenv/bin:$PATH' >> ~/.zshrc
echo 'eval "$(rbenv init -)"' >> ~/.zshrc

# if you want to reset wsl, execute as below.
lxrun /uninstall /full
lxrun /install

Install Applications

  • 7zip
  • Screenpresso
    • screen capture
  • clibor
    • copy history
  • keypirinha (Mac spotlight 風)
    • Launcher, Calculator
    • 展開するのに 7zip が必要
  • hyper
    • terminal
  • Alt-Tab Terminator
    • task swither
  • Firefox
    • Container 拡張機能が便利
  • Typora
    • Markdown Editor
  • Xmind
    • Mind map editor
  • PgAdmin4
    • PostgreSQL Client
  • Wireshark
  • Authy
  • VS Code
  • Slack
  • 1Password
  • Royal TSX
  • Docker Desktop
  • CubePDF Utility2

keypirinha の setting (Win+K+Ctrl 押して configure と入力)

[app]
launch_at_startup = yes
hotkey_run = Alt+Space
hotkey_history = Ctrl+Shift+Space
show_on_taskbar = no

[gui]
hide_on_focus_lost = yes
theme = TinyLayout, SolarizedDarkColors
auto_width = 20
max_results = 200

hyper 起動時に wsl.exe が起動するように変更.

    shell: 'C:\\Windows\\System32\\wsl.exe',
    shellArgs: ['~'],

VS Code

  • Extension: Settings Sync で GitHub へログインし token から設定を復元する.

PowerShell

# install chocolatey (require reboot)
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

# install theme this affect WSL
choco install microsoft-windows-terminal

# Key bind

## change `CapsLock` to `Control` key (require restart computer)

$hexified = "00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00".Split(',') | % { "0x$_"};
$kbLayout = 'HKLM:\System\CurrentControlSet\Control\Keyboard Layout';
New-ItemProperty -Path $kbLayout -Name "Scancode Map" -PropertyType Binary -Value ([byte[]]$hexified);

US Keyboard への切り替え (日本語 -> 英語)

  1. 設定 > 日付と時刻 > 優先する言語 > 日本語 のオプションをクリック
  2. 言語のオプション: 日本語 > ハードウェアキーボードレイアウトレイアウトを変更する をクリック
  3. 英語キーボード (101/102 キー) を選択して PC を再起動

IME オン・オフの切り替え

  1. キーとタッチのカスタマイズ > 各キーに好みの機能を割り当てる をチェック
  2. Ctrl+Space: IME-オン/オフ を選択

これで CapsLock+Shift で英語<->日本語の切り替えが出来る.

Git

WSL 上から ssh-add 出来ず, eval が必要だった.

sudo ssh-add ~/.ssh/id_rsa
Could not open a connection to your authentication agent.

eval `ssh-agent`
ssh-add ~/.ssh/id_rsa

git clone 

Symlink

  • Windows application から WSL Ubuntu 環境下の file を直接編集すると file が破損する可能性がある.
  • Ubuntu と Windows 双方から共通して編集する file は Windows 環境下に配置する.
  • この問題は後々修正される可能性がある.
# copy to windows path (faster than cp)
rsync -av <source_dir> /mnt/c/sources/ --exclude "*/.vendor"

# check size
du -sh ./<source_dir>
5.4G    ./<source_dir>

du -sh ./<target_dir>
5.2G    ./<target_dir>

ln -s /mnt/c/sources/<source_dir> ~/<target_dir>

ls -l ~/<target_dir>
lrwxrwxrwx 1 x x 23 Aug 17 08:01 <target_dir> -> /mnt/c/sources/<source_dir>
  • WSL 側の既存 folder で rm 出来ない権限となっている file が存在する場合, symlink は動作しない.
    • そのまま WSL 側に folder が存在する状態で link を張っても file の変更が /mnt/c 側の file へ反映されなかった.
  • file 権限を変更して rm, 若しくは unlink してから symlink を張る必要がある.
sudo rm -rf <unlink_target_dir>
rm: cannot remove '<unlink_target_dir>/vendor/bundler/ruby/2.5.0/bin/rspec': Permission denied

sudo find <unlink_target_dir> -type f -exec chmod 777 {} \;
sudo rm[unlink] -rf <unlink_target_dir>

ln -s /mnt/c/sources/<source_dir> ~/<target_dir>

Trouble shooting

Mac から backup していた幾つかの file が binary file として認識される

WSL 上から何故か (MacBook Pro で backup していた) Dropbox 配下のファイルが binary として認識される.

hexdump -C .zshrc | head
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000039c3

file -bi .zshrc
application/octet-stream; charset=binary

# 変換を試みるも意味無し
iconv -f utf-8 -t utf-8 -o .zhshr .zshrc
cat .zshrc | tr -d '\0' > .zshrc
nkf -w .zshrc > .zshrc

Google Drive は問題無かったので, 仕方なく Google Drive 経由で同期するように変更した.

※ Box は同期に数分掛かる場合があり遅すぎる..WSL 上から Box のパスが直ぐには分からず.

libyajl2 の gem install でエラー

sudo gem install  libyajl2 -v '1.2.0' 
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h
sudo apt-get install ruby-dev

ruby-dev をインストールする必要があった.

bundle install でエラー

sudo /usr/local/bin/bundle install
Traceback (most recent call last):                                                                                                                                                                   2: from /usr/local/bin/bundle:23:in `<main>'                                                                                                                                                 1: from /usr/lib/ruby/2.5.0/rubygems.rb:308:in `activate_bin_path'                                                                                                                   /usr/lib/ruby/2.5.0/rubygems.rb:289:in `find_spec_for_exe': can't find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException)

sudo gem update --system もしくは gem install bundler -v 1.6.1 のようにバージョン指定してあげる必要があった.


WSL1 から WSL2 への upgrade

C:\>wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu                 Running         1
  docker-desktop-data    Running         2
  docker-desktop         Running         2

C:\>wsl --set-version ubuntu 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
ディストリビューションのインポートが失敗しました。
./var/lib/gems/2.5.0/doc/rubygems-update-3.0.6/rdoc/js/jquery.js: Hard-link target './var/lib/gems/2.5.0/doc/rubygems-update-3.1.2/rdoc/js/jquery.js' does not exist.
./var/lib/gems/2.5.0/doc/rubygems-update-3.0.6/rdoc/fonts/Lato-Light.ttf: Hard-link target './var/lib/gems/2.5.0/doc/rubygems-update-3.1.2/rdoc/fonts/Lato-Light.ttf' does not exist.
./var/lib/gems/2.5.0/doc/rubygems-update-3.0.6/rdoc/fonts/Lato-LightItalic.ttf: Hard-link target './var/lib/gems/2.5.0/doc/rubygems-update-3.1.2/rdoc/fonts/Lato-LightItalic.ttf' does not exist.
./var/lib/gems/2.5.0/doc/rubygems-update-3.0.6/rdoc/fonts/Lato-Regular.ttf: Hard-link target './var/lib/gems/2.5.0/doc/rubygems-update-3.1.2/rdoc/fonts/Lato-Regular.ttf' does not exist.
./var/lib/gems/2.5.0/doc/rubygems-update-3.0.6/rdoc/fonts/Lato-RegularItalic.ttf: Hard-link target './var/lib/gems/2.5.0/doc/rubygems-update-3.1.2/rdoc/fonts/Lato-RegularItalic.ttf' does not exist.
./usr/lib/ruby/2.5.0/rdoc/generator/template/darkfish/js/jquery.js: Hard-link target './var/lib/gems/2.5.0/doc/rubygems-update-3.1.2/rdoc/js/jquery.js' does not exist.
./usr/lib/ruby/2.5.0/rdoc/generator/template/darkfish/fonts/Lato-Light.ttf: Hard-link target './var/lib/gems/2.5.0/doc/rubygems-update-3.1.2/rdoc/fonts/Lato-Light.ttf' does not exist.
./usr/lib/ruby/2.5.0/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttf: Hard-link target './var/lib/gems/2.5.0/doc/rubygems-update-3.1.2/rdoc/fonts/Lato-LightItalic.ttf' does not exist.
./usr/lib/ruby/2.5.0/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttf: Hard-link target './var/lib/gems/2.5.0/doc/rubygems-update-3.1.2/rdoc/fonts/Lato-Regular.ttf' does not exist.
./usr/lib/ruby/2.5.0/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttf: Hard-link target './var/lib/gems/2.5.0/doc/rubygems-update-3.1.2/rdoc/fonts/Lato-RegularItalic.ttf' does not exist.
bsdtar: Error exit delayed from previous errors.

# WSL
$ for i in $(gem list | awk {'print $1'}); do sudo gem uninstall $i -ax --force; done

C:\>wsl --set-version ubuntu 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
変換が完了しました。

C:\>wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu                 Stopped         2
  docker-desktop-data    Running         2
  docker-desktop         Running         2