以前の投稿にもありますが、私のミニPC内ではHyper-Vで4つのVMが稼働しています。
- OpenWrt(WireGuardで外部からの接続や以下へネットワーク環境の提供)
- Nginx(reverse proxyとして使用)
- Immich(写真とビデオの管理アプリ、Google Photos、Apple iCloud Photos、Amazon Photosなどの代替)
- IDE環境(自作Webアプリ用の稼働とVSCode Serverとして稼働)
この内、NginxとImmichがAlpine Linux上で稼働しています。Alpine Linuxを選んだ理由は軽量コンパクトでインストールが早いから。IDE環境はDebian Linuxを使用しています。Debianも最小限のインストールで軽量コンパクトにはできるのですが、インストールメディアの起動から含めトータルでインストールに掛る時間がAlpineの方が早いのでお手軽感が有ってこちらを選んでいます。
Alpine LinuxをHyper-VのVMへインストールする上で注意点は「設定」で「セキュアブートを無効」にする事と、「ファームウェア」で「ブート順」を「1.DVD ドライブ 2.ハード ドライブ 3.ネットワーク アダプター」の順にする事です。1のDVDが空の状態で3のネットワークアダプターが2のハードドライブより上になっているとブート時にフリーズします。
その他に関してはAlpine Linuxのインストールはコマンドラインでのインストールになります。GUIに慣れている方からすると少し難しそうに感じるかもしれませんが、ログイン後は1回のコマンド入力と、後は対話式の入力で非常に簡単に済みます。GUI操作より楽で早いので安心してください。
前回までの投稿と今回の投稿を試す事で、私の構築した環境のNginxやImmichのベースが出来上がります。興味がある方は前回までの投稿を読んでみてください。
今回の手順
Alpine Linuxのダウンロード
まず、Alpine Linuxをダウンロードします。仮想マシンへインストールするのでVIRTUALのx86_64を選択します。STANDARDでも良いのですが、VIRTUALの方がコンパクトに出来ていて使用可能なメモリ量も増えます。逆に言うとVMを作る時にメモリを削れます。
インストールの方法については
Installation – Alpine Linux
補足(2025/02/26)
STANDARDとVIRTUALでメモリの使用量がどう変わるのか気になったので別記事を書こうと思います。前のバージョンまでVIRTUALが有る事を認識していなかったので、STANDARDを使っていたのですが30MB程度使用可能なメモリ量が変わります。メモリがカツカツな私には今後の選択としてVIRTUAL一択になりそうです。
仮想マシンの作成と設定
Hyper-Vの作成は以前投稿の記事を参考に作成してください。
- 名前 alpine
- 世代 第2世代
- RAM 320MB(固定)
- 接続 内部(私の環境ではintranetと名前を付けています)
- 仮想ハードディスク 1GB(可変)
- ブート ダウンロードしたAlpine Linuxのisoファイル
作成が終わったらHyper-Vマネージャーで「VMの名前(alpine)」を「右クリック」してコンテキストメニューを表示して「設定」をクリックするか「VMの名前(alpine)」を「左クリック」して「右サイドバー」から「設定」を開いて上記の注意点を変更に加えます。
- ファームウェア ブート順 1.DVD ドライブ 2.ハード ドライブ 3.ネットワーク アダプター
- セキュリティ セキュア ブート セキュアブートを無効にする チェックボックスをチェックアウト
- 他の設定はお任せします
仮想マシンの作成が終わったら起動させます。「VMの名前(alpine)」を「ダブルクリック」するか「右クリック」してコンテキストメニューを表示して「接続」をクリック、もしくは「VMの名前(alpine)」を「左クリック」して「右サイドバー」から「接続」をクリックします。仮想マシン接続ウィンドウが表示されたら画面中央の「起動」をクリックします。

