On 31. 03. 21 21:52, Ben Cotton wrote:
* Strict checking for unpackaged content in builds
> ...
* Many existing packages will fail to build due to the stricter
buildroot content checking. Fixing this in the packaging is always
backwards compatible. We could temporarily set
`%_unpackaged_files_terminate_build 0` in rawhide to alleviate initial
impact if necessary.

This is my main concern with this update.

tl;dr If you %exclude something and there is no other subpackage to own the files, the build fails:


This fails:

  %install
  ...
  touch %{buildroot}/foo %{buildroot}/bar

  %files
  /
  %exclude /foo

This still succeeds:

  %files
  /
  %exclude /foo

  %files foo
  /foo

Many packages do the former in Fedora for various different reasons, namely to, well... exclude files from the package (and not ship them at all). Sometimes a `rm` in %install can be used instead. Sometimes not, because the files are needed in the %{buildroot} for %check but not needed to be shipped.

When this change was introduced upstream in November 2020, I've analyzed the impact on Fedora packages. Bare in mind that the data is 4+ months old.

https://github.com/rpm-software-management/rpm/pull/1442#issuecomment-731554917

 - 1675 packages had %exclude in the spec file
 -  261 packages FTBFS for unrelated reason (incl. a very limited timeout)
 - 1414 packages actually tested
 -  537 packages built successfully, that is ~38%
 -  877 packages failed with unpackaged files, that is ~62%, list attached

When I extrapolate the numbers to compensate the unrelated FTBFS, that's likely more than 1000 affected Fedora packages.

OTOH ~500 packages are generated rubygem-* packages, automatically fixable.

I'd like to know how are the affected packages supposed to migrate to RPM 4.17 behavior, especially if they cannot remove the files in %install prior to %check. Are they supposed to remove the files at the end of %check instead? What if the package is build without %check?

Using `%_unpackaged_files_terminate_build 0` in entire rawhide just to compensate this:

 - is dangerous for other implications of the setting
 - only postpones the problem to a later time (when we will face the same issue)


And for a more specific problem, around ~100 Python packages were affected when tested, many of them crucial (e.g. dnf), so this problem will block the upgrade to Python 3.10 if the change lands in Rawhide before we upgrade Python (which is the current plan) until we fix all the affected packages (by at least adding `%global _unpackaged_files_terminate_build 0` to them, which is a tad big hammer, but it will be our last-resort option).

List of affected Python packages:
  https://pagure.io/releng/issue/10072#comment-724315

