[Piuparts-devel] [Git][debian/piuparts][develop] 19 commits: p-s: catch IOError while creating tarball

Holger Levsen gitlab at salsa.debian.org
Thu Feb 14 11:30:58 GMT 2019


Holger Levsen pushed to branch develop at Debian / piuparts


Commits:
b28b7ca4 by Andreas Beckmann at 2019-02-14T11:30:34Z
p-s: catch IOError while creating tarball

Signed-off-by: Andreas Beckmann <anbe at debian.org>
Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
9ff0d4bc by Andreas Beckmann at 2019-02-14T11:30:34Z
p.conf: use --warn-on-others for [sid-strict] only

installing a package in the same run as its dependencies exposes more bugs

Signed-off-by: Andreas Beckmann <anbe at debian.org>
Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
f0f9fa13 by Andreas Beckmann at 2019-02-14T11:30:34Z
introduce scripts-multi-distro-upgrade

Signed-off-by: Andreas Beckmann <anbe at debian.org>
Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
61ddc48b by Andreas Beckmann at 2019-02-14T11:30:34Z
p.conf.anbe: use scripts-multi-distro-upgrade

Signed-off-by: Andreas Beckmann <anbe at debian.org>
Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
52292d90 by Andreas Beckmann at 2019-02-14T11:30:34Z
p: reinstall packages that were downgraded to match the reference chroot

'disappering files' are infrequently seen with partial distros (experimental,
backports) if the partial distro contains packages in the reference chroot

apt/dpkg seem to do a suboptial job in some cases involving Breaks/Replaces
and downgrades: the old version of package downgrade-me *may* get unpacked
before package remove-me (which Breaks+Replaces the old version of
downgrade-me) gets removed, thus losing files to remove-me
reinstalling downgrade-me afterwards will recover these lost files

Signed-off-by: Andreas Beckmann <anbe at debian.org>
Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
84163446 by Andreas Beckmann at 2019-02-14T11:30:34Z
p.conf: add [buster-security]

Signed-off-by: Andreas Beckmann <anbe at debian.org>
Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
15f6530f by Andreas Beckmann at 2019-02-14T11:30:34Z
p.conf: add [buster-pu]

Signed-off-by: Andreas Beckmann <anbe at debian.org>
Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
bb2f2f05 by Andreas Beckmann at 2019-02-14T11:30:34Z
p.conf: add [buster-proposed] (disabled)

Signed-off-by: Andreas Beckmann <anbe at debian.org>
Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
58a43ad3 by Andreas Beckmann at 2019-02-14T11:30:34Z
p.conf: add [buster2proposed]

Signed-off-by: Andreas Beckmann <anbe at debian.org>
Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
6b412c01 by Andreas Beckmann at 2019-02-14T11:30:34Z
p.conf: add [sid-broken-symlinks]

Signed-off-by: Andreas Beckmann <anbe at debian.org>
Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
8e1f764f by Andreas Beckmann at 2019-02-14T11:30:34Z
p.conf: add [stretch2Xbuster]

Signed-off-by: Andreas Beckmann <anbe at debian.org>
Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
f3780e1e by Andreas Beckmann at 2019-02-14T11:30:34Z
p.conf: add [stretch2Xbuster-rcmd]

Signed-off-by: Andreas Beckmann <anbe at debian.org>
Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
f839b38e by Andreas Beckmann at 2019-02-14T11:30:34Z
add piuparts-{master,slave}-from-git-deps metapackages

Signed-off-by: Andreas Beckmann <anbe at debian.org>
Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
cb60e736 by Andreas Beckmann at 2019-02-14T11:30:34Z
refactor handling of packages that are uninstallable in lenny

Signed-off-by: Andreas Beckmann <anbe at debian.org>
Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
d265f148 by Andreas Beckmann at 2019-02-14T11:30:34Z
refactor handling of packages that are uninstallable in squeeze

Signed-off-by: Andreas Beckmann <anbe at debian.org>
Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
240be3b8 by Andreas Beckmann at 2019-02-14T11:30:34Z
refactor handling of packages that are uninstallable in wheezy

Signed-off-by: Andreas Beckmann <anbe at debian.org>
Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
6ca92892 by Andreas Beckmann at 2019-02-14T11:30:35Z
refactor handling of packages that are uninstallable in jessie

Signed-off-by: Andreas Beckmann <anbe at debian.org>
Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
28b6b276 by Andreas Beckmann at 2019-02-14T11:30:35Z
p: use print() function for commented prints, too

Signed-off-by: Andreas Beckmann <anbe at debian.org>
Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -
ee1a1df0 by Andreas Beckmann at 2019-02-14T11:30:35Z
piuparts-master: add Depends: python-setproctitle