Alpine Linuxのインストール
起動したら「root」と入力してログインします。
localhost login: root
ログインが出来たらインストールします。setup-alまで入力しTabキーを押すとインストールスクリプト名がTab補完され入力されます。入力ミスを恐れないなら「setup-alpine」と入力してしまっても大丈夫です。setup-alpineについて詳しく知りたい場合はリンクを確認してください。https://wiki.alpinelinux.org/wiki/Alpine_setup_scripts#setup-alpine
localhost:~# setup-alpine
ALPINE LINUX INSTALL と表示されKeymapの設定から始まります。「jp」と入力します。
Select keyboard layout: [none] jp
私は一般的な日本語用のPCキーボードを使っているので、Select variant (or ‘abort’):にも「jp」と入力します。
Select variant (or 'abort'): jp
キーマップの設定が終わったらホスト名を設定します。デフォルトでは括弧内の通り[localhost]となっていますので何も入力せずエンターを押すとデフォルトのホスト名になります。OpenWrtのサブネット内にあるでOpenWrtのドメインと同じ「lan」を使ってみたいと思います。「alpine.lan」
Enter system hostname (fully qualified form, e.g. 'foo.example.org') [localhost] alpine.lan
ホストネームの設定が終わったらネットワークインターフェースの設定をします。「eth0」が認識されデフォルトに設定されていますのでそのままエンターを押して設定を進めます。
Which one do you want to initialize? (or '?' or 'done') [eth0]
エンターを押したらIPアドレスの設定に移ります。デフォルトでは「dhcp」になっています。とりあえずインストールを早く終わらせたいのでこのままエンターを押し自動でIPアドレスを割り当て、インストール後に変更を加えたいと思います。
Ip address for eth0? (or 'dhcp', 'none', '?') [dhcp]
エンターを押すとマニュアルでネットワークの設定をするか聞かれますがNoを選択します。デフォルトで「n」となっていますので、再び何も入力せずエンターを押します。
Do you want to do any manual network configuration? (y/n) [n]
IPアドレスが割り当てられRoot Passwordの設定に移ります。適当なパスワードを入力してください。パスワードを入力せず進む事もできますがSSHでパスワードを使ったリモート接続ができなくなるので、入力した方が良いです。ただ、早とちりして入力をしなかった場合はインストール後にrootでログインして「passwd」とコマンドを打てば変更する事が可能です。二度パスワードを打ったらTimezoneの設定に移ります
デフォルトでは「UTC」となっています。表示されているリストに「Japan」とあるのですが古風な性格なので「Asia」と入力します。
Which timezone are you in? (or '?' or 'none') [UTC] Asia
Asiaと入力するとアジア地域のリストが表示されます。サブタイムゾールには「Tokyo」と入力します。
What sub-timezone of 'Asia' are you in? (or '?') Tokyo
サブタイムゾーンの設定を終えるとProxyの設定に移ります。特に設定する必要がない場合はデフォルトの「none」のまま何も入力せずエンターを押しスキップします。次にNetwork Time Protocolの設定に移ります。特段拘りが無ければデフォルトのまま「chrony」で問題ないと思うので何も入力せずエンターを押します。
NTPの設定が終わったら、パッケージマネージャのミラー先を設定します。接続先が近く、接続の早いミラー先を設定したいので、「f」と入力します。これには少し時間が掛かります。私の所からは「ftp.udx.icscoe.jp」が選ばれました。接続の結果を見ると0.01秒?でレスポンスが有ったようです。
Enter mirror number or Enter mirror number or URL: [1] f
ミラー先の設定が完了するとUserの設定に移ります。新規ユーザーを作らない場合はデフォルトが「no」となっていますので、そのままエンターを押しスキップします。必要が有ればユーザー名を小文字で入力し、その後フルネームを入力します。私はサーバーとして稼働させる予定なのでユーザーは作らずにエンターを押しスキップしました。スキップするとssh serverについて聞かれます。デフォルトでは「openssh」を使う設定になっています。使わない場合は「none」と入力してください。私は使いたいのでそのままエンターを押してます。
Setup a user? (enter a lower-case loginname, or 'no') [no]
Which ssh server? ('opnessh', 'dropbear' or 'none') [openssh]
エンターを押すとsshでrootのログインを許可するか聞かれます。デフォルトでは「prohibit-password」となっています。「?」を入力すると説明を見る事ができます。入力が可能なのは「yes」、「no」、「prohibit-password」のどれかになります。内容は
yes rootをパスワードかssh keyでのログインを許可
no sshでrootのログインを許可しない。(rootは許可されませんがユーザーアカウントでログインは可能です。noを選ぶ場合はユーザーを追加しましょう。)
prohibit-password rootをssh keyのみでログインを許可
Allow root ssh login? ('?' for help) [prohibit-password] ?
Valid options are:
yes root will be able to login with password or ssh key
no root will not be allowed to login wtih ssh
prohibit-password root will be able to login with ssh key but not with password
私はユーザーを追加していませんし、rootでSSHを使いたので「yes」か「prohibit-password」を選ぶ事になります。セキュリティ的にデフォルトの「prohibit-password」を選びたい所ですが、Windowsからの接続を考えると一旦「yes」を選びます。
Allow root ssh login? ('?' for help) [prohibit-password] yes
エンターを押すとssh keyについて聞かれます。既に参照すssh keyやURLが有る場合は入力をします。そうでない場合はデフォルトの「none」を選びます。私は参照するssh keyが無いので何も入力せずエンターを押します。そうすると、keyが生成されます。
Enter ssh key or URL for root (or 'none') [none]
* service sshd added to runlevel default
ssh-keygen: generating new host key: RSA ECDSA ED25519
* Starting sshd ...
SSHの設定を終えるとDisk &Installの設定が表示されます。VMの作成時に作った仮想ハードディスクが表示されていると思います。
Available disks are:
sda (1.1 GB Msft Virtual Disk )
Which disk(s) would you like to use? (or '?' for help or 'none') [none] sda
インストール先のディスク「sda」を入力するとディスクの使用方法を聞かれます。システムとして使うので「sys」と入力します。
How would you like to use it? ('sys', 'data', 'crypt', 'lvm' or '?' for help) [?] sys
「sys」と入力しエンターを押すとと選択したディスク内のデータを削除する旨の警告がでます。「y」を入力しエンターを押します。
WARNING: Erase the above disk(s) and continue? (y/n) [n] y
秒でインストールが終わるかと思います。インストールが完了してたら、リブートを求める表示がされます。画面上部のメニューから「操作」を選択して「シャットダウン」をクリックするか「赤色のボタン」をクリックして「シャットダウン」してください。

