PackerでQemuのUbuntuイメージを作る話

PackerとKVM(qemu)を使って、OSの自動インストールをします。 インストール対象はUbuntu 12.04.3 LTSを使いますので、自動化にはPreseedも使います。

PackerでQemuのUbuntuイメージを作る話

Packerのインストール

ダウンロードしてきて好きなところにぶちまけるだけの簡単なお仕事です。

Packer Downloads: http://www.packer.io/downloads

今回はLinuxを使うので、zipをダウンロードして適当な場所に置きます。
こんな感じですかね。

1
2
3
4
5
$ cd
$ mkdir vm
$ cd vm
$ wget https://dl.bintray.com/mitchellh/packer/0.5.2_linux_amd64.zip
$ unzip 0.5.2_linux_amd64.zip
  • unzip入ってなかったら apt-get install unzip しましょう…

自動インストール用のファイル作成

ubuntu1204_3_qemu.json 以外のファイルは PackerでVirtualBoxのUbuntuイメージを作る話 と同じ。

ubuntu1204_3_qemu.json

 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
{
    "variables": {
        "base_username": "yuki",
        "base_password": "yuki"
    },
    "builders":[
        {
            "type": "qemu",
            "output_directory": "ubuntu1204.3-qemu",
            "vm_name": "ubuntu1204.3",

            "iso_url": "ubuntu-12.04.3-server-amd64.iso",
            "iso_checksum_type": "md5",
            "iso_checksum": "2cbe868812a871242cdcdd8f2fd6feb9",

            "ssh_username": "{{user `base_username`}}",
            "ssh_password": "{{user `base_password`}}",
            "ssh_wait_timeout": "30m",
            "shutdown_command": "echo {{user `base_password`}} | sudo -S sh -c 'shutdown -P now'",
            "disk_size": 40960,
            "format": "qcow2",
            "accelerator": "kvm",
            "net_device": "virtio-net",
            "disk_interface": "virtio",

            "http_directory": "./",
            "boot_wait": "10s",
            "boot_command":[
                "<esc></esc><esc><enter><wait>",
                "/install/vmlinuz noapic ",
                "auto=true url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg ",
                "hostname={{ .Name }} ",
                "fb=false debconf/frontend=noninteractive ",
                "initrd=/install/initrd.gz -- ",
                "<enter><wait>"
            ]
        }
    ],
    "provisioners": [{
        "type": "shell",
        "execute_command": "echo {{user `base_password`}} | sudo -S bash '{{.Path}}'",
        "scripts": [
            "./disable_udev_persistent_net.sh",
            "./enable_serial_ttyS0.sh"
        ]
    }]
}

OSのインストールイメージの取得

適当なところからダウンロードしましょう。理研さんとかが良いですかね。:

$ cd packer-templates-master/ubuntu1204
$ wget http://ftp.riken.go.jp/Linux/ubuntu-iso/CDs/12.04.3/ubuntu-12.04.3-server-amd64.iso

で、packer-templatesの中のubuntu1204フォルダの中に置きます。これは単に僕の独自ルールです。

  • Packerはインストールイメージの検証を行うので、MD5SUMSまたはSHA1SUMSもダウンロードしておくと良いです。

フォルダ構造とファイル群

今回はこんな感じにしました:

1
2
3
4
5
6
+ vm
    - packer.exe
    + packer-templates-master
        + ubuntu1204
            - ubuntu-12.04.3-server-amd64.iso
            - ubuntu1204_3_qemu.json
  • ubuntu-12.04.3-server-amd64.iso : さっきダウンロードしてきたUbuntuのCDイメージ
  • ubuntu1204_3_qemu.json : Packerの構成ファイル

自動インストール

Linuxはコマンドの方が簡単なので、レッツpackerコマンドを叩きます。

1
$ ../../packer build ubuntu1204_3_qemu.json

うにょうにょインストールされていく。

はいできあがり。

で、こいつをlibvirtで使ってるディレクトリに放り込む。

あとは、virt-managerから既存イメージを指定して仮想マシンを作る。

普通に起動するとGUIも使えないから、ディスプレイをvgaにしておきたいので、起動前に仮想マシンの編集にチェック。

  • もちろん、デフォルトだとNATに繋がってるから、arp -nしてそれっぽく増えてるIPにsshすれば、別に問題にはならないね。

はい、出来上がり。お疲れ様でした。

Built with Hugo
テーマ StackJimmy によって設計されています。