예제 #1
0
    def _installInTmpDir(self, pkg, ainstTmpPkgDir):
        rpmFilePath = self._getRpmFilePath(pkg)
        if not rpmFilePath:
            return False

        if not file_util.makeDir(ainstTmpPkgDir, True):
            Log.cout(Log.ERROR, 'Prepare tmp dir for install failed')
            return False

        if not rpmutils.rpm2dir(rpmFilePath, ainstTmpPkgDir):
            Log.cout(Log.ERROR, 'Rpm %s to dir failed' % rpmFilePath)
            return False

        # disable dir checking
        # if not self._changeToValidRootDir(ainstTmpPkgDir):
        #     Log.cout(Log.ERROR, 'Change to valid root dir failed')
        #     return False

        if not file_util.makeDir(ainstTmpPkgDir + '/ainst'):
            return False
        if not file_util.copyFile(rpmFilePath,
                                  ainstTmpPkgDir + self._bakRpmPath):
            Log.cout(Log.ERROR, 'Copy installed.rpm failed')
            return False
        return True
예제 #2
0
    def _installInTmpDir(self, pkg, ainstTmpPkgDir):
        rpmFilePath = self._getRpmFilePath(pkg)
        if not rpmFilePath:
            return False

        if not file_util.makeDir(ainstTmpPkgDir, True):
            Log.cout(Log.ERROR, 'Prepare tmp dir for install failed')
            return False

        if not rpmutils.rpm2dir(rpmFilePath, ainstTmpPkgDir):
            Log.cout(Log.ERROR, 'Rpm %s to dir failed' % rpmFilePath)
            return False

        # disable dir checking
        # if not self._changeToValidRootDir(ainstTmpPkgDir):
        #     Log.cout(Log.ERROR, 'Change to valid root dir failed')
        #     return False

        if not file_util.makeDir(ainstTmpPkgDir + '/ainst'):
            return False
        if not file_util.copyFile(rpmFilePath,
                                  ainstTmpPkgDir + self._bakRpmPath):
            Log.cout(Log.ERROR, 'Copy installed.rpm failed')
            return False
        return True
예제 #3
0
    def getPackage(self, pkg):
        if self._getRepoDataDir() is None:
            return None
        pkgCacheDir = self._getRepoDataDir() + self.packageCacheDir
        preUmask = os.umask(0)
        if not file_util.makeDir(pkgCacheDir):
            os.umask(preUmask)
            Log.cout(Log.ERROR, 'Make cache dir [%s] failed' % pkgCacheDir)
            return None
        os.umask(preUmask)
        uri = pkg.getLocation()
        if not uri.lower().startswith('http'):
            return None
        pkgFilePath = pkgCacheDir + os.path.basename(uri)
        if file_util.exists(pkgFilePath):
            ctime = os.stat(pkgFilePath).st_ctime
            nowtime = time.time()
            if nowtime - ctime < self.expireTime:
                Log.cout(Log.DEBUG, "Get package [%s] from cache" % pkg)
                return pkgFilePath
            if not file_util.remove(pkgFilePath):
                Log.cout(Log.DEBUG,
                         "Remove old package [%s] because of expired" % pkg)
                return None

        if not self.fileFetcher.fetch(uri, pkgFilePath) or \
                not file_util.chmod(pkgFilePath, 0666):
            return None
예제 #4
0
 def getPackage(self, pkg):
     if self._getRepoDataDir() is None:
         return None
     pkgCacheDir = self._getRepoDataDir() + self.packageCacheDir
     preUmask = os.umask(0)
     if not file_util.makeDir(pkgCacheDir):
         os.umask(preUmask)
         Log.cout(Log.ERROR, 'Make cache dir [%s] failed' % pkgCacheDir)
         return None
     os.umask(preUmask)
     uri = pkg.getLocation()
     if not uri.lower().startswith('http'):
         return None
     pkgFilePath = pkgCacheDir + os.path.basename(uri)
     if file_util.exists(pkgFilePath):
         ctime = os.stat(pkgFilePath).st_ctime
         nowtime = time.time()
         if nowtime - ctime < self.expireTime:
             Log.cout(Log.DEBUG, "Get package [%s] from cache" % pkg)
             return pkgFilePath
         if not file_util.remove(pkgFilePath):
             Log.cout(Log.DEBUG, "Remove old package [%s] because of expired" % pkg)
             return None
             
     if not self.fileFetcher.fetch(uri, pkgFilePath) or \
             not file_util.chmod(pkgFilePath, 0666):
         return None
     return pkgFilePath
예제 #5
0
    def init(self):
        if self._inited:
            return True, None

        if not self._root:
            return False, None

        markFilePath = self._root + '/' + self._ainstRootMarkFile
        initTrace = []
        if not file_util.isDir(self._root):
            if not file_util.makeDir(self._root):
                self.clearInit(initTrace)
                return False, None
            initTrace.append(self._root)
            if not file_util.writeToFile(markFilePath, ''):
                self.clearInit(initTrace)
                return False, None
            initTrace.append(markFilePath)
        else:
            if not file_util.isFile(markFilePath):
                subDirs = file_util.listDir(self._root)
                if subDirs and len(subDirs) > 0:
                    self.clearInit(initTrace)
                    return False, None
                if not file_util.writeToFile(markFilePath, ''):
                    self.clearInit(initTrace)
                    return False, None
                initTrace.append(markFilePath)

        if not self._initRoot(initTrace):
            return False, None
        os.environ[self._installRootEnvKey] = self._root
        self._inited = True
        return True, initTrace
