0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Windows上でLinux活動するための環境構築します

Posted at

新しいノートパソコンを買ったので、Windows上でLinux活動するための環境構築します。

Windows Terminal

とりあえずターミナルがないと落ち着かない
コマンドプロンプト?んなもんターミナルソフトに含めねぇよ!
Windows Terminalをインストールします。
wingetはプリインストールされていました。

PS> winget install terminal

CmderとかMsys2とかのターミナルエミュレータソフトは使っていたことがあり、それと似たような作りこみです。
Cmderにあった文字化けとか文字のずれとかがなくてより快適になりました。

デフォルトで立ち上がるシェルがPowerShellだったので、下記のWSL2設定後、Ctrl+,でWSL2に変更しておきました。

以後、powershellのプロンプトは"PS>"で示します。
SSHでメインマシンンのデスクトップつなぐとかに使うためWSL2は入れておきます。

WSL2

普通にストアからWSL2落としました。
その後ターミナル上から

PS> wsl --install -d ubuntu

基本後述のmultipass上にdocker展開して進めるつもりですが、わざわざmultipassつなげなくても、
Vimでメモとったり、デスクトップにsshする時くらいの目的だったらwslでいいかなと思いますので入れました。

フォント

zsh, neovimでpowerlineを使っていますので、powerline fontをWindowsOSにインストールしておきます。
Dropboxによく使うフォント類はためてあるので、.ttfファイルを右クリック→インストールしました。
私は Ubuntu Mono delivative Powerline を使っています。

multipass

dockerで開発進めたいので、 multipass 入れます。
WSL2上でdocker構築するのはDocker for Desktopインストールしたりで骨が折れました。
Vagrantとも相性悪く、今まで使っていたVagrant+Virtualbox環境が使えなくなって、Docker for Desktopはもう使いたくありません。
だいたいDockerにGUIとかいらねーだろ

multipassでDocker環境構築する参考はこの辺
MacでDocker Desktopを入れずにDocker CLI+Multipassで代替してみる

multipassのことはじめはこの辺
仮想環境multipassを試す

multipass vs Virtualbox+Vagrant

multipassはVirtualbox+Vagrantでやっていた環境構築と似たようなことができます。
Virtualboxは通常GUI操作、そこを Vagrantをはさむことでheadless起動(CUI操作)、仮想マシンの構築、設定のコード化ができます。

multipassの特徴は下記。
結局Virualbox+Vagrantでやっていることとあまり変わらないです。

  • ホストのOSがクロスプラットフォーム
  • Hypyer-V, QMU, Virtualbox等、踏み台にできる仮想環境が多岐に渡る
  • イメージはUbuntu固定
  • 操作はCUI限定
  • cloud-initによる柔軟な初期設定のコード化

Virtualbox+Vagrantと比べたメリットは余計なGUIがないこととイメージがUbuntu固定とマシンの立ち上げが高速(らしい)ことかな。

WSLが一般的になってきても,なぜmultipassを使うか?
WSLがDocker for Desktopを使わないとDocker使えないからです。

インストール

PS> winget install multipass

wingetは管理者権限で実行してください。

インスタンス立ち上げ

試しにインスタンスを一個作ってみます。

PS> multipass launch
 multipass launch
launch failed: Hyper-V is not available on this edition of Windows 10. Please upgrade to one of Pro, Enterpriseor Education editions.

エラーで立ち上がりませんでした。
Windows10 Home Editionを使っているので、Hyper-Vをサポートしていないようです。

公式にも書いてありました。

Prerequisites
Hyper-V
Only Windows 10 Pro or Enterprise, version 1803 (“April 2018 Update”) or later is currently supported. It’s due to the right version of Hyper-V only being available on those versions.

Hyper-Vの代わりに、Virtualboxで立ち上げる設定をします。

まずはVirtualboxをインストールします。

PS> winget install virtualbox

次にlocal.driverを設定します。

PS> multipass set local.driver=virtualbox

コア数、メモリ、ディスク設定を変更したインスタンスの立ち上げ

先ほどの参考を例に
下記設定でインスタンスを立ち上げます。

  • インスタンス名: master
  • CPU: 4コア
  • メモリ: 4GB
  • ストレージ: 40GB
PS> multipass launch --name master --mem 4G --disk 40G --cpus 4 --cloud-init ./cloud-config.yml

docker, docker-composeをプリインストールしたインスタンスを立ち上げるcloudinitのconfigファイルの記述です。

cloud-config.yml
#cloud-config

groups:
  - docker

