Remove computing checksums from phases
These phases were computing checksums for images: * buildinstall * createiso * image_build * live_images * product_img In each phase the checksummed thing would ultimately end-up in image manifest. Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
This commit is contained in:
parent
359eb444e5
commit
660c8bc2b3
@ -24,7 +24,7 @@ import shutil
|
|||||||
import re
|
import re
|
||||||
|
|
||||||
from kobo.threads import ThreadPool, WorkerThread
|
from kobo.threads import ThreadPool, WorkerThread
|
||||||
from kobo.shortcuts import run, read_checksum_file, relative_path
|
from kobo.shortcuts import run, relative_path
|
||||||
from productmd.images import Image
|
from productmd.images import Image
|
||||||
|
|
||||||
from pungi.arch import get_valid_arches
|
from pungi.arch import get_valid_arches
|
||||||
@ -266,11 +266,8 @@ def symlink_boot_iso(compose, arch, variant):
|
|||||||
|
|
||||||
iso = IsoWrapper()
|
iso = IsoWrapper()
|
||||||
implant_md5 = iso.get_implanted_md5(new_boot_iso_path)
|
implant_md5 = iso.get_implanted_md5(new_boot_iso_path)
|
||||||
# compute md5sum, sha1sum, sha256sum
|
|
||||||
iso_name = os.path.basename(new_boot_iso_path)
|
iso_name = os.path.basename(new_boot_iso_path)
|
||||||
iso_dir = os.path.dirname(new_boot_iso_path)
|
iso_dir = os.path.dirname(new_boot_iso_path)
|
||||||
for cmd in iso.get_checksum_cmds(iso_name):
|
|
||||||
run(cmd, workdir=iso_dir)
|
|
||||||
|
|
||||||
# create iso manifest
|
# create iso manifest
|
||||||
run(iso.get_manifest_cmd(iso_name), workdir=iso_dir)
|
run(iso.get_manifest_cmd(iso_name), workdir=iso_dir)
|
||||||
@ -285,15 +282,6 @@ def symlink_boot_iso(compose, arch, variant):
|
|||||||
img.format = "iso"
|
img.format = "iso"
|
||||||
img.disc_number = 1
|
img.disc_number = 1
|
||||||
img.disc_count = 1
|
img.disc_count = 1
|
||||||
for checksum_type in ("md5", "sha1", "sha256"):
|
|
||||||
checksum_path = new_boot_iso_path + ".%sSUM" % checksum_type.upper()
|
|
||||||
checksum_value = None
|
|
||||||
if os.path.isfile(checksum_path):
|
|
||||||
checksum_value, iso_name = read_checksum_file(checksum_path)[0]
|
|
||||||
if iso_name != os.path.basename(img.path):
|
|
||||||
# a bit paranoind check - this should never happen
|
|
||||||
raise ValueError("Image name doesn't match checksum: %s" % checksum_path)
|
|
||||||
img.add_checksum(compose.paths.compose.topdir(), checksum_type=checksum_type, checksum_value=checksum_value)
|
|
||||||
img.bootable = True
|
img.bootable = True
|
||||||
img.implant_md5 = implant_md5
|
img.implant_md5 = implant_md5
|
||||||
try:
|
try:
|
||||||
|
@ -21,11 +21,10 @@ import pipes
|
|||||||
import random
|
import random
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
import koji
|
|
||||||
import productmd.treeinfo
|
import productmd.treeinfo
|
||||||
from productmd.images import Image
|
from productmd.images import Image
|
||||||
from kobo.threads import ThreadPool, WorkerThread
|
from kobo.threads import ThreadPool, WorkerThread
|
||||||
from kobo.shortcuts import run, read_checksum_file, relative_path
|
from kobo.shortcuts import run, relative_path
|
||||||
|
|
||||||
from pungi.wrappers.iso import IsoWrapper
|
from pungi.wrappers.iso import IsoWrapper
|
||||||
from pungi.wrappers.createrepo import CreaterepoWrapper
|
from pungi.wrappers.createrepo import CreaterepoWrapper
|
||||||
@ -198,7 +197,7 @@ class CreateIsoThread(WorkerThread):
|
|||||||
try:
|
try:
|
||||||
# remove incomplete ISO
|
# remove incomplete ISO
|
||||||
os.unlink(cmd["iso_path"])
|
os.unlink(cmd["iso_path"])
|
||||||
# TODO: remove jigdo & template & checksums
|
# TODO: remove jigdo & template
|
||||||
except OSError:
|
except OSError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -274,15 +273,6 @@ class CreateIsoThread(WorkerThread):
|
|||||||
img.format = "iso"
|
img.format = "iso"
|
||||||
img.disc_number = cmd["disc_num"]
|
img.disc_number = cmd["disc_num"]
|
||||||
img.disc_count = cmd["disc_count"]
|
img.disc_count = cmd["disc_count"]
|
||||||
for checksum_type in ("md5", "sha1", "sha256"):
|
|
||||||
checksum_path = cmd["iso_path"] + ".%sSUM" % checksum_type.upper()
|
|
||||||
checksum_value = None
|
|
||||||
if os.path.isfile(checksum_path):
|
|
||||||
checksum_value, iso_name = read_checksum_file(checksum_path)[0]
|
|
||||||
if iso_name != os.path.basename(img.path):
|
|
||||||
# a bit paranoind check - this should never happen
|
|
||||||
raise ValueError("Image name doesn't match checksum: %s" % checksum_path)
|
|
||||||
img.add_checksum(compose.paths.compose.topdir(), checksum_type=checksum_type, checksum_value=checksum_value)
|
|
||||||
img.bootable = cmd["bootable"]
|
img.bootable = cmd["bootable"]
|
||||||
img.implant_md5 = iso.get_implanted_md5(cmd["iso_path"])
|
img.implant_md5 = iso.get_implanted_md5(cmd["iso_path"])
|
||||||
try:
|
try:
|
||||||
|
@ -3,18 +3,16 @@
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
import pipes
|
|
||||||
|
|
||||||
from pungi.util import get_arch_variant_data
|
from pungi.util import get_arch_variant_data
|
||||||
from pungi.phases.base import PhaseBase
|
from pungi.phases.base import PhaseBase
|
||||||
from pungi.linker import Linker
|
from pungi.linker import Linker
|
||||||
from pungi.paths import translate_path
|
from pungi.paths import translate_path
|
||||||
from pungi.wrappers.kojiwrapper import KojiWrapper
|
from pungi.wrappers.kojiwrapper import KojiWrapper
|
||||||
from pungi.wrappers.iso import IsoWrapper
|
|
||||||
from kobo.shortcuts import run, read_checksum_file
|
|
||||||
from kobo.threads import ThreadPool, WorkerThread
|
from kobo.threads import ThreadPool, WorkerThread
|
||||||
from productmd.images import Image
|
from productmd.images import Image
|
||||||
|
|
||||||
|
|
||||||
class ImageBuildPhase(PhaseBase):
|
class ImageBuildPhase(PhaseBase):
|
||||||
"""class for wrapping up koji image-build"""
|
"""class for wrapping up koji image-build"""
|
||||||
name = "image_build"
|
name = "image_build"
|
||||||
@ -69,7 +67,6 @@ class CreateImageBuildThread(WorkerThread):
|
|||||||
mounts = [compose.topdir]
|
mounts = [compose.topdir]
|
||||||
if "mount" in cmd:
|
if "mount" in cmd:
|
||||||
mounts.append(cmd["mount"])
|
mounts.append(cmd["mount"])
|
||||||
runroot = compose.conf.get("runroot", False)
|
|
||||||
log_file = compose.paths.log.log_file(cmd["image_conf"]["arches"], "imagebuild-%s-%s-%s" % (cmd["image_conf"]["arches"], cmd["image_conf"]["variant"], cmd['image_conf']['format'].replace(",","-")))
|
log_file = compose.paths.log.log_file(cmd["image_conf"]["arches"], "imagebuild-%s-%s-%s" % (cmd["image_conf"]["arches"], cmd["image_conf"]["variant"], cmd['image_conf']['format'].replace(",","-")))
|
||||||
msg = "Creating %s image (arch: %s, variant: %s)" % (cmd["image_conf"]["format"].replace(",","-"), cmd["image_conf"]["arches"], cmd["image_conf"]["variant"])
|
msg = "Creating %s image (arch: %s, variant: %s)" % (cmd["image_conf"]["format"].replace(",","-"), cmd["image_conf"]["arches"], cmd["image_conf"]["variant"])
|
||||||
self.pool.log_info("[BEGIN] %s" % msg)
|
self.pool.log_info("[BEGIN] %s" % msg)
|
||||||
@ -113,34 +110,6 @@ class CreateImageBuildThread(WorkerThread):
|
|||||||
image_dest = os.path.join(cmd["image_dir"], os.path.basename(image_info['filename']))
|
image_dest = os.path.join(cmd["image_dir"], os.path.basename(image_info['filename']))
|
||||||
linker.link(image_info['filename'], image_dest, link_type=cmd["link_type"])
|
linker.link(image_info['filename'], image_dest, link_type=cmd["link_type"])
|
||||||
|
|
||||||
iso = IsoWrapper(logger=compose._logger) # required for checksums only
|
|
||||||
checksum_cmd = ["cd %s" % pipes.quote(os.path.dirname(image_dest))]
|
|
||||||
checksum_cmd.extend(iso.get_checksum_cmds(os.path.basename(image_dest)))
|
|
||||||
checksum_cmd = " && ".join(checksum_cmd)
|
|
||||||
|
|
||||||
if runroot:
|
|
||||||
packages = ["coreutils", "genisoimage", "isomd5sum", "jigdo", "strace", "lsof"]
|
|
||||||
runroot_channel = compose.conf.get("runroot_channel", None)
|
|
||||||
runroot_tag = compose.conf["runroot_tag"]
|
|
||||||
koji_cmd = koji_wrapper.get_runroot_cmd(runroot_tag, cmd["image_conf"]["arches"], checksum_cmd, channel=runroot_channel, use_shell=True, task_id=True, packages=packages, mounts=mounts)
|
|
||||||
|
|
||||||
# avoid race conditions?
|
|
||||||
# Kerberos authentication failed: Permission denied in replay cache code (-1765328215)
|
|
||||||
time.sleep(num * 3)
|
|
||||||
|
|
||||||
output = koji_wrapper.run_runroot_cmd(koji_cmd, log_file=log_file)
|
|
||||||
if output["retcode"] != 0:
|
|
||||||
self.fail(compose, cmd)
|
|
||||||
raise RuntimeError("Runroot task failed: %s. See %s for more details." % (output["task_id"], log_file))
|
|
||||||
|
|
||||||
else:
|
|
||||||
# run locally
|
|
||||||
try:
|
|
||||||
run(checksum_cmd, show_cmd=True, logfile=log_file)
|
|
||||||
except:
|
|
||||||
self.fail(compose, cmd)
|
|
||||||
raise
|
|
||||||
|
|
||||||
# Update image manifest
|
# Update image manifest
|
||||||
img = Image(compose.im)
|
img = Image(compose.im)
|
||||||
img.type = image_info['type']
|
img.type = image_info['type']
|
||||||
@ -151,14 +120,6 @@ class CreateImageBuildThread(WorkerThread):
|
|||||||
img.arch = cmd["image_conf"]["arches"] # arches should be always single arch
|
img.arch = cmd["image_conf"]["arches"] # arches should be always single arch
|
||||||
img.disc_number = 1 # We don't expect multiple disks
|
img.disc_number = 1 # We don't expect multiple disks
|
||||||
img.disc_count = 1
|
img.disc_count = 1
|
||||||
for checksum_type in ("md5", "sha1", "sha256"):
|
|
||||||
checksum_path = image_dest + ".%sSUM" % checksum_type.upper()
|
|
||||||
checksum_value = None
|
|
||||||
if os.path.isfile(checksum_path):
|
|
||||||
checksum_value, image_name = read_checksum_file(checksum_path)[0]
|
|
||||||
if image_name != os.path.basename(img.path):
|
|
||||||
raise ValueError("Image name doesn't match checksum: %s" % checksum_path)
|
|
||||||
img.add_checksum(compose.paths.compose.topdir(), checksum_type=checksum_type, checksum_value=checksum_value)
|
|
||||||
img.bootable = False
|
img.bootable = False
|
||||||
# named keywords due portability (old productmd used arch, variant ... while new one uses variant, arch
|
# named keywords due portability (old productmd used arch, variant ... while new one uses variant, arch
|
||||||
compose.im.add(variant=cmd["image_conf"]["variant"].uid, arch=cmd["image_conf"]["arches"], image=img)
|
compose.im.add(variant=cmd["image_conf"]["variant"].uid, arch=cmd["image_conf"]["arches"], image=img)
|
||||||
|
@ -136,9 +136,6 @@ class LiveImagesPhase(PhaseBase):
|
|||||||
chdir_cmd = "cd %s" % pipes.quote(iso_dir)
|
chdir_cmd = "cd %s" % pipes.quote(iso_dir)
|
||||||
cmd["cmd"].append(chdir_cmd)
|
cmd["cmd"].append(chdir_cmd)
|
||||||
|
|
||||||
# compute md5sum, sha1sum, sha256sum
|
|
||||||
cmd["cmd"].extend(iso.get_checksum_cmds(iso_name))
|
|
||||||
|
|
||||||
# create iso manifest
|
# create iso manifest
|
||||||
cmd["cmd"].append(iso.get_manifest_cmd(iso_name))
|
cmd["cmd"].append(iso.get_manifest_cmd(iso_name))
|
||||||
|
|
||||||
@ -163,7 +160,6 @@ class CreateLiveImageThread(WorkerThread):
|
|||||||
try:
|
try:
|
||||||
# remove (possibly?) incomplete ISO
|
# remove (possibly?) incomplete ISO
|
||||||
os.unlink(cmd["iso_path"])
|
os.unlink(cmd["iso_path"])
|
||||||
# TODO: remove checksums
|
|
||||||
except OSError:
|
except OSError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -207,7 +203,7 @@ class CreateLiveImageThread(WorkerThread):
|
|||||||
for rpm_path in rpm_paths:
|
for rpm_path in rpm_paths:
|
||||||
shutil.copy2(rpm_path, cmd["wrapped_rpms_path"])
|
shutil.copy2(rpm_path, cmd["wrapped_rpms_path"])
|
||||||
|
|
||||||
# write checksum and manifest
|
# write manifest
|
||||||
run(cmd["cmd"])
|
run(cmd["cmd"])
|
||||||
|
|
||||||
self.pool.log_info("[DONE ] %s" % msg)
|
self.pool.log_info("[DONE ] %s" % msg)
|
||||||
|
@ -262,9 +262,6 @@ def rebuild_boot_iso(compose, arch, variant, package_sets):
|
|||||||
shutil.rmtree(tmp_dir)
|
shutil.rmtree(tmp_dir)
|
||||||
shutil.rmtree(mount_dir)
|
shutil.rmtree(mount_dir)
|
||||||
|
|
||||||
# .treeinfo is written after productimg phase
|
|
||||||
# -> checksums should match
|
|
||||||
# -> no need to write/modify it here
|
|
||||||
compose.log_info("[DONE ] %s" % msg)
|
compose.log_info("[DONE ] %s" % msg)
|
||||||
|
|
||||||
|
|
||||||
|
@ -206,14 +206,6 @@ class IsoWrapper(kobo.log.LoggingBase):
|
|||||||
result = line.rsplit(":")[-1].strip()
|
result = line.rsplit(":")[-1].strip()
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def get_checksum_cmds(self, iso_name, checksum_types=None):
|
|
||||||
checksum_types = checksum_types or ["md5", "sha1", "sha256"]
|
|
||||||
result = []
|
|
||||||
for checksum_type in checksum_types:
|
|
||||||
cmd = "%ssum -b %s > %s.%sSUM" % (checksum_type.lower(), pipes.quote(iso_name), pipes.quote(iso_name), checksum_type.upper())
|
|
||||||
result.append(cmd)
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_manifest_cmd(self, iso_name):
|
def get_manifest_cmd(self, iso_name):
|
||||||
return "isoinfo -R -f -i %s | grep -v '/TRANS.TBL$' | sort >> %s.manifest" % (pipes.quote(iso_name), pipes.quote(iso_name))
|
return "isoinfo -R -f -i %s | grep -v '/TRANS.TBL$' | sort >> %s.manifest" % (pipes.quote(iso_name), pipes.quote(iso_name))
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user