Jak vytvořit Ubuntu image pro SmartOS

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 <

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 <

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:

$ vmadm create <"
    }
}
EOF
Successfully created VM a4e92d6b-a6e4-4a3f-a7f4-c7dad9371395

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

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *