Hello community, here is the log from the commit of package build for openSUSE:Factory checked in at 2020-08-25 09:31:47 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/build (Old) and /work/SRC/openSUSE:Factory/.build.new.3399 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "build" Tue Aug 25 09:31:47 2020 rev:132 rq:828094 version:20200520 Changes: -------- --- /work/SRC/openSUSE:Factory/build/build.changes 2020-05-29 21:13:22.374333290 +0200 +++ /work/SRC/openSUSE:Factory/.build.new.3399/build.changes 2020-08-25 09:32:09.927980001 +0200 @@ -1,0 +2,32 @@ +Thu Aug 20 08:07:30 UTC 2020 - Adrian Schröter <[email protected]> + +- fix factory version in config file bsc#1170956 +- add missing ignores for Leap 15.2 bsc#1174854 +- fix sysrq handling for KVM builds +- avoid double removal of obscpio files +- docker: + * support builds using USER root statements + * proper error handling when obs-docker-support gets called as + non-root + * helm build target support + * support milestone handling +- support repo files without types set (SLE 15 SP2 zypp) +- add default substitute for system-packages:repo-creation +- Support recursive kiwi profile usage + +------------------------------------------------------------------- +Thu Jul 23 05:38:24 UTC 2020 - Frank Schreiner <[email protected]> + +- fix dependencies for Fedora 33 +- Set $YAML::XS::LoadBlessed = 0 for Appimage/Snapcraft +- add a new variable to track build time needed for ccache eviction +- create folder for ccache archive to be copied before rsync +- also package pkg-config files by default into baselibs. (bsc#1172563 etc) +- Use shorter kernel flag for mitigations +- Ignore, if shutdown behavior changed by build in z/VM +- Control disk-space consumption while creating ccache archive +- cleaning ccache +- create folders before trying to copy ccache.tar +- Genreadte .packages and .basepackages files for docker builds + +------------------------------------------------------------------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ build.spec ++++++ --- /var/tmp/diff_new_pack.GY2vPZ/_old 2020-08-25 09:32:13.875982306 +0200 +++ /var/tmp/diff_new_pack.GY2vPZ/_new 2020-08-25 09:32:13.879982307 +0200 @@ -88,6 +88,11 @@ Recommends: %{__pkg_name}-mkdrpms %endif +# With fedora 33 the POSIX module was split out of the perl +# package +BuildRequires: perl(POSIX) +Requires: perl(POSIX) + %description This package provides a script for building RPMs for SUSE Linux in a chroot environment. @@ -118,7 +123,7 @@ %endif %define initvm_arch %{_host_cpu} -%if %{_host_cpu} == "i686" +%if "%{_host_cpu}" == "i686" %define initvm_arch i586 %endif %package initvm-%{initvm_arch} ++++++ obs-build-20200520.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/Build/Appimage.pm new/obs-build-20200520/Build/Appimage.pm --- old/obs-build-20200520/Build/Appimage.pm 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/Build/Appimage.pm 2020-08-20 10:13:26.000000000 +0200 @@ -24,7 +24,7 @@ use Build::Deb; use Build::Rpm; -eval { require YAML::XS; }; +eval { require YAML::XS; $YAML::XS::LoadBlessed = 0; }; *YAML::XS::LoadFile = sub {die("YAML::XS is not available\n")} unless defined &YAML::XS::LoadFile; sub parse { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/Build/Docker.pm new/obs-build-20200520/Build/Docker.pm --- old/obs-build-20200520/Build/Docker.pm 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/Build/Docker.pm 2020-08-20 10:13:26.000000000 +0200 @@ -172,6 +172,9 @@ if ($line =~ /^#!NoSquash\s*$/) { $nosquash = 1; } + if ($line =~ /^#!Milestone:\s*(\S+)\s*$/) { + $ret->{'milestone'} = $1; + } next; } # add continuation lines @@ -289,6 +292,7 @@ $containerinfo->{'disturl'} = $disturl if defined $disturl; $containerinfo->{'version'} = $d->{'version'} if defined $d->{'version'}; $containerinfo->{'release'} = $release if defined $release; + $containerinfo->{'milestone'} = $d->{'milestone'} if defined $d->{'milestone'}; print Build::SimpleJSON::unparse($containerinfo)."\n"; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/Build/Helm.pm new/obs-build-20200520/Build/Helm.pm --- old/obs-build-20200520/Build/Helm.pm 1970-01-01 01:00:00.000000000 +0100 +++ new/obs-build-20200520/Build/Helm.pm 2020-08-20 10:13:26.000000000 +0200 @@ -0,0 +1,139 @@ +################################################################ +# +# Copyright (c) 2020 SUSE LLC +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or 3 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program (see the file COPYING); if not, write to the +# Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +# +################################################################ + +package Build::Helm; + +use strict; + +use Build::SimpleJSON; +use Digest; + +eval { require YAML::XS; $YAML::XS::LoadBlessed = 0; }; +*YAML::XS::LoadFile = sub {die("YAML::XS is not available\n")} unless defined &YAML::XS::LoadFile; + +sub verify_config { + my ($d) = @_; + die("bad config\n") unless ref($d) eq 'HASH'; + for my $k ('name', 'version') { + die("missing element '$k'\n") unless defined $d->{$k}; + die("bad element '$k'\n") unless ref($d->{$k}) eq ''; + die("empty element '$k'\n") if $d->{$k} eq ''; + die("bad element '$k'\n\n") if $d->{$k} =~ /[\/\000-\037]/; + } + die("bad name\n") if $d->{'name'} =~ /^[-\.]/; +} + +sub parse { + my ($cf, $fn) = @_; + my $d; + my $fd; + return {'error' => "$fn: $!"} unless open($fd, '<', $fn); + my @tags; + while (<$fd>) { + chomp; + next if /^\s*$/; + last unless /^\s*#/; + push @tags, split(' ', $1) if /^#!BuildTag:\s*(.*?)$/; + } + close($fd); + eval { + $d = YAML::XS::LoadFile($fn); + verify_config($d); + }; + if ($@) { + my $err = $@; + chomp $@; + return {'error' => "Failed to parse yml file: $err"}; + } + + my $res = {}; + $res->{'name'} = $d->{'name'}; + $res->{'version'} = $d->{'version'}; + my $release = $cf->{'buildrelease'}; + for (@tags) { + s/<NAME>/$d->{'name'}/g; + s/<VERSION>/$d->{'version'}/g; + s/<RELEASE>/$release/g; + } + $res->{'containertags'} = \@tags if @tags; + return $res; +} + +sub show { + my ($release, $disturl, $chart); + while (@ARGV) { + if (@ARGV > 2 && $ARGV[0] eq '--release') { + (undef, $release) = splice(@ARGV, 0, 2); + } elsif (@ARGV > 2 && $ARGV[0] eq '--disturl') { + (undef, $disturl) = splice(@ARGV, 0, 2); + } elsif (@ARGV > 2 && $ARGV[0] eq '--chart') { + (undef, $chart) = splice(@ARGV, 0, 2); + } else { + last; + } + } + my ($fn, $field) = @ARGV; + my $d = {}; + $d->{'buildrelease'} = $release if defined $release; + $d = parse({}, $fn) if $fn; + die("$d->{'error'}\n") if $d->{'error'}; + + if ($field eq 'helminfo') { + my $config_yaml = ''; + my $fd; + die("$fn: $!\n") unless open($fd, '<', $fn); + 1 while sysread($fd, $config_yaml, 8192, length($config_yaml)); + close($fd); + my $config = YAML::XS::Load($config_yaml); + verify_config($config); + my $config_json = Build::SimpleJSON::unparse($config)."\n"; + my $helminfo = {}; + $helminfo->{'name'} = $d->{'name'}; + $helminfo->{'version'} = $d->{'version'}; + $helminfo->{'release'} = $release if $release; + $helminfo->{'tags'} = $d->{'containertags'} if $d->{'containertags'}; + $helminfo->{'disturl'} = $disturl if $disturl; + $helminfo->{'buildtime'} = time(); + if ($chart) { + $helminfo->{'chart'} = $chart; + $helminfo->{'chart'} =~ s/.*\///; + my $ctx = Digest->new("SHA-256"); + my $cfd; + die("$chart: $!\n") unless open($cfd, '<', $chart); + my @s = stat($cfd); + $ctx->addfile($cfd); + close($cfd); + $helminfo->{'chart_sha256'} = $ctx->hexdigest; + $helminfo->{'chart_size'} = $s[7]; + } + $helminfo->{'config_json'} = $config_json; + $helminfo->{'config_yaml'} = $config_yaml; + $helminfo->{'_order'} = [ qw{name version release tags disturl buildtime chart config_json config_yaml chart_sha256 chart_size} ]; + $helminfo->{'_type'} = {'buildtime' => 'number', 'chart_size' => 'number' }; + print Build::SimpleJSON::unparse($helminfo)."\n"; + exit(0); + } + $d->{'nameversion'} = "$d->{'name'}-$d->{'version'}"; # convenience + my $x = $d->{$field}; + $x = [ $x ] unless ref $x; + print "@$x\n"; +} + +1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/Build/Kiwi.pm new/obs-build-20200520/Build/Kiwi.pm --- old/obs-build-20200520/Build/Kiwi.pm 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/Build/Kiwi.pm 2020-08-20 10:13:26.000000000 +0200 @@ -247,32 +247,33 @@ my %usedprofiles; # obsprofiles arch filtering if ($obsprofiles && $arch && $kiwi->{'profiles'} && $kiwi->{'profiles'}->[0]->{'profile'}) { - my %obsprofiles = map {$_ => 1} @$obsprofiles; + # reduce set of profiles to the ones matching our architecture + my @validprofiles; for my $prof (@{$kiwi->{'profiles'}[0]->{'profile'}}) { - next unless $prof->{'name'} && exists $obsprofiles{$prof->{'name'}}; - my $valid; - if ($prof->{'arch'}) { - my $ma = $arch; - $ma =~ s/i[456]86/i386/; - for my $pa (split(",", $prof->{'arch'})) { - $pa =~ s/i[456]86/i386/; - $valid = 1 if $ma eq $pa; - } + next unless $prof->{'name'}; + if (!$prof->{'arch'}) { + push @validprofiles, $prof; } else { - $valid = 1; - } - if ($valid) { - $obsprofiles{$prof->{'name'}} = 2; - } elsif ($obsprofiles{$prof->{'name'}} == 1) { - $obsprofiles{$prof->{'name'}} = 0; + my $ma = $arch; + $ma =~ s/i[456]86/i386/; + for my $pa (split(",", $prof->{'arch'})) { + $pa =~ s/i[456]86/i386/; + next unless $ma eq $pa; + push @validprofiles, $prof; + last; + } } } - $obsprofiles = [ grep {$obsprofiles{$_}} @$obsprofiles ]; - for my $prof (@{$kiwi->{'profiles'}[0]->{'profile'}}) { - next unless $obsprofiles{$prof->{'name'}}; + my %validprofiles = map {$_->{'name'} => 1} @validprofiles; + $obsprofiles = [ grep {$validprofiles{$_}} @$obsprofiles ]; + my %obsprofiles = map {$_ => 1} @$obsprofiles; + my @todo = grep {$obsprofiles{$_->{'name'}}} @validprofiles; + while (@todo) { + my $prof = shift @todo; + next if $usedprofiles{$prof->{'name'}}; # already done $usedprofiles{$prof->{'name'}} = 1; - for my $req (@{$prof->{'requires'}}) { - $usedprofiles{$req->{'profile'}} = 1; + for my $req (@{$prof->{'requires'} || []}) { + push @todo, grep {$_->{'name'} eq $req->{'profile'}} @validprofiles; } } } @@ -567,6 +568,7 @@ $containerinfo->{'repos'} = \@repos if @repos; $containerinfo->{'file'} = $image if defined $image; $containerinfo->{'disturl'} = $disturl if defined $disturl; + $containerinfo->{'milestone'} = $d->{'milestone'} if defined $d->{'milestone'}; print Build::SimpleJSON::unparse($containerinfo)."\n"; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/Build/Snapcraft.pm new/obs-build-20200520/Build/Snapcraft.pm --- old/obs-build-20200520/Build/Snapcraft.pm 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/Build/Snapcraft.pm 2020-08-20 10:13:26.000000000 +0200 @@ -23,7 +23,7 @@ use strict; use Build::Deb; -eval { require YAML::XS; }; +eval { require YAML::XS; $YAML::XS::LoadBlessed = 0; }; *YAML::XS::LoadFile = sub {die("YAML::XS is not available\n")} unless defined &YAML::XS::LoadFile; sub parse { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/Build.pm new/obs-build-20200520/Build.pm --- old/obs-build-20200520/Build.pm 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/Build.pm 2020-08-20 10:13:26.000000000 +0200 @@ -39,6 +39,7 @@ our $do_appimage; our $do_docker; our $do_fissile; +our $do_helm; sub import { for (@_) { @@ -52,8 +53,9 @@ $do_appimage = 1 if $_ eq ':appimage'; $do_docker = 1 if $_ eq ':docker'; $do_fissile = 1 if $_ eq ':fissile'; + $do_helm = 1 if $_ eq ':helm'; } - $do_rpm = $do_deb = $do_kiwi = $do_arch = $do_collax = $do_livebuild = $do_snapcraft = $do_appimage = $do_docker = $do_fissile = 1 if !$do_rpm && !$do_deb && !$do_kiwi && !$do_arch && !$do_collax && !$do_livebuild && !$do_snapcraft && !$do_appimage && !$do_docker && !$do_fissile; + $do_rpm = $do_deb = $do_kiwi = $do_arch = $do_collax = $do_livebuild = $do_snapcraft = $do_appimage = $do_docker = $do_fissile = $do_helm = 1 if !$do_rpm && !$do_deb && !$do_kiwi && !$do_arch && !$do_collax && !$do_livebuild && !$do_snapcraft && !$do_appimage && !$do_docker && !$do_fissile && !$do_helm; if ($do_deb) { require Build::Deb; @@ -82,6 +84,9 @@ if ($do_fissile) { require Build::Fissile; } + if ($do_helm) { + require Build::Helm; + } } package Build::Features; @@ -107,6 +112,55 @@ }; my $extra_macros = ''; +my %subst_defaults = ( + # defaults live-build package dependencies base on 4.0~a26 gathered with: + # grep Check_package -r /usr/lib/live/build + 'build-packages:livebuild' => [ + 'apt-utils', 'dctrl-tools', 'debconf', 'dosfstools', 'e2fsprogs', 'grub', + 'librsvg2-bin', 'live-boot', 'live-config', 'mtd-tools', 'parted', + 'squashfs-tools', 'syslinux', 'syslinux-common', 'wget', 'xorriso', 'zsync', + ], + 'build-packages:helm' => [ + 'helm', + ], + 'system-packages:livebuild' => [ + 'apt-utils', 'cpio', 'dpkg-dev', 'live-build', 'lsb-release', 'tar', + ], + 'system-packages:mock' => [ + 'mock', 'system-packages:repo-creation', + ], + 'system-packages:debootstrap' => [ + 'debootstrap', 'lsb-release', + ], + 'system-packages:kiwi-image' => [ + 'kiwi', 'tar', 'system-packages:repo-creation', + ], + 'system-packages:kiwi-product' => [ + 'kiwi', + ], + 'system-packages:docker' => [ + 'docker', 'system-packages:repo-creation', + ], + 'system-packages:podman' => [ + 'podman', 'buildah', 'system-packages:repo-creation', + ], + 'system-packages:fissile' => [ + 'docker', # TODO: Add fissile here as soon as it is packaged + ], + 'system-packages:deltarpm' => [ + 'deltarpm', + ], + 'system-packages:repo-creation:rpm' => [ + 'createrepo', + ], + 'system-packages:repo-creation:deb' => [ + 'dpkg-dev', + ], + 'system-packages:repo-creation:arch' => [ + 'pacman', + ], +); + sub unify { my %h = map {$_ => 1} @_; return grep(delete($h{$_}), @_); @@ -376,12 +430,8 @@ for my $l (qw{preinstall vminstall required support keep runscripts repotype patterntype}) { $config->{$l} = [ unify(@{$config->{$l}}) ]; } - for my $l (keys %{$config->{'substitute'}}) { - $config->{'substitute_vers'}->{$l} = [ map {/^(.*?)(=)?$/g} unify(@{$config->{'substitute'}->{$l}}) ]; - $config->{'substitute'}->{$l} = [ unify(@{$config->{'substitute'}->{$l}}) ]; - s/=$// for @{$config->{'substitute'}->{$l}}; - } init_helper_hashes($config); + # calculate type and binarytype if (!$config->{'type'}) { # Fallback to old guessing method if no type (spec, dsc or kiwi) is defined if (grep {$_ eq 'rpm'} @{$config->{'preinstall'} || []}) { @@ -408,6 +458,16 @@ } $config->{'binarytype'} ||= 'UNDEFINED'; } + # add default substitutes + if (!$config->{'substitute'}->{'system-packages:repo-creation'}) { + $config->{'substitute'}->{'system-packages:repo-creation'} = $subst_defaults{"system-packages:repo-creation:$config->{'binarytype'}"} if $subst_defaults{"system-packages:repo-creation:$config->{'binarytype'}"}; + } + # create substitute_vers hash from substitute entries + for my $l (keys %{$config->{'substitute'}}) { + $config->{'substitute_vers'}->{$l} = [ map {/^(.*?)(=)?$/g} unify(@{$config->{'substitute'}->{$l}}) ]; + $config->{'substitute'}->{$l} = [ unify(@{$config->{'substitute'}->{$l}}) ]; + s/=$// for @{$config->{'substitute'}->{$l}}; + } # add rawmacros to our macro list if ($config->{'rawmacros'} ne '') { for my $rm (split("\n", $config->{'rawmacros'})) { @@ -424,6 +484,7 @@ } } } + # extract some helper hashes for the flags my %modules; for (@{$config->{'expandflags'} || []}) { if (/^([^:]+):(.*)$/s) { @@ -501,43 +562,6 @@ return @res; } -my %subst_defaults = ( - # defaults live-build package dependencies base on 4.0~a26 gathered with: - # grep Check_package -r /usr/lib/live/build - 'build-packages:livebuild' => [ - 'apt-utils', 'dctrl-tools', 'debconf', 'dosfstools', 'e2fsprogs', 'grub', - 'librsvg2-bin', 'live-boot', 'live-config', 'mtd-tools', 'parted', - 'squashfs-tools', 'syslinux', 'syslinux-common', 'wget', 'xorriso', 'zsync', - ], - 'system-packages:livebuild' => [ - 'apt-utils', 'cpio', 'dpkg-dev', 'live-build', 'lsb-release', 'tar', - ], - 'system-packages:mock' => [ - 'mock', 'createrepo', - ], - 'system-packages:debootstrap' => [ - 'debootstrap', 'lsb-release', - ], - 'system-packages:kiwi-image' => [ - 'kiwi', 'createrepo', 'tar', - ], - 'system-packages:kiwi-product' => [ - 'kiwi', - ], - 'system-packages:docker' => [ - 'docker', - ], - 'system-packages:podman' => [ - 'podman', 'buildah' - ], - 'system-packages:fissile' => [ - 'docker', # TODO: Add fissile here as soon as it is packaged - ], - 'system-packages:deltarpm' => [ - 'deltarpm', - ], -); - # expand the preinstalls/vminstalls sub expandpreinstalls { my ($config) = @_; @@ -577,7 +601,7 @@ return (undef, $err) if $err; } my $buildtype = $config->{'type'} || ''; - if (grep {$_ eq $buildtype} qw{livebuild docker kiwi fissile}) { + if (grep {$_ eq $buildtype} qw{livebuild docker kiwi fissile helm}) { push @deps, @{$config->{'substitute'}->{"build-packages:$buildtype"} || $subst_defaults{"build-packages:$buildtype"} || []}; } @@ -1619,6 +1643,7 @@ return 'fissile' if $recipe eq 'fissile.yml'; return 'preinstallimage' if $recipe eq '_preinstallimage'; return 'simpleimage' if $recipe eq 'simpleimage'; + return 'helm' if $recipe eq 'Chart.yaml'; return undef; } @@ -1672,6 +1697,7 @@ return Build::Arch::parse($cf, $fn, @args) if $do_arch && $fnx eq 'PKGBUILD'; return Build::Collax::parse($cf, $fn, @args) if $do_collax && $fnx eq 'build.collax'; return parse_preinstallimage($cf, $fn, @args) if $fnx eq '_preinstallimage'; + return Build::Helm::parse($cf, $fn, @args) if $fnx eq 'Chart.yaml'; return undef; } @@ -1690,6 +1716,7 @@ return Build::Arch::parse($cf, $fn, @args) if $do_arch && $buildtype eq 'arch'; return Build::Collax::parse($cf, $fn, @args) if $do_collax && $buildtype eq 'collax'; return parse_preinstallimage($cf, $fn, @args) if $buildtype eq 'preinstallimage'; + return Build::Helm::parse($cf, $fn, @args) if $buildtype eq 'helm'; return undef; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/baselibs_configs/baselibs_global-sle12.conf new/obs-build-20200520/baselibs_configs/baselibs_global-sle12.conf --- old/obs-build-20200520/baselibs_configs/baselibs_global-sle12.conf 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/baselibs_configs/baselibs_global-sle12.conf 2020-08-20 10:13:26.000000000 +0200 @@ -22,7 +22,7 @@ targetname <name>-<targettype> -+.*/lib(64|ilp32)?/.*\.(so\..*|so|o|a|la)$ ++.*/lib(64|ilp32)?/.*\.(so\..*|so|o|a|la|pc)$ targettype 64bit -^(/usr)?/lib(ilp32)?/lib targettype 32bit -/lib64/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/baselibs_configs/baselibs_global-sle15.conf new/obs-build-20200520/baselibs_configs/baselibs_global-sle15.conf --- old/obs-build-20200520/baselibs_configs/baselibs_global-sle15.conf 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/baselibs_configs/baselibs_global-sle15.conf 2020-08-20 10:13:26.000000000 +0200 @@ -22,7 +22,7 @@ targetname <name>-<targettype> -+.*/lib(64|ilp32)?/.*\.(so\..*|so|o|a|la)$ ++.*/lib(64|ilp32)?/.*\.(so\..*|so|o|a|la|pc)$ targettype 64bit -^(/usr)?/lib(ilp32)?/lib targettype 32bit -/lib64/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/baselibs_configs/baselibs_global.conf new/obs-build-20200520/baselibs_configs/baselibs_global.conf --- old/obs-build-20200520/baselibs_configs/baselibs_global.conf 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/baselibs_configs/baselibs_global.conf 2020-08-20 10:13:26.000000000 +0200 @@ -22,7 +22,7 @@ targetname <name>-<targettype> -+.*/lib(64|ilp32)?/.*\.(so\..*|so|o|a|la)$ ++.*/lib(64|ilp32)?/.*\.(so\..*|so|o|a|la|pc)$ targettype 64bit -^(/usr)?/lib(ilp32)?/lib targettype 32bit -/lib64/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/build new/obs-build-20200520/build --- old/obs-build-20200520/build 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/build 2020-08-20 10:13:26.000000000 +0200 @@ -113,6 +113,7 @@ CACHE_DIR=/var/cache/build RECIPE_BUILD_START_TIME= +CCACHE_SETUP_START_TIME= # This is for insserv export YAST_IS_RUNNING=instsys @@ -479,6 +480,7 @@ setupccache() { if test -n "$CCACHE" ; then + CCACHE_SETUP_START_TIME=`date +%s` if mkdir -p $BUILD_ROOT/var/lib/build/ccache/bin; then for i in $(ls $BUILD_ROOT/usr/bin | grep -E '^(cc|gcc|[cg][+][+]|clang|clang[+][+])([-]?[.0-9])*$'); do rm -f $BUILD_ROOT/var/lib/build/ccache/bin/$i @@ -493,21 +495,20 @@ fi mkdir -p "$BUILD_ROOT/.ccache" chown -R "$ABUILD_UID:$ABUILD_GID" "$BUILD_ROOT/.ccache" - echo "export CCACHE_DIR=/.ccache" > "$BUILD_ROOT"/etc/profile.d/build_ccache.sh echo 'export PATH=/var/lib/build/ccache/bin:$PATH' >> "$BUILD_ROOT"/etc/profile.d/build_ccache.sh local cconf="$BUILD_ROOT"/etc/ccache.conf if test -e $cconf; then - # setting compression value - # if grep returns false, change it using sed(create backup), else append setting - (grep "^compression\s*=\s*true\s*$" $cconf || sed -i`date +%s` "s:compression\s*=\s*.*$:compression = true:g" $cconf ) \ - || echo "compression = true" >> $cconf + grep -q "^compression*" $cconf && sed -i "s:compression.*:compression = true:g" $cconf || echo "compression = true" >> $cconf + grep -q "^cache_dir*" $cconf && sed -i "s:cache_dir.*:cache_dir = /.ccache:g" $cconf || echo "cache_dir = /.ccache" >> $cconf else - echo "compression = true" >> $cconf + echo "compression = true" >> $cconf + echo "cache_dir = /.ccache" >> $cconf fi - local ccachetar="$BUILD_ROOT/.build.oldpackages/_ccache.tar" - test -e $ccachetar && tar -xf $ccachetar -C "$BUILD_ROOT/.ccache/" + local ccachetar="$BUILD_ROOT/.build.oldpackages/_ccache.tar" + test -e $ccachetar && tar -xf $ccachetar -C "$BUILD_ROOT/.ccache/" else + CCACHE_SETUP_START_TIME= rm -f "$BUILD_ROOT"/var/lib/build/ccache/bin/{gcc,g++,cc,c++,clang,clang++} fi } @@ -1329,7 +1330,9 @@ copy_oldpackages # chroot based builds # rsync as source and dest could be same - test -n "$PKG_CCACHE" -a -e "$PKG_CCACHE" && rsync -v "$PKG_CCACHE" "$BUILD_ROOT/.build.oldpackages/_ccache.tar" + test -n "$PKG_CCACHE" -a -e "$PKG_CCACHE" && \ + mkdir -p "$BUILD_ROOT/.build.oldpackages/" && \ + rsync -v "$PKG_CCACHE" "$BUILD_ROOT/.build.oldpackages/_ccache.tar" fi mount_stuff @@ -1475,8 +1478,6 @@ chmod 0755 $BUILD_ROOT/.unpack.command chroot $BUILD_ROOT su -c /.unpack.command - $BUILD_USER || cleanup_and_exit 1 rm -f $BUILD_ROOT/.unpack.command - # free disk space - rm "$i" done if test -e _service; then @@ -1600,8 +1601,10 @@ fi if test -n "$CCACHE" ; then + echo "... cleaning ccache" + test "$(ccache -h | grep -c evict-older-than)" != 0 && ccache --evict-older-than $((`date +%s` - $CCACHE_SETUP_START_TIME)) echo "... saving ccache" - tar -cf "$BUILD_ROOT/$TOPDIR/OTHER/_ccache.tar" -C "$BUILD_ROOT/.ccache/" . + tar --remove-files -cf "$BUILD_ROOT/$TOPDIR/OTHER/_ccache.tar" -C "$BUILD_ROOT/.ccache/" . fi if test \( -n "$RPMS" -o -n "$DEBS" \) -a -n "$CREATE_BASELIBS"; then diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/build-recipe new/obs-build-20200520/build-recipe --- old/obs-build-20200520/build-recipe 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/build-recipe 2020-08-20 10:13:26.000000000 +0200 @@ -25,7 +25,7 @@ BUILDTYPE= KIWI_PARAMETERS= -for i in spec dsc kiwi arch collax preinstallimage simpleimage mock livebuild snapcraft debootstrap debbuild appimage docker podman fissile; do +for i in spec dsc kiwi arch collax preinstallimage simpleimage mock livebuild snapcraft debootstrap debbuild appimage docker podman fissile helm; do . "$BUILD_DIR/build-recipe-$i" done @@ -86,6 +86,7 @@ _preinstallimage) BUILDTYPE=preinstallimage ;; simpleimage) BUILDTYPE=simpleimage ;; *.livebuild) BUILDTYPE=livebuild ;; + Chart.yaml) BUILDTYPE=helm ;; esac if test -z "$BUILDTYPE" ; then cleanup_and_exit 1 "I don't know how to build $RECIPEFILE" @@ -138,7 +139,7 @@ snapcraft) types="snapcraft.yaml" ;; esac fi - types="$types .spec .dsc PKGBUILD Dockerfile build.collax .kiwi .src.rpm .nosrc.rpm simpleimage snapcraft.yaml" + types="$types .spec .dsc PKGBUILD Dockerfile build.collax .kiwi .src.rpm .nosrc.rpm simpleimage snapcraft.yaml Chart.yaml" fi for t in $types ; do found= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/build-recipe-docker new/obs-build-20200520/build-recipe-docker --- old/obs-build-20200520/build-recipe-docker 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/build-recipe-docker 2020-08-20 10:13:26.000000000 +0200 @@ -67,7 +67,7 @@ DOCKER_TOOL=podman else DOCKER_TOOL=docker - if ! $BUILD_DIR/startdockerd --root "$BUILD_ROOT" --webserver "$TOPDIR/SOURCES/repos" ; then + if ! $BUILD_DIR/startdockerd --root "$BUILD_ROOT" --webserver "$TOPDIR/SOURCES/repos" --webserver-upload "$TOPDIR/SOURCES/repos/UPLOAD" ; then cleanup_and_exit 1 fi fi @@ -101,12 +101,14 @@ fi # Prepare the package repository + rm -rf "$BUILD_ROOT/$TOPDIR/SOURCES/repos/UPLOAD" if chroot $BUILD_ROOT test -x /usr/bin/createrepo ; then chroot $BUILD_ROOT createrepo "$TOPDIR/SOURCES/repos" >/dev/null fi if chroot $BUILD_ROOT test -x /usr/bin/dpkg-scanpackages ; then chroot $BUILD_ROOT bash -c "cd $TOPDIR/SOURCES/repos && dpkg-scanpackages -m . | gzip > Packages.gz" fi + mkdir -p "$BUILD_ROOT/$TOPDIR/SOURCES/repos/UPLOAD" # find tags, first look into recipe file FIRSTTAG= @@ -136,12 +138,14 @@ done # patch in obs-docker-support helper - sed -i '/^[ ]*[fF][rR][oO][mM]/a COPY .obs-docker-support /usr/local/sbin/obs-docker-support\nRUN obs-docker-support --install' "$BUILD_ROOT/$TOPDIR/SOURCES/$RECIPEFILE" - echo >> $BUILD_ROOT/$TOPDIR/SOURCES/$RECIPEFILE - if test -n "$(sed -ne '/^[ ]*[uU][sS][eE][rR][ ]/p' "$BUILD_ROOT/$TOPDIR/SOURCES/$RECIPEFILE")" ; then - sed -i '1,/^[ ]*[uU][sS][eE][rR][ ]/{ -/^[ ]*[uU][sS][eE][rR][ ]/i RUN obs-docker-support --uninstall + sed -i '1,/^[ ]*[rR][uU][nN][ ]/{ +/^[ ]*[rR][uU][nN][ ]/i COPY .obs-docker-support /usr/local/sbin/obs-docker-support\nRUN obs-docker-support --install }' "$BUILD_ROOT/$TOPDIR/SOURCES/$RECIPEFILE" + echo >> $BUILD_ROOT/$TOPDIR/SOURCES/$RECIPEFILE + if test -n "$(sed -ne '/^[ ]*[uU][sS][eE][rR][ ]/p' "$BUILD_ROOT/$TOPDIR/SOURCES/$RECIPEFILE")" ; then + tac "$BUILD_ROOT/$TOPDIR/SOURCES/$RECIPEFILE" | sed '1,/^[ ]*[uU][sS][eE][rR][ ]/{ +/^[ ]*[uU][sS][eE][rR][ ]/a RUN obs-docker-support --uninstall +}' | tac > "$BUILD_ROOT/$TOPDIR/SOURCES/.$RECIPEFILE" && mv "$BUILD_ROOT/$TOPDIR/SOURCES/.$RECIPEFILE" "$BUILD_ROOT/$TOPDIR/SOURCES/$RECIPEFILE" else echo 'RUN obs-docker-support --uninstall' >> "$BUILD_ROOT/$TOPDIR/SOURCES/$RECIPEFILE" fi @@ -185,6 +189,15 @@ test -n "$RELEASE" && args=("${args[@]}" --release "$RELEASE") perl -I$BUILD_DIR -MBuild::Docker -e Build::Docker::showcontainerinfo -- "${args[@]}" "$BUILD_ROOT/$TOPDIR/SOURCES/$RECIPEFILE" "$FILENAME.tar" "$ALLTAGS" containers/annotation > "$BUILD_ROOT$TOPDIR/DOCKER/$FILENAME.containerinfo" + # copy over .packages files + if test -f "$BUILD_ROOT/$TOPDIR/SOURCES/repos/UPLOAD/basepackages" ; then + cp "$BUILD_ROOT/$TOPDIR/SOURCES/repos/UPLOAD/basepackages" "$BUILD_ROOT$TOPDIR/DOCKER/$FILENAME.basepackages" + fi + if test -f "$BUILD_ROOT/$TOPDIR/SOURCES/repos/UPLOAD/packages" ; then + cp "$BUILD_ROOT/$TOPDIR/SOURCES/repos/UPLOAD/packages" "$BUILD_ROOT$TOPDIR/DOCKER/$FILENAME.packages" + fi + rm -rf "$BUILD_ROOT/$TOPDIR/SOURCES/repos/UPLOAD" + # We're done. Clean up. recipe_cleanup_docker BUILD_SUCCEEDED=true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/build-recipe-helm new/obs-build-20200520/build-recipe-helm --- old/obs-build-20200520/build-recipe-helm 1970-01-01 01:00:00.000000000 +0100 +++ new/obs-build-20200520/build-recipe-helm 2020-08-20 10:13:26.000000000 +0200 @@ -0,0 +1,89 @@ +################################################################ +# +# Copyright (c) 2020 SUSE Linux LLC +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or 3 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program (see the file COPYING); if not, write to the +# Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +# +################################################################ + +recipe_setup_helm() { + TOPDIR="/usr/src/packages" + test "$DO_INIT_TOPDIR" != false && rm -Rf "$BUILD_ROOT/$TOPDIR" + mkdir -p "$BUILD_ROOT$TOPDIR/SOURCES" + if test "$MYSRCDIR" = $BUILD_ROOT/.build-srcdir ; then + mv "$MYSRCDIR"/* $BUILD_ROOT$TOPDIR/SOURCES/ + else + if test -z "$LINKSOURCES" ; then + cp -dLR "$MYSRCDIR"/* $BUILD_ROOT$TOPDIR/SOURCES/ + else + cp -lR "$MYSRCDIR"/* $BUILD_ROOT$TOPDIR/SOURCES/ + fi + if test "$?" != 0 ; then + cleanup_and_exit 1 "source copy failed" + fi + fi + chown -R "$ABUILD_UID:$ABUILD_GID" "$BUILD_ROOT$TOPDIR" +} + +recipe_prepare_helm() { + rm -rf "$BUILD_ROOT$TOPDIR/BUILD" + mkdir -p "$BUILD_ROOT$TOPDIR/BUILD" + cp -dLR "$BUILD_ROOT$TOPDIR/SOURCES/"* "$BUILD_ROOT$TOPDIR/BUILD" + chown -R "$ABUILD_UID:$ABUILD_GID" "$BUILD_ROOT$TOPDIR/BUILD" + cd "$BUILD_ROOT$TOPDIR/BUILD" + for i in *.tar *.tgz *.tar.gz *.tar.xz ; do + test -e "$i" || continue + echo "Unpacking $i ..." + echo "#!/bin/sh -e" > $BUILD_ROOT/.unpack.command + shellquote cd "$TOPDIR/BUILD" >> $BUILD_ROOT/.unpack.command + echo >> $BUILD_ROOT/.unpack.command + echo -n 'tar -x --owner="'$BUILD_USER'" -f ' >> $BUILD_ROOT/.unpack.command + shellquote "$i" >> $BUILD_ROOT/.unpack.command + echo >> $BUILD_ROOT/.unpack.command + shellquote rm -f "$i" >> $BUILD_ROOT/.unpack.command + echo >> $BUILD_ROOT/.unpack.command + chmod 0755 $BUILD_ROOT/.unpack.command + chroot $BUILD_ROOT su -c /.unpack.command - $BUILD_USER || cleanup_and_exit 1 + rm -f $BUILD_ROOT/.unpack.command + rm -f "$i" + ls -l + done +} + +recipe_build_helm() { + cd "$BUILD_ROOT$TOPDIR/BUILD" + mkdir -p "$BUILD_ROOT$TOPDIR/HELM" + chown "$ABUILD_UID:$ABUILD_GID" "$BUILD_ROOT$TOPDIR/HELM" + # extract data from chart file + args=() + test -n "$DISTURL" && args=("${args[@]}" --disturl "$DISTURL") + test -n "$RELEASE" && args=("${args[@]}" --release "$RELEASE") + local nameversion=$(perl -I$BUILD_DIR -MBuild::Helm -e 'Build::Helm::show' -- "${args[@]}" "$BUILD_ROOT/$TOPDIR/SOURCES/$RECIPEFILE" nameversion) + # create chart + chroot $BUILD_ROOT su -c "cd $TOPDIR/BUILD && helm package -d $TOPDIR/HELM ." - $BUILD_USER || cleanup_and_exit 1 + test -f "$BUILD_ROOT$TOPDIR/HELM/$nameversion.tgz" || cleanup_and_exit 1 "helm package command did not create $nameversion.tgz" + # generate helminfo + perl -I$BUILD_DIR -MBuild::Helm -e 'Build::Helm::show' -- "${args[@]}" --chart "$BUILD_ROOT$TOPDIR/HELM/$nameversion.tgz" "$BUILD_ROOT/$TOPDIR/SOURCES/$RECIPEFILE" helminfo > "$BUILD_ROOT$TOPDIR/HELM/$nameversion.helminfo" + BUILD_SUCCEEDED=true +} + +recipe_resultdirs_helm() { + echo HELM +} + +recipe_cleanup_helm() { + : +} + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/build-vm new/obs-build-20200520/build-vm --- old/obs-build-20200520/build-vm 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/build-vm 2020-08-20 10:13:26.000000000 +0200 @@ -36,7 +36,7 @@ # ignore not backward compatible ext fs options like metadata_csum # Only protecting nonroot from root inside guest -> but anyone can be root inside guest # so disabling spectre/meltdown mitigations doesn't hurt security and gains performance -vm_linux_kernel_parameter="ext4.allow_unsupported=1 kpti=off pti=off spectre_v2=off" +vm_linux_kernel_parameter="ext4.allow_unsupported=1 mitigations=off" # guest visible devices VM_ROOTDEV=/dev/hda1 @@ -914,7 +914,9 @@ fi # rsync as source and dest could be same - test -n "$PKG_CCACHE" && rsync -av "$PKG_CCACHE" "$BUILD_ROOT/.build.oldpackages/_ccache.tar" + test -n "$PKG_CCACHE" && \ + mkdir -p "$BUILD_ROOT/.build.oldpackages/" && \ + rsync -av "$PKG_CCACHE" "$BUILD_ROOT/.build.oldpackages/_ccache.tar" if test -n "$VM_ROOT" ; then # copy out kernel & initrd (if they exist) during unmounting VM image diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/build-vm-kvm new/obs-build-20200520/build-vm-kvm --- old/obs-build-20200520/build-vm-kvm 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/build-vm-kvm 2020-08-20 10:13:26.000000000 +0200 @@ -120,6 +120,12 @@ kvm_bin="/usr/bin/qemu-system-ppc64" kvm_console=hvc0 kvm_options="-enable-kvm -M pseries" + if grep -q POWER8 /proc/cpuinfo ; then + # This option only exists with QEMU 5.0 or newer + if $kvm_bin -machine 'pseries,?' 2>&1 | grep -q cap-ccf-assist ; then + kvm_options="-enable-kvm -M pseries,cap-ccf-assist=off" + fi + fi grep -q PPC970MP /proc/cpuinfo && kvm_check_ppc970 vm_kernel=/boot/vmlinux vm_initrd=/boot/initrd @@ -376,7 +382,7 @@ vm_sysrq_kvm() { perl -e 'use Socket; socket(SOCK, PF_UNIX, SOCK_STREAM, 0) || die("socket: $!\n"); connect(SOCK, sockaddr_un("'"$VM_ROOT.qemu/monitor"'")) || die("connect: $!\n"); - syswrite SOCK "sendkey alt-print-'$1'\n";' + syswrite SOCK, "sendkey alt-print-'$1'\n";' } vm_wipe_kvm() { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/build-vm-zvm new/obs-build-20200520/build-vm-zvm --- old/obs-build-20200520/build-vm-zvm 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/build-vm-zvm 2020-08-20 10:13:26.000000000 +0200 @@ -304,6 +304,10 @@ # sleep some time before taking root and swap devices from worker # This might be critical regarding timing (IUCV_CONSOLE down, but machine still running) sleep 5 + # Build jobs might change the shutdown behavior, so just return if machine is powered off. + if ! (vmcp q $VM_WORKER >& /dev/null); then + return + fi zvm_cp volume_detach $VM_WORKER $ZVM_VOLUME_ROOT zvm_cp volume_detach $VM_WORKER $ZVM_VOLUME_SWAP } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/configs/sl15.2.conf new/obs-build-20200520/configs/sl15.2.conf --- old/obs-build-20200520/configs/sl15.2.conf 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/configs/sl15.2.conf 2020-08-20 10:13:26.000000000 +0200 @@ -171,6 +171,22 @@ Prefer: udev-mini libcom_err2-mini libext2fs2-mini Prefer: -harfbuzz-bootstrap -harfbuzz-bootstrap-devel +# break dependency of the -mini packages: they are valid for OBS, but not for end-user-installation +Ignore: erlang-rebar-obs:this-is-only-for-build-envs +Ignore: harfbuzz-bootstrap:this-is-only-for-build-envs +Ignore: jdk-bootstrap:this-is-only-for-build-envs +Ignore: libsystemd0-mini:this-is-only-for-build-envs +Ignore: libudev-mini1:this-is-only-for-build-envs +Ignore: libunbound-devel-mini:this-is-only-for-build-envs +Ignore: systemd-mini:this-is-only-for-build-envs +Ignore: udev-mini:this-is-only-for-build-envs +Ignore: curl-mini:this-is-only-for-build-envs +Ignore: libcurl-mini-devel:this-is-only-for-build-envs +Ignore: libcurl4-mini:this-is-only-for-build-envs +Ignore: ghc-bootstrap:this-is-only-for-build-envs +Ignore: ghc-bootstrap-helpers:this-is-only-for-build-envs +Ignore: cmake-mini:this-is-only-for-build-envs + # Let's speed up things: We don't need Mesa-dri and Mesa-gallium in the build system Ignore: Mesa:Mesa-dri Ignore: Mesa:Mesa-gallium diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/configs/sl15.5.conf new/obs-build-20200520/configs/sl15.5.conf --- old/obs-build-20200520/configs/sl15.5.conf 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/configs/sl15.5.conf 2020-08-20 10:13:26.000000000 +0200 @@ -760,11 +760,11 @@ Optflags: * -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -%define suse_version 1321 +%define suse_version 1550 %define is_opensuse 1 Macros: -%suse_version 1321 +%suse_version 1550 %is_opensuse 1 %insserv_prereq insserv sed diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/createzyppdeps new/obs-build-20200520/createzyppdeps --- old/obs-build-20200520/createzyppdeps 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/createzyppdeps 2020-08-20 10:13:26.000000000 +0200 @@ -55,10 +55,16 @@ my $type = $repo->{'type'}; my $zyppcachedir = "/var/cache/zypp/raw/$repo->{'name'}"; +if (!$type) { + $type = 'yast2' if -e "$zyppcachedir/suse/setup/descr"; + $type = 'rpm-md' if -e "$zyppcachedir/repodata"; +} +die("could not determine repo type for '$repo->{'name'}'\n") unless $type; + if($type eq 'rpm-md') { exec ("$INC[0]/createrepomddeps", '--cachedir', $cachedir, '--zypp', $zyppcachedir, $url); } elsif ($type eq 'yast2') { exec ("$INC[0]/createyastdeps", '--cachedir', $cachedir, '--zypp', $zyppcachedir, $url); } else { - die "unsupported repo type: $type\n"; + die "unsupported repo type '$type' for '$repo->{'name'}'\n"; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/dist/build.changes new/obs-build-20200520/dist/build.changes --- old/obs-build-20200520/dist/build.changes 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/dist/build.changes 2020-08-20 10:13:26.000000000 +0200 @@ -1,4 +1,36 @@ ------------------------------------------------------------------- +Thu Aug 20 08:07:30 UTC 2020 - Adrian Schröter <[email protected]> + +- fix factory version in config file bsc#1170956 +- add missing ignores for Leap 15.2 bsc#1174854 +- fix sysrq handling for KVM builds +- avoid double removal of obscpio files +- docker: + * support builds using USER root statements + * proper error handling when obs-docker-support gets called as + non-root + * helm build target support + * support milestone handling +- support repo files without types set (SLE 15 SP2 zypp) +- add default substitute for system-packages:repo-creation +- Support recursive kiwi profile usage + +------------------------------------------------------------------- +Thu Jul 23 05:38:24 UTC 2020 - Frank Schreiner <[email protected]> + +- fix dependencies for Fedora 33 +- Set $YAML::XS::LoadBlessed = 0 for Appimage/Snapcraft +- add a new variable to track build time needed for ccache eviction +- create folder for ccache archive to be copied before rsync +- also package pkg-config files by default into baselibs. (bsc#1172563 etc) +- Use shorter kernel flag for mitigations +- Ignore, if shutdown behavior changed by build in z/VM +- Control disk-space consumption while creating ccache archive +- cleaning ccache +- create folders before trying to copy ccache.tar +- Genreadte .packages and .basepackages files for docker builds + +------------------------------------------------------------------- Sun May 17 14:32:52 UTC 2020 - [email protected] - enable sysrq operations on boot diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/dist/build.spec new/obs-build-20200520/dist/build.spec --- old/obs-build-20200520/dist/build.spec 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/dist/build.spec 2020-08-20 10:13:26.000000000 +0200 @@ -88,6 +88,12 @@ Recommends: %{__pkg_name}-mkdrpms %endif +# With fedora 33 the POSIX module was split out of the perl +# package +BuildRequires: perl(POSIX) +Requires: perl(POSIX) + + %description This package provides a script for building RPMs for SUSE Linux in a chroot environment. @@ -118,7 +124,7 @@ %endif %define initvm_arch %{_host_cpu} -%if %{_host_cpu} == "i686" +%if "%{_host_cpu}" == "i686" %define initvm_arch i586 %endif %package initvm-%{initvm_arch} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/dummyhttpserver new/obs-build-20200520/dummyhttpserver --- old/obs-build-20200520/dummyhttpserver 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/dummyhttpserver 2020-08-20 10:13:26.000000000 +0200 @@ -11,7 +11,7 @@ $| = 1; -my ($build_root, $dir) = @ARGV; +my ($build_root, $dir, $uploaddir) = @ARGV; if (defined($build_root)) { chroot($build_root) || die("chroot $build_root: $!\n"); @@ -31,6 +31,16 @@ my $sock; my $status; +sub replyraw { + my ($data) = @_; + my $l; + while (length($data)) { + $l = syswrite($sock, $data, length($data)); + die("write error: $!\n") unless $l; + $data = substr($data, $l); + } +} + sub reply { my ($str, @hdrs) = @_; if (@hdrs && $hdrs[0] =~ /^status: ((\d+).*)/i) { @@ -50,12 +60,7 @@ my $dummy = ''; 1 while sysread($sock, $dummy, 1024, 0); fcntl($sock, F_SETFL,0); - my $l; - while (length($data)) { - $l = syswrite($sock, $data, length($data)); - die("write error: $!\n") unless $l; - $data = substr($data, $l); - } + replyraw($data); } sub reply_error { @@ -73,7 +78,7 @@ sub readrequest { my $qu = ''; - my $request; + my ($request, $rawhdrs); while (1) { if ($qu =~ /^(.*?)\r?\n/s) { @@ -85,15 +90,17 @@ my ($act, $path, $vers, undef) = split(' ', $request, 4); die("400 No method name\n") if !$act; if ($vers) { - die("501 Unsupported method: $act\n") if $act ne 'GET' && $act ne 'HEAD'; + die("501 Unsupported method: $act\n") if $act ne 'GET' && $act ne 'HEAD' && $act ne 'PUT'; # read in all headers while ($qu !~ /^(.*?)\r?\n\r?\n(.*)$/s) { die("501 received truncated query\n") if !sysread($sock, $qu, 1024, length($qu)); } $qu =~ /^(.*?)\r?\n\r?\n(.*)$/s; # redo regexp to work around perl bug $qu = $2; + $rawhdrs = "Request: $1"; } else { die("501 Bad method, must be GET\n") if $act ne 'GET'; + $rawhdrs = 'Request: GET'; $qu = ''; } my $query_string = ''; @@ -112,7 +119,7 @@ next if $path =~ s!/\.\.(?:/|$)!/!; last; } - return ($path, $query_string, $qu); + return ($act, $path, $query_string, $rawhdrs, $qu); } sub escape { @@ -134,9 +141,39 @@ } close($acceptsock); +my $action; +my $rawheaders; +my $content; my $path = '?'; eval { - ($path) = readrequest(); + ($action, $path, undef, $rawheaders, $content) = readrequest(); + if ($action eq 'PUT') { + die("no upload configured\n") unless defined($uploaddir) && $uploaddir ne ''; + die("bad upload path\n") unless $path =~ /^\/[a-zA-Z0-9_][a-zA-Z0-9_\.]*$/s; + die("no content length\n") unless $rawheaders =~ /^content-length:\s*(\d+)/im; + my $cl = $1; + die("bad content length $cl\n") if $cl > 100000000; + my $lpath = "$uploaddir$path"; + replyraw("HTTP/1.1 100 continue\r\n\r\n") if $rawheaders =~ /^expect:\s*100-continue/im; + $content = substr($content, 0, $cl) if length($content) > $cl; + my $fd; + open($fd, '>', $lpath) || die("$lpath: $!\n"); + if ($content ne '') { + syswrite($fd, $content) == length($content) || die("syswrite: $!\n"); + $cl -= length($content); + } + while ($cl > 0) { + $content = ''; + die("501 received truncated body\n") if !sysread($sock, $content, $cl > 8192 ? 8192 : $cl); + syswrite($fd, $content) == length($content) || die("syswrite: $!\n"); + $cl -= length($content); + } + close($fd) || die("close: $!\n"); + reply("Thank you.\n", 'Content-type: text/plain'); + close $sock; + print "[$status PUT:$path]"; + exit(0); + } my $lpath = ".$path"; if (-d $lpath) { if ($path !~ /\/$/) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/obs-docker-support new/obs-build-20200520/obs-docker-support --- old/obs-build-20200520/obs-docker-support 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/obs-docker-support 2020-08-20 10:13:26.000000000 +0200 @@ -162,6 +162,38 @@ esac } +upload_with_perl=' +use Socket; +$/ = undef; +my $data = <STDIN>; +my ($size, $ans) = length($data); +socket(S, PF_INET, SOCK_STREAM, getprotobyname("tcp")) || die; +connect(S, sockaddr_in(80, inet_aton("127.0.0.1"))) || die("connect: $!\n"); +select(S); +$| = 1; +print S "PUT $ARGV[0] HTTP/1.1\r\nContent-Length: ".length($data)."\r\n\r\n$data"; +read(S, $ans, 1024); +die($ans) unless $ans =~ /^200/; +' + +upload_packages() { + local n=$1 + local ans + if test -x /usr/bin/rpm -o -x /bin/rpm ; then + rpm -qa --qf '%{NAME}|%{EPOCH}|%{VERSION}|%{RELEASE}|%{ARCH}|%{DISTURL}|%{LICENSE}\n' > /tmp/packages + if test -n "$DATA_DIR" ; then + cp /tmp/packages "$DATA_DIR/UPLOAD/$n" + elif test -x /usr/bin/curl ; then + curl "http://localhost:80/$n" -T /tmp/packages + elif test -x /usr/bin/perl ; then + perl -e "$upload_with_perl" "/$n" < /tmp/packages + else + (echo -n -e "PUT /$n HTTP/1.1\r\nContent-Length: $(wc -c < /tmp/packages)\r\n\r\n" | cat - /tmp/packages && read -t 600 ans ; case "$ans" in *\ 200\ *) ;; *) echo "$ans" >&2 ;; esac) <>/dev/tcp/localhost/80 1>&0 + fi + rm -f /tmp/packages + fi +} + obs_docker_support() { case "$1" in --install|-i) @@ -191,6 +223,7 @@ test -e /var/lib/apt && mv /var/lib/apt /var/lib/apt.obssave /usr/bin/apt-get -o Dir::Etc::SourceList=$LOCAL_APTREPOS_D/obssource -o Dir::Etc::SourceParts=$LOCAL_APTREPOS_D update fi + upload_packages basepackages ;; --uninstall|-u) rm -rf "$LOCAL_REPOS_D" @@ -204,11 +237,17 @@ rm -rf /var/lib/apt mv /var/lib/apt.obssave /var/lib/apt fi + upload_packages packages rm -f /usr/local/sbin/obs-docker-support ;; esac } +if test `id -u` != "0"; then + echo "obs-docker-support: not executed as root user!" + exit 1 +fi + case ${0##*/} in obs-docker-support) obs_docker_support "$@" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-build-20200520/startdockerd new/obs-build-20200520/startdockerd --- old/obs-build-20200520/startdockerd 2020-05-20 18:38:11.000000000 +0200 +++ new/obs-build-20200520/startdockerd 2020-08-20 10:13:26.000000000 +0200 @@ -29,6 +29,7 @@ KILL= WEBSERVER= WEBSERVER_ONLY= +WEBSERVER_UPLOAD= DOCKERD_EXPERIMANTAL=--experimental while test -n "$1" ; do @@ -46,6 +47,10 @@ WEBSERVER="$2" shift 2 ;; + --webserver-upload) + WEBSERVER_UPLOAD="$2" + shift 2 + ;; --isunshared) IS_UNSHARED=true shift @@ -89,7 +94,7 @@ if test -n "$WEBSERVER_ONLY" ; then echo "Starting local repository server" - $BUILD_DIR/dummyhttpserver "$BUILD_ROOT" "$WEBSERVER" & + $BUILD_DIR/dummyhttpserver "$BUILD_ROOT" "$WEBSERVER" "$WEBSERVER_UPLOAD" & WEBSERVER_PID=$! echo "$CONTAINERD_PID $DOCKERD_PID $WEBSERVER_PID" > $BUILD_ROOT/.startdockerd.pids exit 0 @@ -98,7 +103,7 @@ if test -z "$IS_UNSHARED" ; then echo "Unsharing environment" # unshare mounts and network - exec unshare -m -n $BUILD_DIR/startdockerd --isunshared --root "$BUILD_ROOT" --webserver "$WEBSERVER" "$@" + exec unshare -m -n $BUILD_DIR/startdockerd --isunshared --root "$BUILD_ROOT" --webserver "$WEBSERVER" --webserver-upload "$WEBSERVER_UPLOAD" "$@" cleanup_and_exit 1 "exec unshare returned" fi @@ -147,7 +152,7 @@ if test -n "$WEBSERVER" ; then echo "Starting local repository server" - $BUILD_DIR/dummyhttpserver "$BUILD_ROOT" "$WEBSERVER" & + $BUILD_DIR/dummyhttpserver "$BUILD_ROOT" "$WEBSERVER" "$WEBSERVER_UPLOAD" & WEBSERVER_PID=$! echo "$CONTAINERD_PID $DOCKERD_PID $WEBSERVER_PID" > $BUILD_ROOT/.startdockerd.pids fi
