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