예제 #6
0
파일: rpmutils.py 프로젝트: luckylecher/cpp
def rpm2dir(rpmPath, destDir, timeout=600):
    currentWorkdir = os.getcwd()
    if not file_util.isDir(destDir) and not file_util.makeDir(destDir):
        Log.cout(Log.ERROR, 'Make rpm dir %s failed' % destDir)
        return False
    try:
        os.chdir(destDir)
    except OSError, e:
        return False
예제 #7
0
파일: rpmutils.py 프로젝트: luckylecher/cpp
def rpm2dir(rpmPath, destDir, timeout=600):
    currentWorkdir = os.getcwd()
    if not file_util.isDir(destDir) and not file_util.makeDir(destDir):
        Log.cout(Log.ERROR, 'Make rpm dir %s failed' % destDir)
        return False
    try:
        os.chdir(destDir)
    except OSError, e:
        return False
예제 #8
0
    def _initRoot(self, initTrace):
        for name in self._rootDirs:
            if file_util.isDir(self._rootDirs[name]):
                continue
            if not file_util.makeDir(self._rootDirs[name]):
                self.clearInit(initTrace)
                return False
            initTrace.append(self._rootDirs[name])

        for name in self._rootVarDirs:
            if file_util.isDir(self._rootVarDirs[name]):
                continue
            if not file_util.makeDir(self._rootVarDirs[name]):
                self.clearInit(initTrace)
                return False
            initTrace.append(self._rootVarDirs[name])

        for name in self._rootVarAinstDirs:
            if file_util.isDir(self._rootVarAinstDirs[name]):
                continue
            if not file_util.makeDir(self._rootVarAinstDirs[name]):
                self.clearInit(initTrace)
                return False
            initTrace.append(self._rootVarAinstDirs[name])

        initRootState = self._rootVarAinstDirs['save'] + 'root-state-0'
        if not file_util.exists(initRootState):
            state = RootState(time.time(), '', self._root,
                              common.AINST_VERSION, [], {})
            content = RootStateStreamer().toString(state)
            if not content or not file_util.writeToFile(initRootState, content):
                self.clearInit(initTrace)
                return False
            initTrace.append(initRootState)

        if not self._clearTmp:
            if not file_util.remove(self._rootVarAinstDirs['tmp']) or\
                    not file_util.makeDir(self._rootVarAinstDirs['tmp']):
                self.clearInit(initTrace)
                return False
            self._clearTmp = True
        return True
예제 #9
0
    def undo(self):
        if self._dryrun:
            return True
        if not self._executed:
            return False
        Log.cout(Log.INFO, 'Undo deactivate pkg %s ...' % self._pkg)

        if self._success:
            if not self._noExecute and not self._processScriptByName('pre-activate'):
                return False

        # roll back unlink from root
        for dest in self._rmdirList:
            if not file_util.makeDir(dest):
                return False
        for src, dest in self._unlinkList:
            if not file_util.link(src, dest):
                return False
        for src, dest in self._confDict.values():
            if not file_util.move(src, dest):
                return False

        if self._modifyDb and not self._addFileToDb():
                return False

        if self._crontabSrcDest:
            cronFilePath, tmpPath = self._crontabSrcDest
            if not file_util.move(tmpPath, cronFilePath):
                return False
        
        # roll back unlink from active
        if self._lastActivePkg:
            if not file_util.symLink(self._lastActivePkg, self._ainstActivePkg):
                return False

        if self._success:
            if not self._noExecute and not self._processScriptByName('post-activate'):
                return False

        # roll back stop
        if not self._noExecute and not self._noStop and self._aicfInfo and\
                self._aicfInfo.autoStart and self._aicfInfo.scripts.has_key('start'):
            scriptContent = self._aicfInfo.scripts['start']
            if scriptContent:
                self._exportToEnv(self._ainstPathEnv)
                self._exportToEnv(self._settingsEnv)
                self._processScript(scriptContent)
                self._removeFromEnv(self._settingsEnv)
                self._removeFromEnv(self._ainstPathEnv)

        self._init()
        return True
예제 #10
0
 def _getRepoDataDir(self):
     if self.repoDataDir:
         return self.repoDataDir
     if not self.cacheDir or not self.repoid:
         return None
     self.repoDataDir = self.cacheDir + '/' + self.repoid
     if not file_util.exists(self.repoDataDir):
         preUmask = os.umask(0)
         ret = file_util.makeDir(self.repoDataDir, True, 0777)
         os.umask(preUmask)
         if not ret: 
             Log.cout(Log.ERROR, 'make repo data dir %s failed' % self.repoDataDir)
             return None
     return self.repoDataDir