Translations: "Spanish" |
Home Lab Part 2: Skills and resources before build one
To continue with the previous post about home labs before I started to plan and build mine, I would like to recommend a set of topics or skills to learn or improve the knowledge that I consider where very important to have when I started to build my home lab.
If you are in TI or you plan to do it, there is no valid reason not to learn Linux/Unix. Why? Is almost everywhere, to mention some examples, the OS of your Smart TV runs an OS based on Linux, if you have a smartphone running Android that's based on Linux, Apple macOS and iOS are based in another Unix which is Darwin. Even Windows 10 now allows you to install Ubuntu Linux from their Microsoft Store without needing extra virtualization software like VMware Workstation or others using what Microsoft calls Windows Subsystem for Linux, which is a Linux-compatible kernel interface.
If you are in Networking or Network Security, guess what? Most enterprise solutions for networking or network security run Linux or a variant under the hood, so when you are working on advanced configuration or troubleshooting using a command line, you are most of the time working directly with a Linux/Unix system. I have so many anecdotes saving the day solving very critical issues with workarounds using my knowledge on Linux.
How to learn Linux? We are now in 2020 when you search "learn linux" on google you have about 504 millions results:
So the short answer is: hands-on experience.
The long answer is to focus on learning and to feel comfortable with the command line, then learn to use some standard utilities, like curl, Netcat, for mention a couple. A useful skill after you feel comfortable with the command line interface could be to learn about scripting with bash. After you learn how to do some tasks, you can go further and try to automate most of the tasks, from configuring a service to deploy and provision resources fully; at this point is an excellent choice to look into Python and end with Ansible for example.
What distribution to choose to start to learn Linux? It is a question that always generates debate, and it would even need an entire article. To keep it simple, I'm going to recommend starting with Ubuntu, as is an excellent distribution for beginners. You will find that most of the more popular Linux distributions have a lot of documentation available from how to install it on how to operate it.
There are three main differences I could mention between each Linux distribution:
- Package Management
- Configuration file Paths
- Some particular system tools tailored for each distribution.
Where or how to run Linux?
At this point, we don't need dedicated equipment to learn Linux besides your personal computer, and I want to suggest two options, running Linux locally. The second option is to use cloud technologies to do it.
Running Linux Locally
- Install it on your computer may be using the dual boot of if you feel adventurous as your primary operating system. Once you installed a distribution like Debian, Ubuntu, Centos, for mention some of the most popular, you can test other distributions using virtualization or even better, use a container technology like Docker. I will cover this in more detail in a future post.
- If you use Windows 10 you can install Ubuntu directly from the Microsoft Store, in this way you don't need to create a dual boot installation or anything, and you will have access to a Linux Terminal where you can start to learn and test stuff. You can find more about it here: WSL2 Announcement, and the official documentation.
- Virtualization Software: Here depends on the main OS you are using, if it is Windows or macOS, you have paid options like VMWare Workstation, or Fusion, or free options like Virtual Box. Which one use?, it depends, if you are only going to run Linux boxes Virtual Box is more than enough, however, if you are going to run more specialized images like virtual appliances of commercial solutions, those are more likely to be compatible with VMWare.
- Raspberry PI: With the launch of Raspberry Pi 4, the specifications that can go up to 4 GB of RAM, however, in my humble optinion if budget is a constrain the 2 GB of RAM edition should be more than enough.
Again, it is 2020, if you didn't do it yet, is time start to embrace the cloud. Here is a list of how to run Linux in Cloud environments for free.
Running Linux in a Public Cloud
Amazon Web Services (AWS)
You can use their Free Tier account level for up to a year since the account creation and their Compute Cloud is not the only product free of their portfolio, more information here. A complete overview, which is a good starting point, can be found in this document: Overview of Amazon Web Services, AWS also offers a complete library of training resources free of charge: Free Digital Training. All this is very useful if you are not only looking into learning or improve knowledge on Linux, but also if you are interested in a career path related to cloud technologies.
Google Cloud Platform (GCP)
There are two offerings, the first one is after signup you have access to a USD 300.00 credit to use any Google Cloud service, which is valid for a year or until you run out of credits, whichever happens first. Then also, as AWS does, GCP offers a free tier, but the main difference is that it doesn't expire after a year, is as they mention in their website: "Always Free, which provides limited access to many common Google Cloud resources, free of charge". More details here: Google Cloud Platform Free Tier. There is also free training available with Coursera, all those details here: Free hands-on training.
It could be called a mix between AWS and GCP regarding the free tier offering. You can use a group of services for free for 12 months, and you have USD 200 credit to use a service that is not in the list of free services. But then there is also a list of other services that are always free, more details here: Azure free account. However, those free services don't includes compute instances.
Remember that this three options have not only limitation in CPU and RAM resources, but also in storage and even data transfer, so be careful to avoid extra and unexpected charges.
Linode is not a free option, however it gives you a more predictable cost, for example I use a "Nanode" which is the smallest offering they have for only USD 5 per month. and for that I have:
- 1 GB Ram
- 1 CPU Core
- 25 GB SSD
- 1 TB data transfer
- 40 Gbps Network In
- 1000Mbps Network Out
My distribution of choise here is Alpine which is a Linux distribution with very small footprint.
You can create a Linode account using this link which includes my referral code :)
Learning to Code
A few years ago if you were in IT, networking, or network security, there was not a requirement to know how to code, I even hear once: "that's only needed if you want to become a programmer." Well, not today, in the age of cloud adoption, coding skills are not only needed, but they are also very valuable in the professional market, and it also becomes convenient when you start to work in automating different workflows.
This is a list of programming languages I can suggest are very handy when running a home lab.
Shell scripting is a good start; you can learn and develop a useful skill using Bash for automating several things. The first resource is the official one:
And this is a very complete list of resources:
I can't find a reason why not to learn Python, is the fastest-growing general-purpose, high-level programming language with high demand for the professional market. It is also very recommended as a programming language to learn first. It has excellent library support and a large developer community.
- The Python Tutorial
- Learn Python (Interactive tutorial)
- Automate the Boring Stuff with Python 2nd Edition
Well, this is a personal preference, sometimes I do prefer to write some stuff in Go instead of Python, and it's because compared to Python, Go it's a compiled language, but it can also run like interpreted language.
Thanks for reading.
The next chapters of this serie has been published here:
- Home Lab Part 3: Buildinf the first version of my Home Lab
- Home Lab Part 4: Shrinking/Consolidating Home Lab