あらまし
WSL(Windows Subsystem for Linux)は、Windows上の軽量VMで動作する、Linuxである。
動的にメモリが割り当てられ、大変便利である。凄く便利で重宝である。
足りない部分はスクリプトで頑張る。
以下のように頑張る。
VMを別箇所に移す
- VMの中データモリモリにしたいならコレ大事。
- SSDにしましょう。
lxrunoffline
のインストール
Manager | Install |
---|---|
Chocolatey | sudo choco install lxrunoffline |
Scoop | sudo scoop install lxrunoffline |
- ※
sudo.ps1
導入時 - 個人的、Scoopのほうがおすすめ。(Dutyなリポジトリ少ないイメージ)
移行
REM ディストリビューションの終了
wsl.exe -t Ubuntu-18.04
REM 移行
lxrunoffline move -n Ubuntu-18.04 -d D:\VM\WSL\Ubuntu-18.04
REM 確認
lxrunoffline get-dir -n Ubuntu-18.04
C:\User\USER.wslconfigによるVMの共通設定
[wsl2]
# 独自Linuxカーネル指定とCMD引数(Windowsパス)
#kernel=
#kernelCommnadLine=
# メモリ
memory=4GB
# CPU
processor=4
# SWAPなし
swap=0
# SWAP用VHDファイル(Windowsパス)
swapFile=
# localhost転送
localhostForwarding=true
/etc/wsl.confによるVMの独自設定
#==========================================================
[automount]
enabled=true # /mnt/[c,d,...]
mountFsTab=true # /etc/fstabベース
root="/media/" # /mnt/c -> /media/c
options=""
#======================================
# ディストリビューション同士(2020 May Update - v2004以降)
crossDistro=true
#==========================================================
[network]
generateHosts=true # /etc/hosts
generateResolvConf=true # /etc/resolv.conf
#==========================================================
# 2019 Nov Update v1009以降
[interop]
enabled=true # *.exeの起動
appendWindowsPATH=true # WindowsのPATHを追記
#==========================================================
[user]
default=eric # 2020 May Update - v2004 以降
#==========================================================
[filesystem]
umask=0022 # = 0755, 2020 May Update - v2004以降
#==========================================================
Startup!
Windows起動時にWSL起動
-
shell:startup
配下に配置
wsl.startup.bat
@echo off
wsl.exe -u root -- /root/wsl.startup.sh
or...
wsl.startup.vbs
Set ws = WScript.CreateObject("WScript.Shell")
ws.run "C:\Windows\System32\bash.exe -c 'sudo /root/init.wsl.sh'",0
wsl.startup.shによるinitスクリプト
#!/bin/bash -eu
# start_services
while read -r service
do
status="$(/etc/init.d/$service status)"
if [ $(echo "$status" | grep -e 'not running' -e 'NOT running' | wc -l ) -gt 0 ]
then
/etc/init.d/$service start > /dev/null
fi
done << LIST
cron
ssh
atd
LIST
# get Windows vEthernet IP
if [[ $(grep 'CUSTOM CONFIG' /etc/hosts) == '' ]]
then
# VEthernetからみたWindows側(default-gw)のIP
winIP=$(ip route show default | cut -d' ' -f3)
# WSL以外に、VirtualBoxなどで、NATを立てているときに、便利
# WSL[vmIP] --vEthernet--> [winIP]Windows[127.0.0.x]VirtualBox<---VBoxNAT-Network-->VirtualBoxVM
#
# e.g.
# > PortFowarding: 0.0.0.0:2222 -> 10.10.0.100:22(VM)
# ssh vmhost -p2222
# VM自身のIP
vmIP=$(ip addr | grep eth0 | grep -o '\ inet\ [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' | awk '{print $2}')
cat << TEXTS >> /etc/hosts
# ======== CUSTOM CONFIG =========
# Windows vEthernet IP
$winIP vmhost
$vmIP vmclient
TEXTS
fi # /etc/hosts
if [[ $(grep 'CUSTOM CONFIG' /etc/resolv.conf) == '' ]]
then
cat << TEXTS >> /etc/resolv.conf
# ========= CUSTOM CONFIG =========
nameserver 1.1.1.1 # CloudFlare
nameserver 8.8.8.8 # Google Public DNS
domain eric-lightning.info
TEXTS
fi #/etc/resolv.conf
chmod u+x /root/wsl.startup.sh
WSLのDistroを日時でFULLバックアップするBATスクリプト
@ECHO OFF
REM ===============================================
REM 適宜設定
SET DIST_NAME=Ubuntu-18.04
SET BACKUP_DIR=%HOMEPATH%\wsl-backup.d
REM ===============================================
REM Parse '10/06/2020 Tue' Style
SET CDATE=%date:~6,4%%date:~0,2%%date:~3,2%
SET TEMP_TIME=%time: =0%
SET CTIME=%TEMP_TIME:~0,2%%TEMP_TIME:~3,2%
IF NOT EXIST %BACKUP_DIR% MKDIR %BACKUP_DIR%
SET BACKUP_FULL_PATH=%BACKUP_DIR%\%DIST_NAME%_%CDATE%-%CTIME%.tar.gz
echo START BACKUP %DIST_NAME% to %BACKUP_FULL_PATH%
wsl --export %DIST_NAME% %BACKUP_FULL_PATH%
echo DONE
REM e.g. export to Ubuntu-18.04_20201112-1809.tar.gz
- 時間帯表記が、
'10/06/2020 Tue'
の場合にUbuntu-18.04_20201007-0004.tar
のような出力になる。 - ダブルクリック!
Ctrl+Alt+T
で端末を起動
-
Ctrl+Alt+T
でWindows Terminalを起動. - AutoHotKeyを使用.
- スタートアップフォルダに投げる。
; Ctrl+Alt+T for launch Windows Terminal
^!T::Run,wt.exe
起動時のカレントディレクトリ
# DETECT WINDOWS STARTUP_PATH↲
if [[ "$PWD" =~ "/mnt/c/.*/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup" ]]
then
cd $HOME > /dev/null
fi
# If Windows Terminal
if [[ "$PWD" =~ "/mnt/c/.*/eric" ]]
then
cd $HOME > /dev/null
fi
さいごに
- 普段Linux触っていない人ほど、WSLをおススメしたい。
- 一時期、VirtualBoxとの共存問題みたいなのあったけど解決したみたいなので、全力布教に努める所存である。