VirtualBox (Windows) 上に CentOS 7 をインストールする

  • 250
    Like
  • 9
    Comment
More than 1 year has passed since last update.

導入

VirtualBox は、複数の仮想マシンを作成し動作させることができる無償のアプリケーションソフトウェアです。このアプリケーションを使って、Linuxを利用したOSの一つであり無償で利用できる CentOS の最新版を、WindowsのゲストOSとしてインストールします。

開発環境の Webサーバーとして利用することを想定しています。使い勝手を優先し、セキュリティを低下させる設定を紹介している 部分があるのでご注意ください。デザインの変更などについては私の趣味に依るところなので、自分に合わせて設定してください。また、デスクトップ環境として CentOS 7 デフォルトの GNOME 3 を使用しています。

仮想マシンの作成とCentOSのインストール 1 2

➀ CentOSのダウンロード

  1. Download CentOS の「DVD ISO」をクリックします。
  2. 最寄りのミラーサイト一覧が表示されるので、適当なURLを選んで CentOS のISOイメージをダウンロードします。
  3. Manuals/ReleaseNotes - CentOS Wiki から、ダウンロードしたISOイメージに対応するハッシュ値を捜し、ダウンロードしたISOイメージのSHA-256ハッシュ値と一致するか確かめます。例えば CentOS 7.0.1407 の場合、Manuals/ReleaseNotes/CentOS7/Japanese - CentOS WikiCentOS-7.0-1406-x86_64-DVD.iso の左に記載されているハッシュ値と比較します。

② VirtualBoxのインストール

  1. Downloads – Oracle VM VirtualBox から、Windows版 VirtualBox の最新版をダウンロードします。
  2. ダウンロードした実行ファイルのSHA-256ハッシュ値が、ダウンロードリンクの下の方にある「SHA256」checksumsファイルに記載されているハッシュ値と一致するか確認します。 (ダウンロードした実行ファイル名の左に記載されているハッシュ値)
  3. VirtualBoxをインストールします。

③ 仮想マシンの作成

  1. VirtualBox (Oracle VM VirtualBox マネージャー) を起動し、左上の 新規 をクリックすると、「仮想マシンの作成」ダイアログが開きます。
  2. 名前とオペレーティングシステム
    任意の 名前 を入力し、タイプLinuxバージョンRed Hat (64bit) を選択して「次へ」
  3. メモリーサイズ
    メモリ (RAM) は最低でも512MiB必要です。私は1024MBにしました。
  4. ハードドライブ
    仮想ハードドライブを作成する を選択して「作成」すると、「仮想ハードドライブの作成」ダイアログが開きます。
    1. ハードドライブのファイルタイプ は、VDI (VirtualBox Disk Image) を選択したまま「次へ」
    2. 物理ハードドライブにあるストレージ は、固定サイズ を選択して「次へ」
    3. ファイルの場所とサイズ では、CentOSをインストールする仮想ドライブの容量を指定して、仮想ドライブと仮想マシンを「作成」します。私は 16.00GB としました。

ゲストOSウィンドウをフォーカスすると、キーボードがゲストOSにキャプチャーされます。ゲストOSウィンドウの画面内をクリックすると、マウスがゲストOSにキャプチャーされます。 キーボードの右側のCtrlキー (ゲストOSウィンドウ右下に表示されているホストキー) を押すと、マウスとキーボードの制御がホストOS (Windows) 側に移ります。