Signed-off-by: Andreas Beckmann <anbe at debian.org>
Signed-off-by: Holger Levsen <holger at layer-acht.org>

- - - - -


8 changed files:

- + custom-scripts/scripts-multi-distro-upgrade/post_distupgrade_base_cleanup_multi-distro-upgrade
- custom-scripts/scripts/is_testable_uninstallable
- debian/changelog
- debian/control
- instances/piuparts.conf-template.pejacevic
- instances/piuparts.conf.anbe
- piuparts-slave.py
- piuparts.py


Changes:

=====================================
custom-scripts/scripts-multi-distro-upgrade/post_distupgrade_base_cleanup_multi-distro-upgrade
=====================================
@@ -0,0 +1,15 @@
+#!/bin/sh
+set -e
+
+# Only while creating the reference chroot.
+test "$PIUPARTS_PHASE" = "" || exit 0
+
+
+if	[ "$PIUPARTS_DISTRIBUTION" = "buster" ] || \
+	[ "$PIUPARTS_DISTRIBUTION" = "buster-proposed" ] ; then
+
+	if [ -d /etc/init ]; then
+		rmdir --ignore-fail-on-non-empty -v /etc/init
+	fi
+
+fi


=====================================
custom-scripts/scripts/is_testable_uninstallable
=====================================
@@ -45,6 +45,105 @@ skip_distupgrade()
 #   we usually skip the failing initial install, too, since that is
 #   *not a bug* in the package.
 
+
+if [ "${PIUPARTS_DISTRIBUTION}" = "lenny" ]; then
+
+	case ${PIUPARTS_OBJECTS%%=*} in
+		blootbot)
+			skip_distupgrade "#502753: fails to install: prompts without using debconf"
+			;;
+		distributed-net)
+			skip_distupgrade "#655922: noninteractive install: postinst loops infinitely"
+			;;
+		dnscache-run)
+			skip_distupgrade "#664848: breaks dns resolution in chroot"
+			;;
+		libpils0|\
+		libpils-dev|\
+		libstonith0|\
+		libstonith-dev)
+			skip_distupgrade "#702055: transitional packages uninstallable in lenny"
+			;;
+		mhc)
+			skip_distupgrade "#696231: fails to install: emacs-package-install failure"
+			;;
+		multex-bin)
+			skip_distupgrade "#668791: fails to install: The format file of 'multex' is NOT built successfully."
+			;;
+		python-milter|\
+		spf-milter-python)
+			skip_always "python-milter contains virus signatures that may get blocked by the firewall"
+			;;
+		runit-run)
+			skip_distupgrade "#542157: fails to install"
+			;;
+		sun-java5-doc|\
+		sun-java6-doc)
+			skip_distupgrade "#709967: fails to install: download location no longer available"
+			;;
+		trn)
+			skip_distupgrade "fails to install: prompts without using debconf"
+			;;
+		ttf-root-installer)
+			skip_distupgrade "#678807: fails to install: ftp:// download location disappeared"
+			;;
+	esac
+
+fi
+
+if [ "${PIUPARTS_DISTRIBUTION}" = "squeeze" ]; then
+
+	case ${PIUPARTS_OBJECTS%%=*} in
+		distributed-net)
+			skip_distupgrade "#655922: noninteractive install: postinst loops infinitely"
+			;;
+		firmware-b43-lpphy-installer)
+			skip_distupgrade "#623703: download location no longer available"
+			;;
+		fossology|\
+		fossology-agents|\
+		fossology-agents-single|\
+		fossology-scheduler|\
+		fossology-web|\
+		fossology-web-single)
+			# removed after squeeze
+			skip_distupgrade "#595593: fails to install"
+			;;
+		mini-buildd-bld|\
+		mini-buildd-rep)
+			skip_distupgrade "#632955, #656746: time limit exceeded during install"
+			fail_test "#632955, #656746: time limit exceeded during install"
+			;;
+	esac
+
+fi
+
+if [ "${PIUPARTS_DISTRIBUTION}" = "wheezy" ]; then
+
+	case ${PIUPARTS_OBJECTS%%=*} in
+		firmware-b43-lpphy-installer)
+			skip_distupgrade "#623703: download location no longer available"
+			;;
+		nautilus-dropbox)
+			skip_distupgrade "#770402: downloads awfully slow, hangs during installation"
+			;;
+	esac
+
+fi
+
+if [ "${PIUPARTS_DISTRIBUTION}" = "jessie" ]; then
+
+	case ${PIUPARTS_OBJECTS%%=*} in
+		steam)
+			skip_distupgrade "#772598: cannot preseed licence acceptance"
+			;;
+		susv4)
+			skip_distupgrade "#900882: download location no longer available"
+			;;
+	esac
+
+fi
+
 case ${PIUPARTS_OBJECTS%%=*}@${PIUPARTS_DISTRIBUTION} in
 	acgvision-agent at squeeze)
 		# removed after squeeze
