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

*** tristan has joined #buildstream03:08
*** ChanServ sets mode: +o tristan03:09
*** tristan has quit IRC10:13
*** tiagogomes has joined #buildstream10:16
*** tiagogomes has quit IRC10:18
*** ssam2 has joined #buildstream10:24
*** tiagogomes has joined #buildstream10:24
*** tristan has joined #buildstream10:48
*** ChanServ sets mode: +o tristan10:49
tristanMkay... so juergbi paulsher1ood ironfoot ... ssam2, anyone who is interested... would be great if you subscribed to our mailing list: https://mail.gnome.org/mailman/listinfo/buildstream-list11:49
tristanirc not great for all conversation formats...11:49
tristanFor today, I have added something called 'split-rules', which appears as additional public data in the 'bst' domain (i.e. reachable by Element.get_public_data('bst'))11:50
tristanAnd I'm considering, searching for a name, for an element I want to add as a pre-deployment element which makes use of this11:51
tristanFor a peek at what this looks like, see the defaults for project.conf files (can be overridden for any project, and for any element type, or element, like most everything)11:52
tristanhttps://buildstream.gitlab.io/buildstream/buildstream.project.html#module-buildstream.project11:52
tristanIt gets substituted with variables in context for any given element that split-rules are resolved for11:53
tristanSo changing a variable like prefix, or libdir, has the desired consequences11:53
ssam2yay mailing list11:54
tristanNow the element I'm thinking, maybe 'composer' ? will A.) Have a boolean option for whether integration commands should be run... B.) May optionally list which 'domains' are to be included in the output11:54
tristanssam2, \o/ :)11:55
ssam2seems a sane design11:55
tristanSo it's not the same exactly as baserock, but inspired from there, also with consideration of how domains need to be split for deploying different flatpakish thingies11:55
tristanSo .Debug and .Locale can be generated from that11:56
tristanFor baserock, it can be used to just generate a slimmed down, or devel bootable atomically upgradable system11:56
tristanwhich seems to be the primary use case11:56
ssam2yeah, well actually for Baserock i'd like a simialr thing11:56
ssam2optional debug info11:56
tristanAlso, for other things, like say generating an rpm for a given build output, it makes sense, and one would have to add rpm-specific metadata for the scriptlets which go into a package based system (and opt to not run the integration commands)11:57
ssam2right, so this element is basically the "output to any format" device ?11:58
tristanssam2, yeah I think the debugging info in baserock gets dumped into misc, as it's not picked up by the -bins or -libs11:58
ssam2or will you have another element after it that generates the actual package ?11:58
tristanssam2, it's a permutation to run before a deployment, at least thats my use case for it now11:58
tristanexact11:58
tristana mutation rather, a composition11:59
tristanpermutation not the best word :)11:59
tristanI guess composer is decent word for that11:59
tristanssam2, right so with flatpaks and its runtimes, I would think build elements -> composer -> flatpak -> ostree12:00
tristanwhere flatpak is a thing that basically adds metadata to it12:00
tristanfor baserock probably build elements -> composer -> image deployment12:01
ssam2ok, makes sense12:01
ssam2so the composer can output multiple artifacts I guess ?12:01
tristannope12:01
tristanBut it can be used many times12:01
ssam2ok12:02
tristanI also suppose it may be interesting to have some control on the depth of dependencies it composes12:02
tristanSo the default might be: Take the dependencies of this element, in the Scope.RUN scope (everything required to run this element)12:02
tristanBut one might want to just have single depth, or stack depth12:03
ssam2I'm completely lost12:03
ssam2oh, I think I see12:03
ssam2so I could build an RPM that only contains the actual package, not the stuff required to build that package12:03
tristanExact12:04
ssam2which is usual for an RPM (although only makes sense if you can also package up all the dependencies into their own packages, or you have an existing package repo containing them)12:04
tristanRight, for rpm it may make more sense to generate all at once, in any case the idea would be a potential rpm plugin would demand that users sprinkle additional metadata on their elements in the rpm domain12:05
ssam2yes, that makes sense12:05
tristanso one could iterate over all the dependencies and pull out metadata12:05
tristanOr other approaches could be used, one use case for "stack depth" (which would mean... I list stacks as dependencies, and only want to stage direct dependencies of those)12:06
tristanWould be a more exact replica of what baserock calls a "system"12:06
tristanBut, I dont really wanna do that12:06
tristanDont wanna encourage the "lets list every stack by hand" culture12:07
tristanI guess I can leave depth out of the picture for now until some need arises for it12:07
ssam2I think one of the main drivers for the way systems currently work in Baserock is simplicity in the build tool12:11
ssam2it's pretty bad having to list every stratum manually because when the run-depends of a shared stratum change you have to update literally every system that uses it12:12
tristanexactly, I want that gone12:12
tristansince we offer the build/run distinction, the technical need for that approach disappears I think12:12
ssam2it means downstream forks get broken systems every time they pull updates, and they have to manually comb the git logs to figure out what new run-depends the strata have12:12
ssam2so I think few people will argue in favour of preserving that 'feature' :-)12:13
tristanheh12:13
ironfoototoh, easier to track when things were added12:13
tristanironfoot, for that we could add sugar to help with provenance and release notes and the like12:14
ironfootbut, I won't be one of those arguing to preserve that feature12:14
ssam2I think there are better ways to communicate "we added dependencies" than breaking everyone's builds :-)12:14
ironfootsure :)12:14
tristanI'm hoping that `bst show`, which currently is not perfect, will evolve into something that is cleanly scriptable too12:15
tristanso if one wanted, they could easily wrap up a build and deploy and release "job" which finishes with something that uses `bst show` to publish something about a release12:16
tristanthese are the cache keys, this exactly what went into it, etc etc12:16
ironfootsomething like: https://download.baserock.org/baserock/baserock-current-genivi-baseline-system-armv7lhf-jetson-manifest.txt12:17
tristanironfoot, indeed12:20
tristanSo besides that... any thoughts on the name 'composer' for the functionality it does ?12:21
tristanor 'compose' ? ... I was thinking 'filter' at one point but doesnt truly satisfy it... 'flattener' was another thought hehe12:22
tristansquash12:22
tristanassembler12:22
tristansquash is kind of like, squashing commits... squashing elements into a single one12:22
* tristan thinks so far composer is the sanest idea12:23
tristanand perhaps 'compose' is better12:23
tristanuse the simple verb form for everything, might set a better precedent12:24
tristanyes, we have 'import', not 'importer'12:24
tristanironfoot, fyi the conversion script received a lot of love12:26
tristannotably, that uglification/escaping of strings is gone12:26
tristanand a bit of an overhaul on the whole script12:26
ironfootyay :)12:27
ironfooti'd like to find some time for this soon12:28
tristanironfoot, you might be late to the party as far as conversions go, but I have plenty to offer haha :)12:28
ironfooti saw the roadmap, yeah :P12:29
tristannext on the list is after this composer, deployments, and handle conversions of the "system" morphs12:29
tristanI want to at least automatically handle the 'install-files' extensions12:29
tristanfor clusters, I dont know if it's even worth the time12:30
tristan(just having a deployment seems to me enough)12:30
ironfootbtw, given a rootfs, you would be able to run definitions deployment extensions to test a deployment of something built with buildstream12:30
tristannot sure you would, you would at least lack the static dev nodes12:31
tristanI guess you could try running an extension in a bst shell, but then you dont have host tools that those extensions also enjoy12:31
tristanor you could just root yourself, and do the mknods12:32
tristanmeh, its damn close :)12:32
tristanthis week we try to boot images12:32
tristanironfoot, on the other hand I just thought, it could be very cool if you looked into post-conversion stuff in baserock12:39
tristanironfoot, like, things which will really improve the experience would be...12:40
tristan  o Use arch conditionals to remove all those different arch specific systems it creates12:40
tristan  o Use build type dependencies to ensure that busybox is never staged after foundation is built12:40
ironfoot?o Remove old strata that only contains one chunk12:42
tristanWell, also a lot of dependency untangling12:43
tristanironfoot, i.e. baserock strata 'contain' chunks, buildstream stacks only depend on elements12:44
tristanthis containing-ism is lost knowledge base of what things really depend on, and consequently slow down builds which could otherwise be parallelized12:45
ironfootI wonder if we would go to a finer dependency grain now that we can12:45
tristanIn the abstract, I think:12:47
tristan  o Stacks should not disappear, they are convenient12:47
tristan  o The elements a stack depends on should not depend on other stacks...12:47
tristan  o Unless, those other stacks are from a pipeline element (other project)12:47
tristanSo, you keep the convenience of offering a stack which does something, you get finer grained dependencies mostly at build time, but you lose the fine grain when we introduce pipeline elements (but in larger groups than we did with strata)12:48
tristanSo for instance the ideal I think for 'gnu-toolchain', is that it offers 2 stacks for consumers; A.) The runtime ... and B.) busybox and friends12:49
tristanThen, if it's a separate project... 'core' or 'foundation' which sits on top of it, depends on the 'runtime' stack (both build & run), but only 'build' depends on the tooling (so it can be discarded after they are replaced with better tools)12:50
tristanoh /me didnt notice he had built a webkit in the background... second webkit brewing hehe13:12
*** ssam2 has quit IRC13:21
*** ssam2 has joined #buildstream13:38
tristaninteresting technical detail of compose element14:18
tristanIf integrate is True, then everything must be staged first, and the domains which are not listed are to be removed/filtered out14:19
tristanIf integrate is False, then including specific domains only is possible14:19
tristanHowever, the output is different14:19
tristanBecause one can never guarantee that split rules will be able to cover all files14:20
tristanI suppose there are two approaches, either make this behavior explicit in the configuration, or, have a semantic for describing "any files not covered by defined split rules"14:21
tristanperhaps the latter is more desirable14:21
ssam2would it make sense to have two different elements rather than an 'integrate' boolean?14:36
ssam2it seems like the use cases are different14:36
ssam2one would be useful for making finished systems, the other useful for making packages14:37
tristanssam2, well, integration happens at every step fwiw14:41
tristanssam2, stage -> integrate -> build, every time14:41
tristanit *might* make sense to split this into separate things, but so far I havent found real cause to14:41
ssam2ah, ok14:41
tristanalso, it would potentially cost a lot more disk space14:42
ssam2my only worry was 'compose' becoming too complex from having many options14:42
tristanyeah I understand14:42
ssam2but if 'integrate' is standard, it doesn't make sense to split based on that14:42
tristanit's a tricky problem, though14:43
tristanthe chaos of trying to manage split in one step and integrate separately, is something that has left baserock with an unsatisfactory result, regardless of which order it's done in14:43
tristanfor instance (warts ahead: ...) currently it's been reversed so that integration commands in baserock run first directly in the sandbox14:44
ssam2right.. splitting should really be last I guess14:44
tristanand then, instead of removing things that are not in the splits, the split rules are used to copy files over from / -> /<system>.inst/14:44
tristanSo, everything that was done in the integration phase, is actually just lost14:45
tristanin the final system :)14:45
ssam2ha14:45
* ssam2 never dared look at how splitting worked in YBD14:45
tristanwell, I wrote an email to the list months ago, and I think in the end nobody wanted to revisit the thing14:46
tristanI'm not convinced (or nobody has taken the time to convince me) that the problem was ever actually solved in morph, either14:46
*** tristan has quit IRC14:57
* paulsher1ood is convinced it wasn't15:13
*** tristan has joined #buildstream15:13
*** ChanServ sets mode: +o tristan15:14
*** leeming has quit IRC15:47
*** tiagogomes has quit IRC15:47
*** ssam2 has quit IRC15:48
*** ssam2 has joined #buildstream16:01
*** tiagogomes has joined #buildstream16:02
*** leeming has joined #buildstream16:02
*** leeming has quit IRC16:25
*** leeming has joined #buildstream16:41
*** ssam2 has quit IRC18:57
*** tristan has quit IRC21:18

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