「この記事は個人の見解であり、所属する組織の公式見解ではありません」
5月8日、4月には結局間に合わなかった Windows 10 Redstone 4 のアップデートが配信されました。Redstone におけるメジャーバージョンアップは従来のService Pack 並の大きな変更ですが、その中でも特に WSL, Windows subsystem for Linux における機能拡張に着目して、WSL で どこまで出来そうか確認します。
Redstone 4 における最も基本的でかつ重要な変更として、パーミッション管理が多少改善された事にあると思っていています。特に(visual studio Code 等でコードを編集するために)、WIndows 側のディレクトリにローカルリポジトリをおいていた場合、今までは ユーザー root, グループ root, パーミッション777 になっていたと思います。これが少しはましになりそうです。
今回利用するのは WSL の中でも Ubuntu 18.04 を利用します。いつになったら RedHat がリリースされるのか。笑
Windows をゲーミング用途以外で触るのは本当に久しぶりです。 早速 Windows Update をかけます。時々アップデートを無視してしまうことがあるので、Cortana で「Windows Update」 と入力し、強制的にアップデートをかけます。ついでにWindows Defender の定義ファイルも更新しましょうね~。結構時間かかります。
終了すると必ず再起動を求められるのでお忘れずに。
古いWSL環境を削除する
必ず CMD.exe から管理者モードで 以下のコマンドを実行します
lxrun /uninstall /full /y
これにより、現存するUbuntu 環境が消えます。もしエラーが実行できない場合は、よくわかりません(※ なんでエラーになったのかわからないのですが、特に気にせず次のステップにすすめました)。
なので、無視して次に進めて大丈夫です
Windows Store から Ubuntu 18.04 をインストールし、普通に起動します。
ユーザー名、パスワードを設定できるので設定します。
umask の設定をする
まず、デフォルトの状態でディレクトリを作ると、パーミッションが 777 になっていると思います。(なっていないならこのステップは無視)
vim かなにかで .profile を開き、以下の行のコメントを解除します
#umask 022
コメントアウトしたら source .profile で再度読み込みを
Windows が採用しているファイルフォーマットNTFSには、Linuxパーミッションを保存することが出来ないので、アダプターとなるファイルシステム drvfs にメタデータを付与するオプションを付けて、再度マウントする
# C がすでにマウントされているなら、一度アンマウントする
$ sudo umount /mnt/c
# metadata オプションをつけて再度マウントする
$ sudo mkdir /mnt/c
$ sudo mount -t drvfs C: /mnt/c -o metadata
これにより、windows 側のフォルダも、パーミッションが付与できるようになる。やったぜ。
ところがこれ、大きな落とし穴があり、windows 側でファイルを更新すると、なんとパーミッション等のメタデータが破壊されてしまう。なんでやねん!!!笑
というわけで、マウント時にデフォルト値を設定してあげることで、windows 側でファイルをいじっても元通りっぽいパーミッションになることができる。
$ sudo mount -t drvfs C: /mnt/c -o metadata,uid=1001,gid=1001,umask=22,fmask=111
↑の例だとC 全体をマウントしているので、workspace などのみをマウントして利用するのが安全そう
$ sudo mount -t drvfs 'C:\workspace' /mnt/workspace -o metadata,uid=1001,gid=1001,umask=22,fmask=111
その他 windows 環境での作業改善をする
個人的にはMac のctrlキーが Aの左にあるの、すごい気に入っていたので、ctrlキーを A の左のキーに割り当てます。windows 標準JISキーボードは大体左にcapslock があるんじゃないでしょうか。
フリーソフトでいじることも可能ですが、変なソフト入れたくなかったので直接レジストリをいじります。
cortana に regedit.exe と入力します。
細かい方法は参考記事に載っていますが、capslock を 左ctrlに割り当てるには
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layoutを開く。
- 右クリックして→「新規」→「バイナリ値」を作成して、名前を「Scancode Map」にする。
- Scancode Mapを開く。
- 以下のように値を設定する。
0000 0000 0000 0000
0200 0000 1D00 3a00
0000 0000
で実現できます。1d00 というのは、ctrl キー 0x1d のリトルエンディアン2バイト記法のため
さて、これで多少は使えるようになりました。
次は実際に快活環境を入れて、開発動かしてみるか……
参考にした記事とか