Ejemplo n.º 1
0
def getDependencyTree(programName):
  """ Returns a dependency tree list of any available program. """
  dependency = ""
  programDependencyTree = [programName]
  programPermissions = permissions.getPermissions(programName)
  dependency = programPermissions.get("dependency", None)
  while dependency:
    if not availablePrograms.available(dependency):
      sys.exit(programName+" depends upon "+dependency+" however "+dependency+" does not exist.")
    programDependencyTree.append(dependency)
    programPermissions = permissions.getPermissions(dependency)
    dependency = programPermissions.get("dependency", None)
  return programDependencyTree
Ejemplo n.º 2
0
def getDependencyTree(programName):
    """ Returns a dependency tree list of any available program. """
    dependency = ""
    programDependencyTree = [programName]
    programPermissions = permissions.getPermissions(programName)
    dependency = programPermissions.get("dependency", None)
    while dependency:
        if not availablePrograms.available(dependency):
            sys.exit(programName + " depends upon " + dependency +
                     " however " + dependency + " does not exist.")
        programDependencyTree.append(dependency)
        programPermissions = permissions.getPermissions(dependency)
        dependency = programPermissions.get("dependency", None)
    return programDependencyTree
Ejemplo n.º 3
0
def installProgram(programName, useCache):
  """
  Build the docker image associated with a program and create a tiny executable to add that image to your path.
  """
  print("Installing {0} ...".format(programName))

  dockerImageDir = os.path.join(paths.getProgramSrcDir(programName), "docker-image")
  _DockerfilePath = os.path.join(dockerImageDir, 'Dockerfile')
  # Check if we use a 'Dockerfile' or a 'MakeBaseImage.sh'
  if os.path.isfile(paths.getMakeBaseImageScriptPath(programName)):
    installFromBaseImage(programName, cacheArg)
  elif os.path.isfile(_DockerfilePath):
    if useCache:
      cacheArg = "--no-cache=false"
    else:
      cacheArg = "--no-cache=true"
    docker.runDockerAndExitIfItFails(["build","-rm",cacheArg,"--tag=subuser-"+programName+"",dockerImageDir])
  else:
    sys.exit("No buildfile found: need one of: 'Dockerfile' or 'MakeBaseImage.sh'. PATH: {0}".format(dockerImageDir))

  _permissions = permissions.getPermissions(programName)

  # Create a small executable that just calls the real executable in the docker image.
  if 'executable' in _permissions:
    installExecutable(programName)

  try:
    lastUpdateTime = _permissions["last-update-time"]
  except KeyError:
    lastUpdateTime = installTime.currentTimeString()

  imageID = dockerImages.getImageID("subuser-{0}".format(programName))
  registry.registerProgram(programName, lastUpdateTime, imageID)
Ejemplo n.º 4
0
def installProgram(programName, useCache):
  """
  Build the docker image associated with a program and create a tiny executable to add that image to your path.
  """
  print("Installing "+programName+" ...")
  programSrcDir = paths.getProgramSrcDir(programName)
  _DockerfilePath = paths.getDockerfilePath(programSrcDir)
  # Check if we use a 'Dockerfile' or a 'BuildImage.sh'
  if os.path.isfile(paths.getBuildImageScriptPath(programSrcDir)):
    installFromBaseImage(programName,programSrcDir)
  elif os.path.isfile(_DockerfilePath):
    installFromDockerfile(programName,programSrcDir,useCache)
  else:
    sys.exit("No buildfile found: There needs to be a 'Dockerfile' or a 'BuildImage.sh' in the docker-image directory.")

  _permissions = permissions.getPermissions(programName)

  # Create a small executable that just calls the real executable in the docker image.
  if 'executable' in _permissions:
    installExecutable(programName)

  try:
    lastUpdateTime = _permissions["last-update-time"]
  except KeyError:
    lastUpdateTime = installTime.currentTimeString()

  imageID = dockerImages.getImageID("subuser-"+programName)
  registry.registerProgram(programName, lastUpdateTime, imageID)
Ejemplo n.º 5
0
def hasInstalledDependencies(programName):
  """ Returns true if there are any program's which depend upon this program installed. """
  for program in getInstalledPrograms():
    try:
      if permissions.getPermissions(program)["dependency"] == programName:
        return True
    except KeyError:
      pass
Ejemplo n.º 6
0
def markProgramAsNeedingUpdate(programName):
  if not availablePrograms.available(programName):
    print(programName+ " is not the name of any known program.  Cannot mark it as having an update.")
    print("\nAvailable programs are: ")
    print(' '.join(availablePrograms.getAvailablePrograms()))
  else:
    permissions_ = permissions.getPermissions(programName)
    permissions_["last-update-time"] = currentTimeString()
    permissions.setPermissions(programName,permissions_)
