Po nějaké době vás přestane bavit instalovat všechny nové VPS z ISO image. Nastal čas vytvořit si image pro imgadm. Jak na to?
Vytvoříme si prázdný VPS:
$ vmadm create <<EOF
{
"alias": "ubuntu-14-04-3",
"brand": "kvm",
"autoboot": false,
"vnc_port": 12300,
"vcpus": 1,
"ram": 1024,
"cpu_cap": 100,
"cpu_shares": 100,
"zfs_io_priority": 100,
"max_lwps": 2000,
"quota": 10,
"disks": [
{
"boot": true,
"model": "virtio",
"size": 10240
}
],
"resolvers": ["8.8.8.8", "8.8.4.4"],
"nics": [
{
"nic_tag": "admin",
"model": "virtio",
"ip": "x.x.x.x",
"netmask": "255.255.255.0",
"gateway": "y.y.y.y",
"primary": true
}
]
}
EOF
Successfully created VM e736e906-5cca-49e8-a0e0-7a3367ee6841
Stáhneme instalační ISO a nabootujeme z něj VPS:
$ cd /zones/e736e906-5cca-49e8-a0e0-7a3367ee6841/root
$ wget -q http://releases.ubuntu.com/trusty/ubuntu-14.04.2-server-amd64.iso
$ vmadm boot e736e906-5cca-49e8-a0e0-7a3367ee6841 order=cd,once=d cdrom=/ubuntu-14.04.3-server-amd64.iso,ide
Successfully started VM e736e906-5cca-49e8-a0e0-7a3367ee6841
Získáme info o VNC a připojíme se na něj:
$ vmadm info e736e906-5cca-49e8-a0e0-7a3367ee6841 vnc
Nyní nainstalujeme Ubuntu (nebo jiný OS) jak jsme zvyklí. U ubuntu ještě doporučuji pomocí F4 zvolit volbu „Install a minimal virtual machine“.
Po instalaci uděláme aktualizaci systému a reboot:
$ sudo su
$ aptitude update
$ aptitude dist-upgrade
$ reboot
Po rebootu odstraníme staré kernely:
$ sudo su
$ dpkg -l|grep linux
ii libselinux1:amd64 2.2.2-1ubuntu0.1 amd64 SELinux runtime shared libraries
ii linux-headers-3.19.0-25 3.19.0-25.26~14.04.1 all Header files related to Linux kernel version 3.19.0
ii linux-headers-3.19.0-25-generic 3.19.0-25.26~14.04.1 amd64 Linux kernel headers for version 3.19.0 on 64 bit x86 SMP
ii linux-headers-3.19.0-26 3.19.0-26.28~14.04.1 all Header files related to Linux kernel version 3.19.0
ii linux-headers-3.19.0-26-generic 3.19.0-26.28~14.04.1 amd64 Linux kernel headers for version 3.19.0 on 64 bit x86 SMP
ii linux-headers-generic-lts-vivid 3.19.0.26.13 amd64 Generic Linux kernel headers
ii linux-headers-virtual-lts-vivid 3.19.0.26.13 amd64 Transitional package.
ii linux-image-3.19.0-25-generic 3.19.0-25.26~14.04.1 amd64 Linux kernel image for version 3.19.0 on 64 bit x86 SMP
ii linux-image-3.19.0-26-generic 3.19.0-26.28~14.04.1 amd64 Linux kernel image for version 3.19.0 on 64 bit x86 SMP
ii linux-image-virtual-lts-vivid 3.19.0.26.13 amd64 This package will always depend on the latest minimal generic kernel image.
ii linux-virtual-lts-vivid 3.19.0.26.13 amd64 Minimal Generic Linux kernel and headers
ii util-linux 2.20.1-5.1ubuntu20.6 amd64 Miscellaneous system utilities
$ aptitude purge linux-headers-3.19.0-25 linux-headers-3.19.0-25-generic linux-image-3.19.0-25-generic
Volitelně také můžeme vyhodit hlavičkové soubory, které ve většině případů nejsou potřeba, ale aktualizují se zbytečně s každým kernelem:
$ aptitude purge linux-headers-3.19.0-26 linux-headers-3.19.0-26-generic linux-headers-generic-lts-vivid linux-headers-virtual-lts-vivid linux-image-virtual-lts-vivid linux-virtual-lts-vivid
Můžeme doinstalovat nějaké balíky. Rozhodně ale nesmíme vynechat balík acpid:
$ aptitude install acpid arping htop mc
Některé přebytečné balíky se hodí vyhodit:
$ aptitude purge usbutils pppoeconf pppconfig ppp popularity-contest pciutils ntfs-3g laptop-detect apparmor libapparmor-perl
Dále nainstalujeme sdc-vmtools:
$ cd /usr/src
$ wget https://github.com/joyent/sdc-vmtools/archive/master.zip
$ aptitude install unzip
$ unzip master.zip
$ cd sdc-vmtools-master/src/linux
$ ./install-tools.sh -y
$ cd /usr/src
$ rm -r sdc-vmtools-master/ master.zip
Přihlásíme se přes VNC a ostraníme uživatele, kterého jsme vytvořili při instalaci systému:
$ sudo su
$ passwd
# Relogin jako root
$ userdel user
$ rm -r /home/user
Připravíme VPS na vypnutí:
$ /lib/smartdc/prepare-image
Rootovi můžeme nyní odebrat heslo:
$ passwd -d root
Shodíme VPS a vratíme se do SmartOS:
poweroff
Vytvoříme z VPS image:
$ zfs create zones/images
$ zfs snapshot `vmadm get e736e906-5cca-49e8-a0e0-7a3367ee6841|json disks.0.zfs_filesystem`@final
$ zfs send `vmadm get e736e906-5cca-49e8-a0e0-7a3367ee6841|json disks.0.zfs_filesystem`@final | bzip2 --best > /zones/images/ubuntu-14.04.3-server-amd64.zvol.bz2
A VPS smažeme:
$ vmadm destroy e736e906-5cca-49e8-a0e0-7a3367ee6841
Successfully deleted VM e736e906-5cca-49e8-a0e0-7a3367ee6841
Pro image potřebujeme vytvořit dsmanifest:
cd /zones/images
cat > ubuntu-14.04.3-server-amd64.dsmanifest <<EOF
{
"uuid": "`uuid`",
"creator_name": "organizace",
"creator_uuid": "ef16d6fc-51a7-11e5-8793-67c0a6dc6ee3",
"vendor_uuid": "ef16d6fc-51a7-11e5-8793-67c0a6dc6ee3",
"name": "ubuntu64",
"version": "14.04.3",
"urn": "sdc:organizace:ubuntu64:14.04.3",
"type": "zvol",
"os": "linux",
"description": "Ubuntu 14.04.3 LTS Server x86-64 VM image",
"created_at": "2015-09-02T21:14:00Z",
"updated_at": "2015-09-02T21:14:00Z",
"files": [
{
"path": "ubuntu-14.04.3-server-amd64.zvol.bz2",
"sha1": "`shasum ubuntu-14.04.3-server-amd64.zvol.bz2|awk '{print $1}'`",
"size": `ls -l ubuntu-14.04.3-server-amd64.zvol.bz2|awk '{print $5}'`
}
],
"image_size": "10240",
"requirements": {
"networks": [
{
"name": "net0",
"description": "public"
}
],
"ssh_key": true
},
"platform_type": "smartos",
"cloud_name": "sdc",
"cpu_type": "host",
"disk_driver": "virtio",
"nic_driver": "virtio",
"generate_passwords": "true",
"users": [
{"name": "root"}
]
}
EOF
UUID pro creator_uuid a vendor_uuid si můžete vygenerovat příkazem uuid.
Máme image a dsmanifest, teď image můžeme nainstalovat:
imgadm install -m ubuntu-14.04.3-server-amd64.dsmanifest -f ubuntu-14.04.3-server-amd64.zvol.bz2
A teď z image konečně vytvoříme VPS:
Nemá smysl dávat disku větší size, než je size image. Disk se stejně vytvoří podle image. Prozatím to řeším pomocí GParted. Jakmile budu vědět, jak to zautomatizovat, napíšu o tom další článek. Nebo můžete někdo poradit v diskuzi pod článkem 🙂
Dodatek: dá se to řešit takto:
# V global zóně
$ zfs set volsize=54G zones/7dc89552-48fd-4fb7-9dfa-470ee47502b3-disk0
# Ve VPS
$ fdisk /dev/vda
Command (m for help): d
Selected partition 1
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-113246207, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-113246207, default 113246207):
Using default value 113246207
# Reboot
$ resize2fs /dev/vda1
# Reboot