VirtualBoxにalpinelinuxをインストールする

# はじめに
alpinelinuxはコマンドライン環境のみでインストールできます。ubuntu-serverと比べても軽量で、isoイメージのダウンロードやインストールにかかる時間が短いです。alpinelinux上でコマンドラインツールを自由にインストールできるようにまでの手順が難しかったので、まとめることにしました。

# 環境
PC:MacBook Pro (2016)
CPU: 2.9 GHz デュアルコアIntel Core i5
メインメモリ: 16 GB
alpinelinux: alpine-standard-3.21.0-x86_64.iso
VirtualBox: バージョン 7.0.10 r158379 (Qt5.15.2)

### Virtualboxの設定
alpinelinuxのisoイメージを公式ページからダウンロードしてVirtualBoxのドライブにセットする。
バーチャルマシーンの設定は以下のようにした。

タイプ：Linux
バージョン：Oracle Linux (64bit)
メインメモリー：2048MB
Processors：1CPU
Create a Virtual Hard Disk Now：20GB

### alpinelinuxのインストール
バーチャルマシーンを起動するとログイン画面になる。root　と入力する（パスワードはない）。
```
localhost login: 
```

rootでログインすると以下のようなメッセージが出る。setup-alpinを実行。
```
You can setup the system with the command: setup-alpine
```
すると、インストールウィザードが立ち上がる。あとは指示に従って入力するのみ。TUIでもなく、全てCUIで操作する。

### Keymap
Keymapの項目で
```
Select keyboard layout: 
```
とくる（私はusを選択。）
```
Select variant (or 'abort'): 
```
とくる。（私はus-dvorakを選択。）
以下も同様にやっていく。

### Hostname
```
Enter System hostname (fully qualified form, e.g. 'foo.example.org')[localhost]
```
適当に入力（今回はvb-alpineとした）

### Interface
Which one do you want to initialize? (or '?' or 'done')[eth0]とくるのでeth0を入力
Ip address for eth0? (or 'dhcp', 'none', '?')[dhcp]とくるのでdhcpを入力
Do you want to do any manual network configuration? (y/n)[n]とくるのでnを入力

### Root Password
New password:とくるので適当にと入力
単純すぎるとBad password: too shortとメッセージが出る
Retype password:とくるので再度入力。Bad passwordでも通る。

### Timezoneで
Which timezone ar you in? (or '?' 'none')[UTC]とくるのでAsiaと入力
What sub-timezone of 'Asia' are you in? (or '?')とくるのでTokyoと入力

### Proxy
HTTP/FTP proxy URL? (e.g. 'http://proxy:8080', or 'none')[none]とくるのでnoneと入力

### Network Time Protocol
Which NTP client to run? ('busybox', 'openntpd', 'chrony', or 'none')[chrony]とくるのでchronyと入力

### APK Mirror
Enter mirror number or URL:[1]とくるので1を入力。

### User
Setup a user? (enter a lower-case loginname, or 'no')[no]とりあえずnoにしておく。（後でユーザー登録をする。）
Which ssh server? ('openssh', 'dropbear' or 'none')[openssh]とくるのでopensshと入力。
Allow root ssh login? ('?' for help)[prohibit-password]とくるので、?で確認し、yesを入力。
Enter ssh key or URL for root (or 'none')[none]とくるのでnoneと入力。

### Disk & Install
Which disk(s) would you like to use? (or '?' for help or 'none')[none]?で確認の後、sdaと入力。（noneではなくsda）。
How would you like to use it? ('sys', 'data', 'cryppt', 'lvm' or '?' for help)[?]とくるので?で確認ののち、sysと入力。
WARNING: Erase the above disk(s) and continue? (y/n)[n]とくるのでyと入力。

これでインストール終了です。Installation is complete. Please reboot.メッセージが表示されます。

### 注意点

VirtualBoxのWindowの右下のCDのアイコンをクリックし、Remove disk from virtual driveを選択してiosが入ったディスクを抜く。これをしないと、再起動した際にまたisoから起動してしまう。


### 再起動
rebootコマンドで再起動する。

### ログイン画面
rootでログインする。osインストールの時に定めたパスワードを用いる。

