
Webinar Synopsis:
Speakers:
-
Zane Hamilton, Vice President of Sales Engineering, CIQ
-
Brian Phan, Solutions Architect, CIQ
-
Forrest Burt, High Performance Computing Systems Engineer, CIQ
-
David Godlove, Solutions Architect, CIQ
Note: This transcript was created using speech recognition software. While it has been reviewed by human transcribers, it may contain errors.
Full Webinar Transcript:
Zane Hamilton:
Good morning, good afternoon, and good evening, wherever you are. Thank you for joining us in the continuation of our Container Education series. My name is Zane Hamilton. At CIQ, we're focused on powering the next generation of software infrastructure, leveraging the capabilities of cloud, hyperscale and HPC. From research to the enterprise, our customers rely on us for the ultimate Rocky Linux, Warewulf, and Apptainer support escalation. We provide deep development capabilities and solutions, all delivered in the collaborative spirit of open source. Like I said, we're actually going to continue on with our container education series, and we have a great group of guys here to talk about it today. I appreciate it. Pardon any background noise. There's something going on behind me. Might be a little loud. I hope you can't hear it, and I'm sure you can now. So I'll let you guys introduce yourselves and I will mute. Brian.
Brian Phan:
Hi everyone. Brian Phan here. I'm a solutions architect here at CIQ. My background's in HPC administration and architecture. I've been a user of Apptainer for a while, but have not had experience developing the tool. So I'm excited to learn from Dave today.
Zane Hamilton:
Forrest.
Forrest Burt:
Hey everyone. My name is Forrest Burt. I'm an HPC systems engineer here at CIQ. I've been a longtime Apptainer user as well. I used to use it to deploy workloads out for academic and national lab researchers at my previous institution. I've used it for all kinds of stuff these days, but much like Brian, I've never been a developer of it either. So I too am very excited to learn from Dave as to how that setup all works.
Zane Hamilton:
Thank you. And if you are not familiar with Dave, if you are in the community, I would be surprised that you have not run across Dave before, but Dave, go ahead and introduce yourself.
Dave Godlove:
Hey, everybody. I'd like to start off by saying that I am not actually an Apptainer developer, but I have played one before on TV. So my name is Dave Godlove. I've been around the Apptainer community really since it started pretty much. I have developed Apptainer, although it's been a long time since I've been an active developer of Apptainer, really not since it was written in C and Bash. I've also been the release manager for Apptainer for a while. And there helped to manage development even though I wasn't one of the ones who was actively developing it. So hopefully I can say a few things that are interesting and useful about the community and the developers, even though I'm not currently one of them.
Zane Hamilton:
Yeah, and you pretty much can't go through any of the documentation for Apptainer without running across something that Dave has written. He seems to have written almost all of it. I know there's a community. I know a lot of people do, but Dave definitely has his fingerprinted on a lot of things in that documentation for sure. So Dave, why don't you give us a little bit of background on the community and where it came from, where it is now, how it got there. Just tell us the story.
About Apptainer [08:07]
Dave Godlove:
Yeah, absolutely. We thought that we would spend this time to talk a little bit about, not so much like developing containers or developing workflows and things like that, but more developing Apptainer itself because I mean, this is a great opening welcoming community, and I think this is a great project if you're interested in getting into some sort of like software development, but you don't really know where to start. I think this is a great project to dive in because the community is so open and organic and everything. Apptainer has been around in some form for like six years or something like that at this point in time.
And it used to be, Greg started the project when he was working at Lawrence Berkeley National Lab some time ago, and he sent out some announcements. He created a Slack channel, he created a website, and people just sort of organically got involved and started to mess around with it. And I think that the project has really been organized mostly around GitHub as a lot of projects are today. And we've really used GitHub to great advantage to organize the community and organize the project and everything. So it was singularity for a long time. And I believe that you can still find the repo, I believe it's under HPC NG at this point in time, but you can actually find the old Apptainer repo, which was renamed from Singularity.
And so you can go back on that all the way back basically every commit all the way back to the beginning of the project almost. And so now the way that the project is structured, there are a group, and unfortunately we couldn't get any of them to join today, everybody's pretty busy, but there are a group of people that are associated with the Linux Steering Committee, and they are the ones that have commit access to the repo. But you can go to the Apptainer repo and it's now just on GitHub, it's Apptainer slash Apptainer, and that's where the code is, and that's where you can get involved and raise issues and create PR's and do all that kind of stuff.
Linux Foundation [10:59]
Zane Hamilton:
So, Dave, I know that it moved into the Linux Foundation, but what has that done for Apptainer? What does it actually mean for the project? How does that help? What view has it given it?
Dave Godlove:
Yeah, so the Linux Foundation is now an official sponsor, an official host of the project. I, myself, am not one of the members of the steering committee and I haven't been deeply involved in that, so I can't speak about that in depth. Maybe somebody else, maybe Forrest or Brian can also comment on this as well, but I know that we're always looking for ways in which to sort of make sure that Apptainer remains open source and remains community driven and remains something which is not really dominated by any corporate entity or so on. And I think that helps us to be able to make sure that container stays open source.
Zane Hamilton:
So have you seen growth in that community since it's been moved over to the Linux Foundation? Have there been more people coming in to help actually do development documentation? I mean, I feel like there are already a lot of users of it, but it seems like maybe there's been an uptick in that as well. Is that something you've seen on the project side?
Community Growth [12:22]
Dave Godlove:
Yeah, I think so. I mean, I feel like for a while there when once again, maybe somebody else can comment as well, but for a while when I was watching, I tend to watch issues and PR's and the different things that come into the GitHub repo, I don't really comment on them, but I at least follow them and lurk and watch them to some extent. And I feel like for a while there, it was pretty much the same kinds of names I would see over and over and over again, creating prs and creating issues and stuff. And I feel like recently I've started to see a lot of new names on a lot of new faces. I don't know if the actual volume of issues and PR's has increased.
And I think that partially that's because Apptainer's gone through several different phases of development as like a big, long, ongoing project will, and one of those phases of development it went through was, we built out a whole list of different features that we wanted to add to Apptainer, and we organized all those into different milestones for different releases. And this is when we had like a dedicated development team, and we went through and we prioritized stuff, and we just sort started adding stuff. And during that period of time, obviously the number of PRs and issues was just huge. The volume that was going through. Apptainer has now matured, I believe, as a project. And this could always change.
But right now I think that the user base is probably, and I'll let Brian and Forrest maybe speak to this too. I think the user base is probably pretty happy with the feature set that Apptainer has. And so now we're more in a mode of just sort of trying to make sure that we fix bugs and we keep things up to date as things on the underlying system change and things like that. It's more of a maintenance mindset versus like adding features mindset. So I don't think we've seen a really dramatic uptake in pull requests and issues, but definitely a lot of new faces recently for the ones that we do have.
Zane Hamilton:
Great. Forrest, I saw you come off mute a minute ago.
Forrest Burt:
I was just going to say with regards to the community, what was the question that you just alluded to us?
Zane Hamilton:
We were just talking about moving over to the Linux Foundation and what that's look like for the product itself?
Forrest Burt:
Apptainer is a really, really mature technology. It, as Dave has said, has been in development for quite a while now. So it's definitely at the moment it's been deployed over like 20,000 or 25,000 sites worldwide, so it's very well known, just like Dave says, it's at this point a very mature technology, and it's in a maintenance mode of just making sure that CBEs are applied to, and bugs are fixed. There were some major developments not too long ago with bringing Rootless capabilities to it, which was pretty neat. But overall moving into the Linux Foundation was also meant to represent the goal of being able to cross pollinate with some of the other projects there and starting to see how Apptainer can fit in with those. Because again, it's a very mature technology and at this point a lot of the work there is on just maintaining it and making sure that it has the same level of quality for users at all levels.
GitHub Repo [16:11]
Zane Hamilton:
So Dave, let's talk a little bit about the source code for the project in GitHub. How is it structured? I mean, talk to us about that.
Dave Godlove:
Yeah, so let's see. Maybe I could just share a window really quick.
Zane Hamilton:
Can we please just have it shared on your screen to a camera again?
Dave Godlove:
Yeah, let me do that. All right, at this point in time, I think most people in the scientific community and definitely in the development community and so on, have probably they're probably intimately familiar with GitHub and how it works and everything. The way that the GitHub repo is structured here used to be that there was a main branch, and then there was a development branch, and then there were a bunch of tags. And so the main branch was, at that point in time, it corresponded with whatever the latest tag was, which was the same thing that you were supposed to get whenever you pulled main.
We've since changed that so that main is development, and I think that this seems like a small change, I think. But it took us some discussion to come to this. It was a big question mark as to whether or not we were going to do that. And I think that the reason for that is because GitHub is serving multiple different purposes and multiple different communities here. One of the communities that it serves is obviously the developers who write the code for Apptainer, but another community, historically, that GitHub has served is the end users. So GitHub was used not only as a place to develop code, but also as a distribution platform. And I think that earlier in the project, we were concerned that when end users download GitHub which maybe has a hard learning curve, being a little bit harder, especially for non-technical users to figure out.
And so I think that we were concerned that some of our less technical users who just wanted to use the software might not realize that if they download and install main they're getting stuff that might not be stable. It might be development stuff. And so we wanted them to be able to install the main branch and then have that stable. This has been several years ago. Since then I think there's other distribution methods that people are using, like DNF and repos and things to install Apptainer. So I think that that concern is a little bit less of an issue now. So anyhow, there's the main branch, and that's development. And then we've got a couple of release branches here. We're currently working on the 1.1 release branch.
Maybe we should have a 1.2 here as well. I don't think there is a 1.2 release branch, but there probably will be pretty soon. So, and then 1.0 is probably deprecated, because I don't think that we're currently working on 1.0, I don't know if there's some major bug fixes that went into 1.0, maybe we would backport them. So these branches here just have to do with some automated bots that we have running in the background. And then tags, this is how we do our releases. So, you know each one of these tags corresponds to some release, and of course you can also go over here and see the releases. So that's basically the way things are structured now. And the way that it works is that whenever somebody creates a new poll request, which is merged, it will get merged ... I believe the way it's currently working ... Dr. Dave is the one who's currently pretty much running this, so I'm guesstimating. I used to run all this but for some time now he's taken this over and he's been running the releases and development and stuff.
But I think that the way that it works currently is, when you create a poll request you create that poll request against main, and it will get reviewed and merged into main, and then we use cherry picking to poll that poll request, just the commits, from that poll request over here into, I guess it would be the 1.1 release and get that ready so that we can we can release the next point release here. And so you'll see that this is just 1.1, even though we're currently on 1.1.6. So the idea is that whatever the latest release is, that's what is going to be 1.1.7 in this case whenever 1.1.7 comes out.
Zane Hamilton:
Well, Dave, you did mention one thing. You were talking about
Epple [22:16]
Dave Godlove:
Yeah, there's a technical aspect of it and there's also a social aspect of it. And so that's a place where Dr. Dave has really had a major contribution for a long time. He has been the long running Epplenet maintainer for years now of the latest release of Apptainer and previously Singularity. There's the whole just trying to package it as an RPM and trying to do all those types of things. But there's also the issues of, if you're going to package it for Epple, you can't just create an RPM. There are a bunch of conventions that you have to stick to, and you have to stay up to date on what's going on, and there's more to it.
That's why I said there's a social component to it. And Dr. Dave, for people who don't know, that's Dave Dykstra who works at Fermilab. Dr. Dave has stuck with that for a long time and has been in that community and has been a part of that and has really stuck with that for years. And I think more recently we have Yoshiaki Senda who works here at CIQ, who's another solutions architect. He has been working with Packaging Apptainer in Apt as a Deb package. So I'm not quite sure where that stands right now, but I think that he's also working with that and I don't know, Brian, Forrest, what repo is that currently in?
Brian Phan:
I think it's in PPA, but that's live now, so you can get Apptainer today if you wanted to. And I think we also have a blog post out for that as well, so, yeah. Cool stuff.
Zane Hamilton:
So, Brian, I know sometimes packages in Epple or in some of the other WN ones that they're behind significantly from what's in GitHub. How quickly does this follow a release cycle from the time that it's in Git till the time it's in Epple? Is there an average timeframe or I know different things take different amounts of time, but?
Dave Godlove:
I I think the timeframe is like a week, maybe. It's really fast. And I think we benefit greatly from us being lucky enough to have Dr. Dave both packaging this stuff for Epple and also being the release manager, because he of course knows exactly when each new release comes out and what's in it. I think he actually gets the RPM into Epple pretty much like within hours or less after the release actually happens. But then there is a process by which users have to show that they're downloading and using and testing. I think it's called Karma within Epple. But so it has to accrue so much karma before it's said to be generally available for everybody. But yeah, that usually happens pretty quick and I think that's why there's usually a small delay between the time that Dr. Dave puts it in Epple and it actually becomes available.
Raising Issues [26:18]
Zane Hamilton:
Interesting. Thank you, Dave. So let's talk about raising issues. So if somebody's working with the tool, how do they get involved and start raising issues?
Dave Godlove:
Yeah, raising issues is super, super easy. And once again, this is something that most people might know how to do, but just in case there's a few that don't, or just if you're new to this space or whatever. It's really easy to just go over. So once again, I was just at the Apptainer or main GitHub place, and I just hit issues and went right over here. And so oh, I gotta sign up for GitHub to do that. So basically you just click new issues, I don't know if I want to sign in right here in front of everybody. Hold on.
Zane Hamilton:
I was going to say, if you're going to do that, drop your screen.
Dave Godlove:
Yeah, let me do that. So I'll sign in real quick and then I'll show how you can create issues. Yeah, maybe somebody else wants to comment a little bit while I try to figure out my username and password.
Zane Hamilton:
Forrest, have you submitted issues to Apptainer?
Forrest Burt:
I can't say I ever have myself.
Zane Hamilton:
What about you, Brian?
Brian Phan:
I have not myself, but there is an issue there, that is a feature, that I would like that has to do with templating out definition files that would make reusing your definition file for different versions of a software easier to build.
Zane Hamilton:
Interesting. So are you going to raise that one, or do you want to ask whoever's watching to go do that for you?
Brian Phan:
Maybe I'll put in some PR's as well after learning everything from Dave.
Dave Godlove:
Yeah, so the thing that I wanted to highlight here is when you create a new issue we have pre-populated and marked down, so you write here, and then this is what it ends up looking like. We have prepopulated all these different questions, like what version of Apptainer, what did you expect to happen, what actually happened, all this kind of stuff. I will say that some people basically just start off by deleting all this and then just writing whatever. The thing that I wanted to highlight here, the ultimate goal of this issue, if it's possible. And it's not always possible because it's not always possible for us to replicate your environment, but the ultimate goal of this issue is to give us enough information that we can take this issue and we can run it locally and we can replicate whatever the bug or the feature request or whatever it is that you're looking for.
So do think about going ahead and filling in all these details about what's the operating system that you're using, and how did you install Apptainer, and what are the exact commands that you used to create this bug or what did you expect to happen or so on. Something like that. So that's what I wanted to highlight there.
PR's [29:36]
Zane Hamilton:
Thank you, Dave. So I think the next topic we wanted to talk about was prs, like going through that process.
Dave Godlove:
Yeah. So once again, if you're already a Go developer or something, this is probably pretty basic but it's a little different for different projects. And so I just wanted to go through the steps of creating a poll request here and the steps of getting it reviewed and how that all works. So it might be a little bit different if you're used to working on a project where you've got the ability on the main repo to create a new branch, because if you see a new feature or you see a bug or something and you want to create a PR to address it, the very first thing you want to do is you want to fork the repo.
What that's going to do is it will ask you, where do you want to fork this thing to? I've already got a fork, so I'm not going to do this. If you're part of multiple different organizations or whatever, but you want to fork this to your private space. And then once you've got that forked, you can go over to your fork and you can clone that. And then the next thing that you want to do, which I always forget, is you want to create a branch locally on that forked clone that you have. And so then you're good to go. You can go ahead and make whatever changes you want, and then you're going to push that to your fork, and then through the gooey or whatever, you can make a polar request from your fork directly back to main.
And so that's the process. If you're new to all that, if you're new to GitHub in particular, or if you're new to this project in particular it's not like you just create a branch on the main repo and then you just do a poll request from that branch to main, because you don't have the ability to create a branch on the main repo, you have to do that fork first and then create your PR from there. Another thing that new developers just getting started who maybe don't have a lot of experience, maybe don't really realize, how do you edit things? So you're going to get a review, and in that review you might be asked to change a bunch of things within your code.
If you just simply push more commits directly to your fork, the branch that you have set up in your local fork, then those will automatically go up and become part of the PR as you push them. So you don't have to worry about, what's the process for making sure that my commits go from this forked branch over to the PR, that syncing just all happens automatically. I should show you too, so we got a few different PRs open here, so whenever you create a poll request we've got some continuous integration which runs in the background, and it runs all these tests.
And that's another thing that you'll want to check out. The tests do everything from a bunch of basic actual functional tests where they actually download containers in VMs that are running up on the cloud and do things with them to just lintering your code. And so one thing that you'll sometimes you'll find is that tests fail, and it's just because whatever editor you were using didn't have a go linter installed. And so because of that, there's stuff that still works, but there's stuff that's not correct syntactically, doesn't look right. And so this linter will catch that. And so sometimes you'll have things fail and if you're new and you're just starting out, that can be frustrating to not know what's going on and why things failed.
And so just make sure that you're using a linter. Another thing I think is that the project now requires that you verify your commits. And so that's another little gotcha that if you submit a PR and your commits aren't verified, then you'll get nabbed by one of those tests there. And it can be confusing and frustrating to try to figure out what's going on. So just make sure that you verify your commits and there's a pretty simple way to do that. I can't remember off the top of my head how to do that, but I was able to figure out pretty quickly how to do that when I needed to. And then I jumped into here real quick because if you do have tests that are failing, if you see something like this, then you can just go in here and have a look and it can be daunting at first to try to figure out what's going on, but you know I don't know if I'll be able to figure out what's going on in this example.
But usually you can parse through this and you can figure out, okay, all these are running successfully. Okay, here's the part at which, oh, lint. So this might be an issue where once again, like I was talking about before, the linter caught something which was not correct, I'm unsure. But yeah, so this is the method of going through and figuring out if you've got something that's failing, why it's failing, and then you can get an idea of how to fix it. So after all your tests passed, another thing that has to happen is you have to have a review. And those reviews are usually done by the folks that are on the Linux Steering Committee. So those would be the people like Dr. Dave, Ian Kaneshiro, Cedric, other folks like that that can actually do your review. And I think actually anybody can review. But I don't know if those reviews actually count toward making it so that this PR can be merged yet. So that's something that if you want to get involved in, I think that anybody can go and review PRs. So you could go here and if there's anything that looks interesting to you, you could go through and test it and check it out and look at it and then add your review to it. Once you pass all the tests and once you pass reviews, then your PR will be merged, hopefully.
Cutting a Release [36:54]
Zane Hamilton:
Thank you, Dave. So let's talk about actually cutting a release. How does a release manager actually go about cutting a release?
Dave Godlove:
Yeah, so the way that's happening right now ... Let's see if I can find the milestones. Let me go back into the poll request for a second. So we've got milestones set up and this is something that Dr. Dave does. So right now we're targeting release 1.1.7, and 1.2.0. We follow semantic versioning to an extent, but not completely. And so the micro release here, like the 0.7 here, should denote bug fixes and changes that don't change the behavior. So changes that don't change things having to do with the CLI or anything that the user's going to touch. The minor version here, so the 0.1 here or the 0.2 here, those are going to denote things that might change behavior as far as the user is concerned.
So like you might have a flag that you were using or an option or an argument that works in a previous release that's going to change in this new release. And historically, we have not changed the major version release unless the actual format changes. And that's why I say that we kind of follow semantic versioning, but not necessarily exactly. So in the past, because we went from using ext3 images to SIF images, and we also had a major code rewrite where we went from C and Bash to Go. And when we were with Singularity, we went to 2.0. So the release manager then can put together these milestones, and these milestones have a list of different PR's that we expect to be merged or issues that we expect to be fixed before the next release is cut.
A lot of times as the release becomes nearer and nearer, you'll see that people sort of start to clamor for PR's and features and things that they really like to be added in. And that can become difficult because I don't know how much we're doing it now, but sometimes you'll release a release candidate, and the idea behind a release candidate is that, okay, we're now freezing development. We're not going to add any new features. This candidate is what we expect to release ultimately to be, and we're going to release the release candidate and we're going to expect the community to install that and test it and see if it's got any bugs, basically, see if it's got any issues that we couldn't catch via automated testing.
And so at that stage, sometimes you'll see that people are like, oh, no, but there's this new feature that I really, really want to put in. And it's like, well I'm sorry, but technically we need to wait until the next actual release, because otherwise we have to put out another release candidate and we have to start the whole community testing again. And the community's only got so much testing in them. Sometimes you get more or less testing out of a release candidate. So I think what we've moved to now, especially since the project has become a bit more stable, is the actual releases themselves. Those are what goes out because we don't expect there to be as many huge breaking changes or bugs or whatever in the releases themselves.
And so I think we're getting away from release candidates to some extent, but the flip side of that is that we might have more micro releases, right? So you might have a bug in a particular micro release and that's okay. And so you might do another one to take care of that. And so then the actual process of doing a release itself is just making sure that all the changes are in, they've all been cherry picked inappropriately. Sometimes when you cherry pick a set of PR's in, basically what you're doing is you're taking a set of commits that were made for one branch and you're pulling them out and you're messing with the history and pulling them out and putting them into another branch.
And because of that, you can get conflict, you can get like the same file was changed between these two branches, and then you're trying to add more changes to that. And so those have to be manually resolved. Somebody has to go through and actually look at that stuff and figure out what's going to work and what makes sense. And it used to be that the release manager, basically me at that point in time, would do all the cherry picks for the release myself. And then if there was anything that I could not figure out how to resolve on my own, I would go and contact, hopefully the developer who actually created that PR or one of the other developers and sit down with them and try to figure out what was the proper thing to do. Now I think that the way we've instituted it it's incumbent upon the person who created the PR to do the cherry pick.
And that's good because they're usually in the best position to be able to look at the way the code has changed and figure out the best way to resolve any conflicts. So anyway, the release manager will go through and make sure that all that stuff has been resolved properly and is all in there the way it ought to be. There's a few little housekeeping things that they have to do. They've gotta bump the version number and a few different files, make sure the change log is up to date and then basically just create a new tag, cut the new release, and document all the stuff on the releases page as to what's changed and everything. There's usually a few emails that have to go out, a few announcements that have to go in different places.
And then I don't know if we're currently doing this, but it's a good practice afterward to take that release branch and merge that back into main. So what you've been doing is you've been taking everything from main and you've been copying that as needed into the release branch, you might have some changes that ended up in the release branch through resolving conflicts and doing stuff like that, that you ultimately wanted to go back into main so that you can keep those two as synced up as possible as development continues. So that's the last thing that'll usually need to be done.
Zane Hamilton:
Thank you, Dave. And I think we had a few questions that got thrown up before we move on to the next topic. While you have GitHub window open, Dave, can you show us the "get involved with development" part?
Get Involved with Development [44:40]
Dave Godlove:
Yeah, certainly. So once again, one of the things that you can do is you can go over here to the issues and you can create new issues or, I mean, you can just hang out and read through these issues. This is a great place too. People sometimes have issues that are actually bugs that are actually things that need to be changed in the code in order to work properly, but sometimes people just need help, right? This is a place where people go to get support. And so this is a great way to get yourself more familiar with the project at a higher level, because it's one thing to just use it for your own purposes and to fix problems that you have.
It's a totally other thing to try to get into somebody else's head space and figure out what is their environment and look at what they're using it for. And you learn a lot by going through issues and trying to figure this stuff out. And another place, like I said, you can go through these poll requests and you can look at what looks good and what doesn't. You can review the code. If that's something that you're interested in getting into, if you want to start writing code for Apptainer, then a great place to start off is by reviewing PR's and having a look at them and seeing what code changes. So yeah, this is a way that you can get involved. Another great way to get involved is to join the Slack channel. Apptainer has a Slack channel.
Zane Hamilton:
I think we've already posted the link, if I saw it correctly. I think Forrest put it out there.
Dave Godlove:
Oh, cool. Thanks Forrest.
Zane Hamilton:
Yeah, it's out there.
Dave Godlove:
Yeah, so that's another great place that you can get involved, is just sort of watching what's going on in Slack and helping people out when they need it, asking questions, that kind of stuff. And it's announced in the Slack channel, but there is a twice monthly community meeting, and that is a really, really great place for just an hour twice a month if you're interested in what's going to go in the next release and what are the current problems that the developers are thinking about and what are we looking at trying to incorporate into Apptainer for the future? That community meeting. And Dr. Dave announces that in the Slack channel because he runs that community meeting right now as well, so he announces that in the Slack channel. And that's a great place to go to just keep an eye on what's being developed and what's new in Apptainer.
Zane Hamilton:
Dave, is that also a place where people could go if they wanted to hear what things needed to be or where people were looking for help, what they need help on?
Dave Godlove:
Absolutely, yeah. Or where the developers need help too, so it's like we've got these changes that we'd like to see incorporated into Apptainer, but we just don't really have anybody to work on this stuff right now. I mean, that's the kind of thing that gets discussed quite frequently in those meetings.
Apptainer Bugs & Issues [48:02]
Zane Hamilton:
Thank you. All right. As a user, what issues have you come across? It's a good question for Brian and Forrest.
Forrest Burt:
I honestly can't speak to any specific experiences that I've had with bugs in Apptainer for the most part since I started using it. It's been pretty much rock solid for the use cases that I was using it for. Honestly, I've always had a great experience using Apptainer. It's been one of my favorite tools since it was Singularity. As soon as I found it, I started trying to make a lot more things containerized back in the day as far as my HPC software deployments went. So I would say I can't really think of anything too specific. It's been a rock solid experience for the most part.
Brian Phan:
For me, also, no real issues. More of just like a small pain point on just managing multiple files for different versions of the same software, but we can solve that with a little bit of templating, so yeah.
Zane Hamilton:
That's great. Thank you. And I see someone ask if we could post the Slack link to LinkedIn as well. Appreciate that. I think one of the other questions that was asked was for Brian and Forrest as well, what uses have you seen or what have you seen people using Apptainer for?
Forrest Burt:
So like I said, my original experience with Apptainer was using it to deploy software in an HPC environment. So we had a pretty standard compute cluster that you might find at most universities in America. A nice fifty, a hundred fifty, two hundred node cluster, something like that. I don't remember the exact count, but a nice mid-size cluster. Like I said, when I first started I was doing deployments using standard module files stacks and that type of thing. I found pretty quickly after I started looking into Apptainer that the ability to, for one, be able to build and rebuild a piece of software to do iterations on getting into build correctly as both having to constantly be deleting and recreating a build environment on the cluster. Honestly, that was one of the biggest things that I found at the time, not having to go and do this kind of CM shared apps, CM shared module files shuffle to give my user permission there and just to do that type of software deployment safely with that.
I think one of the most memorable things that I ever put into a container was a large stack of software for a bird research or an avian research agency called the Peregrine Fund. One of their researchers was doing large scale research into the movement of Eagles through North America. And so they were using a containerized environment I put together to do mass data analysis of that. And then we had another guy who was using that same containerized environment to do analysis of flight paths as birds were flying towards wind turbines. So you could try to come up with models of how to best time like turning off wind turbines so that groups of birds can pass by without being hit by them. Like I said, all that research was done out of a singularity container that I put together for them. And that is the coolest specific example that I can point to of something that I've seen deployed with Apptainer that I've personally done. But that's just one of many examples of other times where Apptainer proved to be the best option for deployment.
Brian Phan:
Yeah, for me very similar experiences to Forrest. I've mainly used Apptainer to get customers up and running as fast as possible on the HPC system. So this ranges from containerizing, maybe a single application to run like a physics simulation to maybe even like a suite of tools, for example, to run a bioinformatics application that calls multiple tools.
Getting Familiar With Code [52:17]
Zane Hamilton:
Thank you, Brian. Thank you, Forrest. Dave, I think you also wanted to give us a few tips and tricks here for getting familiar with code.
Dave Godlove:
Yeah, I wanted to do a little demo. Hopefully, hopefully people find this useful. Let me see if I can present. Once again, I always have trouble figuring out what screen to present. I got too many things going on here. I'll give you my coding background a little bit. My coding background is kind of silly in that I used to be like a scientific coding person, meaning that the majority of my coding background was done in an IDE, in an integrated development environment. Now people have mixed feelings about that. Some people like me really thrive on that and really like that.
And then some people think that that's a crutch and are not so hot on IDE's, but if you like an IDE and you're new to Apptainer and maybe you're new to Go and you want to get involved, but you don't really know where to start, I wrote a little blog post that came out yesterday in which I detailed the steps. So you could search like CIQ blogs, if you do that, you'll go to CIQ'S website and you'll be able to see our blog posts. And the most recent one that came out yesterday is this one about debugging Apptainer and actually other Go projects using Delve, which is the like the major Go Debugger and integrating that with something like VS code.
And so what you end up with is the ability to step through your code, line by line, set breakpoints, interrogate variables at runtime, and do stuff like that and kind of see what's going on. And so I just wanted to show you, so the steps to set this up are here in this blog post, I've already got this set up here on this machine. And so I just wanted to show you what that looks like and how you could use that if you're just starting off to get a good idea of what you should be looking at. So the way in which I've set this up, you basically run an Apptainer command at the terminal here, and then that command kind of pauses and waits for you, and then you can attach to that command using VS code. Let me show you what I mean. So I'm just going to go ahead and run a silly command. Just using the lol cow container, which is up on Docker hub. Oh, maybe I won't. I got a typo here. What's my typo?
Unable to handle the urI, maybe I'm not attached to the authorization required. All right, let me see something else that I've got that already works.
Here we go. Okay, so I've got a typo up here somewhere. I'm not sure exactly where it is. All right. So let's say that I wanted to debug that command. I want to step through and actually see how it runs. So I've got here an alias set up because I can never remember the entire command. And the alias is DB or debug dash app and it resolves to this entire long command. And so what it's going to do is it's going to start a delve debug server running headlessly, and listening on a particular port. And then it's going to end with these two things that say, okay, I'm done giving you options. And that's going to allow you to give this command whatever other options and arguments that would normally go to Apptainer. So after I've got this set up, this little command here is just going to replace my Apptainer command up above. Okay. So the way that that works is I would do DB app. Wow, install. Oh, okay. You know what, I'm sorry guys. Let me, that's not going to work right off the top of my head. Let me go off screen and try to figure out why that's not working really quick. I messed with my dot bash RC right before this and I think I messed some stuff up. Sorry about that.
Zane Hamilton:
It's always fun. Hope you made a backup.
Dave Godlove:
Yeah.
Zane Hamilton:
Eh, no. Speaking about BashRC, I had an interesting conversation yesterday where someone was trying to do some things in Bash and they were using Chat GPT to create their BashRC, it's fun to play with and try. Gave some interesting ideas. Forrest, you should try it.
Forrest Burt:
I think I have a terminal open in the GPT 4 at the moment just for the record.
Utilizing Apptainer in Different Environments [58:01]
Zane Hamilton:
Do some really involved syntax highlighting and spacing for Python. That was an interesting conversation. I still wish we could do this, where we could turn Dave's screen around again. That was still one of my favorite moments. That was so good. So Brian, in the university space, I know you've been spending quite a bit of time there lately. Have you seen them from a non-containerized environment? Have you seen them starting to adopt and really pick up and start looking for how can they start utilizing Apptainer in that environment?
Brian Phan:
Yeah, they have. So in the environment that I'm working with right now, they used to have a lot of software installed on an NFS share and we are currently working with them to containerize both some commercial applications and also some open source stuff as well.
Zane Hamilton:
How's that going with the commercial side of it? I know we've had several conversations around containerizing some of the commercial software and licensing issues. Are we starting to see as an industry that that's becoming something we can do a little easier, that vendors are getting a little more integrated into that type of environment?
Brian Phan:
I think it varies from vendor to vendor as of right now. And yeah that's how I see it.
Zane Hamilton:
Yeah, it's interesting whenever you start looking at places that do a per socket, per core, per host, it gets really interesting with containers. Yes, yes. Especially in something where it moves stuff around all the time. Is it going to work, Dave? Do we have any
other questions?
Dave Godlove:
Yeah, I'm getting there.
Zane Hamilton:
Alright.
Dave Godlove:
I could share again if that's useful.
Zane Hamilton:
Whatever you want to do. I could start asking Forrest other questions. It almost sounded like it was raining earlier, Forrest.
Forrest Burt:
It is here, it was hailing through my door earlier cause I need to fix the seal on it, but yes.
Zane Hamilton:
That is not cool.
Demo [1:00:24]
Dave Godlove:
All right, so yeah, so hopefully this will work this time. So I ran the same command that I ran previously, but I replaced it. Instead of Apptainer, I ran this DB dash app command and then all this nonsense scrolled by on my screen. But what it's doing is it's basically waiting now for me to connect so what I've done now is I've downloaded the Apptainer source code and I've got that in this repo and I've opened up this entire directory here. And within that directory you can see that I'm in this main entry point for Apptainer, the main package, this CLI dot go and I've set this break point here. And so what I can do now that I've actually, I'm here, is I can go ahead and press F five and that's going to drop me down into the code where I can actually interrogate and see what's going on.
Okay, so now I'm actually running here and so I can step in, I can step over, I can step out, I can do things like this. And so now I can actually start stepping through the code and see what happens. So the first function, which gets hit is this execute Apptainer function. And so I can step in and go through this, and I can see that this variable is set to ARGs and this variable ARGs is set to the following and these are the arguments that get input to Apptainer whenever I run it. And so you can step through the code using stuff like this and go through piece by piece and see what's going on.
I was going to demo it, but then I had this little hiccup and so I don't think I've got enough time right now, but I'll just go ahead and say a couple things. Number one, this is a little clunky to get set up, and there's a little bit of a hump to get over there. And so this isn't for everybody. Some people are going to be happier to just use Vim or something and just debug things with print statements and go through and look at things like that. But if this is your cup of tea, this can be a good way to get started with the code. But it's a little hard to set up.
There's a little bit of a hump to get over there, so unless you're going to really sit down for a little while and try to understand the code and devote some time to it, this is probably a little too much startup cost to get into. That's one thing. Another thing is, the way I just showed you, so this is the demo I was going to do, but I don't have time for now. But the way that I just showed you, starting at the beginning and then reading through the code, that'll work for smaller projects, but for Apptainer, that's probably not the way in which you want to familiarize yourself with the code I would think. I mean, there's a lot to Apptainer. If you just start at the beginning and try to work your way through, it's going to take you forever to try to figure out what's going on.
So I would suggest, say you're interested in the code that downloads containers from Docker hub for instance, but you don't really know where that code is, you don't really know how to get started. You don't really know how to look at it. Run Apptainer once with the dash dash debug option to give you a bunch of verbose output and find within that verbose output a message that indicates that the container's being downloaded from docker hub or whatever, as you're doing it, grep in the code for that message. And that'll give you the file that is important for that particular operation. And then you can go in and you can stick some breakpoints in that file, and you can run the same command again. You can pop right into that file and you can start looking all around and figuring out, okay, how do these variables get set?
What the stack as far as where am I at as far as what functions are being called? And from there, you can start to really interrogate that section of code and start to figure out how that works and if there's a bug in it, you can try to figure that out instead of going through the entire code. I feel like that's a really good way to get started as a developer and to just get your feet wet.
Zane Hamilton:
That's great. Thank you Dave. So we are actually up on time. Dave, I appreciate it. Thank you very much, Brian, Forrest, it's always great to see you. Thank you for joining the conversation. Join us again next week for a round table and then we will see what is coming the week after that. But thank you for the conversation. Thank you for watching. We will see you next time.
Forrest Burt:
Bye.
Transcript
[Music] foreign [Music] [Music] thank you [Music] foreign [Music] thank you [Music] foreign [Music] foreign [Music] foreign [Music] [Music] thank you good morning good afternoon and good evening wherever you are thank you for joining us the continuation of our container education series my name is Zane Hamilton the ciq we're focused on powering the next generation of software infrastructure leveraging the capabilities of cloud hyperscale and HPC from research to the Enterprise our customers rely on us for the ultimate Rocky Linux werewolf and obtainer support escalation we provide deep development capabilities and solutions all delivered in the collaborative Spirit of Open Source like I said we're actually going
to continue on with our container education series we have a great group of guides here to talk about it today I appreciate it pardon any background noise there's uh something going on behind me might be a little loud I hope you can't hear it and I'm sure you can now so I'll let you guys introduce yourselves and I will mute Brian hi everyone Brian fan here I'm a Solutions architect uh here at ciq backgrounds in HPC Administration architecture I've been a user of uh app tainer for a while but I have not had any had any experience developing uh developing The Tool uh so I'm
excited to learn from Dave today foreign everyone my name is Forrest Burt I'm an HPC systems engineer here at ciq I've been a long time obtainer user as well I used to use it to deploy workloads out for academic and National Lab researchers at my previous institution and use it for all kinds of stuff these days but much like Brian I've never been a developer of it either so I too am very excited to learn from Dave as to how that setup all works so awesome thank you and if you are not familiar with Dave if you are in the community I would be surprised
that you have not run across Dave before but Dave want to introduce yourself hey everybody um I'd like to start off by saying that I am not actually an apptainer developer but I have played one before on TV um yeah so uh yeah so uh my name is Dave godlove I've been around the appertainer community really since it started pretty much um I have been I have developed abtainer although it's not it's been a long time since I've been an active developer of abtainer really not since it was uh written in C and Bash um I've also been the release manager for apptainer for a
View full transcriptHide full transcript
while and and you know there kind of helped to manage development even though I wasn't one of the ones who was actively developing it so hopefully I can say a few things that are um you know interesting and and useful about the the community and uh the developers even though I'm not uh currently one of them yeah and you pretty much can't go through any of the documentation for app Tanner without running across something that Dave has written uh he seems to have written almost all of it I know as a community I know a lot of people do but Dave is definitely has his
fingerprint on a lot of things in that documentation for sure so Dave why don't you give us a little bit of background on the community and kind of where it came from where it is now how I got there just tell us the story yeah absolutely yeah we thought that we would um you know spend this time uh to talk a little bit about um you know not so much like developing you know containers or developing uh workflows and things like that but more developing aptainer itself because you know I mean this is a really um it's a great opening uh welcoming community and it's
a uh you know I think this is a great project if you're interested in getting into some sort of like um software development but you don't really know where to start I think this is a great project to kind of dive in because you know the community is so open and um kind of organic and everything but so yeah we you know um I guess it uh apptainer has been around in some form since you know for like six years or something like that at this point in time um and you know it used to be so uh you know Greg kind of started the
um the project uh when he was working at Lawrence Berkeley National Lab some time ago and he sent out some announcements um he created a slack Channel he created a website and people just sort of organically got involved and started to mess around with it and um you know I think that the project has really been organized mostly around GitHub has a lot a lot of projects are today and we've really used uh GitHub to great um to to uh to Great advantage to organize the community and organize the project and everything um so you know it was uh you know Singularity for a long
time and um the let's see I believe that the um you can still find the the repo I believe it's under HP CNG at this point in time but you can actually find the old apptainer repo which was renamed from singularity um and so you can go back on that all the way back you know basically every commit all the way back to the beginning of the project almost um and so now there is the way that the project is structured there are a group and unfortunately we couldn't get any of them to uh join today uh everybody's pretty busy but there are a group
of um people that are associated with the Linux steering committee and they are the ones that have Commit access to their repo um and so but you can you know um go to the apptainer uh you know repo and and um you know it's it's now just on GitHub it's apptainer slash apptainer and that's where the the code is and that's where you can get involved and raise issues and create PRS and do all that kind of stuff so Dave I know that it moved into the Linux Foundation but what has that done for updater what does it actually mean for the project how does
that help what view is it given it yeah so the Linux Foundation is now um you know an official uh sponsor an official host of the uh of the project um I myself am not one of the members of the steering committee um and I haven't been deeply involved in that so I can't speak about that in depth um you know maybe somebody else maybe forest or Brian can also comment on this as well but I I know that it it gives it um it you know we we're always looking for ways in which to sort of make sure that aptainer remains open source and
remains Community Driven and remains you know something which is not really dominated by any um you know like corporate entity or so on you know something like that and uh I think that helps us to be able to to make sure that that obtainer stays open source so have you seen growth in that Community since it's been moved over to the Linux Foundation have there been more people coming in to help actually do development documentation I mean I feel like there are a lot of there are already a lot of users of it but it seems like maybe there's been an uptick in that as
well is that something you've seen on the on the project side yeah I think so I mean I feel like for a while there when uh you know once again maybe somebody else can comment as well but for a while you know when I was watching I tend to kind of like watch issues and PRS and and um the different things that come into the the GitHub repo I don't um sometimes I just I don't really comment on them but I yeah I at least follow them and kind of you know lurk and watch them to some extent and I feel like for a while
there it was pretty much uh the same the same kinds of names I would see over and over and over again creating PRS and creating issues and stuff and I feel like recently I started to see a lot of new names and a lot of new faces um I don't know if the actual volume of issues nprs has increased and I think that that you know partially that's because uh you know we so apptainers gone through several different phases of development as like a big long ongoing project will and one of those you know one of those phases of development it went through was really
like you know we build out a whole list of different features that we wanted to add to apptainer and we just you know we um organized all those into different milestones for different releases and we you know this is when we had like a dedicated development team and we went through and we prioritized stuff and we just sort of started adding stuff and during that period of time obviously the number of PRS and issues was just huge the volume that was going through um obtainer is now kind of matured I believe as a project and um this could always change but you know right now
I think that the user base is probably and you know I'll let Brian Forrest maybe speak to this too I think the user base is probably um pretty happy with the feature set that app tainer has and so now we're more in a mode of just sort of trying to to make sure that we um we fix bugs and we keep things up to date as as you know things on the underlying system change um and things like that it's more of a maintenance kind of uh mindset versus like you know adding features kind of mindset so I don't think we've seen a really dramatic
uptake in in pull requests and uh issues but um definitely a lot of new faces um recently for the ones that we do have it's great Forest I saw you come off mute a minute ago oh um I was just gonna say uh with regards to the community um I'm sorry Dave this opinion this one what was the the question that you just alluded to us we were just talking about moving over to the Linux foundation and kind of what that looked like for the project itself yeah obtainer is a really really mature technology it's as Dave has been in development for quite a while
now so it's definitely at the moment um it's been deployed over like 20 000 or 25 000 sites worldwide so it's very well known just like Dave says it's at this point a very mature technology and it's kind of in a maintenance mode I'm just making sure that cbes are applied to and bugs are fixed there were some major developments not too long ago with bringing rootless capabilities to it which was pretty neat um but overall uh moving into the Linux Foundation was also meant to represent kind of the goal of being able to cross-pollinate with some of the other projects there and starting to
kind of see how aptainer can fit in with those because again it's a very mature technology and at this point a lot of the work there is on just maintaining it and making sure that it has the same level of quality for users of all levels then you needed of course it is I said Thank you Forrest still got noise behind me so Dave let's talk a little bit about the source code for the project in GitHub how is it structured I mean talk to us about that yeah so um let's see maybe I could just uh share a window really quick and just um
can we please just have it shared on your screen to a camera again yeah yeah let me let me do that um all right so I mean at this point in time I think most people uh you know in the scientific community and definitely in the development community and so on have probably um you know they're probably intimately familiar with GitHub and how it works and everything um the way that uh the the GitHub repo is structured here um so it used to be that there was um this is kind of a long time ago but it used to be that there was a main
um branch and then there was a development branch and then there were a bunch of tags and so the main the main branch was at that point in time it corresponded with um with the latest whatever the latest tag was was that what the same thing that you were supposed to get whenever you pulled Maine um we've since changed that so that Maine is development and I think that so this kind of you know it seems like a kind of a small change I think but um it was uh it took us some discussion to come to this it was kind of a a big
uh you know question mark as to whether or not we're going to do that and I think that the reason for that is because um GitHub is kind of serving multiple different purposes and multiple different communities here one of the um communities that it serves is obviously the Developers who write the code for apptainer but another Community historically that GitHub has served is the end users so GitHub was used not only as a as a place to develop code but also as a distribution platform and I think that um earlier in the project we were concerned that uh when end users downloaded you know GitHub
and get more generally um is kind of uh famous for being not always you know maybe uh having a having a hard learning curve right being a little bit harder especially for non-technical users to figure out and so I think that we were concerned that um you know some of our less technical users who just wanted to use the software might not realize that if they download and install Main um they're getting you know stuff that might not be stable it might be development stuff and so um we wanted them to be able to install the main branch uh and then have that stable since
you know this has been several years ago since then I think that you know there's other distribution methods that people are using like dnf and reposing things to install aptainer so I think that that concern is is a little bit um less of an issue now so anyhow there's the main repo and that's development um or the main branch and that's development and then we've got a couple of release branches here I think that so we're currently working on the 1.1 release Branch um you know there maybe we should have a 1.2 here as well I don't think there is a 1.2 release Branch but
there probably will be pretty soon um so and then 1.0 is probably deprecated because I don't think that we're we're currently uh you know working on 1.0 we might I don't know if there's some major bug fixes that went into 1.0 maybe we would back Port them um and then so these these branches here uh just have to do with some automated um some automated uh Bots that we have running in the background um and then tags this is how we do our releases so you know um each one of these tags corresponds to some release and of course you can also go over here
and you know see the releases so that's basically the way things are structured now and the way that um the way that it works is that whenever you know somebody creates a new pull request which is submerged it'll get merged I believe the way it's currently working so Dr Dave is the one who's currently pretty much running this so I'm I'm kind of guesstimating I I used to kind of run you know all this uh but you know for some time now he's he's kind of taking this over and he's been running um the releases and development and stuff but I think that the way
that it works currently is when you create a pull request uh it will you create that pull request against Main and it will get reviewed and um merged into Main and then we use cherry picking uh to um to pull that pull request uh just the commits from that pull request over here into I guess it would be the 1.1 release and get that ready so that we can you know we can release the next uh Point release here and so you'll see that this is just one 1.1 even though we're currently on 1.1.6 so the idea is that you know whatever the latest release
is that's that's this is what is going to be 1.1.7 in this case whenever 1.1.7 comes out but if you did mention one thing you were talking about bills going other places and people using dnf I know getting this into apple or extra packages for Enterprise Linux was a very important and big deal the doctor days spent a lot of time on it we really appreciate it but uh that changed installing this from an end user perspective for a lot of people I'm assuming can you explain that a little bit I know it's probably not the most complex of conversations but it's still good to
know yeah I mean it's um well it I mean there's there's a technical aspect of it and there's also kind of a like a social aspect of it and so uh that's that's a place where um you know Dr Dave has really had a major contribution for a long time um he has been the uh the long-running Apple maintainer um you know for for years now of the latest release of uh of app tainer um and previously singularity and um yeah I mean uh there's there's the hole just like trying to get it into the you know trying to package it as an RPM and
trying to do all all those types of things um but there's also um the issues of if you're gonna package it for Apple you can't just create an RPM and just you know that there's there's a there are a bunch of um conventions that you have to stick to and you have to kind of stay up to date on what's going on and you have to you know there's more to it so I said there's a social component to it and you know Dr Dave uh for people who don't know that's Dave Dykstra who works at fermilab um you know Dr Dave has kind of
stuck with that for a long time and has been in that community and has been a part of that and has has really you know stuck with that for um really for years and I think um more recently um I uh we have uh Yoshi akasen yoshiaki Senda um who works here at ciq who's another Solutions architect he's been packaging um he's been he's been working with packaging aptainer uh in um in apt in in as a as a Deb package so I'm not quite sure where that stands right now but I think that um you know he's he's also working with that and um
I don't know Brian Forrest do you know I mean is it what repo is that currently in because in PPA uh yeah but that's live now so you can at get um at thinner uh today if you wanted to and I think there's we also have a blog post out for that as well so yeah cool stuff surprised on that well maybe it's for day two I know sometimes packages in apple or in some of the other Debian ones they're behind significantly from what's in GitHub how quickly does this follow a release cycle from the time that it's and get to the time it's an
apple is there average time frame or I mean I know different things take different amounts of time but yeah I think the time frame is like a week maybe it's it's really uh it's really fast and I think that that I think we benefit greatly from having uh you know from from us being lucky enough to have Dr Dave both packaging this stuff um for apple and also being the release manager because he of course knows exactly you know when each new release comes out and what's in it uh I think the he he actually gets um gets the RPM into Apple pretty much like
within hours or less after the release actually happens but then there is a process by which uh users have to show basically I think that they're downloading and using and testing I think it's called karma within um within Apple but uh so it has to accrue you know has to accrue so much Karma before it's like it you know it it's it's said to be uh generally available for everybody but yeah that that usually happens pretty quick and that you know I think that's what that's why there's usually a small delay between the time um that uh Dr Dave puts in an apple and it
actually becomes available interesting thank you Dave so let's talk about raising issues so somebody's working with the tool how do they get involved and start raising issues yeah raising issues is super super easy and um you know once again if this is this is something that you know most people might know how to probably know how to do but just in case there's a few that don't or you know just if you're kind of new to the space or whatever um so yeah it's uh it's really easy to just go over so once again I was just at the main GitHub uh place and I
you know I just hit issues and went right over here and um so uh oh I gotta sign up for GitHub to do that um so basically you just click new issues you have to um you know I don't know if I want to sign in right here in front of everybody hold on I'm gonna say if you're gonna do that drop your screen yeah let me yeah thanks um it's all signed in real quick and then I'll show how you can create issues yeah maybe somebody else wants to uh comment a little bit while I try to figure out my username and password for
us have you submitted issues to snap Tanner never have myself um not you Brian uh I have not myself but there is an issue there that uh is a feature that I would like that has to do with um templating out uh definition files that which would make uh reusing your definition file for different versions of a software um easier to build yeah interesting so are you going to raise that one or do you want to ask ask whoever's watching to go do that for you well maybe I'll put in some PRS as well yes after after alerting everything from Dave oh yeah so the
thing that I wanted to highlight here is um oh and let me yeah cool thank you so the thing I wanted to highlight here is when you create a new issue um we have pre-populated so you can so this is all markdown so you can just you know you're right here and then this is what it ends up looking like we have pre-populated all uh all these different maybe it's easier so what version of apptainer you know what did you expect to happen what actually happened all this kind of stuff um I will say that some people basically just start off by deleting all this
and then just you know writing whatever um the thing that I wanted to highlight here is the ultimate goal of this issue if it's possible and it's not always possible because it's not always possible for us to replicate your environment but the ultimate goal of this issue is to give us enough information that we can take um this issue and we can run it locally and we can replicate whatever the the bug or the feature request or whatever it is that you're looking for so you know do do think about going ahead and filling in all these details about what's the operating system that you're
using and how did you install apptainer and you know what are the exact commands that you used to you know create this uh to create this bug or you know what what did you expect to happen or so on you know something like that so that's why I wanted to highlight there thank you Dave so I think the next topic we're going to talk about was PR's like going through that process yeah so um you know once again too if you're like already like a go developer or something this is probably pretty basic um but you know it's it's a little different for different projects
and so I just wanted to kind of go through uh the the the the steps of creating a pull request here and the steps of getting it reviewed and how that all works so um it might be a little bit different if you're used to working on a project uh you know where you've got um you've got the ability on the main repo to create a new Branch because here the first so if if you if you see a new feature you see a bug or something and you want to create a PR to address it the very first thing you want to do is
you want to Fork the repo um what that's going to do uh uh you know and it'll it'll ask you where do you want to Fork this thing to um I've already got a fork so I'm not going to do this but um so if you're you know part of multiple different organizations or whatever but you want to you you want to Fork this to a your private space and then once you've got that forked you can go over to yours your fork and you can um you can get clone that and then the next thing that you want to do which I always forget
is you want to create a branch on that you know locally on that um on that forked clone that you have and so then you're good to go you can go ahead and you know make whatever changes you want and then when you push that um you're going to push that to your fork and then through the GUI or whatever you can make a pull request from your fork directly back to um to Maine and so that's that's the process if you're new to all that if you're new to um GitHub in particular or if you're new to this project in particular you know it's
not like you just create a branch on the main repo and then you just uh you know do a pull request from that Branch to main because you don't have the ability to create a a branch on the main repo so you have to do that fork first and then create your PR from there another thing that like new developers you know just getting started um who don't maybe don't have a lot of experience maybe don't really realize like how do you how do you edit things how do you um so you know you're going to get a review and in that review you might
be asked to change a bunch of things within your code um if you just simply uh push more um commits directly to um to your fork the branch that you have set up in your local Fork then those will automatically go up and become part of the pr you know as you push them so you don't have to worry about like what's the process for making sure that my commits you know go from this uh forked uh Branch over to my PR that that syncing just kind of all happens automatically and there are I should show you too so whenever you so we got a
few different PRS open here let's see so whenever you um let me see this one here this one's not let's let's look at this one here so whenever you uh create a pull request uh we've got some you know we've got some continuous integration which runs in the background and it runs all these tests and that's another thing that you'll want to check out um the the um the tests do everything from like a bunch of you know basic uh like actual functional tests where they actually uh you know download containers in VMS that are you know running up on the cloud and do things
with them to just um linting your code and so one thing that you'll sometimes you'll you'll you'll find is that tests fail and it's just because whatever editor you were using um didn't have like a go linter installed and so because of that I mean there's stuff that still works but there's stuff that's not like you know like correct syntactically um doesn't look right and so this linter will catch that so sometimes you'll have things fail and you'll be if you're kind of new and you know you're just starting out that can be frustrating to not know you know what's going on and why things
failed and so uh you know just make sure that you're using a linter um another thing I think is that we are uh I think that uh the project now requires that you um verify your commits and so that's that's um that's another little gotcha that if you submit a PR and your commits aren't verified then you know you'll get nabbed by one of those tests there and you know it can be confusing and frustrating try to figure out what's going on so just make sure that you verify uh your commits and that there's a there's a pretty simple way to do that I can't
remember off the top of my head how to do that but I I was able to figure out pretty pretty quickly how to do that when I needed to um and then I I jumped into here real quick because if you do have tests that are failing um you know if you see something like this then you can just go in here and and and have a look and um you know it it can be kind of daunting at first to try to figure out what's going on but um you know uh I don't know if I'll be able to figure out what's going on
in this example but usually you can parse through this and you can you can figure out okay all these are running successful okay now here's the the part at which up Lent so this might be an issue where you know once again like I was talking about before the linter caught something which was not correct [Music] I'm unsure but yeah so this is the method of going through and figuring out you know if you've got something that's failing why it's failing and then you can you know get an idea of how to fix it so after all your tests passed another thing that has to
happen is you have to have a review um and those reviews are usually uh done by the folks that are on the Linux steering committee um so those would be the people like you know Dr Dave uh Ian kind of kenoshiro Cedric um you know other folks like that that can actually re do your review and I think actually anybody can review um but I don't know if those reviews actually count toward um like like making it so that you know so that this PR can be merged yet so that's something that if you want to get involved in um you can actually I think
that anybody can go and and review PRS so you could go here and if there's anything that that looks interesting to you you could go through and test it and check it out and you know look at it and then add your review to it thank you Dave so once you pass all the tests and once you pass reviews then you know you're uh PR will be merged hopefully let's talk about actually cutting a release how does a release manager actually go about cutting a release yeah so um the way that that's happening right now um so let's see if I can find the Milestones
um let me go back into the pull request for a second so we've got Milestones set up um and this is something that uh you know Dr Dave does um so right now we're targeting uh release 1.1.7 and 1.2.0 um we kind of follow semantic versioning uh to an extent but not com completely and so the the micro release here like the 0.7 here um that's going to denote uh it should denote bug fixes and changes that don't change um the behavior so changes that don't change things having to do with the CLI or you know anything that the the user is going to touch
the minor version here so the point one here or the 0.2 here those are going to denote things that you know might change Behavior as far as the user is concerned so like you know you might have a flag that you were using or an option or an argument um that uh that you know Works in a previous release that's going to change in this new release and historically we have not changed um the major version version release unless um the the actual format changes so usually that's been and that and that's why I say that we don't we kind of follow semantic uh versioning
but not necessarily exactly so uh in the past we've changed that um because the you know we we went from using ext3 images to Sif images and we also had like a major code rewrite where we went from C and Bash to go and so that's when we went to um and when with Singularity when we went to 2.0 um but so so the release manager then can put together these Milestones these Milestones have uh you know a list of uh different uh PRS that we expect to be merge or issues that we expect to be um fixed before the next release is is cut
um and then what the you know what they'll do is they'll kind of go and this will this could change um and a lot of times as the the release becomes nearer and nearer you'll see that people are like they sort of start to clamor um for uh PRS and features and things that they really like to be added in and that can become that can become difficult because um sometimes I don't know how how much we're doing it now but sometimes you'll release a release candidate and the idea behind a release candidate is that okay we're now freezing development we're not going to add
any new features this candidate is you know what we expect to release ultimately to be and we're going to release the release candidate and we're going to expect the community to install that and test it and see if it's got any bugs basically see if see if it's got any um issues that we're not we couldn't catch via automated testing and so at that stage sometimes you'll see that people are like oh no but there's a there's this new feature that I really really want to put in and it's like well you know I'm sorry but technically we need to wait until the release you
know until the next actual release because otherwise we have to put out another release candidate and we have to start the whole Community testing again and you know the communities only got so much testing in them you know sometimes you get more or less testing out of a release candidate so um I think what we've moved to now especially since the project has become a bit more stable is um the actual releases themselves uh you know those are those are what goes out because we don't expect there to be uh as many huge breaking changes or bugs or whatever in the releases themselves and so
I think we're getting away from release candidates to some extent but the flip side of that is that we might have more uh micro releases right so you might have a bug in a in a particular micro release and you know that's okay and uh so you might do another one to take care of that and so then the actual you know process of doing a release itself is you know just making sure that all the all the changes are in they've all been you know cherry-picked inappropriately sometimes when you cherry pick a a set of PRS in you get um you know basically what
you're doing is you're taking a set of commits that were made for one branch and you're pulling them out and you're kind of messing with the history and pulling them out and putting them into another branch and because of that you can get conflicts you can get like the same file was was you know changed between these two branches and then you're trying to add more changes to that and so those have to be manually resolved somebody has to go through and actually look at that stuff and figure out um you know what what's going to work and what makes sense and um it used
to be that uh the release manager basically me at that point in time would do all the Cherry picks for the release myself and then if there was anything that I could not figure out how to resolve on my own I would go and contact hopefully the developer who actually created that PR or one of the other developers and sit down with them and try to figure out was the proper thing to do now I think that the way we've instituted it is it's incumbent upon the person who created the pr to do the cherry pick and that's good because they're usually in the best
position to be able to um you know look at look at the way the code has changed and figure out the best way to resolve any conflicts so anyway the release manager will go through and make sure that all that stuff has been resolved properly and is all in there the way it ought to be um they will there's a few little housekeeping things that they have to do they've got to bump the version number and a few different files make sure the change log is up to date uh and then basically just uh create a new tag cut the new release and um document
all the stuff on the releases page as to you know what's changed and everything there's usually a little bit of um a few emails that have to go out a few announcements that have to go in different places and then I I don't know if we're currently doing this but it's a good practice afterward to take that release branch and merge that back into main so for what you've been doing is you've been taking everything from Maine and you've been you know copying that uh as needed into the release Branch you might have some changes that ended up in the release Branch um you know
through resolving conflicts and doing stuff like that that you ultimately want to go back into Maine so that you can keep those two as synced up as possible as development continues so that's that's the last thing they'll usually do to be normal thank you Dave I think we had a few questions that got thrown up before we move on to the next topic um why you got to give away give Hub window open day can you show us the get involved with development part yeah certainly yeah so that's um so you know once again one of the things that you can do is you can
go over here to um to the issues um and you can create new issues or I mean you can just you can just hang out and kind of read through these issues this is a great place to uh you know people sometimes people have issues that are actually bugs that are actually things that need to be um changed in the code in order to work properly but sometimes people just need help right they just need this is a place where people go to get uh support and so this is a great way to get yourself um more familiar uh with the project at a higher
level because you know it's one thing to just use it for your own purposes and to fix problems that you have it's a totally other thing to you know try to get into somebody else's headspace and figure out their environment and look at what they're using it for and you learn a lot by going through you know issues and trying to figure this stuff out um and another place like I said you can go through these pull requests and you can sort of you know uh look at um you know what looks good and what doesn't you can review the code if that's something that
you're interested in in getting into um if you want to start writing code for apptainer then a great place to start off is by reviewing um you know PRS and having a look at them and seeing what codes what code changes so yeah this is a way that you can get involved um another great way to get involved is to join the uh the slack channel so uh apptainer has a slack Channel I can let's see I think we've already posted a link if I I saw it correctly I think for us put it out there oh cool thanks Forrest yeah it's out there yeah
so that's another great place that you can get involved is just sort of you know watching what's going on in slack and helping helping people out when they need it asking questions that kind of stuff oh and um there's also a it's announced in the slack Channel but there is a twice monthly community meeting and that is a really really great place you know for just an hour uh twice a month if you're interested in like you know what's going to go in the next release and what are the current um problems that the developers are thinking about and what are we looking at trying
to incorporate into apptainer for the future that uh that community meeting and you know Dr Dave announces that in the slack Channel um because he he runs that community meeting right now as well so he announces that in the slack channel uh and that's a great place to go to just kind of keep an eye on you know what's being developed and what's new in apptainer Dave is that also a place where people could go if they wanted to hear what things needed to be or where people were looking for help what Dave needed help on absolutely yeah or um where the developers need help
too so it's like we've got uh you know these changes that we'd like to see incorporated into abtainer but we just don't really have anybody to work on this stuff right now I mean that's the kind of thing that that gets discussed quite frequently in those meetings thank you all right as a user what issues have you come across it's a good question for Brian in Forrest um I honestly can't speak to any specific experiences that I've had with bugs in obtainer for the most part since I started using it it's been pretty much Rock Solid for the use cases that I was using it
for um I you know honestly I've always had a great experience using obtainer it's been one of my favorite tools since it was Singularity I um as soon as I found it started trying the you know make a lot more things containerized back in the day as far as my HBC soccer deployments one um so I would say uh you can't really think of anything too specific it's um it's been a rock salt experience for the most part for me also no real no real issues more of just like a small pain point on just managing multiple files for different versions of the same software
but uh you know we can we can solve that with a little bit of templating so yeah that's great thank you and I see someone asked if we could post the slack link into LinkedIn as well appreciate that I think one of the other questions that was asked was for Brian Forrest as well what uses have you seen or what have you seen people using apptainer for um so like I said my original experience without Tanner was using it to deploy software in an HBC environment so we had a pretty standard compute cluster that you might find that most universities in America a nice um
you know 50 150 200 node cluster or something like that I don't remember the exact account but a nice mid-size cluster um like I said when I first started I was doing deployments using kind of standard module files stacks and that type of thing I found pretty quickly after I started looking into the obtainer that the ability to for one be able to build and rebuild a piece of software to kind of do iterations on getting it to build correctly um it's both happened to constantly be deleting and kind of recreating a build environment on the cluster being able to um honestly that was one
of the biggest things that I found at the time not having to go and you know do this kind of you know CM shared apps CM shared module files Shuffle um to give my user uh you know permission there and you know just to do that type of software deployment safely with that um I think one of the most memorable things that I ever put into a container was a large stack of software for a bird research or an avian research agency called the Peregrine fund um one of the researchers was doing large-scale research into the um movement of eagles through North America and so
they were using a containerized environment built together to do kind of mass data analysis of that and then we had another guy who was using that same containerized environment to to do analysis of flight paths as birds were flying towards wind turbines so you could try to come up with models of um how to best time like turning off wind turbines so that groups of birds can pass by without being hit by them um like I said all that research was done out of a singularity container that I put together for them and that is the coolest specific example um I point to something that
uh I've seen deployed without painter that I've personally done but that's just one of many examples of other times where um obtainer proved to be the best option for deployment yeah for me uh very similar experiences to Forest uh mainly used uh apptainer to get customers up and running as fast as possible on the HPC system so this ranges from containerizing maybe a single application to run like a physics simulation to maybe to even like a suite of tools for example to run a bioinformatics application that calls multiple tools foreign thank you for us Dave I think you also wanted to give us a few
tips and tricks here for getting familiar with code yeah well this is just um yeah so uh I wanted to do a a little demo um this is maybe kind of I don't know hopefully hopefully people find this useful um let me see if I can present it once again I always have trouble figuring out what screen to present I got too many stuff too many things going on here okay so if you're like me um you know so so I'll give you my background a little bit of my coding background my coding background is kind of silly in that uh I used to be
like a scientific coding person meaning that the majority of my my coding background was done uh in an IDE in an integrated development environment now people have mixed feelings about that some people you know like me um really thrive on that and really like that and then some people kind of you know think that that's a crutch and are not so hot on uh Ides but if you like an IDE and you're new to obtainer and maybe you're new to go and you want to get um involved but you don't really know where to start uh I I wrote a little blog post um that
came out yesterday in which I detailed the steps so if I do like so you could search like ciq blogs if you do that you'll go to ciq's website and you'll be able to see um our blog posts and the most recent one that came out yesterday is this one about uh debugging obtainer and actually other other go projects using delve which is the like um the major uh go debugger and also integrating that with something like vs code and so what you end up with is the ability to like step through your code line by line set break points interrogate variables at runtime and
do stuff like that and kind of see what's going on and so I just wanted to show you so the steps to set this up are here in this blog post I've already got this set up here on this um machine and so I just want to kind of show you what that looks like and how you could use that if you're just starting off to get a good idea of what you should be looking at um so the way in which I've set this up you basically run an apptainer command at the terminal here and then that command um kind of pauses and waits
for you and then you can attach to that command using vs code let me show you what I mean so I'm just going to go ahead and run a silly command um just using you know the uh LOL Cal container which is up on Docker hub maybe I won't um I got a typo here what's my typo unable to handle the URL maybe I'm not attached to the authorization report all right let me see something else that I've got that already works there we go okay so I've got a typo up here somewhere I'm not sure exactly what it is all right um so let's
say that I wanted to debug that command I want to step through and actually see how it runs um so I've got here an alias set up because I can never remember the entire command um and the Alias is DB or debug uh Dash app and it it resolves to this entire long command and so what it's going to do is it's going to start a delve um debug server running headlessly and listening on a particular port um and then it's going to end with these two things that say okay I'm done giving you options and that's going to allow you to to give this
command uh whatever other options and arguments that would normally go to apptainer so after I've got this set up this little command here is just going to replace is just going to replace my aptainer command up above Okay so the way that that works is I would do DB app I'll install okay you know what I'm sorry guys um let me that's not going to work hard off the top of my head let me um uh go off screen and try to figure out why that's not working really quick I messed with my um I mess with my bash RC right before this and I
think I messed some stuff up sorry about that it's always fun I hope you made a backup yeah no it's been about bash RC I had an interesting conversation yesterday where someone was trying to do some things in bash and they were using chat GPT to create their bash RC it was kind of fun to play with and try gave some interesting ideas for it you should try it I uh I think have a terminal opening the gpt4 at the moment just for the record so on Deck I don't know it really would involved syntax highlight syntax highlighting and spacing for python it was an
interesting conversation I still wish we could do this where we could turn Dave's screen around again that was still one of my favorite moments that's so good so Brian of the University space I know you've been spending quite a bit of time there lately have you seen them from a non-containerized environment have you seen them starting to adopt and really kind of pick up and start looking for how can they start utilizing out here in that environment uh yeah yeah they have uh so in the environment that I'm working with right now they used to have a lot of software installed just on an NFS
share and uh we are we're currently working with them to contain our eyes both some commercial applications and also some open source stuff as well how's it going with the commercial side of it I know we've had several conversations around containerizing some of the commercial software and Licensing issues are we starting to see as an industry that that's becoming something we can do a little easier the vendors are getting a little more integrated into that type of environment um I think it varies from vendor to vendor uh as as of right now um and yeah yeah that's that's kind of how I see it um
yeah that's it's interesting whatever you start looking at places that do a per socket per core per host it gets really interesting with containers yes yes especially in something where it moves stuff around all the time is it going to work Dave do we have any other questions that'd be great um yeah I'm getting there so we could um I could share again if that's uh useful whatever you want to do I can start asking Force other questions like it almost sounded like it was raining earlier at forests it is here it was uh hailing through my door earlier because I need to fix this
seal on it but yes that is not cool all right so yeah so hopefully this will work this time so um so what this is going to do it's gonna so I ran the same command that I ran previously but I I replaced it instead of obtainer I Ran this uh DB Dash app command and then you know all those nonsense scroll by on my screen but what it's doing is it's it's basically waiting now for me to connect so I can go over here to my um so when what I've done now is I've so I've downloaded the app tainer um source code and
I've got that in this repo and I've opened up this entire directory here and within that directory um you can see that I'm in this it's it's just like the main entry point for apptainer the main package this uh cli.go and I've set this break point here and so what I can do now um that I've actually you know I'm here um is I can uh go ahead and press F5 and that's going to drop me down into the code where I can actually interrogate and see what's going on okay so now I'm I'm actually running here and so I can you know I can
step in I can step over I can step out I can do things like this and so now I can actually start stepping through the code and see what happens the first function which gets hit is this execute obtainer function um and so I can step in and and go through his and I can see that um you know this this uh variable is set to args this variable args is set to the following you know and this is the arguments that that get input uh to apptain or whenever I run it and so you can you can step through the code using stuff like
this and you know go through um you know piece by piece and and kind of see uh you know you know what's going on I was going to demo it but then I had this little hiccup and so I don't think I've got enough time right now but I'll just go ahead and and kind of say um the source code so okay so a couple things number one this is a little clunky to get set up once you get it and so there's a little bit of a hump to get over there and so this isn't for everybody some people are going to be you
know happier to just use them or something and just debug things with print statements and go through and look at things like that but if this is your cup of tea this can be a you know a good way to get started um with the code um but there is a little bit of it's a little hard to set up there's a little bit of a hump to get over there so you know unless you're going to really sit down for a little while and kind of try to understand the code and devote some time to it um you know this is this is probably
a little too much startup cost to get into that's one thing another thing is the way I just showed you so this was the demo I was going to do but I don't have time for now but the way that I just showed you um starting at the beginning and then reading through the code um that that'll work for smaller projects but for apptainer that's probably not the way in which you want to familiarize yourself with the code I would think I mean that there's a lot to apptainer if you just start at the beginning and try to work your way through it's going to
take you forever to try to figure out what's going on so I would suggest um if you're interested in a particular so say you're interested in the code that that downloads containers from Docker hub for instance but you don't really know where that code is you don't really know how to get started you don't really know how to look at it run apptainer once with the dash dash debug option to give you a bunch of verbose output and find within that verbose output a message that indicates that there that the container is being downloaded from Docker Hub or whatever as as you're doing it grep
in the code for that message and that'll give you the file that is important you know for that particular operation and then you can go in and you can stick some break points in that file and you can run the same command again you can pop right into that file and you can start looking all around and figuring out okay how do these variables get set what's the stack as far as you know where am I at where am I at as far as you know what functions are being called and and from there you can start to really interrogate that section of code and
start to you know figure out how that works and if there's a bug in it you can you know try to figure that out instead of going through the entire code I feel like that's a really good way to get started as a developer and to just kind of you know get your feet wet that's great thank you Dave so we are actually up on time Dave I appreciate it thank you very much Brian Forrest it's always great to see you thank you for joining the conversation uh join us again next week for a round table and then we will see what is coming the
week after that but thank you for the conversation thank you for watching we will see you next time bye everyone [Music]
Built for scale. Chosen by the world’s best.
2.75M+
Rocky Linux instances
Being used world wide
90%
Of fortune 100 companies
Use CIQ supported technologies
250k
Avg. monthly downloads
Rocky Linux
Have questions about your infrastructure?
Talk to a CIQ engineer about Rocky Linux, HPC, and AI infrastructure.