@@ -55,9 +154,6 @@ case ${PIUPARTS_OBJECTS%%=*}@${PIUPARTS_DISTRIBUTION} in
 			skip_distupgrade "arch:all package no longer installable in stretch/i386"
 		fi
 		;;
-	blootbot at lenny)
-		skip_distupgrade "#502753: fails to install: prompts without using debconf"
-		;;
 	bugzilla3 at lenny)
 		# fixed in squeeze, removed after squeeze, excluded from squeeze-lts
 		skip_distupgrade "was excluded from squeeze-lts"
@@ -75,13 +171,6 @@ case ${PIUPARTS_OBJECTS%%=*}@${PIUPARTS_DISTRIBUTION} in
 		# removed after lenny
 		skip_distupgrade "#523770: must use invoke-rc.d"
 		;;
-	distributed-net at lenny|\
-	distributed-net at squeeze)
-		skip_distupgrade "#655922: noninteractive install: postinst loops infinitely"
-		;;
-	dnscache-run at lenny)
-		skip_distupgrade "#664848: breaks dns resolution in chroot"
-		;;
 	docbookwiki at lenny)
 		# removed after lenny
 		skip_distupgrade "unconditionally uses mysql-client during purge"
@@ -102,15 +191,6 @@ case ${PIUPARTS_OBJECTS%%=*}@${PIUPARTS_DISTRIBUTION} in
 		# removed after lenny
 		skip_distupgrade "#574220: package purge (after dependencies removal) fails"
 		;;
-	fossology at squeeze|\
-	fossology-agents at squeeze|\
-	fossology-agents-single at squeeze|\
-	fossology-scheduler at squeeze|\
-	fossology-web at squeeze|\
-	fossology-web-single at squeeze)
-		# removed after squeeze
-		skip_distupgrade "#595593: fails to install"
-		;;
 	gclcvs at squeeze)
 		# removed after squeeze
 		skip_distupgrade "modifies conffiles: /etc/default/gclcvs"
@@ -126,12 +206,6 @@ case ${PIUPARTS_OBJECTS%%=*}@${PIUPARTS_DISTRIBUTION} in
 		# removed after lenny
 		skip_distupgrade "modifies conffiles: /etc/security/pam_rsa.conf"
 		;;
-	libpils0 at lenny|\
-	libpils-dev at lenny|\
-	libstonith0 at lenny|\
-	libstonith-dev at lenny)
-		skip_distupgrade "#702055: transitional packages uninstallable in lenny"
-		;;
 	localepurge@*)
 		skip_distupgrade "requires a full --reinstall to restore disappeared files"
 		;;
@@ -143,20 +217,6 @@ case ${PIUPARTS_OBJECTS%%=*}@${PIUPARTS_DISTRIBUTION} in
 		# removed after lenny
 		skip_distupgrade "#574228: package purge (after dependencies removal) fails"
 		;;
-	mhc at lenny)
-		skip_distupgrade "#696231: fails to install: emacs-package-install failure"
-		;;
-	mini-buildd-bld at squeeze|\
-	mini-buildd-rep at squeeze)
-		skip_distupgrade "#632955, #656746: time limit exceeded during install"
-		fail_test "#632955, #656746: time limit exceeded during install"
-		;;
-	multex-bin at lenny)
-		skip_distupgrade "#668791: fails to install: The format file of 'multex' is NOT built successfully."
-		;;
-	nautilus-dropbox at wheezy)
-		skip_distupgrade "#770402: downloads awfully slow, hangs during installation"
-		;;
 	nessusd at lenny|\
 	harden-remoteaudit at lenny)
 		# removed after lenny
@@ -176,10 +236,6 @@ case ${PIUPARTS_OBJECTS%%=*}@${PIUPARTS_DISTRIBUTION} in
 		# removed after squeeze
 		skip_distupgrade "#698533: modifies a shipped file: /usr/share/poker-web/currency_one.php"
 		;;
-	python-milter at lenny|\
-	spf-milter-python at lenny)
-		skip_always "virus signatures in python-milter may trigger the firewall"
-		;;
 	python-poker-stats at squeeze)
 		# removed after squeeze
 		skip_distupgrade "#608646: cronjob exits with error after package removal"
