# vagrantで大量の軽量Linux(Alpine Linux)を一括作成

2018/01/13

検証用に大量の仮想マシンが必要になったので、軽量LinuxであるAlpine Linuxをvagrantで一気に30台作成しました。手順をメモします。

Alpine Linuxは軽量Linuxディストリビューションの一つで、よくDockerのゲストコンテナ用に利用されます。このディストリ独自のパッケージ管理システムであるapkがdockerのコンフィグであるdockerfileの書き方と相性が良いためです。ちなみにマストドンのコンテナもAlpineで作成されていました。

# ホストマシン環境

  • CPU:Intel Corei5-6500 3.20GHz 4Core
  • メモリ:8GB
  • OS:Windows10 home 1709
  • VirtualBox:5.1.30
  • Vagrant:1.9.7

# 作業用ディレクトリ作成

Powershellで。ディレクトリ名は適当に。

C:\Users\serotonin\VagrantFiles> mkdir alpine_30
C:\Users\serotonin\VagrantFiles> cd alpine_30
1
2

# Alpine Linuxをvagrantで扱う用のvagrantプラグイン追加

Alpine Linuxのネットワーク構成やホスト名の変更、ディスクのマウントなどをvagrantから行うためのプラグインを追加します。なんでAlpine Linux用のVagrantプラグインがあるのかというと、Alpine Linuxはもともと組み込み系のbusyboxをもとにしたOSであり、シェルがbashでなくてashだったり、/binや/sbinも/bin/busyboxへのシンボリックリンクだったりして、通常のLinuxへの操作とだいぶ異なるからだと思います(要出典)。

C:\Users\serotonin\VagrantFiles\alpine_30> vagrant plugin install vagrant-alpine
1

# vagrant boxダウンロード & Vagrantfile生成

C:\Users\serotonin\VagrantFiles\alpine_30> vagrant box add maier/alpine-3.1.3-x86_64
C:\Users\serotonin\VagrantFiles\alpine_30> vagrant init maier/alpine-3.1.3-x86_64
1
2

# Powershellでvagrantfile~~(の元ネタ)~~作成

以下の内容でcreate30alpine.ps1を作成してPowershellで実行。私のホストマシンのメモリは8GBしかないため、仮想マシンのメモリを128MBで作成することで30台動かせるようにします。128MB×30台で4GB弱。またホストの負荷軽減のために仮想マシンのGUIは非表示にします。

210180715 Powershellスクリプトを改善し、吐き出されたファイルをそのままvagrantfileに使えるようにしました。

$Header = @"
Vagrant.configure("2") do |config|

  config.vm.provider "virtualbox" do |vb|
    vb.gui = false
    vb.memory = "128"
  end

  config.vm.box = "maier/alpine-3.1.3-x86_64"
  config.vm.synced_folder ".", "/vagrant", disabled: true

"@

for ($i=1; $i -lt 31; $i++){
$fourthoctet=200 + ${i}
$Body += @"
  config.vm.define "vm${i}" do |vm${i}|
    vm${i}.vm.host_name = "alpinevm${i}"
    vm${i}.vm.network "public_network",
      ip: "192.168.100.${fourthocte}",
      netmask: "255.255.255.0"
end

"@
}

$END = "end"

Add-Content -path .\vagrantfile -value ( $Header + $Body + $END ) -encoding String
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

# Vagrantfile編集

出てきたtest.txtの内容をVagrantfileに貼り付けて、文字コードをSJIS、改行コードをLFに整える。これのせいで直接PoweshellからVagrantfileを作成できませんでした。ここもっと簡単にできないかな。

# ゲストマシン生成

C:\Users\serotonin\VagrantFiles\alpine_30> vagrant up
1

おわり。

# 所感

  • ホストマシンのメモリ増やしたい
  • Powershellと文字コードの関係を勉強したい
  • VirutlBoxじゃなくてWindows10 homeネイティブでDocker扱う環境整えたい

# 20191209追記

PowerShellで頑張らなくても普通にRubyで書けば良くね?

Vagrant.configure("2") do |config|

  config.vm.provider "virtualbox" do |vb|
    vb.gui = false
    vb.memory = "128"
    vb.cpus = 1
  end

  config.vm.box = "maier/alpine-3.1.3-x86_64"
  config.vm.synced_folder ".", "/vagrant", disabled: true

  1.upto(30) do |i|
     config.vm.define "vm#{i}" do |v|
      v.vm.host_name = "alpinevm#{i}"
      v.vm.network "public_network",
        ip: "192.168.100.#{i + 50}",
        netmask: "255.255.255.0"
    end
  end
end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 参考