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
13
Help us understand the problem. What is going on with this article?
@koumaza

ArchWSLの構築

- ArchWSLの使い方及びインストール方法です。
- 現在(2021-03-22)の時点ではOutdateしていません

はじめに

Insider Previewを使っていること前提です。
Windows InsiderのDevリングで運用すると3ヶ月に一回OSが壊れるのでSlowにしたほうがいいですよ。まじで。(←最近はDevリングも安定してきました)
でもスリルと新機能がたまんねぇよな!

ドキュメント

オフィシャルドキュメンテーション

公式のドキュメンテーションです。
分からないことがあったら、下記のどちらかに飛んで、検索機能を使うといいと思います。

最初に知っておきたいこと

Shellとは

Shellでシェルと読みます。
ターミナルなどからの入力をコンパイルして、 OSに命令をする役割に当たります。
また、OSからの出力も受信します。

Terminalとは

Terminalでターミナルと読みます。
これはシェルにアクセスするためのものです。
ユーザーからの入力をシェルに入力したり、シェルからの出力を表示したりします。

WSLとは

Windows Subsystem For Linux 略してWSL(ダブリュー エス エル)です。
WSLで勘違いしやすいのが、あくまでもWSLはWindows上でLinuxを動かす機能だということです。
OSのことを指しているのではありません。

WSL1

WSL1(WSLと呼ばれていた) はLinuxカーネルをエミュレート、つまりLinuxカーネルのふりをしてOSを動かします。
そのためパフォーマンスが悪かったり、使えないシステムコールがあります。
まあ、Linuxのふりをするのにも限度があったわけですね。

WSL2

そこで誕生したのが WSL2 です。
これでLinuxカーネルをWindows上で動かせるようになりました。
パフォーマンスが劇的に向上しています。

下準備

まずWSLのインストール

PowerShellを管理者権限で開き
Win+R ; powershell or pwsh

PowerShell-AsAdmin
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
## Press keyboard "N" key at all times

再起動をしたら

cmd
wsl.exe --set-default-version 2 # デフォルトでWSL2をインストールするようにする
カーネルを更新

wsl_update_x64.msiをインストール
また、設定のアップデートにカーネルの更新がないかも確認してください。
もし更新が可能なら更新をしてください。

Wingetのインストール

github.com/microsoft/winget-cli/releases から.appxbundleをダウンロードして開き、インストール。または再インストール。

Terminal

add-to-winget-setting
{
    "$schema": "https://aka.ms/winget-settings.schema.json",

    // For documentation on these settings, see: https://aka.ms/winget-settings
    "source": {
      "autoUpdateIntervalInMinutes": 1
    },
    "experimentalFeatures": {
        "experimentalMSStore": true,
        "experimentalCmd": true,
        "experimentalArg": true,
        "list": true,
        "upgrade": true
    }
}
install
# Winget Config
winget settings

# Winget Install
## Windows Terminal Preview
winget install Microsoft.WindowsTerminalPreview -s msstore
## PowerShell-Preview
winget install powershell-preview
## Alacritty (Stale)
### Wingetのマニフェストが少し古いです
winget install alacritty

これらは推奨ではありません。。必須なんだよなぁ。。なので入れます
Preview版のほうが新しいって感じでいいですよね?胸が躍リマスね!

  • RegistoryのLxssを使ってる系(Win-Terとか)は不具合を起こすことがあります。そのときは再起動をします。 大抵は治るのですが、治らなかった場合はWindowsUpdとかのきっかけで治る場合もあります。早まってクリーンインストール繰り返してWindows構築何回もしたくないですよね^^

Alacrittyのせっていのれい

フォント

木漏れ日フォント+Firacode+Nerd をみっくすして使っています。。。みっくす、、えろいえっち
fontex
みっくす方法、リリースはここ!
https://git.io/ecchi

インストール

ArchWSLorArchWSL2から、Arch(2).zipをDL
ArchWSLと2の違いはSystemd関連です。
どっち??ってなったらArchWSLを試してみましょう。こっち使わないと2の恩恵がわからないしね!

まずzipの中身を見るとわかるのですが
image.png

このようにArch.exerootfs.tar.gzが入っています。

  • Arch.exeはリネームすればWSLに登録するディストリ名を変えられます。(Arch.exeランチャーのソース)
  • rootfs.tar.gzはリネームしたらいけない。(詳しくはソース)

ソースのmainより
https://github.com/yuk7/wsldl/blob/6e191a1876a4cdec8d47467b5f6baa2c78680a7b/main.c#L62
install.tar , install.tar.gz
rootfs.tar , rootfs.tar.gz
これらがインストールするソースボールの名前に使えます。
Gentooなどは.txzなのでTarに解凍すればインストールできます。

私はArcherと言う名前にしてます。

WSLで動かすOSの場所

何処においてもいいんです。サイコー

ただ、分かりやすい位置に置いとくのがベターだと思います。
例 : C:\Users\Username\WSL\Arch\Ver2
例 : Z:\WSL\Zarch\

あとはターミナルでArch.exe起動しましょう。それだけでインストールされる。すき❤////
エラー出たらまずは再起動してみるといいです。