④ CentOSのインストール

  1. VirtualBox マネージャーにて、作成した仮想マシンが選択された状態で、左上の 起動 をクリックします。
  2. 「起動ハードディスクを選択」ダイアログが表示されるので、プルダウンメニュー右の 仮想光学ディスクファイルの選択… からダウンロードしておいたISOイメージを選択して「起動」します。
  3. CentOSのインストーラーが起動するので、そのままEnterキーを押します。
  4. インストール時に使用する言語
    下の検索窓に j などと入力すると、すぐに 日本語 Japanese が見つかります。
  5. インストールの概要
    • 「ソフトウェアの選択」を選択し、左の ベース環境 から サーバー (GUI使用) を選択して「完了」します。
    • 「インストール先」を選択し、何もせずに「完了」します。
    • 「ネットワークとホスト名」を選択し、「ネットワークとホスト名」設定画面の右上にあるスイッチを オン にして「完了」します。
  6. ユーザーの設定
    長いパスワードやマルチバイト文字が入ったパスワードは認証に失敗する場合があります。記号や暗号化方式の互換性 に目を通しておいてください。
    • 「rootパスワード」を選択し、任意の root パスワード を入力して「完了」
    • 「ユーザーの作成」を選択し、任意の フルネーム・ユーザー名パスワード を入力、sudo コマンドと sudoedit コマンドを有効にするため このユーザーを管理者にする にチェックを入れて「完了」
  7. しばらく経つとCentOSのインストールが完了するので、設定画面右下の「再起動」をクリックします。
  8. 再起動後、初期セットアップ画面が表示されます。「ライセンス情報」を選択し、同意できるなら ライセンス契約に同意します。 にチェックを入れて「完了」し、「設定の完了」をクリックします。
  9. ログイン画面に切り替わるので、先ほど作成したユーザーを選択します。
  10. 「ようこそ」ダイアログが表示されます。
    1. 日本語 が選択されているのでそのまま「次へ」
    2. 入力ソース
      ここで選択しても反映されないのでそのまま「次へ」
    3. オンラインアカウント
      そのまま「次へ」
    4. 「Start using CentOS Linux」をクリックしてセットアップを完了します。
  11. ゲストOS上部のGNOMEパネル右側にある jaマーク をクリックし、 日本語 (Kana Kanji) を選択して日本語入力ができるようにします。

マウス統合などの有効化

マウス統合を有効にすると、Ctrlキーを押したりしなくても、ゲストOSとホストOSのあいだでマウスの制御が自動で切り替わるようになります。

① RPMパッケージのインストール

Guest Additions のビルドに必要なソフトウェアは、初期状態ではインストールされていません。

  1. ゲストOS上部のGNOMEパネルから、 アプリケーションお気に入り端末 を起動します。
  2. 端末で以下のように入力し、ビルドに必要な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のインストール

  1. ゲストOSウィンドウのファイルメニューから、 デバイスCD/DVDデバイスGuest Additions のCDイメージを挿入… を選択します。
  2. ゲストOS側で "VBOXADDITIONS_4.3.16_95972" には自動的に起動することを意図したソフトウェアが含まれています。実行してみますか? といったダイアログが表示されるので、「実行する」を選択してユーザーのパスワードで「認証」します。
  3. マウス統合を完全に有効化するため、ゲストOS上部のGNOMEパネル右端のユーザー名をクリックし、一旦「ログアウト」して再度ログインします。
  4. ゲストOSウィンドウのファイルメニューから、デバイスクリップボードの共有双方向 を選択します。同じように、 デバイスドラッグ&ドロップ双方向 を選択します。

Guest Additions は、Linuxカーネル、または VirtualBox がアップデートされるたびにインストールし直す必要があります。

gedit (テキストエディタ) のカスタマイズ

geditを起動した状態でGNOMEパネルの gedit をクリックし、表示されたプルダウンメニューから 設定 を選択します。

  • 表示 タブ
    • 行番号を表示する にチェックを入れる
    • カーソルのある行を強調表示する にチェックを入れる
    • 対応するカッコを強調表示する にチェックを入れる
  • エディター タブ
    • タブの幅4
    • 自動インデントを有効にする にチェックを入れる
    • 保存する前にバックアップを生成する のチェックを外す
  • フォントと色 タブ
    • 「コバルト」を選択
  • プラグイン タブ
    • 「大/小文字の変更」にチェックを入れる
    • 「並び替え」にチェックを入れる

端末エミュレータに関する設定

端末を起動後、端末のファイルメニューから 編集プロファイルの設定 を選択します。

  • タイトルとコマンド タブ
    • ログインシェルとしてコマンドを実行する にチェックを入れて、端末起動時に ~/.bash_profile が読み込まれるようにします。3
  • タブ
    • システムのテーマ色を利用する のチェックを外します。
    • 組み込みのスキーム黒地に白文字を選択します。
  • スクロール タブ
    • スクロールバックのサイズ無制限にする にチェックを入れます。

デスクトップにショートカットを作る

GNOME や KDE などのデスクトップ環境では、 デスクトップエントリーファイル (*.desktop) でアプリケーションの起動、またはURLの情報を表すことができます。デスクトップエントリーファイルは、Windowsにおけるショートカットファイル (.lnk) に似ており、またGUI上では実際のファイル名と異なる名前が表示されます。[^.desktop]

GNOMEパネルの アプリケーション メニュー内に表示されているショートカットファイルの実体は /usr/share/applications にあります。デスクトップに置きたいアプリケーションのデスクトップエントリーファイルを、Altキーを押しながらデスクトップにドラッグ&ドロップし、 ここへリンクを作る を選択します。

端末エミュレータ

