Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

posted at

updated at

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

あらまし

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との共存問題みたいなのあったけど解決したみたいなので、全力布教に努める所存である。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?