VMware で Arch Linux をインストールするまで

## はじめに!
自分が実際にVMwareでArch Linuxインストールするとき、他サイトの記事だと分かりづらかったりしたので、まとめてみました。
分かりやすくまとめたので、初めての人はもちろん、途中で諦めてしまった人も再度挑戦していただければ幸いです。

VMwareの環境構築の方法の掲載していますので、分かる方は次に進んでください。
**VMware Workstation Player は最新バージョンにしてください。** 
これをやらないと仮想環境が起動できませんでした。

## 向いてる人たち
* 最小パッケージからLinuxを構成してみたい！
* 最近はパッケージが複雑化し、なんか重たいと感じている
* 何となくオートよりもマニュアル派だ！
* UbuntuやCentOSに飽きた...
* 自作PCのカスタマイズは愛だ
* 私はVim派です。(俺はnano派なんだけど。~~ふざけんな！！！~~ って人も安心してください。入ってます。)

## そもそもArchLinuxってなんぞや？
![archlinux-logo-dark-90dpi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/09995586-e83d-3383-ed28-890a3c8827d2.png)

Linuxと名前にある通りLinuxディストリビューションの1つで、Linux の中でも特にカスタマイズ性に優れている魅力がありますが、選択肢を多くさせインストール手順を難しくするなど、基本的に初心者向けではなくコマンドや設定ファイルを触ることに慣れた人向けのディストリビューションです。

## 自分の環境
* OS:　Windows10 Pro 64ビット (Version 2004)
* CPU:　Intel Core i7-6700
* メモリ:　16GB

## インストールするアプリなど
* VMWare Workstation 15 Player
* TeraTerm

## 前提条件
あくまで私の好みでパッケージがいろいろ入っています。随時追加、削除してください。

* ブートローダに grub を使います。
* GUIのインストール方法は記載していません。あくまでインストール完了までです。

今回は VMware を使うので、BIOS や UEFI の項目にある(ない場合もあります)
Intel Virtualization Technology (VT-x) の設定を有効化してください
分からない方は以下を参考にしてください。

