diff options
author | 2011-08-11 12:58:20 +0000 | |
---|---|---|
committer | 2011-08-11 12:58:20 +0000 | |
commit | 17fe1477e919c91e45476f712680ef107a57e0ec (patch) | |
tree | d137118d6aeadbd703c753def59738877179ce80 | |
parent | Custom kernel (diff) | |
download | anaconda-17fe1477e919c91e45476f712680ef107a57e0ec.tar.gz anaconda-17fe1477e919c91e45476f712680ef107a57e0ec.tar.bz2 anaconda-17fe1477e919c91e45476f712680ef107a57e0ec.zip |
Sync Portage and install from a stage3 tarball
-rw-r--r-- | gentoo/utils.py | 133 |
1 files changed, 18 insertions, 115 deletions
diff --git a/gentoo/utils.py b/gentoo/utils.py index 45a3888..017c8d4 100644 --- a/gentoo/utils.py +++ b/gentoo/utils.py @@ -760,113 +760,7 @@ class GentooInstall: action = _("System Installation") - copy_update_interval = 10 - copy_update_counter = 9 - # get file counters - total_files = 0 - image_dir = self._prod_root - for z,z,files in os.walk(image_dir): - for file in files: - total_files += 1 - - self._progress.set_fraction(0.0) - self._progress.set_text(action) - - def copy_other(fromfile, tofile): - proc = subprocess.Popen(("/bin/cp", "-a", fromfile, tofile), - stdout = subprocess.PIPE, stderr = subprocess.PIPE) - proc.wait() - del proc - - def copy_reg(fromfile, tofile): - try: - shutil.copy2(fromfile, tofile) - user = os.stat(fromfile)[4] - group = os.stat(fromfile)[5] - os.chown(tofile, user, group) - shutil.copystat(fromfile, tofile) - except IOError, e: - if (e[0] == 40) or (e[0] == 2): - # workaround for Too many levels of symbolic links - copy_other(fromfile, tofile) - else: - raise - - def copy_lnk(fromfile, tofile): - source_link = os.readlink(fromfile) - if os.path.lexists(tofile): - os.remove(tofile) - os.symlink(source_link, tofile) - - current_counter = 0 - currentfile = "/" - image_dir_len = len(image_dir) - # Create the directory structure - # self.InstallFilesToIgnore - for currentdir, subdirs, files in os.walk(image_dir): - - copy_update_counter += 1 - - for xdir in subdirs: - - image_path_dir = currentdir + "/" + xdir - mydir = image_path_dir[image_dir_len:] - rootdir = self._root + mydir - - # handle broken symlinks - if os.path.islink(rootdir) and not os.path.exists(rootdir): - # broken symlink - os.remove(rootdir) - - # if our directory is a file on the live system - elif os.path.isfile(rootdir): # really weird...! - os.remove(rootdir) - - # if our directory is a symlink instead, then copy the symlink - if os.path.islink(image_path_dir) and not os.path.isdir(rootdir): - # for security we skip live items that are dirs - tolink = os.readlink(image_path_dir) - if os.path.islink(rootdir): - os.remove(rootdir) - os.symlink(tolink,rootdir) - elif (not os.path.isdir(rootdir)) and \ - (not os.access(rootdir,os.R_OK)): - os.makedirs(rootdir) - - if not os.path.islink(rootdir): - # symlink don't need permissions, also until os.walk - # ends they might be broken - user = os.stat(image_path_dir)[4] - group = os.stat(image_path_dir)[5] - os.chown(rootdir,user,group) - shutil.copystat(image_path_dir,rootdir) - - for path_file in sorted(files): - - current_counter += 1 - fromfile = currentdir + "/" + path_file - currentfile = fromfile[image_dir_len:] - - if currentfile.startswith("/dev/"): - continue - - - tofile = self._root + currentfile - st_info = os.lstat(fromfile) - if stat.S_ISREG(st_info[stat.ST_MODE]): - copy_reg(fromfile, tofile) - elif stat.S_ISLNK(st_info[stat.ST_MODE]): - copy_lnk(fromfile, tofile) - else: - copy_other(fromfile, tofile) - - - if (copy_update_counter == copy_update_interval) or \ - ((total_files - 1000) < current_counter): - # do that every 1000 iterations - copy_update_counter = 0 - frac = float(current_counter)/total_files - self._progress.set_fraction(frac) + anaconda._intf.instProgress.terminal.run_command("tar xvjpf /tmp/stage3.tar.bz2 -C "+self._root) self._progress.set_fraction(1) @@ -882,8 +776,8 @@ class GentooInstall: def copy_portage(self): self._progress.set_fraction(0.0) - self._progress.set_text(_("Copying the Portage tree (can take a long time)")) - subprocess.call(["cp", "--recursive", "/usr/portage", self._root+"/usr/"]) + self._progress.set_text(_("Syncing the Portage tree (can take a long time)")) + self.portage.sync() # We need some packages from anaconda-overlay but ideally they should be added to portage self._progress.set_fraction(0.1) subprocess.call(["cp", "--recursive", "/anaconda-overlay/app-admin", self._root+"/usr/portage/"]) @@ -969,12 +863,21 @@ class GentooInstall: def install_kernel(self): self._progress.set_text(_("Installing the kernel")) - # TODO: Proper genkernel build - subprocess.call(["mount", "/dev/sr0", "/mnt/cdrom"]) - shutil.copy2("/mnt/cdrom/boot/gentoo", self._root+"/boot/kernel-gentoo") - shutil.copy2("/mnt/cdrom/boot/gentoo.igz", self._root+"/boot/initrd-gentoo") - self._progress.set_fraction(0.9) - subprocess.call(["cp", "-PR", "/lib/modules", self._root+"/lib"]) + if self.anaconda.genkernel: + subprocess.call(["mount", "/dev/sr0", "/mnt/cdrom"]) + shutil.copy2("/mnt/cdrom/boot/gentoo", self._root+"/boot/kernel-gentoo") + shutil.copy2("/mnt/cdrom/boot/gentoo.igz", self._root+"/boot/initrd-gentoo") + self._progress.set_fraction(0.9) + subprocess.call(["cp", "-PR", "/lib/modules", self._root+"/lib"]) + else: + shutil.copy2("/usr/src/linux-"+self.anaconda.kernel, self._root+"/usr/src/") + self._progress.set_fraction(0.5) + self._progress.set_text(_("Compiling your custom kernel")) + anaconda._intf.instProgress.terminal.run_command("chroot "+self._root+" eselect kernel set 1") + anaconda._intf.instProgress.terminal.run_command("cd "+self._root+"/usr/src/linux") + anaconda._intf.instProgress.terminal.run_command("make && make modules && make modules_install") + shutil.copy2(self+.root+"/usr/src/linux/arch/x86/boot/bzImage", self._root+"/boot/kernel-gentoo") + self._progress.set_fraction(1.0) def _get_langpacks(self): |