*** EricGonczer_ has quit IRC | 00:06 | |
*** EricGonczer_ has joined #openstack-containers | 00:11 | |
*** EricGonczer_ has quit IRC | 00:35 | |
*** EricGonczer_ has joined #openstack-containers | 00:56 | |
*** EricGonczer_ has quit IRC | 00:57 | |
*** yuanying has joined #openstack-containers | 01:30 | |
*** yuanying_ has quit IRC | 01:33 | |
*** EricGonczer_ has joined #openstack-containers | 01:56 | |
*** rongze has joined #openstack-containers | 02:15 | |
*** erkules_ has joined #openstack-containers | 02:17 | |
*** erkules has quit IRC | 02:19 | |
*** suro_ has joined #openstack-containers | 02:19 | |
*** suro_1 has joined #openstack-containers | 02:26 | |
*** suro_ has quit IRC | 02:28 | |
*** suro_1 has quit IRC | 02:42 | |
*** achanda has joined #openstack-containers | 03:00 | |
*** achanda has quit IRC | 03:02 | |
*** adrian_otto has joined #openstack-containers | 03:14 | |
*** EricGonczer_ has quit IRC | 03:24 | |
yuanying | sdake: around? | 03:49 |
---|---|---|
*** EricGonczer_ has joined #openstack-containers | 03:49 | |
*** EricGonczer_ has quit IRC | 03:59 | |
sdake | shoot uyanying | 04:09 |
sdake | just tyring to beat ironic into submission | 04:09 |
yuanying | Sorry, I have one question. | 04:09 |
sdake | shoot | 04:10 |
yuanying | Why is Ironic used directly? | 04:10 |
yuanying | Usually, ironic is used via nova. | 04:10 |
*** dimsum__ has quit IRC | 04:11 | |
yuanying | So heat can manage Ironic baremetal. | 04:11 |
sdake | yes i am going to use nova to manage ironic to manage the nodes for bays | 04:13 |
sdake | I dont intend to use iroinic direclty | 04:13 |
sdake | but I have to actually get ironic to work in the first place to do so :) | 04:13 |
sdake | I've managed to boot t he cirros iamge with pxeboot+ssh agent | 04:14 |
sdake | trying with agent+ssh now failing | 04:14 |
sdake | attempting to get fedora atomic on the ironic managed machines but pxeboot is not booting it | 04:14 |
sdake | I guess the image is in the wrong format | 04:14 |
sdake | I installed it as well, and then copied that and tried that as an image | 04:14 |
sdake | and that doesn't seem to work | 04:14 |
sdake | the agent seems to qmeu convert directly to block device | 04:15 |
sdake | so I am hopeful the agent will work better then pxe+ssh does | 04:15 |
*** yuanying_ has joined #openstack-containers | 04:15 | |
yuanying_ | Sorry, It was my mistake. | 04:15 |
sdake | all I get is "Booting the kernel." | 04:16 |
sdake | and then nothing | 04:16 |
yuanying_ | ironic pxeboot was failed? | 04:16 |
sdake | oh snap I just got something to boot | 04:16 |
sdake | pxeboot + ssh doesn't seem to work for my case, so I'm trying agent+ssh | 04:16 |
sdake | http://docs.openstack.org/developer/ironic/dev/dev-quickstart.html#deploying-ironic-with-devstack | 04:17 |
yuanying_ | Hmmm | 04:17 |
*** yuanying has quit IRC | 04:18 | |
yuanying_ | I have no trouble on ironic devstack. | 04:18 |
sdake | your booting cirros pxe+ssh right? | 04:19 |
sdake | that works for me | 04:19 |
yuanying_ | yes | 04:19 |
sdake | what doesn't work is fedora atomic (which has kubernetes in it) | 04:19 |
sdake | as well as docker | 04:19 |
sdake | if you can figure out how to boot the thing, I'd love you forever ;-) | 04:20 |
sdake | http://dl.fedoraproject.org/pub/alt/stage/21_RC5/Cloud/Images/x86_64/ | 04:20 |
yuanying_ | Oh | 04:20 |
yuanying_ | OK I try Atomic on ironic. | 04:20 |
sdake | looking at cirros-uec it looks like its just a squashfs.img that is empty | 04:20 |
sdake | do you know what format the image has to be in for ironic to install it to the disk? | 04:21 |
yuanying_ | qcow2 | 04:21 |
sdake | srs? | 04:21 |
yuanying_ | what is srs? | 04:22 |
sdake | serious | 04:22 |
sdake | short hand ;) | 04:22 |
sdake | I was converting it to raw | 04:22 |
yuanying_ | OK, I'm not native english. | 04:22 |
sdake | yup I understand sorry for the slang | 04:22 |
yuanying_ | and you should | 04:22 |
sdake | what I want to do with bay create is ahve a base image, and then modify it with guestfs to configure kubernetes, and hen store that in glance and then deploy a master and minions | 04:23 |
sdake | based upon bay's node_count | 04:23 |
sdake | in order to do that, I need an OS that has kubernetes in it | 04:23 |
yuanying_ | yes | 04:23 |
sdake | so in glance, the image should be stored as raw or qcow2? | 04:23 |
yuanying_ | yes, and you need to associate image.qcow2 and kernel image and ramdisk. | 04:24 |
sdake | for ironic to boot it? | 04:24 |
sdake | I got the association down | 04:24 |
sdake | does the image have to have a MBR/boot sector? | 04:24 |
yuanying_ | I think no. | 04:25 |
*** ygoto has quit IRC | 04:25 | |
yuanying_ | Anyway, I try boot atomic on my devstack. | 04:26 |
sdake | I would expect the kernel to spew boot info from the kernel boot process after the deploy starts it | 04:26 |
sdake | cool let me know if you figure it out | 04:26 |
*** ygoto has joined #openstack-containers | 04:28 | |
sdake | yuanying_ my change to dib to pull out the vmlinuz/initrd | 04:30 |
sdake | http://paste.fedoraproject.org/157498/01303014 | 04:30 |
yuanying_ | OK | 04:30 |
sdake | declare -x DIB_BAREMETAL_BOOT_PATTERN="/ostree/fedora-atomic*" | 04:32 |
sdake | declare -x DIB_BAREMETAL_INITRD_PATTERN="*img" | 04:32 |
sdake | declare -x DIB_BAREMETAL_KERNEL_PATTERN="vmlinuz*" | 04:32 |
sdake | yuanying_ do you do alot of work on ironic? | 04:52 |
sdake | nto something people t ypicaly have setup in devstack | 04:52 |
sdake | yuanying_ ^ | 04:52 |
yuanying_ | No, downloading atomic is slow, because of my network. | 04:53 |
sdake | makes sense | 04:54 |
sdake | but what i mean is do you work on ironic for your job? | 04:54 |
yuanying_ | My team uses TripleO. | 04:54 |
sdake | cool | 04:54 |
yuanying_ | But I'm interested in Kolla. | 04:54 |
sdake | ya magnum is a natural progression of kolla | 04:55 |
yuanying_ | yesyes. | 04:55 |
sdake | because you can't relaly have openstack on openstack if you ahve to deploy kubernetes | 04:55 |
sdake | unless openstack is doing the dpeloyign ;-) | 04:55 |
yuanying_ | haha | 04:56 |
sdake | so what does ironic do, pxe boot the deploy disk | 04:56 |
sdake | and that launches the user iamge? | 04:56 |
sdake | when I try my atomic images, it always gets jammed up on the deploy_ramdisk after kernel boot | 04:56 |
sdake | although I can't log serial output for some reason | 04:56 |
* sdake ughs | 04:57 | |
yuanying_ | sometimes PXE boot is difficult to debug. | 04:57 |
sdake | in a past life I worked at embedded software company MontaVista software | 04:58 |
sdake | we pxebooted everything | 04:58 |
sdake | and that was standard in embedded world | 04:58 |
yuanying_ | Lastweek my team have another problem on iSCSI in Ironic. | 04:58 |
sdake | but what does deploy_ramdisk do? | 04:59 |
sdake | is it actually doing something ? :-) | 04:59 |
yuanying_ | haha | 04:59 |
sdake | I can tell its up - it is responding t o ping | 05:01 |
sdake | but can't interface with it | 05:01 |
*** kebray has joined #openstack-containers | 05:05 | |
*** kebray has joined #openstack-containers | 05:09 | |
*** dimsum__ has joined #openstack-containers | 05:11 | |
*** dimsum__ has quit IRC | 05:17 | |
*** dharmit has joined #openstack-containers | 05:23 | |
sdake | well I just fixed my logging so maybe that will give me more info | 05:23 |
sdake | yuanying_ does tripleo continually start and stop nodes for upgrade purposes? | 05:27 |
sdake | my deploy just basically gets stuck | 05:31 |
*** nshaikh has joined #openstack-containers | 05:32 | |
sdake | yuanying_ can you take a look: http://paste.fedoraproject.org/157504/18016744 | 05:32 |
*** takadayuiko has joined #openstack-containers | 05:34 | |
yuanying_ | My devstack environment was broken... | 05:35 |
sdake | lots of daemon errors from tgtd | 05:37 |
yuanying_ | yes, it seems, iscai is wrong | 05:37 |
sdake | is that iscsi on my local system? | 05:38 |
yuanying_ | ramdisk boot iscsi target. | 05:39 |
yuanying_ | and ironic conductor attach that. | 05:39 |
sdake | conductor writes the boot image to an iscsi target? | 05:40 |
yuanying_ | yes. | 05:40 |
sdake | perhaps iscsi target isn't large neough | 05:40 |
sdake | any pointers on which command sto use to debug with | 05:40 |
sdake | so I dont have to spend 4 hours googling ;-) | 05:40 |
yuanying_ | Are you able to resolve likely? | 05:42 |
sdake | hrm | 05:43 |
*** dharmit has quit IRC | 05:44 | |
sdake | where does iscsi store files? | 05:52 |
*** dharmit has joined #openstack-containers | 05:52 | |
*** adrian_otto has quit IRC | 05:53 | |
*** kebray has quit IRC | 05:54 | |
yuanying_ | baremetal? | 05:55 |
sdake | ya on devstack | 05:55 |
sdake | on the filesystem? | 05:55 |
sdake | or on a block device | 05:56 |
sdake | is the problem on the vm's iscsid, or my host system's iscsid? | 05:56 |
sdake | you mentioned resolver, you mean to think the vms can't resolve outside the network? | 05:57 |
yuanying_ | maybe vm's iscsid | 05:57 |
sdake | yup not resolving | 05:57 |
yuanying_ | /var/lib/libvirt/images/baremetalbrbm_1.qcow2 | 05:57 |
sdake | if name service wasn't resolving, I guess this problem would exist? | 05:58 |
yuanying_ | DNS? | 05:59 |
sdake | ya dns | 05:59 |
yuanying_ | Oh, my word is incorrect. | 05:59 |
yuanying_ | "Are you able to resolve likely?" means "Will it go well?" | 06:00 |
sdake | right | 06:01 |
sdake | I understand now | 06:01 |
sdake | I have no idea what the problem is :) | 06:01 |
sdake | so iscsid on my host machine is not at fault then? | 06:01 |
sdake | or is likely busted? | 06:01 |
yuanying_ | hmm | 06:02 |
sdake | my atomic .qcow2 /var/lib/libvirt file is 6.5mb | 06:03 |
sdake | rather 6.5g | 06:03 |
sdake | the one that booted (cirros) is 25mb | 06:03 |
sdake | so it must be transferring some info | 06:03 |
yuanying_ | ya, Booting Cirros is workd? | 06:04 |
sdake | yup | 06:04 |
yuanying_ | oh | 06:07 |
yuanying_ | Baremetal image needs kernel and ramdisk on it's image. | 06:08 |
yuanying_ | https://github.com/openstack/diskimage-builder/blob/master/elements/baremetal/cleanup.d/99-extract-kernel-and-ramdisk | 06:08 |
sdake | atomic has those files | 06:09 |
sdake | the deploy ramdisk is just getting stuck | 06:09 |
yuanying_ | oh, i see, declare -x DIB_BAREMETAL_INITRD_PATTERN="*img" | 06:09 |
sdake | its not r ebooting into pxe agai nto star tthe new kernel and initrd | 06:10 |
sdake | have you got the fedora at omic image donwloaded to try out? | 06:10 |
sdake | curious if its just my environment or what | 06:10 |
yuanying_ | yes | 06:10 |
yuanying_ | but it is not workd. | 06:11 |
*** ygoto has quit IRC | 06:35 | |
*** ygoto has joined #openstack-containers | 06:39 | |
sdake | did it boot into the second stage? | 06:51 |
sdake | or bust at deploy? | 06:51 |
sdake | oh well time to PTFO this problem will be there when I'm bright and busy | 06:52 |
sdake | bushy | 06:52 |
*** jgjl has joined #openstack-containers | 07:30 | |
*** erkules_ is now known as erkules | 07:40 | |
yuanying_ | dmnn.. I have same error. | 09:15 |
*** dimsum__ has joined #openstack-containers | 09:15 | |
*** dimsum__ has quit IRC | 09:20 | |
*** takadayuiko has quit IRC | 09:27 | |
nshaikh | Hello, I am trying to setup magnum from the README docs. Do I need to setup devstack before setting magnum ? | 09:48 |
*** rongze has quit IRC | 10:32 | |
*** sdake has quit IRC | 10:44 | |
*** ygoto has quit IRC | 10:57 | |
*** jgjl has quit IRC | 11:07 | |
*** jgjl has joined #openstack-containers | 11:13 | |
*** dimsum__ has joined #openstack-containers | 11:47 | |
*** dimsum__ is now known as dims | 12:05 | |
*** EricGonczer_ has joined #openstack-containers | 12:29 | |
*** jgjl has quit IRC | 12:30 | |
*** dharmit has quit IRC | 12:30 | |
*** EricGonczer_ has quit IRC | 12:36 | |
*** EricGonczer_ has joined #openstack-containers | 13:40 | |
*** jeckersb_gone is now known as jeckersb | 13:47 | |
openstackgerrit | Merged stackforge/magnum: Add a node object https://review.openstack.org/139866 | 13:48 |
openstackgerrit | Merged stackforge/python-magnumclient: Add image_id and node_count to bay-create https://review.openstack.org/139290 | 13:48 |
openstackgerrit | Merged stackforge/python-magnumclient: Add node object to the python client https://review.openstack.org/139867 | 13:49 |
*** EricGonczer_ has quit IRC | 13:50 | |
*** rongze has joined #openstack-containers | 13:53 | |
*** thomasem has joined #openstack-containers | 13:56 | |
*** thomasem has quit IRC | 13:59 | |
*** thomasem has joined #openstack-containers | 13:59 | |
*** ycombinator_ has joined #openstack-containers | 14:13 | |
*** thomasem has quit IRC | 14:16 | |
*** mikedillion has joined #openstack-containers | 14:17 | |
*** nshaikh has quit IRC | 14:33 | |
*** pradk has joined #openstack-containers | 15:00 | |
*** julim has joined #openstack-containers | 15:02 | |
*** jgjl has joined #openstack-containers | 15:06 | |
*** jgjl has quit IRC | 15:10 | |
*** EricGonczer_ has joined #openstack-containers | 15:15 | |
*** thomasem has joined #openstack-containers | 15:16 | |
*** thomasem has quit IRC | 15:20 | |
*** thomasem has joined #openstack-containers | 15:22 | |
*** EricGonc_ has joined #openstack-containers | 15:24 | |
*** EricGonczer_ has quit IRC | 15:27 | |
*** thomasem has quit IRC | 15:27 | |
*** thomasem has joined #openstack-containers | 15:33 | |
*** julim has quit IRC | 15:33 | |
*** julim has joined #openstack-containers | 15:35 | |
*** sdake has joined #openstack-containers | 15:36 | |
sdake | morning | 15:36 |
dims | morning, sdake | 15:37 |
*** diga has joined #openstack-containers | 15:38 | |
sdake | morning dims | 15:38 |
sdake | dims have you ever set up ironic | 15:38 |
*** mikedillion has quit IRC | 15:40 | |
dims | sdake: nope | 15:42 |
*** tshtilma has joined #openstack-containers | 15:46 | |
sdake | dims magnum will require it - do you use devstack? | 15:47 |
*** sdake has quit IRC | 15:47 | |
*** sdake has joined #openstack-containers | 15:48 | |
*** sdake has joined #openstack-containers | 15:48 | |
dims | sdake: yes, i have devstack | 15:50 |
sdake | http://paste.fedoraproject.org/157667/18053887 | 15:51 |
sdake | my localrc | 15:51 |
dims | thanks sdake | 15:53 |
dims | am doing some nova stuff, back in a day or so | 15:53 |
dims | will keep an eye on reviews | 15:53 |
sdake | dims cool thanks | 15:57 |
sdake | do you primarily work on nova? | 15:57 |
*** EricGonczer_ has joined #openstack-containers | 16:03 | |
*** EricGonc_ has quit IRC | 16:04 | |
*** ycombinator_ has quit IRC | 16:09 | |
*** ycombinator_ has joined #openstack-containers | 16:12 | |
diga | Hi Guys | 16:12 |
diga | has anyone pushed something, I am not able to run the controller | 16:12 |
diga | https://github.com/stackforge/magnum.git | 16:12 |
diga | root@openstack:~/magnum# pecan serve magnum/config.py bash: /usr/bin/pecan: No such file or directory | 16:13 |
diga | dims:sdake | 16:13 |
sdake | sudo python pip -e . | 16:15 |
sdake | magnum-api | 16:15 |
sdake | magnum bay-create --name=abc | 16:15 |
diga | ok | 16:15 |
sdake | pecan serve is not an ideal way to launch it | 16:15 |
sdake | sudopython pip install -e . that is | 16:15 |
diga | let me try | 16:16 |
diga | ImportError: No module named retrying | 16:18 |
diga | this error I am getting after pip | 16:18 |
diga | pip install retrying worked for me | 16:21 |
diga | but after that getting " AttributeError: 'module' object has no attribute 'patcher " | 16:21 |
*** mikedillion has joined #openstack-containers | 16:22 | |
*** achanda has joined #openstack-containers | 16:22 | |
diga | full trace - http://paste.openstack.org/show/147286/ | 16:24 |
sdake | looking | 16:24 |
sdake | diga do you run with devstack? | 16:24 |
sdake | it will beat your system into submission dependency wise | 16:25 |
diga | ok | 16:25 |
diga | I am not running with devstack | 16:25 |
diga | this is run by seperate git clone | 16:25 |
diga | Have you added this repo with devstack ? | 16:26 |
diga | I think It should work with seperate clone | 16:27 |
*** tshtilma has quit IRC | 16:28 | |
diga | eventlet is creating a problem here | 16:28 |
*** marcoemorais has joined #openstack-containers | 16:35 | |
*** achanda has quit IRC | 16:37 | |
*** achanda has joined #openstack-containers | 16:38 | |
*** diga_ has joined #openstack-containers | 16:40 | |
*** marcoemorais1 has joined #openstack-containers | 16:40 | |
*** diga has quit IRC | 16:41 | |
*** marcoemorais has quit IRC | 16:42 | |
*** achanda has quit IRC | 16:42 | |
diga_ | sdake: I'll setup devstack first & then will install magnum | 16:43 |
*** marcoemorais1 has quit IRC | 16:43 | |
diga_ | I am using stable openstack repo, let me try with devstack | 16:43 |
sdake | ya stable repo probably doesn't have the right dependencies | 16:45 |
sdake | to do dev, you will need devstack | 16:45 |
*** marcoemorais has joined #openstack-containers | 16:45 | |
*** achanda has joined #openstack-containers | 16:46 | |
diga_ | yes | 16:47 |
*** marcoemorais has quit IRC | 16:47 | |
diga_ | agreed, will setup devstack | 16:48 |
diga_ | sdake: I am not able to mark the review ? | 16:50 |
diga_ | will be back tomorrow | 16:53 |
diga_ | Need to finish docker-backend stuff | 16:53 |
*** diga_ has quit IRC | 16:53 | |
*** PaulCzar has joined #openstack-containers | 17:09 | |
*** ycombinator_ has quit IRC | 17:10 | |
*** openstackgerrit has quit IRC | 17:19 | |
*** openstackgerrit has joined #openstack-containers | 17:20 | |
*** EricGonc_ has joined #openstack-containers | 17:30 | |
*** EricGonczer_ has quit IRC | 17:30 | |
*** ycombinator_ has joined #openstack-containers | 17:36 | |
*** kebray has joined #openstack-containers | 17:37 | |
*** suro_ has joined #openstack-containers | 17:38 | |
*** ycombinator_ has quit IRC | 17:41 | |
*** Slower has joined #openstack-containers | 17:53 | |
*** achanda has quit IRC | 18:01 | |
*** achanda has joined #openstack-containers | 18:02 | |
*** jwang__ has quit IRC | 18:02 | |
*** achanda has quit IRC | 18:06 | |
*** amcrn has joined #openstack-containers | 18:07 | |
*** kebray has quit IRC | 18:12 | |
*** mikedillion has quit IRC | 18:19 | |
*** mikedillion has joined #openstack-containers | 18:20 | |
*** harlowja_away is now known as harlowja | 18:20 | |
*** mikedillion has quit IRC | 18:22 | |
*** marcoemorais has joined #openstack-containers | 18:42 | |
*** martyfalatic has joined #openstack-containers | 18:47 | |
*** sdake has quit IRC | 18:47 | |
*** sdake has joined #openstack-containers | 18:47 | |
*** sdake has joined #openstack-containers | 18:47 | |
*** marcoemorais has quit IRC | 18:59 | |
*** marcoemorais has joined #openstack-containers | 18:59 | |
*** marcoemorais has quit IRC | 18:59 | |
*** marcoemorais has joined #openstack-containers | 18:59 | |
*** kebray has joined #openstack-containers | 19:01 | |
*** marcoemorais has quit IRC | 19:12 | |
*** marcoemorais has joined #openstack-containers | 19:13 | |
*** kebray has quit IRC | 19:13 | |
*** kebray has joined #openstack-containers | 19:23 | |
*** zul has quit IRC | 19:25 | |
*** amcrn has quit IRC | 19:34 | |
*** zul has joined #openstack-containers | 19:39 | |
*** amcrn has joined #openstack-containers | 19:40 | |
*** julim has quit IRC | 19:53 | |
*** kebray has quit IRC | 19:54 | |
*** jwang has joined #openstack-containers | 19:54 | |
*** stannie1 has joined #openstack-containers | 20:01 | |
*** subscope_ has joined #openstack-containers | 20:14 | |
*** kebray has joined #openstack-containers | 20:30 | |
*** daneyon_ has quit IRC | 20:40 | |
*** kebray has quit IRC | 20:43 | |
*** marcoemorais has quit IRC | 21:03 | |
*** marcoemorais has joined #openstack-containers | 21:03 | |
*** kebray has joined #openstack-containers | 21:04 | |
*** amcrn has quit IRC | 21:06 | |
*** julim has joined #openstack-containers | 21:19 | |
*** martyfalatic has quit IRC | 21:25 | |
*** martyfalatic has joined #openstack-containers | 21:26 | |
*** martyfalatic has quit IRC | 21:30 | |
*** martyfalatic has joined #openstack-containers | 21:31 | |
*** daneyon has joined #openstack-containers | 21:31 | |
*** daneyon_ has joined #openstack-containers | 21:35 | |
*** daneyon has quit IRC | 21:37 | |
*** subscope_ has quit IRC | 21:48 | |
*** rongze has quit IRC | 21:51 | |
*** kebray has quit IRC | 21:51 | |
*** kebray has joined #openstack-containers | 21:58 | |
*** EricGonc_ has quit IRC | 21:59 | |
*** pradk has quit IRC | 22:04 | |
*** jeckersb is now known as jeckersb_gone | 22:20 | |
*** thomasem has quit IRC | 22:22 | |
*** adrian_otto has joined #openstack-containers | 23:02 | |
*** marcoemorais has quit IRC | 23:07 | |
*** marcoemorais has joined #openstack-containers | 23:08 | |
*** rongze has joined #openstack-containers | 23:22 | |
*** kebray has quit IRC | 23:22 | |
*** EricGonczer_ has joined #openstack-containers | 23:23 | |
*** rongze has quit IRC | 23:26 | |
*** marcoemorais1 has joined #openstack-containers | 23:32 | |
*** marcoemorais has quit IRC | 23:33 | |
*** ygoto has joined #openstack-containers | 23:40 | |
*** adrian_otto has quit IRC | 23:43 | |
*** marcoemorais1 has quit IRC | 23:46 | |
*** marcoemorais has joined #openstack-containers | 23:46 | |
*** marcoemorais has quit IRC | 23:50 | |
*** marcoemorais has joined #openstack-containers | 23:50 | |
yuanying_ | https://ask.openstack.org/en/question/47331/ironic-deploy-failed-to-detect-root-device-uuid/ | 23:52 |
yuanying_ | It seems same error. | 23:53 |
Generated by irclog2html.py 2.14.0 by Marius Gedminas - find it at mg.pov.lt!