This adds the --make-tar option which will produce a xz compressed tar of the root filesystem. This works with either virt-install or no-virt modes. Use --image-name to set the output filename. --compression is used to set the compression type to use, which defaults to xz. Supported types are xz, lzma, gzip and bzip2. --compress-arg is used to pass arguments to the compression utility.
		
			
				
	
	
		
			291 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			291 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | |
| INTRO
 | |
| -----
 | |
| livemedia-creator uses Anaconda, kickstart and Lorax to create bootable media
 | |
| that use the same install path as a normal system install. It can be used to
 | |
| make live isos, bootable (partitioned) disk images and filesystem images for
 | |
| use with virtualization.
 | |
| 
 | |
| The general idea is to use virt-install to install into a disk image and then
 | |
| use the disk image to create the bootable media.
 | |
| 
 | |
| livemedia-creator --help will describe all of the options available. At the
 | |
| minimum you need:
 | |
| 
 | |
| --make-iso to create a final bootable .iso
 | |
| --iso to specify the Anaconda install media to use with virt-install
 | |
| --ks is the kickstart to use to install the system
 | |
| 
 | |
| To use livemedia-creator with virt-install you will need to install the
 | |
| following packages, as well as have libvirtd setup correctly.
 | |
|   virt-install
 | |
|   libvirt-python
 | |
| 
 | |
| If you are going to be using Anaconda directly, with --no-virt mode, make sure
 | |
| you have the anaconda package installed.
 | |
| 
 | |
| 
 | |
| QUICKSTART
 | |
| ----------
 | |
| sudo livemedia-creator --make-iso \
 | |
| --iso=/extra/iso/Fedora-18-x86_64-netinst.iso --ks=./docs/fedora-livemedia.ks
 | |
| 
 | |
| If you are using the lorax git repo you can run it like so:
 | |
| 
 | |
| sudo PATH=./src/sbin/:$PATH PYTHONPATH=./src/ ./src/sbin/livemedia-creator \
 | |
| --make-iso --iso=/extra/iso/Fedora-18-x86_64-netinst.iso \
 | |
| --ks=./docs/fedora-livemedia.ks --lorax-templates=./share/
 | |
| 
 | |
| If you want to watch the install you can pass '--vnc vnc' and use a vnc
 | |
| client to connect to localhost:0
 | |
| 
 | |
| This is usually a good idea when testing changes to the kickstart. It tries
 | |
| to monitor the logs for fatal errors, but may not catch everything.
 | |
| 
 | |
| 
 | |
| HOW IT WORKS
 | |
| ------------
 | |
| There are 2 stages, the install stage which produces a disk or filesystem
 | |
| image as its output, and the boot media creation which uses the image as
 | |
| its input. Normally you would have it run both stages, but it is possible
 | |
| to have it stop after the install stage, using --image-only, or to have it
 | |
| skip the install stage and use a previously created disk image by passing
 | |
| --disk-image or --fs-image
 | |
| 
 | |
| When creating an iso virt-install boots using the passed Anaconda installer iso
 | |
| and installs the system based on the kickstart. The %post section of the
 | |
| kickstart is used to customize the installed system in the same way that
 | |
| current spin-kickstarts do.
 | |
| 
 | |
| livemedia-creator monitors the install process for problems by watching the
 | |
| install logs. They are written to the current directory or to the base
 | |
| directory specified by the --logfile command. You can also monitor the install
 | |
| by passing --vnc vnc and using a vnc client. This is recommended when first
 | |
| modifying a kickstart, since there are still places where Anaconda may get
 | |
| stuck without the log monitor catching it.
 | |
| 
 | |
| The output from this process is a partitioned disk image. kpartx can be used
 | |
| to mount and examine it when there is a problem with the install. It can also
 | |
| be booted using kvm.
 | |
| 
 | |
| When creating an iso the disk image's / partition is copied into a formatted
 | |
| disk image which is then used as the input to lorax for creation of the final
 | |
| media.
 | |
| 
 | |
| The final image is created by lorax, using the templates in /usr/share/lorax/
 | |
| or the directory specified by --lorax-templates
 | |
| 
 | |
| Currently the standard lorax templates are used to make a bootable iso, but
 | |
| it should be possible to modify them to output other results. They are
 | |
| written using the Mako template system which is very flexible.
 | |
| 
 | |
| 
 | |
| KICKSTARTS
 | |
| ----------
 | |
| The docs/ directory includes two example kickstarts, one to create a live desktop
 | |
| iso using GNOME, and the other to create a minimal disk image. When creating your
 | |
| own kickstarts you should start with the minimal example, it includes several
 | |
| needed packages that are not always included by dependencies.
 | |
| 
 | |
| Or you can use existing spin kickstarts to create live media with a few
 | |
| changes. Here are the steps I used to convert the Fedora XFCE spin.
 | |
| 
 | |
| 1. Flatten the xfce kickstart using ksflatten
 | |
| 2. Add zerombr so you don't get the disk init dialog
 | |
| 3. Add clearpart --all
 | |
| 4. Add swap partition
 | |
| 5. bootloader target
 | |
| 6. Add shutdown to the kickstart
 | |
| 7. Add network --bootproto=dhcp --activate to activate the network
 | |
|    This works for F16 builds but for F15 and before you need to pass
 | |
|    something on the cmdline that activate the network, like sshd.
 | |
| 
 | |
| livemedia-creator --kernel-args="sshd"
 | |
| 
 | |
| 8. Add a root password
 | |
| 
 | |
| rootpw rootme
 | |
| network --bootproto=dhcp --activate
 | |
| zerombr
 | |
| clearpart --all
 | |
| bootloader --location=mbr
 | |
| part swap --size=512
 | |
| shutdown
 | |
| 
 | |
| 9. In the livesys script section of the %post remove the root password. This
 | |
|    really depends on how the spin wants to work. You could add the live user
 | |
|    that you create to the %wheel group so that sudo works if you wanted to.
 | |
| 
 | |
| passwd -d root > /dev/null
 | |
| 
 | |
| 10. Remove /etc/fstab in %post, dracut handles mounting the rootfs
 | |
| 
 | |
| cat /dev/null > /dev/fstab
 | |
| 
 | |
|     Do this only for live iso's, the filesystem will be mounted read only if
 | |
|     there is no /etc/fstab
 | |
| 
 | |
| 11. Don't delete initramfs files from /boot in %post
 | |
| 12. Have dracut-config-generic, grub-efi, memtest86+ and syslinux in the package
 | |
|     list.
 | |
| 13. Omit dracut-config-rescue from the package list "-dracut-config-rescue"
 | |
| 
 | |
| One drawback to using virt-install is that it pulls the packages from
 | |
| the repo each time you run it. To speed things up you either need a local
 | |
| mirror of the packages, or you can use a caching proxy. When using a proxy
 | |
| you pass it to livemedia-creator like so:
 | |
| 
 | |
| --proxy=http://proxy.yourdomain.com:3128
 | |
| 
 | |
| You also need to use a specific mirror instead of mirrormanager so that the
 | |
| packages will get cached, so your kickstart url would look like:
 | |
| 
 | |
| url --url="http://dl.fedoraproject.org/pub/fedora/linux/development/17/x86_64/os/"
 | |
| 
 | |
| You can also add an update repo, but don't name it updates. Add --proxy to
 | |
| it as well.
 | |
| 
 | |
| 
 | |
| ANACONDA IMAGE INSTALL
 | |
| ----------------------
 | |
| You can create images without using virt-install by passing --no-virt on the
 | |
| cmdline. This will use Anaconda's directory install feature to handle the install.
 | |
| There are a couple of things to keep in mind when doing this:
 | |
| 
 | |
| 1. It will be most reliable when building images for the same release that the
 | |
|    host is running. Because Anaconda has expectations about the system it is
 | |
|    running under you may encounter strange bugs if you try to build newer or
 | |
|    older releases.
 | |
| 
 | |
| 2. Make sure selinux is set to permissive or disabled. It won't install
 | |
|    correctly with selinux set to enforcing yet.
 | |
| 
 | |
| 3. It may totally trash your host. So far I haven't had this happen, but the
 | |
|    possibility exists that a bug in Anaconda could result in it operating on
 | |
|    real devices. I recommend running it in a virt or on a system that you can
 | |
|    afford to lose all data from.
 | |
| 
 | |
| The logs from anaconda will be placed in an ./anaconda/ directory in either
 | |
| the current directory or in the directory used for --logfile
 | |
| 
 | |
| Example cmdline:
 | |
| 
 | |
| sudo livemedia-creator --make-iso --no-virt --ks=./fedora-livemedia.ks
 | |
| 
 | |
| 
 | |
| AMI IMAGES
 | |
| ----------
 | |
| Amazon EC2 images can be created by using the --make-ami switch and an appropriate
 | |
| kickstart file. All of the work to customize the image is handled by the kickstart.
 | |
| The example currently included was modified from the cloud-kickstarts version so
 | |
| that it would work with livemedia-creator.
 | |
| 
 | |
| Example cmdline:
 | |
| sudo livemedia-creator --make-ami --iso=/path/to/boot.iso --ks=./docs/fedora-livemedia-ec2.ks
 | |
| 
 | |
| This will produce an ami-root.img file in the working directory.
 | |
| 
 | |
| At this time I have not tested the image with EC2. Feedback would be welcome.
 | |
| 
 | |
