Which ISO format/layout does virt-builder expect?
I'm running into a bit of trouble using virt-builder and I'm hoping that someone might be able to point in the right direction. My build process creates a custom ISO image which is subsequently used to kickstart an Oracle X4-2 server using PXE. The ISO is a minimal install and contains a suite of packages and customization scripts to properly configure our box during first boot. The process works great for kickstarting baremetal machines as well as VMs created with virt-manager or vsphere. I'd like to be able to use virt-builder to build virtual images automatically (i.e., take our .ISO and generate a qcow2 of a properly installed system). Unfortunately, virt-builder doesn't seem to like the format of my ISO image. The tool dies during the "Setting passwords" step because it's attempting to create a temp file in /etc and my ISO doesn't have an /etc directory at this point. Here's a snippet that shows the error message: [ 16.0] Setting passwords libguestfs: trace: mktemp "/etc/shadow.guestfsXXXXXX" libguestfs: trace: mktemp = NULL (error) virt-builder: error: libguestfs error: mktemp: /etc/shadow.guestfsyU5Zwo: No such file or directory Is there a particular ISO format that virt-builder expects? As a test, I used virt-builder to successfully create a centos-6 image. I looked in my .cache/virt-builder directory, unxz'd the image and then mounted the partitions. It appears that the sanitized centos-6 image is fully complete (i.e., contains a typical filesystem, has an /etc, an /etc/passwd...etc.) whereas mine seems more like a linux image that is in a ready-to-be-installed state. virt-inspector on my ISO shows: <?xml version="1.0"?> <operatingsystems> <operatingsystem> <root>/dev/sda</root> <name>linux</name> <arch>x86_64</arch> <distro>oraclelinux</distro> <major_version>6</major_version> <minor_version>0</minor_version> <package_format>rpm</package_format> <package_management>yum</package_management> <format>installer</format> <mountpoints> <mountpoint dev="/dev/sda">/</mountpoint> </mountpoints> <filesystems> <filesystem dev="/dev/sda"> <type>iso9660</type> <label>iDVA 4.95.0 x86_64</label> <uuid>2015-11-20-19-50-52-00</uuid> </filesystem> </filesystems> <applications/> </operatingsystem> </operatingsystems> Likewise, if I mount my ISO I have a filesystem that looks like: drwxrwxr-x 3 test test 4096 Nov 19 18:03 images drwxrwxr-x 11 test test 4096 Nov 19 18:05 iqcustom -rw-rw-r-- 1 test test 966785078 Nov 19 18:08 iqcustom.tar.gz drwxrwxr-x 2 test test 4096 Nov 19 18:03 isolinux -rw-rw-r-- 1 test test 2368 Nov 19 18:03 ks-dell.cfg -rw-rw-r-- 1 test test 15158 Nov 19 18:03 ks-oracle.cfg -rw-rw-r-- 1 test test 15985 Nov 19 18:03 ks-pxe.cfg -rw-rw-r-- 1 test test 3061 Nov 19 18:03 ks-pxe-oracle-vm.cfg -rw-rw-r-- 1 test test 2176 Nov 19 18:03 ks-vm.cfg drwxrwxr-x 2 test test 36864 Nov 19 18:04 Packages drwxrwxr-x 2 test test 4096 Nov 19 18:04 repodata -r--r--r-- 1 test test 3106 Nov 19 18:05 TRANS.TBL drwxrwxr-x 3 test test 4096 Nov 19 18:05 In contrast, mounting one of the partitions in the centos-6 image shows: dr-xr-xr-x. 2 root root 4096 Oct 31 2014 bin drwxr-xr-x. 2 root root 4096 Oct 31 2014 boot drwxr-xr-x. 2 root root 4096 Oct 31 2014 dev drwxr-xr-x. 73 root root 4096 Dec 9 16:26 etc drwxr-xr-x. 2 root root 4096 Sep 23 2011 home dr-xr-xr-x. 10 root root 4096 Oct 31 2014 lib dr-xr-xr-x. 9 root root 12288 Oct 31 2014 lib64 drwx------. 2 root root 16384 Oct 31 2014 lost+found drwxr-xr-x. 2 root root 4096 Sep 23 2011 media drwxr-xr-x. 2 root root 4096 Sep 23 2011 mnt drwxr-xr-x. 3 root root 4096 Oct 31 2014 opt drwxr-xr-x. 2 root root 4096 Oct 31 2014 proc dr-xr-x---. 2 root root 4096 Oct 31 2014 root dr-xr-xr-x. 2 root root 12288 Oct 31 2014 sbin drwxr-xr-x. 2 root root 4096 Oct 31 2014 selinux drwxr-xr-x. 2 root root 4096 Sep 23 2011 srv drwxr-xr-x. 2 root root 4096 Oct 31 2014 sys drwxrwxrwt. 2 root root 4096 Oct 31 2014 tmp drwxr-xr-x. 13 root root 4096 Oct 31 2014 usr drwxr-xr-x. 19 root root 4096 Oct 31 2014 var Note: we build our ISO using mkisofs. Is there some other tool/process that we should use to generate ISOs that satisfy virt-builder? Should I be starting from a Live CD format? Cheers! ________________________________ NOTICE: This communication and any attachments may contain confidential and/or privileged information of IneoQuest Technologies, Inc. ("IneoQuest"). This communication is intended solely for the use of the individual or entity to which it is addressed. If you are not the intended recipient of this communication, you are hereby notified that any dissemination, distribution, copying or other use of this communication or the information it contains is strictly prohibited and may be unlawful. If you have received this communication in error, please notify the sender immediately by reply e-mail and destroy all copies of this communication (including attachments), electronic or otherwise. If you are a party to a written Non-Disclosure Agreement ("NDA") with IneoQuest, you should maintain the contents of this communication (including attachments) in confidence to the full extent specified in the NDA.
On Thu, Dec 10, 2015 at 07:53:55PM +0000, Scott Gorton wrote:
My build process creates a custom ISO image which is subsequently used to kickstart an Oracle X4-2 server using PXE. The ISO is a minimal install and contains a suite of packages and customization scripts to properly configure our box during first boot. The process works great for kickstarting baremetal machines as well as VMs created with virt-manager or vsphere.
I'd like to be able to use virt-builder to build virtual images automatically (i.e., take our .ISO and generate a qcow2 of a properly installed system). Unfortunately, virt-builder doesn't seem to like the format of my ISO image. The tool dies during the "Setting passwords" step because it's attempting to create a temp file in /etc and my ISO doesn't have an /etc directory at this point.
ISOs are not modifiable by the Linux kernel :-( So none of the tools like guestfish, virt-customize etc etc can work on them. It doesn't matter what options you use, the problem is in the Linux ISO driver (and possibly the ISO format -- I've no idea if it's plausible to write a driver than can modify ISO). For virt-p2v, we also need an ISO and a PXE image, and I would dearly like to use virt-builder to create it. I tried looking into ways to build one using virt-builder, but it's a much harder problem than it appears. In summary, if you find a way, please let us know :-( The virt-p2v scripts we have so far are: https://github.com/libguestfs/libguestfs/blob/master/p2v/virt-p2v-make-disk.... (documentation: http://libguestfs.org/virt-p2v-make-disk.1.html) https://github.com/libguestfs/libguestfs/blob/master/p2v/virt-p2v-make-kicks... (documentation: http://libguestfs.org/virt-p2v-make-kickstart.1.html) Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-builder quickly builds VMs from scratch http://libguestfs.org/virt-builder.1.html
participants (2)
-
Richard W.M. Jones -
Scott Gorton