summaryrefslogtreecommitdiffstats
path: root/build_tools/l7/larch0/cli/live_iso.py
diff options
context:
space:
mode:
authorCecil Hugh Watson <knoppmyth@gmail.com>2010-08-28 21:23:23 (GMT)
committerCecil Hugh Watson <knoppmyth@gmail.com>2010-08-28 21:23:23 (GMT)
commitf83117d46d8fc1f6192783371a68607a192c3276 (patch)
tree21bf30aeb943fe6cb23eb9c62a0ba899de2af0d7 /build_tools/l7/larch0/cli/live_iso.py
parent69a0137390be9816d5ec5dc9e81d48817a817758 (diff)
downloadlinhes_dev-f83117d46d8fc1f6192783371a68607a192c3276.zip
Larch 7
Diffstat (limited to 'build_tools/l7/larch0/cli/live_iso.py')
-rwxr-xr-xbuild_tools/l7/larch0/cli/live_iso.py154
1 files changed, 154 insertions, 0 deletions
diff --git a/build_tools/l7/larch0/cli/live_iso.py b/build_tools/l7/larch0/cli/live_iso.py
new file mode 100755
index 0000000..e6899c9
--- /dev/null
+++ b/build_tools/l7/larch0/cli/live_iso.py
@@ -0,0 +1,154 @@
+#!/usr/bin/env python
+#
+# live_iso.py
+#
+# (c) Copyright 2009 - 2010 Michael Towers (larch42 at googlemail dot com)
+#
+# This file is part of the larch project.
+#
+# larch is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# larch is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with larch; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+#----------------------------------------------------------------------------
+# 2010.07.12
+
+# This is a command line script to prepare an 'iso' file from an
+# already larchified Arch Linux installation. Alternatively, another
+# larch medium can be used as source (with the '-S' option).
+# All needed parameters are passed as options.
+
+import os
+from config import *
+from backend import *
+from media_common import *
+
+
+def build_iso(options):
+ """Create a bootable iso from the source larch image. If a chroot
+ build is used (default unless -S is specified) the resulting iso file
+ will be relative to the larch build area (CHROOT_DIR_BUILD) in the
+ chroot directory, otherwise as specified to the -o option.
+ """
+ medium = Medium(options)
+ ipath = medium.chrootpath
+ build = medium.build
+
+ # Write bootloader configuration file
+ bootconfig(build, options.syslinux)
+
+ if not os.path.isfile(medium.medium_dir + '/larch/larchboot'):
+ add_larchboot(build)
+
+ # Need to adjust paths to cater for chroot!
+ source0 = medium.chroot_medium_dir()
+ isopath0 = medium.iso_path()
+
+ # Select bootloader
+ if options.syslinux:
+ # Get fresh isolinux.bin
+ runcmd('cp %s/boot/isolinux/isolinux.bin0 %s/boot/isolinux/isolinux.bin'
+ % (build, build))
+ parms = '-b boot/isolinux/isolinux.bin -c boot/isolinux/isolinux.boot'
+ # Select bootloader
+ else:
+ parms = '-b boot/grub/stage2_eltorito'
+
+ # Actually the volume label can be 32 bytes, but 16 is compatible
+ # with ext2 (though a little longer than vfat)
+ label = check_label(options.label, 16)
+ # Build iso
+ if not chroot(ipath, ('mkisofs -R -l %s -no-emul-boot -boot-load-size 4'
+ ' -boot-info-table -input-charset=UTF-8'
+ ' -V "%s"'
+ ' -o "%s"'
+ ' -x "%s/boot"'
+ ' -x "%s/larch/save"'
+ ' "%s" "%s"') % (parms, label, isopath0,
+ source0, source0, source0, BUILD0),
+ filter=mkisofs_filter_gen()):
+
+ errout(_("iso build failed"))
+
+ # Process iso so that it can be 'dd'ed to a USB-stick
+ if options.syslinux and not chroot(ipath, ('isohybrid %s' % isopath0)):
+ errout(_("Couldn't perform 'isohybrid' operation on larch 'iso'"
+ " (Not Critical!)"), 0)
+ medium.unmount()
+ runcmd('rm -rf %s' % build)
+
+ comment(" *** %s ***" % (_("%s was successfully created")
+ % (options.isofile)))
+
+
+
+if __name__ == "__main__":
+ start_translator()
+
+ from optparse import OptionParser, OptionGroup
+ parser = OptionParser(usage=_("usage: %prog [options]"))
+
+ parser.add_option("-p", "--profile", action="store", type="string",
+ default="", dest="profile",
+ help=_("Profile: 'user:profile-name' or path to profile directory"
+ " (conflicts with -S)"))
+ parser.add_option("-S", "--source", action="store", type="string",
+ default="", dest="source",
+ help=_("Source: path to larch medium image (conflicts with -p)."
+ " It can also be a device ('/dev/...') or an 'iso' file."))
+ parser.add_option("-i", "--installation-dir", action="store", type="string",
+ default="", dest="idir",
+ help=_("Path to larchified directory (default %s)") % INSTALLATION)
+ parser.add_option("-s", "--slave", action="store_true", dest="slave",
+ default=False, help=_("Run as a slave from a controlling program"
+ " (e.g. from a gui)"))
+ parser.add_option("-q", "--quiet", action="store_true", dest="quiet",
+ default=False, help=_("Suppress output messages, except errors"
+ " (no effect if -s specified)"))
+
+ parser.add_option("-f", "--force", action="store_true", dest="force",
+ default=False, help=_("Don't ask for confirmation"))
+
+ parser.add_option("-b", "--isolinux", action="store_true", dest="syslinux",
+ default=False, help=_("Use the isolinux bootloader"
+ " (the default is GRUB)"))
+ parser.add_option("-l", "--label", action="store", type="string",
+ default=LABEL, dest="label",
+ help=_("Volume label for iso (default '%s')") % LABEL)
+ parser.add_option("-o", "--isofile", action="store", type="string",
+ default=ISOFILE, dest="isofile",
+ help=_("Specify the output file (default '%s'). It will be"
+ " generated to the current directory.") % ISOFILE)
+ parser.add_option("-D", "--setdir", action="store", type="string",
+ dest='setdir', default='',
+ help=_("Set current directory,"
+ " so that the 'iso' can be placed there"))
+ parser.add_option("-C", "--chroot", action="store_true",
+ dest="chroot", default=False,
+ help=_("Use chroot for build (default when -S not specified)"))
+ parser.add_option("-c", "--nochroot", action="store_true",
+ dest="nochroot", default=False,
+ help=_("Don't use chroot for build (default when -S specified)"))
+
+ parser.add_option('-T', '--testmedium', action='store_true',
+ dest='testmedium', default=False,
+ help=_("Test source medium only (used by gui)"))
+
+ (options, args) = parser.parse_args()
+
+ if os.getuid() != 0:
+ print _("This application must be run as root")
+ sys.exit(1)
+
+ init('live_iso', options)
+ build_iso(options)