CentOS 7のHyper-V provider用boxを作成、運用する
概要
VagrantのHyper-V用boxを作成、運用する。ゲストOSはCentOS 7とする。
Hyper-V用のboxを作成する
Hyper-V マネージャーで以下の構成の仮想マシンを作成する。
名前 | 何でも良いがここではCentOS-7.0-x86_64-minimalとする。 | |
---|---|---|
仮想マシンの世代 | 第2世代 | |
ハードディスク | 127GB | |
メモリ | 動的メモリ | 使用する |
スタートアップ RAM | 768MB | |
最小 RAM | 512MB | |
ファームウェア | セキュアブート有効のチェックを外す |
CentOSのインストール
CentOSについてはnetinstallかminimalのISOをダウンロードしてインストールする。
細かい手順については割愛するが、rootのパスワードをvagrantとすることと、ユーザvagrantを作成してこちらのパスワードもvagrantとすることがポイント。
仮想OS上での作業
CentOSをインストールしたらrootでログインして以下の作業を行う。
なお、この項で示すコマンドの先頭にある#や$はプロンプトなので入力する必要はない。
例えば
# ls
と記載してある場合、rootユーザでlsコマンドを実行するという意味であって、# lsと入力するわけではない。
インストールされたパッケージの最新化
シェル上で
# yum update
としてインストールされたパッケージを最新化する。
sudoersファイルの編集
シェル上で
# visudo
として、sudoersファイルに下記内容を追記する。
Defaults:vagrant !requiretty
vagrant ALL=(ALL) NOPASSWD: ALL
sshdの設定
/etc/ssh/sshd_configを編集して、
UseDNSをnoに、PubkeyAuthenticationをyesに変更する。
Hyper-V Key-Value Pair(KVP) daemonのインストールと自動起動設定
Hyper-V マネージャがゲストのIPアドレスを取得できるよう、Hyper-V KVP daemonをインストールする。
シェル上で、
# yum install hypervkvpd
とすることでインストールできる。デフォルトでhypervkvpdはOS起動時に自動起動するようになっているが、もしなっていない場合は
# systemctl enable hypervkvpd
として自動起動するよう設定する。
カーネルパラメータの編集
Best Practices for running Linux on Hyper-Vにある通りカーネルパラメータを変更する。
より具体的には/etc/default/grubを編集し、GRUB_CMDLINE_LINUXの末尾にnuma=off elevator=noopを追加する。
/etc/default/grubの編集が終わったらシェル上で
# /sbin/grub2-mkconfig -o /etc/grub2-efi.cfg
として、編集内容をgrubに反映させる。
初回vagrant up用のSSH公開鍵の取得
1回目のvagrant upのためにSSH公開鍵を取得する。
# su - vagrant
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ curl -o ~/.ssh/authorized_keys https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub
$ chmod 600 ~/.ssh/authorized_keys
$ exit
上記で取得した公開鍵に対応する秘密鍵は
Githubのリポジトリ上にある。
この秘密鍵はOpenSSH用のため、Puttyで使用するためにはputtygenで変換する必要があることに注意。
一旦再起動
ここまで終わったらシェル上で
# shutdown -r now
としてゲストOSを一旦再起動する。再起動したら前述した秘密鍵で仮想マシンにSSHでログインしてみる。
無事SSHでログインできたら、そのままSSHで続きの作業を行う。
yumのキャッシュ削除
仮想ハードディスクの容量削減のため、
$ sudo yum clean all
としてyumのキャッシュを削除する。
コマンド履歴の消去
必ずしも必要な作業ではないが、box作成時のコマンド履歴を消しておきたいときにはシェル上で以下のようにする。
$ unset HISTFILE
$ echo -n > ~/.bash_history
$ sudo sh -c "echo -n > /root/.bash_history"
ゲストOSのシャットダウン
ここまでくればゲストOS上での作業は終わりなので、シェル上で
sudo shutdown -h now
としてゲストOSをシャットダウンする。
Windows上での作業
仮想マシンのエクスポート
Hyper-V マネージャで仮想マシンをエクスポートする。
ここではエクスポート先をC:\tmp\boxとする。
boxを構成するファイルの準備
エクスポートが完了したら、エクスポート先のSnapshotsフォルダを削除する。
次にエクスポート先のVirtual Hard Disks, Virtual Machinesフォルダがある階層で、metadata.jsonファイルを以下の内容で作成する。
"name"は何でも良い(無くても良い)が、"provider": "hyperv"は必要なので必ず記述する。
{
"name": "no17/centos-7.0-x86_64-minimal-hyperv",
"provider": "hyperv"
}
boxファイルの作成
エクスポート先のVirtual Hard Disks, Virtual Machinesフォルダ、metadata.jsonファイルがある階層をルートとしてzipで圧縮する。圧縮したファイルの拡張子は.boxとする。
ここではC:\tmp\box\centos-7.0-x86_64-minimal-hyperv.boxとする。
Vagrantのスクリプトの修正
Vagrantのバージョン1.7.1ではboxのセキュアブート設定が無視されてしまうため、そのままでboxが起動しない。
最新版のVagrantで対応されるまで、Vagrantのリポジトリにコミットされた修正を基に/embedded/gems/gems/vagrant-1.7.1/plugins/providers/hyperv/scripts/import_vm.ps1に以下の記述を追加する。
# Determine secure boot options
$secure_boot_enabled = (Select-Xml -xml $vmconfig -XPath "//secure_boot_enabled").Node."#text"
# Set EFI secure boot
if ($secure_boot_enabled -eq "True") {
Set-VMFirmware -VM $vm -EnableSecureBoot On
} else {
Set-VMFirmware -VM $vm -EnableSecureBoot Off
}
boxの追加と起動
管理者権限で起動したコマンドプロンプト、またはPowershellで
vagrant box add no17/centos-7.0-x86_64-minimal-hyperv \box\centos-7.0-x86_64-minimal-hyperv.box
vagrant init no17/centos-7.0-x86_64-minimal-hyperv
vagrant up --provider hyperv
とすることで起動させることができる。
初回起動時には仮想マシンのネットワークアダプタをHyper-Vのどの仮想ネットワークアダプタに紐付けるか決めるよう促される他、SSH公開鍵が新たに生成されたものに置き換えられる。
生成されたSSH公開鍵に対応する秘密鍵は.vagrant\machines\default\hypervにprivate_keyという名前で保存されている。
この秘密鍵はOpenSSH形式なので、Puttyで使用する場合にはputtygenで変換する必要がある。
また、初回起動時に限らず毎回ホストとゲスト間でのフォルダ共有のためWindowsにログインするためのユーザ名とパスワードを尋ねられるので注意。
Author And Source
この問題について(CentOS 7のHyper-V provider用boxを作成、運用する), 我々は、より多くの情報をここで見つけました https://qiita.com/no17/items/8b7d73e683c27545834a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .