0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

第2回 10分で自分専用クラウドを作る ― プライベートクラウド「Marmot」を体験してみよう

0
Last updated at Posted at 2026-07-28

前回の記事では、私が プライベートクラウド「Marmot」 を開発することになった経緯をご紹介しました。

今回は、Marmot をインストールして、仮想サーバーを作成し、SSHでログインするまで を紹介します。

Marmotが目指しているのは、

「YAMLファイル1本で、自分専用のクラウド環境で、数分でVMや仮想ネットワークを構築できること」

です。

クラウド環境の構築というと、複雑なGUI操作や多数の設定項目を思い浮かべる方も多いでしょう。

Marmotでは、それらをできるだけシンプルにして、

  • 学習
  • テスト
  • 検証
  • Kubernetesの実験
  • OSSの開発

などをすぐ始められる環境を提供することを目標にしています。事実、Marmot自身も、Marmot上でビルドして、Marmot上の GitHub「Self Hosted Runner」でテストを実施しています。


Marmotとは?

Marmotは、Linuxの標準的な仮想化技術を利用した プライベート・クラウド です。

image.png

第1回目で挙げた特徴に加えて、以下の便利な点を兼ね備えています。

  • Ubuntu 24.04のPCを、「プライベート・クラウド」として利用できます
  • 2台、3台と増設して、「Marmotクラスタ」として利用できます
  • marmotのPCを専用機化する必要はありません。デスクトップと併用も可能
  • CPUとメモリの搭載量を超えて割当も可能。(もちろん、CPU実装数以上の性能はでません)

インストール

インストールが完了したUbuntu 24.04で、以下のコマンドを実行するだけです。 詳細な条件は、READMEをご覧ください。

cd /tmp
apt-get update
VERSION=0.28.0
curl -OL https://github.com/takara9/marmot/releases/download/v${VERSION}/marmot_v${VERSION}_amd64.deb
sudo apt install -y ./marmot_v${VERSION}_amd64.deb

その他推奨事項

  • Ubuntu 24.04 server または、 desktop のどちらでも可
  • Ubuntuの最小インストールで稼働(ちょっと不便ですが)
  • ネットワークの設定は、DHCPではなくマニュアル設定(外部からMarmotへアクセスできる様にIPアドレスが固定を推奨)

インストール完了後の確認

mactl version コマンドで、Server のバージョンが表示されれば、「mactlコマンド」と 「marmotデーモン」と通信できている証拠になります。

$ mactl version
Server version = 0.28.0
Client version = 0.28.0

次に管理者権限の「admin」でログインして、VMのマシンイメージのダウンロードが完了していることを確認します。
初期パスワードは、「passw0rd」なので、ご自身のパスワードに変更する事をお勧めします。

# mactl login admin
Password: 
Successfully logged in as admin

marmotのインストールが完了すると、自動的に Ubuntu バージョン 24.04 のクラウドイメージをダウンロードして、Marmot用のマシンイメージを作り登録します。ネットワークの状態により時間の変動があると思います。(参考にまでに、筆者の住んでいる千葉県印西市では、マシンイメージが使用可能になるまで2分くらいでした)

マシンイメージのリストは、mactl get images で表示する事ができます。STATUSが、AVAILABLEになっていれば、Ubuntu 24.04 のマシンイメージが利用できます。

# mactl get image
NAME            STATUS     SYNCED    LV     QCOW2  AGE
----            ------     ------    ------  -----  ---
ubuntu24.04     AVAILABLE  N/A       no      yes    1m

次にネットワークを確認しておきます。mactl get network を実行して得られるネットワークのリストは、仮想マシンが接続できるネットワークです。以下に表示される2つのネットワークが自動作成されているはずです。

$ mactl get network
NAME            NODE       BRIDGE        STATUS        AGE       IP-NET        
----            ---------  -----------   ----------    ---       --------------
host-bridge     hv1        br0           ACTIVE        2m        -             
default         hv1        virbr0        ACTIVE        2m        -             

「default」ネットワークは、Marmotサーバー(Marmotが動作するPC)上に閉じた「仮想ネットワーク」で、IPアドレスなどは自動的に付与されます。このネットワークに接続したVMは、外のPCなどに疎通できますが、逆はできません。

「host-bridge」は、MarmotをインストールしたPCが接続されたネットワークに接続します。そのため、IPアドレスが、既存の他IPアドレスと、重複するなどのリスクがありますので、VMを作成する管理者は、IPアドレスを管理する必要があります。

専用の仮想ネットワークを作成することもできますが、それは、別の投稿で取り上げたいと思います。

mactlのインストール

mactlコマンドは、marmotの仮想サーバーや仮想ネットワークを操作するためのコマンドです。前述の.debパッケージで mactlコマンドもインストールされます。

手元のMacやWindows PC からリモート操作したい場合は、GitHub の marmot releasesから、ビルド済みmactlの実行形式をダウンロードできます。


仮想マシンの起動 ① default ネットに接続

"default" ネットワークに接続する仮想サーバーを起動してみます。

image.png

この仮想サーバーは、図の様に外部のLANから「default network」へは制限されているので、ssh でログインすることができません。

代わりに、mactl console SERVER-NAMEで接続する仮想シリアルコンソールからログインすることができます。

server-1.yaml
apiVersion: v1
kind: Server
metadata:
    name: server-1
    comment: default networkに繋がるVM
spec:
    cpu: 1
    memory: 1024
    mmImage: ubuntu24.04
    networkInterface:
        - networkname: default

このYAMLファイルを指定して mactl create -f MANIFEST を実行します。この辺りは、Kuberneteskubectl コマンドと類似の仕様になっています。

$ mactl create -f server-1.yaml

要求が受け入れられると、10秒くらいで仮想サーバーが起動します。

仮想サーバーの状態は、mactl get servers または、 mactl get -f server-1.yaml で確認ができます。

$ mactl get -f server-1.yaml
NAME             NODE          STATUS        CPU  RAM(MB)  IP-ADDRESS       NETWORK          AGE
----             ----          ------        ---  -------  ----------       -------          ---
server-1         ubuntu        RUNNING       1    1024     N/A              default          8s

コマンドの実行から 数秒〜十数秒くらいで、仮想サーバーが起動します。

ただし、この時点で仮想サーバーのOSが起動している訳ではないので、ログインはできません。

OSが起動する過程を覗いてみるには、mactl console SERVER-NAME を実行します。

$ mactl console server-1
[  OK  ] Finished systemd-networkd-wait-onl… Wait for Network to be Configured.
         Starting cloud-init.service - Cloud-init: Network Stage...
[   10.385224] cloud-init[634]: Cloud-init v. 26.1-0ubuntu1~24.04.1 running 'init' at Tue, 28 Jul 2026 09:42:21 +0000. Up 10.37 seconds.
[   10.409619] cloud-init[634]: ci-info: +++++++++++++++++++++++++++++++++++++++Net device info+++++++++++++++++++++++++++++++++++++++
[   10.416228] cloud-init[634]: ci-info: +--------+------+------------------------------+---------------+--------+-------------------+
[   10.422151] cloud-init[634]: ci-info: | Device |  Up  |           Address            |      Mask     | Scope  |     Hw-Address    |

<中略>

[  OK  ] Finished cloud-final.service - Cloud-init: Final Stage.
[  OK  ] Reached target cloud-init.target - Cloud-init target.

Ubuntu 24.04.4 LTS server-1 ttyS0

server-1 login:  

ログインするには、ユーザー「root」、パスワード「ubuntu」でログインできます。

これは直ちに侵入される危険は少ないですが、セキュリティ上好ましく無いので、GitHub の Issue#358 に挙げて改善を計画しています。

ここまで10分という気持ちですが、如何でしたでしょうか?

「ネットから繋がなければクラウドの仮想サーバーでは無い」と言われると思うので、ssh で接続できる仮想サーバーの起動方法について、続けていきます。

仮想マシンの起動 ② host-bridge ネットに接続

PCが接続されているネットワークに繋がる仮想サーバーを起動します。

image.png

ここで起動する仮想サーバーは、家庭内やオフィスのLANに繋がるので、少しセキュリティが強化される形で、起動されます。

Marmotデーモンの設定(初回のみ)

仮想サーバーのIPアドレスは、marmotのデーモン marmotd が管理しています。

これはDHCPのような管理と異なり、仮想マシンのイメージを作る際に、IPアドレス範囲からIPアドレスを引き当てます。そのため、marmotdが使えるネットワークアドレスとその範囲、ゲートウェイアドレス、DNS名などを marmotd に与える必要があります。

それらの情報を登録するのが、/etc/marmot/marmotd.json です。

ホームネットワークであれば、インターネットルーターが管理するIPアドレス範囲の一部をセットすると良いでしょう。DHCPで払い出されるIPアドレス範囲の外側を利用できることが望ましいですね。

host-bridgeから始まる部分を追加します。

/etc/marmot/marmotd.json(抜粋)
<前略>
      "osName": "ubuntu",
      "osVersion": "24.04"
    }
  ],
  "loki_push_url": "http://192.168.1.9:3100/loki/api/v1/push",
  "host-bridge-ip-net-addr": "192.168.1.0/24",
  "host-bridge-ip-addr-start": "192.168.1.190",
  "host-bridge-ip-addr-end":  "192.168.1.194",
  "host-bridge-default" :  {
      "netmasklen": 24,
      "nameservers": {
        "addresses": [
          "8.8.8.8"
        ],
        "search": [
          "labo.local"
        ]
      },
      "routes": [
        {
          "to": "default",
          "via": "192.168.1.1"
        }
      ]
    }
}

SSH鍵ペアの作成

sshでログインするためSSH鍵ペアを生成して、公開鍵を仮想サーバー起動過程でセットするようにします。

同時に作成される秘密鍵は、ホームディレクトリの下 ".ssh" に保存されます。

$ ssh-keygen -t ed25519 -C "For marmot VMs" -N ""
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/ubuntu/.ssh/id_ed25519): 
Your identification has been saved in /home/ubuntu/.ssh/id_ed25519
Your public key has been saved in /home/ubuntu/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:5vPPjisXmqwJLTHdDm4wM3Yu4+/sweZSEDWW3gEo+/U For marmot VMs
The key's randomart image is:
+--[ED25519 256]--+
|     o=o         |
|  . o....        |
|   o o . .       |
|  . ..o..        |
|   .Oo+.S        |
|   ..&.=E .      |
|    =.O.+o .     |
|   ..X o=o.o     |
|    .=O. o+++    |
+----[SHA256]-----+

公開鍵は、~/.ssh/id_ed25519.pub に作成されるので、仮想マシン起動用のYAMLファイルに添付して、秘密鍵を使ってログインできるようにします。

公開鍵の確認

$ cat .ssh/id_ed25519.pub 
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINauzBQmr0b3e30zNpXhcBmOSg+PvDJkyM5NxILntVJV For marmot VMs

仮想マシンのマニフェスト

次は host-bridge に繋がって起動する仮想サーバーのマニフェストです。

家庭内やオフィスのLANに繋がることになるので、こちらは SSH鍵が無いとログインできないように、前述で作成した公開鍵を仮想マシンにセットして、ターミナル側に保存した秘密鍵でログインできるようにします。

server-2.yaml
apiVersion: v1
kind: Server
metadata:
    name: server-2
    comment: PC-LANに繋がるVM
spec:
    cpu: 1
    memory: 1024
    mmImage: ubuntu24.04
    auth:
        publicKey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINauzBQmr0b3e30zNpXhcBmOSg+PvDJkyM5NxILntVJV For marmot VMs"
        users:
         - ubuntu     
    networkInterface:
        - networkname: host-bridge

上記のマニフェストを適用して、結果を確認します。

$ mactl create -f server-2.yaml 
$ mactl get -f server-2.yaml 
NAME             NODE          STATUS        CPU  RAM(MB)  IP-ADDRESS       NETWORK          AGE
----             ----          ------        ---  -------  ----------       -------          ---
server-2         ubuntu        RUNNING       1    1024     10.10.0.100      host-bridge      7s

前述同様に、数秒〜数十秒くらいで、RUNNING状態になるのでが、OS起動には少し時間を要します。

OSが起動したところで、ログインします。ログインは、ssh IP-ADDR | DNS-NAME で実施できます。

DNS名が判らない時、IPアドレスを覚えるのが面倒な時は、mactl ssh SERVER-NAME でサーバー名でログインできます。以下がその例です。

$ mactl ssh server-2
The authenticity of host \'10.10.0.100 (10.10.0.100)\' can\'t be established.
ED25519 key fingerprint is SHA256:Fp85jcVMhkTZXrVnMCRp9m9yPjNXO6EmppD/yn6BUCM.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added \'10.10.0.100\' (ED25519) to the list of known hosts.
Welcome to Ubuntu 24.04.4 LTS (GNU/Linux 6.8.0-136-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com

<中略>

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

ubuntu@server-2:~$ 

VMを削除する

不要になった環境は、すぐ削除できます。

mactl delete server SERVER-NAME

検証環境を気軽に作って、使い終わったらすぐ消せる。

これもMarmotが大切にしている考え方です。


コントリビューター募集中!

Marmotは現在も開発を続けているOSSです。

Go、KVM、Libvirt、OpenAPI、Linux仮想化技術に興味のある方は、ぜひ一緒に開発していただけるとうれしいです。

コードだけでなく、

  • 使用体験ブログ
  • バグ報告
  • ドキュメント改善
  • サンプル追加
  • 動作確認

といった貢献も大歓迎です。

GitHubのIssueやPull Requestをお待ちしています。

GitHub Repository https://github.com/takara9/marmot


次回予告

次回は、

「なぜMarmotはYAMLを採用したのか」

というテーマで、GUI中心の運用との違いや、Gitによる構成管理との親和性について紹介したいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?