 So let's get started. I'm just going to be basically doing demos. I hope the demo goes out with me today. And basically, I want to talk about these three tools, Koji tool, for the repo query and DNF repo. Yeah, I don't have any slides, so it's going to be quite informal. This one, Koji tool is already available in Fedora updates. Actually, it went into Fedora just after kind of Fedora 36. However, I just released a new version today, which has some nice fixes, but it's only, well, it's only in Koji, the on-base, it should be in the next raw height release. And yes, and then there's Fedora repo query, which is a small wrapper of a DNF repo query, which I do as it would load you to query different, like versions of Fedora or Apple and so on. Fortunately, it's not quite as complete as I'd hoped, but anyway, I'll show you it and I'll give you some idea of how it works, I mean, yeah. And the last tool, DNF repo, it's just a kind of local tool to control and DNF repo is in a kind of sort of dynamic way. So yeah, let's see how it works. Yeah, and if you have questions, please, yeah, feel free to drop them in the chat. I'll try and keep, oh, there's also the Q and A section. All right, so I'm sitting here in a raw height instance, just your toolbox, but anyway. So actually I'll start a little backwards. So this is DNF repo and it's just listing all the repos that exist basically in the, well, most of them anyway, that exist in the, it's a tra, yeah, yumrepos.d directory. And I'm kind of bothered by this one. I don't, I'm not going to be using modular repos tonight. So the first thing I'm going to do is to try and the, oh, yeah, maybe I can show some help here. So this is, this is a little bit too big, actually. Hope the text isn't too small. Is it? Yeah, so you can do various things like you can just add a couple of repos or code your repos easily. Also you can disable repos temporarily, like for the next, you can also run DNF transactions directly from DNF repo. So I mean, one thing for example, you could do is in a, well, this is a right, so it's not, but we'll have a look at it a moment in, in a for 36. So let's say, let me just go back to this list. So let's say I want to disable this repo because I don't need it. Then I can, mostly I can, yeah, there's an option here actually. So there are some specific options just for testing and modular repos. So if I do minus M, it will disable it, but it doesn't actually save that. So that's only a temporary thing. So I could like do a transaction. I don't know, like DNF update or something. And then we're going to avoid using the modular repo, for example, but I'm going to run this minus S, which is to save, to save the actual changes in state. So, okay. So now the modular repo has been disabled. Yeah. I mean, it's, I know it's sort of particularly amazing, but it's just quite convenient to have this. And I often find I keep going into like VMs or containers where like the Cisco repo is pre-enabled or modular and so on. So having a little wrapper like tool like this to quickly disable things and it's kind of useful. And then there's the repo query. So let's see what version of, yeah, so it's sort of just, okay, I can actually show maybe what it's doing. Yeah. It's basically just running this DNF repo query with various options. And the nice thing is that it sort of, yeah, it'll define a repo ID and also, yeah, repo name. So this particular query or the repo data for this query is saved under this everything raw hide. Similarly, if you do a 36 query, then it will say that under the 36. So it, I mean, if you try to use DNF repo query, like and then say use like release ver or something to override the version, it will actually override all your repo data. So then every time you switch back and forth between versions, it will download all the repo data again. So this keeps the repo data for different versions separate. So anyway, I'm sorry, I can't make it a little bit bigger. So, yeah, so currently there's, let's install this thing. This is the old version, which is also available in Fedora 36. It's lower than expert. So that's there now. However, I actually want to use the new version. Let's say, so I'm going to use Fedora tool, which has various commands. And one of the commands it provides is install. So maybe before that, let's find the build that I did earlier. So I can use this mine option, which will list my builds and my recent builds. I'm putting my 10 most recent builds. Okay. So yeah, the first one. So this is a bit like a sort of a command line interface to, I mean, similar to Koji web, I guess in some sense. I mean, obviously you can also use the normal Koji command and tool to get some of this functionality. But one nice thing is that it shows the links to the builds. It also shows the state and the time that builds are finished. And I could look at the latest build, which is what I'm actually interested in, which has a little bit more information. So how long the build took, like seven minutes. Some more links. Yeah. And now, yeah. Let me install that package since it's not available yet in Rohit, at least not in my mirror, at least. So, yeah, I can just type Koji tools. Oh, not gonna use Koji tool to install a new version of Koji tool. That should be fine. Yeah. So this is, yeah, version 093, which is a new build. And it's not downloading the package from the Koji and I'm using DNF to install it. All right. So that was a brief introduction to the three tools. I think I can say a little bit more about them. Yeah. So maybe a little bit more about the question about. Where's the standalone tool at this point? I don't know. It's, I'm not sure that, well, I don't know. I perhaps something could, well, I don't know. If it may not functionally looks really promising or maybe it's someone may want to think about whether it should be integrated in some other way. But good question. All right, so a little bit more about Koji tool. So as I mentioned, yeah, you can do, so Koji is a little bit funny in some ways that you can like search for builds pretty easily, but searching for tasks is actually a bit harder because you can't like search tasks by package name or someone directly. Another quote of Koji is that it, well, the, yeah, the web API uses XML RPC, but anyway. So anyway, there are these two main commands, builds and tasks. So builds is particularly for, yeah, we already saw that earlier. I think over here where we listed the builds here. Let's try it again. So yeah, I could list all the builds of Koji tool, for example. Okay, I don't have so many. Well, it just shows the 10 latest ones, I think. Let's see what else I should mention here. So yeah, there are various options, but you can even install packages directly from here too, but I know it may be easier to do it using the install command, it's more flexibility. And somewhat similarly with tasks, well, let's see what tasks are building currently in Koji. Yeah, that's very much. Okay, and yeah, you can search for your own tasks. I mean, if you have a, it uses a code brush to determine your first ID, or you can search for another user's builds. This is latest option. You can decide how many results you want. You can also search by state, like if it's closed or failed which can be quite useful. You can also search for my arch, time, and method as well. So sometimes you want to search like for when the last, I don't know, like new repo, say job or something like that. Yeah, and here you can, yeah, you can search for tasks by package, but what it's actually doing is it's actually looking for builds and then it goes and finds the build tasks that correspond to those builds. Similarly for NVR, yeah, another nice feature of this is that you can display build logs, for example. So let's, oops, I'm using the wrong command. Okay, so actually I'm going to demo since we're running out of time. There's another command, I'll come back to this, but I've already shown install, but actually install has some more advanced features. So for example, it can, if a package is already installed and then you're trying to install a newer version then it will only, for example, install the sub packages which are currently installed in your system by default. And you can also do filtering. So you can specify which packages using glob, globs or which packages to exclude for some very large packages like which have hundreds of sub packages, this can be really useful. Yeah, sure, if I have an example here, for example. Yeah, I was trying with, Google Noto has a lot, it's one example of a very big package. Okay, this is going to list them. So here, well, it's still listing all the packages but it's only listing a subset of the packages here, like the ones which are sounds, VF, for example. Yeah, so that's quite handy as well. Okay, I think I have about five minutes left. Another useful thing is this progress command. Yeah, so it'll actually track, it'll, yeah, we need to find some tasks maybe. All right, but basically what it does is, yeah, let's try running it, see what happens. I think maybe there are no tasks right now, yeah. It just tracks builds by the size of the build logs. So it'll show how big the build logs are growing. Perhaps I could, some example. I could look at this one, maybe, just for example. That works. So here's an example, okay. Yes, LPM has finished, but it's just, it's still building the other packages there. So, I don't know, for large builds, for packages, it'll take a long time, like it's very, quite useful, I find it right. And another fun command is this find command, which basically can, well, you can basically write, well, it only has a limited number of sort of things that it understands, but you can write various things like my, these are the words that it understands, for example, so for example, pretty easy if I give an example. So my last fail, that's quite simple, right? So now it's gonna show me the log of the last task of mine that failed and also including the tail of the build log. So yeah, I think, early I tried to rebuild this package, which is failing. And yeah, it's a lot quicker than like jumping into the web interface and then clicking through to the task and then, yeah, so I find this quite handy. I think that's all really on the Koji tool. Let's see. So Fedora repo query, yeah. So it has a few things it can also do, like it can also query Koji build routes, our center stream. And I just added today like support for different channels of center stream. You can also use the DL, like the main repository. And again, that will use separate repo data for the DL so it doesn't override your local mirror data. And you can use, yeah, you can use source queries and also arch, yeah. You can also see how much space, well, so I have 3.2 gigabytes of repo query data, just quite a bit. I may add a feature later that it uses the system repo query, the system repo data for the local version of the system, local system version, but yeah. I said, this isn't finished, it's not as to, currently it doesn't handle, Fedora updates, which is a bit embarrassing. So yeah, it's at alpha stage at the moment, unfortunately, I'd hope to have it a little bit more complete for this talk, but anyway. Yeah, query something like, yeah. And I think I also would like to be able to query multiple versions at the same time and things like that. So this tool actually originally came out of, I have an internal tool in Red Hat called REL repo query, well, it's been quite detailed repos internally for REL, so it's, but the code actually sort of was evolved from that, which was probably a bad idea because the repo structures is so different that it, I don't know, it doesn't really make sense, I don't know if, yeah, I think that covers most of it actually. Do people have any questions? Let's see if there's anything in the Q&A tab. Okay, Robby's asked a question, how does Codie tool handle multiple query profiles? Ah, okay. If you mean, ah, okay. If you're asking about different Codie instances, right? That's a good question, yeah. I didn't talk about that. Oh, something about another question, I see. So yeah, also one, I guess one thing is that these commands could be somewhat better integrated in the sense that, I don't know, this program actually evolved from some separate tools which I sort of brought together into one tool, like, for example, those are Codie installed tool and so on, so, see if I can answer your question. Yeah, so for example, you can, yeah, let's see. For example, you can query, let's try this. Let's try and do a stream query for, I don't know, maybe Blanche or something. Oops, didn't work because, I was not even wrong here. Because it's not middle age, it's big age. Yeah, that's one example. So these are sort of shortcuts. All right, let's scroll up a little bit. So yeah, some of the Codie hubs are predefined like Fedora and the CentOS stream or Appian Fusion. But you can also give a full URL to a Codie hub. It has to be a Codie hub, not a Codie web, so to speak. It's using the XMLRPC web API to query. There was another question. Yes, it's written in Haskell. So I don't know, sorry, I was just mentioning. Jeremiah asks, why do I use Haskell? Yeah, that's probably a whole talk in itself. I actually find Haskell's a really good scripting language. Yeah, so I find it very productive. I like static types and Haskell lets me write code pretty fast. Who could use the Codie servers? Who can query? I think anyone can query the, you don't actually need to be logged in to the Codie hubs to query them. So yeah, I think it's sort of open. Maybe I should say, some queries can be quite intensive. I mean, I think the queries I showed today were quite, like if you try and search for some build in like 2010 or something, it might take like some minutes because the database has to go and find stuff, but see if there's anything else in the chat. CBS, sorry, I'm not sure what CBS means. Do you mean CentOS build system? Oh, sorry. Yeah, I haven't actually added the older CentOS 8 build system but that could also work. Perhaps I could show the, or is this probably a bit big or small, I also have a test suite, so there are more examples in here. Yeah, so more or less out of time. Okay, great, thanks, Robbie. All right, last call for any questions. Anyway, I hope it's useful. Yeah, so Codie tools already in Fedora, as I said, and I hope that Fedora repo crew at least might get into Fedora once it's ready. Thanks a lot. Yeah, thanks for coming. I appreciate your attention. Thank you so much.