--
Miro Hrončok
--
Phone: +420777974800
IRC: mhroncok
afpfs-ng
akmods
annobin
antimicrox
antimicroX
appstream
argyllcms
armacycles-ad
arpwatch
asciidoc
audacious-plugin-fc
audiocd-kio
autoconf
awesome
aws
a52dec
bacula
bakefile
bamf
berusky
bless
blitz
blosc
bogl
booth
botan
calls
cantoolz
CCfits
CGAL
cloog
cockatrice
colin
compizconfig-python
conda
coturn
cowsay
cpl
crrcsim-addon-models
debian-keyring
djvulibre
dnf
docbook5-style-xsl
drupal7-active_tags
drupal7-boxes
drupal7-calendar
drupal7-cck
drupal7-cs_adaptive_image
drupal7-domain_views
drupal7-email
drupal7-file_entity_inline
drupal7-flexifilter
drupal7-i18n_boxes
drupal7-i18nviews
drupal7-languageicons
drupal7-language_switcher
drupal7-locale_auto_import
drupal7-locale_cookie
drupal7-l10n_client
drupal7-l10n_pconfig
drupal7-l10n_server
drupal7-stringoverrides
drupal7-strongarm
drupal7-theme-ninesixty
drupal7-translation_helpers
drupal7-translation_table
drupal7-transliteration
drupal7-workbench
drupal8
drush
dvdbackup
erfa
etckeeper
fbzx
fedora-packager
fence-agents
flare
flaw
fontopia
fwknop
gap-pkg-gbnp
geany
general-purpose-preprocessor
ginga
glabels
glances
glpk
glusterfs
gnome-js-common
gnote
gpaw
gpsim
grads
gsim85
gtk+extra
gutenprint
hatari
HdrHistogram_c
hexter-dssi
chipmunk
icc-profiles-openicc
icu
ikiwiki
ipython
iwd
i3
jack-audio-connection-kit
kbd
knights
kqoauth-qt5
libast
libcaca
libcdaudio
libclaw
libcsv
libdc1394
libdnet
libdrm-armada
libdsk
libdwarf
libfc14audiodecoder
libfilezilla
libgtop2
liblas
libmemcached
libnss-mysql
libnss-pgsql
liboping
liborigin
libpari23
libqmi
LibRaw
libsigrok
libspectrum
libstorj
liburing
libuser
libvdpau-va-gl
libvorbis
libyubikey
libzdb
lighttpd
lxcfs
mhash
milia
mingw-cppunit
mingw-dirac
mingw-fltk
mingw-gsm
mingw-python-lxml
mingw-python-markupsafe
mingw-qt5-qtgraphicaleffects
mingw-qt5-qtserialport
mISDN
moarvm
module-build-service
mom
mon
monitor-edid
moodle
mrtg
nbd-runner
ncmpc
nemiver
netbsd-iscsi
netmask
NetworkManager-strongswan
nfs-ganesha
nickle
nightview
numactl
numpy
ocaml-findlib
odcs
omniORBpy
openal-soft
open-vm-tools
openvpn
openwsman
orafce
osm-gps-map
ots
pacemaker
pacman
pam_mount
parallel
passenger
pcb-rnd
pcs
pen
perl-Algorithm-FastPermute
perl-Apache-Session-NoSQL
perl-Catalyst-Devel
perl-DBIx-SearchBuilder
perl-Dumbbench
perl-File-ChangeNotify
perl-Font-TTF
perl-Gtk2-SourceView2
perl-GTop
perl-HTML-FormatExternal
perl-Log-Agent
perl-Mason-Tidy
perl-Math-Pari
perl-MIME-Lite
perl-Net-DNS
perl-PDF-API2
perl-Plack
perl-Proc-Fork
perl-Sysadm-Install
perl-Test-WWW-Selenium
perl-Tk
perl-Type-Tiny
php-cache-adapter-common
php-cache-filesystem-adapter
php-doctrine-doctrine-bundle
php-doctrine-doctrine-bundle2
php-doctrine-doctrine-cache-bundle
php-firephp-firephp-core
php-league-mime-type-detection
php-patchwork-utf8
php-pimple
php-symfony
php-SymfonyCmfRouting
php-symfony-polyfill
php-symfony-psr-http-message-bridge
php-symfony-security-acl
php-symfony3
php-symfony4
php-williamdes-mariadb-mysql-kbs
pidgin-libnotify
pinta
plasma-applet-redshift-control
poetry
portaudio
procps-ng
proftpd
psfex
psftools
pyflakes
pyotherside
python-actdiag
python-bashate
python-btlewrap
python-cachy
python-cu2qu
python-debtcollector
python-dill
python-django-markdownx
python-dulwich
python-edgegrid
python-editdistance
python-ephem
python-fastcache
python-fedora
python-funcparserlib
python-gabbi
python-glusterfs-api
python-humanize
python-cherrypy
python-imagehash
python-ipgetter2
python-jaraco-classes
python-jaraco-collections
python-jaraco-envs
python-jaraco-functools
python-jaraco-text
python-lacrosse
python-libdiscid
python-libsass
python-matplotlib
python-multipart
python-murano-pkg-check
python-mygpoclient
python-netapp-lib
python-nptyping
python-nwdiag
python-opencensus
python-opencensus-proto
python-openshift
python-path
python-pygraphviz
python-pygrocy
python-pyinels
python-pysmt
python-pytenable
python-pytest-spec
python-pyudev
python-pyvit
python-repoze-who-plugins-sa
python-seqdiag
python-shapely
python-sql
python-subvertpy
python-teslajsonpy
python-tld
python-typish
python-upnpy
python-websocket-client
python-xmlschema
python-yarg
python-ZConfig
python-zope-event
python-zope-exceptions
python-zope-interface
python-zope-schema
python-zope-sqlalchemy
python-zope-testing
python-zope-testrunner
pywebdav
p11-remote
p7zip
qatlib
qhull
quagga
rakarrack
redhat-menus
resource-agents
ricochet
rmlint
rogue
rrdtool
rt
rtaudio
rtpproxy
rubygem-abrt
rubygem-actioncable
rubygem-actionmailbox
rubygem-actionmailer
rubygem-actionpack
rubygem-actiontext
rubygem-actionview
rubygem-activejob
rubygem-activemodel
rubygem-activemodel-serializers-xml
rubygem-activeresource
rubygem-activestorage
rubygem-activesupport
rubygem-addressable
rubygem-afm
rubygem-algorithms
rubygem-ammeter
rubygem-ancestry
rubygem-ansi
rubygem-apipie-rails
rubygem-appraisal
rubygem-arel
rubygem-archive-tar-minitar
rubygem-asciidoctor
rubygem-asciidoctor-pdf
rubygem-Ascii85
rubygem-async_sinatra
rubygem-atk
rubygem-atomic
rubygem-aws-sigv4
rubygem-backports
rubygem-bacon
rubygem-bacon-colored_output
rubygem-base32
rubygem-bcrypt
rubygem-benchmark-ips
rubygem-bindex
rubygem-bootsnap
rubygem-bson
rubygem-builder
rubygem-bundler
rubygem-byebug
rubygem-cairo
rubygem-cairo-gobject
rubygem-capybara
rubygem-cinch
rubygem-cliver
rubygem-clockwork
rubygem-clutter
rubygem-clutter-gdk
rubygem-clutter-gstreamer
rubygem-clutter-gtk
rubygem-codeclimate-test-reporter
rubygem-coderay
rubygem-coffee-script
rubygem-coffee-script-source
rubygem-color
rubygem-colorator
rubygem-colorize
rubygem-comp_tree
rubygem-concurrent-ruby
rubygem-connection_pool
rubygem-cookiejar
rubygem-coveralls
rubygem-crack
rubygem-crass
rubygem-creole
rubygem-css_parser
rubygem-cucumber
rubygem-cucumber-expressions
rubygem-cucumber-tag_expressions
rubygem-cucumber-wire
rubygem-curb
rubygem-daemon_controller
rubygem-daemons
rubygem-dalli
rubygem-database_cleaner
rubygem-declarative_authorization
rubygem-deep_merge
rubygem-delorean
rubygem-diff-lcs
rubygem-diffy
rubygem-docile
rubygem-domain_name
rubygem-drake
rubygem-ejs
rubygem-elasticsearch-transport
rubygem-em-http-request
rubygem-em-socksify
rubygem-em-spec
rubygem-em-websocket
rubygem-em-websocket-client
rubygem-ensure_valid_encoding
rubygem-erubi
rubygem-escape
rubygem-ethon
rubygem-eventmachine
rubygem-execjs
rubygem-expression_parser
rubygem-fakefs
rubygem-fake_ftp
rubygem-faraday
rubygem-fattr
rubygem-file-tail
rubygem-flexmock
rubygem-fog-aws
rubygem-fog-core
rubygem-fog-json
rubygem-fog-libvirt
rubygem-fog-xml
rubygem-formatador
rubygem-forwardable-extended
rubygem-fssm
rubygem-gdk_pixbuf2
rubygem-gdk3
rubygem-gem-nice-install
rubygem-gem2rpm
rubygem-generator_spec
rubygem-gettext
rubygem-gherkin
rubygem-gio2
rubygem-git
rubygem-glib2
rubygem-globalid
rubygem-glu
rubygem-glut
rubygem-gobject-introspection
rubygem-goocanvas
rubygem-goocanvas1
rubygem-gssapi
rubygem-gstreamer
rubygem-gtksourceview2
rubygem-gtksourceview3
rubygem-gtk2
rubygem-gtk3
rubygem-guard
rubygem-guard-compat
rubygem-guard-livereload
rubygem-guard-shell
rubygem-hashdiff
rubygem-hashery
rubygem-hashicorp-checkpoint
rubygem-hashie
rubygem-hashr
rubygem-hiera-vault
rubygem-highline
rubygem-hikidoc
rubygem-hiredis
rubygem-hitimes
rubygem-hocon
rubygem-hoe
rubygem-hrx
rubygem-http-accept
rubygem-httparty
rubygem-httpclient
rubygem-http_connection
rubygem-http-cookie
rubygem-http_parser.rb
rubygem-chake
rubygem-chronic
rubygem-chunky_png
rubygem-icaro
rubygem-idn
rubygem-imagesize
rubygem-introspection
rubygem-ipaddress
rubygem-isolate
rubygem-i18n
rubygem-i18n_data
rubygem-jbuilder
rubygem-jekyll-asciidoc
rubygem-jekyll-email-protect
rubygem-jekyll-feed
rubygem-jekyll-git-authors
rubygem-jekyll-seo-tag
rubygem-jekyll-toc
rubygem-jekyll-watch
rubygem-jmespath
rubygem-json_spec
rubygem-kramdown
rubygem-kramdown-parser-gfm
rubygem-kramdown-syntax-coderay
rubygem-krb5-auth
rubygem-launchy
rubygem-linked-list
rubygem-liquid
rubygem-listen
rubygem-little-plugger
rubygem-locale
rubygem-logstasher
rubygem-logstash-event
rubygem-log4r
rubygem-loofah
rubygem-lumberjack
rubygem-macaddr
rubygem-mail
rubygem-marcel
rubygem-mechanize
rubygem-memcache-client
rubygem-memfs
rubygem-mercenary
rubygem-metaclass
rubygem-method_source
rubygem-mimemagic
rubygem-mime-types
rubygem-mime-types-data
rubygem-minima
rubygem-mini_magick
rubygem-mini_mime
rubygem-mini_portile
rubygem-mini_portile2
rubygem-minitest
rubygem-minitest-around
rubygem-minitest-profile
rubygem-minitest-reporters
rubygem-minitest-stub-const
rubygem-mixlib-cli
rubygem-mixlib-config
rubygem-mixlib-shellout
rubygem-mizuho
rubygem-mkrf
rubygem-mocha
rubygem-mongo
rubygem-mongoid
rubygem-mono_logger
rubygem-moped
rubygem-more_core_extensions
rubygem-morph-cli
rubygem-msgpack
rubygem-multi_json
rubygem-multipart-post
rubygem-multi_test
rubygem-multi_xml
rubygem-mustermann
rubygem-mysql2
rubygem-nenv
rubygem-nesty
rubygem-net-http-digest_auth
rubygem-net-irc
rubygem-net-ldap
rubygem-netrc
rubygem-net-scp
rubygem-net-sftp
rubygem-net-ssh
rubygem-net-ssh-gateway
rubygem-nifti
rubygem-nio4r
rubygem-nokogiri
rubygem-notiffany
rubygem-oauth
rubygem-opengl
rubygem-opennebula
rubygem-openscap
rubygem-open4
rubygem-ox
rubygem-pango
rubygem-parallel
rubygem-parse-cron
rubygem-pathspec
rubygem-pathutil
rubygem-pdf-core
rubygem-pdf-inspector
rubygem-pdfkit
rubygem-pdf-reader
rubygem-pg
rubygem-pkg-config
rubygem-plist
rubygem-polyglot
rubygem-poppler
rubygem-posix-spawn
rubygem-power_assert
rubygem-powerpack
rubygem-prawn
rubygem-prawn-icon
rubygem-prawn-manual_builder
rubygem-prawn-svg
rubygem-prawn-table
rubygem-prawn-templates
rubygem-progressbar
rubygem-proxifier
rubygem-pry
rubygem-pry-byebug
rubygem-public_suffix
rubygem-pundit
rubygem-puppet-lint
rubygem-rabbit
rubygem-rack-accept
rubygem-rack-cache
rubygem-rack-cors
rubygem-rack-protection
rubygem-rack-restful_submit
rubygem-rails
rubygem-rails-controller-testing
rubygem-rails-deprecated_sanitizer
rubygem-rails-dom-testing
rubygem-rails-html-sanitizer
rubygem-railties
rubygem-rainbow
rubygem-rake
rubygem-rake-compiler
rubygem-rake-contrib
rubygem-rb-inotify
rubygem-rb-readline
rubygem-rbvmomi
rubygem-rdiscount
rubygem-rdoc
rubygem-rdtool
rubygem-recaptcha
rubygem-redcarpet
rubygem-redis-namespace
rubygem-ref
rubygem-regexp_parser
rubygem-regexp_property_values
rubygem-request_store
rubygem-require_all
rubygem-resolve-hostname
rubygem-rest-client
rubygem-rgen
rubygem-rchardet
rubygem-rmagick
rubygem-ronn-ng
rubygem-rouge
rubygem-rr
rubygem-rsolr
rubygem-rspec
rubygem-rspec-collection_matchers
rubygem-rspec-core
rubygem-rspec-its
rubygem-rspec-mocks
rubygem-rspec-pending_for
rubygem-rspec-support
rubygem-rspec2
rubygem-rspec2-core
rubygem-rspec2-expectations
rubygem-rspec2-mocks
rubygem-rttool
rubygem-rubeyond
rubygem-ruby-dbus
rubygem-rubygems-mirror
rubygem-ruby-libvirt
rubygem-ruby-ntlm
rubygem-ruby-opengl
rubygem-ruby-progressbar
rubygem-ruby-rc4
rubygem-ruby-shadow
rubygem-ruby_version
rubygem-rubyzip
rubygem-rugged
rubygem-safe_yaml
rubygem-sass
rubygem-sassc
rubygem-sass-twitter-bootstrap
rubygem-scrub_rb
rubygem-scruffy
rubygem-sdoc
rubygem-semantic
rubygem-sequel
rubygem-serialport
rubygem-settingslogic
rubygem-sexp_processor
rubygem-shellany
rubygem-shindo
rubygem-simplecov
rubygem-simplecov-html
rubygem-simple-navigation
rubygem-sinatra
rubygem-sinatra-cross_origin
rubygem-sinatra-rabbit
rubygem-six
rubygem-slim
rubygem-snmp
rubygem-spring
rubygem-spring-watcher-listen
rubygem-sprockets
rubygem-sprockets-rails
rubygem-sqlite3
rubygem-sshkey
rubygem-stomp
rubygem-stringex
rubygem-syck
rubygem-syntax
rubygem-systemu
rubygem-temple
rubygem-term-ansicolor
rubygem-terminal-table
rubygem-test_construct
rubygem-test_declarative
rubygem-test-unit
rubygem-test-unit-notify
rubygem-test-unit-rr
rubygem-text
rubygem-thin
rubygem-thor
rubygem-thread_safe
rubygem-tilt
rubygem-timecop
rubygem-timers
rubygem-tins
rubygem-tomlrb
rubygem-transaction-simple
rubygem-treetop
rubygem-trollop
rubygem-ttfunk
rubygem-turbolinks
rubygem-turbolinks-source
rubygem-typhoeus
rubygem-tzinfo
rubygem-uglifier
rubygem-unf
rubygem-unf_ext
rubygem-unicode-display_width
rubygem-uuid
rubygem-uuidtools
rubygem-vault
rubygem-vegas
rubygem-vte
rubygem-web-console
rubygem-webkit2-gtk
rubygem-webmock
rubygem-webrobots
rubygem-websocket
rubygem-websocket-driver
rubygem-websocket-extensions
rubygem-xmlparser
rubygem-xpath
rubygem-yaml-lint
rubygem-yard
rubygem-zeitwerk
rubygem-ZenTest
rubygem-zoom
rudiments
rust-addr2line
rust-arrayvec
rust-backtrace
rust-brev
rust-bytecount
rust-cargo
rust-criterion
rust-crossfont
rust-env_logger
rust-failure
rust-fake_clock
rust-gdk
rust-gdk-pixbuf
rust-gimli
rust-gio
rust-glib
rust-goblin
rust-gtk
rust-iovec
rust-log0.3
rust-lru_time_cache
rust-native-tls
rust-num-traits0.1
rust-owned_ttf_parser
rust-pango
rust-pangocairo
rust-parking_lot
rust-peg
rust-permutohedron
rust-quick-error
rust-quick-error1
rust-quickersort
rust-scoped-tls
rust-seahash
rust-sha1
rust-sourceview
rust-spin
rust-streaming-stats
rust-syn-mid
rust-tabwriter
rust-tokio-core
rust-tracing-core
rust-ttf-parser
rust-yup-oauth2
sagator
SDL_gfx
SDL_Pango
shotwell
siril
sord
speedtest-cli
speech-dispatcher
speex
sratom
strongswan
stunnel
sudo
sugar-toolkit-gtk3
suil
syslinux
task
tclx
thttpd
Thunar
tidyp
tinyxpath
ttf2pt1
tuned
typespeed
uim
undbx
urw-base35-fonts
vagrant-adbinfo
vagrant-cachier
vagrant-digitalocean
vagrant-hostmanager
vagrant-libvirt
vagrant-openstack-provider
vagrant-registration
vagrant-sshfs
vim
vim-command-t
vsqlite++
wcslib
whysynth-dssi
WindowMaker-extra
xdialog
xml-security-c
xmp-plugin-audacious
xorgxrdp
xorg-x11-drv-armada
xpa
xqc
xrdp
ykpers
zvbi
zziplib
389-ds-base
_______________________________________________
devel mailing list -- devel@lists.fedoraproject.org
To unsubscribe send an email to devel-le...@lists.fedoraproject.org
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org
Do not reply to spam on the list, report it: 
https://pagure.io/fedora-infrastructure

Reply via email to