Configuring Network File System (NFS) on Linux | Into the Terminal 97

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
[Music] hey there and welcome to into of the terminal on today's episode we're going to be unleashing NFS by doing some NFS stuff unleashing I didn't realize it was on a leash to begin with Unleashed it is so we'll jump right I got our client and server for NFS um so what we're looking at is my server system and I can switch to my client over here by just clicking the uh the top tab all right nicely they say both client and server and the first thing I'm going to start off with is I'm going to install the software that we need for NFS so the package I want is called NFS utils and I'm I'm going to do that on both the client and the server uh because it turns out that the NFS utils package contains both the server side software and the client side tools that I need for working with NFS all right uh so got installed on both places so let me go ahead and make a directory that I want to share with NFS so I'm just to create a directory called Mount extra and uh there it is uh so we could put files here and everything be fine it's a regular directory but we want to share this directory through NFS so I'm going to create an entry in my Etsy exports file so with NFS you're taking your file share and you're exporting them so that other people can use them on their system and the format of um ety exorts looks like this so you tell it the directory that you want to share via NFS the people you want to share it to and then maybe some options and we're going to get into much more on options and access controls after the break so for right now we're going to share this to everyone that happens to be able to connect to my machine um and we're going to share to them a read write so they can place files here as well as read files out of it and then sync means that when an update occurs on either the uh any client it will synchronously publish that update to the files that reside on the server all right so now I've got my configuration file of the directory I want to share next thing I need to do is start up the service so we're gonna server so you confus yourself by saying service server is a service and it probably ends in do service if you were to look at system D indeed uh and we'll just take a look to make sure that it's running so we're active that's good so at this point um the NFS server is configured and it's sharing that one directory of content to any client that happens to connect to it so then the flip side that we need to talk about is the client side config so I'm going to go over here to my client remember I earlier installed NFS utils on it uh and we are going to use a command called showmount showmount will show you data from uh an NFS server d e says show me the exports from the NFS server and so I'm going to I happen to know my NFS server IP I could also use its host name if I had a host name um and this is what that server is currently sharing so sharing Mount extra to any client that connects and so I can go ahead and mount that let's make a mount Point first that uh so amount point is just a directory in your file system hierarchy where you want to attach a device and so sometimes you attach things like diss or disk partitions logical volumes in this case we're going to attach an NFS melted export all right so the device that we're going to mount is this remote server and its share Mount extra and we're going to put that on our local machine at that SL NFS directory I just created right and we can make sure that that is correct by looking at Mount and we can see down here at the bottom of my list there you go that yeah this remote server Mount extra is mounted on/ NFS it's a type nfsv4 and then there's a bunch of options and again we'll get into a little bit more detail on options after the transition all right so Nate there's one last thing we got to do we've got the server sharing the file system we got the client mount on the file system but uh we got to do one more thing I mean you've mounted it but you haven't actually written anything to it is that is that what you mean yeah that's what I'm saying like let's put some stuff there but I mean just mounting it isn't that enough aren't we done I mean we could be but then we hand it off there's your Mount that's right but we always want to test something uh and oh you broke it but it was working you saw it it was mounted it was totally mounted yeah so we're gonna fix this in an incredibly horrible way and we're gonna come back and and address it uh after the transition so let me um switch back over to my server all right so admittedly this is the most horrible way possible to fix this this issue it turns out that the reason we're seeing that error message is actually expected because of how NFS Works um listen I've I've read a ton of online blogs that say that's exactly how you fix permissions problems okay happens all the time that's 777 means fixed written by the finest Linux admins on Earth yeah clear all right uh so now that I've changed the file permissions over on the server side I'm just going to like run the same command so there we go and knows it worked and if I look here right there's my file I copied in and if I look over here on the server uh Mount extra there it is um but it's it's weird it's owned by nobody that nobody guy is popular he is he um so th this is actually one of the things that's uh the issue of why we had to add more permissions is because of how NFS handles some Usery things so we'll talk about that after the transition um Nate any any words of wisdom or uh you know po pointing and laughing so I mean um the I love the Simplicity of NFS for how easy it is to get a server setup and get the mount going which is exactly what you just showed us uh but that Simplicity starts to break down when you start to get into complicated permissions and whatnot so and that's exactly what we're GNA talk about so yeah so don't forget to like And subscribe so if you want us to keep making this stuff like it tell us you like it and uh yeah get no when we do more and if you know somebody else that would benefit share with them stay with us after the transition where we're going to talk about uh making NFS amounts permanent on clients um we'll also talk more about this nobody user and the permission error that we saw earlier and how to more correctly resolve it um and then we'll spend some time talking about options because what's better than optional options We Love Options you got to have options that's right stay with us all right we're back we are back I did want to point out we were uh getting ready for the show and and I saido let me grab my redhead hoodie and I came back and what did you say that doesn't look like a redhead hoodie that looks like some sportball Hoodie but it is in fact a redhe hat hoodie it isn't facted happen H so um Nate what what is the reason why someone choose NFS so I mean I kind of already started to say this before the break that it's it's just simple it's already included I mean you could argue that so is ice scuzzy but try to set up an ice scuzzy disc and uh you'll immediately start to see why NFS is so attractive um it's just so much easier right you you all you need is a directory a service and some very simplistic is permissions and setup right and boom there you go especially if you're dealing with like local files I don't know if I'd want to do NFS over the Internet or anything but you know I guess it's an option it I mean it's an option but yeah I think that's probably a bad idea most of the time you deal with it on your like local network or your corporate Network um the other thing when we were planning the episode um you know there are a lot of storage devices out there as well that you can configure your storage on and then expose it to your end customers as NFS so while you may not do the NFS server side things um yeah on on your Linux box you're you're probably going to be in a situation where you do the NFS client side things um yeah I've got a I've got an NZ here that I use in my home lab and for you know local storage like we've got our family pictures and whatever on there and yeah if you want to connect to it from a Linux box it's NFS yeah and I've got a uh a qap that when I was going through and like doing the configuration of the shared drives to expose via NFS like the stuff that I put in the X ET exports file was the same stuff I had to put into the web UI for the qap right the client side uh machines that should connect the options that they should use so like it's very similar so if you know both sides you'll be able to do um probably do NFS pretty much everywhere yeah mine's a anology and the the options if you know what you're looking at you can tell these are the same options I'd be putting in ety exports but they word them a little differently right so it's a little easier to uh put in their UI but yeah same concept that's right on sonology it's a a right read totally different than read write I know totally backwards ah all right uh so don't forget that now is the time in the program where you can also interact with us via chat if you're a deferred viewer please feel free to leave a comment uh we we respond to comments all the time all right uh oh I see a great question already in the chat um karanu ask what is the size of Mount extra and what if it overgrows how do you handle it all right so why don't we jump back to the terminal and we'll take a look at that um so my configuration for NFS is pretty basic and so if we do a DF you'll see it down there listed in our attached file systems um and you'll see it's 80 gig and 41 gig is used and 39 gig is available but you're like wait you literally create a directory and there's one file there how is AD gig used well that has to do with how the server is configured so let me switch over my server um and I did not not create a specific device for my NFS server to share instead I made a directory and that directory was part of my slash file system my root file system and so what we're looking at in the um the DF on the client is actually the same stuff as what we see for the slash file system for the server so right um what we look at on the client is essentially the information that's provided via the server for whatever storage is backing that shared directory that expert right now the the thing to think about when you're doing it this way is the directory that you've exported this means that whoever is mounting it as a client could in this case fill up your root Partition by just throwing files there because they have no idea what your server is configured to do right they don't know the NFS server side they just know they've been given a directory that they can write things too and they can easily fill that up so it's really good practice to put either all of your NFS shares onto a separate partition or individual partitions for each one or I suppose you could leverage disc quotas or something to try to keep it on one disc if you had to so they actually do Implement NFS um quotas but they're implemented bya users the same way that like normal dis quotas would operate which brings us back to our like weird user Behavior with n so right we'll pick put a pin in that for a moment um to answer the rest of uh come man I'm so sorry that I'm messing up your name uh Kamar karanu uh his question about how do you address it so uh if you are at your limit um you would manage that by managing the space on the server so if you created a separate file system system the way that Nate recommended let's say it's NFS you would just add more discs to your NFS volume and then you could grow that file system which would then be inherited by all the clients that are connected to it um that's 100% dependent on the file system and how you set up the dis on the server side right so if you set them up in a way that's not easy to grow it's going to be hard to grow you set it up in a way that's easy to grow then it's easy to grow right but it's 100% what file system you set up on the server side yeah and so I would say that the way that you address lack uh loss of space or someone using the space is the same way you would address any other situation like that on a machine right right so if you're using things like logical volume manager or Stratus you can simply add storage from your storage pools into these extra devices if you're using something like we are here in the cloud where it's a straight files file partition on a disk um then like your size is your size and if you run out you run out um right so on on the other hand though if you're backing this like if you're in a Data Center and you've got some sort of a sand or whatever behind the scenes that's providing this disc your sand might have stuff in place that you can just expand the dis and then you expand the file system and you're done right so there's there's options but it's the exact same options you'd expect from any other Linux file system I think is the point we're trying to drive home all right so let's jump back into the terminal and we'll take a look at um getting this persistently mounted on our flying machine so to to show that everything is on the up and up I'm going to unmount my file system right so if I look at uh right it's not there anymore and instead we're going to go into our etsfs tab file and this is the file system table it shows me all the devices that need to be attached when I boot the machine and so I'm going to add a new new entry here and again I'm going to use my um machine's IP address but if I had assigned host names I could use its host name as well uh you give it the remote directory that it's sharing uh you tell it where to attach it in your local directory tree so I created this directory called SL NFS it's a file system type NFS and then um we're just going to take the defaults options for now and the last two fields in ETFs tab are uh dump flag and fsck order because these are files that live on somebody else's machine I'm G to let them worry about it so I'm not going to try to make backups if I call the dump command with the right argument and I'm not going to try and Fs at um if my machine has a pore shutdown okay so it's in at the fs tab now I should be able to do something like amount d a ah so in real n in real n um the etsfs tab file is managed by systemd so even though I made a change to the configuration file I actually need to reload system D so that it'll reflect that change so I'm going to do a system CTL Damon reload as suggested by the error message such a helpful and there it is I know there it is melted again right so and if we were reboot the machine it would come back automatically every time I boot the machine and shantanu is asking about uh options we're getting there we're getting there don't get ahead of us baby steps uh we're going to come back and talk about some options that are useful because there are some defaults that are probably not great choices uh for NFS um so we'll we'll come back to that towards the end of the show all right but our next thing we got to fix Nate is the user thing right so uh can you tell us a little bit about what's going on there yeah so one of the intricacies I guess of NFS is that the the the um the user IDs are essentially stored on the NFS server because the NFS server is what owns the file system and what owns all of the the users right so um user ID mappings need to be kept consistent across the board right otherwise you're going to get these weird cases where the user that owns it on the NFS side does not match the user ID that's on the client side right and then it's like oh user ID number 1000 on this side is Bob and user ID 1000 on that side is Joe and now Joe owns the files even though I wanted Bob to own it right so there's a whole bunch of ways to solve that but it really comes down to mapping these IDs in a way that can be across your entire estate whether you use like an NIS domain which is kind of the way it always used to be or um you could use like an IDM domain or you can just manually make sure everyone has the same IDs which can be really tedious but nobody essentially means I think that means that there's a mismatch between no in this case it's nobody because it's owned by root isn't it well it's not owned by root it's owned by nobody but yes because we're using root is why it chose that user ID right but on the on the NFS server side I think it's owned by root and on the client's side it won't map that because of an option that we did not specify when we Mount correct or am I getting off the reservation here yeah it's because of how the data is Flowing I think um so it is is actually owned by the nobody user on the NFS server as well okay and I'll get to how that happened in just a second but I wanted to come back and like double click on um what you said about user ID mappings so we have a user account on both these machines named row and then I added a user account on the client only named Joe and then I just created some files in the NFS share as both these people um so you can see that the real file is owned by real and the Joe files owned by Joe but over on the server uh that is not the case so the real file is owned by real but the Joe file is owned by this random uid right so the reason anyone who understands how these uids are assigned in Linux file systems you'll know they're assigned by a number and that name is translated by the local account system Pam or um the Etsy password Etsy Shadow files right so this basically means that your server has no idea who ID 1012 group ID 1013 R so it's just showing you the number right um but because it knows who Rel is and it has the same ID on both machines that shows up the way we could we expect um what's even more horrible is let's say that um on another client the Box gets mounted and that other system has a user with user ID 1012 guess what happens they now own the Joe file because their user ID on that client matches the user ID of the owner of this file and so um if you're using NFS it's really important that you get consistent user accounts across all your clients otherwise you're going to have like weird mismatches on who owns what um and there are a couple technologies that we're not going to get into today on how you can do that one is you could just like manually force all the boxes to be the same um but the other would be to use a technology like ldap um or actually ad uses ldap uh the identity manager from Red Hat uses El app so that way everybody has kind of the same picture of what user accounts are created in your organization all right so I see uh a bunch of chatter in the chat about um where we're going next which is this nobody user all right so here's here's the situation way back in the like yester years of History um if you had a file that owned by root or actually I should say if your client was interacting with the NFS server as root on the client they were uid zero on the client which meant that when they were placing files they were doing it with user ID zero and if somebody el else mounted that same file system um on their client they also had a user ID zero which is root um but the question started being asked of if someone is root on a client should they be treated the same as if they're root on the server system cuz root gets to do things like ignore file permissions well I mean absolutely they should be they're roote well yes but they're not root on my machine they're root on somebody else's machine yeah right this this here in lies the problem right if root on both these machines is you as the administrator I mean it's not such a big deal but if you're not sure right if you're giving this to I don't know your app team and they root on their machine they're not roote on your NFS server this this could be a problem right because rickets do things like change permissions on files they don't own or access files that they don't have permissions to access because they're root so um the way that the the authors of NFS fixed this was when uh the root user account on a client interacts with the NFS server for the duration of that interaction their effective user ID gets changed and it's changed over time but for real n they get changed to the nobody user and nobody user is user ID 65534 and that's why we see them here and that's why it matches with the clients because everybody has this uh user ID 65534 the nobody user on older versions of r on older versions of Linux you may see this is NFS nobody which was a different account ID ain't nobody writing files is rude over NFS nobody right um and so the option that controls that is called root squash and it is a default so when I created my etsc export uh notice I didn't specify how she we should handle root and so it got the default which is root squash so as root from a client interacts with this file system that I'm sharing they get temporarily reassigned to this nobody account for the purposes of their file activity and then when they're done with their file activity that they're back to themselves again so if we wanted to allow them to do stuff as root you would have to put in the option nocore root uncore squash which I don't recommend there's a reason why this exists in the first place and why it's the default there are I mean I I guess the caveat is know what you're getting into if you're turning it on is really as with any case where you're circumventing security or disabling a security feature just know what you're getting into sometimes there's a use case where you need to do that most of the time you should try not to for example like if you're if you're doing like NFS file systems for remote boot you probably don't want root to be squashed I don't know if anyone actually does that but it's a use case that I could imagine where you might you might not want to use it all right so what I'm doing here is I'm just kind of going through and creating some um group configuration um so that we can fix our permission problems and not be seven seven seven permissions on our NFS share so because we have to have the same user IDs and group IDs across the server and the clients that's what I'm going to do is I'm just going to create this shared group uh the row user is going to be a member of that shared group and I'm going to configure the client to do the same and then I can change the group owner of Mount extra to be this third party group all right so that looks good oh and I'll also add the set GED bit so when new files are put in here it's automatically owned by this group that they share and I'll just do the same thing over here now just make sure that the permissions are there the way I expect and so if I'm uh the rail user if I have more will it help your typing you will it will um but if I'm Joe who's not a member of the group right because he's not a member of the group and we adjusted the permissions on the directory to only allow people who belong to group share then we're we're good um and we can just take a quick look so here's this extra file I just put in here so that's a more sane way of managing the permissions on your NFS share so that random people that happen to exist on a client system don't get to do things that you don't intend yeah and large NFS shares is one of the cases where file system ACLS very quickly become a necessity instead of an optional thing yeah which uh yeah they can they can get complicated quick we're not going to delve into that today no all right um so options that's our last thing before we finish up because uh I'm sure producer Eric is already like oh we're over a minute two two minutes two minutes so uh the first minute not count we started late oh okay okay because yeah all right so options are the last thing that uh that we wanted to cover and we already talked about one which is root squash and no root squash which is a server side um option since we're talking about server side uh you know let's stay on client side and then we'll adjust server side so you'll recall that we put in ety FS tab our update all right so Nate I have some ideas of options I like to use I like this and this um are there any options you like to use as well or is this good for you too so uh there's one which I think ended on rail eight I think on rail nine with the system D controlling of mounts and whatnot is no longer necessary but there was one called netdev undor netdev uh which would tell FS tab or tell the system mounts that this needs to be mounted after the network is up so if you're on an older rail system keep that in mind there's another service called netfs I think that this will start after a netfs starts right so keep that in in mind on real 9 it's not as important though because I think there's already systemd dependencies that make sure that happens yeah so that's one but yeah there's a there's a ton of other options which I I can't really recall off the top of my head but you can change things like caching and rights like rights per second and like all kinds of crazy stuff that you could say yeah and there's also stuff like how much uh data is transmitted at a time so you could crank up um like you could do more Network how put this uh you could push more data through your network at once um so that's useful if you like have big files that you're transferring via NFS you should use big packets and big if you're on a if you're on a link that you can guarantee a certain amount of bandwidth between you and the server you can greatly improve improve performance by changing the amount of throughput you get through NFS it takes a little bit of tweaking and fine tuning and the defaults are usually good enough but yeah if you've got a high performance workload over NFS which like goggles my mind that people do that but you can do it if you have the network to back it up yeah and uh Chuck Marshall suggested sync so I went ahead and added that into to all right so let's talk about this list we already talked about netdev so uh this device should be attached after networking Services have been started which makes sense because you have to have networking in order to do NFS um the ones that I added in were soft INR and BG I think you could probably get around BG now as well thanks to system d uh soft says it's the opposite of the default the default is hard um and what happens with a soft Mount is if we lose our connection to this NFS share we're going to try to reestablish that connection for up to five minutes but after that we'll give up and time out um the default which is hard mounting will never give up and how that manifests itself is you're like having network problems or you're having a problem with your NFS server and you CD into the NFS melted directory on the client and your shell just hangs because it's trying to complete that CD a bad NFS mount a bad a bad NFS mount with hard enabled can actually halt your boot that's how bad it can be yeah and so um soft will like after five minutes of trying it'll just give up and it'll give you an error about not being able to access whatever it is or whatever application error from not being able to access whatever it is um so that builds in a Timeout uh the other one I put in here is in so by default you use no INR as your option um and that means that NFS mounts don't honor the interrupt signal so let's say that you're having NFS server problems and you CD into the NFS directory and it's just hanging there what's a common thing someone might do to try and move on control C to interrupt yeah control C which interrupt signal but by by default it's no in so um the in option says when we're interacting with this Remote device if someone sends the interrupt signal I will honor that and stop trying to connect to the Remote device uh BG is background melting uh this used to be more important on older versions of Linux um because you could at boot time kick off your NFS mounts which might take some time to resolve um and you can do it as a background operation so that your init subsystem could move on and keep doing other things um with system D because we can now parallelize a bunch of stuff it doesn't matter if this takes longer um assuming that you don't have other things that require files stored here um right but that's whyg is there uh and then Chuck Marshall suggested sync agree so one of the problems with NFS is that historically it does not do file locking and so if uh two clients are mounted on the same server and um one writes a change and the other one write a change whatever's done last scks right because there's no file locking but it gets even more crazy because what happens if the first one writes the change and it gets sent over to the server then the second one writes a change but it gets cached in memory because it's a dirty file page there could be more changes that come across and then at some point it's time to synchronize those dirty file pages and it gets sent across the network um and so you can end up with things in weird States uh so the default for most um well the default for mounts for even Dismount is asynchronous updates meaning you can cache data updates in memory um but if you put a Sync here it says as soon as the file has changed it needs to be pushed to the actual file storage so that's what we're doing here and I set it on the the server side as well uh so it should be configured there and and automatically picked up by the clients but just in case we can make sure it's enforced here there was a there was a quick comment here from shantanu um and I I think I know the answer but might as well just Bounce It Off You So shantanu asked why don't we just do this using a system Dem Mount instead of a instead of NFS tab I believe the answer is that that's what system D did when we did the Damon reload so you don't have to do it that way but you can right and so the reason I chose to not do it that way you'll see the other files that make up my or file systems that make up my machine are referenced here um while you can put mounts in systemd and create a mount Target for them or sorry Mount file for them um it's still really common especially across linuxes that people who are new to your box are going to look in NFS tab for mounted file systems where Mount files are really nice for systemd is if you are uh installing something you can install something and drop a file somewhere that's very easy right because that's what RPM does it like unbundles files into the directory tree but it's really really hard as part of an installer to like edit a file in place to interject more uh configuration it's even harder when you remove that software to remove that configuration because like something else could have also edited that file and changed its format but it's really easy to then delete a file that you put down as part of your install so um yeah just some stylistic differences functionally it operates the same all right uh so that's client side server side there's a couple other things we might be interested doing um server side options are in the Etsy exports file um and currently I made a very bad choice of making it rewritable to the World um maybe I should instead make this read writable to just my client so now only connections from 10.5.1 to 56 are allowed to be rewrite and then if you wanted to have different levels of access for different people like maybe I also want to offer this to other people on my NW work but they should get it read only right off saying they're not doing writing um so you can set different access controls for different either IPS host names uh domain extensions or subnet masks right so you you can do full networks with uh with CER notation right so if you'd like 105.0 or 10. 5.1.0 24 that'll say this whole network everything that's in that IP space will get you know that particular set of uh of options right and you can also go line by line right if you if you were getting too long on the the first line there or if because you wanted to organize it better you can make a second line that's also says Mount extra and have another IP address depends how you want to organize this file y all right so um change my an exports I could do something like a system CTL NFS server reload or there's a more classic way of doing it uh export FS that signals you're running NFS server processes and tell them tells them to recash the F exports um so there you go Unleashed it would have was Unleashed uh the last thing is actually not something that we're going to get into of detail today but um with real 9 which is what we're using here um we are using NFS version 4 and we've actually been using NFS version 4 for quite some time on on real um but with this very basic setup we're transmitting all of our file content across the network in plain text uh so we don't we don't like sending things in plain text but the default for NF version three and four is to do that version four does it over TCP connections version three did it by default over UDP connections also equally terrible for other reasons um so NFS version 4 also includes the ability to encrypt some stuff and uh we're not going to do it today on the on the machine so we can take off the file uh the screen share um but there is a document that red hat produces on uh configuring Network file Services it covers both Samba and NFS but in there there's a fair amount of detail on using keros to do either authentication of clients or users or also to do file data encryption when communicating between the client and server um so there's several different modes of curarization um that will do postbase Authentication user based authentication and also file encryption between the the client and the server but then you also have to set up keros good yeah enjoy that would take that would take more than a half hour show I mean I guess NFS took more than a half hour show too but it it did except we did it in the first like six minutes [Laughter] poorly all right yeah I mean it's it's it's a great way to get file shared simply across a network but yeah you just have to be aware what you're getting into it's it's a nice Simple Solution there are more complex solutions that have a lot more advantages over NFS but yeah if you just need to get two Linux machines sharing files great way to get it done all right so Nate what's uh what's coming up next week uh next week I think we're continuing our services Arc right we're going to talk about some web servers aren't we we're going to cook up some examples about our good old friend Apache most likely maybe we'll go crazy and like run light HTTP or something they even exist any more know um so we're gonna do some web server configuration I don't know which web server we're gonna do yet probably a patch yeah maybe yes but more importantly we're also going to cover things like deploying a website this just like St or where it goes yeah you guys have seen us a million times just install it and use the default page for example purposes we're going to go a little deeper than that it's not just going to be another like Hey we're gonna dnf install it okay we're done right wait uh what about super businessing website are we doing super busy website it's that totally has to make a make a a a a reoccurrence on the on the show I think super busy yeah um and then we're going to again be doing web services but we're going to make it a little more complex yeah yeah so if you think about like a lamp stack traditional uh like PHP MySQL that's probably what you're going to expect out of that we haven't cooked it up yet but it'll be something like that and then next week uh Ro presents will also be on on I think it's Wednesday it's always on is it Y at me quickly behind the scenes um where they're going to be talking about oh there you go Wednesday um they're going to be talking about a day in the life of a red hat Solutions architect so Solutions Architects are a uh technical position at red hat that uh works with customers as part of helping them design what they're going to be doing with red hat um so that's what's happening on Wednesday next week R presents awesome well happy nsing everybody that's right um and we'll keep going with new and different services on Linux for the next couple episodes so thanks for watching and U have a great day have a great one
Info
Channel: Red Hat Enterprise Linux
Views: 1,112
Rating: undefined out of 5
Keywords:
Id: WfV-3B27nPU
Channel Id: undefined
Length: 45min 52sec (2752 seconds)
Published: Sat Mar 02 2024
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.