File: install_all_main.py

package info (click to toggle)
update-manager 0.68.debian-7
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 6,796 kB
  • ctags: 814
  • sloc: python: 5,646; xml: 1,571; sh: 433; makefile: 356; ansic: 264
file content (79 lines) | stat: -rwxr-xr-x 2,602 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/usr/bin/python

import apt
import apt_pkg

def blacklisted(name):
	# we need to blacklist linux-image-* as it does not install
	# cleanly in the chroot (postinst failes)
	blacklist = ["linux-image-","ltsp-client",
		     "glibc-doc-reference", "libpthread-dev",
		     "cman", "mysql-server", "fuse-utils",
		     "ltspfs", "gfs2-tools", "edubuntu-server",
		     "gnbd-client", "gnbd-server", "mysql-server-5.0",
		     "rgmanager", "clvm","redhat-cluster-suit",
		     # has a funny "can not be upgraded automatically" policy
		     # see debian #368226
		     "quagga",
		     "system-config-cluster", "gfs-tools"]
	for b in blacklist:
		if name.startswith(b):
			return True
	return False

#apt_pkg.Config.Set("Dir::State::status","./empty")

cache = apt.Cache()
group = apt_pkg.GetPkgActionGroup(cache._depcache)
#print [pkg.name for pkg in cache if pkg.isInstalled]

troublemaker = set()
for pkg in cache:
    for c in pkg.candidateOrigin:
        if c.component == "main":
            current = set([p.name for p in cache if p.markedInstall])
	    if not (pkg.isInstalled or blacklisted(pkg.name)):
	            pkg.markInstall()
            new = set([p.name for p in cache if p.markedInstall])
            #if not pkg.markedInstall or len(new) < len(current):
	    if not (pkg.isInstalled or pkg.markedInstall):
                print "Can't install: %s" % pkg.name
            if len(current-new) > 0:
                troublemaker.add(pkg.name)
                print "Installing '%s' caused removals_ %s" % (pkg.name, current - new)

#print len(troublemaker)
for pkg in ["ubuntu-desktop", "ubuntu-minimal", "ubuntu-standard"]:
    cache[pkg].markInstall()

# make sure we don't install blacklisted stuff
for pkg in cache:
	if blacklisted(pkg.name):
		pkg.markKeep()

print "We can install:"
print len([pkg.name for pkg in cache if pkg.markedInstall])
print "Download: "
pm = apt_pkg.GetPackageManager(cache._depcache)
fetcher = apt_pkg.GetAcquire()
pm.GetArchives(fetcher, cache._list, cache._records)
print apt_pkg.SizeToStr(fetcher.FetchNeeded)
print "Total space: ", apt_pkg.SizeToStr(cache._depcache.UsrSize)

res = False
current = 0
maxRetries = 3
while current < maxRetries:
    try:
        res = cache.commit(apt.progress.TextFetchProgress(),
                           apt.progress.InstallProgress())    
    except IOError, e:
        # fetch failed, will be retried
        current += 1
        print "Retrying to fetch: ", current
        continue
    except SystemError, e:
        print "Error installing packages! "
        print e
    print "Install result: ",res
    break