@@ -192,28 +248,12 @@ case ${PIUPARTS_OBJECTS%%=*}@${PIUPARTS_DISTRIBUTION} in
 		# removed after squeeze
 		skip_distupgrade "fails to purge: rt3.8-rtfm.postrm: ucf: not found"
 		;;
-	runit-run at lenny)
-		skip_distupgrade "#542157: fails to install"
-		;;
 	sdic-eijiro at lenny)
 		skip_distupgrade "requires a dictionary CD"
 		;;
 	sdic-eijiro@*)
 		skip_always "requires a dictionary CD"
 		;;
-	steam at jessie)
-		skip_distupgrade "#772598: cannot preseed licence acceptance"
-		;;
-	sun-java5-doc at lenny|\
-	sun-java6-doc at lenny)
-		skip_distupgrade "#709967: fails to install: download location no longer available"
-		;;
-	trn at lenny)
-		skip_distupgrade "fails to install: prompts without using debconf"
-		;;
-	ttf-root-installer at lenny)
-		skip_always "fails to install: download location disappeared"
-		;;
 	usrmerge@*)
 		skip_always "performs piuparts-unfriendy filesystem layout changes"
 		;;


=====================================
debian/changelog
=====================================
@@ -1,9 +1,29 @@
 piuparts (0.98) UNRELEASED; urgency=medium
 
+  [ Holger Levsen ]
   * piuparts-reports.py: add link to states graph for each suite.
   * instances/piuparts.conf-template.pejacevic: increase sid-nodoc's
     precedence.
 
+  [ Andreas Beckmann ]
+  * piuparts.py:
+    - If packages were downgraded to restore the reference chroot state
+      reinstall the downgraded-to version again to recover potentially lost
+      files in case of bad interactions of Breaks/Replaces with downgrading.
+  * piuparts.conf:
+    - Use --warn-on-others for [sid-strict] only.
+    - Add sections [buster-security], [buster-pu] and [buster2proposed].
+    - Add sections [stretch2Xbuster] and [stretch2Xbuster-rcmd].
+    - Add section [sid-broken-symlinks], failing on broken symlinks
+  * piuparts-slave.py:
+    - Catch IOError while creating tarballs, will be retried later.
+  * scripts/is_testable_uninstallable:
+    - Refactor handling of known uninstallable packages.
+  * scripts-multi-distro-upgrade/: New custom scripts for distupgrade tests
+    spanning a series of distros.
+  * Add metapackages piuparts-{master,slave}-from-git-deps to ease running
+    piuparts-master and piuparts-slave instances from git.
+
  -- Holger Levsen <holger at debian.org>  Mon, 11 Feb 2019 12:55:50 +0100
 
 piuparts (0.97) unstable; urgency=medium


=====================================
debian/control
=====================================
@@ -32,6 +32,7 @@ Package: piuparts
 Architecture: all
 Depends:
  piuparts-common (= ${binary:Version}),
+# keep this list in sync with piuparts-slave-from-git-deps
  debootstrap (>= 1.0.89~),
  debsums (>= 2.2.2~),
  lsb-release,
@@ -62,9 +63,11 @@ Built-Using: ${misc:Built-Using}
 Depends:
  piuparts-common (>= ${source:Version}),
  piuparts-common (<< ${source:Version}+),
+# keep this list in sync with piuparts-master-from-git-deps
  adduser,
  openssh-server,
  python-debianbts,
+ python-setproctitle,
  tango-icon-theme,
  xz-utils,
  python-yaml,
@@ -90,11 +93,42 @@ Description: piuparts master components
  operate. It also contains piuparts-report to generate web pages with the
  testing results as well as documentation.
 
+Package: piuparts-master-from-git-deps
+Architecture: all
+Depends:
+ git,
+# this list is synced from piuparts-master
+ adduser,
+ openssh-server,
+ python-debianbts,
+ python-setproctitle,
+ tango-icon-theme,
+ xz-utils,
+ python-yaml,
+ python (>= 2.7),
+# selected packages from piuparts-master Recommends
+ apache2 | httpd,
+ python-rpy2,
+# this list is synced from piuparts-common
+ python-apt,
+ python-distro-info,
+ python-lzma,
+ ${misc:Depends},
+Description: dependencies for running piuparts master from git
+ piuparts is meant as a quality assurance tool for people who create .deb
+ packages to test them before they upload them to the Debian package archive.
+ A master/slave piuparts installation is used for testing complete archives
+ as it is done on https://piuparts.debian.org/.
+ .
+ This metapackage provides all the dependencies needed for running a
+ piuparts-master instance (including piuparts-report etc.) from git.
+
 Package: piuparts-slave
 Architecture: all
 Depends:
  piuparts (= ${binary:Version}),
  piuparts-common (= ${binary:Version}),
