はじめに
こんにちは!
BFT名古屋支店・インフラ女子(?)のやまぐちです。
資格取得の勉強や自宅での学習にLinux環境を使いたい!と思っても、VMware Playerを入れて、CentOSのISOをダウンロードして、OS入れてパッケージ更新していろいろ設定して…と使うまでに数日かかっていたため、以前はとても心理的ハードルが高かったです。またいざ使うとなっても起動に時間がかかったり、ホストのリソースを使うため動きが遅くなったりしてとても使いづらい思いをしていました。
それが今やWindows Subsystem for Linux(以後、WSL)を使えばものの5分でLinux環境が手に入ります。しかも超軽量!ホスト側への影響を感じることが今のところありません。
また、テキストエディタとしてシェアが4割近いVisual Studio Code(以後、VSCode)を使うことでシンタックスハイライト機能を十分に活かしてコードを書くことができ、そのままWSL上のLinux環境へ保存することができます。
なんて便利!どうして一年前に知らなかったんだろう!と後悔しまして、過去の自分のためにこの記事を書くことにしました。
今回の構成とゴール
プロジェクトだとフリーツールのインストールを制限されることが多いですがWSLもUbuntuアプリもVSCodeもすべてMicrosoftが用意している純正です。もうほんと何で知らなかったんだろう!と悔やまれる思いを胸にサクッと環境を作っていきます。
Windows 10 上で Ubuntu を使う
WSL2上で動くLinux環境はMicrosoftが準備したイメージである必要があります。開発用のAnsibleサーバをRHELで構築する場合CentOSを使いたいところですが残念ながらCentOSのイメージは用意されていません。Ubuntuだとパッケージをインストールする際はyumモジュールではなくaptモジュールにするなどディストリビューションの違いを意識する必要のある場合もありますのでご注意ください。
システム要件
WSL2を実行するためのローカルPC側の要件は以下の通りです。
- 仮想化機能が有効になっていること
- x64 システムの場合
- Windows 10 であること
- バージョン 1903 以降、ビルド 18362 以上であること
- ARM64 システムの場合
- Windows 10 であること
- バージョン 2004 以降、ビルド 19041 以上であること
仮想化機能が有効になっていることはタスクマネージャのパフォーマンスタブで確認ができます。CPUの仮想化の項目が「有効」であれば問題ありません。
Windows 10のバージョンとアーキテクチャはスタートメニューで「システム情報」と検索して出てきたアプリを選択すると確認ができます。
ビルドで要件を満たしていることを確認できるためバージョンは上の画面に表示されていませんがご了承ください。またこれ以後はx64システム用の手順を記載していきます。
WSL のインストールとWSL2 化(5分)
WSLとはMicrosoftが提供している、Windows上でLinux環境を実行する互換レイヤーです(「主として開発者、特にWeb開発者やオープンソースプロジェクトを利用する開発者のためのツール」をイメージしているとのこと)。実際のLinuxカーネルを使用しているためWSL2はWSLに比べると互換性が高くディスクI/Oも向上しており、インストールしたWSLに更新パッケージをあてることでWSL2が利用できるようになります。
公式のインストールガイドに従ってWSLをインストールしていきます。
1 . 管理者権限でPowerShellを起動し、以下のコマンドを実行してWSLをインストールします。
> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
2 . 続いて以下のコマンドを実行して仮想マシンの機能を有効にします。
> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
3 . 再起動をします。
4 . 以下のリンクから最新のパッケージをダウンロードします。15MBくらいなので時間はかかりません。
x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ
5 . ダウンロードしたファイルをダブルクリックしインストールをします。管理者権限が求められますがこちらも秒で終わります。
6 . 管理者権限でPowerShellを起動し、以下のコマンドを実行してWSL2を既定で使用するようにします。
> wsl --set-default-version 2
Ubuntu の入手(5分)
実行するLinux環境はMicrosoftストアから入手します。対応するディストリビューションはUbuntuを始め、openSUSE, Debian GNU/Linux, Pengwinなど複数用意されています。今回はAnsibleの開発環境として使用したいのでUbuntuを選択しますがFedoraベースのWSLもありそちらでもいいかもしれません。
1 . スタートメニューで「store」と入れてMicrosoft Storeアプリを起動します。
2 . 「ubuntu」と検索して表示されたubuntuの中で今回は最新の20.04 LTSをインストールします。サイズは450MBくらいです。
3 . ダウンロードが完了したらMicrosoft Storeのウインドウに表示されている[起動]を押します。
3 . Ubuntuのターミナルが開き、ユーザ名を入力するプロンプトが表示されます。ユーザ名を入力し、パスワードを設定すればこれだけで使用を開始できます。
ここで表示されるIPアドレスがWindows端末と同じ場合はWSLがバージョン2になっていません。PowerShellでWSLのバージョンを確認してみましょう。
Microsoft Storeから取得したUbuntuをWSLバージョン2にしようとしたら「BIOSで仮想化が有効になっていることを確認してください。」とメッセージが返ってきました。しかしBIOS(私のPCはUEFIでした)では仮想化機能は有効になっています。同じような状況になる方はWindowsの機能の有効化または無効化から仮想化に関する機能が有効になっているか確認してください。
上の図はWindows 10 Proの場合です。Homeの場合はHyper-VではなくWindows ハイパーバイザー プラットフォームという名前でした。機能を有効にしたらPCを再起動します。
起動してきたら管理者権限でPowerShellを起動し、以下のコマンドを実行してUbuntuのWSLバージョンを2に変更します。
> wsl --set-version Ubuntu-20.04 2
変換には3分ほどかかりました。以下の図のように[変換が完了しました。]と返ってきたら完了です。再度バージョンの確認コマンドを実行し2になっていることを確認してください。
VSCode の Workplace 用ディレクトリを作成
VSCodeはまだインストールしていませんが、先にVSCodeのWorkplace用ディレクトリを作成しておきます。場所はどこでもいいのですが今回は/opt/vscodeというディレクトリを作成しubuntuuserで書き込むことにしました。Ansibleもubuntuuserで実行します。
パッケージのアップデート(3分)
Debian系は使ったことがほぼなく、久しぶりに実行するコマンドでパッケージを更新します。
$ sudo apt update $ sudo apt upgrade
Ansibleのインストールと初期設定
UbuntuはRHELと異なり、標準のレポジトリからAnsibleの導入が可能です。最新のバージョンにこだわらなければ以下のコマンドですぐに導入完了です。
$ sudo apt-get install ansible
2021年2月3日の時点でAnsibleのバージョンは2.9.6、pythonは3.8.2です。特に問題はないのでこのままとします。
またAnsibleのディレクトリはデフォルトの/etc/ansibleのまま、実行ユーザはubuntuuserとするため、所有者を変更しておきます。
$ sudo chown ubuntuuser:ubuntuuser -R /etc/ansible
ls -la
コマンド実行でディレクトリやファイルの所有者が変更されていればOKです。
初期設定としてあとはubuntuuserでローカル実行するためにSSHの起動とSSH鍵作成をします。
### SSHの起動 $ sudo ssh-keygen -A $ sudo service ssh start ### ubuntuuserでSSH鍵作成&公開鍵登録 $ ssh-keygen -t rsa $ cat .ssh/id_rsa.pub > .ssh/authorized_keys $ chmod 600 .ssh/authorized_keys $ ls -la .ssh total 20 drwx------ 2 ubuntuuser ubuntuuser 4096 Feb 3 14:42 . drwxr-xr-x 5 ubuntuuser ubuntuuser 4096 Feb 3 14:41 .. -rw------- 1 ubuntuuser ubuntuuser 580 Feb 3 14:42 authorized_keys -rw------- 1 ubuntuuser ubuntuuser 2610 Feb 3 14:41 id_rsa -rw-r--r-- 1 ubuntuuser ubuntuuser 580 Feb 3 14:41 id_rsa.pub
特に問題なく完了です。 また今回はローカルのみの実行なのでホスト名を気にせずAnsibleのインベントリファイル(/etc/ansible/hosts)の末尾にそのままlocalhostと記載しました(個人的には気持ち悪いですが)。
shellモジュールでテスト実行です。
ubuntuuser@DESKTOP-AC9R8UJ:/etc/ansible$ ansible localhost -m shell -a date localhost | CHANGED | rc=0 >> Wed Feb 3 17:06:40 JST 2021 ubuntuuser@DESKTOP-AC9R8UJ:/etc/ansible$
問題なく日付が返ってきました。
VSCode から WSL2 上の Ubuntu につなぐ
実はWindowsのコマンドプロンプトやPowerShellからWSL上のLinux環境へコマンドを実行することができますが、今回はVSCodeで書いたコードをそのままUbuntu側で保存することでより開発を楽にします。
VSCodeのインストール
以下のサイトにアクセスし、VSCodeをダウンロード&インストールします。インストールはそのまま次へ進めば1分もかからずに終了します。
拡張機能 Remote - WSL をインストール
VSCodeのインストールが完了し起動したら左メニュー下の[Extensions]を押し、[wsl]と
検索します。[Remote - WSL]の[Install]を押すとインストール完了です。
Ubuntu に接続&ファイル作成
左メニューでExtensionsの上にある[Remote Explorer]を押すとMicrosoft Storeから入手したUbuntuが表示されるのでその右にある[Connect to WSL]のアイコンを押します。
新しく開いたウインドウで[Open folder]を押し、上に表示される入力欄にUbuntu側であらかじめ作成しておいたVSCodeのWorkplaceのパス(/opt/vscode)を入れます。
[Open file]を押すとファイルの新規作成が可能です。適当にテスト用にplaybookを書いて保存します。
保存したらUbuntu側で転送したりコピペしなくてもちゃんと/opt/vscode以下にtest.ymlができています。すごい…!
ということで/opt/vscode/test.ymlを/etc/ansible以下にコピーし、構文チェック、ドライラン、本実行してみました。
コピーという手間を考えるとWorkplaceを/etc/ansible/とかその下のrolesとし、その下に処理ごとのディレクトリを作成し直接ファイルを作成した方がよさそうだと気づきました。自分一人で使うのでこの辺りは柔軟に変えられますね。
終わりに
文字にすると1万文字を超えてるのですが作業時間は全部入れても一時間あれば十分です。Debian系に慣れていなくて本筋とは関係ない部分で少し時間を取られました(Debian系はsshdではなくsshとかsshのホスト鍵を作成するとか)。またいろいろPlaybookを書いてみて気づきましたがAsnible公式のモジュールのドキュメントに「Ubuntuでは確認してないよ!」と書いてあるものがありました。・・・やはりAnsibleはFedoraのWSLで構築した方がいいように感じています。
VSCodeはGitとも連携できるので、実際の開発用AnsibleサーバへはGit経由で送ればバージョン管理もできそうですね。PowerShellも実行できちゃうし恐るべしVisual Studio Code!!もっとちゃんと使いこなせるようにしたいです。