/srv/irclogs.ubuntu.com/2021/01/28/#ubuntu-release.txt

=== philroche_ is now known as philroche
=== guiverc2 is now known as guiverc
-queuebot:#ubuntu-release- New binary: linkchecker [amd64] (hirsute-proposed/none) [10.0.0-1] (no packageset)05:18
-queuebot:#ubuntu-release- New binary: linkchecker [arm64] (hirsute-proposed/none) [10.0.0-1] (no packageset)05:21
-queuebot:#ubuntu-release- New binary: linkchecker [armhf] (hirsute-proposed/none) [10.0.0-1] (no packageset)05:21
-queuebot:#ubuntu-release- New binary: linkchecker [ppc64el] (hirsute-proposed/none) [10.0.0-1] (no packageset)05:23
-queuebot:#ubuntu-release- New binary: linkchecker [s390x] (hirsute-proposed/none) [10.0.0-1] (no packageset)05:23
-queuebot:#ubuntu-release- New binary: linkchecker [riscv64] (hirsute-proposed/universe) [10.0.0-1] (no packageset)05:38
-queuebot:#ubuntu-release- Unapproved: barbican (focal-proposed/main) [1:10.0.0-0ubuntu0.20.04.1 => 1:10.0.0-0ubuntu0.20.04.2] (openstack, ubuntu-server)08:18
-queuebot:#ubuntu-release- Unapproved: accepted tzdata [source] (groovy-proposed) [2021a-0ubuntu0.20.10]09:34
-queuebot:#ubuntu-release- Unapproved: accepted tzdata [source] (focal-proposed) [2021a-0ubuntu0.20.04]09:43
-queuebot:#ubuntu-release- Unapproved: accepted tzdata [source] (bionic-proposed) [2021a-0ubuntu0.18.04]09:56
-queuebot:#ubuntu-release- Unapproved: accepted tzdata [source] (xenial-proposed) [2021a-0ubuntu0.16.04]10:06
-queuebot:#ubuntu-release- Unapproved: accepted base-files [source] (focal-proposed) [11ubuntu5.3]10:09
-queuebot:#ubuntu-release- Unapproved: friendly-recovery (groovy-proposed/main) [0.2.41 => 0.2.41ubuntu0.20.10.1] (core)10:39
-queuebot:#ubuntu-release- Unapproved: friendly-recovery (focal-proposed/main) [0.2.41 => 0.2.41ubuntu0.20.04.1] (core)10:41
-queuebot:#ubuntu-release- Unapproved: friendly-recovery (bionic-proposed/main) [0.2.38ubuntu1.1 => 0.2.38ubuntu1.2] (core)10:42
-queuebot:#ubuntu-release- Unapproved: rejected binutils [source] (focal-proposed) [2.34-6ubuntu1.1]11:31
xnoxaaaaaaaaaaaaaaa11:47
xnoxwhere is sil11:47
xnoxLaney:  https://code.launchpad.net/~xnox/debian-cd/activate-focal-hwe-kernel/+merge/397085 we have started to build hwe things in livefs (via livecd-rootfs change) and new server subiquity images do have both generic & hwe kernels initrds etc. Now need to trigger generation of the boot menu entries.11:48
xnoxcould you please take a look?11:48
sil2100o/11:50
sil2100Oh, ok, forgot about this step, might need to write it down somewhere11:51
sil2100On it now11:51
tjaaltonsil2100: fyi, linux-firmware is verified now11:52
tjaaltonon focla11:52
tjaaltonfocal11:52
sil2100tjaalton: thanks! :)11:52
sil2100xnox: merged and deployed11:54
Laneywoohoo work saved11:54
xnoxsil2100:  thank you!11:54
xnoxLaney:  =)))))) i think sil2100 felt disturbance in the force that somebody is trying to bypass him to touch debian-cd.11:55
sil2100xnox: ...and modding the checklist to make sure I don't miss it during 22.04.2 :D11:55
xnoxsil2100:  well, for 22.04.2 and/or even now, i do wonder if I can somehow make it do the right right always.11:55
Laneythat's good because I don't understand how that variable is used so I would have had to learn11:55
sil2100Good thing there's xnox always with a watchful eye!11:55
xnoxsil2100:  since we now always have hwe metapackages. we could be always generating hwe menu entries in subquity.11:55
Laneyhttps://paste.ubuntu.com/p/7NvZwBrzfz/11:56
Laneygibberish11:56
xnoxLaney:  let's pretend i understand how it works. looking at boot-amd64 it sort of looks like it would work right. but we shall see.11:56
sil2100Laney: just the way we like it11:56
xnoxLaney:  i think that hunk is not used, because that's d-i image stuff ?!11:57
Laneywho knows11:57
* xnox was looking into tools/boot/focal/boot-amd64 script11:57
Laneythat bit is slightly more understandable11:57
sil2100What I wouldn't want is for us to provide the boot entry all the time, even when the hwe meta package still points to the GA kernel - since that would be confusing to users11:59
sil2100So we'd have to add some smarts to make sure it's pointing at the hwe kernel but ignoring it if hwe = ga12:00
xnoxsil2100:  as we now found out on the desktop, right?! =)12:00
sil2100Yeah ;)12:00
tjaaltonbtw, the image has packages for both 5.6 & 5.10 oem kernels, and folks are now testing if 5.10 should replace 5.612:06
tjaaltonon the image12:07
tjaaltonthen the metapackage to pull would be -oem-20.04b12:07
tjaalton5.6 will be obsolete in a month12:07
-queuebot:#ubuntu-release- New binary: linux-signed [amd64] (xenial-proposed/main) [4.4.0-202.234] (core, kernel)12:13
xnoxtjaalton:  well, i thought it wasn't that straight forward. some 5.6-oem will move onto 5.8-hwe; and some will start off with 5.10-oem; and some will upgrade from 5.6-oem to 5.10-oem.12:15
xnoxunless things have changed =)12:15
xnoxtjaalton:  do we have oem-metas that reference oem-20.04b on the iso itself?12:16
tjaaltonthat's correct, but the image probably has no need for 5.6 anyway. most of the migrations have happened already aiui12:17
tjaaltonthe image didn't seem to have 20.04b meta, so I'd say no?12:17
tjaaltonanyway, they're testing 5.10 now and should have results before the end of the week12:18
xnoxtjaalton:  i'm just worried about image size of 3 x (kernel + lrm) stacks.12:24
tjaaltonsure, I'm pretty confident 5.6 will get dropped12:25
LaneyO_O12:26
tjaaltonalso, I'm forced to respin 5.10 but it should get in updates by tuesday12:28
tjaalton5.6 has a security update respin12:29
xnoxsomehow i don't see meta, but linux-image-5.10.0-1011-oem is on the iso12:29
tjaaltonyeah I'm not sure how it got there..12:29
xnoxi wonder if our globs for nvidia or some such pull that in.12:29
xnoxtjaalton:  yeap we pull in linux-modules-nvidia-460-oem-20.0412:30
xnoxwait12:30
xnoxand this one too linux-modules-nvidia-460-oem-20.04b12:30
tjaaltonah12:31
xnoxso 3x nvidia, with 2.5x of kernels =)12:31
LaneyI thought 5.6 was meant to be dropped12:35
tjaaltonaiui they want to test that 5.10 at least boots up12:36
tjaaltonon the machines that now use 5.612:36
tjaaltonhmm12:36
tjaaltonthough most should use hwe12:36
tjaaltonanyway, rex knows more :)12:37
Laneyright, machines go to hwe or new oem as required, then old oem goes away, that's what I thought the idea was12:37
tjaaltonyes12:37
tjaaltonbut timing for the .2 image was challenging12:37
sil2100xnox: hm, can we consider https://bugs.launchpad.net/ubuntu/+source/u-boot/+bug/1905274 verified?12:46
ubot5Ubuntu bug 1905274 in u-boot (Ubuntu Groovy) "enable u-boot spl for riscv64" [Undecided,Fix committed]12:47
xnoxsil2100:  yes, commented.12:58
xnoxsil2100: focal verified for realz. groovy is hand wave.12:58
tseliothey sil2100 , can you approve LP: #1904583 for bionic too, please? (so that we can verify it)13:48
ubot5Launchpad bug 1904583 in ubuntu-drivers-common (Ubuntu Bionic) "SRU: Backport the latest developments on drivers detection and hybrid graphics" [Medium,In progress] https://launchpad.net/bugs/190458313:48
sil2100tseliot: adding it to my TODO o/14:00
sil2100xnox: thanks!14:00
tseliotsil2100, thanks a lot :)14:00
sil2100slyon: hey! http://autopkgtest.ubuntu.com/packages/n/netplan.io/focal/amd64 <- did you take a look at those? Since I was thinking about releasing glib2.0, but I see this one is happening all the time - it feels flaky as everytime a different test fails, so I guess it's nothing scary, right?14:01
ckinghi there, zsys and zfsutils-linux for hirsute are stuck in proprosed migration, is it possible to add a hint skipping the implicit dependency (grubzfs-testsuite) and get it moving?14:04
slyonhey sil2100 ! Yes, I looked into them. looked like flaky timeouts which happen from time to time. But I'm not sure why it  fails everytime...14:06
slyonIt's not normal that they fail so often in a row14:06
sil2100Ok14:07
slyonLet me quickly try if I can reporduce them in a local autopkgtest14:08
xnoxcking: any uploader can retry tests with extra packages from proposed, or everything from proposed. you know that right?14:11
xnoxand grub-zfstestsuite seems to need the same fixes as zsys. looking into that.14:12
xnoxtrying to upload grub-zfstestsuite that doesn't ftbfs14:15
ckingxnox, ack, thanks14:34
slyonsil2100: the "bonds" test passed locally. So it seems to be flaky indeed. Flakyness seems to have become more intense as of glib2.0/2.64.6-1~ubuntu20.04.1, though.14:35
slyonBut I think you should be fine releasing glib2.014:36
xnoxcking:  calling a pass.15:27
xnox# github.com/ubuntu/grubmenugen-zfs-tests_test [github.com/ubuntu/grubmenugen-zfs-tests.test]15:27
xnox./disk_handler_test.go:248:38: not enough arguments in call to zfs.DatasetSnapshot15:27
xnoxhave (string, bool, map[zfs.Prop]zfs.Property)15:27
xnoxwant (string, bool, map[zfs.Prop]zfs.Property, map[string]string)15:28
xnoxdidrocks999:  can you please fix grub-zfstestsuite too?15:28
=== alan_g_ is now known as alan_g
didrocks999xnox: not immediatly, this one depends on a grub with patched behavior. However, when we prepared both grub-zfstestsuite, an out of VCS upload was done by foundation, and so, we need to rebase our commits which is a nightmare (+redo all the work and testing). No time for this right now15:58
didrocks999this is why I told cking  that it’s ok to hint to skip grub-zfstestsuite behavior15:59
-queuebot:#ubuntu-release- Unapproved: dpdk (focal-proposed/main) [19.11.3-0ubuntu0.2 => 19.11.6-0ubuntu0.20.04.1] (kernel-dkms, ubuntu-server)16:00
-queuebot:#ubuntu-release- Unapproved: dpdk (groovy-proposed/main) [19.11.5-1 => 19.11.6-0ubuntu0.20.10.1] (kernel-dkms, ubuntu-server)16:00
xnoxi see16:01
xnoxdidrocks999:  i wonder if i should help rebasing that.16:01
xnoxcking:  sigh16:01
xnoxdidrocks999:  cking: sounds like we will need to ping ubuntu-release to allow things to migrate.16:01
didrocks999yeah, that’s what I suggested cking, it’s only a testsuite anyway so it can stay in proposed16:03
didrocks999xnox: if you want, there is a bunch of patches, but the most important part and time consuming is testing grub16:03
ckingugh, what a pain16:12
didrocks999cking: really, as told by email, just ask for an hint on autopkgtests to skip the grub-zfstestsuite, there is no impact on this one anyway and this is on my list to spend again a full day on it redoing the work that was overridden by previous grub upload16:17
vorlonif anyone else is having trouble finding that package, it's apparently grubzfs-testsuite in the archive16:19
ckingdidrocks999, so I did ask a coupla hours ago in this channel, not sure what else I need to do16:19
didrocks999sil2100: mind hinting zfs-linux and zsys to transition to the release pocket, skipping grubzfs-testsuite autopkgtests failure (as we will let it in -proposed) ^16:22
cking+1 ^16:22
sil2100didrocks999: I can look at it after the meeting and after some SRU releases for .2! ;)16:24
* cking suddenly realizes he didn't ask clearly enough, doh16:25
didrocks999thanks sil2100!16:25
sil2100cking: in the meantime, could you take a look at https://bugs.launchpad.net/ubuntu/+source/zfs-linux/+bug/1894329 verification for focal? Since I guess it would be good to get that for .2?16:57
ubot5Ubuntu bug 1894329 in coreutils (Ubuntu) "ZFS revert from grub menu not working." [High,Incomplete]16:57
xnoxvorlon:  oooh, components missmatches in maas seed in focal and needs promotion => pxelinux (deb) from the syslinux source16:57
xnox(and they try to do testing/building with main only)16:58
sil2100bdmurray: if you could verify at least groovy and focal tzdata, that would be awesome16:58
vorlonubuntu-archive: we have a migration prepared for moving ubuntu-archive-tools from bzr to git (https://code.launchpad.net/~rbalint/ubuntu-archive-tools/bzr-to-git/+merge/384436).  Is there a good/bad time to do this migration?16:58
vorlon(the git branch is a bit behind so I'll need to ask rbalint for a reimport)16:59
sil2100hm, not sure how many tools from there are used by the publisher and such16:59
vorlonxnox: in *focal*?17:00
sil2100So you're probably more familiar with what risk that could introduce - I just know that for image build and publishing we have a local copy on ancientminister and that won't break anything17:00
vorlonsil2100: I would handle migrating the snakefruit and anonster checkouts, it's more about coordinating with the archive team to update their local checkouts and retarget any in-progress MPs17:01
bdmurraysil2100: okay17:01
bdmurrayvorlon: I've one MP outstanding for ubuntu-archive-tools17:01
xnoxvorlon:  and in hirsute too pxelinux syslinux-common17:01
vorlonbryce: ack17:01
xnoxvorlon:  they got dropped when we moved off them, but maas still uses them.17:01
vorlonxnox: how did it end up as a c-m in focal?17:01
xnoxvorlon:  by getting seeded into maas-supported seed by me.17:02
xnox(sponsoring merge proposal from maas team)17:02
xnoxvorlon:  it's stuff inside the maas snap / boot-resources maas stream.17:02
vorlonmm17:03
xnoxpxelinux syslinux-common => both should be in main in focal & hirsute.17:03
xnoxvorlon:  unless you disagree with how to pxeboot?17:03
vorlonxnox: I generally disagree with changing seeds in stable releases :)17:03
xnoxvorlon:  i can ask for clarifications.17:04
vorlonI suppose it's a special case where there was an untracked dependency that was only detected post-release17:04
xnoxyeah, that.17:05
LaneyI would actively enjoy it if ubuntu-archive-tools were to be migrated17:06
vorlonLaney: any concerns about timing?17:07
vorlonwe do have rather a few outstanding MPs which I think is why this didn't get done sooner; I'll try to garden those before pulling the trigger17:07
Laneynot for my own checkout17:07
-queuebot:#ubuntu-release- New: accepted linux-signed [amd64] (xenial-proposed) [4.4.0-202.234]17:08
LaneyOnly if there's a problem for the point release which needs a fix there and it doesn't get deployed because some server's copy didn't get switched over yet17:09
Laneyprobably low likelihood17:09
vorlonxnox: syslinux source is in main in focal, promoting the binaries requires republishing focal-updates, I'm inclined to punt17:10
xnoxvorlon:  after pooint release? we publish focal-updates all the time.....17:11
rbalintvorlon, please ping me when everything is ready and i'll do the reimport17:11
vorlonrbalint: thanks17:11
vorlonxnox: not even then.  I don't want to do a re-publish of a package to -updates for no other reason than a binary c-m fix when the source is already in main and it is therefore already tracked for security support17:12
xnoxvorlon:  ack!17:12
xnoxgotcha.17:12
vorlontseliot: nvidia-graphics-drivers-435 source is in hirsute with no binaries; should it be removed? (noticed because it's currently in the i386 whitelist, but is no longer after a refresh)17:17
-queuebot:#ubuntu-release- Unapproved: accepted ubuntu-drivers-common [source] (bionic-proposed) [1:0.8.6.3~0.18.04.1]17:22
-queuebot:#ubuntu-release- Unapproved: accepted nvidia-prime [source] (bionic-proposed) [0.8.15.3~0.18.04.1]17:26
bdmurraysil2100: tzdata verified for F and G17:37
xnoxvorlon:  lp:maas-images are moving from using bionic bootloaders to using focal ones; since we are not choosing to republish syslinux into main unchanged, it means ltrager will have to change lp:maas-images  to enable universe to pull pxelinux.17:40
xnoxbut otherwise ~foundations-bugs are still on the hook to maintain it.17:41
* cjwatson has no concerns about u-a-t if somebody else is dealing with the migration and chasing down things like clones on snakefruit :)17:41
cjwatsonwe've been pointing people at tools like copy-package there for some time, so it's probably worth doing a wiki search (including {help,dev}.launchpad.net) and actively notifying people like IS who might be heavy users17:42
-queuebot:#ubuntu-release- Packageset: Removed libcroco from i386-whitelist in hirsute17:43
-queuebot:#ubuntu-release- Packageset: Removed nvidia-graphics-drivers-435 from i386-whitelist in hirsute17:43
-queuebot:#ubuntu-release- Packageset: Removed uthash from i386-whitelist in hirsute17:43
-queuebot:#ubuntu-release- Packageset: Added libbpf to i386-whitelist in hirsute17:43
-queuebot:#ubuntu-release- Packageset: Added libfile-dirlist-perl to i386-whitelist in hirsute17:43
-queuebot:#ubuntu-release- Packageset: Added libfile-touch-perl to i386-whitelist in hirsute17:43
-queuebot:#ubuntu-release- Packageset: Added nvidia-graphics-drivers-460-server to i386-whitelist in hirsute17:43
vorlonxnox: ok; I don't really want maas-images pulling arbitrarily from universe, but OTOH if we're not going to have a feedback loop that enforces main-ness before release I'm not sure whether there's much value17:51
=== ijohnson is now known as ijohnson|lunch
vorloncjwatson: good points - though in the worst case users will update their checkouts and get a README pointing them elsewhere so I'm not too fussed if we miss a spot17:55
xnoxvorlon:  the target so far is to move maas-images to next lts around/after .1 release.17:56
xnoxvorlon:  should we do something of the same effect earlier?17:56
vorlonxnox: which is not the point at which we should be getting feedback from the MAAS team that packages need to be promoted to main for the release17:57
xnoxor like have ~ubuntu-cdimage owned pipeline that builds maas-images ?17:57
xnoxor even building out of devel?17:57
cjwatsonvorlon: yeah17:57
vorlonxnox: they ought to have a CI pipeline for devel, independent of what release they use for production17:57
xnoxvorlon:  i wonder if we should have per-series boot-resources builds anyway.17:57
xnoxvorlon:  ack.17:57
vorlonxnox: I'm fine not having per-series boot resources, I just want them checking this stuff against trunk :)17:58
vorlonxnox: and where are you having this conversation w/ Lee given that he's not in this channeL?17:58
xnoxvorlon:  ~secureboot-maas17:59
xnoxvorlon:  my special place where i have maas team on demand =)17:59
vorlon>_<18:00
xnoxvorlon:  i'll open maas-images project bug report about that.18:00
-queuebot:#ubuntu-release- Unapproved: cinder (groovy-proposed/main) [2:17.0.1-0ubuntu1 => 2:17.0.1-0ubuntu2] (openstack)18:08
-queuebot:#ubuntu-release- Unapproved: cinder (bionic-proposed/main) [2:12.0.10-0ubuntu1 => 2:12.0.10-0ubuntu2] (openstack, ubuntu-server)18:10
-queuebot:#ubuntu-release- Unapproved: cinder (focal-proposed/main) [2:16.2.1-0ubuntu1 => 2:16.2.1-0ubuntu2] (openstack, ubuntu-server)18:10
bdmurraysil2100: I'm looking at the tzdata autopkgtest failures now18:12
tseliotvorlon, it can be removed, since I think we have transitional packages for it18:12
-queuebot:#ubuntu-release- Unapproved: python-pip (focal-proposed/universe) [20.0.2-5ubuntu1.1 => 20.0.2-5ubuntu1.2] (no packageset)18:38
-queuebot:#ubuntu-release- Unapproved: python-virtualenv (focal-proposed/universe) [20.0.17-1 => 20.0.17-1ubuntu0.1] (no packageset)18:39
kanashiroubuntu-archive: I need some removals from hirsute to unblock ruby-faraday{,-middleware} migration. You can find all the details in LP #1913596 and LP #191359818:44
ubot5Launchpad bug 1913596 in ruby-puppet-forge (Ubuntu) "autopkgtest failure is blocking ruby-faraday{,-middleware} in hirsute-proposed" [Undecided,New] https://launchpad.net/bugs/191359618:44
ubot5Launchpad bug 1913598 in ruby-faraday-middleware (Ubuntu) "[RM] autopkgtest failure is blocking ruby-faraday{,-middleware} in hirsute-proposed" [Undecided,New] https://launchpad.net/bugs/191359818:44
sil2100bdmurray: thanks!18:44
kanashirowe would be following what debian already did18:45
kanashiroit will also unblock many ruby libraries that are stuck in proposed at the moment19:03
bdmurraysil2100: tzdata is all SRU'ed and autopkgtests have passed.19:51
bdmurraySRU verified19:51
vorlonxnox: why does boost1.74 not build libboost-iostreams1.74-dev on i386? (thin-provisioning-tools wants it)19:51
-queuebot:#ubuntu-release- Packageset: Removed libesmtp from i386-whitelist in hirsute19:58
-queuebot:#ubuntu-release- Packageset: Removed libnet from i386-whitelist in hirsute19:58
-queuebot:#ubuntu-release- Packageset: Added libudfread to i386-whitelist in hirsute19:58
=== ijohnson|lunch is now known as ijohnson
vorlonxnox: I guess the answer is you pruned everything not known to be needed; straightforward enough. I'm readding now20:11
* enyc meows20:14
vorlonsil2100: https://autopkgtest.ubuntu.com/packages/u/ubuntu-image/hirsute/s390x this is crazypants... why are tests consistently failing on s390x due to failure to start the grub-common.service, only with the new python3-defaults, and passing otherwise?20:16
vorlonalso why is there a grub-common service on s390x :P20:16
sil2100bdmurray: thanks!20:35
sil2100vorlon: uh, I'd have to take a look, but that sounds weird! And it seems to be happening only for the qa tests, and that depends on @buildeps@ and uh, git20:37
sil2100So wtf20:37
sil2100Oh, wait, one time it was unittests.sh that also failed, uh20:37
sil2100So it's not reliably failing the same thing!20:38
vorlonsil2100: yeah :/21:01
bdmurrayvorlon: speaking of things not to phase - language-pack-* ?21:07
xnoxvorlon:  i don't know why we build grub-common deb on s390x.21:32
vorlonxnox: well if we didn't then ubuntu-image would currently be uninstallable21:36
vorlonbdmurray: sounds right to me21:36
bdmurrayso sil2100 you might want to fully phase those21:37
sil2100bdmurray: yeah, will do21:55
-queuebot:#ubuntu-release- Unapproved: update-manager (groovy-proposed/main) [1:20.10.2 => 1:20.10.3] (core)22:17
-queuebot:#ubuntu-release- Unapproved: update-manager (focal-proposed/main) [1:20.04.10.3 => 1:20.04.10.4] (core)22:41
-queuebot:#ubuntu-release- Unapproved: accepted update-manager [source] (groovy-proposed) [1:20.10.3]22:56
-queuebot:#ubuntu-release- Unapproved: rejected update-manager [source] (focal-proposed) [1:20.04.10.4]22:57
-queuebot:#ubuntu-release- Unapproved: ubiquity (focal-proposed/main) [20.04.15.5 => 20.04.15.6] (core)22:59
-queuebot:#ubuntu-release- New binary: adios [s390x] (hirsute-proposed/none) [1.13.1-27] (no packageset)23:28
-queuebot:#ubuntu-release- New binary: adios [amd64] (hirsute-proposed/universe) [1.13.1-27] (no packageset)23:32
-queuebot:#ubuntu-release- New binary: adios [ppc64el] (hirsute-proposed/universe) [1.13.1-27] (no packageset)23:32
=== fabiomirmar_ is now known as fabiomirmar
-queuebot:#ubuntu-release- New binary: adios [arm64] (hirsute-proposed/universe) [1.13.1-27] (no packageset)23:55
-queuebot:#ubuntu-release- New binary: adios [armhf] (hirsute-proposed/universe) [1.13.1-27] (no packageset)23:55

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!