/usr/share/applications にある「端末」のデスクトップエントリーファイル (実際のファイル名は gnome-terminal.desktop) は、そのまま実行するとルートフォルダーをカレントフォルダーとして実行することになります。

  1. 「端末」のデスクトップエントリーファイルを、Ctrlキーを押しながらデスクトップにドラッグ&ドロップすることでコピーします。
  2. デスクトップにコピーした「端末」を、テキストエディタにドラッグ&ドロップするなどして開き、以下のようにPathエントリーを追記します。4
gnome-terminal.desktop
                        ##############
                        ## 以上省略 ##
                        ##############

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 は利用するエディタに合わせて読み替えてください。

~/.bash_profile
# sudoeditコマンドで利用するテキストエディタを設定
export EDITOR=gedit

source ~/.bash_profile を実行し、設定を反映します。なお、EDITOR 環境変数の代わりに VISUAL 環境変数を利用することもできますが、Composer など EDITOR しか参照しないコマンドもあるので注意が必要です。

sudo・sudoeditコマンドで一度だけパスワードを要求

sudosudoedit コマンドで認証後、既定では5分経つと再度パスワードを要求されますが、このタイムアウトを無制限 (端末を閉じるまで) に変更することができます。

sudo の設定は visudo コマンドで変更することができますが、visudo コマンドも sudoedit コマンドと同じように EDITOR 環境変数に指定されたテキストエディタを利用します。

CentOS 7 の初期設定だと EDITOR 環境変数は引き継がれないので、sudo EDITOR=gedit visudo を実行します。これは、一時的にrootの EDITOR 環境変数に gedit を設定して visudo コマンドを実行する構文です。visudo コマンドによって開かれたファイルを、以下のように修正します。

/etc/sudoers
                        ##############
                        ## 以上省略 ##
                        ##############

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の設定

管理者ユーザー以外は使えないようにします。

/etc/pam.d/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 と正しい パスワード を入力しても、認証に失敗するようになります。5

/etc/pam.d/gdm-passwd
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を利用しない場合の設定)

  1. GNOMEパネルから、 アプリケーション諸ツールファイアウォール を起動し、ユーザーのパスワードで「認証」します。
  2. 上の方の 設定永続 にして、設定の変更がOS起動時に適用されるようにします。
  3. 左のメニューから public ゾーンを選択します。
  4. ssh サービスのチェックを外します。
  5. 設定を反映するため、端末でsudo systemctl restart firewalldを実行してファイアウォールを再起動します。

初期状態では、ネットワークアダプタはいずれも public ゾーンに属しています。

ホストOSからゲストOSに接続できるようにする

① アダプターの追加

  1. 仮想マシンの電源を切った状態でなければ設定を変更できないため、仮想マシンを終了します。
  2. VirtualBox マネージャーにて、対象の仮想マシンが選択された状態で、左上の 設定 をクリックします。
  3. 左のメニューから ネットワーク を選択し、 アダプター2 タブを開きます。
  4. ネットワークアダプターを有効化 にチェックを入れます。
  5. 割り当て のプルダウンメニューからホストオンリーアダプターを選択して「OK」

② IPアドレスの設定

IPv4アドレスを自動的に割り振るDHCPv4サーバーを動かしていないので、接続を有効化する前に手動でIPアドレスを設定する必要があります。

  1. GNOMEパネルの右の方にある ネットワーク接続済みアイコン から ネットワークの設定 を選択します。
  2. 左のネットワーク一覧にEthernetが2つあるので、オフ になっている方を選びます。
  3. 「設定」ウィンドウ右下の 歯車ボタン をクリックします。
  4. 左のリストから Identity を選び、 自動接続する にチェックを入れます。
  5. 左のリストから IPv4 を選び、アドレス のプルダウンメニューで 手動 を選択します。
  6. アドレス192.196.56.2192.196.56.254のいずれかのIPアドレス、 ネットマスク255.255.255.0ゲートウェイ0.0.0.0を入力して適用 同じホストオンリーアダプターを利用している仮想マシンが他にあれば、同じIPアドレスを設定しないように注意してください。
  7. オン にします。

接続できない場合

VirtualBoxのネットワーク設定が勝手に書き換わり、急にホストOSからゲストOSに接続できなくなることがあります。以下のようにして、元の設定に戻します。6

  1. VirtualBox マネージャーのファイルメニューから、ファイル環境設定 を選択します。
  2. 左のメニューから ネットワーク を選択し、 ホストオンリーネットワーク タブを開きます。
  3. 右の方の ホストオンリーネットワークを編集 をクリックして、「ホストオンリーネットワークの詳細」ダイアログを出します。
  4. アダプター タブで IPv4 アドレス192.168.56.1IPv4 ネットマスク255.255.255.0を入力して「OK」