system_info:
  default_user:
    groups: ["docker"]

package_update: true
packages:
  - docker
  - docker.io
  - docker-compose

snap:
  commands:
    - 'snap install multipass-sshfs'

うまくたちあがりました。

スクリーンショット 2021-12-09 220452.png

共有フォルダとしてmount

ローカルディレクトリをmountします。

設定項目があるようなので、設定します。

管理者権限で実行してください。

PS> multipass.exe set local.privileged-mounts=true
PS> multipass.exe mount Dropbox master:/home/ubuntu/Dropbox
mount failed: cannot connect to the multipass socket

まだできない。

PS> multipass.exe mount C:\Users\yuich\Dropbox\ master:/home/ubuntu/Dropbox

sourceは絶対パスが必要だそうです。
これで成功しました。

Port Forwarding

今のところmultipassには簡単にport forwardingを設定できる機能が備わっていないので、ssh port forwardingを設定する方法をGithubで見かけました。

canonical / multipass Port forwarding #309

Possible w/ ssh local (or remote) port forwarding:

• forward requests from multipass host (port 9000) to multipass instance (port 80)

  sudo ssh \
      -i /var/root/Library/Application\ Support/multipassd/ssh-key/id_rsa \
      -L 9000:localhost:80 \
      multipass@<multipass instance ip>

• access multipass instance (port 80) from any box that can access multipass host

  curl <mutlipass host ip>:9000

もう一つの方法として、Virtualboxを使っていることをいいことに、無理やりVirtualbox GUIからport forwarding の設定を行います。

ただし、multipassから起動したVirtualboxの仮想マシンは管理者権限で実行しているため、普通に開いても仮想マシンが見えません。下記のようにして、pstoolsを使用して、仮想マシンが見える状態でVirtualbox UIを開き、さらにそこからport forwadingの設定をします。

通常ユーザで VirtualBox を起動しても k3s の仮想 OS は見えません。管理者権限で動いているからです。pstools をインストールし、管理者権限で以下を実行すると出てきます。

PS> PsExec64.exe -s -i "C:\Program Files\Oracle\VirtualBox\VirtualBox.exe"

参考: multipass 上に kubernetes 環境を最速で作る

screenshot2021-12-30 124323.png

設定は仮想マシンがrun状態で行います。
わざわざshutdownしてから設定したら、Virtualboxからエラーダイアログが出まくりました。
設定完了後に仮想マシンを再起動することも忘れずに行いましょう。

PS> multipass restart

仮想環境を再起動してport forwading設定完了。
port設定の反映は適当なindex.htmlを用意して、pythonのhttp.serverモジュールでサーバーを立ち上げ、pingやcurlやブラウザからのアクセスをもって確認します。

$ python3 -m http.server 8888

クライアント側で8888番ポートでサーバー立ち上げ

$ curl -fsSL localhost:8888

ホスト側(Windows)から疎通確認。
またはブラウザのアドレス欄にhttp://localhost:8888を入力。

Snapshot / Backup

Snapshotとかとれる機能はついていないようです。

VirtualboxのGUIからスナップショット作成したり、CUIから
VBoxManage snapshot snapshot1でスナップショット作成したり

Vagrantを使っていたら
vagrant snapshot save snapshot1 とか vagrant sandbox onでスナップショットとれるのですが。

基本的にDocker上でしか作業しないので、システム的になんかあったらコンテナを再作成するだけでおしまいですけどね。
コンテナイメージがGBオーダーなので、本当に仮想マシンが立ち上がらなくなって困った場合、スナップショットないと再作成が結構な時間とネットワーク帯域使うので嫌だ、というくらいです。
cloud-initでmultipassインスタンス立ち上げて、docker-compose up -d打てば再構築おしまい。

エディタ

テキストエディタ勉強用にVScode入れておきます。
気が向いたら扱えるようになっておきたいです。
Vimしか使えないと周りと話が合わないので。

PS> winget install vscode

今のところWindows TerminalでCtrl+,を間違えてCtrl+Shift+,としてしまうと立ち上がってしまうくらいしか登場シーンがありません。

結局

Vagrant + Virtualbox + Dockerでも同じようなことができます。
DockerをプリインストールするVagrantfile

しかしながら今回は新技術に興味あるので、multipassでDocker環境構築してみました。
このままmultipass + Dockerで作業進めていこうと思います。 ( 外出時は。 )

...とはいえ、やっぱり一番使う時間長いのは
WSL2からssh u1and0@192.***.***.***
しちゃうんですけどね。結局。 ( 在宅時 )

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?