【2023年7月版】ESXi7, 8 で Alpine Linux のインストールと実行 

# はじめに

ESXi8 で省メモリのLinux使いたいな
そうだ、ESXi8 で Alpine Linux しよう！
(ESXi7 でも同一手順)

# 環境

- ESXi8 or ESXi7
- Apline Linux 3.18.2
- ESXi8 は、macOS12のChromeから操作
- IPはDHCPから取れる、あとから`192.168.100.101`を設定する
- Gatewayは `192.168.100.1`、ネームサーバは `8.8.8.8`, `1.1.1.1`

# OSのダウンロード

- [alpine Linux - DOWNLOADS](https://www.alpinelinux.org/downloads/) からダウンロード
- STANDARD の X86_64 を選択

# インストーラの準備

- USBの場合は、rufusや、balena Etcherで作成
- ISOの場合は、ISOイメージをNFS等でESXi8のローカルへコピー

# 仮想マシンの作成

- USBの場合は、biosではなく、uefiを選択し、USBを接続
- ISOの場合は、CD-ROMにISOイメージを選択
- Guest OS Version は `Other 5.x or later Linux (64-bit)` を選択

# セットアップ

## ログイン

ログインして `setup-alpine` を実行

- root　でログイン（パスワードなし）
- `setup-alpine`を実行

## setup-alpine

プロンプトに応答していく

- Select keyboard layout: [none] us
- Select variant (or 'abort'): us-mac
- Enter system hostname (fully qualified form, e.g. 'foo.example.org') [localhost] alipne01
- Which one do you want to initialize? (or '?' or 'done') [eth0]
- Ip address for eth0? (or 'dhcp', 'none', '?') [dhcp]
- Do you want to do any manual network configuration? (y/n) [n]
- New passwrod: 複雑なパスワードを入力
- Retype password: ↑のパスワードを再入力
- Which timezone are you in? ('?' for list) [UTC] Asia/Tokyo
- HTTP/FTP proxy URL? (e.g. 'http://proxy:8080', or 'none') [none]
- Which NTP client to run? ('busybox', 'openntpd', 'chrony' or 'none') [chrony]
- Enter mirror number (1-73) or URL to add (or r/f/e/done) [1] r
  - ここで mirror のサーバが 1つしかない、取れない場合は、ネットワークがインターネットに接続されていない
- Setup a user? (enter a lower-cast loginname, or 'no') [no]
- Which ssh server? ('openssh', 'dropbear' or 'none') [openssh]
- Allow root ssh login? ('?' for help) [prohibit-password] yes
- Enter ssh key or URL for root (or 'none') [none]
- Which disk(s) would you like to use? (or '?' for help or 'none') [none] sda
- How would you like to use it? ('sys', 'data', 'crypt', 'lvm' or '?' for help) [?] lvmsys
- WARNING: Erase the above disk(s) and continue? (y/n) [n] y

`Installation is complete. Please reboot.` と表示されたら `reboot` と入力して再起動

## ssh で接続(dhcpアドレス)

`ip a` でIPアドレスを確認して、ssh経由で接続

`$ ssh root@IPアドレス`

## vim のインストール

```terminal
# apk add vim
```

## IPアドレスの設定

固定のIPアドレスを設定して再起動

```terminal
# cp /etc/network/interfaces interfaces
# vim /etc/network/interfaces 
# diff interfaces /etc/network/interfaces 
--- interfaces
+++ /etc/network/interfaces
@@ -2,5 +2,7 @@
 iface lo inet loopback
 
 auto eth0
-iface eth0 inet dhcp
-
+iface eth0 inet static
+	address 192.168.100.101
+	netmask 255.255.255.0
+	gateway 192.168.100.1
# reboot
```

## ssh で接続(固定アドレス)

`ssh root@192.168.100.101`

## sudo のインストールとユーザの追加と設定

```terminal
# echo "http://dl-cdn.alpinelinux.org/alpine/v3.18/community" >> /etc/apk/repositories
# apk update
fetch http://mirrors.edge.kernel.org/alpine/v3.18/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.18/community/x86_64/APKINDEX.tar.gz
v3.18.2-390-g7633fed725b [http://mirrors.edge.kernel.org/alpine/v3.18/main]
v3.18.2-392-gdbc2124c028 [http://dl-cdn.alpinelinux.org/alpine/v3.18/community]
OK: 20063 distinct packages available
# apk upgrade
OK: 189 MiB in 79 packages
# apk add sudo
(1/1) Installing sudo (1.9.13_p3-r2)
Executing busybox-1.36.1-r1.trigger
OK: 191 MiB in 80 packages
# adduser dev
Changing password for dev
New password: 
Retype password: 
passwd: password for dev changed by root
# addgroup -S sudo
# echo "%sudo ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# addgroup dev sudo
```

## ssh の設定

### `dev`ユーザで、sshの鍵を作成・設定、コピーしておく

```terminal
# su - dev
$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/dev/.ssh/id_rsa): 
Created directory '/home/dev/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/dev/.ssh/id_rsa
Your public key has been saved in /home/dev/.ssh/id_rsa.pub
The key fingerprint is:
  :
  :
  :
$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
```

### `root`ユーザで、sshdの設定

```terminal
# cp /etc/ssh/sshd_config sshd_config
# vim /etc/ssh/sshd_config
# diff sshd_config /etc/ssh/sshd_config
# diff sshd_config /etc/ssh/sshd_config 
--- sshd_config
+++ /etc/ssh/sshd_config
@@ -29,12 +29,12 @@
 # Authentication:
 
 #LoginGraceTime 2m
-PermitRootLogin yes
+PermitRootLogin no
 #StrictModes yes
 #MaxAuthTries 6
 #MaxSessions 10
 
-#PubkeyAuthentication yes
+PubkeyAuthentication yes
 
 # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
 # but this is overridden so installations will only check .ssh/authorized_keys
@@ -54,7 +54,7 @@
 #IgnoreRhosts yes
 
 # To disable tunneled clear text passwords, change to no here!
-#PasswordAuthentication yes
+PasswordAuthentication no
 #PermitEmptyPasswords no
 
 # Change to no to disable s/key passwords
# service sshd restart
 * Stopping sshd ...                                                      [ ok ]
 * Starting sshd ...                                                      [ ok ]
```

### `dev` ユーザで、ssh接続

`ssh dev@192.168.100.101 -i .ssh/id_rsa`

# Open VM Tools のインストール

```terminal
$ sudo apk add --update open-vm-tools
$ sudo rc-service open-vm-tools start
$ sudo rc-update add open-vm-tools
```

# いれておくと便利なツール

- `bash`
    `sudo apk add bash`
- `vim`
    `sudo apk add vim`
- `lsblk`等
    `sudo apk add util-linux`
- `lspci`等
    `sudo apk add pciutils`
- `ss`等
    `sudo apk add iproute2`
- `htop`, `btop`, `iftop`
    `sudo apk add htop btop iftop`
- `iperf3`
    `sudo apk add iperf3`
- `tcpdump`
    `sudo apk add tcpdump`
- `vmstat`
    `sudo apk add procps`
- `iotop`
    `sudo apk add iotop`
- `pidstat`, `iostat`
    `sudo apk add sysstat`
- `sar`
    `sudo apk add strace`
- `curl`
    `sudo apk add curl`
- `ifconfig`, `arp`
    `sudo apk add net-tools`
- 上記すべて
    `sudo apk add bash vim util-linux pciutils iproute2 htop btop iftop iperf3 tcpdump procps iotop sysstat strace curl net-tools`

# やっておくと便利なbash設定
ログインシェルを `bash` に変更しておく
```terminal
$ cat /etc/passwd
 :
 :
dev:x:1000:1000:dev:/home/dev:/bin/bash
 :
 :
```

プロンプトを `{ユーザ名}@{ホスト名}:{ワークディレクトリ}` に変更
```terminal 
$ cat .bash_profile
if [ -f ~/.bashrc ]; then
   source ~/.bashrc
fi

$ cat .bashrc
PS1="\u@\h:\w\$ "
```

# さいごに

かんたんでしたね

# 参考資料

[Alpine Linux - Install Alpine on VMware ESXi](https://wiki.alpinelinux.org/wiki/Install_Alpine_on_VMware_ESXi)