+# keep this list in sync with piuparts-slave-from-git-deps
  adduser,
  openssh-client,
  screen,
@@ -113,9 +147,41 @@ Description: piuparts slave components
  This package provides the piuparts slave components, which need a piuparts
  master to operate. See the documentation in the piuparts-master package.
 
+Package: piuparts-slave-from-git-deps
+Architecture: all
+Depends:
+ git,
+# this list is synced from piuparts-slave
+ adduser,
+ openssh-client,
+ screen,
+ sudo,
+ python (>= 2.7),
+# this list is synced from piuparts
+ debootstrap (>= 1.0.89~),
+ debsums (>= 2.2.2~),
+ lsb-release,
+ lsof,
+ mount,
+ python-debian,
+# this list is synced from piuparts-common
+ python-apt,
+ python-distro-info,
+ python-lzma,
+ ${misc:Depends},
+Description: dependencies for running piuparts slave from git
+ piuparts is meant as a quality assurance tool for people who create .deb
+ packages to test them before they upload them to the Debian package archive.
+ A master/slave piuparts installation is used for testing complete archives
+ as it is done on https://piuparts.debian.org/.
+ .
+ This metapackage provides all the dependencies needed for running a
+ piuparts-slave instance from git.
+
 Package: piuparts-common
 Architecture: all
 Depends:
+# keep this list in sync with piuparts-{master,slave}-from-git-deps
  python-apt,
  python-distro-info,
  python-lzma,


=====================================
instances/piuparts.conf-template.pejacevic
=====================================
@@ -1,8 +1,6 @@
 [DEFAULT]
 # these are needed always
 flags-base =
-# restrict to problems in the package being tested
-	--warn-on-others
 # default exceptions
 	--scriptsdir /etc/piuparts/scripts
 # pejacevic's slaves are doing everything relevant on a ramdisk anyway
@@ -18,6 +16,8 @@ flags-default =
 # like default flags, but failing on leftover files
 flags-leftovers =
 	%(flags-base)s
+# restrict to problems in the package being tested
+	--warn-on-others
 # perform some additional cleanup
 	--scriptsdir /etc/piuparts/scripts-leftovers
 
@@ -104,6 +104,46 @@ flags-start-lenny =
 # and removing a shell would remove its entry from /etc/shells
 	-i /etc/shells
 
+# common flags for testing for broken symlinks
+flags-broken-symlinks =
+	%(flags-default)s
+	--fail-on-broken-symlinks
+	--install-recommends
+	--scriptsdir /etc/piuparts/scripts-broken-symlinks
+#	--fake-essential-packages libjs-sphinxdoc
+# ignore intentionally broken symlinks
+	-i :/usr/lib/libcxx/test/std/experimental/filesystem/Inputs/static_test_env/bad_symlink
+	-i :/usr/share/gocode/src/github.com/Masterminds/glide/testdata/path/x/vendor
+	-i :/usr/share/gocode/src/github.com/constabulary/gb/internal/fileutils/_testdata/copyfile/a/rick
+	-i :/usr/share/gocode/src/github.com/hashicorp/atlas-go/archive/test-fixtures/archive-symlink/link/link
+	-i :/usr/share/gocode/src/github.com/prometheus/procfs/fixtures/26231/exe
+	-i :/usr/share/gocode/src/github.com/prometheus/procfs/fixtures/26231/ns/mnt
+	-i :/usr/share/gocode/src/github.com/prometheus/procfs/fixtures/26231/ns/net
+	-i :/usr/share/gocode/src/github.com/prometheus/procfs/fixtures/26232/cwd
+	-i :/usr/share/gocode/src/github.com/prometheus/procfs/fixtures/26232/root
+# ignore broken symlinks
+	-i :/etc/systemd/system/display-manager.service
+#   civicrm-common, #857601, wontfix, /usr/share/civicrm/packages/OpenFlashChart/open-flash-chart.swf -> ../../../../local/open-flash-chart.swf
+	-i :/usr/share/civicrm/packages/OpenFlashChart/open-flash-chart.swf
+#   musescore-common, #910145, wontfix, /usr/share/mscore-2.3/sound/{sf2,sfz} -> ../../sounds/{sf2,sfz}
+	-i :/usr/share/mscore-2.3/sound/sf2
+	-i :/usr/share/mscore-2.3/sound/sfz
+	-i :/usr/share/mscore-3.0/sound/sf2
+	-i :/usr/share/mscore-3.0/sound/sfz
+#   mender-client, #915680, /var/lib/mender -> /data/mender
+	-i :/var/lib/mender
+# ignore broken symlinks (patterns)
+	-I :/etc/.*/supervise
+	-I /usr/include/python2\.7_d/.*\.h
+	-I /usr/include/python3\..dm/.*\.h
+	-I /usr/include/python3\..dm/internal
+	-I :/usr/lib/jvm/java-.*-openjdk-.*/src\.zip
+	-I :/usr/share/doc/kde/HTML/.*/common
+	-I :/usr/share/man/man1/(.*-)?python.*-config\.1\.gz
+# ignore broken symlinks (third party game data)
+	-I :/usr/lib/openjk/JediAcademy/base/assets.\.pk3
+	-I :/usr/lib/rtcw/main/.*\.(cfg|pk3)
+
 
 [global]
 basetgz-sections =
