Skip to content

Creating Ubuntu Core 16 image

Dmitry Shihovtsev edited this page Mar 25, 2017 · 4 revisions

Process of creating default image well described in following Ubuntu documentation:
https://docs.ubuntu.com/core/en/guides/build-device/image-building

For creating image you need to process following steps:

  1. Register the user in the Ubuntu Store;

  2. Create a key:

snap create-key
  1. Upload the key to the store:
snapcraft register-key
  1. Create a model assertion:
{
  "type": "model",
  "authority-id": "DVLlpuMhAbyjH9GCiEGYWqrEwhvdyW5i",
  "brand-id": "DVLlpuMhAbyjH9GCiEGYWqrEwhvdyW5i",
  "series": "16",
  "model": "subutai",
  "architecture": "amd64",
  "gadget": "pc",
  "kernel": "pc-kernel",
  "timestamp": "2016-12-12T04:58:25+00:00"
}
  1. Sign your model assertion:
cat subutai-model.json | snap sign -k default &> subutai.model
  1. Build the image:
ubuntu-image -o subutai.img subutai.model --image-size 10G
  1. Then we need to edit image to add cloud-init config:
# fdisk -l subutai.img
Disk subutai.img: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 433CABD8-E2C5-4E3F-8050-C299138758B7

Device        Start      End  Sectors Size Type
subutai.img1   2048     4095     2048   1M BIOS boot
subutai.img2   4096   106495   102400  50M EFI System
subutai.img3 106496 20969471 20862976  10G Linux filesystem
mount -o loop,offset=54525952 subutai.img /mnt/
rm /mnt/system-data/etc/cloud/cloud-init.disabled

Add new file /mnt/system-data/etc/cloud/cloud.cfg:

# The top level settings are used as module
# and system configuration.

# A set of users which may be applied and/or used by various modules
# when a 'default' entry is found it will reference the 'default_user'
# from the distro configuration specified below
users:
   - default

# If this is set, 'root' will not be able to ssh in and they 
# will get a message to login instead as the above $user (ubuntu)
disable_root: true

# This will cause the set+update hostname module to not operate (if true)
preserve_hostname: false

datasource_list: [ None ]
# Example datasource config
# datasource: 
#    Ec2: 
#      metadata_urls: [ 'blah.com' ]
#      timeout: 5 # (defaults to 50 seconds)
#      max_wait: 10 # (defaults to 120 seconds)

# The modules that run in the 'init' stage
cloud_init_modules:
 - migrator
 - ubuntu-init-switch
 - seed_random
 - bootcmd
 - write-files
 - growpart
 - resizefs
 - set_hostname
 - update_hostname
 - update_etc_hosts
 - ca-certs
 - rsyslog
 - users-groups
 - ssh

# The modules that run in the 'config' stage
cloud_config_modules:
# Emit the cloud config ready event
# this can be used by upstart jobs for 'start on cloud-config'.
 - emit_upstart
 - disk_setup
 - mounts
 - ssh-import-id
 - locale
 - set-passwords
 - snappy
 - grub-dpkg
 - apt-pipelining
 - apt-configure
 - package-update-upgrade-install
 - landscape
 - timezone
 - puppet
 - chef
 - salt-minion
 - mcollective
 - disable-ec2-metadata
 - runcmd
 - byobu

# The modules that run in the 'final' stage
cloud_final_modules:
 - rightscale_userdata
 - scripts-vendor
 - scripts-per-once
 - scripts-per-boot
 - scripts-per-instance
 - scripts-user
 - ssh-authkey-fingerprints
 - keys-to-console
 - phone-home
 - final-message
 - power-state-change

# System and/or distro specific settings
# (not accessible to handlers/transforms)
system_info:
   # This will affect which distro class gets used
   distro: ubuntu
   # Default user name + that default users groups (if added/used)
   default_user:
     name: subutai
     lock_passwd: false
     plain_text_passwd: 'ubuntai' 
     gecos: Ubuntu
     groups: [adm, audio, cdrom, dialout, dip, floppy, netdev, plugdev, sudo, video]
     sudo: ["ALL=(ALL) NOPASSWD:ALL"]
     shell: /bin/bash
   # Other config here will be given to the distro class and/or path classes
   paths:
      cloud_dir: /var/lib/cloud/
      templates_dir: /etc/cloud/templates/
      upstart_dir: /etc/init/
   ssh_svcname: ssh

runcmd:
 - /sbin/resize2fs /dev/sda3

  1. Create file which will prevent starting configuration menu:
touch /mnt/system-data/var/lib/console-conf/complete
  1. Unmount image:
umount /mnt
  1. Convert image to vmdk file to use in VirtualBox:
qemu-img convert -f raw -O vmdk subutai.img subutai.vmdk
Clone this wiki locally