0x80370102エラーが出たらBIOSで仮想化を有効化してください。

デフォルトターミナル

これは任意ですが、Arch.exeから起動するのはデフォルトではWindows Terminalではないので変えることができます。
Arch.exeをリネームしていたら代入してください。

pwsh
### Arch.exeがあるディレクトリで実行
Arch.exe config --default-term wt

初期設定

※インターネット環境がある前提です^^

Pacman

shell
vim /etc/pacman.d/mirrorlist;vim /etc/pacman.conf

pacman.confmirrorlist書き方はArchWiki/PacmanArchWiki/Mirrorを参照してください。

shell
pacman-key --init;pacman-key --populate;pacman -Syy archlinux-keyring

keyringの初期設定;keyringのインストール;keyringの更新

パッケージのインストール+アップグレード

shell
pacman -Syyuu --needed base-devel fish vim neovim git progress python go repo tmux

WSL2ではSYSV IPCが動作するためfakeroot-tcpである必要はありません。うそついてごめんなさい。

最初にfakerootをインストールするか Y/n で聞かれるので n と打ち Enter を押しましょう。 Y だと一部システムが動かなくなります。
fakeroot-tcpをもし置き換えてしまった場合は、やり直すかコンパイル済みのものをインストールします。

Install
fakeroot-tcp
tmp_fakeroottcp=$(mktemp) && \
curl -L "https://mirror.lesviallon.fr/arch4edu/$(uname -m)/fakeroot-tcp-1.25.3-2-$(uname -m).pkg.tar.zst" > ${tmp_fakeroottcp} && \
pacman -U ${tmp_fakeroottcp} && rm -f ${tmp_fakeroottcp} && unset tmp_fakeroottcp

非ルートユーザーの作成

ルートユーザーだとyayが使えないのですy。
$Ur_Favo_Name に作りたいユーザーの名を代入してください

shell
# 代入
export Ur_Favo_Name=''
## or
set -gx Ur_Favo_Name ''

# 作成
useradd -md /home/$Ur_Favo_Name $Ur_Favo_Name
# sudoの設定
$EDITOR /etc/sudoers
### Or
  echo -e "\n##\n## Manually defining privilege user specification\n##\n${Ur_Favo_Name} ALL=NOPASSWD:ALL" \
  >> /etc/sudoers
# パスワードの設定
passwd $Ur_Favo_Name

ユーザー名に代入してください。
viの場合、保存するときに:wq!を使います。

sudoers
...
ユーザー名 ALL=NOPASSWD:ALL

yay

shell
git clone https://aur.archlinux.org/yay-git.git;sed -i -e /exit\ \$E_ROOT/d /bin/makepkg;cd yay-git;makepkg;pacman -U yay-git-*.pkg.tar.*

Genie

このままだとSystemdが使えないので(2ではない場合)

shell
sudo -u $Ur_Favo_Name yay -S genie-systemd-git

その他

Shellの起動時にGenieが実行されるようにすると便利

config.fish
genie -s

Genieを使いたくない場合FishならこうすることでConfを読み込まずにシェルを起動できる

fish_without-config
wsl -- env HOME=(mktemp -d) fish

例えば、Tmuxすぐ起動したいなら

arw.cmd
@REM e.g. locate in ${env:USERPROFILE}\bin etc....
@wsl.exe -d ArchV2 -- genie -c tmux

Xserverを使うには$DISPLAYにIPアドレスを入れないといけないです。
これはipconfigでもできるらしいけどやらない、、

GetIP
set -gx DISPLAY (pwsh.exe -c 'Get-NetIPAddress -AddressFamily IPv4 | Where{$_.InterfaceAlias -eq "vEthernet (WSL)" } | select -ExpandProperty IPAddress' | perl -pe 's/\015\012/\012/g' | sed -e "s/\$/:3/" ) > /dev/null &

(絶対.NETのほうが速い、、、)

WindowsのPATHをLinux側で消したいとき

fish_remove-windows_path
set PATH (echo $PATH|tr ' ' '\n'|grep -v /mnt/|grep -E '^/')

トラブルシューティング等

fishが/mnt上で動かない

別シェルを使うしかないね、、、、、

Xを使うとdbusが応答しない

-> aurdbus-x11に置き換える。

Dockerが使えない

-> podmanを使う (monoとかでも動くと思います。)

daemonレスで使えますが、rootレスで使うには別途作業が必要です。

-> ubuntuを使う

https://cloud-images.ubuntu.com/ から xxxxxx-server-cloudimg-amd64-wsl.rootfs.tar.gz をDLしてrootfs.tar.gzにリネーム
https://github.com/yuk7/wsldl/releases/download/19111602/icons.zip から icons.zip/ubuntu.exe (Ubuntuのバージョン番号を加えてリネームしたほうがわかりやすいかと)
この2つを同じディレクトリに置けばUbuntuがインストールできます。

あきかんはリサイクル

お問い合わせは、
お客様相談室(体言止め)
ピラミッド

知らんけど

13
Help us understand the problem. What is going on with this article?
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
13
Help us understand the problem. What is going on with this article?