### 動作確認
rc-service sshd statusでopensshサーバーが起動していることを確認。
もしインストールされていない場合、apk add openssh
サービスをスタート、rc-service sshd start

ip addrでipアドレス
whoamiでloginしているuser名（今はroot）
hostnameで先ほど名付けたホスト名（今回はvb-alpine）
setup-keymapでキーマップ変更できる

### user登録
adduser myusername を実行
Changing password for myusername
New password: とくるので適当に決める。
短すぎるとBad password: too shortとくるが、
Retype password:で再入力して登録完了できる。

### userをwheelグループに登録
addgroup myusername wheelコマンドを実行。「myusername」が「wheel」グループに登録される。

groups myusernameで確認できる。

### nanoをインストール
apk add nanoコマンドを実行。

### sudoコマンドをインストール
nano /etc/apk/repositoriesで以下を最後尾に追加。

```
https://dl-cdn.alpinelinux.org/alpine/v3.18/main
https://dl-cdn.alpinelinux.org/alpine/v3.18/community
```

リポジトリ更新。apkでsudoがインストールできるようになる。
```
apk update
```
sudoをインストール。
```
apk add sudo
```

### wheelグループがsudoを使えるようにする。
```
visudo
```
を実行。以下の行のコメントアウトを外す
```
%wheel ALL=(ALL:ALL) ALL
```

sudoがwheelグループ所属のmyusernameで使えるか確認する。exitでrootをログアウトさせます。先ほど定めたuser(myusername)とpasswordでログインする。sudo apk updateなど適当に実行して、エラーが出ないことを確認する。

### python3とpip3をインストール
```
sudo apk update
sudo apk add python3
python3 --version  #確認
```
```
sudo apk add py3-pip
pip3 --version #確認
```

### 適当なツールをインストール
```
sudo apk add yt-dlp
```

# 考察
以下が、私がつまづいた箇所です。
・インストールウィザード終了後はisoイメージをバーチャルドライブから外さなければならない。
・インストールウィザードでの「User」と「Disk & Install」で適切に設定する
・sudoをインストールする。デフォルトのリポジトリではsudoがなく、手動でリポジトリを登録する必要がある。
・userを登録し、そのuserをwheelグループに登録し、wheelグループがsudoコマンドを使えるようにする。

母艦（今回はMac）とVirtuaBox上のalpinelinuxとでファイルの送受信を自由にできれば便利です。私の環境ではVirtualBoxの機能を用いてそれをしようとすると、動作が不安定になり、困難でした。なのでMacとalpinelinuxとのファイルのやりとりはscpコマンドで行なっています。scpコマンドを用いるということはssh接続できないとなりません。VirtualBox上のalpinelinuxにMacからssh接続するには、VirtualBoxの設定をしなければなりません。簡単に述べると、VirtualBoxのGUIの「設定」> 「ネットワーク」> で割り当てが「NAT」になっていることを確認し、その項目の少し下にある「Advanced」 > 「ポートフォワーディング」 > 新規ポートフォワーディングルールを追加しますアイコンの「+」をクリック > 「名前: 変更不要, プロトコル: デフォルトのTCPのまま, ホストIP: 設定不要, ホストポート: 2222（alpinelinuxのsshサーバーのポート）, ゲストIP: 設定不要, ゲストポート: 22とする

Macのターミナルを立ち上げ、Mac側からVirtualBox上のalpinelinexにssh接続

```
ssh -p 2222 myusername@localhost # -p 2222とするのが大事。小文字のp。

```

Macからalpinelinuxにファイル送信

```
scp -P 2222 test.txt myusername@localhost:~ # -P 2222 とする。大文字のP。

```

Macのuser名とhostnameを確認。Macのターミナルで以下を実行。

```
whoami # usernameを確認
hostname # hostnameを確認
```

alpinelinuxからMacにssh接続。alpineのコンソール上で以下を実行。

```
ssh macのユーザー名@macのホスト名
```

alpinelinuxからMacにscpでファイルを送信。
```
scp test_2.txt macのユーザー名@macのホスト名:~

```


# 参考

Alpine Linux をインストールする #VirtualBox - Qiita, https://qiita.com/elfincafe/items/0f3acd6a76b7e3cf9b19