Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package product-builder for openSUSE:Factory checked in at 2022-12-15 19:24:20 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/product-builder (Old) and /work/SRC/openSUSE:Factory/.product-builder.new.1835 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "product-builder" Thu Dec 15 19:24:20 2022 rev:42 rq:1042919 version:1.4.12 Changes: -------- --- /work/SRC/openSUSE:Factory/product-builder/product-builder.changes 2021-09-30 23:43:35.500482865 +0200 +++ /work/SRC/openSUSE:Factory/.product-builder.new.1835/product-builder.changes 2022-12-15 19:24:24.627785004 +0100 @@ -1,0 +2,10 @@ +Wed Dec 14 12:39:26 UTC 2022 - Adrian Schröter <adr...@suse.de> + +- 1.4.12 + * RedHat media support + * SLSA provenance file support + * support to set DVD volumeid manual + * fix hybrid ISO creation + * support modulemd filtering + +------------------------------------------------------------------- Old: ---- product-builder-1.4.6.obscpio New: ---- product-builder-1.4.12.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ product-builder.spec ++++++ --- /var/tmp/diff_new_pack.4B5yVg/_old 2022-12-15 19:24:25.159788031 +0100 +++ /var/tmp/diff_new_pack.4B5yVg/_new 2022-12-15 19:24:25.163788054 +0100 @@ -1,7 +1,7 @@ # # spec file for package product-builder # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -23,7 +23,7 @@ Name: product-builder Conflicts: kiwi Conflicts: kiwi-instsource -Version: 1.4.6 +Version: 1.4.12 Release: 0 Provides: kiwi-schema = 6.2 Source: product-builder-%version.tar.xz ++++++ _service ++++++ --- /var/tmp/diff_new_pack.4B5yVg/_old 2022-12-15 19:24:25.203788281 +0100 +++ /var/tmp/diff_new_pack.4B5yVg/_new 2022-12-15 19:24:25.203788281 +0100 @@ -1,8 +1,8 @@ <services> <service name="obs_scm" mode="manual"> <param name="url">https://github.com/openSUSE/product-builder.git</param> - <param name="revision">1.4.6</param> - <param name="version">1.4.6</param> + <param name="revision">1.4.12</param> + <param name="version">1.4.12</param> <param name="scm">git</param> <param name="extract">rpm/product-builder.spec</param> </service> ++++++ product-builder-1.4.6.obscpio -> product-builder-1.4.12.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/product-builder-1.4.6/modules/KIWICollect.pm new/product-builder-1.4.12/modules/KIWICollect.pm --- old/product-builder-1.4.6/modules/KIWICollect.pm 2021-09-20 15:12:29.000000000 +0200 +++ new/product-builder-1.4.12/modules/KIWICollect.pm 2022-05-03 09:46:16.000000000 +0200 @@ -304,6 +304,7 @@ $attr{source} = $package -> getSourceLocation(); $attr{script} = $package -> getScriptPath(); $attr{medium} = $package -> getMediaID(); + $attr{module} = $package -> getModule(); $instPacks{$name} = \%attr; } $this->logMsg('I', "KIWICollect::Init: querying instsource package list"); @@ -764,13 +765,19 @@ my $volid_maxlen = 32; my $vname = $name; $vname =~ s/-Media//; - $vname =~ s/-Build// if length($vname) > ($volid_maxlen - 4); + $vname =~ s/-Build\d\S+// if length($vname) > ($volid_maxlen - 4); + if (defined($this->{m_proddata}->getVar("VOLUME_ID"))) { + $vname = $this->{m_proddata}->getVar("VOLUME_ID"); + } my $vid = substr($vname,0,($volid_maxlen)); if ($this->{m_proddata}->getVar("MULTIPLE_MEDIA", "true") eq "true") { - $vid = sprintf( - "%s.%03d", - substr($vname,0,($volid_maxlen - 4)), $cd - ); + # we do not extend the volume id on the first medium if manualy specified + if (!defined($this->{m_proddata}->getVar("VOLUME_ID")) || $cd > 1) { + $vid = sprintf( + "%s.%03d", + substr($vname,0,($volid_maxlen - 4)), $cd + ); + } } my $attr = "-r"; # RockRidge $attr .= " -pad"; # pad image by 150 sectors - needed for Linux @@ -797,7 +804,7 @@ ); # Just the first media is usually bootable at SUSE my $is_bootable = 0; - if(-d "$this->{m_basesubdir}->{$cd}/boot") { + if(-d "$this->{m_basesubdir}->{$cd}/boot" || -d "$this->{m_basesubdir}->{$cd}/isolinux") { if(!$iso->callBootMethods()) { my $msg = 'Creating boot methods failed, medium maybe ' . 'not be bootable'; @@ -1020,6 +1027,8 @@ # need to get added in addition in any case) my $found_package; my $found_modularity_package; + my @requested_modules; + @requested_modules = split(/\s*,\s*/, $packOptions->{module}) if $packOptions->{module}; PACKKEY: for my $packKey(@sorted_keys) { @@ -1029,10 +1038,22 @@ $this->logMsg('I', " check $packKey "); } - next if ($found_package && !%require_version); - my $arch; my $packPointer = $poolPackages->{$packKey}; + my $modularity_context = $packPointer->{modularity_context}; + + next if ($found_package && !$modularity_context && !%require_version); + + if (@requested_modules) { + if ($requested_modules[0] eq 'none') { + next if $modularity_context; + } elsif ($requested_modules[0] eq 'all') { + next unless $modularity_context; + } else { + next unless $modularity_context && grep {"$modularity_context:" =~ /^\Q$_\E:/} @requested_modules; + } + } + for my $checkarch(@fallbacklist) { if ($this->{m_debug} >= 5) { $this->logMsg('I', " check architecture $checkarch "); @@ -1084,12 +1105,14 @@ # process package my $medium = $packOptions->{'medium'} || 1; - $packOptions->{$requestedArch}->{'newfile'} = + my $name_base = "$packName-" .$packPointer->{'version'} .'-' .$packPointer->{'release'} - .".$packPointer->{'arch'}.rpm"; + .".$packPointer->{'arch'}"; + $packOptions->{$requestedArch}->{'newfile'} = $name_base . ".rpm"; + $packOptions->{$requestedArch}->{'slsa_file'} = $name_base . ".slsa_provenance.json"; $packOptions->{$requestedArch}->{'newpath'} = "$this->{m_basesubdir}->{$medium}" ."/$packPointer->{'arch'}"; @@ -1103,22 +1126,20 @@ } # link it: my $item = $packOptions->{$requestedArch}->{'newpath'}."/$packOptions->{$requestedArch}->{'newfile'}"; - if ((! -e $item) && (! link ( - $packPointer->{'localfile'}, - "$packOptions->{$requestedArch}->{'newpath'}" - ."/$packOptions->{$requestedArch}->{'newfile'}"))) { - my $msg = " linking file $packPointer->{'localfile'} " - . "to $packOptions->{$requestedArch}->{'newpath'}/" - . "$packOptions->{$requestedArch}->{'newfile'} " - . 'failed'; + my $item_slsa = $packOptions->{$requestedArch}->{'newpath'}."/$packOptions->{$requestedArch}->{'slsa_file'}"; + if ((! -e $item) && (! link($packPointer->{'localfile'}, $item))) { + my $msg = " linking file $packPointer->{'localfile'} to $item failed"; $this->logMsg('E', $msg); } else { - my $lnkTarget = - $packOptions->{$requestedArch}->{'newpath'} - . "/$packOptions->{$requestedArch}->{'newfile'}"; $this->addToTrackFile( - $packName, $packPointer, $medium, $lnkTarget + $packName, $packPointer, $medium, $item ); + if ($packPointer->{'slsa_uri'} && ! -e $item_slsa) { + if (! link($packPointer->{'slsa_uri'}, $item_slsa)) { + my $msg = " linking file $packPointer->{'slsa_uri'} to $item_slsa failed: $!"; + $this->logMsg('E', $msg); + } + } if ($this->{m_debug} >= 4) { my $lnkTarget = $packOptions->{$requestedArch}->{'newpath'}; my $msg = " linked file $packPointer->{'localfile'}" @@ -1185,7 +1206,7 @@ } } - if ($packPointer->{modularity_context}) { + if ($modularity_context) { $found_modularity_package = 1; } else { $found_package = 1; @@ -1616,6 +1637,7 @@ qx(cp -a $tmp/usr/lib/skelcd/CD$_/* $this->{m_basesubdir}->{$_}); # .treeinfo for virt-installer: qx(cp -a $tmp/usr/lib/skelcd/CD$_/.treeinfo $this->{m_basesubdir}->{$_}) if (-f "$tmp/usr/lib/skelcd/CD$_/.treeinfo"); + qx(cp -a $tmp/usr/lib/skelcd/CD$_/.discinfo $this->{m_basesubdir}->{$_}) if (-f "$tmp/usr/lib/skelcd/CD$_/.discinfo"); $this->logMsg('I', "Unpack CD$_"); $packageFound = 1; } elsif (-d "$tmp/CD$_" @@ -1631,6 +1653,7 @@ qx(cp -a $tmp/usr/lib/skelcd/NET/* $this->{m_basesubdir}->{$_}); # .treeinfo for virt-installer: qx(cp -a $tmp/usr/lib/skelcd/NET/.treeinfo $this->{m_basesubdir}->{$_}) if (-f "$tmp/usr/lib/skelcd/NET/.treeinfo"); + qx(cp -a $tmp/usr/lib/skelcd/NET/.discinfo $this->{m_basesubdir}->{$_}) if (-f "$tmp/usr/lib/skelcd/NET/.discinfo"); $this->logMsg('I', "Unpack NET"); $packageFound = 1; } else { @@ -1824,6 +1847,8 @@ $count_files++; # skip all files without rpm suffix next URI unless( $uri =~ /\.rpm$/); + my $slsa_uri = $uri; + $slsa_uri =~ s/\.rpm$/.slsa_provenance.json/; if ($this->{m_debug} >= 1) { # show progress every 30 seconds if ($last_progress_time < time()) { @@ -1885,6 +1910,7 @@ $package->{'arch'} = $arch; $package->{'repo'} = $this->{m_repos}->{$r}; $package->{'localfile'} = $uri; + $package->{'slsa_uri'} = $slsa_uri if -e $slsa_uri; $package->{'disturl'} = $flags{'DISTURL'}[0]; $package->{'license'} = $flags{'LICENSE'}[0]; $package->{'epoch'} = $flags{'EPOCH'}[0]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/product-builder-1.4.6/modules/KIWIIsoLinux.pm new/product-builder-1.4.12/modules/KIWIIsoLinux.pm --- old/product-builder-1.4.6/modules/KIWIIsoLinux.pm 2021-09-20 15:12:29.000000000 +0200 +++ new/product-builder-1.4.12/modules/KIWIIsoLinux.pm 2022-05-03 09:46:16.000000000 +0200 @@ -80,6 +80,7 @@ my $sort; my $ldir; my $tool; + my $tool_type; my $check = 0; #========================================== # create log object if not done @@ -102,16 +103,26 @@ my $genTool = $locator -> getExecPath('genisoimage'); if ($genTool && -x $genTool) { $tool = $genTool; + $tool_type = "genisoimage"; } else { my $mkTool = $locator -> getExecPath('mkisofs'); if ($mkTool && -x $mkTool) { $tool = $mkTool; + $tool_type = "mkisofs"; } else { $kiwi -> error ("No ISO creation tool found"); $kiwi -> failed (); return; } } + #========================================== + # Hybrid mode? + #------------------------------------------ + my $hybrid; + if ($xml) { + my $type = $xml -> getImageType(); + $hybrid = $type -> getHybrid(); + } #======================================= # path setup for supported archs #--------------------------------------- @@ -128,9 +139,16 @@ $base{ix86}{loader} = "boot/i386/loader/isolinux.bin"; $base{ix86}{efi} = "boot/i386/efi"; # x86_64 - $base{x86_64}{boot} = "boot/x86_64"; - $base{x86_64}{loader}= "boot/x86_64/loader/isolinux.bin"; - $base{x86_64}{efi} = "boot/x86_64/efi"; + if(-f "$source/isolinux/isolinux.bin") { + $base{x86_64}{boot} = "isolinux"; + $base{x86_64}{loader}= "isolinux/isolinux.bin"; + $base{x86_64}{efi} = "images/efiboot.img"; + } + else { + $base{x86_64}{boot} = "boot/x86_64"; + $base{x86_64}{loader}= "boot/x86_64/loader/isolinux.bin"; + $base{x86_64}{efi} = "boot/x86_64/efi"; + } # ia64 $base{ia64}{boot} = "boot/ia64"; $base{ia64}{loader} = "undef"; @@ -159,7 +177,7 @@ # 1) search for legacy boot #--------------------------------------- foreach my $arch (sort keys %base) { - if (-d $source."/".$base{$arch}{boot}) { + if ($base{$arch}{boot} && -d $source."/".$base{$arch}{boot}) { if ($arch eq "x86_64") { $catalog[0] = "x86_64_legacy"; } @@ -251,11 +269,14 @@ $this -> {tmpdir} = $ldir; $this -> {catalog} = \@catalog; $this -> {tool} = $tool; + $this -> {tool_type} = $tool_type; $this -> {check} = $mediacheck; $this -> {gdata} = $global -> getKiwiConfig(); $this -> {cmdL} = $cmdL; + $this -> {hybrid} = $hybrid; $this -> {xml} = $xml; $this -> {magicID} = '7984fc91-a43f-4e45-bf27-6d3aa08b24cf'; + $this -> {media_type} = -f "$source/.discinfo" ? 'rh' : 'suse'; return $this; } @@ -281,16 +302,19 @@ my $this = shift; my $arch = shift; my %base = %{$this->{base}}; - my $para = $this -> {params}; - my $sort = $this -> createLegacySortFile ("x86_64"); my $boot = $base{$arch}{boot}; my $loader= $base{$arch}{loader}; - $para.= " -sort $sort" if $sort; + my $para = $this -> {params}; + + $para.= $this -> createSortFile ($arch); + $para.= $this -> prepare_for_hybrid (); $para.= " -no-emul-boot -boot-load-size 4 -boot-info-table"; $para.= " -b $loader -c $boot/boot.catalog"; $para.= " -hide $boot/boot.catalog -hide-joliet $boot/boot.catalog"; $this -> {params} = $para; + $this -> createISOLinuxConfig ($boot); + return $this; } @@ -301,19 +325,23 @@ my $this = shift; my $arch = shift; my %base = %{$this->{base}}; - my $para = $this -> {params}; - my $sort = $this -> createLegacySortFile ("ix86"); my $boot = $base{$arch}{boot}; my $loader= $base{$arch}{loader}; - $para.= " -sort $sort" if $sort; + my $para = $this -> {params}; + + $para.= $this -> createSortFile ($arch); + $para.= $this -> prepare_for_hybrid (); $para.= " -no-emul-boot -boot-load-size 4 -boot-info-table"; $para.= " -b $loader -c $boot/boot.catalog"; $para.= " -hide $boot/boot.catalog -hide-joliet $boot/boot.catalog"; $this -> {params} = $para; + $this -> createISOLinuxConfig ($boot); + return $this; } + #========================================== # x86_64_efi #------------------------------------------ @@ -321,26 +349,19 @@ my $this = shift; my $arch = shift; my %base = %{$this->{base}}; - my $para = $this -> {params}; - my $magicID= $this -> {magicID}; my $boot = $base{$arch}{boot}; my $loader= $base{$arch}{efi}; - my $sort = $this -> createLegacySortFile ("x86_64"); - my $src = $this -> {source}; - KIWIQX::qxx ("echo $src/boot/$arch/efi 1000001 >> $sort"); - #========================================== - # add end-of-header marker - #------------------------------------------ - KIWIQX::qxx ("echo $magicID > ".$this->{tmpdir}."/glump"); - KIWIQX::qxx ("echo ".$this->{tmpdir}."/glump 1000000 >> $sort") if $sort; - $para.= " -hide glump -hide-joliet glump"; - $para.= " -sort $sort" if $sort; + my $para = $this -> {params}; + + $para.= $this -> createSortFile ($arch); + $para.= $this -> prepare_for_hybrid (); $para.= " -eltorito-alt-boot"; - $para.= " -eltorito-platform efi"; + $para.= " -eltorito-platform efi" if $this->{tool_type} eq "mkisofs"; $para.= " -no-emul-boot"; $para.= " -boot-load-size ".$this->block_size($this->{source}."/".$loader); - $para.= " -b $loader"; + $para.= ($this->{tool_type} eq "mkisofs" ? " -b " : " -e ") . $loader; $this -> {params} = $para; + return $this; } @@ -351,16 +372,19 @@ my $this = shift; my $arch = shift; my %base = %{$this->{base}}; - my $para = $this -> {params}; my $boot = $base{$arch}{boot}; my $loader= $base{$arch}{efi}; + my $para = $this -> {params}; + $para.= $this -> createSortFile ($arch); + $para.= $this -> prepare_for_hybrid (); $para.= " -eltorito-alt-boot"; - $para.= " -eltorito-platform efi"; + $para.= " -eltorito-platform efi" if $this->{tool_type} eq "mkisofs"; $para.= " -no-emul-boot"; $para.= " -boot-load-size ".$this->block_size($this->{source}."/".$loader); - $para.= " -b $loader"; + $para.= ($this->{tool_type} eq "mkisofs" ? " -b " : " -e ") . $loader; $this -> {params} = $para; + return $this; } @@ -371,19 +395,19 @@ my $this = shift; my $arch = shift; my %base = %{$this->{base}}; - my $para = $this -> {params}; my $boot = $base{$arch}{boot}; my $loader= $base{$arch}{efi}; - my $sort = $this -> createLegacySortFile ("ia64"); + my $para = $this -> {params}; + $para.= $this -> createSortFile ($arch); + $para.= $this -> prepare_for_hybrid (); $para.= " -no-emul-boot"; $para.= " -boot-load-size ".$this->block_size($this->{source}."/".$loader); - $para.= " -sort $sort" if $sort; $para.= " -b $loader"; $para.= " -c $boot/boot.catalog"; $para.= " -hide $boot/boot.catalog -hide-joliet $boot/boot.catalog"; - $this -> {params} = $para; + return $this; } @@ -394,14 +418,18 @@ my $this = shift; my $arch = shift; my %base = %{$this->{base}}; - my $para = $this -> {params}; my $boot = $base{$arch}{boot}; my $ikr = $this -> createS390CDLoader($boot); + my $para = $this -> {params}; + + # s390 ISOs additionally have an x86_64 boot setup - this will trigger hybrid mode + $para.= " -eltorito-alt-boot"; $para.= " -hide $boot/boot.catalog -hide-joliet $boot/boot.catalog"; $para.= " -no-emul-boot"; $para.= " -b $ikr"; $this -> {params} = $para; + return $this; } @@ -412,14 +440,18 @@ my $this = shift; my $arch = shift; my %base = %{$this->{base}}; - my $para = $this -> {params}; my $boot = $base{$arch}{boot}; my $ikr = $this -> createS390CDLoader($boot); + my $para = $this -> {params}; + + # s390x ISOs additionally have an x86_64 boot setup - this will trigger hybrid mode + $para.= " -eltorito-alt-boot"; $para.= " -hide $boot/boot.catalog -hide-joliet $boot/boot.catalog"; $para.= " -no-emul-boot"; $para.= " -b $ikr"; $this -> {params} = $para; + return $this; } @@ -430,10 +462,12 @@ my $this = shift; my $arch = shift; my %base = %{$this->{base}}; - my $para = $this -> {params}; my $src = $this -> {source}; my $boot = $base{$arch}{boot}; my $volid = $this -> createVolumeID(); + my $para = $this -> {params}; + + # ppc64 doesn't need an extra isohybrid call $para.= " -chrp-boot"; $para.= " -hfs-bless $src/$boot/grub2-ieee1275"; @@ -446,18 +480,20 @@ $para.= " -part"; $para.= " -U"; $this -> {params} = $para; + return $this; } sub ppc64le_default { my $this = shift; my $arch = shift; - my %base = %{$this->{base}}; - my $para = $this -> {params}; my $src = $this -> {source}; my $boot = $base{$arch}{boot}; my $volid = $this -> createVolumeID(); + my $para = $this -> {params}; + + # ppc64le doesn't need an extra isohybrid call $para.= " -chrp-boot"; $para.= " -hfs-bless $src/$boot/grub2-ieee1275"; @@ -466,6 +502,7 @@ $para.= " -part"; $para.= " -U"; $this -> {params} = $para; + return $this; } @@ -476,26 +513,19 @@ my $this = shift; my $arch = shift; my %base = %{$this->{base}}; - my $para = $this -> {params}; - my $magicID= $this -> {magicID}; my $boot = $base{$arch}{boot}; my $loader= $base{$arch}{efi}; - my $sort = $this -> createLegacySortFile ("aarch64"); - my $src = $this -> {source}; - KIWIQX::qxx ("echo $src/boot/$arch/efi 1000001 >> $sort"); - #========================================== - # add end-of-header marker - #------------------------------------------ - KIWIQX::qxx ("echo $magicID > ".$this->{tmpdir}."/glump"); - KIWIQX::qxx ("echo ".$this->{tmpdir}."/glump 1000000 >> $sort") if $sort; - $para.= " -hide glump -hide-joliet glump"; - $para.= " -sort $sort" if $sort; + my $para = $this -> {params}; + + $para.= $this -> createSortFile ($arch); + $para.= $this -> prepare_for_hybrid (); $para.= " -no-emul-boot"; # do not add -boot-load-size 1 here - $para.= " -b $loader"; + $para.= ($this->{tool_type} eq "mkisofs" ? " -b " : " -e ") . $loader; $para.= " -c $boot/boot.catalog"; $para.= " -hide $boot/boot.catalog -hide-joliet $boot/boot.catalog"; $this -> {params} = $para; + return $this; } @@ -506,26 +536,19 @@ my $this = shift; my $arch = shift; my %base = %{$this->{base}}; - my $para = $this -> {params}; - my $magicID= $this -> {magicID}; my $boot = $base{$arch}{boot}; my $loader= $base{$arch}{efi}; - my $sort = $this -> createLegacySortFile ("armv7l"); - my $src = $this -> {source}; - KIWIQX::qxx ("echo $src/boot/$arch/efi 1000001 >> $sort"); - #========================================== - # add end-of-header marker - #------------------------------------------ - KIWIQX::qxx ("echo $magicID > ".$this->{tmpdir}."/glump"); - KIWIQX::qxx ("echo ".$this->{tmpdir}."/glump 1000000 >> $sort") if $sort; - $para.= " -hide glump -hide-joliet glump"; - $para.= " -sort $sort" if $sort; + my $para = $this -> {params}; + + $para.= $this -> createSortFile ($arch); + $para.= $this -> prepare_for_hybrid (); $para.= " -no-emul-boot"; # do not add -boot-load-size 1 here $para.= " -b $loader"; $para.= " -c $boot/boot.catalog"; $para.= " -hide $boot/boot.catalog -hide-joliet $boot/boot.catalog"; $this -> {params} = $para; + return $this; } @@ -536,25 +559,19 @@ my $this = shift; my $arch = shift; my %base = %{$this->{base}}; - my $para = $this -> {params}; - my $magicID= $this -> {magicID}; my $boot = $base{$arch}{boot}; my $loader= $base{$arch}{efi}; - my $sort = $this -> createLegacySortFile ("riscv64"); - my $src = $this -> {source}; - KIWIQX::qxx ("echo $src/boot/$arch/efi 1000001 >> $sort"); - #========================================== - # add end-of-header marker - #------------------------------------------ - KIWIQX::qxx ("echo $magicID > ".$this->{tmpdir}."/glump"); - KIWIQX::qxx ("echo ".$this->{tmpdir}."/glump 1000000 >> $sort") if $sort; - $para.= " -sort $sort" if $sort; + my $para = $this -> {params}; + + $para.= $this -> createSortFile ($arch); + $para.= $this -> prepare_for_hybrid (); $para.= " -no-emul-boot"; # do not add -boot-load-size 1 here $para.= " -b $loader"; $para.= " -c $boot/boot.catalog"; $para.= " -hide $boot/boot.catalog -hide-joliet $boot/boot.catalog"; $this -> {params} = $para; + return $this; } @@ -585,9 +602,11 @@ } #========================================== -# createLegacySortFile +# createSortFile #------------------------------------------ -sub createLegacySortFile { +sub createSortFile { + # Create sort file for mkisofs and return a command line parameter + # suitable for mkisofs. my $this = shift; my $arch = shift; my $kiwi = $this->{kiwi}; @@ -596,30 +615,29 @@ my $sort = $this->{tmpfile}; my $ldir = $this->{tmpdir}; my $FD; - if (! -d $src."/".$base{$arch}{boot}) { - return; - } - my @list = (); - my $wref = $this -> __generateWanted (\@list); + + return "" if ! -d $src."/".$base{$arch}{boot}; + if (! open $FD, '>', "$sort") { $kiwi -> error ("Failed to open sort file: $!"); $kiwi -> failed (); $this -> cleanISO(); - return; + return ""; } - if ($arch ne "aarch64" && $arch ne "armv7l" && $arch ne "riscv64") { - find ({wanted => $wref,follow => 0 },$src."/".$base{$arch}{boot}."/loader"); - } - print $FD "$ldir/".$base{$arch}{boot}."/boot.catalog 3"."\n"; - print $FD $base{$arch}{boot}."/boot.catalog 3"."\n"; - print $FD "$src/".$base{$arch}{boot}."/boot.catalog 3"."\n"; - foreach my $file (@list) { - print $FD "$file 1"."\n"; + + if ($base{$arch}{loader}) { + print $FD "$src/$base{$arch}{loader} 2\n"; + (my $loader_dir = $base{$arch}{loader}) =~ s#/[^/]+$##; + print $FD "$src/$loader_dir 1\n"; } - print $FD $src."/".$base{$arch}{boot}."/loader/isolinux.bin 2"."\n"; + + print $FD "$src/$base{$arch}{efi} 1000001\n" if $base{$arch}{efi}; + print $FD "$src/$base{$arch}{boot}/boot.catalog 3\n"; + print $FD "$ldir/$base{$arch}{boot}/boot.catalog 3\n"; + print $FD "$ldir/glump 1000000\n"; close $FD; - $this->{sortfile} = $sort; - return $sort; + + return " -sort $sort"; } #========================================== @@ -837,6 +855,10 @@ my $boot = shift; my $kiwi = $this -> {kiwi}; my $src = $this -> {source}; + + # standard location, isolinux-config not needed + return $this if -f "$src/isolinux/isolinux.bin"; + my $isox = "/usr/bin/isolinux-config"; if (! -x $isox) { $kiwi -> error ("Can't find isolinux-config binary"); @@ -957,11 +979,11 @@ my $cmdL = $this -> {cmdL}; my $xml = $this -> {xml}; my $magicID = $this -> {magicID}; + my $hybrid = $this -> {hybrid}; my $firmware = 'efi'; my $ldir_cnt = 0; my %type; my $cmdln; - my $hybrid; #========================================== # Lookup firmware setup #------------------------------------------ @@ -971,7 +993,6 @@ if ($xmlFirmWare) { $firmware = $xmlFirmWare; } - $hybrid = $type -> getHybrid(); } #========================================== # check for pre bootloader install @@ -1002,6 +1023,10 @@ #========================================== # Call mkisofs first stage #------------------------------------------ + # log sort file + $kiwi -> info ("[I] Sort file $this->{tmpfile}:"); + $kiwi -> info (" $_") for (`cat $this->{tmpfile}`); + if ($this -> isEmptyDir ($ldir)) { $cmdln = "$prog $para -o $dest $src 2>&1"; } else { @@ -1145,10 +1170,22 @@ my $dest = $this -> {dest}; my $check= $this -> {check}; my $data; - if (defined $this->{check}) { - $data = KIWIQX::qxx ("tagmedia --digest sha256 --check --pad 150 $dest 2>&1"); - } else { - $data = KIWIQX::qxx ("tagmedia --digest sha256 $dest 2>&1"); + if ($this->{media_type} eq 'rh') { + $data = KIWIQX::qxx ("tagmedia --digest md5 --style rh $dest 2>&1"); + my $code = $? >> 8; + if ($code != 0) { + $kiwi -> error ("Failed to call tagmedia: $data"); + $kiwi -> failed (); + return; + } + $data = KIWIQX::qxx ("tagmedia --import-signature /dev/null $dest 2>&1"); + } + else { + if (defined $this->{check}) { + $data = KIWIQX::qxx ("tagmedia --digest sha256 --check --pad 150 $dest 2>&1"); + } else { + $data = KIWIQX::qxx ("tagmedia --digest sha256 $dest 2>&1"); + } } my $code = $? >> 8; if ($code != 0) { @@ -1160,6 +1197,24 @@ } #========================================== +# prepare_for_hybrid +#------------------------------------------ +sub prepare_for_hybrid { + # Create file with magic id and return additional mkisofs options needed + # for hybrid mode. + my $this = shift; + my $magicID = $this -> {magicID}; + + if ($this->{hybrid}) { + KIWIQX::qxx ("echo $magicID > $this->{tmpdir}/glump"); + return " -hide glump -hide-joliet glump"; + } + + return ""; +} + + +#========================================== # createHybrid #------------------------------------------ sub createHybrid { @@ -1232,7 +1287,10 @@ #========================================== # Create partition table on iso #------------------------------------------ - my $cmd = "$isoHybrid $offsetOpt $offset"; + my $cmd = $isoHybrid; + if ($this->{media_type} eq 'suse') { + $cmd .= " $offsetOpt $offset"; + } if ($mbrid) { $cmd.= " $idOpt $mbrid $typeOpt 0x83"; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/product-builder-1.4.6/modules/KIWIRepoMetaHandler.pm new/product-builder-1.4.12/modules/KIWIRepoMetaHandler.pm --- old/product-builder-1.4.6/modules/KIWIRepoMetaHandler.pm 2021-09-20 15:12:29.000000000 +0200 +++ new/product-builder-1.4.12/modules/KIWIRepoMetaHandler.pm 2022-05-03 09:46:16.000000000 +0200 @@ -160,7 +160,7 @@ my $this = shift; my $retval = 0; my $file = shift; - if ($file =~ m{^.*/[a-zA-Z_-]+$}) { + if ($file =~ m{^.*/[a-zA-Z0-9_-]+$}) { $file .= ".pm"; } if (not(defined($file) and -f $file)) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/product-builder-1.4.6/modules/KIWISchema.rnc new/product-builder-1.4.12/modules/KIWISchema.rnc --- old/product-builder-1.4.6/modules/KIWISchema.rnc 2021-09-20 15:12:29.000000000 +0200 +++ new/product-builder-1.4.12/modules/KIWISchema.rnc 2022-05-03 09:46:16.000000000 +0200 @@ -1295,6 +1295,10 @@ ## Specifies that the package with ## the given arch should be used in any case attribute onlyarch { text } + k.repopackage.module.attribute = + ## Specifies that the package must + ## come from the given module(s) + attribute module { text } k.repopackage.medium.attribute = ## Specifies that the package will be put ## to the specific medium number (CD1, DVD7, ...) @@ -1308,6 +1312,7 @@ k.repopackage.addarch.attribute? & k.repopackage.removearch.attribute? & k.repopackage.onlyarch.attribute? & + k.repopackage.module.attribute? & k.repopackage.source.attribute? & k.repopackage.script.attribute? & k.repopackage.medium.attribute? diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/product-builder-1.4.6/modules/KIWISchema.rng new/product-builder-1.4.12/modules/KIWISchema.rng --- old/product-builder-1.4.6/modules/KIWISchema.rng 2021-09-20 15:12:29.000000000 +0200 +++ new/product-builder-1.4.12/modules/KIWISchema.rng 2022-05-03 09:46:16.000000000 +0200 @@ -1647,6 +1647,12 @@ the given arch should be used in any case</a:documentation> </attribute> </define> + <define name="k.repopackage.module.attribute"> + <attribute name="module"> + <a:documentation>Specifies that the package must +come from the given module(s)</a:documentation> + </attribute> + </define> <define name="k.repopackage.medium.attribute"> <attribute name="medium"> <a:documentation>Specifies that the package will be put @@ -1679,6 +1685,9 @@ <ref name="k.repopackage.onlyarch.attribute"/> </optional> <optional> + <ref name="k.repopackage.module.attribute"/> + </optional> + <optional> <ref name="k.repopackage.source.attribute"/> </optional> <optional> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/product-builder-1.4.6/modules/KIWIXML.pm new/product-builder-1.4.12/modules/KIWIXML.pm --- old/product-builder-1.4.6/modules/KIWIXML.pm 2021-09-20 15:12:29.000000000 +0200 +++ new/product-builder-1.4.12/modules/KIWIXML.pm 2022-05-03 09:46:16.000000000 +0200 @@ -3732,6 +3732,7 @@ name => $pckgNd -> getAttribute('name'), onlyarch => $pckgNd -> getAttribute('onlyarch'), removearch => $pckgNd -> getAttribute('removearch'), + module => $pckgNd -> getAttribute('module'), script => $pckgNd -> getAttribute('script'), source => $pckgNd -> getAttribute('source') ); @@ -3869,6 +3870,7 @@ name => $pkgNd -> getAttribute('name'), onlyarch => $pkgNd -> getAttribute('onlyarch'), removearch => $pkgNd -> getAttribute('removearch'), + module => $pkgNd -> getAttribute('module'), script => $pkgNd -> getAttribute('script'), source => $pkgNd -> getAttribute('source') ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/product-builder-1.4.6/modules/KIWIXMLProductPackageData.pm new/product-builder-1.4.12/modules/KIWIXMLProductPackageData.pm --- old/product-builder-1.4.6/modules/KIWIXMLProductPackageData.pm 2021-09-20 15:12:29.000000000 +0200 +++ new/product-builder-1.4.12/modules/KIWIXMLProductPackageData.pm 2022-05-03 09:46:16.000000000 +0200 @@ -49,6 +49,7 @@ medium onlyarch removearch + module script source ); @@ -65,6 +66,7 @@ $this->{medium} = $init->{medium}; $this->{onlyarch} = $init->{onlyarch}; $this->{removearch} = $init->{removearch}; + $this->{module} = $init->{module}; $this->{script} = $init->{script}; $this->{source} = $init->{source}; return $this; @@ -129,6 +131,17 @@ } #========================================== +# getModule +#------------------------------------------ +sub getModule { + # ... + # Return the module value, if any + # --- + my $this = shift; + return $this->{module}; +} + +#========================================== # getScriptPath #------------------------------------------ sub getScriptPath { @@ -179,6 +192,10 @@ if ($rarch) { $elem -> setAttribute('removearch', $rarch); } + my $module = $this -> getModule(); + if ($module) { + $elem -> setAttribute('module', $module); + } my $script = $this -> getScriptPath(); if ($script) { $elem -> setAttribute('script', $script); ++++++ product-builder.obsinfo ++++++ --- /var/tmp/diff_new_pack.4B5yVg/_old 2022-12-15 19:24:25.403789419 +0100 +++ /var/tmp/diff_new_pack.4B5yVg/_new 2022-12-15 19:24:25.407789442 +0100 @@ -1,6 +1,5 @@ name: product-builder -version: 1.4.6 -mtime: 1632143549 -commit: 8fb531cf6023254d7809be93064b2d60952923b6 - +version: 1.4.12 +mtime: 1651563976 +commit: 141ec79eef800213fc9f05145c53ba5490eeda80