@@ -120,13 +160,20 @@ sections =
 	sid
 	sid-strict
 	sid-nodoc
+	sid-broken-symlinks
 	testing2sid
 	stable2sid
 	stable22sid
 	buster
 	buster-rcmd
+	buster-security
+	buster-pu
+#	buster-proposed
+	buster2proposed
 	stretch2buster
+	stretch2Xbuster
 	stretch2buster-rcmd
+	stretch2Xbuster-rcmd
 	stretch2bpo2buster
 	stretch2bpo
 	stretch
@@ -322,6 +369,15 @@ piuparts-flags =
 distro = sid
 
 
+[sid-broken-symlinks]
+precedence = 9
+description = + Failing on broken symlinks.
+json-sections = none
+piuparts-flags =
+	%(flags-broken-symlinks)s
+distro = sid
+
+
 [testing2sid]
 precedence = 2
 piuparts-flags =
@@ -394,6 +450,49 @@ piuparts-flags =
 distro = buster
 
 
+[buster-security]
+precedence = 2
+json-sections = none
+piuparts-flags =
+	%(flags-default)s
+	%(flags-start-buster)s
+	%(flags-end-buster)s
+depends-sections = buster
+distro = buster/updates
+
+
+[buster-pu]
+precedence = 3
+json-sections = none
+piuparts-flags =
+	%(flags-default)s
+	%(flags-start-buster)s
+	%(flags-end-buster)s
+depends-sections = buster
+distro = buster-proposed-updates
+
+
+[buster-proposed]
+precedence = 3
+json-sections = none
+piuparts-flags =
+	%(flags-default)s
+	%(flags-start-buster)s
+	%(flags-end-buster)s
+distro = buster-proposed
+
+
+[buster2proposed]
+precedence = 3
+json-sections = none
+piuparts-flags =
+	%(flags-default)s
+	%(flags-start-buster)s
+	%(flags-end-buster)s
+distro = buster
+upgrade-test-distros = buster buster-proposed
+
+
 [stretch2buster]
 precedence = 4
 json-sections = none
@@ -405,6 +504,20 @@ distro = stretch
 upgrade-test-distros = stretch buster
 
 
+[stretch2Xbuster]
+precedence = 5
+json-sections = none
+description = + Testing two-stage upgrades.
+piuparts-flags =
+	--upgrade-before-dist-upgrade
+	%(flags-default)s
+	%(flags-start-stretch)s
+	%(flags-end-buster)s
+distro = stretch
+upgrade-test-distros = stretch buster
+exclude-known-problems = packages_have_been_kept_back_error.conf packages_have_been_kept_back_issue.conf
+
+
 [stretch2buster-rcmd]
 precedence = 5
 json-sections = none
@@ -418,6 +531,21 @@ distro = stretch
 upgrade-test-distros = stretch buster
 
 
+[stretch2Xbuster-rcmd]
+precedence = 6
+json-sections = none
+description = + Testing two-stage upgrades with --install-recommends.
+piuparts-flags =
+	--install-recommends
+	--upgrade-before-dist-upgrade
+	%(flags-default)s
+	%(flags-start-stretch)s
+	%(flags-end-buster)s
+distro = stretch
+upgrade-test-distros = stretch buster
+exclude-known-problems = packages_have_been_kept_back_error.conf packages_have_been_kept_back_issue.conf
+
+
 [stretch2bpo2buster]
 precedence = 5
 json-sections = none


=====================================
instances/piuparts.conf.anbe
=====================================
@@ -4,7 +4,6 @@
 
 [DEFAULT]
 flags-base =
-	--warn-on-others
 	--no-eatmydata
 	--scriptsdir /etc/piuparts/scripts
 	--allow-database
