ubuntu
インストール
WSL を入れる
WSL を有効にする。PC 再起動が求められる。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Ubuntu 18.04 の appx ファイルをダウンロードする。
cd ~/Downloads
Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1804 -OutFile Ubuntu.appx -UseBasicParsing
aapx ファイルをインストールする。
Add-AppxPackage ./Ubuntu.appx
最初の起動
Win+S で"ubuntu"と入力して Ubuntu を起動する。 するとコンソールが開くのでインストール完了まで待つ。
好きなユーザ名とパスワードを入力する。
ここでターミナルを閉じるとデフォルトが root になってしまうので注意。
::: tip
デフォルトでは`/mnt/c`でWindowsのCドライブにアクセスできるが、それだとやりにくいので`/c`になるように設定している。
:::
ユーザのホームディレクトリをWindows上のパスに変更する。
```bash
sudo vim /etc/passwd
自分のユーザ名を探してホームディレクトリを/c/linux_home
などに変える。
リポジトリを国内サーバーに切り替える。
sudo sed -i -e 's%http://.*.ubuntu.com%http://ftp.jaist.ac.jp/pub/Linux%g' /etc/apt/sources.list
パッケージマネージャのアップデートをする。
sudo apt update
sudo apt upgrade
/home/<user name>
にもともとある.bashrc
を変更先のホームディレクトリにコピーしないとターミナルの色が消えたりする。
Docker を入れる
ref: https://medium.com/@XanderGrzy/developing-for-docker-kubernetes-with-windows-wsl-9d6814759e9f
Docker を WSL にインストールする。
sudo apt-get install apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update && sudo apt-get install docker-ce
ホストを設定する。
echo "export DOCKER_HOST=tcp://localhost:2375" >> ~/.bashrc && source ~/.bashrc
WSL の設定ファイルを作成する。
sudo touch /etc/wsl.conf
ボリュームマウントが正しく動くように、以下をwsl.conf
に書く。
[automount]
root = /
options = "metadata"
Kubernetes を入れる
WSL に Kubernetes をインストールする
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update && sudo apt-get install -y kubectl
設定ファイルをのシンボリックリンクを貼る。
WIN_USER=$(/c/windows/system32/cmd.exe /c 'echo %USERNAME%' | sed -e 's/\r//g')
mkdir ~/.kube
cd ~/.kube
ln -snfv `realpath --relative-to=. /c/Users/${WIN_USER}/.kube/config` config
jdk
sudo apt-get install openjdk-8-jdk
Ruby
apt install -y ruby
gemインストール時はsudo
を付ける。
sudo gem install ruby-kafka
nodejs を入れる
sudo apt install -y nodejs
yarnを入れる
先にcmdtest
をアンインストールする必要がある。
sudo apt remove cmdtest
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt install -y yarn
ref: ERROR: There are no scenarios; must have at least one.
yarn global add
するときは、自動でパスを通してくれないので以下のようにパスを通す。
export PATH="$PATH:`yarn global bin`"
ref: yarn global addしたパッケージのパスを通す
brew
https://docs.brew.sh/Homebrew-on-Linux
インストール。
# brewの依存関係を入れる
sudo apt-get install -y build-essential curl file git
# brew本体を入れる
sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"
.bashrcでパスの設定をする
export PATH=$PATH:'/home/linuxbrew/.linuxbrew/bin'
dos2unix を入れる
sudo apt install -y dos2unix
Helm
brew install kubernetes-helm
インストール後に以下コマンドでサーバーのバージョンをアップグレードする。
helm init --upgrade
Git の設定
.gitignore
を有効化する。
git config --global core.excludesfile ~/.gitignore_global
Gradleを入れる
先にjdk8以上を入れておく必要がある。
brew install gradle
ubuntu コマンド
C:\Users\hatak\AppData\Local\Microsoft\WindowsApps
にあるのでパスを通す。
FluentTerminal
https://github.com/felixse/FluentTerminal
インストール
スタート->設定->更新とセキュリティ
で、開発者モードを ON にする。
開発者モードを有効にしないと次の choco install に失敗します。
管理者権限の PowerShell で実行する。
choco install fluent-terminal
改行(\)つきのコマンドが正常に貼り付けられるように
Settings -> Profiles -> Line ending translation mode
をLFに設定する。
デフォルトユーザを変える
ユーザを作成する。
sudo adduser <user_name>
# sudoグループに追加
sudo gpasswd -a <user_name> sudo
ref: ubuntu ユーザを追加して sudo 権限をつける
Powershell で以下のコマンドを実行する。
ubuntu1804 config --default-user <username>
sc stop LxssManager
sc start LxssManager
Windows のユーザ名を取得する
WIN_USER=$(cmd.exe /c 'echo %USERNAME%' | sed -e 's/\r//g')
# WSLからcmd.exeをフルパスで実行する場合は以下cmd.exeのパスは以下
WIN_USER=$(/c/windows/system32/cmd.exe /c 'echo %USERNAME%' | sed -e 's/\r//g')
VSCodeをWSLから起動する
Windowsのユーザ名を取得する必要がある。
.bashrc
で以下のエイリアスを設定しておくといい。
WIN_USER=$(/c/windows/system32/cmd.exe /c 'echo %USERNAME%' | sed -e 's/\r//g')
alias code="/c/users/${WIN_USER}/AppData/Local/Programs/'Microsoft VS Code'/code.exe"
パイプでクリップボードにコピー
clip.exe
を叩くとコピーできる。
cat hoge.txt | "/c/windows/system32/cmd.exe /c 'clip.exe'"
.bashrc
でエイリアスに設定しておくと楽
alias clip="/c/windows/system32/cmd.exe /c 'clip.exe'"
# 使用例
cat hoge.txt | clip
ref: Copy to clipboard using Bash for Windows
localhost の MYSQL に接続する
mysql --host=127.0.0.1 --user=root --password=password
ref: https://stackoverflow.com/questions/41819064/i-cant-use-mysql-in-windows-linux-subsystem
WSL 独自のコマンド
WSLの再起動
/etc/wsl.conf
でマウントパスを変更した場合などは再起動が必要。
net stop LxssManager
net start LxssManager
ref: Rebooting Ubuntu on Windows without rebooting Windows?
wsl.exe
PowerShell から WSL 上のコマンドを実行する。
wsl.exe echo hoge
# ユーザを指定して実行
wsl.exe -u root echo hoge
# ユーザのホームディレクトリを変更
wsl.exe -u root usermod -m -d /c/linux_home hako1912
パイプする場合は以下のようにする。
wsl.exe /bin/bash -c "echo hello | wc"
# これだとダメ。wcが見つかりませんエラーがでる
wsl.exe echo hello | wc
ref: Quoting pipe commands with wsl.exe
wslpath
Win-WSL でパスの変換ができる。
# Winの相対パスに変換
wslpath -w .
# Winの絶対パスに変換
wslpath -aw .
制約
ln -s
でシンボリックリンクを作成するときは、第一引数を相対パスにしないといけない。
第一引数のパスはシンボリックリンクに登録されるパスになるから Ubuntu のパスだとうまく動かない?
# NG
ln -s /mnt/c/hoge/fuga/aaa.txt /mnt/c/hoge/fuga/bbb.txt
# OK
cd /mnt/c/hoge/fuga
ln -s aaa.txt bbb.txt
# OK
cd /mnt/c/hoge/fuga
ln -s aaa.txt /mnt/c/hoge/fuga/bbb.txt
# OK: リンクURLがカレントディレクトリ
ln -snfv ../a .
# NG: リンクURLが親ディレクトリ
ln -snfv a ..
ln -snfv a ../
# NG: リンクURLが子ディレクトリ
ln -snfv a dir
ln -snfv a dir/
ln -snfv a dir/a
- 第一引数が相対パスでないといけない。
- 第二引数(リンクを置くパス)がカレントディレクトリでないといけない。
realpath
コマンドで絶対パスを相対パスに変換できるので、これを利用すると解決できる。
SOURCE='/mnt/c/hoge.txt'
# カレントディレクトリを基点に、実ファイルの相対パスを第一引数に指定する
cd `dirname $0`
ln -snfv `realpath --relative-to=. ${SOURCE}` /mnt/c/fuga.txt
やり直す
管理者権限で PowerShell を開いて以下を実行する。
# アンインストール
Get-AppxPackage *ubuntu* | Remove-AppxPackage
# .appxをダウンロード
cd ~/Downloads
Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1804 -OutFile Ubuntu.appx -UseBasicParsing
# 再インストール
# HRESULT: 0x80073CF6 で失敗したらもう一回実行するとうまくいった
Add-AppxPackage ./Ubuntu.appx
# これは古いコマンド。
# lxrun /uninstall /full
# lxrun /install
再インストールに失敗する場合は管理者権限の PowerShell で以下のコマンドを実行する。
# WSLを無効化(実行後にPC再起動すること)
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
# WSLを有効化(実行後にPC再起動すること)
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
その後、Add-AppxPackage ./Ubuntu.appx
し直す。
ネットが遅い
Windows Defenderのリアルタイム保護を無効にする。
Set-MpPreference -DisableRealtimeMonitoring 1
VSCodeで使うgitをwslのgitにする
バッチファイルを作成する。
@echo off
wsl wslpath -aw $(git %*) 2> nul
if not %errorlevel% == 0 (
wsl git %*
)
@echo on
VSCodeの設定にgit.path
を追加する。
{
"git.path": "C:\\tools\\git.bat",
}
ref: VSCodeでWSLのGitを使う(Ubuntu 18.04)
Error: ENOSPC: System limit for number of file watchers reached
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
Ref: https://github.com/gatsbyjs/gatsby/issues/11406#issuecomment-458769756