aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwiktor w brodlo <wiktor@brodlo.net>2011-08-11 12:58:20 +0000
committerwiktor w brodlo <wiktor@brodlo.net>2011-08-11 12:58:20 +0000
commit17fe1477e919c91e45476f712680ef107a57e0ec (patch)
treed137118d6aeadbd703c753def59738877179ce80
parentCustom kernel (diff)
downloadanaconda-17fe1477e919c91e45476f712680ef107a57e0ec.tar.gz
anaconda-17fe1477e919c91e45476f712680ef107a57e0ec.tar.bz2
anaconda-17fe1477e919c91e45476f712680ef107a57e0ec.zip
Sync Portage and install from a stage3 tarball
-rw-r--r--gentoo/utils.py133
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):