WSL/WSL2が盛り上がってるけど,やっぱりFreeBSDが使いたい。
オフィシャルイメージを使い,インストールなしでお手軽にHyper-V上にFreeBSDを構築します。Windows側からssh接続で使うことが前提。Power to serveのFreeBSDなので。
Hyper-Vを使うにはWindows 10 Proが必要。
準備
Hyper-Vを有効にする
Windowsの機能の有効化または無効化 > Hyper-V
「検索するには、ここに入力します」(いわゆる検索窓)で「Windowsの機能の」を打つと出てくる。

Windowsを再起動

OpenSSHクライアントのインストール
オプション機能 > 機能の追加 > OpenSSHクライアント
cmd.exe
(コンソール,黒い画面)でwhere ssh
と打ってC:\Windows\System32\OpenSSH\ssh.exe
と出ることを確認する。
私の環境では,scoopのOpenSSHはFreeBSDのvi/nvimの編集で画面が乱れた(scoop uninstall openssh
で削除した)。
仮想マシンの準備
仮想マシンイメージのダウンロード
FreeBSDのDownload FreeBSDで最新版の仮想マシンイメージ(Virtual Machine Images)をダウンロード。執筆時点での最新安定板はFreeBSD12.0-RELEASE。アーキテクチャは多くの場合amd64。Hyper-V用のイメージは拡張子が.vhd.xz
のもの(例えばFreeBSD-12.0-RELEASE-amd64.vhd.xz
)。
7-zipやunxzなどで解凍して適当な場所に置く。
仮想マシンの作成
Hyper-Vマネージャ > 新規 > 新規仮想マシン...


ウィザード
世代の指定
メモリの割り当て

ネットワークの構成
既定ではWindowsと物理インターフェース(Ethernetや無線LANアダプタ)を共有して,内部ネットワークを作る。Windowsからのみアクセスできる。

仮想ハードディスクの接続
既存の仮想ハードディスクを使用する

起動
エクステンションの類を入れなくてもキーボードやマウスの自動キャプチャに対応している。
お疲れさまでした。
root
のパスワードは空なのでリターンするだけ。
その他
各種初期設定
一般ユーザの作成
# adduser
追加のグループとしてwheel
に入れておく。
パッケージ
最初はboostrapが実行される。
# pkg update
FreeBSDだけどsudo
を入れvisudo
で以下をアンコメント
## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL) ALL
portsコレクションの利用
# portsnap fetch
# portsnap extract
pkg/ports充実してます。バージョンも新しいものが多い。flang
とかr-base
,cdo
など入れました。
ただし,texliveは古いのでtexliveのスクリプトでインストールしました。
X11アプリケーション
vcxsrvを使っているがお好きなものをどうぞ。デスクトップを使うのでなければxorgなどは不要。
xuth
と確認のためxclock
とxeyes
をインストール。
# pkg install xauth xclock xeyes
X11Forwarding yes
XAuthLocation /usr/local/bin/xauth
残念ながらX11Forwardingはうまくいかない。WSLやHyper-VのUbuntu 19.04からだとうまくいく。仕方がないので.shrc
にDISPLAY=WindowsのIPアドレス:0.0
と書いておく。
LAN内の別のマシンからアクセスする場合
仮想スイッチマネージャーで仮想スイッチを作る。外部ネットワークを選ぶ。一つしかない場合は「管理オペレーティングシステム(つまりWindows)にこのネットワークアダプターの共有を許可する」にチェックするしかない。ネットワークアダプタが複数あれば,チェックせずにWindowsとFreeBSDに別々の物理インターフェースを割り当ててもよい。
仮想マシン(FreeBSD12)の設定...で作成したスイッチを選択する。
IPアドレスを固定する
ハンドブック11.5参照。
IPアドレス等はあくまでも例なので環境に合わせて変更すること。(当然の注意で恐縮だが「ネットに出ていたことを何も考えずにコピペしましたが動きません」という若者が多いのでご容赦を。)
/etc/rc.conf
に指定するIPアドレス(例 192.168.1.99),netmask
(例 255.255.255.0),ゲートウェイ(defaultrouter
,例 192.168.1.254)を書く。root
になって編集。
ifconfig_hn0="192.168.1.99 netmask 255.255.255.0"
defaultrouter="192.168.1.254"
ネームサーバは/etc/resol.conf
に書く(例 192.168.1.254)。
nameserver 192.168.1.254
よく使うコマンド確認
ネットワークインターフェースの確認
仮想マシンをWindowsのhosts
(%sytemroot%\System32\drivers\etc/hosts
,%system%
はたぶんC:\Windows
)に書いておくといいかも。内部ネットワークだと起動のたびにIPアドレスが変わる。
$ ifconfig -a
inet
に書いてある数字がIPアドレス。
ネットワークの状態の確認
$ netstat -rn
インタフェースの再起動
管理者(root)で行う。
# service netif restart
ルーティングの再起動
# service routing restart