LoginSignup
4
2

More than 3 years have passed since last update.

快適WSLのためのちょっとしたTips.

Last updated at Posted at 2020-12-07

あらまし

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との共存問題みたいなのあったけど解決したみたいなので、全力布教に努める所存である。
4
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2