Env
OS 名: Microsoft Windows 10 Pro OS バージョン: 10.0.19044 N/A ビルド 19044 OS 製造元: Microsoft Corporation OS 構成: メンバー ワークステーション OS ビルドの種類: Multiprocessor Free 登録されている所有者: Windows ユーザー 登録されている組織: システムの種類: x64-based PC プロセッサ: 1 プロセッサインストール済みです。 [01]: Intel64 Family 6 Model 142 Stepping 12 GenuineIntel ~1803 Mhz システム ロケール: ja;日本語 入力ロケール: ja;日本語 タイム ゾーン: (UTC+09:00) 大阪、札幌、東京 物理メモリの合計: 32,488 MB 利用できる物理メモリ: 17,311 MB 仮想メモリ: 最大サイズ: 37,608 MB 仮想メモリ: 利用可能: 17,666 MB 仮想メモリ: 使用中: 19,942 MB
$ wsl.exe -l -v NAME STATE VERSION * Ubuntu Running 2 $ pipenv --version pipenv, version 2022.6.7 $ pyenv --version pyenv 2.3.1-20-g572a8bcf
WSL
WSL version1 (Old)
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 v2 を instal..
wsl --install
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/hosts
に 0.0.0.0 localhost
を定義する.
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 zsh postgresql aws-mfa # Change shell bash to zsh chsh -s /bin/zsh ### uninstall nano editor sudo dpkg -P nano mkdir ~/.ssh && chmod 0600 ~/.ssh # 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 # Pipenv ## dir 毎の仮想環境, library 依存管理 pip3 install --user pipenv pipenv install aws-mfa lambda-uploader # pyenv ## Python の version 切替用 git clone https://github.com/pyenv/pyenv.git ~/.pyenv vim ~/.zshrc # export PATH="$HOME/.pyenv/bin:$PATH" # eval "$(pyenv init -)" # eval "$(pyenv virtualenv-init -)" # Install Python 3.9 $ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak $ sudo vi /etc/apt/sources.list # :%s/# deb-src/deb-src/g で deb-src を un-comment $ sudo apt-get build-dep python3.9 $ pyenv install 3.9.13 # tfenv (for Terraform) git clone https://github.com/tfutils/tfenv.git ~/.tfenv # rbenv (ruby の version 切り替えに必要) git clone https://github.com/rbenv/rbenv.git ~/.rbenv echo 'export PATH=$HOME/.rbenv/bin:$PATH' >> ~/.zshrc echo 'eval "$(rbenv init -)"' >> ~/.zshrc # ruby-build (ruby の install に必要) git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/rujby-build # rbenv/ruby-build の install が問題ないか check curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-doctor | bash # if you want to reset wsl, execute as below. lxrun /uninstall /full lxrun /install # Trouble shoot to https://github.com/microsoft/WSL/issues/4698 sudo sh -c "echo 'sudo ip link set eth0 mtu 1400' >> ~/.zshrc # Install Java and embulk curl -s api.sdkman.io | bash source .sdkman/bin/sdkman-init.sh sdk install java 8.0.302-open curl --create-dirs -o ~/.embulk/bin/embulk -L "https://dl.embulk.org/embulk-latest.jar" chmod +x ~/.embulk/bin/embulk ~/.embulk/bin/embulk --version embulk 0.9.24 embulk gem install embulk-input-s3 embulk gem install embulk-output-elasticsearch_ruby embulk gem install embulk-filter-column embulk gem install embulk-filter-expand_json embulk gem install embulk-decoder-commons-compress embulk gem install embulk-parser-fluentd_out_file embulk gem install faraday -v 0.17.4 embulk gem install elasticsearch -v 7.5.0 embulk gem install embulk-output-elasticsearch_using_url
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
- 併せて etl2pcapng も.
- Authy
- VS Code
- Slack
- 1Password
- Royal TSX
- Docker Desktop
- CubePDF Utility2
- ChefDK
sudo dpkg -i chefdk_3.13.1-1_amd64.deb
すれば knife が使えるようになる.
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 が起動するように変更.
hyper > menu > Edit > preferences
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 への切り替え (日本語 -> 英語)
設定 > 日付と時刻 > 優先する言語 > 日本語
のオプションをクリック言語のオプション: 日本語 > ハードウェアキーボードレイアウト
のレイアウトを変更する
をクリック英語キーボード (101/102 キー)
を選択して PC を再起動
IME オン・オフの切り替え
キーとタッチのカスタマイズ > 各キーに好みの機能を割り当てる
をチェックCtrl+Space: IME-オン/オフ
を選択
これで CapsLock+Shift で英語<->日本語の切り替えが出来る.
Git
上記で install した Git の設定, clone.
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
2022/06 現在 symlink を張って Windows 側の file 群を WSL2 から操作すると, 双方の system call のバイパスが多重となり performance が悪化してしまうことが分かったため 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 へ反映されなかった.
- そのまま WSL 側に folder が存在する状態で link を張っても 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
- WSL2 install 条件は Windows10 OS build 18917 ~.
PS> winver
等で build number を確認する.- 僕の場合 ruby-gem 関連の error が発生した為, WSL にて gem を消してから再度実施した.
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