home *** CD-ROM | disk | FTP | other *** search
/ Australian Personal Computer 2000 July / CD 3 / redhat-6.2.iso / RedHat / instimage / usr / lib / anaconda / urlinstall.py < prev    next >
Encoding:
Python Source  |  2000-03-08  |  2.3 KB  |  101 lines

  1. # Install method for disk image installs (CD & NFS)
  2.  
  3. from comps import ComponentSet, HeaderList
  4. import os
  5. import rpm
  6. import time
  7. import urllib
  8. import string
  9. import struct
  10. import socket
  11.  
  12. # we import these explicitly because urllib loads them dynamically, which stinks
  13. import ftplib
  14. import httplib
  15. import StringIO
  16.  
  17. import todo
  18.  
  19. FILENAME = 1000000
  20.  
  21. class InstallMethod:
  22.  
  23.     def readComps(self, hdlist):
  24.     return ComponentSet(self.baseUrl + '/RedHat/base/comps',
  25.                             hdlist)
  26.  
  27.     def getFilename(self, h):
  28.     root = "/mnt/sysimage"
  29.     pathlist = [ "/var/tmp", "/tmp",
  30.              "/." ]
  31.     for p in pathlist:
  32.         if (os.access(root + p, os.X_OK)):
  33.         tmppath = root + p
  34.         break
  35.  
  36.     file = tmppath + h[FILENAME]
  37.  
  38.         connected = 0
  39.         while not connected:
  40.             try:
  41.                 urllib.urlretrieve(self.baseUrl + "/RedHat/RPMS/" + h[FILENAME],
  42.                                    file)
  43.             except IOError, (errnum, msg):
  44. #                print "IOError occurred, trying again"
  45.                 time.sleep(5)
  46.             else:
  47.                 connected = 1
  48.                 
  49.     return file
  50.  
  51.     def unlinkFilename(self, fullName):
  52.     os.remove(fullName)
  53.  
  54.     def readHeaders(self):
  55.  
  56.         connected = 0
  57.         while not connected:
  58.             try:
  59.                 url = urllib.urlopen(self.baseUrl + "/RedHat/base/hdlist")
  60.             except IOError, (errnum, msg):
  61. #                print "IOError occurred, trying again"
  62.                 time.sleep(5)
  63.             else:
  64.                 connected = 1
  65.                 
  66.     raw = url.read(16)
  67.     hl = []
  68.     while (raw):
  69.         info = struct.unpack("iiii", raw)
  70.         magic1 = socket.ntohl(info[0]) & 0xffffffff
  71.         if (magic1 != 0x8eade801 or info[1]):
  72.         raise TypeError, "bad magic in header"
  73.  
  74.         il = socket.ntohl(info[2])
  75.         dl = socket.ntohl(info[3])
  76.         totalSize = il * 16 + dl;
  77.         hdrString = raw[8:] + url.read(totalSize)
  78.         hdr = rpm.headerLoad(hdrString)
  79.         hl.append(hdr)
  80.  
  81.         raw = url.read(16)
  82.  
  83.     return HeaderList(hl)
  84.  
  85.     def targetFstab(self, fstab):
  86.     pass
  87.         
  88.     def filesDone(self):
  89.     pass
  90.  
  91.     def __init__(self, url):
  92.     i = string.index(url, '://') + 2
  93.     self.baseUrl = url[0:i]
  94.     rem = url[i:]
  95.     new = string.replace(rem, "//", "/")
  96.     while (new != rem):
  97.         rem = new
  98.         new = string.replace(rem, "//", "/")
  99.     rem = new
  100.     self.baseUrl = self.baseUrl + rem
  101.