@@ -13,6 +12,7 @@ flags-default =
 	%(flags-base)s
 	--warn-on-leftovers-after-purge
 flags-leftovers =
+	--warn-on-others
 	%(flags-base)s
 	--scriptsdir /etc/piuparts/scripts-leftovers
 
@@ -2225,6 +2225,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-lenny)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 arch = amd64
 area = main
 components = main
@@ -2240,6 +2241,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-lenny)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = lenny222testing/main lenny222testing/non-free
 arch = amd64
 area = contrib
@@ -2253,6 +2255,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-lenny)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = lenny222testing/main lenny222testing/contrib
 arch = amd64
 area = non-free
@@ -2267,6 +2270,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-lenny)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 arch = i386
 setarch = linux32
 area = main
@@ -2283,6 +2287,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-lenny)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = lenny222testing_i386/main lenny222testing_i386/non-free
 arch = i386
 setarch = linux32
@@ -2297,6 +2302,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-lenny)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = lenny222testing_i386/main lenny222testing_i386/contrib
 arch = i386
 setarch = linux32
@@ -2623,6 +2629,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-squeeze)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 arch = amd64
 area = main
 components = main
@@ -2636,6 +2643,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-squeeze)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = squeeze222testing/main squeeze222testing/non-free
 arch = amd64
 area = contrib
@@ -2649,6 +2657,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-squeeze)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = squeeze222testing/main squeeze222testing/contrib
 arch = amd64
 area = non-free
@@ -2663,6 +2672,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-squeeze)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 arch = i386
 setarch = linux32
 area = main
@@ -2677,6 +2687,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-squeeze)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = squeeze222testing_i386/main squeeze222testing_i386/non-free
 arch = i386
 setarch = linux32
@@ -2691,6 +2702,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-squeeze)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = squeeze222testing_i386/main squeeze222testing_i386/contrib
 arch = i386
 setarch = linux32
@@ -3110,6 +3122,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-wheezy)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 arch = amd64
 area = main
 components = main
@@ -3123,6 +3136,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-wheezy)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = wheezy222testing/main wheezy222testing/non-free
 arch = amd64
 area = contrib
@@ -3136,6 +3150,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-wheezy)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = wheezy222testing/main wheezy222testing/contrib
 arch = amd64
 area = non-free
@@ -3150,6 +3165,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-wheezy)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 arch = i386
 setarch = linux32
 area = main
@@ -3164,6 +3180,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-wheezy)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = wheezy222testing_i386/main wheezy222testing_i386/non-free
 arch = i386
 setarch = linux32
@@ -3178,6 +3195,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-wheezy)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = wheezy222testing_i386/main wheezy222testing_i386/contrib
 arch = i386
 setarch = linux32
@@ -3701,6 +3719,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-jessie)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 arch = amd64
 area = main
 components = main
@@ -3714,6 +3733,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-jessie)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = jessie222testing/main jessie222testing/non-free
 arch = amd64
 area = contrib
@@ -3727,6 +3747,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-jessie)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = jessie222testing/main jessie222testing/contrib
 arch = amd64
 area = non-free
@@ -3741,6 +3762,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-jessie)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 arch = i386
 setarch = linux32
 area = main
@@ -3755,6 +3777,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-jessie)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = jessie222testing_i386/main jessie222testing_i386/non-free
 arch = i386
 setarch = linux32
@@ -3769,6 +3792,7 @@ piuparts-flags =
 	%(flags-default)s
 	%(flags-start-jessie)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = jessie222testing_i386/main jessie222testing_i386/contrib
 arch = i386
 setarch = linux32


=====================================
piuparts-slave.py
=====================================
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 #
 # Copyright 2005 Lars Wirzenius (liw at iki.fi)
-# Copyright © 2011-2017 Andreas Beckmann (anbe at debian.org)
+# Copyright © 2011-2019 Andreas Beckmann (anbe at debian.org)
 #
 # This program is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by the
@@ -919,17 +919,22 @@ def create_chroot(config, tarball, distro):
                                        time.gmtime()))
             output.write("Executing: " + command2string(command) + "\n\n")
             logging.debug("Executing: " + command2string(command))
