Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 37c39e77 authored by Tom Marshall's avatar Tom Marshall
Browse files

build: ota: Support for install tools in /tmp/install

 * Anything in OUT/install gets packaged up into the zip and extracted
   to /tmp/install immediately after FullOTA_InstallBegin.

 * Use /tmp/install in edify scripts and remove code related to using
   and manipulating /system for install tools.

Change-Id: I315a3238e36c8d15e26f935e272f7e27dd59c320
parent cb23d42e
Loading
Loading
Loading
Loading
+3 −20
Original line number Original line Diff line number Diff line
@@ -147,28 +147,11 @@ class EdifyGenerator(object):
    self.script.append(self._WordWrap(cmd))
    self.script.append(self._WordWrap(cmd))


  def RunBackup(self, command):
  def RunBackup(self, command):
    self.script.append('package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");')
    self.script.append(('run_program("/tmp/install/bin/backuptool.sh", "%s");' % command))
    self.script.append('package_extract_file("system/bin/backuptool.functions", "/tmp/backuptool.functions");')
    if not self.info.get("use_set_metadata", False):
      self.script.append('set_perm(0, 0, 0755, "/tmp/backuptool.sh");')
      self.script.append('set_perm(0, 0, 0644, "/tmp/backuptool.functions");')
    else:
      self.script.append('set_metadata("/tmp/backuptool.sh", "uid", 0, "gid", 0, "mode", 0755);')
      self.script.append('set_metadata("/tmp/backuptool.functions", "uid", 0, "gid", 0, "mode", 0644);')
    self.script.append(('run_program("/tmp/backuptool.sh", "%s");' % command))
    if command == "restore":
        self.script.append('delete("/system/bin/backuptool.sh");')
        self.script.append('delete("/system/bin/backuptool.functions");')


  def ValidateSignatures(self, command):
  def ValidateSignatures(self, command):
    if command == "cleanup":
        self.script.append('delete("/system/bin/otasigcheck.sh");')
    else:
        self.script.append('package_extract_file("system/bin/otasigcheck.sh", "/tmp/otasigcheck.sh");')
        self.script.append('package_extract_file("META-INF/org/cyanogenmod/releasekey", "/tmp/releasekey");')
        self.script.append('set_metadata("/tmp/otasigcheck.sh", "uid", 0, "gid", 0, "mode", 0755);')
    # Exit code 124 == abort. run_program returns raw, so left-shift 8bit
    # Exit code 124 == abort. run_program returns raw, so left-shift 8bit
        self.script.append('run_program("/tmp/otasigcheck.sh") != "31744" || abort("Can\'t install this package on top of incompatible data. Please try another package or run a factory reset");')
    self.script.append('run_program("/tmp/install/bin/otasigcheck.sh") != "31744" || abort("Can\'t install this package on top of incompatible data. Please try another package or run a factory reset");')


  def ShowProgress(self, frac, dur):
  def ShowProgress(self, frac, dur):
    """Update the progress bar, advancing it over 'frac' over the next
    """Update the progress bar, advancing it over 'frac' over the next
+15 −15
Original line number Original line Diff line number Diff line
@@ -476,6 +476,16 @@ def GetImage(which, tmpdir, info_dict):
  return sparse_img.SparseImage(path, mappath)
  return sparse_img.SparseImage(path, mappath)




def CopyInstallTools(output_zip):
  oldcwd = os.getcwd()
  os.chdir(os.getenv('OUT'))
  for root, subdirs, files in os.walk("install"):
    for f in files:
      p = os.path.join(root, f)
      output_zip.write(p, p)
  os.chdir(oldcwd)


def WriteFullOTAPackage(input_zip, output_zip):
def WriteFullOTAPackage(input_zip, output_zip):
  # TODO: how to determine this?  We don't know what version it will
  # TODO: how to determine this?  We don't know what version it will
  # be installed on top of.  For now, we expect the API just won't
  # be installed on top of.  For now, we expect the API just won't
@@ -567,12 +577,12 @@ else if get_stage("%(bcb_dev)s") == "3/3" then
  script.AppendExtra("ifelse(is_mounted(\"/system\"), unmount(\"/system\"));")
  script.AppendExtra("ifelse(is_mounted(\"/system\"), unmount(\"/system\"));")
  device_specific.FullOTA_InstallBegin()
  device_specific.FullOTA_InstallBegin()


  CopyInstallTools(output_zip)
  script.UnpackPackageDir("install", "/tmp/install")
  script.SetPermissionsRecursive("/tmp/install", 0, 0, 0755, 0644, None, None)
  script.SetPermissionsRecursive("/tmp/install/bin", 0, 0, 0755, 0755, None, None)

  if OPTIONS.backuptool:
  if OPTIONS.backuptool:
    if block_based:
      common.ZipWriteStr(output_zip, "system/bin/backuptool.sh",
                     ""+input_zip.read("SYSTEM/bin/backuptool.sh"))
      common.ZipWriteStr(output_zip, "system/bin/backuptool.functions",
                     ""+input_zip.read("SYSTEM/bin/backuptool.functions"))
    script.Mount("/system")
    script.Mount("/system")
    script.RunBackup("backup")
    script.RunBackup("backup")
    script.Unmount("/system")
    script.Unmount("/system")
@@ -584,10 +594,6 @@ else if get_stage("%(bcb_dev)s") == "3/3" then
  if HasVendorPartition(input_zip):
  if HasVendorPartition(input_zip):
    system_progress -= 0.1
    system_progress -= 0.1


  if block_based:
    common.ZipWriteStr(output_zip, "system/bin/otasigcheck.sh",
                   ""+input_zip.read("SYSTEM/bin/otasigcheck.sh"))

  script.AppendExtra("if is_mounted(\"/data\") then")
  script.AppendExtra("if is_mounted(\"/data\") then")
  script.ValidateSignatures("data")
  script.ValidateSignatures("data")
  script.AppendExtra("else")
  script.AppendExtra("else")
@@ -658,12 +664,6 @@ else if get_stage("%(bcb_dev)s") == "3/3" then
  common.CheckSize(boot_img.data, "boot.img", OPTIONS.info_dict)
  common.CheckSize(boot_img.data, "boot.img", OPTIONS.info_dict)
  common.ZipWriteStr(output_zip, "boot.img", boot_img.data)
  common.ZipWriteStr(output_zip, "boot.img", boot_img.data)


  if block_based:
    script.Mount("/system")
  script.ValidateSignatures("cleanup")
  if block_based:
    script.Unmount("/system")

  device_specific.FullOTA_PostValidate()
  device_specific.FullOTA_PostValidate()


  if OPTIONS.backuptool:
  if OPTIONS.backuptool: