From owner-p4-projects@FreeBSD.ORG Sun Sep 2 19:21:55 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 6FA4C16A420; Sun, 2 Sep 2007 19:21:55 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2794F16A41A for ; Sun, 2 Sep 2007 19:21:55 +0000 (UTC) (envelope-from ivoras@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 320FC13C428 for ; Sun, 2 Sep 2007 19:21:55 +0000 (UTC) (envelope-from ivoras@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id l82JLtC8044730 for ; Sun, 2 Sep 2007 19:21:55 GMT (envelope-from ivoras@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id l82JLsi9044720 for perforce@freebsd.org; Sun, 2 Sep 2007 19:21:54 GMT (envelope-from ivoras@FreeBSD.org) Date: Sun, 2 Sep 2007 19:21:54 GMT Message-Id: <200709021921.l82JLsi9044720@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to ivoras@FreeBSD.org using -f From: Ivan Voras To: Perforce Change Reviews Cc: Subject: PERFORCE change 125979 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 02 Sep 2007 19:21:55 -0000 http://perforce.freebsd.org/chv.cgi?CH=125979 Change 125979 by ivoras@ivoras_finstall on 2007/09/02 19:21:08 Sync to the source as published in the "alpha" / technology preview LiveCD image. - implement post-install configuration of timezone, x.org - make makeimage.py more generic (separate finstall-specific parts into "-f" switch Affected files ... .. //depot/projects/soc2007/ivoras_finstall/README.txt#4 edit .. //depot/projects/soc2007/ivoras_finstall/installer/basewin.py#7 edit .. //depot/projects/soc2007/ivoras_finstall/installer/finstall.py#16 edit .. //depot/projects/soc2007/ivoras_finstall/makeimage/makeimage.py#12 edit .. //depot/projects/soc2007/ivoras_finstall/pybackend/systoolengine.py#13 edit Differences ... ==== //depot/projects/soc2007/ivoras_finstall/README.txt#4 (text+ko) ==== @@ -1,1 +1,9 @@ This is a starting entry for `finstall` project. More info to come. + +The project is made of three subprojects: + + - installer - PyGTK installer + - pybackend - installer / configuration backend written in python + - makeimage - Python script for LiveCD ISO image creation + +See http://wiki.freebsd.org/finstall for more information. ==== //depot/projects/soc2007/ivoras_finstall/installer/basewin.py#7 (text+ko) ==== @@ -109,7 +109,5 @@ m = re.match(r"(\d+)\.(\d+)\.(\d+)\.(\d+)", addr) if m == None: return False - if 0 <= int(m.group(1)) <= 255 and 0 <= int(m.group(2)) <= 255 and 0 <= int(m.group(3)) <= 255 and 0 <= int(m.group(4)) <= 255: - return True - return False + return 0 <= int(m.group(1)) <= 255 and 0 <= int(m.group(2)) <= 255 and 0 <= int(m.group(3)) <= 255 and 0 <= int(m.group(4)) <= 255 ==== //depot/projects/soc2007/ivoras_finstall/installer/finstall.py#16 (text+ko) ==== @@ -894,6 +894,8 @@ def nfinish_on_load(self): self._load_label(self["label2"], "nfinish.txt") + if "new_parts" in self.trackdata and len(self.trackdata["new_parts"]) > 0: + self.trackdata["postinstall_job"] = self.server.StartPostInstallJob(self.trackdata["new_parts"], True) return True ==== //depot/projects/soc2007/ivoras_finstall/makeimage/makeimage.py#12 (text+ko) ==== @@ -38,7 +38,7 @@ raise MakeImageException("This utility requires mkisofs(8) (install ports/sysutils/cdrtools)") def usage(exit=True): - print "usage: %s -d WORKDIR [-i ISOFILE] [-k KERNEL] [-p PKGLISTFILE] [-s SRCDIR] [-x BUNDLEDIR] [-b] [-c] " % sys.argv[0] + print "usage: %s -d WORKDIR [-i ISOFILE] [-k KERNEL] [-p PKGLISTFILE] [-s SRCDIR] [-x BUNDLEDIR] [-b] [-c] [-f]" % sys.argv[0] print print "Description:" print " -d WORKDIR Base work directory to hold intermediate and final files" @@ -58,6 +58,8 @@ print " and ISO image build. If specified only once, packages" print " will get built and installed, if specified twice," print " packages will be skipped." + print " -f The image is to be created with special support for" + print " the finstall project (not a generic LiveCD)" if exit: sys.exit(1) else: @@ -70,6 +72,7 @@ DoBuild = False DoMakeRoot = True # Create / install livecd tree DoMakePkgs = True +DoFinstallImage = False LABEL = "FreeBSD7" # ISO9660 Volume label BUNDLEDIR = "bundles" BUNDLEFILE = "bundle-spec" @@ -107,6 +110,8 @@ ISO = a elif o == "-x": BUNDLEDIR = a + elif o == "-f": + DoFinstallImage = True elif o == "-h": usage() @@ -177,11 +182,14 @@ execute("make installkernel KERNCONF=%s DESTDIR=%s" % (KERNEL, DESTDIR)) execute("make distribution DESTDIR=%s" % DESTDIR) execute("rm %s/boot/kernel/*.symbols" % DESTDIR) - os.chdir(DESTDIR) - f = file("maptree.txt", "w") - write_maptree(".", f) + if not os.path.exists("%s/install" % DESTDIR): + os.mkdir("%s/install" % DESTDIR) + f = file("%s/install/base.maptree" % DESTDIR, "w") + write_maptree(DESTDIR, f) f.close() execute("mtree -c > base.mtree") + if not os.path.exists("%s/dist" % DESTDIR): + os.mkdir("%s/dist" % DESTDIR) os.chdir(STARTDIR) else: if not os.path.exists(DESTDIR) or not os.path.exists("%s/COPYRIGHT" % DESTDIR): @@ -198,6 +206,7 @@ # Install packages into the liveCD tree, using chroot printmsg("Bundling packages") master_pkglist = [] + pkgflags = {} f = file(PKGLISTFILE, "r") for line in f.readlines(): line = line.strip() @@ -205,10 +214,17 @@ continue if line[0] == "#": continue - fullname = getpkgfullname(line) + if line.find(";") != -1: + pf = line.split(";") + fullname = getpkgfullname(pf[0]) + flags = pf[1:] + else: + fullname = getpkgfullname(line) + flags = [] if fullname == None: printmsg("Fatal error: cannot find package %s" % line) sys.exit(1) + pkgflags[fullname] = flags master_pkglist.append(fullname) dest_pkgs = {} for pkg in master_pkglist: @@ -228,7 +244,10 @@ f.write("pkg_delete -a\n") for pkg in master_pkglist: f.write("echo --- Installing %s\n" % pkg) - f.write("/usr/sbin/pkg_add %s\n" % dest_pkgs[pkg]) + if 'yes' in pkgflags[pkg]: # the package has post-install script that needs to be yes'ed + f.write("/usr/bin/yes yes | pkg_add %s\n" % dest_pkgs[pkg]) + else: + f.write("/usr/sbin/pkg_add %s\n" % dest_pkgs[pkg]) f.close() for pkg in dest_pkgs.keys(): if pkg == None: @@ -238,6 +257,14 @@ for pkg in dest_pkgs: os.unlink(dest_pkgs[pkg]) os.unlink("pkginst.sh") + if not os.path.exists("%s/install" % DESTDIR): + os.mkdir("%s/install" % DESTDIR) + f = file("%s/install/vardbpkg.maptree" % DESTDIR, "w") + write_maptree("%s/var/db/pkg" % DESTDIR, f) + f.close() + f = file("%s/install/usrlocal.maptree" % DESTDIR, "w") + write_maptree("%s/usr/local" % DESTDIR, f) + f.close() os.chdir(STARTDIR) @@ -296,30 +323,33 @@ else: printmsg("WARNING: Not bundling any config files") -### finstall-specific part ### -# Everything done until now has been for a generic LiveCD. Now, do some magic -# (configuration mostly) for finstall. + +if DoFinstallImage: + ### finstall-specific part ### + # Everything done until now has been for a generic LiveCD. Now, do some magic + # (configuration mostly) for finstall. -# Create an alternative root user named "install" and make it run startx when -# logged in. -install_found = False -f = file("%s/etc/passwd" % DESTDIR, "r") -for line in f.readlines(): - if line.startswith("install:"): - install_found = True -f.close() -if not install_found: - f = file("%s/tmp/userinst.sh" % DESTDIR, "w") - f.write("pw useradd -n install -o -u 0 -d /install -m -s /bin/tcsh -w none -c Installer") + # Create an alternative root user named "install" and make it run startx when + # logged in. + install_found = False + f = file("%s/etc/passwd" % DESTDIR, "r") + for line in f.readlines(): + if line.startswith("install:"): + install_found = True f.close() - execute("chroot %s /bin/sh /tmp/userinst.sh" % DESTDIR) - os.unlink("%s/tmp/userinst.sh" % DESTDIR) + if not install_found: + f = file("%s/tmp/userinst.sh" % DESTDIR, "w") + f.write("pw useradd -n install -o -u 0 -d /install -m -s /bin/tcsh -w none -c Installer") + f.close() + execute("chroot %s /bin/sh /tmp/userinst.sh" % DESTDIR) + os.unlink("%s/tmp/userinst.sh" % DESTDIR) -skel_data = file("%s/usr/share/skel/dot.login" % DESTDIR, "r").read() -f = file("%s/install/.login" % DESTDIR, "w") -f.write(skel_data) -f.write("startx\n") -f.close() + skel_data = file("%s/usr/share/skel/dot.login" % DESTDIR, "r").read() + f = file("%s/install/.login" % DESTDIR, "w") + f.write(skel_data) + f.write("/usr/local/bin/python /install/prelogin.py\n") + f.write("startx\n") + f.close() # finish usr image ==== //depot/projects/soc2007/ivoras_finstall/pybackend/systoolengine.py#13 (text+ko) ==== @@ -298,7 +298,8 @@ self.result = str(e) if self.error == None: # create fstab - f = file("%s/etc/fstab" % install_root, "w+") + logging.info("Generating %s/etc/fstab" % install_root) + f = file("%s/etc/fstab" % install_root, "w") f.write("# Generated by finstall on %s\n" % time.strftime("%c")) f.write("# Device\tMountpoint\tFStype\tOptions\tDump\tPass\n") for part in self.part_spec: @@ -307,6 +308,8 @@ if line != None: f.write("%s\n" % line) f.close() + else: + logging.info("Skipping fstab generation because of "+self.result) self.finished = True @@ -367,6 +370,12 @@ def run(self): self.systool.SetConf("moused_enable", "YES", "Enable system mouse") # by default + if os.path.exists("/etc/localtime"): + shutil.copyfile("/etc/localtime", "%s/etc/localtime" % self.systool.root_dest) + if os.path.exists("/etc/X11/xorg.conf"): + if not os.path.exists("%s/etc/X11" % self.systool.root_dist): + os.mkdir("%s/etc/X11" % self.systool.root_dist) + shutil.copyfile("/etc/X11/xorg.conf", "%s/etc/X11/xorg.conf" % self.systool.root_dist) code, result = self.UmountPartitions(self.part_spec, self.INSTALL_ROOT, force) if code != 0: self.error = code @@ -963,15 +972,3 @@ return result - - - - - - - - - - - -