Diff of the two buildlogs: -- --- b1/build.log 2024-03-28 11:57:23.246604157 +0000 +++ b2/build.log 2024-03-28 11:57:57.521127308 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Wed Mar 27 23:55:22 -12 2024 -I: pbuilder-time-stamp: 1711626922 +I: Current time: Thu May 1 08:20:26 +14 2025 +I: pbuilder-time-stamp: 1746037226 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/trixie-reproducible-base.tgz] I: copying local configuration @@ -31,54 +31,86 @@ dpkg-source: info: applying 0003-Disable-gecode-solver.patch I: using fakeroot in build. I: Installing the build-deps -I: user script /srv/workspace/pbuilder/25366/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/17587/tmp/hooks/D01_modify_environment starting +debug: Running on ionos16-i386. +I: Changing host+domainname to test build reproducibility +I: Adding a custom variable just for the fun of it... +I: Changing /bin/sh to bash +'/bin/sh' -> '/bin/bash' +lrwxrwxrwx 1 root root 9 Apr 30 18:20 /bin/sh -> /bin/bash +I: Setting pbuilder2's login shell to /bin/bash +I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other +I: user script /srv/workspace/pbuilder/17587/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/17587/tmp/hooks/D02_print_environment starting I: set - BUILDDIR='/build/reproducible-path' - BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' - BUILDUSERNAME='pbuilder1' - BUILD_ARCH='i386' - DEBIAN_FRONTEND='noninteractive' - DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=11 ' - DISTRIBUTION='trixie' - HOME='/root' - HOST_ARCH='i386' + BASH=/bin/sh + BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath + BASH_ALIASES=() + BASH_ARGC=() + BASH_ARGV=() + BASH_CMDS=() + BASH_LINENO=([0]="12" [1]="0") + BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:. + BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment") + BASH_VERSINFO=([0]="5" [1]="2" [2]="21" [3]="1" [4]="release" [5]="i686-pc-linux-gnu") + BASH_VERSION='5.2.21(1)-release' + BUILDDIR=/build/reproducible-path + BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' + BUILDUSERNAME=pbuilder2 + BUILD_ARCH=i386 + DEBIAN_FRONTEND=noninteractive + DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=21 ' + DIRSTACK=() + DISTRIBUTION=trixie + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=i686 + HOST_ARCH=i386 IFS=' ' - INVOCATION_ID='afe0421cafaf4af0b40a53f30c76eb5a' - LANG='C' - LANGUAGE='en_US:en' - LC_ALL='C' - LD_LIBRARY_PATH='/usr/lib/libeatmydata' - LD_PRELOAD='libeatmydata.so' - MAIL='/var/mail/root' - OPTIND='1' - PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' - PBCURRENTCOMMANDLINEOPERATION='build' - PBUILDER_OPERATION='build' - PBUILDER_PKGDATADIR='/usr/share/pbuilder' - PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' - PBUILDER_SYSCONFDIR='/etc' - PPID='25366' - PS1='# ' - PS2='> ' + INVOCATION_ID=42c07ea5b4e54ee59a2f0744e6b6a760 + LANG=C + LANGUAGE=de_CH:de + LC_ALL=C + LD_LIBRARY_PATH=/usr/lib/libeatmydata + LD_PRELOAD=libeatmydata.so + MACHTYPE=i686-pc-linux-gnu + MAIL=/var/mail/root + OPTERR=1 + OPTIND=1 + OSTYPE=linux-gnu + PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path + PBCURRENTCOMMANDLINEOPERATION=build + PBUILDER_OPERATION=build + PBUILDER_PKGDATADIR=/usr/share/pbuilder + PBUILDER_PKGLIBDIR=/usr/lib/pbuilder + PBUILDER_SYSCONFDIR=/etc + PIPESTATUS=([0]="0") + POSIXLY_CORRECT=y + PPID=17587 PS4='+ ' - PWD='/' - SHELL='/bin/bash' - SHLVL='2' - SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.cz3zBDB0/pbuilderrc_btPF --distribution trixie --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.cz3zBDB0/b1 --logfile b1/build.log ruby-solve_4.0.4-1.dsc' - SUDO_GID='112' - SUDO_UID='107' - SUDO_USER='jenkins' - TERM='unknown' - TZ='/usr/share/zoneinfo/Etc/GMT+12' - USER='root' - _='/usr/bin/systemd-run' - http_proxy='http://78.137.99.97:3128' + PWD=/ + SHELL=/bin/bash + SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix + SHLVL=3 + SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.cz3zBDB0/pbuilderrc_EHcl --distribution trixie --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.cz3zBDB0/b2 --logfile b2/build.log ruby-solve_4.0.4-1.dsc' + SUDO_GID=112 + SUDO_UID=107 + SUDO_USER=jenkins + TERM=unknown + TZ=/usr/share/zoneinfo/Etc/GMT-14 + UID=0 + USER=root + _='I: set' + http_proxy=http://85.184.249.68:3128 I: uname -a - Linux ionos12-i386 6.1.0-18-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.76-1 (2024-02-01) x86_64 GNU/Linux + Linux i-capture-the-hostname 6.1.0-18-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.76-1 (2024-02-01) x86_64 GNU/Linux I: ls -l /bin - lrwxrwxrwx 1 root root 7 Mar 28 11:26 /bin -> usr/bin -I: user script /srv/workspace/pbuilder/25366/tmp/hooks/D02_print_environment finished + lrwxrwxrwx 1 root root 7 Apr 29 17:46 /bin -> usr/bin +I: user script /srv/workspace/pbuilder/17587/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -257,7 +289,7 @@ Get: 131 http://deb.debian.org/debian trixie/main i386 ruby-rspec-mocks all 3.13.0c0e0m0s1-2 [81.3 kB] Get: 132 http://deb.debian.org/debian trixie/main i386 ruby-rspec all 3.13.0c0e0m0s1-2 [5184 B] Get: 133 http://deb.debian.org/debian trixie/main i386 ruby-semverse all 2.0.0-1 [6818 B] -Fetched 47.8 MB in 2s (28.4 MB/s) +Fetched 47.8 MB in 1s (81.3 MB/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package libpython3.11-minimal:i386. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 19816 files and directories currently installed.) @@ -695,8 +727,8 @@ Setting up tzdata (2024a-1) ... Current default time zone: 'Etc/UTC' -Local time is now: Thu Mar 28 11:56:33 UTC 2024. -Universal Time is now: Thu Mar 28 11:56:33 UTC 2024. +Local time is now: Wed Apr 30 18:20:44 UTC 2025. +Universal Time is now: Wed Apr 30 18:20:44 UTC 2025. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up autotools-dev (20220109.1) ... @@ -824,7 +856,11 @@ fakeroot is already the newest version (1.33-1). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. I: Building the package -I: Running cd /build/reproducible-path/ruby-solve-4.0.4/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../ruby-solve_4.0.4-1_source.changes +I: user script /srv/workspace/pbuilder/17587/tmp/hooks/A99_set_merged_usr starting +Not re-configuring usrmerge for trixie +I: user script /srv/workspace/pbuilder/17587/tmp/hooks/A99_set_merged_usr finished +hostname: Name or service not known +I: Running cd /build/reproducible-path/ruby-solve-4.0.4/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-genchanges -S > ../ruby-solve_4.0.4-1_source.changes dpkg-buildpackage: info: source package ruby-solve dpkg-buildpackage: info: source version 4.0.4-1 dpkg-buildpackage: info: source distribution unstable @@ -896,136 +932,136 @@ All examples were filtered out; ignoring {:focus=>true} -Randomized with seed 21265 +Randomized with seed 36484 -Solutions when using the ruby solver - correctly resolves when a resolution exists but it is not the latest - finds the correct solution when there is a diamond shaped dependency - solves when packages and constraints have build elements - gives an empty solution when there are no demands - rejects a p shaped depenency chain with a circular dep error - fails with a self dependency - chooses the best artifact for the demands - raises NoSolutionError when a solution cannot be found - rejects a circular dependency with a circular dep error - solves when packages and constraints have prerelease elements - chooses the correct artifact for the demands - find the correct solution when backtracking in variables introduced via demands - tries all combinations until it finds a solution - when options[:sorted] is true - when the solution is cyclic - raises a Solve::Errors::NoSolutionError because Molinillo doesn't support circular deps - with a constraint that depends upon an earlier constrained artifact - returns a sorted list of dependencies - with a simple list of dependencies - returns a sorted list of dependencies - -Solve::Artifact - #depends - given a name and constraint argument - given the dependency of the given name and constraint does not exist - adds a dependency with the given name and constraint to the list of dependencies - returns a Solve::Artifact - given only a name argument - adds a dependency with a all constraint (>= 0.0.0) - equality - given an artifact with the same name and version - is equal - given an artifact with the same version but different name - is not equal - given an artifact with the same name but different version - is not equal - #dependencies - returns all dependencies - returns an array - returns an empty array if no dependencies have been accessed - #dependency - returns an instance of Solve::Dependency matching the given name and constraint - sorting - orders artifacts by their version number - #dependency? - returns true when the dependendency exists - returns false when the dependency does not exist +Solve + ClassMethods + #it! + raises NoSolutionError if a solution does not exist (PENDING: No reason given) + #it + returns nil if a solution does not exist (PENDING: No reason given) Solve::RubySolver has a list of demands as model objects has a list of demands as ruby literals has a graph - ClassMethods - ::activate - is a no-op - ::timeout - returns 30,000 by default - when the SOLVE_TIMEOUT env variable is set - returns the value multiplied by a thousand when the constraints are not solvable + and molinillo identifies dependency conflicts + raises an error detailing the missing artifacts and molinillo identifies constraints that exclude all known versions raises an error detailing the missing artifacts and molinillo identifies missing artifacts raises an error detailing the missing artifacts - and molinillo identifies dependency conflicts - raises an error detailing the missing artifacts - when the constraints are solvable - gives the solution in sorted form - gives the solution as a Hash supporting Serializer interface implements the required interface - -Solve ClassMethods - #it! - raises NoSolutionError if a solution does not exist (PENDING: No reason given) - #it - returns nil if a solution does not exist (PENDING: No reason given) + ::timeout + returns 30,000 by default + when the SOLVE_TIMEOUT env variable is set + returns the value multiplied by a thousand + ::activate + is a no-op + when the constraints are solvable + gives the solution as a Hash + gives the solution in sorted form Solve::Solver::Serializer - deserializes a serialized problem to an equivalent problem creates a problem from a solver + deserializes a serialized problem to an equivalent problem -Solve::Dependency - #== - returns true if the other object is an instance of Solve::Dependency with the same constraint and artifact - #initialize - uses a default of >= 0.0.0 - -Solve::Demand +Solve::Artifact + #depends + given only a name argument + adds a dependency with a all constraint (>= 0.0.0) + given a name and constraint argument + given the dependency of the given name and constraint does not exist + adds a dependency with the given name and constraint to the list of dependencies + returns a Solve::Artifact + #dependencies + returns an array + returns all dependencies + returns an empty array if no dependencies have been accessed + #dependency + returns an instance of Solve::Dependency matching the given name and constraint + #dependency? + returns true when the dependendency exists + returns false when the dependency does not exist + sorting + orders artifacts by their version number equality - returns false when other isn't a Solve::Demand - returns true when other is a Solve::Demand with the same name and constriant - returns false when other is a Solve::Demand with the same constraint but a different name - returns false when other is a Solve::Demand with the same name but a different constraint - #initialize - accepts a string for the constraint parameter - accepts a Semverse::Constraint for the constraint parameter - when no value for 'constraint' is given - uses a default of >= 0.0.0 + given an artifact with the same name but different version + is not equal + given an artifact with the same name and version + is equal + given an artifact with the same version but different name + is not equal Solve::Graph + #versions + does not satisfy constraints if it is the default + returns all the artifacts matching the given name + returns only matching constraints if one is given + #artifacts + returns an array containing an artifact if one was accessed + returns an empty array if no artifacts have been accessed + returns an array + #find + returns nil when the artifact does not exist + returns an instance of artifact of the matching name and version #artifact given the artifact of the given name and version does not exist returns a Solve::Artifact - the artifact has the given name adds an artifact to the artifacts collection + the artifact has the given name the artifact has the given version #artifact? returns true if the given Solve::Artifact is a member of the collection returns false if the given Solve::Artifact is not a member of the collection - #versions - returns all the artifacts matching the given name - returns only matching constraints if one is given - does not satisfy constraints if it is the default - #find - returns nil when the artifact does not exist - returns an instance of artifact of the matching name and version - #artifacts - returns an array containing an artifact if one was accessed - returns an array - returns an empty array if no artifacts have been accessed == - returns true if the other is the same returns false if the other has the same artifacts but different dependencies returns false if other isn't a Solve::Graph returns false if the other has the same dependencies but different artifacts + returns true if the other is the same + +Solve::Dependency + #== + returns true if the other object is an instance of Solve::Dependency with the same constraint and artifact + #initialize + uses a default of >= 0.0.0 + +Solutions when using the ruby solver + fails with a self dependency + solves when packages and constraints have build elements + solves when packages and constraints have prerelease elements + correctly resolves when a resolution exists but it is not the latest + tries all combinations until it finds a solution + chooses the correct artifact for the demands + find the correct solution when backtracking in variables introduced via demands + rejects a circular dependency with a circular dep error + rejects a p shaped depenency chain with a circular dep error + raises NoSolutionError when a solution cannot be found + finds the correct solution when there is a diamond shaped dependency + gives an empty solution when there are no demands + chooses the best artifact for the demands + when options[:sorted] is true + with a simple list of dependencies + returns a sorted list of dependencies + when the solution is cyclic + raises a Solve::Errors::NoSolutionError because Molinillo doesn't support circular deps + with a constraint that depends upon an earlier constrained artifact + returns a sorted list of dependencies + +Solve::Demand + equality + returns false when other isn't a Solve::Demand + returns false when other is a Solve::Demand with the same name but a different constraint + returns true when other is a Solve::Demand with the same name and constriant + returns false when other is a Solve::Demand with the same constraint but a different name + #initialize + accepts a Semverse::Constraint for the constraint parameter + accepts a string for the constraint parameter + when no value for 'constraint' is given + uses a default of >= 0.0.0 Pending: (Failures listed here are expected and do not affect your suite's status) @@ -1039,9 +1075,9 @@ Deprecation Warnings: -Using `should` from rspec-expectations' old `:should` syntax without explicitly enabling the syntax is deprecated. Use the new `:expect` syntax or explicitly enable `:should` with `config.expect_with(:rspec) { |c| c.syntax = :should }` instead. Called from /build/reproducible-path/ruby-solve-4.0.4/spec/acceptance/ruby_solver_solutions_spec.rb:241:in `block (2 levels) in '. +Using `should` from rspec-expectations' old `:should` syntax without explicitly enabling the syntax is deprecated. Use the new `:expect` syntax or explicitly enable `:should` with `config.expect_with(:rspec) { |c| c.syntax = :should }` instead. Called from /build/reproducible-path/ruby-solve-4.0.4/spec/unit/solve/ruby_solver_spec.rb:43:in `block (2 levels) in '. -Using `stub` from rspec-mocks' old `:should` syntax without explicitly enabling the syntax is deprecated. Use the new `:expect` syntax or explicitly enable `:should` instead. Called from /build/reproducible-path/ruby-solve-4.0.4/spec/unit/solve/artifact_spec.rb:7:in `block (2 levels) in '. +Using `stub` from rspec-mocks' old `:should` syntax without explicitly enabling the syntax is deprecated. Use the new `:expect` syntax or explicitly enable `:should` instead. Called from /build/reproducible-path/ruby-solve-4.0.4/spec/unit/solve/ruby_solver_spec.rb:150:in `block (3 levels) in '. If you need more of the backtrace for any of these deprecations to @@ -1051,10 +1087,10 @@ 2 deprecation warnings total -Finished in 0.2135 seconds (files took 0.6987 seconds to load) +Finished in 0.0737 seconds (files took 0.18518 seconds to load) 72 examples, 0 failures, 2 pending -Randomized with seed 21265 +Randomized with seed 36484 ┌──────────────────────────────────────────────────────────────────────────────┐ @@ -1086,12 +1122,14 @@ dpkg-buildpackage: info: binary-only upload (no source included) dpkg-genchanges: info: including full source code in upload I: copying local configuration +I: user script /srv/workspace/pbuilder/17587/tmp/hooks/B01_cleanup starting +I: user script /srv/workspace/pbuilder/17587/tmp/hooks/B01_cleanup finished I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env -I: removing directory /srv/workspace/pbuilder/25366 and its subdirectories -I: Current time: Wed Mar 27 23:57:22 -12 2024 -I: pbuilder-time-stamp: 1711627042 +I: removing directory /srv/workspace/pbuilder/17587 and its subdirectories +I: Current time: Thu May 1 08:20:56 +14 2025 +I: pbuilder-time-stamp: 1746037256