Episode: 3511 Title: HPR3511: Podman like Vagrant Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr3511/hpr3511.mp3 Transcribed: 2025-10-25 00:45:34 --- This is Haka Public Radio episode 3,511 for Monday the 17th of January 2022. Today's show is entitled, Potomans-like Vagrant and is part of the series, Virtualization. It is hosted by Klaatu and is about 19 minutes long and carries a clean flag. The summary is, this is how I use Potomans on the first top. Hey everyone, this is Klaatu. Remember back in episode 1522 how I talked about docker and Linux containers? That was a long time ago and lately I've been using podman, which is a demonless container engine. A lot like docker in that its command structure is exactly like docker. It can be a drop-in replacement for docker. So I've been using that quite a lot and I also quite like the licensing of podman. It's a lot clearer and I feel like it's a lot more stable like the licensing policy than docker. Docker has always confused me in terms of what's open source, what's not open source, what's mobi, what's docker, kind of difficult to be sure. So podman doesn't really have that confusion. Podman is an open source project. That's what it is. You don't have to navigate any exceptions or swarms or anything that you're not clear about. So podman has been really nice for me and lately the reason I've been using it a lot is because Vagrant kind of fell over for me or I shouldn't say that. Vagrant didn't fall over. The platform upon which I am running Vagrant and Vagrant itself have decided to disagree. It's something to do with the local SSL library that Vagrant ships with their distribute with the package that they that they provide which normally I would just ignore but I want to use typically a libvert plugin with Vagrant and so I have to use the current hashy core version of Vagrant in order for that plugin to work but there's a conflict with my system SSL versus Vagrant SSL or Ruby rather that Vagrant uses. So and that's the embedded Ruby in the Vagrant package rather than the Ruby on my system. So there's a lot of kind of local things that Vagrant apparently does that if you get it onto the wrong system it just won't work because they did like this sort of partial almost all there but not quite all their distribution of the application. So I guess it is Vagrant's fault actually. And I had been using Vagrant to fire up quick virtual machines to just run a test you know like if I don't know how something works on say Debian but I want to see you know I don't want to compare how it works on my Fedora machine then then I would just use Vagrant to grab a Debian image a Debian box I guess in Vagrant terms and then and then drop into a Debian terminal it's pretty quick because it's very minimal it was one of the nice features about Vagrant and that just hasn't been working lately. So I spent a day trying to fix the the Vagrant issue but I I finally decided after wasting a day on it that it was not worth it and that what this really was was a note for me to start using containers for stuff other than Kubernetes like actually just start using desktop containers which I kind of started doing anyway with Fedora Silver Blue in a way so I felt like containers were probably the right and the easy answer so here's what I do here's the workflow with podman I mean it's really just a question of workflow podman more or less and Linux containers I mean if you're used to them then they probably are already working for you if you're not though podman actually is a really easy entry point into actually useful containers because it is an interesting quirk of containers that if you're not running a server with a bunch of what would have been normally virtual machines running on that server then you probably haven't replaced those virtual machines with or you probably have replaced those virtual machines or you may have replaced them with with containers but if you're not doing that if you're not running a server then containers you know for a desktop user they're quite possibly just not useful so I mean certainly for me as a desktop user like the the thing I would use virtual machines for was when some new distribution came out and I just couldn't couldn't stand to not see what its desktop library desktop wallpaper was so I would fire up a virtual machine install the the distro go through the install steps just to kind of get a feel for what they're doing for their install and look at the wallpaper and then close the the virtual machine and never reopen it again containers doesn't it doesn't generally unless you go to a lot of trouble they don't give you that sort of satisfaction so you're you're probably just running a minimal environment in a container and why do you do that as a desktop user I mean you've got a you've got an environment it's your terminal you don't need a container for this so containers kind of I think are a little bit that they kind of languish on on on a lot of desktop users desktops because you just don't use them but podman and a minimal container it can actually be apparently really useful for like I say if you if you just want to compare hey does this does this thing work also on this other distro that I'm not running well a container can tell you that or if you want to try something that could potentially be rather destructive to your actual system then you could fire up a container and do your crazy experiment in that container maybe mess it up who cares doesn't matter when you close it it's going to be gone anyway or maybe it'll work and now you've confirmed that the crazy experiment that you want to try indeed does does function so couple of different steps one is to install podman gotta do that first second one is to configure podman and then the third step is of course to to run a container and and do something in it to actually put it to use so the first first step installing podman that's easy if you're on fedora or sentos or rel or whatever podman's probably already there to be honest other distributions magia something like that you might have to do like a pseudo DNF install podman on debian or Ubuntu apt to get no not apt to get apt pseudo apt install neither there's a cadence there just forgot to start with pseudo pseudo apt install podman I don't know if you have to add a repository for that these days or not but it's it's a pretty quick install like I say podman is open source so there's no weird then people don't have to hide it away in some offshore repository it's just it's just a container engine that's open source so grab that from your repository and now you need to configure it you can try to see if it gets auto configured correctly by just running podman space run space dash it space busy box that is the podman well the podman runs dash it is the podman and docker command to run a container and to open a an interactive terminal or an interactive prompt into that container if you if you don't have the dash it then you'll run a container the container detects that it has nothing to do and it closes immediately so that's not very useful so podman space run space dash it is kind of the incantation you'll want to remember the the busy box there at the end just says for tells podman to reference its little list of short names and to resolve busy box busy box is a common enough container that it lives on several different container registries online and podman is it is able to reference that short name discover valid busy box image out there on the internet and it'll pull it down very quickly it's a very small container and and it'll run it for you so you'll be dropped into a little root prompt in a busy box container you type in exit to leave that container but you now know that podman does indeed work if that does not work and I'd say there's a good 50 to 70% chance that that doesn't work then you need to add some additional UIDs and GIDs group IDs to your user so naturally generally the way users are created on on Linux you get one UID and and that is the one that you've been assigned usually by default when creating your account so usually it's like a thousand but I mean maybe you maybe you put in your own UID whatever it is it's an UID it's one UID so you need more for podman because podman is going to want to run a bunch of things that as a user you normally don't launch yourself so to do that you can do pseudo space user mod space dash dash add dash sub UIDs and I usually start at 200,000 so 200,000-265536 there's some reason that's 65,536 is sort of a not a magical number but it's a magical number it's it's there's some significance to that number I forget what it is and it hasn't really annoyed me enough to actually look it up but it's some upper limit of some attribute probably a syscuddle thing anyway space dash dash add dash sub GIDs 200,000-265-536 space your user ID so or your your user name sorry clatu or whatever your user name is so that pseudo user mod dash dash add sub UIDs 200,000-265-536 space dash dash add sub GIDs 200,000-265-536 space clatu you do that and what that actually does is add and it adds an entry to slash Etsy slash sub UID and slash Etsy slash sub GID with essentially the starting number 200,000 and then the upper limit which is 65,536 so yeah you can actually just if you wanted to you could just edit that file cat Etsy sub UID yeah so clatu colon 200,000, colon 65,536 just colon separated values with user name starting point upper limit and do that slash Etsy sub UID and slash Etsy sub GID either way once those once that has been established then you can either reboot or log out and log back in whatever gives you confidence that the the modifications to your user have been have been integrated and then you can finally use really use pod man and again the quickest easiest test for that is just pod man space run space dash IT space busy box if you get a prompt a little root prompt in a busy box environment and then you know that you're you're you're good you're gold so you again type exit if you got yourself there so that you're back out into your normal environment and we've now done two of the three steps so one was get pod man two was configure pod man three is run it run run pod man and i mean technically you've already done that but i'm going to talk about how i do it because it is a little bit not different but i mean it's specific it is specific to to the sort of the use case that i'm describing here so what i do is i do pod man pod man space run space dash IT no actually you know what first i'm going to do this pod man search devian and that looks all over the internet so a couple of different known container registries like docker and key.io and fedora project. something or another couple of them out there that searches all those for an image called devian and the top hit here which i'll just accept is docker.io slash library slash a slash devian and i don't know version of devian it doesn't really say but it doesn't matter for this for this example so what i'm going to do here is i'm going to make a directory in my current i'm i'm in a minifolder that i call pod scratch p-o-d-s-c-r-a-t-c-h because it's just kind of a scratch area for my pod man activities and i'm going to make a directory here called data d-a-t-a it's an empty directory and you'll see why in a moment and then i'm going to do pod man space run space slash it space space volume dot slash data colon slash storage colon capital Z or Z space and then what was it docker.io slash library slash devian so i'm running that command and what that is is doing while i'll talk while it's pulling down the devian image what that does is it the dash dash volume at your option looks it finds my local data directory which i just because i told it to dot slash data that's that's that directory and then colon slash storage so what that does is tell it tells pod man to create a slash storage directory in the container that i'm running and to mirror that directory locally in the data directory so i just made that data directory so i know that it's empty devian has now been pulled down so i'm i'm i'm now sitting at a root prompt in a container with a randomized or a pseudo randomized name and i could do an ls i could do an ls no i don't enough to do that yep just ls and there i see there is a storage directory here at the root of my container environment so i'm going to do a touch hello no not touch hello i'm going to do a touch storage hello and then i'm going to i guess exit because that mean that was it that was running pod man um but now if i if i look in my data directory which previously was empty so this is my local environment i have a data directory that i just made before running pod man there's a hello file in that data directory now and and that's only there because i associated my local data directory with the storage container in my with the storage directory in my container the colon z at the end the capital z that is for se linux it makes it ensures that the file contexts are adjusted to allow the container to put data into a local directory outside of its own namespace normally this should never happen but the colon capital z ensures that all the permissions are adjusted automatically for me so that's how i run my my my containers as if though they were virtual machines and because of that little portal that volume portal i can i can put in i can put files in in data and then grab them from my container so for instance i'll touch fubar in the data directory so touch data fubar and then i'm going to just i'm going to run the same command again pod man run it dash it dash dash volume dot slash data colon slash storage colon or i could even call it um set a storage i'll call it penguin colon capital z docker.io library devian okay instantly i get my root prompt at some random looking host name i do an ls and this time instead of a storage directory there's a penguin directory let's look in the penguin directory this time instead of just hold well previously there was nothing now there's a fubar file and a hello file confirming once again that that that data location is completely shared between the container and the local host so i'm going to type exit again the container is destroyed if i generated any data outside of the storage directory in that container it would be it's gone now i guess i can demonstrate that really quick so if i do a pod man run it volume data blah then here i am in in a new container i'll touch a file called hacker public radio so now i've got a big empty file in the root of my container called hacker public radio i'll do an exit looking data just to make sure i didn't accidentally put it there i didn't it's fubar hello is still just in there run pod man again i get yet a new container new host name i do an ls there's a penguin directory but there's no hacker public radio directory because of course that was destroyed along with the container after i typed exit so this is a great way like if you're if if you do any kind of testing on on more than one distribution pod man is a great way to get admittedly minimal environment of that of that container of that distribution running unique as a container you can interact with it in a couple of different ways i say a couple of ways just meaning you could run it and do some stuff or you could run it with that little data that volume option and that way you have a sort of a data portal between your local host and the container but i mean there's also i mean there's lots of languages out there that talk to pod man you know there are modules for python and others i'm just kind of making stuff up now i mean i'm sure there are others java i know java python and there's probably a oh ruby there's definitely a ruby whatever they call it a gem for pod man so yeah there are lots of different ways that you could interact with this this environment with this container and yeah for my for my money of zero dollars it's been fantastic i mean it's it has made that sort of like that just that quick impulse of like does this command work exactly the same way on debian oh yes it does okay cool exit never think about it again until i have that question again fire up the container and it's just so quick it's it's actually i would i would have to say it's easier than than my old vagrant workflow so that's pod man for your desktop maybe if if that's the kind of things that you do on your desktop that is i would say that has been the first sort of real like desktop-y kind of use case that i've had for a container so far like that's that's really been aside from just i guess i guess you could argue making a little virtual network and you know kind of routing things in your virtual network that's that's a desktop activity as well but this this feels very desktop-y like like it could just be something as simple as you're writing a shell script and you're just not 100% sure whether this location that's on your machine it would also exist by default on a debian machine or something like that then container it's there you can check and then it's gone easy quick convenient light wait give it a shot i think you might like it thanks for listening i'll talk to you next time you've been listening to hacker public radio at hackerpublicradio.org today's show was contributed by an hbr listener like yourself if you ever thought of recording a podcast then click on our contributing to find out how easy it really is hosting for hbr this kindly provided by an honesthost.com the internet archive and our sync.net unless otherwise stated today's show is released under creative comments, attribution, share like 3.0 license