We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

How OBS helps you to make packaging software a breeze

00:00

Formal Metadata

Title
How OBS helps you to make packaging software a breeze
Title of Series
Number of Parts
57
Author
Contributors
License
CC Attribution 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
Identifiers
Publisher
Release Date
Language

Content Metadata

Subject Area
Genre
Abstract
OBS provides a wide range of feature that help packagers to ship their software to their users. This talk is showing some of the key features of OBS and how they help packagers to make their life easier. For example, did you know that you can setup OBS to fetch package sources directly from GitHub and build them? OBS is a Rails-based web application, with a perl backend, that allows users to build and distribute packages for a wide range of distributions, like SUSE, Fedora, Debian, Ubuntu and ARCH Linux.
55
Thumbnail
26:08
SoftwareComputer-generated imageryService (economics)BuildingOpen setBuildingService (economics)2 (number)EstimatorMereologyComputer animation
BuildingFingerprintFitness functionInformation securityProjective planeLibrary (computing)BuildingDistribution (mathematics)Medical imagingAdditionSource codeWebsiteComputer architectureComputer animation
Physical systemConnected spacePhysical systemCASE <Informatik>Web 2.0SpacetimeService (economics)BitXMLComputer animation
DisintegrationService (economics)SummierbarkeitTexture mappingGroup actionMenu (computing)Mobile appToken ringSource codeComputer fileService (economics)Right angleToken ringMagnetic stripe cardMereologyMathematicsProjective planeRepository (publishing)Stability theoryDivisorExistenceMessage passingSet (mathematics)Exception handlingRevision controlComputer fileInformation securityGateway (telecommunications)Uniform resource locatorMultiplication signRule of inferenceBranch (computer science)Parameter (computer programming)1 (number)BitINTEGRALXMLComputer animation
Link (knot theory)Disintegration
Link (knot theory)Computer fileWiener filterMaizeRevision controlLink (knot theory)OscillationAdditionComputer fileSet (mathematics)MathematicsComputer animation
Texture mappingLink (knot theory)MathematicsComputer animation
Execution unitGamma functionPersonal identification numberFingerprintInsertion lossSimultaneous localization and mappingDiscrete element methodMaizeEquals signMenu (computing)Drop (liquid)CASE <Informatik>Projective planeState of matterConfiguration spaceMeta elementMultiplication signRevision controlBit2 (number)Error messageMathematicsConnected spaceSource codeVideoconferencingDifferent (Kate Ryan album)Patch (Unix)Computer fileWeb pageDifferenz <Mathematik>Group actionComputer architectureProcess (computing)Electronic mailing listMachine visionJava appletWeb browserService (economics)Expandierender GraphMusical ensembleInformation systemsAssociative propertyRepository (publishing)View (database)Office suiteChainXMLComputer animation
Normed vector spacePoint cloudMaxima and minimaExecution unitDiscrete element methodHoaxBitDigitale VideotechnikMathematicsRevision controlServer (computing)DatabaseDifferent (Kate Ryan album)View (database)DivergenceLattice (order)Group actionDifferential (mechanical device)Musical ensembleProjective planeData management
CollaborationismTwin primeDiscrete element methodDemo (music)Execution unitQuiltConvex hullData modelSource codeData typeServer (computing)Formal languageData Encryption StandardModemRWE DeaComputer iconInterior (topology)Asynchronous Transfer ModeInclusion mapMaß <Mathematik>Maxima and minimaCollaborationismLink (knot theory)ChainGoodness of fitMusical ensemblePhysical systemGUI widgetParticle systemOpen sourceCollaborative softwareProjective planeDisk read-and-write headOnline helpGroup actionSingle sign-onEmailTraffic reportingWeb pageSatelliteMathematicsView (database)Software maintenanceMultiplication signCASE <Informatik>Different (Kate Ryan album)BitTime zoneXML
MeasurementElectronic mailing listXML
HypermediaComputer animation
Transcript: English(auto-generated)
My name is Björn, I'm working for the build service team as well as a developer, and yeah, I will talk about the build service and some of the features and try to shed
some light of some of the more hidden parts that probably not everyone knows about. So the build service builds packages, we have 47,000 users, which doesn't sound that much, but if you consider that it's not something that a normal person would do.
Packaging is not like a hobby also, it's quite a lot actually. And we build 200,000 packages each week only for home projects, so only for users, and additional packages probably much more for our distribution, for other projects like
GNOME and so on. And yeah, it's also, so OBS is also used by a lot of other communities, projects, companies, and hosted by themselves for whatever reason, security and so on. So I said you can build packages, that's one of the cool features for all kinds of
architectures, and yeah, you can build it against different distributions so that they run there with the same libraries and so on. And yeah, we have all kinds of package formats, Debian, RPM, you can build images
and so on. So that's probably one of the reasons why it's used by so many different people, and obviously there's more, so we also have, we make it relatively easy to connect packages with users, so you package up stuff and then you have your repository, others can
use it. We have a request and review system, which we will see a bit more about later, notification system, and yeah, there's a bigger ecosystem around OBS, there's OSC tool, which covers a lot, in some cases even more than the web UI, what OBS can do, and for example there's
also the services system that you can facilitate. So I did a quick search in GitHub, and around 20 services exist right now, and it's
like yeah, you can write it your own, you can submit it to us, basically you can, so there are existing ones which would be like set version, setting the version in the spec file, tarring or recompressing your archive, and there's one thing which I will
present now, that's a GitHub or Git integration, and yeah, this would be how it looks like, so I will use mouse, okay, and yeah, so what you need is you define the service that's here, then the URL to the Git repository, and then basically you're already there and
have this, but of course it's a bit tedious to write this, yeah, the rule XML by yourself, so what you can also do is you go to the UI, just click on remote URL and then you copy
some Git repository, obviously it doesn't have to be GitHub, and yeah, you copy it here, and then save, and you have your file, yes, and the service will run and create your
CPIO device, it will take some time, there it is, so you spare some time for creating this XML, which is quite nice, then if you want you can even take it one step further
and integrate this by adding a service for GitHub, you click here on settings, integration service, this will make GitHub always trigger the build service, notify it whenever
there's a change in the commit message, a new commit, so that would be like here, click here, and the rule instruction is written here, it's quite nice, so I will just briefly
mention the most important parts, you need the tokens that you create, you can do it by using OSC token, you can create it in general, or only a specific token for the project and package, and then you activate it and that's how you can continuously get new packages whenever there's a change in your GitHub project, which I think is quite
cool, and yeah, additionally you can also set a branch for example with the revision parameter and yeah, there's even more like you can extract your spec file if you
track it in your GitHub repository or you want to use someone else's stuff and they have that, then you basically just don't have to do anything, it will just build continuously and all you have to do is to add this URL to the OBS UI and click save.
Then package branching is probably something everyone knows, so most of you, so you can benefit from other people that already built a package, then you have this link, this link which basically refers to it and there's a link file which looks like this.
This means that whenever this upstream package changes, your package, your link package will change, so if your own packages that you build require this package and this package
changes, they will rebuild. If you prevent this, you can lock it by setting the link, so this is the command osc set link ref and then you have here the reference to the revision that you actually
want to link against, so that's how you lock it and in addition you also have, so if once you locked it like here, that's one of our packages, that's our project,
one of the packages we need, we linked it, we also set the reference and apparently the other package has changed, so that's how you see it and if you click here, then you see the diff, so you have also an easy way to see what changed, when it changed and then you can consider if you want to update the link with reference and yeah,
so I think that's pretty nice. Then apparently like if you start linking packages that you need, you stack up packages in your project and yeah, you have a lot of stuff that you have to maintain, so in
our case it's quite a lot, that's just a snippet and we have a monitor page, that's what you see right now, which gives you a nice overview, that's the same page actually, the same project, but it looks a bit different because I didn't filter it, so you can set
here different repositories, architectures you want to filter against and then you click here, which that's a button, so you wouldn't notice but then it would filter it, so you get a smaller, like I just want to have a certain group of packages, do it like this
and then, all right, so let's say Ruby Games, then that's how, okay, and then you have
an overview, so from there you can of course also look on the different features, if something is unresolved you would get a pop-up which shows you and yeah, if you
click on the packages you could end up here and you see like you have failed us, you don't really know much about it, you could look into the build log to see the actual error message and if you want to see the history of this package, what changed or when and
why, you can see it here in the job history for the particular repository and architecture, so you see here are the revisions, you have the reasons why something changed, source change means that the package itself changed, meta would mean depending package changed
or the project config and new build is in this case, no, it's not the first time but either because it's the first time you create this package and it got built or you trigger it manually, that it rebuilds and so it can happen that you look at this
and you see you know it fails, you can look down and see in which revision, so maybe it fails for a longer time and then you check the revision, you go to the revisions tab, wait a bit and a bit more, even more in that tab will in some seconds show you
a list of all the revisions, the changes that have been made and like that, who did the change and if you know like let's say this, we know revision 6 broke it, we could
either browse the source, which is just, yeah, yeah, but with all the connections
then you would just see the images, I could have made a video but that's also a bit tedious, yeah, so then you can click on the revision and see the file changes, so you have again this diff and you look through it and you get an idea of what changed,
so you might even get an idea of what particularly caused the failure like adding a patch or removing it or updating to a version. And yeah, so this is also a nice thing to do.
And then, right, that's based on rdiff, so that's what I just showed you here. And rdiff is like you see it here, the diffing of different packages and revisions and so on. And this can be used in many ways, like we saw before, if you have a link, you can diff
against that, that's the same view actually. If you search for something, like if I say, hey, I want, I need influx DB, search for it, I have here a list, but which one, what's the difference here? So I could just go to the first one, go to this diffing page, either by clicking
through the UI, already did it, but you can also go directly there. Then you want to diff it against a different project, so apparently I also prepared that, but let's say Newton, and then you add another parameter, that's a bit ugly, I don't
know why we don't make this easier. And then you say like, oh, project, probably for other project, and you enter, and then
you see like, okay, this has another commit, it's not so much different, it's not like a version change from the upstream package, but yeah, some adjustments in the spec file,
and actually there's also readme entry, so this is missing in the server database version, but it's here, so maybe I rather want this one. So in a force, you can also, like we saw before, you can set the revision, that you diff it against a different revision, you could even diff different packages, which is
maybe not so useful, unless you want to do like MariaDB against MySQL or so directly after the fork, yeah. Then we have quite some collaboration tools, and actually what we saw is also partly
collaboration related, but some more in-depth collaboration could be that you use a status tab, which is nicer to show it here, because you see how you get there. So we have our project, the status monitor page, but we can also go here, we are advanced
to the status tab, and then we see such an overview, there it is. And apparently, yeah, you see here the different packages that currently fail in this project,
you have here links to the build logs, and how long it fails, apparently we don't update it so often, at least these packages, the rest is building fine, and you see here some text, which is written by someone, and the way you write this is to open this
and then you enter some comments, so maybe your colleague already worked on this and you take over and then you already know where you are looking at, like if you really need this package, you didn't have time or the chance to talk with him, maybe because you are in a different time zone or you didn't know before that you will need it,
you can notice like what you figured out, and so on, and then someone else can continue from there and spare some time with debugging. And in this particular case there is even a link, which is not added by someone else,
but it's some OBS magic, so it's even written here, link package is different, so then you can click here and get an idea and you are again on this art of page and yeah, can compare it and try to make sense out of this.
Then other things to collaborate is that you have requests, OBS has a request system, you can create requests for changes you made, like changes on the source, you can request
that you get to maintain it for something or that a project or package gets deleted for whatever reason you might want this, which is also quite powerful. So let's just go to my page, so probably some of you already know this,
so here you get an overview if you are a maintainer of some project, you also see reviews, so if a user thinks that you can maybe help with something that you know about this package
more than he does, he can request that you have a look and tell him if this looks or seems to be good or not. And yeah, while preparing this I actually found some issues, so I created one of those.
So I did some changes here, like here, and then I think this is good enough to submit
it, so I click here to submit the package, this will go to the one where I branched initially from, and I can click OK, yeah, it's written like this got created, here
is the overview and I have a review system, so if I think someone else should have a look at this, someone in particular, then I can add him or add a group and he will get a notification, so then later on the maintainers of this project can accept this
request and I set notifications, so that's another nice thing in OBS, you have a notification system, so if you click on your user page, you can select this notification bar and assign
yourself to a different notification that you might want to receive, in this case maybe reviews, so if someone wants a review, you would get a mail, and I think that's
also helping a lot, sometimes it's a bit too much mails when someone creates a lot of requests, but yeah, it's another nice thing that helps packaging stuff and working with different people, yeah, and that would be it. Do you have any questions? Any other hidden features you
might want to mention that I missed? Okay. Thank you for being here, and see you then.