- MCP server with stdio transport for local use - Search episodes, transcripts, hosts, and series - 4,511 episodes with metadata and transcripts - Data loader with in-memory JSON storage 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
193 lines
17 KiB
Plaintext
193 lines
17 KiB
Plaintext
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
|