CentOS7 on VirtualBOXにおけるホストOSとの共有フォルダ設定方法

##はじめに
はじめまして。「かびごん」といいます。
普段は、金融機関でビジネスを理解しようとしないデータサイエンティストをしています。
Qiita初記事として自分の奮闘記録を残したいと思います。

##執筆の背景

UdemyでDockerを勉強を進める際に、VirtualBoxの共有フォルダ設定（ホストOS⇔ゲストOS）が必要になりそこでハマってしまいました。
先駆者の方々の記事はあるものの、どれもそのままでは解決できず、さまざまな情報のアンサンブル学習の末、設定が出来ましたので備忘録も含めこちらに記します。
参照された方の一助となれれば幸いです。

※Vagrantを使えば楽だよ！という事は承知の上、どうしても下記環境下での作業が求められていたため奮闘しておりました。

##実行環境
(Host OS) Windows10 pro
(Guest OS:virtual)CentOS7.7 (1908) CLI
(Virtualization)VirtualBox 6.1.8-137981
試行時期：2020/05/28

##手順
CentOS導入~起動までは省きます。

VirtualBoxでは、[設定]＞[共有フォルダー]といったいかにも親切そうな設定項目があり、ここでホストOSのフォルダを指定してあげれば出来るんだろうな～と思ったのもつかの間。
VirutalBoxでは共有フォルダーの設定の前に、
「Guest Additions」というものを設定してあげなければいけません。
※これが厄介

下記で、一連の流れを説明します。

#GetAdditions設定前夜(パッケージ更新)
`su`でroot権限に移った後
パッケージのアップデートと必要なパッケージのインストールを実施します。

```
yum -y update
yum -y install kernel-devel kernel-headers gcc gcc-c++
yum -y install bzip2
```

`kernel-devel`と`kernel-headers`から初めてしまうと、アップデートされていない既存kernelとの整合性がとれなくなってしまうので、kernelのアップデート（`yum -y update`に含まれる）を先に実行する意味があります。

`bzip2`は後の工程で必要になるので、ここでインストールする事をお勧めします。

上記の工程が終了したら一度`reboot`で***再起動***しましょう！

##GuestAdditionsのインストール
（再起動後また、`su`コマンドでroot権限に移行しておく）

GuestAdditionsはisoイメージ形式で導入しますが、特段入手する必要なく、VirtualBoxに標準で搭載されています。
※搭載されているだけで、それを読み込む必要があります。
#ISOイメージの挿入
VirtualBoxの[デバイス]＞[Guest Additions CDイメージの挿入...]を選択し接続。
<img width="399" alt="ss1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477201/24267e99-2f6d-f621-5d39-45c21f45b925.png">
※上図赤枠部分

#インストール
接続したディスクイメージをCentOS内`media`フォルダへマウントします。

```
mount -r /dev/cdrom /media
```
`media`フォルダへ移動し、
マウントの完了後、マウントイメージからインストールを実行します。
ここで行う、`VBoxLinuxAdditions.run`の際に`bzip2`パッケージが必要となります。

```
cd /media
sh ./VBoxLinuxAdditions.run
```
インストールが完了したら、イメージをアンマウントして***再起動***をする。

```
cd
umount /media
reboot
```
また、アンマウントはGUIからも実行できる。
<img width="415" alt="ss2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477201/578a98ab-dc8e-fb02-590b-1d9fd96d2efd.png">

#共有フォルダの設定
再起動からの復帰後、[デバイス]＞[共有フォルダー]＞[共有フォルダー設定]から、
ホストOS（今回は、Windows）内の共有したいフォルダを設定します。
<img width="415" alt="ss3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477201/b35f2c1f-794c-5538-31cb-e81cbe5cf659.png">

[共有フォルダー設定]を選択すると、下記ウィンドウへ遷移します。
<img width="600" alt="ss4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477201/fd23c65b-5101-c7fa-064f-668ad6539207.png">
「共有フォルダー」を選択し、右側の新規追加ボタンを押します。
<img width="278" alt="ss5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477201/98ae0fca-fe7b-c972-9939-606d60050529.png">
任意のフォルダを選択します。（今回は`docker_file`というフォルダ名）
また、

- [x] 自動マウント(A)
- [x] 永続化する(M)

にチェックをし、[OK]を押して閉じる。

これで、ゲストOS（CentOS）内で`/media/sf_{共有フォルダ名}`今回の場合は、`/media/sf_docker_file`として共有される。
※もし、共有されていない場合は***再起動***をかけてみましょう。

#共有フォルダのマウント
上記、`/media/sf_{共有フォルダ名}`以外でマウントしたい場合は、

```
su
cd media/
mount -t vboxsf sf_{共有フォルダ名} {マウント先のディレクトリ名}
reboot
```
で、ゲストOS内で別フォルダを共有フォルダとすることができます。

#アクセス制限設定
上記までの作業で、rootユーザーが共有フォルダを利用可能になりますが、その他一般ユーザーに共有フォルダのアクセス権を与える場合は、下記のコマンドでユーザーを追加します。

```
su
gpasswd --add {ユーザ名} vboxsf
```

##関連記事
各記事、大変参考にさせて頂き、一部引用させて頂いた部分があります。
もし、ご迷惑なようであればご指摘頂けますと幸いです。

- [VirtualBox上のLinuxにGuestAdditionsをインストールして、共有フォルダを設定する](https://qiita.com/delicious-locomoco/items/b83c9078d8b553c03778)

- [VirtualBoxにおいて、ホストOSとゲストOS (Ubuntu) 間の共有フォルダを作成する方法](https://qiita.com/SUZUKI_Masaya/items/3444a010cf9903a088b3)

##参考サイト
- [VirtualBoxでゲストOSのCentOSにGuest Additionsで共有フォルダを作る方法](https://ttsknight.com/2018/12/guest_additions/)