Hello britney maintainers, I would like your advice and comments about a possible usage of britney in the context of a Debian derivative. Kali is currently based on Debian Stable but we are investigating ways to switch to Debian testing and thus become a "rolling" distribution as well. Currently we have a "kali-only" repository that gets combined with a mirror of the "wheezy" repository into a "kali" repository. This merge is managed by reprepro and has almost no intelligence (there's also a "kali-proposed-updates" repo where we stage updates that still need to be validated and that will be moved to "kali-only"). Now we want our underlying distribution to be "testing" and we obviously want to ensure installability of all packages in "kali". Thus I believe that we should use britney to build the (new) kali repository. That said we are not interested in RC bug tracking and minimum delays (on this aspect we're probably closer to Ubuntu's usage of britney, thus ccing Colin Watson who might have some code to share and some advice as well). We are thus doing some tries with britney and I would like to have your opinion on how you would approach this problem. Our initial approach was to map repositories this way: britney's unstable => debian-testing britney's tpu => kali-only britney's testing => kali But this did not work at all because all the kali packages are missing from britney's unstable and thus britney is trying to remove the packages instead of updating them. So we changed the Sources/Packages files for britney's unstable to be a concatenation of debian-testing + kali-only (and I really mean a simple "cat" here, some source/binary packages might appear multiple times albeit with different versions) and britney's tpu became empty. This no longer fails but it doesn't produce any satisfactorily result either because britney seems to hang in some sort of loop in the process. I attach the last lines of the log (up to a CTRL+C to interrupt it), the britney configuration and a script used to download the Packages/Sources files. The full log is at http://ouaza.com/~rhertzog/britney.log.xz if needed. Thus you can replicate the problem if you wish. If you have some advice on how to best debug that kind of problem, I'm all ears. Also I would like to know if you would be interested in patches that would make britney more easily reusable in other contexts than Debian itself. I am thinking of things like: - allowing usage of multiple directories to define britney's unstable - renaming Debian jargon to generic concepts: unstable -> source, testing -> target, tpu/pu => updates, etc. - make it easier to disable features that are not needed (right now I have to create quite a few empty files, and configure delays to 0 days, etc.) Cheers, PS: Just for the avoidance of doubts, the way to reproduce is to put the attached files in a directory (it was next to britney.py for me) and to do this: # bash ./update-data.sh # ./britney.py -c britney.conf -v >britney.log 2>&1 -- Raphaël Hertzog ◈ Debian Developer Discover the Debian Administrator's Handbook: → http://debian-handbook.info/get/
Attachment:
update-data.sh
Description: Bourne shell script
# Configuration file for britney # Paths for control files TESTING = data/kali TPU = data/empty #PU = /srv/release.debian.org/britney/var/data-b2/proposed-updates UNSTABLE = data/britney-unstable # Output NONINST_STATUS = data/non-installable-status EXCUSES_OUTPUT = data/output/excuses.html EXCUSES_YAML_OUTPUT = data/output/excuses.yaml UPGRADE_OUTPUT = data/output/output.txt HEIDI_OUTPUT = data/output/HeidiResult # List of release architectures ARCHITECTURES = i386 amd64 armel armhf # if you're not in this list, arch: all packages are allowed to break on you NOBREAKALL_ARCHES = i386 # if you're in this list, your packages may not stay in sync with the source FUCKED_ARCHES = # if you're in this list, your uninstallability count may increase BREAK_ARCHES = # if you're in this list, you are a new architecture NEW_ARCHES = # priorities and delays MINDAYS_LOW = 0 MINDAYS_MEDIUM = 0 MINDAYS_HIGH = 0 MINDAYS_CRITICAL = 0 MINDAYS_EMERGENCY = 0 DEFAULT_URGENCY = medium # hint permissions # support for old libraries in testing (smooth update) # use ALL to enable smooth updates for all the sections # # naming a non-existent section will effectively disable new smooth # updates but still allow removals to occur SMOOTH_UPDATES = libs oldlibs
* i386: libtk-tablematrix-perl, xmltv, xmltv-gui trying: libtk-tablematrix-perl/armhf skipped: libtk-tablematrix-perl/armhf (57 <- 11838) got: 76+0: i-29:a-19:a-13:a-15 * armhf: libtk-tablematrix-perl trying: libtk-tablematrix-perl/armel skipped: libtk-tablematrix-perl/armel (58 <- 11837) got: 76+0: i-29:a-19:a-14:a-14 * armel: libtk-tablematrix-perl trying: libtk-tablematrix-perl/amd64 skipped: libtk-tablematrix-perl/amd64 (59 <- 11836) got: 76+0: i-29:a-20:a-13:a-14 * amd64: libtk-tablematrix-perl trying: libtext-unaccent-perl/i386 skipped: libtext-unaccent-perl/i386 (60 <- 11835) got: 79+0: i-33:a-19:a-13:a-14 * i386: bins, debian-edu-config, debian-edu-install, libtext-unaccent-perl trying: libtext-unaccent-perl/armhf skipped: libtext-unaccent-perl/armhf (61 <- 11834) got: 76+0: i-29:a-19:a-13:a-15 * armhf: libtext-unaccent-perl trying: libtext-unaccent-perl/armel skipped: libtext-unaccent-perl/armel (62 <- 11833) got: 76+0: i-29:a-19:a-14:a-14 * armel: libtext-unaccent-perl trying: libtext-unaccent-perl/amd64 skipped: libtext-unaccent-perl/amd64 (63 <- 11832) got: 76+0: i-29:a-20:a-13:a-14 * amd64: libtext-unaccent-perl trying: libtext-ngram-perl/i386 skipped: libtext-ngram-perl/i386 (64 <- 11831) got: 77+0: i-31:a-19:a-13:a-14 * i386: liblingua-identify-perl, libtext-ngram-perl trying: libtext-ngram-perl/armhf skipped: libtext-ngram-perl/armhf (65 <- 11830) got: 76+0: i-29:a-19:a-13:a-15 * armhf: libtext-ngram-perl trying: libtext-ngram-perl/armel skipped: libtext-ngram-perl/armel (66 <- 11829) got: 76+0: i-29:a-19:a-14:a-14 * armel: libtext-ngram-perl trying: libtext-ngram-perl/amd64 skipped: libtext-ngram-perl/amd64 (67 <- 11828) got: 76+0: i-29:a-20:a-13:a-14 * amd64: libtext-ngram-perl trying: libtext-iconv-perl/i386 Traceback (most recent call last): File "./britney.py", line 2771, in <module> Britney().main() File "./britney.py", line 2737, in main self.upgrade_testing() File "./britney.py", line 2353, in upgrade_testing self.do_all() File "./britney.py", line 2271, in do_all (nuninst_end, extra) = self.iter_packages(upgrade_me, selected, nuninst=nuninst_end, lundo=lundo) File "./britney.py", line 2166, in iter_packages check_packages(arch, affected, skip_archall, nuninst) File "./britney.py", line 2054, in _check_packages self._installability_test(p, version, arch, broken, to_check, nuninst_arch) File "./britney.py", line 2754, in _installability_test r = self._inst_tester.is_installable(pkg_name, pkg_version, pkg_arch) File "/home/rhertzog/kali/rolling/britney2/installability/tester.py", line 167, in is_installable return self._check_inst(t) File "/home/rhertzog/kali/rolling/britney2/installability/tester.py", line 345, in _check_inst r = _pick_choice(rebuild) File "/home/rhertzog/kali/rolling/britney2/installability/tester.py", line 322, in _pick_choice if self._check_inst(p, musts_copy, never_copy, choices_copy): File "/home/rhertzog/kali/rolling/britney2/installability/tester.py", line 345, in _check_inst r = _pick_choice(rebuild) File "/home/rhertzog/kali/rolling/britney2/installability/tester.py", line 322, in _pick_choice if self._check_inst(p, musts_copy, never_copy, choices_copy): File "/home/rhertzog/kali/rolling/britney2/installability/tester.py", line 345, in _check_inst r = _pick_choice(rebuild) File "/home/rhertzog/kali/rolling/britney2/installability/tester.py", line 322, in _pick_choice if self._check_inst(p, musts_copy, never_copy, choices_copy): File "/home/rhertzog/kali/rolling/britney2/installability/tester.py", line 345, in _check_inst r = _pick_choice(rebuild) File "/home/rhertzog/kali/rolling/britney2/installability/tester.py", line 322, in _pick_choice if self._check_inst(p, musts_copy, never_copy, choices_copy): File "/home/rhertzog/kali/rolling/britney2/installability/tester.py", line 345, in _check_inst r = _pick_choice(rebuild) File "/home/rhertzog/kali/rolling/britney2/installability/tester.py", line 322, in _pick_choice if self._check_inst(p, musts_copy, never_copy, choices_copy): File "/home/rhertzog/kali/rolling/britney2/installability/tester.py", line 345, in _check_inst r = _pick_choice(rebuild) File "/home/rhertzog/kali/rolling/britney2/installability/tester.py", line 322, in _pick_choice if self._check_inst(p, musts_copy, never_copy, choices_copy): File "/home/rhertzog/kali/rolling/britney2/installability/tester.py", line 345, in _check_inst r = _pick_choice(rebuild) File "/home/rhertzog/kali/rolling/britney2/installability/tester.py", line 322, in _pick_choice if self._check_inst(p, musts_copy, never_copy, choices_copy): File "/home/rhertzog/kali/rolling/britney2/installability/tester.py", line 345, in _check_inst r = _pick_choice(rebuild) File "/home/rhertzog/kali/rolling/britney2/installability/tester.py", line 322, in _pick_choice if self._check_inst(p, musts_copy, never_copy, choices_copy): File "/home/rhertzog/kali/rolling/britney2/installability/tester.py", line 345, in _check_inst r = _pick_choice(rebuild) File "/home/rhertzog/kali/rolling/britney2/installability/tester.py", line 319, in _pick_choice musts_copy = musts.copy() KeyboardInterrupt