-            p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
-            for line in p.stdout:
-                output.write(line)
-                logging.debug(">> " + line.rstrip())
-            p.wait()
-            output.write(time.strftime("\nEnd: %Y-%m-%d %H:%M:%S %Z\n",
-                                       time.gmtime()))
-            if os.path.exists(tarball + ".new"):
-                os.rename(tarball + ".new", tarball)
-            else:
-                logging.error("Tarball creation failed, see %s" % output_name)
+            try:
+                p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+                for line in p.stdout:
+                    output.write(line)
+                    logging.debug(">> " + line.rstrip())
+                p.wait()
+                output.write(time.strftime("\nEnd: %Y-%m-%d %H:%M:%S %Z\n",
+                                           time.gmtime()))
+                if os.path.exists(tarball + ".new"):
+                    os.rename(tarball + ".new", tarball)
+                else:
+                    logging.error("Tarball creation failed, see %s" % output_name)
+            except IOError:
+                output.write(time.strftime("\nFAIL: %Y-%m-%d %H:%M:%S %Z\n",
+                                           time.gmtime()))
+                logging.error("Tarball creation failed with IOError")
 
 
 def create_file(filename, contents):


=====================================
piuparts.py
=====================================
@@ -3,7 +3,7 @@
 #
 # Copyright 2005 Lars Wirzenius (liw at iki.fi)
 # Copyright © 2007-2018 Holger Levsen (holger at layer-acht.org)
-# Copyright © 2010-2018 Andreas Beckmann (anbe at debian.org)
+# Copyright © 2010-2019 Andreas Beckmann (anbe at debian.org)
 #
 # This program is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by the
@@ -672,7 +672,7 @@ def split_path(pathname):
     parts = []
     while pathname:
         (head, tail) = os.path.split(pathname)
-        # print "split '%s' => '%s' + '%s'" % (pathname, head, tail)
+        # print("split '%s' => '%s' + '%s'" % (pathname, head, tail))
         if tail:
             parts.append(tail)
         elif not head:
@@ -697,18 +697,18 @@ def canonicalize_path(root, pathname, report_links=False):
     one for each symlink encountered.
 
     """
-    # print "\nCANONICALIZE %s %s" % (root, pathname)
+    # print("\nCANONICALIZE %s %s" % (root, pathname))
     links = []
     seen = []
     parts = split_path(pathname)
-    # print "PARTS ", list(reversed(parts))
+    # print("PARTS ", list(reversed(parts)))
     path = "/"
     while parts:
         tag = "\n".join(parts + [path])
-        # print "TEST '%s' + " % path, list(reversed(parts))
+        # print("TEST '%s' + " % path, list(reversed(parts)))
         if tag in seen or len(seen) > 1024:
             fullpath = os.path.join(path, *reversed(parts))
-            # print "LOOP %s" % fullpath
+            # print("LOOP %s" % fullpath)
             path = fullpath
             logging.error("ELOOP: Too many symbolic links in '%s'" % path)
             break
@@ -724,14 +724,14 @@ def canonicalize_path(root, pathname, report_links=False):
             path = "/"
         elif os.path.islink(rootedpath):
             target = os.readlink(rootedpath)
-            # print "LINK to '%s'" % target
+            # print("LINK to '%s'" % target)
             links.append((newpath, target))
             if os.path.isabs(target):
                 path = "/"
             parts.extend(split_path(target))
         else:
             path = newpath
-    # print "FINAL '%s'" % path
+    # print("FINAL '%s'" % path)
     if report_links:
         return links
     return path
@@ -747,7 +747,7 @@ def is_broken_symlink(root, dirpath, filename):
 
     # The symlink chain, if any, has now been resolved. Does the target
     # exist?
-    # print "EXISTS ", pathname, os.path.exists(pathname)
+    # print("EXISTS ", pathname, os.path.exists(pathname))
     return not os.path.exists(pathname)
 
 
@@ -1561,6 +1561,10 @@ class Chroot:
             self.apt_get_install(to_remove=all_to_remove,
                                  to_install=version_qualified,
                                  flags=["--no-install-recommends", "--force-yes"])
+            # reinstall potentially downgraded packages, they may have
+            # missing files in case of unfortunate Breaks+Replaces timing
+            self.apt_get_install(to_install=version_qualified,
+                                 flags=["--no-install-recommends", "--reinstall"])
         else:
             self.remove_packages(all_to_remove)
 



View it on GitLab: https://salsa.debian.org/debian/piuparts/compare/4ff7394a9f2c40072bfad31c8aa44171cf74223a...ee1a1df0513a9a14ec402fc28ff6f6a36ce9e52d

-- 
View it on GitLab: https://salsa.debian.org/debian/piuparts/compare/4ff7394a9f2c40072bfad31c8aa44171cf74223a...ee1a1df0513a9a14ec402fc28ff6f6a36ce9e52d
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/piuparts-devel/attachments/20190214/8a8fe303/attachment-0001.html>


More information about the Piuparts-devel mailing list