WSLについての覚書

Linuxや仮想サーバ(Hyper-VVMware)は使ったことがあるが、WSLは初めて」というケースを想定した、Microsoft Learn および塩田紳二氏の各所の記事をまとめ直した程度のメモ。個人的には氏にWSLの解説本を期待したい。なお、数少ない日本語書籍「WSL 構築と利用」は絶版である。

有効にする方法

「コンパネ→プログラム→Windows の機能の有効化または無効化」から、以下を有効にする。

あるいは、管理者権限で起動したPowerShell上でwsl --installでインストールする。 PowerShellでインストールした場合、以下のアクションが実行される。

参考

インストール可能なディストリビューション

  • wsl -l -o でリストアップされるもの(2023-08-05時点)
NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
OracleLinux_7_9 Oracle Linux 7.9
OracleLinux_8_7 Oracle Linux 8.7
OracleLinux_9_1 Oracle Linux 9.1
openSUSE-Leap-15.5 openSUSE Leap 15.5
SUSE-Linux-Enterprise-Server-15-SP4 SUSE Linux Enterprise Server 15 SP4
SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5
openSUSE-Tumbleweed openSUSE Tumbleweed
  • Microsoft Store から利用可能なもの
NAME FRIENDLY NAME
AlmaLinux-8 AlmaLinux 8 WSL
AlmaLinux9 AlmaLinux 9

他にも Fedora, Alpine 等があるが、ここには CentOSはない。

参考

初回起動

スタートメニューにディストリビューション名が追加されており、アクセスすると、ユーザー名とパスワード設定が要求される。

  • このユーザー名およびパスワードは、インストールする Linux ディストリビューションごとに固有であり、Windows ユーザー名とは関係ない。
  • ユーザー名およびパスワードを作成すると、そのアカウントがディストリビューションの既定のユーザーとなり、起動時に自動的にサインインされる。
  • このアカウントは、Linux 管理者と見なされ、sudo (Super User Do) 管理コマンドを実行できる。

そのまま使えないこともないが、 Microsoft Storeより、複数タブで便利な「Windows Terminal」をインストールすることをお勧めする。

参考

設定ファイル

普通に使う分には、systemd の有効化以外で編集することはないと思う。

参考

仮想ディスクイメージの配置先

  • %LOCALAPPDATA%\Packages\(PackageFamilyName)\LocalState\(disk).vhdx (例えば、C:\Users\Alice\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx) に格納される。
  • PackageFamilyName は Get-AppxPackage -Name *ubuntu* で「PackageFullName」として取得できる。
  • ディストリビューションのエクスポート手順は以下のとおり。
    1. wsl --shutdown でWSLを停止する。
    2. wsl --export <Distribution Name> <FileName> でエクスポートできる。ファイル名は拡張子を「tar」とするのが分かりよいか。

エクスポートはスナップショットの代替手段として用いることができる。

参考

ネットワークの構成

  • WSLが起動していると、WindowsLinuxの間にクラスBの範囲のプライベートアドレスを用いた仮想ネットワークが構築される。
  • Windows側からはこのネットワークアダプタとして「vEthernet (WSL)」が見えるようになる。
  • WindowsからLinuxに「localhost」でアクセスできる。よって、WindowsLinuxで同時に同じポートを使うサービスは起動できない。
  • WinNAT により、Linuxから外部(物理ネットワーク)にアクセスできる(2023-08-27時点では、Windows11のWSLでは、Linuxから外部にアクセスできませんでしたが…)。
  • Linuxから外部にアクセスできない場合、resolv.conf の固定化を検討する(参考サイト参照)

WSLの仮想ネットワーク

参考

ファイルアクセス

WindowsLinux:9protocol

9P(Plan 9 File Protocol)1により、エクスプローラから「\\WSL$」でアクセスできる。エクスプローラの左ペインの一番下にペンギンが追加される。Linuxファイルシステムに対する権限は、初回起動時に作成したユーザー権限となる。

参考

LinuxWindows:DrvFS

