VMwareをインストールして（エラー対処できてから）使ってみよう

#なぜVMwareを入れるのか
これはあくまで僕の持論なので反論は受け付けませんが、僕は色んなOSを触るために仮想で試しています。
いやいや。待ってください。自分のパソコンに入れたらいいじゃないですか？って
自分のパソコンに入れるとなるとメモリに限度があるというのと、一度インストールに失敗したりパソコン全体に響くようなミスをしてしまった場合を考えて仮想で試すのです。
自分のパソコンなので責任なんてどうでもいいですが、まずは慣れが大事だと思うので僕は入れます。
#実際にVMwareを入れてみよう
まず、実際に導入した機器のスペック？です。

| 　　　　　　　     |  |        
|:-----------------|------------------|
| パソコン|ThinkPad X1 Carbon (2017モデル)|     
| 入れてるOS|Ubuntu17.10
結構最新のもの使ってます。ただ、やり方は変わらない（と思う）ので特に気にしなくて問題ないと思います。

##インストール手順
**①**[こちらから](https://www.vmware.com/jp/products/workstation-player.html)Linux版をダウンロードしてきてください。

**②** 上記のサイトからダウンロードしてきたbandleファイルをrootディレクトリに置いてshコマンドで実行してインストールしてください。*1

```ruby:端末
$ sh VMware-Player-14.0.0-6661328.x86_64.bundle
```

**③**終わり

##さあ、起動しよう

さあ、Windowsを入れてみよう！!
![Screenshot from 2018-03-08 09-27-50.png](https://qiita-image-store.s3.amazonaws.com/0/196752/056e9ca0-2e54-c2ba-0eda-c88b123927e0.png)

**なんでや！！！！**
**俺が悪いことでもしたっていうのか？！（心当たりあり)**

##このエラーを直して使えるようにしよう
このエラーを凄い要約すると物理メモリが足りないって言われてます。
ということでググってみたら[このサイト辺り](https://communities.vmware.com/thread/573281)が当たりだと思ったのでやってみました。*2

**①**以下のコマンドを実行

```ruby:端末にて
cd /usr/lib/vmware/modules/source

tar xf vmmon.tar

cd vmmon-only/linux

edit vmmon-only/linux/hostif.c
```
 
②hostif.cの中身追加

```ruby:hostif.c
 #include "versioned_atomic.h"
 --- BEGIN ADD ---
 #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0)
 #   define global_zone_page_state global_page_state
 #endif

 static unsigned long get_nr_slab_unreclaimable(void)
{
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 13, 0)
   return global_node_page_state(NR_SLAB_UNRECLAIMABLE);
 #else
   return global_page_state(NR_SLAB_UNRECLAIMABLE);
 #endif
}

 static unsigned long get_nr_unevictable(void)
{

 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
   return global_node_page_state(NR_UNEVICTABLE);
 #else
   return global_page_state(NR_UNEVICTABLE);
 #endif
}

static unsigned long get_nr_anon_mapped(void)
{
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
   return global_node_page_state(NR_ANON_MAPPED);
 #else
   return global_page_state(NR_ANON_PAGES);
 #endif
}
--- END ADD ---
 
...
    unsigned int reservedPages = MEMDEFAULTS_MIN_HOST_PAGES;
    unsigned int hugePages = (vm == NULL) ? 0 :
       BYTES_2_PAGES(vm->memInfo.hugePageBytes);
 
--- BEGIN REPLACE ---
   unsigned int lockedPages = global_page_state(NR_PAGETABLE) +
                              global_page_state(NR_SLAB_UNRECLAIMABLE) +
                              global_page_state(NR_UNEVICTABLE) +
                              hugePages + reservedPages;
   unsigned int anonPages =
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
      global_page_state(NR_ANON_MAPPED);
 #else
      global_page_state(NR_ANON_PAGES);
 #endif
--- WITH ---
   unsigned int lockedPages = global_zone_page_state(NR_PAGETABLE) +
                              get_nr_slab_unreclaimable() +
                              get_nr_unevictable() +
                              hugePages + reservedPages;
   unsigned int anonPages = get_nr_anon_mapped(); 
--- END REPLACE ---
```

③以下のコマンドを実行

```ruby:端末
cd ../..
tar cf vmmon.tar vmmon-only
rm -rf vmmon-only 
```
 ④追加したパッチを適応するためにもう一度構築する

```ruby:端末
sudo vmware-modconfig --console --install-all
```
これで以上になります。

##さあ起動しよう②
エラーでないように~~ググってそれを実行しただけ~~修正をしたので早速実行してみましょう！
![Screenshot from 2018-03-08 09-27-50.png](https://qiita-image-store.s3.amazonaws.com/0/196752/79fdd0b1-e3db-9ff3-6aad-7b223575d15f.png)
**なんで（ry**

##調べてみました
###**これを行うことは自己責任でお願いします。**
ドライバをインストールするときにセキュアブートがONだと邪魔するみたいです。
なのでBIOSからセキュアブートをOFFにして上記のことをもう一回やりました。
[参照はこちらから](http://hs-it-notes.blogspot.jp/2014/11/blog-post.html)

##さあ起動しよう③
これで動かなかったらもうVMwareやめます。
![Screenshot from 2018-03-09 17-21-31.png](https://qiita-image-store.s3.amazonaws.com/0/196752/94340dc9-f446-6e2e-16db-fb76c900c069.png)
**動きました！！！**
**日頃の行いが良かったからできました（心当たりなし)**

##最後に
なにか質問があったら[Twitter](https://twitter.com/PotyaExe?lang=ja)までお願いします。
仮想マシンの使い道とかは聞かないでください。

#補足説明
*1、ここの説明ではrootディレクトリにおきましたが、以下の方法でも可能です
①実行権限を与える。

```ruby:端末
$ sudo chmod +x VMware-Player-14.0.0-6661328.x86_64.bundle
```

②インストーラを起動する

```ruby:端末
$ sudo ./VMware-Player-14.0.0-6661328.x86_64.bundle
```
これでインストールできます。
[参照はこちらから](http://itlx.ldblog.jp/archives/51984097.html)

*2、これが正解かどうかはわかりませんが、少なくともセキュアブート関連が関係ない人は治ったみたいです。