| 
 | |
| APPLIANCE CREATION
 | |
| ------------------
 | |
| livemedia-creator can now replace appliance-tools by using the --make-appliance
 | |
| switch. This will create the partitioned disk image and an XML file that can be
 | |
| used with virt-image to setup a virtual system.
 | |
| 
 | |
| The XML is generated using the Mako template from
 | |
| /usr/share/lorax/appliance/libvirt.xml You can use a different template by
 | |
| passing --app-template <template path>
 | |
| 
 | |
| Documentation on the Mako template system can be found here:
 | |
| http://docs.makotemplates.org/en/latest/index.html
 | |
| 
 | |
| The name of the final output XML is appliance.xml, this can be changed with
 | |
| --app-file <file path>
 | |
| 
 | |
| The following variables are passed to the template:
 | |
| disks           A list of disk_info about each disk.
 | |
|                 Each entry has the following attributes:
 | |
|     name           base name of the disk image file
 | |
|     format         "raw"
 | |
|     checksum_type  "sha256"
 | |
|     checksum       sha256 checksum of the disk image
 | |
| name            Name of appliance, from --app-name argument
 | |
| arch            Architecture
 | |
| memory          Memory in KB (from --ram)
 | |
| vcpus           from --vcpus
 | |
| networks        list of networks from the kickstart or []
 | |
| title           from --title
 | |
| project         from --project
 | |
| releasever      from --releasever
 | |
| 
 | |
| The created image can be imported into libvirt using:
 | |
| 
 | |
| virt-image appliance.xml
 | |
| 
 | |
| You can also create qcow2 appliance images using --qcow2, for example:
 | |
| sudo livemedia-creator --make-appliance --iso=/path/to/boot.iso --ks=./docs/fedora-minimal.ks \
 | |
| --qcow2 --app-file=minimal-test.xml --image-name=minimal-test.img
 | |
| 
 | |
| 
 | |
| FILESYSTEM IMAGE CREATION
 | |
| -------------------------
 | |
| livemedia-creator can be used to create un-partitined filesystem images using the
 | |
| --make-fsimage option. As of version 21.8 this works with both virt-install and no-virt. Previously
 | |
| it was only available with --no-virt.
 | |
| 
 | |
| Kickstarts should have a single / partition with no extra mountpoints.
 | |
| 
 | |
| livemedia-creator --make-fsimage --iso=/path/to/boot.iso --ks=./docs/fedora-minimal.ks
 | |
| 
 | |
| You can name the output image with --image-name and set a label on the filesystem with --fs-label
 | |
| 
 | |
| 
 | |
| TAR FILE CREATION
 | |
| -----------------
 | |
| The --make-tar command can be used to create a tar of the root filesystem. By
 | |
| default it is compressed using xz, but this can be changed using the
 | |
| --compression and --compress-arg options. This option works with both virt and
 | |
| --no-virt install methods.
 | |
| 
 | |
| As with --make-fsimage the kickstart should be limited to a single / partition.
 | |
| 
 | |
| eg.
 | |
| 
 | |
| livemedia-creator --make-tar --iso=/path/to/boot.iso --ks=./docs/fedora-minimal.ks \
 | |
| --image-name=fedora-root.tar.xz
 | |
| 
 | |
| 
 | |
| DEBUGGING PROBLEMS
 | |
| ------------------
 | |
| Cleaning up an aborted (ctrl-c) virt-install run (as root):
 | |
| virsh list to show the name of the virt
 | |
| virsh destroy <name>
 | |
| virsh undefine <name>
 | |
| umount /tmp/tmpXXXX
 | |
| rm -rf /tmp/tmpXXXX
 | |
| rm /tmp/diskXXXXX
 | |
| 
 | |
| The logs from the virt-install run are stored in virt-install.log,
 | |
| logs from livemedia-creator are in livemedia.log and program.log
 | |
| 
 | |
| You can add --image-only to skip the .iso creation and examine the resulting
 | |
| disk image. Or you can pass --keep-image to keep it around after lorax is
 | |
| run.
 | |
| 
 | |
| Cleaning up aborted --no-virt installs can sometimes be accomplished by running
 | |
| the anaconda-cleanup script. As of f18 anaconda is multi-threaded and it can
 | |
| sometimes become stuck and refuse to exit. When this happens you can usually
 | |
| clean up by first killing the anaconda process then running anaconda-cleanup.
 | |
| 
 | |
| 
 | |
| HACKING
 | |
| -------
 | |
| Development on this will take place as part of the lorax project, and on the
 | |
| anaconda-devel-list mailing list.
 | |
| 
 | |
| Feedback, enhancements and bugs are welcome.
 | |
| You can use http://bugzilla.redhat.com to report bugs.
 | |
| 
 |