導入
VirtualBox は、複数の仮想マシンを作成し動作させることができる無償のアプリケーションソフトウェアです。このアプリケーションを使って、Linuxを利用したOSの一つであり無償で利用できる CentOS の最新版を、WindowsのゲストOSとしてインストールします。
開発環境の Webサーバーとして利用することを想定しています。使い勝手を優先し、セキュリティを低下させる設定を紹介している 部分があるのでご注意ください。デザインの変更などについては私の趣味に依るところなので、自分に合わせて設定してください。また、デスクトップ環境として CentOS 7 デフォルトの GNOME 3 を使用しています。
仮想マシンの作成とCentOSのインストール 1 2
➀ CentOSのダウンロード
- Download CentOS の「DVD ISO」をクリックします。
- 最寄りのミラーサイト一覧が表示されるので、適当なURLを選んで CentOS のISOイメージをダウンロードします。
-
Manuals/ReleaseNotes - CentOS Wiki から、ダウンロードしたISOイメージに対応するハッシュ値を捜し、ダウンロードしたISOイメージのSHA-256ハッシュ値と一致するか確かめます。例えば CentOS 7.0.1407 の場合、Manuals/ReleaseNotes/CentOS7/Japanese - CentOS Wiki の
CentOS-7.0-1406-x86_64-DVD.iso
の左に記載されているハッシュ値と比較します。
② VirtualBoxのインストール
- Downloads – Oracle VM VirtualBox から、Windows版 VirtualBox の最新版をダウンロードします。
- ダウンロードした実行ファイルのSHA-256ハッシュ値が、ダウンロードリンクの下の方にある「SHA256」checksumsファイルに記載されているハッシュ値と一致するか確認します。 (ダウンロードした実行ファイル名の左に記載されているハッシュ値)
- VirtualBoxをインストールします。
③ 仮想マシンの作成
- VirtualBox (Oracle VM VirtualBox マネージャー) を起動し、左上の をクリックすると、「仮想マシンの作成」ダイアログが開きます。
-
名前とオペレーティングシステム
任意の 名前 を入力し、タイプ は Linux 、 バージョン は Red Hat (64bit) を選択して「次へ」 -
メモリーサイズ
メモリ (RAM) は最低でも512MiB必要です。私は1024MB
にしました。 -
ハードドライブ
仮想ハードドライブを作成する
を選択して「作成」すると、「仮想ハードドライブの作成」ダイアログが開きます。-
ハードドライブのファイルタイプ は、
VDI (VirtualBox Disk Image)
を選択したまま「次へ」 -
物理ハードドライブにあるストレージ は、
固定サイズ
を選択して「次へ」 -
ファイルの場所とサイズ では、CentOSをインストールする仮想ドライブの容量を指定して、仮想ドライブと仮想マシンを「作成」します。私は
16.00GB
としました。
-
ハードドライブのファイルタイプ は、
ゲストOSウィンドウをフォーカスすると、キーボードがゲストOSにキャプチャーされます。ゲストOSウィンドウの画面内をクリックすると、マウスがゲストOSにキャプチャーされます。 キーボードの右側のCtrlキー (ゲストOSウィンドウ右下に表示されているホストキー) を押すと、マウスとキーボードの制御がホストOS (Windows) 側に移ります。
④ CentOSのインストール
- VirtualBox マネージャーにて、作成した仮想マシンが選択された状態で、左上の をクリックします。
- 「起動ハードディスクを選択」ダイアログが表示されるので、プルダウンメニュー右の からダウンロードしておいたISOイメージを選択して「起動」します。
- CentOSのインストーラーが起動するので、そのままEnterキーを押します。
-
インストール時に使用する言語
下の検索窓にj
などと入力すると、すぐに 日本語 Japanese が見つかります。 - インストールの概要
-
ユーザーの設定
長いパスワードやマルチバイト文字が入ったパスワードは認証に失敗する場合があります。記号や暗号化方式の互換性 に目を通しておいてください。- 「rootパスワード」を選択し、任意の root パスワード を入力して「完了」
- 「ユーザーの作成」を選択し、任意の フルネーム・ユーザー名 と パスワード を入力、
sudo
コマンドとsudoedit
コマンドを有効にするため このユーザーを管理者にする にチェックを入れて「完了」
- しばらく経つとCentOSのインストールが完了するので、設定画面右下の「再起動」をクリックします。
- 再起動後、初期セットアップ画面が表示されます。「ライセンス情報」を選択し、同意できるなら ライセンス契約に同意します。 にチェックを入れて「完了」し、「設定の完了」をクリックします。
- ログイン画面に切り替わるので、先ほど作成したユーザーを選択します。
- 「ようこそ」ダイアログが表示されます。
- 日本語 が選択されているのでそのまま「次へ」
-
入力ソース
ここで選択しても反映されないのでそのまま「次へ」 -
オンラインアカウント
そのまま「次へ」 - 「Start using CentOS Linux」をクリックしてセットアップを完了します。
- ゲストOS上部のGNOMEパネル右側にある をクリックし、 日本語 (Kana Kanji) を選択して日本語入力ができるようにします。
マウス統合などの有効化
マウス統合を有効にすると、Ctrlキーを押したりしなくても、ゲストOSとホストOSのあいだでマウスの制御が自動で切り替わるようになります。
① RPMパッケージのインストール
Guest Additions のビルドに必要なソフトウェアは、初期状態ではインストールされていません。
- ゲストOS上部のGNOMEパネルから、 アプリケーション ▸ お気に入り ▸ 端末 を起動します。
- 端末で以下のように入力し、ビルドに必要なRPMパッケージをインストールします。合わせて各RPMパッケージをアップデートしておきます。
# RPMパッケージのアップデート
sudo yum upgrade
# RPMパッケージのインストール
sudo yum install kernel-devel gcc
yum
コマンドを実行すると、依存性の解決などが行われたあと Is this ok [y/d/N]:
と訊ねられるので、y
を入力しEnterキーを押します。また、ローカルに置かれている RPM-GPG-KEY-CentOS-7 から公開鍵を取り込んでも良いか訊ねられるので、同じく y
を入力しEnterキーを押します。
アップデートとインストールが完了したら、Linuxカーネルのアップデートを反映するため、OSを再起動します。
② Guest Additionsのインストール
- ゲストOSウィンドウのファイルメニューから、 デバイス ▸ CD/DVDデバイス ▸ Guest Additions のCDイメージを挿入… を選択します。
- ゲストOS側で "VBOXADDITIONS_4.3.16_95972" には自動的に起動することを意図したソフトウェアが含まれています。実行してみますか? といったダイアログが表示されるので、「実行する」を選択してユーザーのパスワードで「認証」します。
- マウス統合を完全に有効化するため、ゲストOS上部のGNOMEパネル右端のユーザー名をクリックし、一旦「ログアウト」して再度ログインします。
- ゲストOSウィンドウのファイルメニューから、デバイス ▸ クリップボードの共有 ▸ 双方向 を選択します。同じように、 デバイス ▸ ドラッグ&ドロップ ▸ 双方向 を選択します。
Guest Additions は、Linuxカーネル、または VirtualBox がアップデートされるたびにインストールし直す必要があります。
gedit (テキストエディタ) のカスタマイズ
geditを起動した状態でGNOMEパネルの をクリックし、表示されたプルダウンメニューから 設定 を選択します。
-
表示 タブ
- 行番号を表示する にチェックを入れる
- カーソルのある行を強調表示する にチェックを入れる
- 対応するカッコを強調表示する にチェックを入れる
-
エディター タブ
-
タブの幅 を
4
に - 自動インデントを有効にする にチェックを入れる
- 保存する前にバックアップを生成する のチェックを外す
-
タブの幅 を
-
フォントと色 タブ
- 「コバルト」を選択
-
プラグイン タブ
- 「大/小文字の変更」にチェックを入れる
- 「並び替え」にチェックを入れる
端末エミュレータに関する設定
端末を起動後、端末のファイルメニューから 編集 ▸ プロファイルの設定 を選択します。
-
タイトルとコマンド タブ
-
ログインシェルとしてコマンドを実行する にチェックを入れて、端末起動時に
~/.bash_profile
が読み込まれるようにします。3
-
ログインシェルとしてコマンドを実行する にチェックを入れて、端末起動時に
-
色 タブ
- システムのテーマ色を利用する のチェックを外します。
-
組み込みのスキーム で
黒地に白文字
を選択します。
-
スクロール タブ
- スクロールバックのサイズ で 無制限にする にチェックを入れます。
デスクトップにショートカットを作る
GNOME や KDE などのデスクトップ環境では、 デスクトップエントリーファイル (*.desktop) でアプリケーションの起動、またはURLの情報を表すことができます。デスクトップエントリーファイルは、Windowsにおけるショートカットファイル (*.lnk) に似ており、またGUI上では実際のファイル名と異なる名前が表示されます。4
GNOMEパネルの アプリケーション メニュー内に表示されているショートカットファイルの実体は /usr/share/applications
にあります。デスクトップに置きたいアプリケーションのデスクトップエントリーファイルを、Altキーを押しながらデスクトップにドラッグ&ドロップし、 ここへリンクを作る を選択します。
端末エミュレータ
/usr/share/applications
にある「端末」のデスクトップエントリーファイル (実際のファイル名は gnome-terminal.desktop) は、そのまま実行するとルートフォルダーをカレントフォルダーとして実行することになります。
- 「端末」のデスクトップエントリーファイルを、Ctrlキーを押しながらデスクトップにドラッグ&ドロップすることでコピーします。
- デスクトップにコピーした「端末」を、テキストエディタにドラッグ&ドロップするなどして開き、以下のようにPathエントリーを追記します。5
##############
## 以上省略 ##
##############
TryExec=gnome-terminal
Exec=gnome-terminal
Icon=utilities-terminal
Type=Application
X-GNOME-DocPath=gnome-terminal/index.html
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=gnome-terminal
X-GNOME-Bugzilla-Component=BugBuddyBugs
X-GNOME-Bugzilla-Version=3.8.4
Categories=GNOME;GTK;Utility;System;TerminalEmulator;
StartupNotify=true
# ↓この行を追記
Path=/home/[ユーザー名]
セキュリティ関連の設定
sudoeditなどで利用するテキストエディタ
既定のテキストエディタは Vim なので、それ以外のテキストエディタを利用する場合は環境変数の設定が必要です。以下の gedit
は利用するエディタに合わせて読み替えてください。
# sudoeditコマンドで利用するテキストエディタを設定
export EDITOR=gedit
source ~/.bash_profile
を実行し、設定を反映します。なお、EDITOR 環境変数の代わりに VISUAL 環境変数を利用することもできますが、Composer など EDITOR しか参照しないコマンドもあるので注意が必要です。
sudo・sudoeditコマンドで一度だけパスワードを要求
sudo
・sudoedit
コマンドで認証後、既定では5分経つと再度パスワードを要求されますが、このタイムアウトを無制限 (端末を閉じるまで) に変更することができます。
sudo の設定は visudo
コマンドで変更することができますが、visudo
コマンドも sudoedit
コマンドと同じように EDITOR 環境変数に指定されたテキストエディタを利用します。
CentOS 7 の初期設定だと EDITOR 環境変数は引き継がれないので、sudo EDITOR=gedit visudo
を実行します。これは、一時的にrootの EDITOR 環境変数に gedit
を設定して visudo
コマンドを実行する構文です。visudo
コマンドによって開かれたファイルを、以下のように修正します。
##############
## 以上省略 ##
##############
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
# sudoコマンドが再度パスワードを要求するまでの時間を無制限に
Defaults timestamp_timeout = -1
# ↑この行を追記
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
##############
## 以下省略 ##
##############
suの設定
管理者ユーザー以外は使えないようにします。
#%PAM-1.0
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth sufficient pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
auth required pam_wheel.so use_uid
## ↑この行のコメントアウトを外す ##
auth substack system-auth
auth include postlogin
account sufficient pam_succeed_if.so uid = 0 use_uid quiet
account include system-auth
password include system-auth
session include system-auth
session include postlogin
session optional pam_xauth.so
rootでのGUIログインを禁止
以下のように /etc/pam.d/gdm-passwd
を書き換えることで、GNOMEのログイン画面で アカウントが見つかりませんか? から ユーザー名 root
と正しい パスワード を入力しても、認証に失敗するようになります。6
auth [success=done ignore=ignore default=bad] pam_selinux_permit.so
auth substack password-auth
auth optional pam_gnome_keyring.so
auth include postlogin
# rootでのGUIログインを禁止
auth required pam_succeed_if.so user != root quiet
# ↑この行を追記
account required pam_nologin.so
account include password-auth
password substack password-auth
password optional pam_gnome_keyring.so use_authtok
session required pam_selinux.so close
session required pam_loginuid.so
session optional pam_console.so
-session optional pam_ck_connector.so
session required pam_selinux.so open
session optional pam_keyinit.so force revoke
session required pam_namespace.so
session include password-auth
session optional pam_gnome_keyring.so auto_start
session include postlogin
ファイアウォールの設定
不要なサービスについて、信頼する設定を取り消しておきます。 (SSHを利用しない場合の設定)
- GNOMEパネルから、 アプリケーション ▸ 諸ツール ▸ ファイアウォール を起動し、ユーザーのパスワードで「認証」します。
- 上の方の 設定 を 永続 にして、設定の変更がOS起動時に適用されるようにします。
- 左のメニューから public ゾーンを選択します。
- ssh サービスのチェックを外します。
- 設定を反映するため、端末で
sudo systemctl restart firewalld
を実行してファイアウォールを再起動します。
初期状態では、ネットワークアダプタはいずれも public ゾーンに属しています。
ホストOSからゲストOSに接続できるようにする
① アダプターの追加
- 仮想マシンの電源を切った状態でなければ設定を変更できないため、仮想マシンを終了します。
- VirtualBox マネージャーにて、対象の仮想マシンが選択された状態で、左上の をクリックします。
- 左のメニューから ネットワーク を選択し、 アダプター2 タブを開きます。
- ネットワークアダプターを有効化 にチェックを入れます。
-
割り当て のプルダウンメニューから
ホストオンリーアダプター
を選択して「OK」
② IPアドレスの設定
IPv4アドレスを自動的に割り振るDHCPv4サーバーを動かしていないので、接続を有効化する前に手動でIPアドレスを設定する必要があります。
- GNOMEパネルの右の方にある から ネットワークの設定 を選択します。
- 左のネットワーク一覧に
Ethernet
が2つあるので、 になっている方を選びます。 - 「設定」ウィンドウ右下の をクリックします。
- 左のリストから Identity を選び、 自動接続する にチェックを入れます。
- 左のリストから IPv4 を選び、アドレス のプルダウンメニューで 手動 を選択します。
-
アドレス に
192.196.56.2
〜192.196.56.254
のいずれかのIPアドレス、 ネットマスク に255.255.255.0
、 ゲートウェイ に0.0.0.0
を入力して適用
同じホストオンリーアダプターを利用している仮想マシンが他にあれば、同じIPアドレスを設定しないように注意してください。 - にします。
接続できない場合
VirtualBoxのネットワーク設定が勝手に書き換わり、急にホストOSからゲストOSに接続できなくなることがあります。以下のようにして、元の設定に戻します。7
- VirtualBox マネージャーのファイルメニューから、ファイル ▸ 環境設定 を選択します。
- 左のメニューから ネットワーク を選択し、 ホストオンリーネットワーク タブを開きます。
- 右の方の ![ホストオンリーネットワークを編集] をクリックして、「ホストオンリーネットワークの詳細」ダイアログを出します。
-
アダプター タブで IPv4 アドレス に
192.168.56.1
、 IPv4 ネットマスク に255.255.255.0
を入力して「OK」
なお、前述のファイアウォールによってサービスを許可していない場合も接続できませんので、そちらもご確認ください。
その他の初期設定
IPv6アドレスを正引きできるようにする
回線事業者に NTT(フレッツ) を利用しており、かつ IPv6 が利用できない環境の場合AAAAフィルターによってIPv6アドレスを正引きできない問題が発生します。そこで、NTT America が NTT 顧客向けに提供している DNS サーバーを利用します。8
- GNOMEパネルの右の方にある から ネットワークの設定 を選択します。
- 左のネットワーク一覧に
Ethernet
が2つあるので、右に表示される情報に DNS が含まれる方 (NAT接続している方のアダプター) を選びます。 - 「設定」ウィンドウ右下の をクリックします。
- 左のリストから IPv4 を選びます。
-
DNS の 自動 を にし、 サーバー に
129.250.35.250
と129.250.35.251
を設定します。右の をクリックすることで、複数のサーバーを設定できます。 - 「適用」をクリックし、アダプターを一旦 にして再度 にします。
ブランクスクリーン (スクリーンセーバー) の無効化
- GNOMEパネル右端のユーザー名をクリックし、 設定 を選択します。
- 「ハードウェア」の「電源」から「ブランクスクリーン」を
しない
に設定します。
自動ログイン
ファイルマネージャの設定
- デスクトップのhomeなどをダブルクリックして開いた状態で、 をクリックし、 設定 を選択します。
- 表示 タブで、 フォルダーをファイルより前に表示する と 隠しファイルとバックアップファイルを表示する にチェックを入れます。
ログイン時に直接入力モードに
- GNOMEパネル右側の インプットメソッド のアイコンをクリックして、表示されたプルダウンメニューから 設定 を選択します。
- 「IBus かな漢字の設定」ダイアログが開くので、 動作 タブの 初期入力モード で
直接入力
を選択して「閉じる」
ホストOSとゲストOSでファイルを共有する
Guest Additions をインストール しておく必要があります。
① ホストOS側のフォルダーを指定
- VirtualBox マネージャーにて、対象の仮想マシンが選択された状態で、左上の をクリックします。
- 左のメニューから 共有フォルダー を選択します。
- 右上の をクリックします。
- 「共有フォルダーの追加」ダイアログが表示されます。
- ホストOS側の フォルダーのパス と、ゲストOS側でマウントするときに利用する フォルダー名 を入力します。
- ゲストOS側から書き換える必要が無ければ 読み込み専用 にチェックを入れます。
- 自動マウント にチェックを入れます。
- 永続化する にチェックを入れます。
② ゲストOSのユーザーが共有フォルダーにアクセスできるようにする
共有フォルダーは、/media/sf_[フォルダー名]
に自動的にマウントされます。9
自動マウントされたフォルダー・ファイルの所有者は root
、グループは vboxsf
、権限は 0770
となるので、共有フォルダーにアクセスできるようにするユーザーを vboxsf
グループに追加します。例えば Apache で利用するために apache
ユーザーを vboxsf
グループに追加するには、端末で sudo gpasswd --add apache vboxsf
を実行します。
任意のフォルダーにマウントする
永続的なマウントの設定は /etc/fstab
に記述するのが一般的です。しかし VirtualBox の共有フォルダーの場合、vboxsfカーネルモジュールの実行が遅いため、代わりにrc-local[サービス]を利用します。
rc-localはOS起動時に、/etc/rc.d/rc.local
に記述したユーザー定義のシェルスクリプトを実行するサービスですが、既定では実行されないようになっています (サービス自体は有効)。端末で sudo chmod u+x /etc/rc.d/rc.local
を実行して同ファイルに実行権限を与えることで、実行されるようになります。10
/etc/rc.d/rc.local
の末尾に、mount --bind /media/sf_example/test_directory /home/100/test_directory
のような [mount] コマンドを追記します。/media/sf_example/test_directory
というフォルダーを、/home/100/test_directory
と共有することになります。マウントポイントのフォルダー名 (後者) は、違っていてもかまいません。あらかじめマウントポイントである test_directory
フォルダーを作成しておく必要があります。
[サービス]: https://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%83%A2%E3%83%B3_%28%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%29 "デーモン (Daemon) は、UNIXなどのマルチタスクオペレーティングシステム (OS) においてバックグラウンドプロセスとして動作するプログラムを意味する。ユーザーが直接対話的に制御するプログラムではない。典型的なデーモンは名前の最後尾に "d" が付く。例えば、syslogd はシステムログを扱うデーモン、sshd は外からのSSH接続要求を受け付けるデーモンである。"
[mount]: https://ja.wikipedia.org/wiki/Mount_(UNIX) "mount (UNIX) - Wikipedia"
フォルダー所有者などの変更
--options
パラメータに続けて指定するマウントオプションによって、フォルダー・ファイルの所有者・グループ・権限などを変更することができます。
オプション | 既定値 | |
---|---|---|
uid | 所有者 | root |
gid | グループ名 | root |
dmode | フォルダーの権限 (8進数) | 0777 |
fmode | ファイルの権限 (8進数) | 0777 |
例えば mount --types vboxsf example /mnt/vboxsf/example --options uid=root,gid=vboxsf,dmode=0770,fmode=0770
は、 自動マウント にチェックを入れた場合と同じ所有者・グループ・権限で /mnt/vboxsf/example
にマウントすることになります。こちらもマウントポイントのフォルダーを作成しておく必要があります。
SELinuxについて
SELinux では、プロセスやファイルに SELinuxセキュリティコンテキスト というラベルを付けて、どのラベルが付いているかによってアクセス権の有無を判断します。しかしvboxsfによって共有しているフォルダー・ファイルのラベルはsystem_u:object_r:vmblock_t:s0
に固定されており、これを変更することはできません。したがって、共有フォルダーでポリシー違反が起こるような状態であれば、アクセス許可ルールが定義されたモデュールを作成してインストールする必要があります。
モジュールの作成やインストールについては、Apache に関する SELinux の設定 (CentOS) - Qiita などをご覧ください。
ホストOS終了時にゲストOSを終了する
ゲストOS側の設定
デスクトップ環境がGNOMEの場合、電源ボタンなどを押したときの挙動はGNOMEによって制御されています。11
- dconfエディタをインストールします。
sudo yum install dconf-editor
- GNOMEパネルから、 アプリケーション ▸ 諸ツール ▸ dconfエディタ を起動します。
- サイドパネルで org.gnome.settings-daemon.plugins.power とたどります。
- button-power の値で shutodown を選択し、dconfエディタを閉じます。
VirtualBoxの設定
PowerShellで以下のコマンドを実行します。⦅仮想マシン⦆
には、仮想マシンのUUID、または仮想マシン名を入れます。
# ⦅仮想マシン⦆ 終了時に「シャットダウン シグナル送信」を実行する
&"$env:ProgramFiles\Oracle\VirtualBox\VBoxManage.exe" setextradata '⦅仮想マシン⦆' GUI/DefaultCloseAction Shutdown
仮想マシンを一度終了し、起動しなおします。この設定により、ウィンドウを閉じようとしたときに「仮想マシンを閉じる」ダイアログが表示されなくなります。12
参考ページ
-
CentOS 7 を VirtualBox にインストールし、Web サーバーの設定を行う(かなり変更点あり): ある SE のつぶやき ↩
-
Ubuntu 12.04 の gnome-terminal が ~/.bash_profile を読み込んでくれない問題 - キーボードをたたくとき ↩
-
Ubuntu ディレクトリーエントリー・デスクトップエントリー その5 - デスクトップエントリーグループのエントリー(TryExec・Exec・Path・Terminal) - Ubuntu kledgeb ↩
-
Fedora14 の GUI で root ログイン - はじめての自宅サーバ構築 - Fedora/CentOS - Fedora14 のインストール手順 ↩
-
Virtualbox:ホストオンリーネットワークに接続できない対処 | よしまさのブログ
[ホストオンリーネットワークを編集]: https://qiita-image-store.s3.amazonaws.com/0/30177/05152084-354a-2468-43f7-d18a59bae261.png ↩ -
Windows7 のディレクトリを VirtualBox の CentOS にマウントする - clock-up-blog ↩
-
VirtualBoxでホストのシャットダウンにゲストのバーチャルマシンも連動させる パソコン鳥のブログ/ウェブリブログ ↩