シャットダウンが完了したら「メディア」→「DVDドライブ」→「alpine-virt-3.21.3-x86_64.iso の取り出し」をクリックしてディスクの取り出しをします。完了したら「起動」ボタンをクリックします。

無事に起動するとエラーマークが有る事に気付くと思います。Keymapと時間の設定がうまく行っていないので修正します。
Keymapの設定は「setup-keymap」を入力します。その後インストール時と同じ様に「jp」を二度入力します。
alpine:~# setup-keymap
NTPの設定は「setup-ntp」を入力します。デフォルトの設定ままで良いので再びエンターを押します。
alpine:~# setup-ntp
もし他の設定をしたい場合は「setup-」と入力しTabキーを2回押します。候補が表示されると思うのでセットアップしたい設定のスクリプトを入力しましょう。セットアップスクリプトの内容はオフィシャルページで確認できます。例えばユーザーを追加したいとかネットワークの設定を変更したいとかセットアップスクリプトで簡単に設定できます。
セットアップスクリプトの詳細
Alpine setup scripts – Alpine Linux
では、一旦リブートしてエラー無く起動できるか確認しましょう。
エラー無く起動出来たら、SSHで接続してHyper-V用のゲストサービスのインストールを行います。
WindowsからSSH接続する
せっかくリモート接続出来るようにしているので、WindowsのPowerShellからSSH接続したいと思います。インストールまでの通りHyper-Vから仮想マシン接続ウィンドウを使って次のステップを処理する事も出来るのですが、日本語環境のせいなのかクリップボードを使ったペーストがうまく機能しない事があります。PowerShellからSSH接続した場合はペーストが無難に行えるので、次に行うHyper-V guest servicesのインストール作業をコピー&ペーストだけで済ませられるので楽かと思います。
「スタートボタン」を「右クリック」しコンテキストメニューを展開して「ターミナル」を選択しPowerShellを開きます。以下のコマンドを入力してエンターを押します。パスワードを求められるのでインストール時に設定したrootパスワードを入力するとVMに接続が完了します。
ssh root@alpine.lan
接続が完了したらPowerShellのプロンプトが「alpine:~#」になったかと思います。
Hyper-V guest servicesのインストール
オフィシャルの内容を参考にしています。
Hyper-V guest services – Alpine Linux
まずパッケージリストを更新します。ここからはコードをコピーして使い易いようにプロンプト部分の「alpine:~#」を外します。コードをコピーしたらPowerShell上で右クリックするとペーストされます。
apk update
更新したら、hvtoolsをインストールします。
apk add hvtools
インストールが完了したらサービスを起動します。コードをコピーして使う分には問題ないと思いますが、daemon名はアンダーバーで繋がっているので入力忘れに注意しましょう。私は目が余り良くないのでオフィシャルページのフォントが見づらくて、入力ミスを何度かしてしまいました。_ (アンダースコア)を忘れずに入力しましょう。
rc-service hv_fcopy_daemon start
rc-service hv_kvp_daemon start
rc-service hv_vss_daemon start
エラー無く起動出来る事を確認したら、起動時に開始されるようバックグランドプロセスに登録します。
rc-update add hv_fcopy_daemon
rc-update add hv_kvp_daemon
rc-update add hv_vss_daemon
さて、Hyper-V guest servicesをインストールした事で何が出来るように成ったかと言うと、Hyper-Vマネージャーの詳細に有る「ネットワーク」タブでIPアドレスがを確認できる様になります。

上の画像がhvtoolsインストール前で下がインストール後です。

SSHで接続されたままなので、PowerShellで「exit」と入力すればSSHから切断されます。必要が有れば切断して下さい。
Hyper-Vの仮想マシンへAlpine Linuxをインストールしてみました。思いのほか簡単だったと思います。次回は今回作成した仮想マシンをベースにサーバーを構築していきたいと思います。