[Google検索](https://www.google.com/search?q=vt-x+%E6%9C%89%E5%8A%B9)

あと、WMware Workstation Player はすでにインストールされているものとします。
入っていない方は以下を参考にしてください。

[VMwareのインストール](https://slacknotebook.com/vmware-player-15-on-windows/#toc1)

## イメージファイルのダウンロード先
[イメージファイル (mirror.archlinuxjp.org)](http://mirror.archlinuxjp.org/iso/latest/)

![bandicam 2020-10-09 15-53-01-996.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/cedc8384-342c-e949-eadd-ba3816123953.jpeg)

このisoを選択してダウンロード！

## 1. VMware で仮想環境の構築
ここの部分が分かる方は無視してください！
VMwareの インストールが完了したら、起動してください。

新規仮想マシンの作成(N)をクリック

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/f290e8ad-9ef8-1335-7ef2-d23957404a99.png)

インストーラディスクイメージファイルにさっきダウンロードしたArch Linuxのイメージを指定する

![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/5d6791c4-1441-5f2f-5740-f10d422cc56f.png)

ゲストOSを「Linux」バージョンを「その他の Linux 5.x 以降のカーネル(64ビット)」にする

![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/18198637-334a-38d5-b342-9b0a549a9754.png)

今回は、「Arch Linux」という名前にします。場所を指定したい場合は変更してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/2c9446b1-8558-b85b-c11b-1db8d5e7923a.png)

今回は、ディスクの容量を20Gに指定します。いっぱいお触りしたいときは増やしましょう。

![キャプチャ4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/3b9fc68a-1b35-8db4-d8fc-847446db4c2d.png)

~~よしっ！完了！~~ じゃなくてこれで環境構築は終了ではありません。
ハードウェアをカスタマイズしましょう。

![キャプチャ5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/7f8ee534-6760-9961-e674-32d7b6efe841.png)

メモリ、プロセッサ数を増やしてください。
ネットワークアダプタを「ブリッジ」にしてください。できたら次に進んでください。

![キャプチャ6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/f7f2a890-0e3f-528a-8be0-748a1d883975.png)

## 2. efiの設定
**まだ起動しないでください！！！ 
~~Arch Linuxくんは無愛想なので~~ まだ設定があります。**
仮想環境があるディレクトリを開いてください。
![キャプチャ7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/d1bb7e6d-6ee8-76bf-496c-d0e2b319f4fe.png)

拡張子が「.vmx」のファイルをメモ帳などで起動してください。
以下に追記して、**保存はまだしないでください**。約束です。
Ctrl + Shift + S を押してください

```
firmware = "efi"
```

![キャプチャ10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/6148f007-f0e4-1d10-6dae-75d487403d61.png)

**必ず文字コードを「UTF-8」から絶対に「ANSI」にしてください。**
文字化けして開けなくなります。
![キャプチャ11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/4bc0accb-7a5c-0337-51b1-866263765c20.png)

これで設定は完了です。

## 3. 仮想環境の起動と構築
それでは構築した仮想環境を起動しましょう。

ここで、この画面になっていたらefiの設定ができていません。上にある設定を行ってください。
![キャプチャ14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/dd4ceb84-6d01-0614-aa8a-06f5f7af15bb.png)

この画面になっていればefiの設定ができているので、このまま進めてください。
![キャプチャ13.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/8e041804-3bf3-db32-3b65-222270bdece0.png)

なにもエラーがなく起動したらこの画面になります。
それでは~~Arch Linuxくんは無愛想なので~~ 設定していきましょう。
![bandicam 2020-10-09 13-41-52-460.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/5d38d42a-a511-9e95-56b9-72da0f6f915f.jpeg)

### キーマップの設定
おそらくほとんどの方が日本語キーボードを使用していると思います。(US配列の人、ごめんなさい)
ArchLinuxを始め、ほとんどのLinuxはUS配列のキーボードを使用しているため、まず日本語配列用のキーボードレイアウトに設定します。

```bash:
# loadkeys jp106
```

### ping で通信確認
大抵の場合、ネットワーク接続は確立されているはずですが、念のため確認します。

```bash:
# ping -c 4 archlinux.jp
```

### rootパスワードを設定
これは、SSHで一時的につなぐものだけなので、簡単なパスワードを推奨します。私は「a」にしました。

```bash:
# passwd
```

### SSHで接続
仮想マシンにコマンドを打っていくのはつらいのでSSH経由で操作します。sshdを起動して、ipアドレスを確認します。

```bash:
SSHデーモンの開始
# systemctl start sshd

IPアドレスの確認
# ip a
```
確認すると私の環境では「ens33」で、IPアドレスは「192.168.1.36」でした。
![bandicam 2020-10-09 13-49-26-109.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/8afdaef2-dc79-f269-63fd-13a025b78ef0.jpeg)

### 時刻設定
公式マニュアルに最初に時刻設定を推奨しているので設定します

```bash:
# timedatectl set-ntp true
```

## 4. パーティションの作成
ライブ環境によって認識されたディスクには /dev/sda や /dev/nvme0n1 などのようにブロックデバイスが割り当てられます。
デバイスを確認するには、lsblk または fdiskコマンドで確認してください。
efi起動なのでGPTでパーティショニングをしていきます。
このコマンドでgdiskが起動します。

```bash:
# gdisk /dev/sda
```
まずは、 「 o 」でGPTのパーティションテーブルを作成します
**この作業で既存パーティションは全て削除されます**

```bash:
Command (? for help):o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y
```
パーティションは、[Arch Linuxのインストールガイド](https://wiki.archlinux.jp/index.php/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%AC%E3%82%A4%E3%83%89#.E3.83.91.E3.83.BC.E3.83.86.E3.82.A3.E3.82.B7.E3.83.A7.E3.83.B3)を参考にしています。
今回のパーティショニングは以下の通り設定します。

|パーティション|容量|
|:-:|:-:|
|ESP (EFI Syeten Partition)|512M|
|swap パーティション|1GB|
|データパーティション|残り容量全て|

ESPとはUEFIブートの際に推奨されているFAT32でフォーマットされているパーティションです。
swapとはパソコン使用時に複数のタスクを立ち上げメモリが不足した場合に、ディスクの一部の領域をメモリの代わりとして使う容量です。
残りの領域は全てデータ領域（root、homeディレクトリなど）として作成します。

```bash:
Command (? for help):n
Permission number: 1
First sector : 何も押さずエンター
Last sector : +512M
Hex code or GUID : EF00

Command (? for help):n
Permission number: 2
First sector : 何も押さずエンター
Last sector : +1G
Hex code or GUID : 8200

Command (? for help):n
Permission number: 3
First sector : 何も押さずエンター
Last sector : 何も押さずエンター
Hex code or GUID : 8300
```

最後に W を指定してパーティションを切ります。
このままでは使用できないため、次に各パーティションをフォーマットします。

```bash:
Command (? for help):W
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.
```

### 各パーティションをフォーマット
#### ESP パーティションのフォーマット
UEFI ブートパーティションは、FAT32でフォーマットする必要があるため mkfs.vfat コマンドを使用します。

```bash:
# mkfs.vfat -F32 /dev/sda1
```

#### Linuxファイルシステム(ext4)のフォーマット
フォーマットを行うためのコマンドは、mkfs.ext4 コマンドを使用します。

```bash:
# mkfs.ext4 /dev/sda3
```

#### スワップの作成と読み込み
Linuxでスワップ領域を作成するためには、mkswap コマンドを使用します
作成したスワップ領域を実際に使用するため、swapon コマンドで設定できます。

```bash:
# mkswap /dev/sda2
# swapon /dev/sda2
```

#### ちゃんとフォーマットできたか確認
lsblk コマンドを使用して、フォーマットできたか確認します。

```bash:
# lsblk
```

このようになっていればOKです。

![bandicam 2020-10-09 14-01-30-866.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/43bb71cc-19f4-8506-67da-b5953ecbb81f.jpeg)


### パーティションのマウント
次に、フォーマットしたパーティションのマウントをします。

```bash:
まずルートディレクトリをマウントします
# mount /dev/sda3 /mnt
ディレクトリを作り、ESPを /mnt/boot にマウントします
# mkdir /mnt/boot
# mount /dev/sda1 /mnt/boot
```
マウントが完了すればいよいよシステムのインストールをしていきます！あともう一息！

## 5. システムのインストール

#### ミラーリストの編集
ここからベースシステムのインストールをしますが、パッケージをダウンロードするためにサーバーに接続します。
各国にいくつかのミラーがあり、デフォルトのままではダウンロードが長時間かかることがあるので日本のサーバーを選択します。
ミラーリストは /etc/pacman.d/mirrorlist に保存されていて、先頭から優先してサーバを使うようになっているので、このファイルを編集します。

使いたいエディタを使って編集しましょう。

```bash:
# nano /etc/pacman.d/mirrorlist
```
開けたら、このテキストをこの位置に追加してください。

```bash:/etc/pacman.d/mirrorlist
Server = http://mirror.archlinuxjp.org/$repo/os/$arch
```
![bandicam 2020-10-09 14-32-48-469.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/e3fa534f-50a1-6e33-9552-423543566721.jpeg)

#### nano の場合
Ctrl + O で書き込み
Ctrl + X で終了

#### vim の場合
i で挿入モードに入る
Esc で挿入モードを終了
:wq で終了


#### ベースシステムのインストール
ミラーリストが編集できたら、次はベースシステムをインストールしていきます。
Linux ベースと以下のものをインストールします。適時追加や削除をしてください。

* vi
* vim
* nano
* wget
* man-db
* man-pages


```bash:
# pacstrap /mnt base base-devel linux linux-firmware btrfs-progs intel-ucode vi vim nano dosfstools efibootmgr openssh dhcpcd netctl ccache zsh zsh-completions zsh-syntax-highlighting wget man-db man-pages screenfetch
```

ダウンロードしている様子
![bandicam 2020-10-09 14-34-40-794.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/7aba16d7-ec7e-921f-56a5-ac8a423bb719.jpeg)

#### fstabの作成
fstabとは、パーティションやファイルシステムの情報やなどがどこにmountされているかなどを保存するためのものです。
genfstab で現在マウントされているパーティションを検索し、適切な値を書き込むことができます。

```bash:
# genfstab -U -p /mnt >> /mnt/etc/fstab
```

## 6. Arch Linux のシステム設定
ここからはインストールした Arch Linux のシステム内に入り、各種設定をします。

先ほどインストールしたArch Linuxのシステムは /mnt に入っているので、ルートを /mnt にします。
mnt をルートディレクトリとして扱うのが chroot コマンドです。

```bash:
# arch-chroot /mnt /bin/bash
```
#### 言語、キーマップの設定
Linux 上で使う言語を設定します。
今回は ja_JP　と デフォルトとして en_US (英語) は必須なので指定します。
キーマップの設定方法は、/etc/locale.gen ファイルから使う言語の先頭の # を削除して、使用する言語を選択できます。

```bash:
# nano /etc/locale.gen
```

* en_US.UTF-8 UTF-8
* ja_JP.UTF-8 UTF-8

この2つの最初の # を削除して保存してください。

次に、次のコマンドを実行してロケールを生成します。

```bash:
# locale-gen
```
2とも done と表示されれば完了です。
![bandicam 2020-10-09 14-47-57-676.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/a5b7cf51-62d2-c63c-6c36-7a66e75e8749.jpeg)

####  locale.conf ファイルを作成
この段階で日本語設定をしてしまうと文字化けしてしまうことがあるので、ここでは日本語設定は行わずに英語のままにします。

```bash:
# echo LANG=en_US.UTF-8 > /etc/locale.conf
```

#### キーマップの設定　(US配列の場合は無視)
インストールした Arch Linux 上のコンソールのキーボード配列はデフォルトで英語配列になっているため、以下の設定ファイルでキーボード配列を指定します。
日本語キーボードを使用している場合は /etc/vconsole.conf ファイルに KEYMAP=jp106 の内容を書き込んでください。
US配列の場合はこのコマンドは無視してください。

```bash:
# echo KEYMAP=jp106 > /etc/vconsole.conf
```

#### エリア設定

日本在住の場合は以下のコマンドを叩いてください。

```bash:
# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
```

#### 時刻設定
ハードウェアクロックをUTCに設定します。

```bash:
# hwclock -u -w
```
#### Hostnameを決める
HostnameとはインストールするLinuxの名前です。
好きな名前を「 /etc/hostname 」に書き込んでください。
今回は、Hostnameを arch にします。

```bash:
# echo arch > /etc/hostname
```
/etc/hosts も同じように YOUR_HOSTNAME を削除して編集してください。

```bash:
# nano /etc/hosts
```
![bandicam 2020-10-09 14-50-55-790.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/56af4bfe-fb61-622c-adc5-ff3312507e42.jpeg)

次にrootのパスワードを設定します。
**これをやらないとインストールができてもログインできません**

```bash:
# passwd
```

#### デーモンを自動的に有効化させる
デーモンを起動時に有効化するには、このコマンドを入力してください。

```bash:
# systemctl enable sshd
# systemctl enable systemd-networkd
# systemctl enable systemd-resolved
# systemctl enable dhcpcd.service
```

## 7. ブートローダーの設定
Arch Linux を起動するために Linux に対応しているブートローダーを選択してインストールする必要がある。
今回は GRUB を使います。

```bash:
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck --debug
# grub-mkconfig -o /boot/grub/grub.cfg
```
これでインストール作業は完了です！お疲れ様でした。

## 8. システムの再起動
実際に動くかどうか確かめるために再起動しましょう。

```bash:
# exit
# reboot
```
再起動してこの画面が出ればインストールができてる証拠です！
![bandicam 2020-10-09 15-31-41-230.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/63c874fd-869c-cbb4-e9a6-12b24bed51f8.jpeg)

ログインできたら、早速 screenfetch コマンドを打ってみよう!!!

![aキャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545468/84d58662-f995-f5e1-f964-8c1079298013.png)

**ああ...美しい...これぞArchLinux。漢のロマン**


## 参考文献
[Arch Linux公式ページ](https://www.archlinux.jp/)
[ArchLinux インストールガイド](https://wiki.archlinux.jp/index.php/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%AC%E3%82%A4%E3%83%89)
[Arch LinuxをVMware Fusionにインストールする方法[ベースシステムインストール編]](https://dyny001.net/install-arch-basesystem/)
[VMwareにArch Linuxをインストールしよう](https://qiita.com/Aruneko/items/0541f343ec7a1989f236)
[Arch Linux インストール俺々式完全版](https://qiita.com/TsutomuNakamura/items/b60518f8788e5e998744#base-%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
[makoのノート - Arch Linuxの初期設定](https://mako-note.com/archlinux-initial-setting/#toc_id_3)
[さくらのナレッジ - rch Linuxを簡単インストール – 「楽しいさくらのクラウド」(17)](https://knowledge.sakura.ad.jp/6443/)
[クロの思考ノート - Arch Linuxを使ってみた](http://note.kurodigi.com/post-0-22/)
[テックメモ - Arch Linux 初期設定](https://okamurax.com/?p=2636)
[ログインが楽しくなる！screenfetchを使ってCentOSで遊んでみた](https://qiita.com/shimatter/items/63eefae88fecd4ed3281)
[Windows：「VMware Workstation 15 Player」を使う
](https://slacknotebook.com/vmware-player-15-on-windows/#toc1)