DrvFSにより、CドライブがLinux内で「/mnt/c」としてマウントされている。

参考


  1. Linuxが広がり始めた2000年頃、なぜLinuxはこんなに成功したのか、という議論とその決定打として、エリック・レイモンドの「伽藍とバザール(日本語訳)」論文があり、同時にLinuxの次は何かという議論で、ベル研究所Unixの次のOSとして分散システムとして設計されている Plan 9 が来るぞ、という話が熱をもって迎えられていたと記憶しています(参考記事)。それ以来20年くらい話を聞かなかった気がしますが、ここでお目にかかれようとは。

Windows10 におけるGCC環境6選

独断による選択指南

  • 特に思うところがなければ、Microsoftがスポンサーをしている MSYS2。ただ、シェル環境をつくってからパッケージをインストールする必要があるので、ひと手間かかる。
  • NativeなLinux環境があった方がよければ、Linux仮想プラットフォームの WSL。仮想マシンプラットフォームを機能追加する必要があるので、MSYS2以上に手間。
  • GCCだけ使えればよく、MSYS2やWSLのセットアップが面倒ということであれば、インストーラ一つでセットアップが完結する MinGW-x64。ただ、オンラインインストーラはプロキシを超えられないようなので、その場合はオフラインパッケージを用いる。
  • 仮想プラットフォーム無しで、広範にLinuxツールを使いたければ、Cygwin
  • MinGW と TDM-GCC は最終更新が古く、現在選択する理由はないでしょう。

GCC環境

MSYS2

項目 内容
サイト https://www.msys2.org/
インストーラ msys2-x86_64-20230718.exe
更新日 2023-07-18
説明 MSYS2 は、ネイティブ Windows ソフトウェアを構築、インストール、実行するための使いやすい環境を提供するツールとライブラリのコレクションです。
スポンサー 私たちのメインサーバーはjsDelivrによってスポンサーされています。Microsoft Open Source Programs Office は、FOSS Fundを通じて財政的に私たちを後援しています。世界中のさまざまな組織がミラーを提供しています。詳細については、ミラーリストをご覧ください。
環境構築手順 https://code.visualstudio.com/docs/cpp/config-mingw

WSL

項目 内容
サイト https://learn.microsoft.com/ja-jp/windows/wsl/
説明 LinuxWindows サブシステム (WSL) を使用すると、開発者は、従来の仮想マシンまたはデュアルブート セットアップのオーバーヘッドなしで、ほとんどのコマンドライン ツール、ユーティリティ、アプリケーションなどを含む GNU/Linux 環境を、変更せずに Windows 上で直接実行できます。
環境構築手順 https://code.visualstudio.com/docs/cpp/config-wsl

MinGW-w64

項目 内容
サイト https://www.mingw-w64.org/
インストーラ1 mingw-w64-install.exe
更新日 2023-04-28
説明 Mingw-w64 は、元の mingw.org プロジェクトを発展させたもので、Windows システムで GCC コンパイラをサポートするために作成されました。64 ビットと新しい API のサポートを提供するために、2007 年にフォークされました。それ以来、広く使用され、配布されるようになりました。
使っているのは誰か https://www.mingw-w64.org/#some-projects-using-mingw-w64
環境構築手順の例(電気通信大学) https://joho.g-edu.uec.ac.jp/joho/gcc_win/

Cygwin

項目 内容
サイト https://www.cygwin.com/
インストーラ setup-x86_64.exe
更新日 2023-06-16
説明 Windows 上でLinux ディストリビューションと同様の機能を提供する、GNU およびオープン ソース ツールの大規模なコレクション 。実質的な POSIX API 機能を提供する DLL (cygwin1.dll)。
環境構築手順の例(金子邦彦研究室) https://www.kkaneko.jp/tools/cygwin/cygwin.html

MinGW - Minimalist GNU for Windows

項目 内容
サイト2 https://sourceforge.net/projects/mingw/
インストーラ mingw-get-setup.exe
更新日 2021-09-05
説明 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポート。ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルを備えています。には、C99 機能をサポートするための MSVC ランタイムの拡張機能が含まれています。MinGW のソフトウェアはすべて 64 ビット Windows プラットフォーム上で実行されます。