Ejemplo n.º 7
0
def hasInstalledDependencies(programName):
    """ Returns true if there are any program's which depend upon this program installed. """
    for program in getInstalledPrograms():
        try:
            if permissions.getPermissions(
                    program)["dependency"] == programName:
                return True
        except KeyError:
            pass
Ejemplo n.º 8
0
def getProgramsWhosLastUpdateTimesChanged():
  """ Returns a list of progams who's last-update-time has changed since it was installed. """
  programsWhosLastUpdateTimeChanged = []
  _registry = registry.getRegistry()
  for program, registeredInfo in _registry.iteritems():
    availableLastUpdateTime = permissions.getPermissions(program).get("last-update-time",None)
    installedLastUpdateTime = registeredInfo.get("last-update-time",None)
    if not availableLastUpdateTime == installedLastUpdateTime and not availableLastUpdateTime == None:
      programsWhosLastUpdateTimeChanged.append(program)
  return programsWhosLastUpdateTimeChanged
Ejemplo n.º 9
0
def needsUpdate(program):
  """ Returns true if the program or any of it's dependencies need to be updated. """
  _registry = registry.getRegistry()
  dependencyTable = registry.getDependencyTable(availablePrograms.getAvailablePrograms())
  programsToCheck = dependencyTable[program]["depends-on"]
  programsToCheck.append(program)
  for programToCheck in programsToCheck:
    myPermissions = permissions.getPermissions(programToCheck)
    if not permissions.getLastUpdateTime(myPermissions) == _registry[programToCheck]["last-update-time"] and not permissions.getLastUpdateTime(myPermissions) == None:
      return True
  return False
Ejemplo n.º 10
0
def getInstalledDependencies(programName):
  """ Returns returns a list of any installed programs which depend upon this program. """
  installedDependencies = []
  for program in getInstalledPrograms():
    try:
      if permissions.getPermissions(program)["dependency"] == programName:
        installedDependencies.append(program)
    except KeyError:
      pass

  return installedDependencies
Ejemplo n.º 11
0
def getProgramsWhosLastUpdateTimesChanged():
    """ Returns a list of progams who's last-update-time has changed since it was installed. """
    programsWhosLastUpdateTimeChanged = []
    _registry = registry.getRegistry()
    for program, registeredInfo in _registry.iteritems():
        availableLastUpdateTime = permissions.getPermissions(program).get(
            "last-update-time", None)
        installedLastUpdateTime = registeredInfo.get("last-update-time", None)
        if not availableLastUpdateTime == installedLastUpdateTime and not availableLastUpdateTime == None:
            programsWhosLastUpdateTimeChanged.append(program)
    return programsWhosLastUpdateTimeChanged
Ejemplo n.º 12
0
def getProgramHomeDirOnHost(programName):
  """ Each program has it's own home directory(or perhaps a shared one).
          This directory has two absolute paths:
            The path to the directory as it appears on the host machine,
            and the path to the directory in the docker container.
          Return the path to the directory as it appears on the host macine. """
  programPermissions = permissions.getPermissions(programName)
  sharedHome = permissions.getSharedHome(programPermissions)
  if sharedHome:
    return os.path.join(getSubuserDir(),"homes",sharedHome)
  else:
    return os.path.join(getSubuserDir(),"homes",programName)
Ejemplo n.º 13
0
def markProgramAsNeedingUpdate(programName):
    if not availablePrograms.available(programName):
        print(
            programName +
            " is not the name of any known program.  Cannot mark it as having an update."
        )
        print("\nAvailable programs are: ")
        print(' '.join(availablePrograms.getAvailablePrograms()))
    else:
        permissions_ = permissions.getPermissions(programName)
        permissions_["last-update-time"] = currentTimeString()
        permissions.setPermissions(programName, permissions_)
Ejemplo n.º 14
0
def getInstalledDependents(programName):
    """ Returns returns a list of any installed programs which depend upon this program. """
    installedDependents = []
    for program in getInstalledPrograms():
        try:
            if permissions.getPermissions(
                    program)["dependency"] == programName:
                installedDependents.append(program)
        except KeyError:
            pass

    return installedDependents
Ejemplo n.º 15
0
def needsUpdate(program):
    """ Returns true if the program or any of it's dependencies need to be updated. """
    _registry = registry.getRegistry()
    dependencyTable = registry.getDependencyTable(
        availablePrograms.getAvailablePrograms())
    programsToCheck = dependencyTable[program]["depends-on"]
    programsToCheck.append(program)
    for programToCheck in programsToCheck:
        myPermissions = permissions.getPermissions(programToCheck)
        if not permissions.getLastUpdateTime(
                myPermissions) == _registry[programToCheck][
                    "last-update-time"] and not permissions.getLastUpdateTime(
                        myPermissions) == None:
            return True
    return False