wsl構築(archlinux)

wslの知見がそこそこ溜まってきたので書き連ねていきます。
同様にwslの環境を作る際などご参考いただければと思います。


# 前準備
今回はwslにて__archlinuxを動かす__をメインにお話をするのでwsl導入のお話は飛ばします。
下記公式のページを参考にしながらwslの環境を整えてください。

- [Windows 10 用 Windows Subsystem for Linux のインストール ガイド](https://docs.microsoft.com/ja-jp/windows/wsl/install-win10)

またterminalについては筆者のおすすめとしては__windows terminal__をお勧めします。
下記storeから落とせるので良ければご使用ください。

- [windows terminalを入手](https://www.microsoft.com/ja-jp/p/windows-terminal/9n0dx20hk701?activetab=pivot:overviewtab)

terminalの設定は__vscode__をお勧めしてます。いずれもmicrosoftが作ってるので親和性が高いですね。
vscodeはこちら

- [visual studio code](https://code.visualstudio.com/)


下記のご準備ができたら次項へお進みください。
1. wsl install
2. windows terminal install
3. vscode install

# 環境
今回構築する環境となります。

|項目     |内容                |
|:--------|:------------------|
|version  | wsl2              |
|terminal | windows terminal  |
|os       | Archlinux         |
|システム管理  | systemd       |


# Archlinuxのインストール
archlinuxの導入方法としては下記2点があります。

- [ubuntu環境をArchLinux環境へ置き換える](https://wiki.archlinux.jp/index.php/WSL_%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB) ※ArchLinuxの公式にはこちらが記載
- [有志のツールでwslへ登録する]()　※すでに作成済みのArchのイメージを登録してくれます。

方法はお好みですが筆者は最近めんどくさくなってきたので後者のツール使ってます。
※Archならいくらでも環境更新できるので

本記事でもこの方法を記載します。

## ツールのダウンロード
下記をクリックしてツールをDL&解凍します。
~~https://github.com/yuk7/ArchWSL/releases/download/20.4.3.0/Arch.zip~~
↓下記から最新版のArch.zipをDLしてください
- https://github.com/yuk7/ArchWSL/releases
- https://github.com/yuk7/container-systemd-init-tool/releases ※systemd対応版


解凍すると下記ファイルがあります。
Arch.exeを実行すればインストールが始まりますが。実行ディレクトリ＝wslで使用するOSイメージの場所になってしまうので
実行する前に管理しやすい場所に置くのをおすすめします。
※%HOMEPATH%\wslなどに筆者はおいてます。

```
- Atch.exe       => Archをインストールするツールです。ファイル名 = wslで登録されるディストリビューション名になります。
- rootfs.tar.gz  => すでに作成済みArchのイメージです。
```

installが完了したらwindows terminalを起動します（デフォルトpower shellが立ち上がります。）
下記入力して起動してるか確認

```
PS C:\Users\ymdts> wsl -l -v
  NAME            STATE           VERSION
  Arch            Stopped         1
```
ここまで出来たら次に環境を整えていきます。

# ArchLinux環境整備
インストール直後だと、環境が古いせいでうまく動作しませんので整えていきます。
下記コマンドで入れます。

```
PS C:\Users\ymdts> wsl -d Arch
```

## mirror listを変更
そのままだとアメリカあたりのミラーを見ちゃうので日本のを持ってきます。
↓参考資料
https://wiki.archlinux.jp/index.php/%E3%83%9F%E3%83%A9%E3%83%BC

```
$ vim /etc/pacman.d/mirrorlist
```
※Japanのものを上に持ってきてください。上から到達可能なものを参照します。

## pgp鍵リセット
下記を実行して鍵を更新します。　※これをやらないとパッケージインストール時こけます。

```bash
# 鍵の初期化
$ pacman-key --init

# 鍵の更新
$ pacman-key --populate archlinux
$ pacman -Syy archlinux-keyring

# パッケージの更新
$ pacman -Syu
```

## userの作成&sudo
```bash
$ pacman -S vi
$ visudo
$ useradd -m -s /bin/bash -G wheel <user name>
$ passwd <user name>
```

## デフォルトユーザー変更
power shellでArch.exeを配置したディレクトリまで移動して下記入力

```
PS C:\Users\ymdts\wsl> .\Arch.exe config --default-user <user name>
```

# windows terminal設定
設定を開き下記を入力　※vscodeつかってればある程度自動で入ります。

```
    "profiles":
    {
        "defaults":
        {
            // Put settings here that you want to apply to all profiles.
        },
        "list":
        [
            {
                "guid": "{<your uuid>}",
                "hidden": false,
                "name": "Arch",
                "commandline": "wsl.exe ~ -d Arch --user <user name>",
                "cursorShape": "filledBox",
                "source": "Windows.Terminal.Wsl"
            },
        ]
    },
```


# systemd環境構築
wslでは独自のinitシステムを使用しているため、そのままではsystemdをを使用することができない
使用できるようにする[__genie__](https://github.com/arkane-systems/genie)というツールがあるのでこちらを使用します。
※wsl1 -> wsl2に変更した環境しか動かない可能背有り？（筆者再度やってみたらだめでした。）
※オプションでgenie -c <shell>と入力するとsystemdが使用できる環境で立ち上がる模様

## yay install
genieのインストールはAURヘルパーを使用するのが楽なのでyayを入れましょう

記事は下記もありますがコマンドだけパパっと記載しておきます。
https://qiita.com/Gen_Arch/items/ad7aef73cfc5a12b4e45

```
$ cd ~ ; mkdir abs;
$ pacman -S base-devel git
$ git clone https://aur.archlinux.org/yay.git
$ cd yay
$ makepkg -si
```
makepkgでこけたらこちらを参考に　→　https://qiita.com/Hayao0819/items/1d647683bf458d10351a

## genieのインストール
下記コマンドで入ります。

```
$ yay -S genie-systemd
```

またgenieでは.NETCore 3.0ランタイムを明示的にインストールする必要があります。
同様に、1.24以降の.NET Core 3.1ランタイムもインストールする必要があります。
これも下記でインストールできます。

```
$ cd ~/abs
$ mkdir dotnet; cd dotnet
$ yay -S wget
$ wget https://github.com/arkane-systems/genie/files/3827049/dotnet-PKGBUILD.tar.gz
$ tar -xzvf dotnet-PKGBUILD.tar.gz
$ makepkg -si
```

## 立ち上げ方法解決　（2020/09/22　追記）
下記genieからシェルを指定で立ち上げることでsystemdが使用できるようだ。

```
$ genie -c <shell>

例：zshだと
$ genie -c zsh
```
※windowsのexeファイルなどは実行できなくなり、clip.exe経由でのクリップボード共有など不可になるので注意

# tmuxのクリップボード共有
tmuxでクリップボードを共有させるために設定します。
__※wsl環境でclip.exeが使えるのを確認してください！__

使用するのは下記
https://github.com/tmux-plugins/tmux-yank

## 持ってくる
```
$ git clone https://github.com/tmux-plugins/tmux-yank  ~/.tmux/plugins/tpm
```

## .tmux.confに設定
```config:~/.tmux.conf
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
run '~/.tmux/plugins/tpm/tpm'

set -g @plugin 'tmux-plugins/tmux-yank'
set -g @plugin 'tmux-plugins/tmux-logging'
```

## 有効化
```
$ tmux source ~/.tmux.conf
& <preffix> + i
& <preffix> + u
```

# vimクリップボード共有
下記を.vimrcに追加

```
if system('uname -a | grep -i microsoft') != ''
  augroup myYank
    autocmd!
    autocmd TextYankPost * :call system('clip.exe', @")
  augroup END
endif
```