IRC logs for #buildstream for Monday, 2017-07-03

*** tristan has quit IRC05:55
*** tristan has joined #buildstream06:11
*** ChanServ sets mode: +o tristan06:11
*** jude has joined #buildstream07:34
*** jude has quit IRC07:41
*** albfan[m] has left #buildstream08:12
*** tlater has joined #buildstream08:20
juergbitristan: _yaml.dump() doesn't appear to be able to handle ChainMap (public data). is this expected?08:21
*** jude has joined #buildstream08:26
tristanhmmm08:33
tristanjuergbi, it looks straight forward actually, that is confusing08:34
tristanit means ruamel.yaml doesnt handle it well08:34
juergbii get ruamel.yaml.representer.RepresenterError: cannot represent an object: ChainMap({'bst': ChainMap({'...08:35
tristanjuergbi, on the other hand, anything that passes through node_sanitize() should08:35
tristanit will create ordered dicts, though08:35
tristanjuergbi, ok so, probably we need a utility to dump in a cleaner way; it would be nice to have a dumper that understands ordered dicts but dumps as regular dicts, in the order of the OrderedDict08:37
tristanthere is some code here and there for that I can point to08:37
tristanit involves adding a representer class, and is different for python2 vs python3...08:37
*** jonathanmaw has joined #buildstream08:38
tristanjuergbi, https://gitlab.com/BuildStream/defs2bst/blob/master/defs2bst/bstDumper.py08:38
tristanjuergbi, there is the dict representer there, which will determine the order in a hard coded way08:39
tristanjuergbi, the rest of the code there ensures that strings are encoded in a nice human readable way (instead of quoted with embedded \n characters)08:39
juergbiok, ta08:40
juergbibtw: i was able to push a few artifacts to the new server. average upload speed was pretty low, though, not sure why08:42
juergbithe current setup with separate sshfs connection for each pull/push is definitely not ideal, though. it might be more stable with manually mounted sshfs and then specifying the local path in buildstream.conf08:44
juergbito support artifact availability checks the plan is anyway to mount a single sshfs for the whole session, i.e., we're moving towards that (except that we won't have to manually mount it)08:45
*** tiagogomes has joined #buildstream08:47
tristanjuergbi, yeah, lets not introduce some half way thing where the user has to do a manual sshfs, then08:48
tristanjuergbi, I'm also struggling with this btw, it's not working at all here08:48
tristanSo far, locally I've added an 'if mountpoint "${remote_repo}"' clause to the cleanup handler08:49
juergbimanual sshfs already works by virtue of supporting local repos but sure, it's not something we should recommend08:49
tristanSo that it doesnt leave hundreds of ostree-push.XXXXX directories in CWD08:49
tristanNext, I'm added an optional graceful termination to utils._call(), since we currently murder with SIGKILL08:50
tristanSo I can add a trap for SIGTERM to your shell scipts08:50
tristanagain so that it doesnt litter temp dirs all over the place when forceful termination is employed08:50
tristanNext, I will be adding an option to give the scripts a base directory, so that we can do those temp dirs in ~/.cache/buildstream/artifacts, and not litter the CWD at all08:51
tristanAnother thing I'm noticing, is that the huge amount of time it takes for me to fail to pull the artifacts... is blocking the build for some reason08:51
gitlab-br-botbuildstream: merge request (tristan/test_tests->master: WIP: Add integration tests) #40 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/4008:52
*** tiagogomes has quit IRC08:52
tristanSo I dont know exactly why, but after failing to pull a base system, it does not start building it while attempting to pull later things08:52
juergbihm, because it shares sched.fetchers with source fetching?08:54
juergbipull attempt will hopefully be much faster with the persistent sshfs08:54
*** tiagogomes has joined #buildstream08:56
tristanOhhh that could be the reason yes08:59
tristanfetch queue starvation08:59
tristanjuergbi, maybe we should reverse a loop in the scheduler so that it visits last queues first, then we would just have to ensure that Queue->ready() implementations make sense, though09:01
juergbiyes, preferring later queues could make sense09:02
*** tiagogomes has quit IRC09:11
*** tiagogomes has joined #buildstream09:12
*** ssam2 has joined #buildstream09:12
jonathanmawmorning folks, I can't remember precisely what the resolution was, but I'm having an issue building my dpkg build elements. symlinks seem to be broken09:22
jonathanmawi.e. "# file /usr/bin/rst2man09:22
jonathanmaw/usr/bin/rst2man: broken symbolic link to ../../../../../../../../../home/jonathanmaw/.cache/buildstream/build/debian-python-x9gp05kc/root/etc/alternatives/rst2man"09:22
*** violeta has joined #buildstream09:23
tristanjonathanmaw, ok I think there is still something broken09:26
tristanjonathanmaw, does your build directory happen to be symlinked ?09:26
jonathanmawtristan: yes. I'll try running it without the symlink09:27
tlaterIs there a way to add flags to the git commands buildstream runs? I can't test git sources with a .git directory.09:27
tristanjonathanmaw, utils.py:_relative_symlink_path() needs to be fixed, so that the realpath of the passed 'root' directory is used as well09:28
ssam2tlater, it's reasonably simple to run `git daemon` locally09:28
ssam2tlater, the Morph test suite did that (although it was written in shell so impossibly ugly), i'll see if I can find the example09:29
tristantlater, I'm not hugely concerned with the Source implementation tests to be honest, we have decent coverage for that in ./setup.py test09:29
jonathanmawtristan: yep, build passed when I used a config file to change the dirs to their real paths instead of the symlink09:29
tristanjonathanmaw, can you fix it ?09:29
jonathanmawIs there a way to set config that doesn't require me to pass "--config", by the way?09:30
ssam2tlater, http://git.baserock.org/cgit/baserock/baserock/morph.git/tree/yarns/implementations.yarn#n460 for example [however, seems you don't need such a thing anyway thankfully]09:30
* tristan did it before, but messed up something and ended up reverting locally09:30
tristanjonathanmaw, https://buildstream.gitlab.io/buildstream/config.html#config09:30
tristanjonathanmaw, the default is $XDG_CONFIG_HOME/buildstream.conf, you only need --config to load an alternative one09:31
jonathanmawta tristan09:32
jonathanmawas for the _relative_symlink_path(), I'll make an issue and assign it to myself.09:33
tlaterHm, yeah, let's not I suppose. Can I also ignore the ostree source test? It fails exclusively on the CI servers due to some tracking issue I can't reproduce locally.09:34
jonathanmawthough I'd like to get my dpkg elements back into a usable state before I dive into that problem.09:34
tristanjonathanmaw, ok just create an issue, I'll try to find a moment to fix that since anyway I seem to be picking up pieces left right and center anyway09:39
tristantlater, ignore...09:39
gitlab-br-botbuildstream: issue #44 ("Symlinks in the sandbox are broken by the path to the buildstream cache containing symlinks") changed state ("opened") https://gitlab.com/BuildStream/buildstream/issues/4409:39
tristantlater, can you change the tests so that the output is in the main window ?09:40
tristantlater, I'd like to see the bst output in there too, and not have it redirected09:40
tristantlater, I'm looking at this for instance: https://gitlab.com/tlater/buildstream-tests/-/jobs/2064009109:40
tristanAlso interestingly, it means we can enable ANSI color codes in gitlab runners, YAY !09:41
tristanwe can add an option to bst to forcefully put the color codes even when not connected to terminal09:41
tristanvery easily09:41
tlaterAlright, can do09:42
tlaterShould I tee the output or stop using log files?09:42
tristantlater, think we are close to a merge ? I'm looking at that branch and it looks like a lot of stuff was removed (in the changes of the MR)09:42
tristandont really understand what's going on there09:42
tristantlater, I think it's fine to just stop using log files09:42
tristantlater, in any case this is something we run, and see the output09:43
tlaterI prepared both merge requests, they can be merged. I removed a few tests that I'm still debugging locally so we can get this working.09:43
tristanon a CI it's very annoying to try to find out how one could possibly shell in and look at a log file09:43
tristanand running locally, doesnt really matter09:43
tristanok good news09:43
tlaterThis doesn't include the cache yet, I think I got that working finally... But besides building forever the tests should work.09:44
tristanjuergbi, you said two things, 1.) You were able to push some artifacts... and 2.) a single stable mount would be nice to have, and supported if you kind of fool your own setup and mount first09:52
tristanjuergbi, but were you able to push (or pull) any artifact without fooling your setup into thinking it's local ?09:53
juergbiyes, push did work for me with SSH in the buildstream config, but only for a few small artifacts09:54
juergbialso, i'm using SSH control masters for all connections (via .ssh/config) which means that all sshfs instances end up as a single SSH/TCP connection09:55
juergbi(i only tested with a few small artifacts, i didn't see it fail with larger ones)09:57
tristanI see09:57
tristanSo, knowing about control masters and .ssh/config is not really a sane option for users09:58
tristanI dont really want to even know what those are :-/09:58
juergbithis will also be irrelevant with the mentioned plan of having buildstream perform a single mount for the whole session09:58
juergbiwhich is essentially required for the artifact availability checks we want09:59
juergbiin hindsight, maybe i should have directly implemented that, instead of the all-in-one shell scripts09:59
tristanI'm having a very hard time terminating these jobs gracefully fwiw10:00
juergbiSIGTERM isn't helping? fuse can be a pain with regards to this at times10:01
tristanjuergbi, I handle SIGTERM in the script, then I have tried either SIGTERM or SIGKILL to sshfs... but by the time sshfs exits (in the script), then fusermount does not succeed in the unmount10:03
tristanthat is, after adding an option for try SIGTERM from utils.py10:03
juergbihm, fusermount -u is supposed to terminate sshfs on its own10:04
tristanjuergbi, even before sshfs returns ?10:04
tristansshfs runs (for a long time), and after that there is an ssh -x process, which fusermount -u will terminate10:05
juergbiyou mean just establishing the connection takes a long time for you?10:05
tristana very, very long time10:05
tristanover 5 seconds10:06
tristancan be more10:06
juergbiit's definitely sub-second here, but that's with control master10:06
juergbiover 5 seconds sounds unusably slow even for regular connections, though10:07
tristanyes, it's horrible :)10:10
juergbi0.17s here even with ControlPath none10:10
juergbiah, no, that was somehow still using the control master. it's 1s here without control master10:11
tristanhow do I configure that thing ?10:12
tristanControlMaster auto ?10:12
tristanas a sub config of gnome7 ?10:12
* tristan notes a side effect of dumping these tempdirs in the CWD is that ls blocks indefinitely while this long mount process is taking place10:13
juergbi        ControlMaster auto10:13
juergbi        ControlPath /run/user/1001/ssh-%r@%h:%p10:13
juergbi        ControlPersist 1h10:13
juergbiis what i'm using. you have to adapt the path to something that works for you10:13
juergbii use it under 'Host *' but you can also use it just for gnome7, of course10:14
tristanAh I see10:16
tristanI'm getting constantly banned10:16
tristanbecause my config is screwed10:16
tristanstill10:16
tristanthe incorrect config presents an opportunity to handle the case of gracefully terminating while sshfs is running, which seems impossible10:17
ssam2i've had issues of sshfs hanging my machine in the past10:19
ssam2which I mitigated a bit by adding "ServerAliveInterval 15" into my ~/.ssh/config10:19
juergbiit seems odd to me that sshfs wouldn't terminate (with non-0 exit code) in case ssh connection fails10:19
ssam2maybe something like `-oServerAliveInterval=1` on the sshfs commandline would help ?10:20
juergbinot sure whether that would change anything if connection is not established yet10:20
ssam2ah maybe not10:20
juergbiif the server is silently dropping packets, huge TCP timeouts might be the issue here10:21
juergbithere is a ConnectTimeout option10:21
tristanWhat has been happening is that my config was incorrect, so I was missing artifacts@10:25
tristanBut interestingly, sshfs takes a very long time to deny me, and when it's terminated during that process, it leaves me with a mount point10:25
tristanwhich fusermount -u (called directly after waiting for the sshfs pid to be reaped) fails to unmount10:26
tristanafter a short timeout, I am able to cleanup the mounts10:26
tristan(manually)10:26
tristanwith the correct configuration... it's maintaining the connection and mounting much more quickly10:27
tristanhowever, it still leaves stale mounts behind on termination10:28
*** jonathanmaw has quit IRC10:31
*** jonathanmaw has joined #buildstream10:31
tristanOk, I have it... FINALLY !10:36
tristanActually a sleep between two fusuermount -u calls, works10:36
tristanwhich is, horrible10:36
tristanbut works.10:36
* tristan notes the lack of a --pushers argument to bst matching --fetchers and --builders10:36
juergbioh, i missed that? :/10:38
tristanwhew... so eek12:22
tristanI have been pushing base-system.bst artifact for 25min12:23
tristanmy system monitor says I'm uploading about 3/4k12:23
tristanper second12:23
tlaterI just successfully added caching to the CI \o/ Builds take 5 minutes instead of 20 now.12:27
tristanNice12:27
tristancrap, it's still not cleaning up12:37
tristanterminate pull/push and leaves many mounts lying around... what did I do12:37
tlaterHmm... I'm getting fuse errors12:56
tristantlater, BUG ?12:57
tristantlater, with latest master ?12:57
tlaterNo, definitely not latest master. It may be related to docker, trying a fresh image...12:58
tristanI recently added a check to the fuse mounts to see if the child fuse process crashed12:58
tristanwithout that, I get a strange condition (very rarely), that after an unmount, creating the directory (which already exists) fails12:59
tristanand then checking that directory says transport endpoint not connected12:59
tlaterMight have to rebase then, and figure out why this happens. It would explain why my tests kept failing out of nowhere.12:59
tristanI *think* this means the SafeHardlinks layer crashed, so I now added a check13:00
tristanstill I think we dont get a traceback for a crash in the fuse layer (which sucks, yeah)13:00
tristanmaybe we need pid based log files for fuse layers so that we catch tracebacks from that subprocess somehow13:00
tristanthat, or something complex like we do in the scheduler already, to send the traceback to the parent as a string; but somehow I think that wont work if we're going python -> libfuse -> back to python13:01
tlaterShould I make the tests fail on the first failing test or let them all complete?13:05
tristantlater, we want to fail if any of the tests fail, but we want to run them all13:08
tristanso the latter13:08
tristanbetter to know that 5 tests fail, than take the time to fix one and push a new branch to see 4 more failures (even when you know that fixing that one thing will cause everything else to pass)13:08
tlaterAlright, makes sense.13:09
tristanOk so, I've pushed some improvements to ostree push/pull process termination13:09
tristanBut I have yet to successfully push an artifact13:09
tristanI think it might take all day to push one artifact13:09
tristanI will try letting it run overnight13:10
tristansee what happens13:10
gitlab-br-botpush on buildstream@master (by Tristan Van Berkom): 8 commits (last: ostree-pull-ssh, ostree-push: Dont try to unmount not-mounted directory) https://gitlab.com/BuildStream/buildstream/commit/4f3dcabd9c3abd8c992ca0d824aec45f722c6e0613:10
juergbiit was also not extremely fast for me but it averaged at about 500 kbps (with large variations, though), i.e., still a lot faster than what you're seeing13:12
gitlab-br-botpush on buildstream@master (by Tristan Van Berkom): 1 commit (last: main.py: Added --pushers argument) https://gitlab.com/BuildStream/buildstream/commit/17f8bf80403b02262a35362da80a0ec379425eda13:13
tristanjuergbi, yeah, the 350ms ping from here to the UK might cause it to be a bit slower13:14
tristanstill, I have good bandwidth :-/13:15
tristanso it should appear like a local operation to ostree... and only ssh does the networking... not sure why this is so slow13:16
juergbimaybe there are too many roundtrips, not sure13:16
tristanthere certainly are probably a lot, I think ostree does per file operations13:16
tristanand we're talking about like, I think 1.5GB of relatively small files13:16
tristanProbably also separate operations for reading file attributes and the like13:17
tristanmaybe some threading inside ostree itself could speed this kind of thing up13:17
tristandunno13:17
tlaterThe fresh docker image also has fuse issues. It seems to happen when running ldconfig after importing the base sdk.13:18
juergbiwill have to trace what filesystem operations are used13:18
tlaterUgh, how should I debug this? And ssam2, do you happen to know if docker needs to do anything special to support fuse?13:25
gitlab-br-botbuildstream: merge request (jonathan/dpkg-build->master: WIP: Jonathan/dpkg build) #37 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/3713:29
ssam2tlater, not sure about that13:34
ssam2https://github.com/moby/moby/issues/51413:35
ssam2maybe you need to enable CAP_SYS_ADMIN ? makes sense it would be a privileged op13:35
*** tristan has quit IRC13:35
tlaterSo do I have to recompile docker locally for this?13:36
tlaterAh, no, looks like they added a --privileged flag.13:37
tlaterDocker is probably running with that on the CI servers, hence I never saw the fuse error there.13:37
ssam2yes, i've just checked on the machine and they are setting privileged=true in the config there13:39
tlaterCool, thanks :)13:39
tlaterAlright, so what seems to be happening is that some directories are owned by a different user, and root doesn't have privileges to write to those. That results in autotools being unable to write, and failing to build.13:52
tlaterSince when can a user prevent root from writing to their files?13:52
*** tristan has joined #buildstream13:59
*** jude has quit IRC14:04
tlatertristan: This is indeed a "BUG" problem :/14:05
tristantlater, so what does it say ?14:05
tlater'buildstream._fuse.mount.FuseMountError: SafeHardlinks reported exit code 1 when unmounting'14:06
tristanAh, ok interesting14:06
tristantlater, are you saying you can reproduce that consistently ?14:06
tristanwith a specific test ?14:06
tlaterYup14:06
tlaterI could push a docker image with this.14:06
tristantlater, and can you reproduce it on your machine ? or _only_ on gitlab ?14:06
tlaterWell, only on this docker image14:07
tristanoh... so I have to learn what is docker :)14:07
tristanhahahaha14:07
tristanthe dreaded day has come !14:07
tlaterHeh14:07
tristantlater, it happens for both cmake and autotools tests right ?14:08
tlaterI haven't properly tested cmake yet14:08
tlaterBut it's probably the same issue14:08
tlaterI'll try running the test for that too...14:08
tristantlater, anyway this is good news to me, because I needed to reproduce that thing, we just cant know for sure if it's the same case I've been seeing14:08
tristanunfortunately14:09
tlaterIf there's a docker repo somewhere I could push the image there14:09
tlaterFor you to have a look14:09
tristantlater, I wont be fixing this tonight... if you want to try to fix it; the problem is most certainly in _fuse/hardlinks.py14:09
tristantlater, if you have other things you can do to tidy up these tests, do that instead, but I think you are blocking on this14:10
tlaterOk, though I think that's probably a bit beyond what I can do quickly.14:10
tristanWell, somebody probably has to do it quickly :D14:11
tristanhehehe14:11
tristantlater, ok tell you what... first prepare the MR with those failing tests disabled (I think you already have that or very close to it)...14:11
tlaterYeah, I'll add a disable command. That should probably take an hour or two anyway.14:12
tlaterI'll also make sure I can reproduce this, and that it's not some magical docker flag I need to set.14:12
tristanIf you have time, just try to find out what's causing it to crash; the first step would be to redirect the stdout/stderr of the fuse mount process to some file, so hopefully you will just see a traceback, and then palmface, and immediately see what is going wrong14:12
tristan(you can send me the palmface by email and I will apply that to myself locally)14:13
tlater;P14:13
*** jude has joined #buildstream14:13
tristan_fuse/mount.py does the magic of mounting fuse layers... and it's with multiprocessing... I'm not entirely sure how to redirect that subprocesses stdout/stderr to a log, though :)14:14
tlaterHmm... Nevermind, I got a different log. Perhaps I still was in a container without the permission flag?14:16
tristanSo cannot reproduce ?14:17
tristantlater, I have a "hunch", look at _hardlinks.py:9214:18
tlaterNope. Not in a new container -.-14:18
tristanshutil.copy214:18
tristanThere are some strange cases where the build sandbox and ostree were able to set some xattrs14:18
tristanbut copy2 gets PermissionError raised when it attempts to copy them14:18
tristanIt can be that that is happening14:18
tlaterThe permission errors happen in autotools14:19
tristanIn an ultimate future, we will be virtualizing the xattrs (and other things) with another fuse layer14:19
tlaterThat should be after this, right?14:19
tristanI dont know what is before or after what14:19
tristanOr what "The permission errors" are14:19
tristanOnly if you tell me very specific things, I know what you are talking about :D14:19
tlaterI'm trying to build a test "package" with autotools.14:20
tristan"package" ?14:20
tristanartifact, maybe ?14:20
tlateramhello, just a little source that writes "Hello world" in C.14:20
tlaterartifact, in bst nomenclature, yeah.14:21
tristanmkay14:21
tlaterautotools gets permission denied errors when it tries to write something14:21
tlaterChecking the shell that bst leaves me in, the directory it tries to write to is owned by UID 6554314:22
tristanI'm sure something more specific than "autotools" gets a permission denied error14:22
tlaterAnd for some reason root can't write to it.14:22
tlaterautomake: error: cannot open > src/Makefile.in: Permission denied14:22
tlaterThat's the most specific error I get :/14:22
tristanautomake14:22
tristanOk, so when running automake14:23
tristanit's generating files, in the source directory14:23
tristanWhich should not be a fuse mount actually, just a regular mount14:23
tristanread-write, with read-only root14:23
tristantlater, note that root is not root14:23
tristantlater, in a sandbox, root is the active user14:24
tlaterAlright, that makes more sense14:24
tlaterSo automake should never write to that directory?14:24
tristanAnd the directory src/ is owned by something else ?14:24
tlaterYeah14:24
tristanand the parent directory of that ?14:24
tristanis owned by what ?14:24
tlaterroot14:24
tristanAha14:25
tristanand this is a tarball ?14:25
tlaterLemme check, I think so14:25
tristanthat you unpacked into there ?14:25
tlaterDo tarballs keep permissions?14:25
tristantlater, I think this is what is happening...14:25
tlaterNot manually14:25
tristanyes they keep everything14:25
tlaterThat makes a lot of sense14:25
tristantlater, you are running buildstream "as root" in the runner14:25
tristanso when buildstream unpacks a tarball...14:25
tristanthe file ownerships are retained14:26
tristan65543 was perhaps the UID of the user who created that14:26
tristantar -tvvf tarball.tar14:26
tristanshould tell you what is the UID of files inside it14:26
tristantlater, a regular user untarring, cannot create files under arbitrary UIDs14:26
tlaterAlright, yeah, I understand. Damnit, so much time wasted -.-14:26
tristanand tar just assumes it's ok to use the effective UID14:27
tristantlater, probably we need to change the tar source to force that behavior14:27
tristanso this doesnt happen when you try things as root14:27
tlaterOk, but how do I set permissions such that I can build this as an arbitrary user?#14:28
tristanthe tar source uses python to unpack14:29
tristanyou will want geteuid (effective uid)14:29
tristantlater, and you will want a callback for the unpacking of tarfiles which lets you set attributes, like uid/gid to geteuid and getegid14:29
tristantlater, it's somewhere there in the spaghetti of TarFile documentation14:30
tlaterOk, cool. Well, at least we know these tests are actually failing for a reason.14:30
tristanok... this one shouldnt be hard to fix :)14:31
tlaterI'll add the ignore command, update the MR and see if I can fix this.14:31
tristanHere is a hint: https://github.com/gtristan/ybd/blob/aboriginal/ybd/virtfs.py14:32
tristanBut I think there is an easier API than looping through all the TarInfo objects and extracting each one manually14:32
tristanthere is a filter callback you can use when doing one of the hightlevel TarFile.extractall() APIs or such14:33
tristanwhich would be cleaner14:33
tlaterOk, I'll certainly have a look through the documentation.14:33
tlaterThanks :)14:34
tristanThank you !14:38
tristantlater, let me know if you find a way to reproduce: 'buildstream._fuse.mount.FuseMountError: SafeHardlinks reported exit code 1 when unmounting'14:38
tristanI'm hunting that one :)14:38
tlaterI will, possible I just hosed my only reference to that though.14:39
gitlab-br-botbuildstream: merge request (jonathan/dpkg-build->master: WIP: Jonathan/dpkg build) #37 changed state ("opened"): https://gitlab.com/BuildStream/buildstream/merge_requests/3715:06
*** jude has quit IRC15:18
*** jude has joined #buildstream15:28
*** jonathanmaw has quit IRC16:54
*** tristan has quit IRC16:54
*** tiagogomes has quit IRC16:59
*** jude has quit IRC16:59
*** ssam2 has quit IRC16:59
*** violeta has quit IRC16:59
*** tlater has quit IRC16:59
*** violeta has joined #buildstream17:10
*** jude has joined #buildstream17:10
*** ssam2 has joined #buildstream17:10
*** tiagogomes has joined #buildstream17:13
*** tristan has joined #buildstream17:27
*** ssam2 has quit IRC18:42

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