なお、前述のファイアウォールによってサービスを許可していない場合も接続できませんので、そちらもご確認ください。

その他の初期設定

IPv6アドレスを正引きできるようにする

回線事業者NTT(フレッツ) を利用しており、かつ IPv6 が利用できない環境の場合AAAAフィルターによってIPv6アドレスを正引きできない問題が発生します。そこで、NTT America が NTT 顧客向けに提供している DNS サーバーを利用します。7

  1. GNOMEパネルの右の方にある ネットワーク接続済みアイコン から ネットワークの設定 を選択します。
  2. 左のネットワーク一覧に Ethernet が2つあるので、右に表示される情報に DNS が含まれる方 (NAT接続している方のアダプター) を選びます。
  3. 「設定」ウィンドウ右下の 歯車ボタン をクリックします。
  4. 左のリストから IPv4 を選びます。
  5. DNS自動オフ にし、 サーバー129.250.35.250129.250.35.251 を設定します。右の プラスボタン をクリックすることで、複数のサーバーを設定できます。
  6. 「適用」をクリックし、アダプターを一旦 オフ にして再度 オン にします。

ブランクスクリーン (スクリーンセーバー) の無効化

  1. GNOMEパネル右端のユーザー名をクリックし、 設定 を選択します。
  2. 「ハードウェア」の「電源」から「ブランクスクリーン」を しない に設定します。

自動ログイン

  1. GNOMEパネル右端のユーザー名をクリックし、ユーザーアイコンをクリックします。
  2. 右上の「ロック解除」をクリックして認証したあと、 自動ログインオン に切り替えます。

ファイルマネージャの設定

  1. デスクトップのhomeなどをダブルクリックして開いた状態で、ファイル をクリックし、 設定 を選択します。
  2. 表示 タブで、 フォルダーをファイルより前に表示する隠しファイルとバックアップファイルを表示する にチェックを入れます。

ログイン時に直接入力モードに

  1. GNOMEパネル右側の インプットメソッド のアイコンをクリックして、表示されたプルダウンメニューから 設定 を選択します。
  2. 「IBus かな漢字の設定」ダイアログが開くので、 動作 タブの 初期入力モード直接入力を選択して「閉じる」

ホストOSとゲストOSでファイルを共有する

Guest Additions をインストール しておく必要があります。

① ホストOS側のフォルダーを指定

  1. VirtualBox マネージャーにて、対象の仮想マシンが選択された状態で、左上の 設定 をクリックします。
  2. 左のメニューから 共有フォルダー を選択します。
  3. 右上の 新規共有フォルダーを追加します。 をクリックします。
  4. 「共有フォルダーの追加」ダイアログが表示されます。
    • ホストOS側の フォルダーのパス と、ゲストOS側でマウントするときに利用する フォルダー名 を入力します。
    • ゲストOS側から書き換える必要が無ければ 読み込み専用 にチェックを入れます。
    • 自動マウント にチェックを入れます。
    • 永続化する にチェックを入れます。

② ゲストOSのユーザーが共有フォルダーにアクセスできるようにする

共有フォルダーは、/media/sf_[フォルダー名] に自動的にマウントされます。8

自動マウントされたフォルダー・ファイルの所有者は 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 を実行して同ファイルに実行権限を与えることで、実行されるようになります。9

/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 フォルダーを作成しておく必要があります。

フォルダー所有者などの変更

--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によって制御されています。10

  1. dconfエディタをインストールします。
    sudo yum install dconf-editor
  2. GNOMEパネルから、 アプリケーション諸ツールdconfエディタ を起動します。
  3. サイドパネルで org.gnome.settings-daemon.plugins.power とたどります。
  4. button-power の値で shutodown を選択し、dconfエディタを閉じます。

VirtualBoxの設定

PowerShellで以下のコマンドを実行します。⦅仮想マシン⦆ には、仮想マシンのUUID、または仮想マシン名を入れます。

# ⦅仮想マシン⦆ 終了時に「シャットダウン シグナル送信」を実行する
&"$env:ProgramFiles\Oracle\VirtualBox\VBoxManage.exe" setextradata '⦅仮想マシン⦆' GUI/DefaultCloseAction Shutdown

仮想マシンを一度終了し、起動しなおします。この設定により、ウィンドウを閉じようとしたときに「仮想マシンを閉じる」ダイアログが表示されなくなります。11

参考ページ