IRC logs for #buildstream for Thursday, 2017-03-16

*** juergbi has quit IRC06:16
*** tristan has joined #buildstream07:25
*** ChanServ sets mode: +o tristan07:43
*** juergbi has joined #buildstream07:56
tristansigh... so I think this image deployment is going to take more thought09:33
tristanI've been brute forcing for a little while and things have went well, but sometimes you need to take a day and let things sink in, before you make some irreversible design disasters09:34
tristanIn case some inspiration can come my way, things I need to figure out are, how to deal with elements which dont produce an artifact, and how to communicate parameters to those elements09:35
tristanfrom outside of regular build configuration (i.e. where to deploy to, or if you want to set a default root password, or include some ssh key in an image deployment)09:36
tristanAlso it would be nice to anchor multiple deployments to a target, so that in a single command you might deploy multiple things, but to make that dependency on non-artifact producing elements09:37
paulsher1oodfwiw: deploying multiple things was/is handled in morph/ybd ... they are clusters in definitions09:48
paulsher1oodfor secrets/passwords in practice i had to add support for passing them in as environment variables (from, say, ci pipeline control environment)09:50
tristanpaulsher1ood, yeah I know this and looking at it, my worry is mostly about API design and convenience10:00
tristanlooking at the extensions, they are a bit rigid, for instance they _only_ do btrfs10:00
tristanand how to do this in a pipeline scenario, I think an "anchor" element might be interesting; i.e. just a sort of noop which anchors your pipeline (I'm thinking, how to do a flatpak deployment, which is more like 3 or more separate deployments)10:01
tristanthe secrets and passwords, and any configuration which is not a constant but an argument for a deployment, is a trick about providing the most convenient interface for users10:02
tristani.e. can we avoid having the user create local configuration files which live outside of the bst project ?10:03
tristanCan we avoid environment variables ?10:03
*** ssam2 has joined #buildstream10:04
tristanso I can just do: `bst build gnome-deploy.bst --root-password pony` ?10:04
tristanor whatnot10:04
tristanof course its a bit mind numbing, but the result needs thought if we want something convenient and great for the long term10:05
tristananyway for the actual juice of what a deployment *does*, this can be quite simple; I'm thinking first to start with a general purpose scripting element which A.) Lets you stage tools in '/'  B.) Lets you stage what you want to manipulate in /buildstream/install  C.) Lets you run scripts10:07
tristanto modify the /buildstream/install stuff and mutate the output10:07
tristanwith that only, its very easy to test creating bootable images using scripts, and from that point, you can create a nice parameterized deployment element10:08
tristanwhich asks, what size of image you want to deploy, what rootfs filesystem type to use, what kind of bootloader to user, etc10:08
tristanand partitioning scheme configuration10:08
tristanas a side thought, it could be interesting to create a graphical tool to design pipelines at some point :)10:11
* tristan ponders one possibility... instead of having elements which do not get cached; produce cache keys for deployments and cache them, but have them "tainted" so that they are never shared with remote artifact caches10:16
* tristan already has some other uses for "tainted" artifacts 10:17
ssam2mmm, that would be useful for dynamically linked bootstrap artifacts too10:17
tristanthis way, you never produce the same deployment twice (i.e. when deploying with same ssh key or such), but they are safely local and not shared10:18
tristanssam2, what are those ?10:18
ssam2things like stage1-gcc from the current Baserock bootstrap10:18
ssam2I guess in Buildstream you don't bootstrap, you use a prebuilt binary sysroot insetad10:19
tristanyou mean mark those for not being shared ?10:19
tristanssam2, we certainly bootstrap10:19
ssam2yeah, cus if they're linked against stuff on the host they definitely shouldn't be10:19
tristanWe just never use host tools to do it10:19
ssam2yeah, I guess just a different kind of bootstrap10:19
tristanssam2, the whole bootstrapping procedure to seal off from host tools is just as relevant with buildstream10:19
tristanit's only that you always use a deterministic "host tool set" to start with10:20
ssam2there are still cases where bootstrapping from the host is needed, like proprietary OSes or brand new architectures, so might come in handy10:20
tristanssam2, I dont think so10:20
tristanssam2, if you can bootstrap whatever it is you have in mind from your host, then you can do it from a deterministic set of tools instead10:21
ssam2i have a use case right now of building self-contained compiler packages on some proprietary OSes10:22
tristanthe uses I have for 'tainted' artifacts are different, one of them is when we have 'workspaces' (i.e. https://wiki.gnome.org/Projects/BuildStream/Roadmap/Workspaces)10:22
ssam2right now using Omnibus, which means I keep having to track down bugs in Ruby10:22
ssam2would be nice to use BuildStream instead, but I don't see how I can provide an OSTree repo containing a deterministic set of tools from a proprietary OS10:22
ssam2other than by creating it on the host using a script.. but then is that any better than just using the host tools?10:22
tristanssam2, yes it is actually, because your proprietary OS will inevitably receive updates10:23
ssam2ha, well in theory at least ;-)10:23
ssam2fair enough10:23
tristanssam2, so it's questionable whether the bootstrap you created today, will still be doable in 10 years10:23
tristanin any case for the near future BuildStream is linux only, due to some things... hardlinks, ostree, bubblewrap10:24
ssam2ah well10:24
tristanthat hopefully can change, and for the crazier cases we can use VM sandboxes10:24
ssam2better to be focused10:24
ssam2didn't realise OSTree was Linux only... i might see how it runs on AIX just for the craic ;-)10:25
tristanWe can have a dual artifact cache implementation for non-linux (ostree is actually great, after building a few times, my artifact cache does not grow significantly)10:25
ssam2I do remember seeing  linux syscalls in the code I suppose10:25
tristanin any case the internal API we use for the artifacts is well sealed so it _can_ be dual implemented10:26
ssam2cool10:26
tristanbut I'd rather not think of these things until completing our milestones :)10:26
tristanmaybe it would work on AIX yes, certainly not bubblewrap, but sandboxes are intended to have multiple implementations too10:27
ssam2great10:27
ssam2I mean, Omnibus has no sandboxing and its artifact cache is a Git repo10:27
tristananother use for tainted artifacts is... hand patched build failures if we support that10:28
tristani.e. "Your build failed, would you like to drop into a shell and fix it ?"10:29
ssam2all useful debug tools10:29
ssam2so would be useful in some cases, the hard part is discouraging people from hacking it into working, then pretending it's finished :-)10:29
tristanSo then you fix it and make install into /buildstream/install, exit shell "Would you like to cache this build result and continue with the build ? All elements depending on this element will be tainted"10:29
ssam2Perhaps recording the reason *why* it's tainted would be useful10:30
tristanI would like to be able to spawn an editor in that case and let the user edit the 'element.bst' in question, but that would mean recomputing the entire pipeline in mid-build10:30
ssam2then after you've spent 5 days hacking something into working, your final build says "A is tainted because of manual build fixing", "B is tainted because it was built from a local dir", etc.10:30
tristanwhich... would be freaking awesome, but it's a bit beyond what I can do right in the immediate future :)10:30
tristanssam2, yeah, well we need it for workspaces, and this is just what I was thinking the other day when I was talking about added metadata in the artifacts10:31
tristanso I want the artifacts to contain some metadata about the artifact, including taintedness and such, also include a build log for provenance, and the content separately10:32
*** tristan has quit IRC10:35
*** tristan has joined #buildstream10:43
*** ChanServ sets mode: +o tristan10:43
jjardon[m]tristan: reading about https://wiki.gnome.org/Projects/BuildStream/Roadmap/GnomeContinuous. In case if of any interest, the machine that is running continuous is a 48-core xeon server atm12:25
jjardon[m]tristan: Also, I'd recommend you to join #testable to get a taste of the pace of changes continuous handle atm12:26
tristanjjardon[m], thanks ! I will join that channel didnt know about it14:45
*** ssam2 has quit IRC14:51
*** ssam2 has joined #buildstream15:06
*** ssam2 has quit IRC18:48

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