helloworlds

not a noun, it's a verb

【Linux】Windows + VirtualBox(Vagrant) + CentOS (+ Proxy)

だいぶ期間が空いてしまいた。。。

アルゴリズムシリーズもまた更新したいのですが、

今回がWindowsでの仮想環境構築についてメモがてら記事を書きました。

まえおき

いつもはMac(MacOS)メインで使用していますが、Windowsを使用する機会があったので、

今回はWindowsが前提になります。

仮想環境構築ということで、VirtualBoxVagrantをインストールし、CentOSのイメージを対象にしました。

また、あるある?なのかわかりませんが、

転職やらで新しい会社に入社したときとかに、よく社内のネットワークの都合でプロキシサーバー(Proxy)が配置されているかと思います。

私自身、あまりWindowsでプロキシサーバーを経由した仮想環境の構築する機会がなかったので、 記事にして残しておこうと思います。

各ツールの解説がこの記事では割愛させて頂きます!(過去記事に説明している記事もありますので!)

では、さっそく!!

※ 前提: Windows10

VirtualBox

まず、VirtualBoxをインストールします。

公式ページからダウンロードします。

Downloads – Oracle VM VirtualBox

公式ページでは、最新のヴァージョンがダウンロードできます。

が、後でインストールするVagrantとのヴァージョンの関係でうまく機能しない場合があります。

No usable default provider could be found for your system.

Vagrant relies on interactions with 3rd party systems, known as
"providers", to provide Vagrant with resources to run development
environments. Examples are VirtualBox, VMware, Hyper-V.

・・・・・略

あとでダウングレードするのも手間なので、ヴァージョンの確認or少し前のヴァージョンをインストールしてもいいかもしれません。

過去のヴァージョンは以下から。

Download_Old_Builds – Oracle VM VirtualBox

手順に沿ってダウンロードすればOK。

Vagrant

続いて、Vagarantをインストールします。

Vagrantも公式から

Download - Vagrant by HashiCorp

手順に沿ってインストールすれば問題ありません。

CentOS

続いては、仮想環境となるOSのイメージになるファイルを選択します。

Vagrantをインストールしているので、直接サイトにいってダウンロードする必要はありませんが、 VirtualBoxでポチポチして進めたい場合は、以下を参考にしてください!

ポチポチしない場合は、この項目↓は読み飛ばして大丈夫です。

この記事では、CentOS 7系を選択します。

今回はboxファイルをダウンロードしてみます。

なので、拡張子が .box のものをダウンロードしてください。

A list of base boxes for Vagrant - Vagrantbox.es

また、他の拡張子だと以下から確認できます。

virtualbox centos インストール などでググればたくさん出てきますので、CentOSの細かいヴァージョンなど指定がある場合は調査してみてください。

CentOSの公式ページは以下です。 ( CentOS Linux DVD ISO の方を選択して、ダウンロードへ )

Download CentOS

ここでは、以下のURLから過去のヴァージョンを確認&ダウンロードできます。

http://archive.kernel.org/centos-vault/

# パスの例
http://archive.kernel.org/centos-vault/7.6.1810/isos/x86_64/

コマンドプロンプトで作業

Boxの追加

コマンドプロンプトを開きます。

以下を実行して、boxを登録します。 <name> は任意の名前で大丈夫です。わかりやすい名前をつけると後で楽です笑

# 基本
> vagrant box add <name> <box_file_url>

# 例
> vagrant box add centos7.0 https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box

以下から対象ヴァージョンのURLを確認。 A list of base boxes for Vagrant - Vagrantbox.es

少し時間がかかるかもしれません。

できるだけネットワーク環境の良いところで実行することをオススメします!

Boxの確認

正常にインストールできれば、以下のコマンドで確認できます。

> vagrant box list

centos7.0 (virtualbox, 0)

Vagrantfileの作成

Vagrantfileというファイルを作成します。

仮想環境の設定を記述するために必要なので、必ず以下を実行します。

# 基本
> vagrant init <name>

# 例
> vagrant init centos7.0

Vagrantfileの編集

ここでは必要最低限の編集のみです。

# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "192.168.XX.XX"        ## ← ここをアンコメント

・・・・略

# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
config.vm.provider "virtualbox" do |vb|                                 ## ← ここをアンコメント
#   # Display the VirtualBox GUI when booting the machine
#   vb.gui = true
#
#   # Customize the amount of memory on the VM:
#   vb.memory = "1024"
     vb.customize ["modifyvm", :id, "--memory", "2048"]         ## ← ここを追記
end                                                                                          ## ← ここをアンコメント
#
# View the documentation for the provider you are using for more
# information on available options.

config.vm.network "private_network" のIPですが、ホスト(Windows)から確認できるIPを指定します。

このIPはWindowsコマンドプロンプトで、確認することができます。

> ipconfig

イーサネット アダプター VirtualBox Host-Only Network #3:

   接続固有の DNS サフィックス . . . . .:
   リンクローカル IPv6 アドレス. . . . .: fe80::xxxx:f1ed:xxxx:4bxx%53
   IPv4 アドレス . . . . . . . . . . . .: 192.168.25.1                    ## ← これに値する
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   デフォルト ゲートウェイ . . . . . . .:

仮想環境の立ち上げ

ここでもvagrantのコマンドで仮想環境をたちあげます。