TDM-GCC

項目 内容
サイト https://jmeubank.github.io/tdm-gcc/
インストーラ tdm64-gcc-10.3.0-2.exe
更新日 2021-05-24
説明 TDM-GCC は、Windows 用のコンパイラ スイートです。これは、 GCCコンパイラの最新の安定リリース 、Windows との親和性を高めるためのいくつかのパッチ、および無料のオープンソース MinGW.orgまたはMinGW-w64 ランタイム API を組み合わせて、Microsoftコンパイラに代わるより軽量なオープンソースの代替手段を作成します。

参考

組織規模等で商用利用に制限のあるソフトウェア

Visual Studio Community

visualstudio.microsoft.com

それ以外の使用シナリオ:

エンタープライズ以外の組織では最大 5 ユーザーで Visual Studio Community を使用できます。 エンタープライズ組織 (PC 250 台または年間売上が 100 万米ドル*1の組織) については、オープン ソース、アカデミックな研究、学習環境のクラスルームといった前述のシナリオ以外で使用することはできません。

Docker Desktop

docs.docker.jp

Docker Desktop の利用条件変更

現在、大企業(従業員が 251 人以上、または、年間収入が 1,000 万米ドル*2以上 )における Docker Desktop の商用利用には、有料サブスクリプション契約が必要です。

Anaconda

https://legal.anaconda.com/policies/en/legal.anaconda.com

ORGS - 商業ビジネスおよび大規模 (200 以上) 組織での使用向け

一般商業用途で製品を必要とする従業員 200 名を超える企業および組織 (営利および非営利の両方) を含む法人は、購入済みの製品を持っている必要があります。

Oracle VM VirtualBox

www.oracle.com

§ 2 ライセンスの付与。

ラクルは、個人使用、教育的使用、または評価を目的として、ホスト・コンピュータ上で製品を複製、インストール、実行、および社内で使用するための、無償の非独占的、譲渡不可の限定的ライセンスをお客様に付与します。「個人使用」とは、単一のホスト・コンピュータ上でオラクルから製品をダウンロードする人のみによる非商業的使用を指します。ただし、そのホスト・コンピュータには複数のクライアントまたはリモート・コンピュータが接続されておらず、そのクライアントまたはリモート・コンピュータがリモートでの表示のみに使用されることが条件となります。ゲストコンピュータ。「教育的使用」とは、教育機関 (学校、単科大学、総合大学) の教育カリキュラムの一環として、その教育機関の教師または学生によるあらゆる使用を指します。「評価」とは、製品を最大 30 日間テストすることを意味します。その期間が終了すると、製品を使用することはできなくなります。

ラクルは、このライセンスで明示的に付与されていないすべての権利を留保します。

VMware Workstation Player

www.vmware.com

商用以外での利用および個人利用の場合は、無償バージョンが利用できます。無償バージョンは、生徒や学生、非営利組織も利用できます。

商業組織で Workstation Player を使用するには、商用ライセンスが必要です。

*1:1ドル≒142円、100 万米ドル≒1億4千2百万円

*2:1ドル≒142円、1,000 万米ドル≒14億2千万円

「Rails7 on Windows 環境構築ガイド」を書いてみた

何をしたのか

Windows 環境下で Rails7アプリを作成したので、手順を記録しておこうと思ったが、はてなブログでは「コードブロックの後のリスト番号が連続しない」ため、Qiitaに記事を書いた。連作になってしまったので、ZennにBookとしてまとめた。

zenn.dev

qiita.com qiita.com qiita.com

サイトの使い分け

LiveEditorがあるので、記事はQiitaが書きやすい。記法的にはてなで実現できない場合は Qiitaに書く。Zennは複数の記事をまとめてBookにできるので、連作はZennに書く。特に面白みのない方針である。

参考

PowerShellで複数のテキストファイルを処理する

  • 文字を置換する