> vagrant up

このとき、ERRORなどの単語に注意してください。 ここではエラー対処の方法は説明しません。

RLoginで接続

使い慣れたエミュレータがいいと思いますが、なんとなくRLoginを使ってみたいと思います。笑

WindowsにはコマンドプロンプトやWSLなどありますが、あまり詳しくないのでここでは無視させてください笑

rlogin/telnet/ssh(クライアント)ターミナルソフト

詳しい使い方はググってみてください!

ファイル→ サーバーに接続→

ログイン名 / パスワードorパスフレーズは、vagrantを指定。

ホスト名は、Vagrantfileで指定したprivate_networkのIPを入力。

上記を入力して、SSHで接続します。(vagrant upしたあとで)

色々確認

無事にCentOSに接続できたら、外に(インターネット)接続できるか確認したりします。

冒頭で述べたように、会社のプロキシサーバーなどで、かんたんにインターネットに接続できない場合があります。

そうなると何かツールをダウンロードしたり、yumがアップデートできなかったりして、そもそも仮想環境の意味がなくなってしまいます。。。笑

ここでは、非常に最低限なプロキシサーバーを経由した設定をちょっと紹介できたらと思います。

イメージ的にはこんな↓

f:id:o21o21:20200117153900p:plain

適当な図で申し訳ないですが、、

では、CentOSないでの確認です。

CentOS6系と7系でコマンドなどに違いがあります!ご注意ください!

言語設定

# 言語設定確認
$ localectl 

# 日本語に設定
$ localectl set-locale LANG=ja_JP.utf8

# 英語に設定
$ localectl set-locale LANG=en_US.UTF-8

ログイン後、反映されます。

ping / curl

pingcurlで外に出られるのか確認してみます。

$ ping www.yahoo.co.jp
$ ping www.google.co.jp

$ curl <your_proxy>

意外と重要です!笑

なにか設定を変更してしまう前に、単純な方法でどこまで到達できるのか確認してみるのもありです!

NetworkManagerとNetwork Initscript

CentOSでは、nmtuinmcliというコマンドを使用して、NetworkManagerを操ります。

nmtuiはメニュー方式で簡易で操作、nmcliはコマンド形式で ネットワーク設定ができるようになっているようです。

NetworkManagerとは、ネットワークを動的に設定できるサービスです。

RHEL6とRHEL7でネットワークの管理方法が変わってきているようでした。(知るの今更感…)

ここではnmtuiコマンドを詳しく説明はしませんが、CentOS6と7系とで、大きく変わったコマンドがあります。

service(CentOS6)systemctl(CentOS7)です。

主になにかのサービス(ツール)を起動させたり、停止させたりするのに多様されています。

# 6系: 例
$ service httpd start

# 7系: 例
$ systemctl start httpd

これは覚えておくといいでしょう!

ググっていて、あれ?このコマンド使えないじゃん!とか、 この人の環境は6系か!など環境の記載がない場合などに気づきます笑

ちょっとNetworkManagerからそれてしまいましたが、CentOSでは6からNetworkManagerがネットワークの設定サービスとして採用されています。

ググってみると、NetworkManagerの停止 などが多く記事でありますが、まず無用に停止させないで状態を確認してみましょう。

$ systemctl status network

network.service - LSB: Bring up/down networking
   Loaded: loaded (/etc/rc.d/init.d/network)
   Active: active (exited) since 月 20XX-01-01 12:12:45 JST; 4h 47min ago

$ systemctl status NetworkManager

NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled)
   Active: active (running) since 月 20XX-01-01 1212:45 JST; 4h 47min ago
 Main PID: 4245 (NetworkManager)
   CGroup: /system.slice/NetworkManager.service
           ├─4245 /usr/sbin/NetworkManager --no-daemon
           └─4262 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-enp0s3.pid -lf /var/lib/NetworkManager/d...

以下を参考にして、まずどのようなネットワークを構成させればいいのか考慮します。

access.redhat.com

yum.conf

わたしの場合、デフォルトではyumコマンドが機能しませんでした。

なので、/etc/yum.confに以下を追記します。

[main]
proxy=http://<your_proxy:port>

こうすることで、yumが機能するかもしれません。

その他

VirtualBoxの設定にも、あらかじめプロキシー設定のメニューが用意されています。

ファイル→ 環境設定→ プロキシー→ 手動プロキシー設定

また、上記のメニューで、ホストのプロキシー設定を自動検出というものもあります。

ホストはここでいうWindowsになるので、Windows環境変数に設定しておくのもありかもしれません。(ちょっとこの自動検出がどこまでなのか調べていないので、なんとも言えません、、、)

コマンドプロンプト環境変数を確認してみましょう。

> set
略・・・
HTTPS_PROXY=http://<your_proxy>
HTTP_PROXY=http://<your_proxy>
略・・・

まとめ

かなりざっくりしたかんじになりましたが、とりあえず状態を先に確認してみることが重要です。

むやみに調べたコマンドを実行し、なにが変更されたのかわからない状態は避けていきたいですね。ネットワークなので、そもそもインターネットに接続できなければ、仮想環境を構築した意味もなくなってしまいます。

ヴァージョンやコマンド、ファイルの情報を調べて少しずつ進めていけたらOKです^ ^

以上.