Get-ChildItem $target|%{
    if($_.GetType().Name -eq "FileInfo"){
        (Get-Content $_.FullName)|%{
            $_ -replace "探す文字列","置き換える文字列"
        }|Set-Content $_.FullName
    }
}
  • 1行目をスキップしたファイルに更新する
Get-ChildItem $target|%{
    if($_.GetType().Name -eq "FileInfo"){
        (Get-Content $_.FullName|select -Skip 1)|Set-Content $_.FullName
    }
}
  • 行数を数える
Get-ChildItem $target|%{
    if($_.GetType().Name -eq "FileInfo"){
        "{0},{1}" -f (Get-Content -Path $_.fullname).Length, $_.Name
    }
}

参考

SQL Server でテーブルのレコード件数の一覧を取得

SQL Server でテーブルのレコード件数一覧を取得する場合、以下のSQLを実行して、生成したSQLを加工して実行していたが、面倒になってきたので、代替手段を探す。

select 'select ''' + TABLE_NAME + ''' ,count(*) from ' + TABLE_NAME + ' union' from INFORMATION_SCHEMA.TABLES

下記の記事でいろいろ方法があることがわかるが、対象が1テーブルだったり、一覧で取得できる場合は概数だったりで、欲しいものが得られない。「sys.tables」にも行数の情報はないし。

qiita.com

仕方ないので、INFORMATION_SCHEMA.TABLES をカーソルで回して、件数一覧の仮テーブルを作成することにする。もっと簡単な方法がありそうなものだが…

gist.github.com

.NET Framework と .NET のサポート状況

一部(「Windows Server、バージョン 1709」とか)省略したりしているので、詳細はリンク先を参照のこと。

.NET Framework

バージョン リリース サポート終了 クライアントOS サーバOS Visual Studio
.NET Framework 4.81 2022/8/9 Windows 11
Windows 10
WS2022 (未確認)
.NET Framework 4.8 2019/4/18 Windows 11
Windows 10
Windows 8.1
Windows 7 SP1
WS2022
WS2019
WS2016
WS2012R2
WS2012(x64)
WS2008R2 SP1
2022
2019
2015
2013
.NET Framework 3.5 SP1 2008/11/18 2029/1/9 Windows 10
Windows 8.1
Windows 8
Windows 7
WS2016
WS2012R2
WS2012(x64)
WS2008R2 SP1
WS2008 SP2
WS2003
2019
2015
2013

Visual Studio の欄は、そのフレームワークのプロジェクトを作成できるか確認した結果を整理した。

参考

.NET

バージョン リリースの種類 サポートフェーズ 初回リリース サポート終了 クライアントOS
.NET 8.0 長期サポート1 アクティブ 2023/11/14 2026/11/10 Windows 11
Windows 10
.NET 7.0 標準期間サポート2 メンテナンス 2022/11/8 2024/5/14 Windows 11
Windows 10
.NET 6.0 長期サポート アクティブ 2021/11/9 2024/11/12 Windows 11
Windows 10
参考

.NET Framework 4.8 のサポート期限はいつか

ライフサイクルに関する FAQ - .NET Framework | Microsoft Learn

.NET Framework 4.x とその更新プログラムのライフサイクル ポリシーに変更はなく、引き続き OS のコンポーネントとして定義され、インストール先の Windows のバージョンと同じライフサイクル ポリシーが適用されると見なされます。

.NET Framework のシステム要件 - .NET Framework | Microsoft Learn

.NET Framework 4.8 は、Windows Server 2022 について「OS と共にプレインストール済み」

Windows Server 2022 - Microsoft Lifecycle | Microsoft Learn

Windows Server 2022 のサポート期限は「2031年10月14日」。よって、.NET Framework 4.8 は少なくとも、この日まではサポートされると推測できます。

更新履歴
  • 2023-11-16 .NET 8 リリースに伴う更新

  1. 長期サポートは最初のリリースから 3 年間サポート。
  2. 標準期間サポートのサポート期間は 18 か月。