<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[JakeSpillsTea]]></title><description><![CDATA[Your source for Linux, virtualization, FOSS, tutorials, and tech reviews]]></description><link>https://jakespillstea.tech/</link><image><url>https://jakespillstea.tech/favicon.png</url><title>JakeSpillsTea</title><link>https://jakespillstea.tech/</link></image><generator>Ghost 5.24</generator><lastBuildDate>Sat, 25 Apr 2026 09:42:21 GMT</lastBuildDate><atom:link href="https://jakespillstea.tech/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Bash Basics, Part 3: File Manipulation]]></title><description><![CDATA[It's time we give our GUI a break and learn how to move, copy, edit, and delete files through the CLI on Linux.]]></description><link>https://jakespillstea.tech/bash-basics-part-3-file-manipulation/</link><guid isPermaLink="false">6320368344d08506b4ab933a</guid><category><![CDATA[Bash]]></category><category><![CDATA[Tutorial]]></category><dc:creator><![CDATA[Jacob Cardinale]]></dc:creator><pubDate>Wed, 15 Nov 2023 07:26:02 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1569235186275-626cb53b83ce?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fGZpbGVzfGVufDB8fHx8MTY3MDcyOTA4OQ&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1569235186275-626cb53b83ce?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fGZpbGVzfGVufDB8fHx8MTY3MDcyOTA4OQ&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Bash Basics, Part 3: File Manipulation"><p>If Daft Punk&apos;s digital age anthem <em>Technologic</em> ever gave you the urge to dive deeper into the technology world, you&apos;re in the right place! It&apos;s time we give our GUI a break and head over to the almost musical world of the command line. After all, with commands like &apos;zip&apos;, &apos;unzip&apos;, &apos;copy&apos;, and &apos;touch&apos;, you&apos;re orchestrating your own &quot;Technologic&quot; symphony right on your keyboard. It&apos;s time to upgrade your skills. Let&apos;s dive into learning how to move, copy, edit, delete, and add a bit of techno-funk into our everyday computing tasks.</p><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F4A1;</div><div class="kg-callout-text">If you want to learn more information about any command, use the <code>man</code> command to read the manual for any command on your system. I also highly recommend checking out <a href="https://tldr.sh/">tldr.sh</a>.</div></div><h3 id="mkdir">mkdir</h3><p><code>mkdir</code> is used to make a directory.</p><pre><code class="language-shellsession">$ mkdir bin/</code></pre><h3 id="rmdir">rmdir</h3><p><code>rmdir</code> is used to remove a directory. Note that the directory will have to be empty for this to work.</p><pre><code class="language-shellsession">$ rmdir bin/</code></pre><h3 id="touch">touch</h3><p><code>touch</code> is used to create an empty file or to change the timestamp for an existing file to the current time.</p><pre><code class="language-shellsession">$ touch file.txt</code></pre><h3 id="find-function find() { [native code] }1">find</h3><p><code>find</code> lets you search for files on the local filesystem and prints the search results.</p><pre><code class="language-shellsession">$ find / -name nginx.conf</code></pre><h3 id="nano">nano</h3><p><code>nano</code> is one of the easiest-to-use command-line text editors for Unix-like operating systems.</p><pre><code class="language-shellsession"># nano /etc/fstab</code></pre><h3 id="vim">vim</h3><p><code>vim</code> is a more powerful text editor which can be installed on almost all Unix systems. It is known for its extensive features and numerous commands.</p><pre><code class="language-shellsession">$ vim /var/www/index.html</code></pre><h3 id="rm">rm</h3><p><code>rm</code> is used to remove files or directories. To remove directories and all their contents, the &quot;-r&quot; (recursive) flag is used.</p><pre><code class="language-shellsession">$ rm file.txt
$ rm -r directory/</code></pre><h3 id="mv">mv</h3><p><code>mv</code> is used to move or rename files or directories. It takes two arguments: the current name and the new name or location.</p><pre><code class="language-shellsession">$ mv old-name.txt new-name.txt # renaming
$ mv file.txt new-dir/ # moving</code></pre><h3 id="cp">cp</h3><p><code>cp</code> is used to copy files or directories. Like <code>mv</code>, it takes two arguments: the source and the destination.</p><pre><code class="language-shellsession">$ cp file.txt copy-file.txt
$ cp -r original-dir copied-dir/</code></pre><h3 id="ln">ln</h3><p><code>ln</code> is used to create links between files. By default, it creates a hard link, but with the &quot;-s&quot; option, it can create a symbolic (or soft) link. Symbolic links are like shortcuts in Windows.</p><pre><code class="language-shellsession">$ ln file.txt link-file.txt
$ ln -s source-file symbolic-link</code></pre><h3 id="zip">zip</h3><p><code>zip</code> is used to compress files into a zip archive.</p><pre><code class="language-shellsession">$ zip archive.zip file.txt</code></pre><h3 id="unzip">unzip</h3><p><code>unzip</code> is used to extract files from a zip archive.</p><pre><code class="language-shellsession">$ unzip archive.zip</code></pre><h3 id="tar">tar</h3><p><code>tar</code> is used to archive files. Many Linux programs come in a &quot;tarball&quot;, or a <code>.tar.gz</code> format. <code>tar</code> can also be used with other commands to compress files.</p><pre><code class="language-shellsession">$ tar -cvf archive.tar file.txt
$ tar -xvf archive.tar # Whenever you need to extract files from a tar archive</code></pre><h3 id="scp">scp</h3><p><code>scp</code> stands for secure copy. It&apos;s used to transfer files securely between local and remote systems. Just like <code>cp</code>, it needs a source and a destination.</p><pre><code class="language-shellsession">$ root@192.168.1.55:/path/to/my/secrets.txt ~/Documents # Copying files from a server
$ scp ~/app.py user@example.com:/opt/myapp # Copying files to a server</code></pre><p>These foundational commands will help you navigate the digital world, letting you control your computer in ways you might not have thought possible. But remember, mastering any new skill takes time and practice. So, don&apos;t feel discouraged if it doesn&apos;t sink in immediately.</p><p>I hope this blog post has helped break down the commands into a manageable list. Don&apos;t forget that playing around with these commands is the best way to get comfortable. If you haven&apos;t already, get started by <a href="https://jakespillstea.tech/three-ways-you-can-start-using-linux-today/">setting up a Linux environment</a> today!</p><p>And with enough practice, you too will soon be Harder, Better, Faster, and Stronger with Linux.</p>]]></content:encoded></item><item><title><![CDATA[Installing Bastille on FreeBSD 13.2: A Step-by-Step Guide]]></title><description><![CDATA[BastilleBSD is a powerful jail management system for FreeBSD that provides users with an easy way to manage and configure jails. Much like Linux containers, FreeBSD jails offer a segregated user space that is isolated from the rest of the system, providing enhanced security and compartmentalization.]]></description><link>https://jakespillstea.tech/how-to-install-bastillebsd-in-freebsd-13-2/</link><guid isPermaLink="false">64421837a7bf8206ee69e506</guid><category><![CDATA[Software]]></category><category><![CDATA[Tutorial]]></category><category><![CDATA[Virtualization]]></category><category><![CDATA[BSD]]></category><dc:creator><![CDATA[Jacob Cardinale]]></dc:creator><pubDate>Fri, 05 May 2023 23:32:49 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1605866756747-c06a83b3f6c6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGphaWx8ZW58MHx8fHwxNjgyNzEwMzcx&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1605866756747-c06a83b3f6c6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGphaWx8ZW58MHx8fHwxNjgyNzEwMzcx&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Installing Bastille on FreeBSD 13.2: A Step-by-Step Guide"><p><a href="https://bastillebsd.org/">Bastille</a> is a powerful jail management system for FreeBSD that provides users with an easy way to manage and configure jails. <a href="https://en.wikipedia.org/wiki/OS-level_virtualization">Much like Linux containers</a>, FreeBSD jails offer a segregated user space that is isolated from the rest of the system, providing enhanced security and compartmentalization. With Bastille, you can quickly create, manage, and secure lightweight jails on your FreeBSD server. In this blog post, we will walk you through the process of installing Bastille on FreeBSD 13.2 and creating your first jail.</p><h2 id="what-are-freebsd-jails">What are FreeBSD jails?</h2><p>FreeBSD jails are a form of operating system-level virtualization that allow for the creation of isolated environments, or &quot;jails&quot;, within a single FreeBSD operating system. Each jail appears to be a separate instance of FreeBSD, complete with its own network stack, file system, and user space. Jails use the host system&apos;s kernel, which makes them more lightweight than traditional virtual machines. </p><p>Jails can be used to run multiple services or applications on a single FreeBSD host, while keeping them completely isolated from each other and from the host system. This provides an added layer of security and makes it easier to manage and maintain a large number of services or applications. </p><p>Jails were originally developed for FreeBSD, but similar technologies have since been developed for other operating systems, such as Linux&apos;s LXC and Solaris&apos;s Zones.</p><h3 id="a-brief-history">A brief history</h3><p>FreeBSD jails were first introduced in FreeBSD 4.0 in 2000 as a way to provide operating system-level virtualization. The concept of FreeBSD jails evolved from the Unix chroot command, which allows a process to change the root directory of the filesystem it is running in, effectively limiting its view of the file system to a specific directory tree. Jails expanded on this concept by isolating not only the file system, but also the network stack, user accounts, and system processes, providing a more complete virtualization environment. Jails were originally developed as a research project at the University of California, Berkeley, and were integrated into FreeBSD as part of the operating system&apos;s standard distribution. Since then, FreeBSD jails have continued to evolve and have become a mature technology used in a wide range of applications.</p><h2 id="why-use-freebsd-jails">Why use FreeBSD jails?</h2><p>FreeBSD jails can be used in various practical applications, such as web hosting, database hosting, development and testing, security research, and server consolidation. The cool part is that all these applications can take place on the same server!</p><h3 id="freebsd-jails-offer-several-key-benefits">FreeBSD jails offer several key benefits:</h3><ol><li><strong>Enchanced security</strong>: Jails provide a high level of security by isolating processes and files within a jailed environment. This means that if a security breach were to occur, it would be contained within the jail and not affect the host system.</li><li><strong>Resource efficiency</strong>: Jails are lightweight, which means that they use fewer resources than traditional virtualization methods. This makes them an efficient way to run multiple applications or services on a single system.</li><li><strong>Easy management</strong>: Jails can be easily created, managed, and deleted using command-line tools or management utilities like Bastille.</li><li><strong>Portability</strong>: Jails are highly portable and can be easily moved between systems or backed up/restored, making them a flexible solution for deploying applications or services.</li></ol><p>When choosing a containerization technology for my personal use, I sought a solution that was easy to set up and manage. While Docker and LXC are well-known options, I found configuring network settings in Docker to be a hassle, and LXC is only available out-of-the-box on Proxmox, limiting my options. Furthermore, the ability to add individual public IPv6 addresses to each jail seemed like an easier process than setting up a reverse proxy. Having previously set up a jail on TrueNAS Core, I found FreeBSD jails to be an uncomplicated choice, and I was also eager to try something new. Currently, I am utilizing FreeBSD jails in a production environment hosted by Vultr with ease and efficiency.</p><h1 id="installing-bastille-and-creating-your-first-jail">Installing Bastille and creating your first jail</h1><h2 id="step-1-spin-up-a-fresh-new-freebsd-server">Step 1: Spin up a fresh new FreeBSD server</h2><p>To get started, you&apos;ll first need to spin up a new FreeBSD 13.2 server. You can do this using your preferred virtualization platform, such as VMWare, VirtualBox or <a href="https://jakespillstea.tech/turn-your-old-laptop-into-a-hypervisor/">Proxmox</a>, or you can use a dedicated server or VPS from a provider like Vultr.</p><h2 id="step-2-install-updates-with-pkg-update-and-freebsd-update">Step 2: Install updates with pkg update and freebsd-update</h2><p>Once your server is up and running, log in as the root user and update your system:</p><pre><code class="language-shellsession"># pkg update &amp;&amp; pkg upgrade
# freebsd-update fetch install
# reboot
</code></pre><h2 id="step-3-create-a-new-user-with-root-doas-privileges">Step 3: Create a new user with root (doas) privileges</h2><p>This step is necessary only if you do not already have an &quot;administrator user&quot; other than root already setup (such cases would be a cloud/VM image or disk image.)</p><p>Doas is a minimal alternative to sudo that allows users to run commands with root privileges without entering a password. To use doas, you must first install the package:</p><pre><code class="language-shellsession"># pkg install doas</code></pre><p>Create a new user for managing your server:</p><pre><code class="language-shellsession"># adduser
</code></pre><p>Follow the prompts to create your new user and add them to the &quot;wheel&quot; group, which provides users with administrative privileges similar to the &quot;sudo&quot; command in other Unix-like systems:</p><pre><code class="language-shellsession"># pw usermod USERNAME -G wheel
</code></pre><p>Replace &quot;USERNAME&quot; with the username you just created.</p><p>Finally, run the following command to officially give your new user doas privileges:</p><pre><code class="language-shellsession"># echo &apos;permit :wheel&apos; &gt;&gt; /usr/local/etc/doas.conf</code></pre><h2 id="step-4-install-bash-and-change-the-default-shell">Step 4: Install bash and change the default shell</h2><p>Now, install the bash shell and set it as the default shell for your new user:</p><pre><code class="language-shellsession"># pkg install bash
# chsh -s bash USERNAME
</code></pre><p>Replace &quot;USERNAME&quot; with the username you created in Step 3. You may login as your newly created user at this point and continue while using <code>doas</code> for root access.</p><h2 id="step-5-install-bastille">Step 5: Install Bastille</h2><p>To install Bastille, run the following command:</p><pre><code class="language-shellsession"># pkg install bastille
</code></pre><p>Enable Bastille in your /etc/rc.conf. This can be easily accomplished with the following command:</p><pre><code class="language-shellsession"># sysrc bastille_enable=YES
</code></pre><h2 id="step-6-enable-zfs-support-optional">Step 6: Enable ZFS support (Optional)</h2><p>If you want to enable ZFS support for your jails, run the following commands:</p><pre><code class="language-shellsession"># sysrc -f /usr/local/etc/bastille/bastille.conf bastille_zfs_enable=YES
# sysrc -f /usr/local/etc/bastille/bastille.conf bastille_zfs_zpool=YOUR_ZPOOL
</code></pre><p>Replace &quot;YOUR_ZPOOL&quot; with the name of your ZFS pool.</p><h2 id="step-7-bootstrap-a-freebsd-release">Step 7: Bootstrap a FreeBSD release</h2><p>Before creating your first jail, you&apos;ll need to bootstrap a FreeBSD release. To do this, run the following command:</p><pre><code class="language-shellsession"># bastille bootstrap 13.2-RELEASE
</code></pre><p>This will download and extract the necessary files for FreeBSD 13.2.</p><h2 id="step-8-create-your-first-jail-with-bastille-and-an-ip-address">Step 8: Create your first jail with Bastille and an IP address</h2><p>Now that Bastille is installed and configured, you can create your first jail. To do this, run the following command:</p><pre><code class="language-shellsession"># bastille create myjail 13.2-RELEASE IP_ADDRESS INTERFACE
</code></pre><p>Replace &quot;IP_ADDRESS&quot; with an unused IPv4 or IPv6 address on your network. Optionally, you may also replace &quot;INTERFACE&quot; with a specific network interface for your jail to operate on. If it is left blank it will use the default interface. You can list interfaces with the command <code>ifconfig</code>.</p><h1 id="configuring-networking-for-public-facing-jails">Configuring networking for public-facing jails</h1><p> While privately hosted and local FreeBSD jails only require a local IP address, public-facing servers demand a robust firewall to ensure their security. To that end, I recommend checking out the tutorial on <a href="https://www.vultr.com/docs/configuring-ipv6-on-your-vps/#IPv6_on_FreeBSD">How To Configure Packet Filter (PF) on FreeBSD</a>.</p><h3 id="ipv6-on-vultr">IPv6 on Vultr</h3><p>If you&apos;re hosting your server with Vultr VPS, it&apos;s advisable to learn how to <a href="https://www.vultr.com/docs/configuring-ipv6-on-your-vps/#IPv6_on_FreeBSD">Configure IPv6 on your Vultr Cloud Server</a> in tandem with the Bastille documentation on <a href="https://bastille.readthedocs.io/en/latest/chapters/networking.html#shared-interface-on-ipv6-network-vultr-com">Using a Shared Interface on IPv6 Network Stacks</a>. Once you enable IPv6 on your server, you can assign IPv6 addresses to your jails from your alloted <a href="https://www.vultr.com/resources/subnet-calculator-ipv6/">IPv6 subnet</a>, and configure them as aliases to the host. </p><p>It&apos;s worth noting that serving a website from your jail requires users to have an IPv6 DNS server configured. Otherwise, your domain&apos;s AAAA record may not resolve for them. One workaround is to reserve additional public IPv4 addresses, or to use a reverse proxy.</p><p>Moreover, to enable successful resolution of IPv4 domain names, a NAT64/DNS64 server may be necessary for your jails, depending on your use-case. Personally, I use <a href="https://nat64.net/">nat64.net</a>, but you can also host your own.</p><h3 id="other-network-configurations">Other network configurations</h3><p>If you prefer to avoid the complexities of IPv6, you can reserve more IPv4 addresses and assign them to your jails, or use a reverse proxy to expose internal services. Alternatively, you can try <a href="https://bastille.readthedocs.io/en/latest/chapters/networking.html#public-network">cloning a loopback interface</a>, as outlined in the Bastille documentation.</p><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F4E7;</div><div class="kg-callout-text">Like what you&apos;ve read so far? <a href="https://jakespillstea.tech/#/portal/signup">Sign up for free</a> to JakeSpillsTea.tech and be first in line for the latest newsletter releases.</div></div><h1 id="common-subcommands-and-examples">Common subcommands and examples</h1><p>Once you have created your first jail, you can use the following subcommands to administrate it.</p><!--kg-card-begin: markdown--><ol>
<li>list: This command lists all existing jails.</li>
</ol>
<pre><code class="language-shellsession"># bastille list
</code></pre>
<ol start="2">
<li>convert: This command converts a jail from a thin jail to a thick jail.</li>
</ol>
<pre><code class="language-shellsession"># bastille convert JAIL_NAME
</code></pre>
<blockquote>
<p>A thick jail does not need to be the same FreeBSD version as the host and is independent, as opposed to a thin jail which must stay the same version as the host.</p>
</blockquote>
<ol start="3">
<li>export: This command exports a jail to a compressed image/archive. By default, the exported jail will be saved to <code>/usr/local/bastille/backups</code>.</li>
</ol>
<pre><code class="language-shellsession"># bastille export --txz JAIL_NAME # use with UFS filesystem
# bastille export --xz JAIL_NAME # use with ZFS filesystem
</code></pre>
<ol start="4">
<li>import: This command imports a previously exported jail from an image or archive.</li>
</ol>
<pre><code class="language-shellsession"># bastille import /path/to/archive.txz
</code></pre>
<ol start="5">
<li>cmd: This command runs a command inside a specified jail.</li>
</ol>
<pre><code class="language-shellsession"># bastille cmd JAIL_NAME COMMAND...
</code></pre>
<ol start="6">
<li>console: This command opens an interactive console session inside a specified jail.</li>
</ol>
<pre><code class="language-shellsession"># bastille console JAIL_NAME
</code></pre>
<ol start="7">
<li>pkg: This command is used to install, update, upgrade and manage software packages in a specified jail.</li>
</ol>
<pre><code class="language-shellsession"># bastille pkg JAIL_NAME install|update|upgrade
</code></pre>
<ol start="8">
<li>service: This command starts, stops, or restarts a service inside a specified jail.</li>
</ol>
<pre><code class="language-shellsession"># bastille service JAIL_NAME start|stop|restart SERVICE_NAME
</code></pre>
<ol start="9">
<li>stop, start, restart: These commands start, stop, or restart a jail.</li>
</ol>
<pre><code class="language-shellsession"># bastille stop|start|restart JAIL_NAME
</code></pre>
<ol start="10">
<li>destroy: This command permanently deletes a jail.</li>
</ol>
<pre><code class="language-shellsession"># bastille destroy JAIL_NAME
</code></pre>
<ol start="11">
<li>help: This command will display a list of all the available Bastille subcommands in detail.</li>
</ol>
<pre><code class="language-shellsession"># bastille help
</code></pre>
<!--kg-card-end: markdown--><h1 id="conclusion">Conclusion</h1><p>In this blog post, we walked you through the process of installing and configuring Bastille on FreeBSD 13.2. With Bastille, you can easily create and manage jails on your FreeBSD server, making it a valuable tool for any system administrator. Now, you&apos;re ready to explore the many features and possibilities that Bastille has to offer. Happy jail managing!</p>]]></content:encoded></item><item><title><![CDATA[Bash Basics, Part 2: Root and Sudo Privileges]]></title><description><![CDATA[Let's unleash our inner command-line warriors and get ready to use sudo - the ultimate tool in our administration arsenal!]]></description><link>https://jakespillstea.tech/bash-basics-part-2-root-and-sudo-privileges/</link><guid isPermaLink="false">63955165f3f9f06c4467f33b</guid><category><![CDATA[Bash]]></category><dc:creator><![CDATA[Jacob Cardinale]]></dc:creator><pubDate>Fri, 16 Dec 2022 18:00:27 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1523825086357-39d9158d4ba8?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDEwfHxyb290c3xlbnwwfHx8fDE2NzA3MzAxMDg&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1523825086357-39d9158d4ba8?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDEwfHxyb290c3xlbnwwfHx8fDE2NzA3MzAxMDg&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Bash Basics, Part 2: Root and Sudo Privileges"><p>Woah, seems a bit soon to be using <code>sudo</code>, no? Well, if we are going to be real command-line warriors, you will undoubtedly need to get familiar with using it to get ahead.</p><h1 id="%60root%60-and-the-reason-for-%60sudo%60">`root` and the reason for `sudo`</h1><p>Almost every desktop or server Linux system has a <code>root</code> user. In the computing world, this is called a <em>superuser.</em> Microsoft also calls this the Administrator. The superuser has full access to all files, folders, processes, and the entire system&#x2014;think of it as a god mode. This is convenient for maintenance tasks for administrators but poses a security concern when placed into the wrong hands.</p><!--kg-card-begin: markdown--><p>The UNIX developers back in the 80s <a href="https://www.sudo.ws/about/history/#:~:text=Sudo%20was%20first%20conceived%20and,11%2F750%20running%204.1BSD.">[source]</a> believed nobody should <i>always</i> have that much power, and rightfully so. Thus, the creation of <code><b>sudo</b></code>, which is an abbreviation of &quot;<u>su</u>peruser <u>do</u>.&quot;</p>
<!--kg-card-end: markdown--><h2 id="so-what-does-%60sudo%60-do">So what does `sudo` do?</h2><p>To simplify, running <code>sudo</code> allows an unprivileged user to become <code>root</code> for a moment. That way, the user can still have administrative rights to the system, and the <code>root</code> user can remain untouched. The &quot;sudoer&quot; will also have to enter their password when they invoke <code>sudo</code>. The sudoer has to hold responsibility for what commands they run.</p><p>It is used by running <code>sudo</code> plus the command that needs to be run with higher privileges. Here are examples with output:</p><figure class="kg-card kg-code-card"><pre><code class="language-shellsession">$ whoami
user
$ sudo whoami
[sudo] password for user: *****
root</code></pre><figcaption>Running <code>whoami</code> without and with <code>sudo</code>.</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-shellsession">$ ls -A /root
ls: cannot open directory &apos;/root&apos;: Permission denied
$ su -
su: Authentication failure
$ sudo su -
[sudo] password for user: *****
# whoami
root
# ls -A /root
.bash_history  .bashrc  .config  secrets.txt
</code></pre><figcaption>You can temporarily switch to the <code>root</code> user using <code>sudo su -</code> if you need to run multiple administrative commands in succession.</figcaption></figure><blockquote>Don&apos;t forget that prompts that start with <code>#</code> are <strong>privileged</strong>, and prompts that start with <code>$</code> are not.</blockquote><hr><h1 id="when-to-use-%60sudo%60">When to use `sudo`</h1><h3 id="when-installing-or-updating-a-package-or-program">When installing or updating a package or program</h3><p>Only the superuser can add or remove packages.</p><pre><code class="language-shellsession">$ sudo apt install htop
$ sudo apt autoremove</code></pre><p>The same goes for system upgrades.</p><pre><code class="language-shellsession">$ sudo apt update
$ sudo apt upgrade</code></pre><p>However, you won&apos;t need it to list and search for packages.</p><pre><code class="language-shellsession">$ apt list --installed
$ apt list --upgradable
$ apt search mat2</code></pre><h3 id="when-making-changes-to-system-files-or-services">When making changes to system files or services</h3><p>Use it when modifying the system on a &quot;broad scale,&quot; such as editing config files, managing services, reading logs, administrating users, and mounting or modifying disks.</p><pre><code class="language-shellsession">$ sudo nano /etc/fstab
$ sudo service sshd restart
$ sudo dmesg | tail
$ sudo usermod -aG docker $USER
$ sudo mount /dev/sdb1 /mnt/mydisk</code></pre><h3 id="when-changing-the-permissions-or-the-owner-of-a-file">When changing the permissions or the owner of a file</h3><p>Here is an example of changing the permissions and the owner of the file <code>secrets.txt</code> in a shared directory:</p><pre><code class="language-shellsession">$ sudo chmod 700 /mnt/share/secrets.txt
$ sudo chown jacob:jacob /mnt/share/secrets.txt</code></pre><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F4E7;</div><div class="kg-callout-text">Like what you&apos;ve read so far? <a href="https://jakespillstea.tech/#/portal/signup">Sign up for free</a> to JakeSpillsTea.tech and be first in line for the latest newsletter releases.</div></div><p></p><hr><h1 id="when-not-to-use-%60sudo%60">When NOT to use `sudo`</h1><h3 id="when-running-a-non-system-related-program-or-when-accessing-the-web">When running a non-system-related program or when accessing the web</h3><p>The superuser doesn&apos;t have to run the unprivileged user&apos;s applications if they don&apos;t require administrative rights. It&apos;s also best practice to download files from the internet only while unprivileged.</p><pre><code class="language-shellsession">$ htop
$ hostname -I
$ date +%r
$ wget https://example.com</code></pre><h3 id="when-reading-and-writing-user-level-files">When reading and writing user-level files</h3><p>It&apos;s not necessary to use <code>sudo</code> to edit any of the files in your home directory.</p><figure class="kg-card kg-code-card"><pre><code class="language-shellsession">$ nano ~/.bashrc
$ cat ~/hello.txt</code></pre><figcaption>Reminder: The tilde <code>~</code> means the logged-in user&apos;s home directory.</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://images.unsplash.com/photo-1591522811280-a8759970b03f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDN8fGNyaXRpY2FsfGVufDB8fHx8MTY3MDc2MDM5Mw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" class="kg-image" alt="Bash Basics, Part 2: Root and Sudo Privileges" loading="lazy" width="3999" height="2666" srcset="https://images.unsplash.com/photo-1591522811280-a8759970b03f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDN8fGNyaXRpY2FsfGVufDB8fHx8MTY3MDc2MDM5Mw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=600 600w, https://images.unsplash.com/photo-1591522811280-a8759970b03f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDN8fGNyaXRpY2FsfGVufDB8fHx8MTY3MDc2MDM5Mw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1000 1000w, https://images.unsplash.com/photo-1591522811280-a8759970b03f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDN8fGNyaXRpY2FsfGVufDB8fHx8MTY3MDc2MDM5Mw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1600 1600w, https://images.unsplash.com/photo-1591522811280-a8759970b03f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDN8fGNyaXRpY2FsfGVufDB8fHx8MTY3MDc2MDM5Mw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2400 2400w" sizes="(min-width: 720px) 720px"><figcaption>Photo by <a href="https://unsplash.com/@markuswinkler?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Markus Winkler</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure><h3 id="when-you-are-unsure-of-the-danger-of-the-command-you-are-entering">When you are unsure of the danger of the command you are entering</h3><p>This is the last but probably the most important point.</p><figure class="kg-card kg-code-card"><pre><code class="language-shellsession">$ rm -rf /
Error: Permission denied</code></pre><figcaption>You have just been saved from erasing the entire disk. <em>Do not try to run this command.</em></figcaption></figure><hr><h1 id="any-other-tips">Any other tips?</h1><p>Yes! If you need elevated privileges for the previously executed command, you can use <code>sudo !!</code>.</p><figure class="kg-card kg-code-card"><pre><code class="language-shellsession">$ mkdir /mnt/data
mkdir: cannot create directory &apos;/mnt/data&apos;: Permission denied
$ sudo !!
[sudo] password for user: *****
$ ls -F /mnt
data/</code></pre><figcaption><code>sudo !!</code> is the same as running <code>sudo mkdir /mnt/data</code>.</figcaption></figure><p>Systems may require you to add the user to the <code>sudo</code> group, or be added to the &quot;sudoers&quot; file with <code>visudo</code>. Some distros, like Fedora, use a privileged group called <code>wheel</code> instead. Other distros and operating systems, like Gentoo and OpenBSD, use <code>doas</code> by default instead of <code>sudo</code>.</p><p>Now, you should have a thorough understanding of superuser privileges inside a Linux system.</p><p><strong>COMING SOON: Bash, Basics, Part 3: Editing, Moving, and Deleting Files</strong></p>]]></content:encoded></item><item><title><![CDATA[Turn Your Old Laptop Into a Proxmox Virtual Machine Server]]></title><description><![CDATA[If you have a decommissioned laptop doing nothing but collecting dust, turning it into a hypervisor for virtual machines is a perfect way to give it a chance at a new life. With Proxmox, you will have the power to spin up concurrent virtual machines to host instances of valuable applications.]]></description><link>https://jakespillstea.tech/turn-your-old-laptop-into-a-hypervisor/</link><guid isPermaLink="false">62c149acd4108b05ea65075c</guid><category><![CDATA[Proxmox]]></category><category><![CDATA[Tutorial]]></category><category><![CDATA[Virtualization]]></category><dc:creator><![CDATA[Jacob Cardinale]]></dc:creator><pubDate>Fri, 09 Dec 2022 20:00:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1603969409447-ba86143a03f6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDEzfHxMYXB0b3B8ZW58MHx8fHwxNjY2Nzk5ODAz&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://images.unsplash.com/photo-1603969409447-ba86143a03f6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDEzfHxMYXB0b3B8ZW58MHx8fHwxNjY2Nzk5ODAz&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Turn Your Old Laptop Into a Proxmox Virtual Machine Server"><p>If you have a decommissioned laptop doing nothing but collecting dust, turning it into a hypervisor for virtual machines is a perfect way to give it a chance at a new life. Using this setup, you will have the power to spin up concurrent virtual machines for media, file sharing, programming, networking, security, web serving, appliances, and so much more.</p>
<!--kg-card-end: markdown--><h2 id="why-use-a-laptop-out-of-all-hardware">Why use a laptop out of all hardware? </h2><p>Here are a few practical reasons:</p><ol><li>It already has a screen and keyboard, eliminating the need to connect those in the future when you inevitably need to troubleshoot the server. </li><li>A battery powers it, so it will be unaffected during short power outages and give you time for safe shutdowns during longer ones.</li><li>It draws much less power than a regular PC or server while providing comparably good performance.</li></ol><p>The cons of using a laptop as a server would be <strong>limited potential for expansion, upgradability, and reparability.</strong> Laptops don&apos;t have PCIe slots, so you can&apos;t add a dedicated GPU or other expansion cards. They are limited to only one or two storage drive bays. Laptops are also more likely to utilize proprietary parts. The CPU is soldered on, and the RAM may or may not be upgradeable. </p><p>However, I don&apos;t think most home users and hobbyists will be affected by these drawbacks. Just bear in mind the limitations, and you will have success in your self-hosted virtualization endeavor.</p><p>What you will need at a minimum requirement:</p><ul><li>A working 64-bit laptop <strong>with an ethernet port</strong></li><li>An ethernet cable</li><li>A USB flash drive or SD card 1GB minimum (or if not, a DVD drive and blank CD/DVD)</li></ul><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F4A1;</div><div class="kg-callout-text">You <em>don&apos;t have to </em>use a laptop. Proxmox will run on any x86_64 computer that has virtualization support. I recommend laptops because most people probably already have one they do not use.</div></div><h1 id="installation">Installation</h1><p>First things first, let&apos;s create a bootable USB flash drive.</p><p>Go to <a href="https://www.proxmox.com/en/downloads">https://www.proxmox.com/en/downloads</a> and download the latest Proxmox Virtual Environment ISO installer. Proxmox is based on good ol&apos; Debian, so it is guaranteed to be a stable experience. You will also need <a href="https://www.balena.io/etcher/">balenaEtcher</a> to flash the ISO image to the USB drive.</p><p>Plug in your USB flash drive and open up balenaEtcher. Once it&apos;s open, click on &quot;Flash from file&quot; and choose the Proxmox installer ISO you downloaded earlier. Select the USB drive you&apos;ve plugged in as your target, then flash!</p><figure class="kg-card kg-image-card"><img src="https://jakespillstea.tech/content/images/2022/11/image-3.png" class="kg-image" alt="Turn Your Old Laptop Into a Proxmox Virtual Machine Server" loading="lazy" width="802" height="507" srcset="https://jakespillstea.tech/content/images/size/w600/2022/11/image-3.png 600w, https://jakespillstea.tech/content/images/2022/11/image-3.png 802w" sizes="(min-width: 720px) 720px"></figure><p>You can close Etcher and eject your USB drive when that&apos;s finished. </p><blockquote>If you don&apos;t have a USB stick or SD card available but you <em><strong>do</strong></em> have a DVD-RW drive and a blank CD or DVD, you can accomplish the same feat with CDBurnerXP.</blockquote><h2 id="prerequisites-changing-bios-settings">Prerequisites (changing BIOS settings)</h2><p>We will have to change a few settings in the computer&apos;s BIOS/UEFI. To do this, you will have to enter the system settings. There&apos;s a different method for each laptop manufacturer. For most, <strong>it&apos;ll show you which key to press during the BIOS boot screen,</strong> something like <code>ESC</code>, <code>F1</code>, <code>F2</code>, <code>F8</code>, <code>F9</code>, <code>F12</code>, or <code>DEL</code>. On some Lenovo laptops, you press the &quot;Novo Button&quot; on the side. You can also look up the model of your computer if you&apos;re still unsure.</p><p>This step is essential, or else you won&apos;t be able to run any virtual machines. You will need to enable virtualization extensions for your computer&apos;s processor. On Intel CPUs, this is called VT-x, and on AMD, it&apos;s AMD-V. It might also be called &quot;SVM mode.&quot; You will likely find this setting under the &quot;Security&quot; tab.</p><blockquote>You&apos;ll also want to enable VT-d (or IOMMU for AMD) if you plan on doing any PCIe passthroughs in the future.</blockquote><h2 id="installing-proxmox">Installing Proxmox</h2><p>It&apos;s finally time to install! Insert the USB stick into your laptop and connect it to your network with an Ethernet cable. Getting to the boot menu is similar or the same as getting to the BIOS menu. Select the USB disk to boot from, and soon you will be presented with the Proxmox Installer. Press enter on &quot;Install Proxmox VE.&quot;</p><figure class="kg-card kg-image-card"><img src="https://jakespillstea.tech/content/images/2022/12/image-4-1.png" class="kg-image" alt="Turn Your Old Laptop Into a Proxmox Virtual Machine Server" loading="lazy" width="1022" height="763" srcset="https://jakespillstea.tech/content/images/size/w600/2022/12/image-4-1.png 600w, https://jakespillstea.tech/content/images/size/w1000/2022/12/image-4-1.png 1000w, https://jakespillstea.tech/content/images/2022/12/image-4-1.png 1022w" sizes="(min-width: 720px) 720px"></figure><p>Agree to the EULA and select the internal drive to install Proxmox from the dropdown menu.</p><figure class="kg-card kg-image-card"><img src="https://jakespillstea.tech/content/images/2022/12/image-1.png" class="kg-image" alt="Turn Your Old Laptop Into a Proxmox Virtual Machine Server" loading="lazy" width="1177" height="843" srcset="https://jakespillstea.tech/content/images/size/w600/2022/12/image-1.png 600w, https://jakespillstea.tech/content/images/size/w1000/2022/12/image-1.png 1000w, https://jakespillstea.tech/content/images/2022/12/image-1.png 1177w" sizes="(min-width: 720px) 720px"></figure><p>On the next page, pick your country, timezone, and keyboard layout. Then hit next.</p><p>Set a strong password for the root user and put in your email address to receive important alerts from the server. Hit next.</p><figure class="kg-card kg-image-card"><img src="https://jakespillstea.tech/content/images/2022/12/image.png" class="kg-image" alt="Turn Your Old Laptop Into a Proxmox Virtual Machine Server" loading="lazy" width="1163" height="816" srcset="https://jakespillstea.tech/content/images/size/w600/2022/12/image.png 600w, https://jakespillstea.tech/content/images/size/w1000/2022/12/image.png 1000w, https://jakespillstea.tech/content/images/2022/12/image.png 1163w" sizes="(min-width: 720px) 720px"></figure><p>Now, time to set up networking. Choose the ethernet network adapter from the dropdown; it will be something like <code>eth0</code> or <code>enp0</code>. Don&apos;t pick the one that&apos;s <code>wifi0</code> or <code>wlan0</code>.</p><p>Let&apos;s skip the hostname and go straight to the last three fields. I will ask you, the reader, to pull up the Wi-Fi settings on your phone. It will make this part easier to understand if you&apos;re unfamiliar. </p><p>Tap on the info (&#x2139;) button next to your home&apos;s Wi-Fi network. Look for the following four IPv4 settings: IP address, Subnet Mask, Router/Gateway, and DNS. Here is what mine looks like on my iPhone:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://jakespillstea.tech/content/images/2022/12/AE8449C6-ECA5-4E45-9499-B9006491DBFB.jpeg" class="kg-image" alt="Turn Your Old Laptop Into a Proxmox Virtual Machine Server" loading="lazy" width="1280" height="697" srcset="https://jakespillstea.tech/content/images/size/w600/2022/12/AE8449C6-ECA5-4E45-9499-B9006491DBFB.jpeg 600w, https://jakespillstea.tech/content/images/size/w1000/2022/12/AE8449C6-ECA5-4E45-9499-B9006491DBFB.jpeg 1000w, https://jakespillstea.tech/content/images/2022/12/AE8449C6-ECA5-4E45-9499-B9006491DBFB.jpeg 1280w" sizes="(min-width: 720px) 720px"><figcaption>The router IP can also be something like 192.168.1.1.</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://jakespillstea.tech/content/images/2022/12/6251896C-545F-4BAE-87BD-0B5CC73B7004.jpeg" class="kg-image" alt="Turn Your Old Laptop Into a Proxmox Virtual Machine Server" loading="lazy" width="1280" height="985" srcset="https://jakespillstea.tech/content/images/size/w600/2022/12/6251896C-545F-4BAE-87BD-0B5CC73B7004.jpeg 600w, https://jakespillstea.tech/content/images/size/w1000/2022/12/6251896C-545F-4BAE-87BD-0B5CC73B7004.jpeg 1000w, https://jakespillstea.tech/content/images/2022/12/6251896C-545F-4BAE-87BD-0B5CC73B7004.jpeg 1280w" sizes="(min-width: 720px) 720px"><figcaption>I have manual DNS assigned; you likely have automatic.</figcaption></figure><p>Copy the IP addresses for your Router/Gateway and DNS Server to Proxmox. If your Subnet Mask is <code>255.255.255.0</code>, leave the CIDR notation as <code>24</code>. If not, follow this <a href="https://static.docsity.com/documents_first_pages/2019/09/02/7486fd161a127c39d507cb5034e13972.png">cheat sheet</a>.</p><p>Next, assign a <a href="https://www.lifewire.com/using-static-ip-address-on-private-computer-818404">static IP</a> address to your new Proxmox machine. I recommend just picking the IP address that is right after the one your phone has. My phone is <code>10.0.0.110</code>, so for convenience&apos;s sake, I&apos;ll assign <code>10.0.0.111</code> to Proxmox.</p><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F4A1;</div><div class="kg-callout-text">Dear advanced users: I know that&apos;s probably a sketchy way to assign a static IP, but what are the chances that the next IP will already have a DHCP assignment? &#x1F937;&#x200D;&#x2642;&#xFE0F;</div></div><p>Okay, back to the hostname. Proxmox is asking for a fully qualified domain name (FQDN), so you should come up with a hostname <em>and</em> domain name for your home network and add <code>.local</code> to the end of that. It should look something like <code>myhostname.myhomenetwork.local</code>.</p><p>Here is my final network configuration:</p><figure class="kg-card kg-image-card"><img src="https://jakespillstea.tech/content/images/2022/12/image-4.png" class="kg-image" alt="Turn Your Old Laptop Into a Proxmox Virtual Machine Server" loading="lazy" width="1197" height="854" srcset="https://jakespillstea.tech/content/images/size/w600/2022/12/image-4.png 600w, https://jakespillstea.tech/content/images/size/w1000/2022/12/image-4.png 1000w, https://jakespillstea.tech/content/images/2022/12/image-4.png 1197w" sizes="(min-width: 720px) 720px"></figure><p>Confirm all the information on the following summary page, and install and reboot.</p><h1 id="post-installation">Post-installation</h1><p>Open a web browser on another PC and navigate to https://x.x.x.x:8006 (replace x.x.x.x with the server&apos;s IP address). It might say that &quot;the following website is untrusted&quot; or &quot;may be trying to steal your information,&quot; but you need not worry; that is only because the <a href="https://www.keyfactor.com/blog/self-signed-certificate-risks/">SSL certificate is self-signed</a> by Proxmox and not by a Certificate Authority (CA). No data is being stolen; this server is running inside your local network and is set up by you.</p><p>Log in as the root user and the password that you set earlier. Now, if you are running on a laptop, this next part will show you how to turn off automatic sleep when the laptop lid is closed. Instead, we will make it so that the screen turns off when the lid is shut, but the laptop stays powered on. Here&apos;s how to do it.</p><p>Open the shell for the root user. You will need to edit the configuration file that controls suspend lid switch. Do this by running <code>nano /etc/systemd/logind.conf</code>.</p><p>Look for each of the following lines in the <code>logind.conf</code> file:</p><figure class="kg-card kg-code-card"><pre><code>#HandleSuspendKey=suspend
#HandleLidSwitch=suspend
#HandleLidSwitchDocked=ignore</code></pre><figcaption>They will not be right next to each other like in this example; find each separate line.</figcaption></figure><p>Change those lines to look like this instead:</p><figure class="kg-card kg-code-card"><pre><code>HandleSuspendKey=ignore
HandleLidSwitch=ignore
HandleLidSwitchDocked=ignore</code></pre><figcaption>Don&apos;t forget to un-comment the lines by removing the <code>#</code> at the start of the line.</figcaption></figure><p>Hit Ctrl+X to save and exit, then reboot the server.</p><p>Congratulations! You have successfully installed Proxmox Virtual Environment. Have a look around and have fun installing some virtual machines and containers.</p><p><strong>COMING SOON: 4 Things to Do After Installing Proxmox</strong></p>]]></content:encoded></item><item><title><![CDATA[Running a Q35 Virtual Machine Is, In Fact, Possible Under TrueNAS SCALE]]></title><description><![CDATA[KVM/QEMU on TrueNAS SCALE doesn't have an option to use Q35 as a machine type, nor a choice for an emulated Realtek NIC or even vmxnet3. Luckily, these limitations are only a problem in the web GUI.]]></description><link>https://jakespillstea.tech/run-esxi-in-truenas-scale-nested-hypervisors/</link><guid isPermaLink="false">637d0fbfe18f4206a1cea07c</guid><category><![CDATA[Virtualization]]></category><category><![CDATA[Tutorial]]></category><category><![CDATA[Essay]]></category><dc:creator><![CDATA[Jacob Cardinale]]></dc:creator><pubDate>Sat, 03 Dec 2022 01:20:08 GMT</pubDate><content:encoded><![CDATA[<p>What an adventure this was.</p><p>The context here is interesting, to say the least. I have a friend who needed to run VMware ESXi for school, but didn&apos;t have the immediate hardware available. The compromise was to virtualize ESXi on a bare metal TrueNAS SCALE server.</p><p>Why not just install ESXi bare metal, you ask? Well, the CPU is a Ryzen 5 5600G, and we were looking to utilize the Radeon integrated graphics for hardware transcoding, and didn&apos;t want to deal with the likely-complicated GPU passthrough it would involve. So, nested hypervisors it was.</p><p>We tested two different versions of ESXi, version 6.7 and 7.0. We started by creating our VMs the normal way using the built-in TrueNAS web GUI. ESXi version 6.7 would kernel panic during initialization; probably because the machine type was i440fx and not Q35. Q35 is crucial because it is a more modern machine type and supports <a href="https://cloud.google.com/compute/docs/instances/nested-virtualization/overview">nested virtualization</a>. Version 7.0 did not kernel panic, but it complained that there was no supported network interface card. There is no support for VirtIO or e1000 drivers in this version of ESXi.</p><p>This is where the limitations of TrueNAS SCALE started to creep up. Unlike Proxmox, KVM/QEMU in TrueNAS SCALE does not have a option to choose Q35 as a machine type, i440fx is the only option. Secondly, there was no choice for an emulated Realtek NIC or even <a href="https://kb.vmware.com/s/article/1001805">vmxnet3</a>, VMware&apos;s paravirtualized NIC they use in their hypervisors. <em>Luckily, these limitations are only a problem in the web GUI.</em></p><p>So, where do we go from here? After hours of research, I learned that every action in TrueNAS SCALE is controlled via the <a href="https://www.truenas.com/docs/api/scale_websocket_api.html">TrueNAS Websocket API</a>. This API is also accessible via the command line. This allowed me to go under the hood and figure out how to <em>manually</em> create a q35-based virtual machine. I also got help from <code>virsh</code> to make a network interface supported by VMware&apos;s trademark hypervisor.</p><h2 id="here-is-how-i-did-it">Here is how I did it.</h2><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x26A0;&#xFE0F;</div><div class="kg-callout-text">Everything in <code>{brackets}</code> needs to be replaced with your own syntax. <br>All commands will need to be run as root.</div></div><!--kg-card-begin: markdown--><ol>
<li>You will need to create a new virtual machine from the command line. Open the TrueNAS API CLI by running <code>cli</code> in the TrueNAS root shell and run the following command:</li>
</ol>
<pre><code>service vm create cpu_mode=&quot;HOST-PASSTHROUGH&quot; cpu_model=null name=&quot;esxi&quot; machine_type=&quot;q35&quot; memory=1024 arch_type=x86_64
</code></pre>
<p style="margin-left: 25px;">Then exit the CLI with <code>exit</code>.</p>
<ol start="2">
<li>Open up the web GUI for TrueNAS and navigate to the VM &quot;esxi&quot; under Virtualization. <br>Edit the CPU cores, threads, and memory to be something reasonable and save the changes. <br> Next, click on &quot;Devices&quot;. <br>Add a <strong>DISPLAY</strong> device and make it 1024x768. <br>Add a <strong>CDROM</strong> and point it to the path where the ESXi installer ISO is located. <br>Add a <strong>DISK</strong> for the OS installation and make it 32GB. <br>Add a <strong>second DISK</strong> as big as you need for your ESXi storage pool. <mark>Make sure both disks are AHCI.</mark> <br>Lastly, add a <strong>NIC</strong> with the adapter type e1000. We won&apos;t be using it, but we have to have one so QEMU can do the witchcraft that makes attaching a NIC possible in the first place. <br>Write down the name of your TrueNAS host&apos;s NIC in the field &quot;Nic to attach&quot; (It will be something like <code>enp6s18</code>). We will need it for step 5.</li>
<li>Go back to the shell and create an alias for <code>virsh</code> so you can easily connect to the QEMU libvirt socket.</li>
</ol>
<pre><code>alias virsh=&apos;virsh -c &quot;qemu+unix:///system?socket=/run/truenas_libvirt/libvirt-sock&quot; $1&apos;
</code></pre>
<blockquote>
<p>I recommend including the alias in your <code>.zshrc</code> or aliases file for future convenience. The next command will do it for you automagically.</p>
</blockquote>
<pre><code>echo $&apos;alias virsh=\&apos;virsh -c &quot;qemu+unix:///system?socket=/run/truenas_libvirt/libvirt-sock&quot; $1\&apos;&apos; &gt;&gt; ~/.zshrc
</code></pre>
<ol start="4">
<li>List all the virtual machines with <code>virsh list --all</code> and write down the name of the virtual machine we created. It will be something like <code>1_esxi</code>. Virsh also likes to call this the &quot;domain&quot;.</li>
<li>Start the virtual machine via web GUI, or alternatively run <code>midclt call vm.start {id}</code> where <code>{id}</code> is the number that&apos;s in front of <code>_esxi</code>. <br><em><strong>Quickly</strong></em> attach a new vmxnet3 network interface to the virtual machine with the below command before ESXi loads all the way. Replace {VM name} and {host NIC} with that you recorded in steps 2 and 4.</li>
</ol>
<pre><code>virsh attach-interface --domain {VM name} --source {host NIC} --type direct --model vmxnet3 --mac 1a:22:33:44:55:66 --config --live
</code></pre>
<p>It should return with &quot;Interface attached successfully.&quot; You can also double check and list attached network interfaces with <code>virsh domiflist {VM name}</code>. You should see the vmxnet3 and e1000 devices on the list.</p>
<!--
You can make the mac address anything your hard desires, but the second hex character of the MAC address (e.g. the character `a` in `0a:00:00:00:00:00`) MUST be one of these hexes only: `2` `6` `a` `e`
-->
<p>Voila, now you have a nested hypervisor that&apos;s running on supported virtual hardware! There is only one drawback: The vmxnet3 NIC does not persist between shutdowns of the virtual machine. If you shut down the VM, you will have to repeat step 5 every time you boot it back up. You may be able to automate re-adding the NIC with a script or alias, but I did not try that. You <em>could</em> also try to <a href="https://4sysops.com/archives/install-esxi-network-drivers-for-intel-e1000-and-intel-i220-i221-i225-i226-chipsets/">install the drivers for the e1000 nic</a>, but I have not tested that.</p>
<!--kg-card-end: markdown--><p>The most ironic part of this story is that we couldn&apos;t use the Radeon graphics for video transcoding, anyway. C&apos;est la vie!</p>]]></content:encoded></item><item><title><![CDATA[Bash Basics, Part 1: Navigating the Filesystem and Reading Files]]></title><description><![CDATA[<p>Congratulations! You have successfully <a href="https://jakespillstea.tech/three-ways-you-can-start-using-linux-today/">installed your favorite distribution of Linux</a>. <em>Now what?</em></p><p>In my opinion, one of the best ways to get acquainted with Linux is to dive head-first into the command line. That&apos;s right, pin that terminal emulator to your taskbar, because ideally, you will be using</p>]]></description><link>https://jakespillstea.tech/bash-command-line-basics/</link><guid isPermaLink="false">631f80a744d08506b4ab8fb8</guid><category><![CDATA[Bash]]></category><dc:creator><![CDATA[Jacob Cardinale]]></dc:creator><pubDate>Fri, 28 Oct 2022 16:00:23 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1495153003981-0945a0a25e46?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDI5fHxDb21wYXNzfGVufDB8fHx8MTY2MzA4MTM2Mg&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1495153003981-0945a0a25e46?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDI5fHxDb21wYXNzfGVufDB8fHx8MTY2MzA4MTM2Mg&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files"><p>Congratulations! You have successfully <a href="https://jakespillstea.tech/three-ways-you-can-start-using-linux-today/">installed your favorite distribution of Linux</a>. <em>Now what?</em></p><p>In my opinion, one of the best ways to get acquainted with Linux is to dive head-first into the command line. That&apos;s right, pin that terminal emulator to your taskbar, because ideally, you will be using it <em>a lot</em>. </p><p>The command line is the most powerful way to interact with your computer. A <strong>shell</strong> is a software that opens up the operating system&apos;s services to the user. The Bourne-Again Shell, or <strong>bash</strong>, is the default shell in most Linux distributions.</p><p>This lesson will show you the top commands I use to navigate the Linux filesystem.</p><h1 id="the-bash-prompt">The bash prompt</h1><p>In most Debian-based distributions of Linux, the default bash prompt comprises four elements: the username, the hostname, the working directory, and the prompt sign. It kind of looks like a funny email address.</p><figure class="kg-card kg-image-card"><img src="https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_103208.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="490" height="44"></figure><ul><li><code>jacob</code>: This is the username of the currently logged-in user.</li><li><code>starbook</code>: The hostname of the device you are working on.</li><li><code>~</code>: This is the current working directory. More on this later.</li><li><code>$</code>: This is my prompt sign. A dollar symbol <code>$</code> means the prompt is for a regular user, and a hash symbol <code>#</code> means the prompt is for a privileged user, most often the <em>superuser, </em>A.K.A. &quot;root&quot;<em>.</em></li><li>The cursor at the end is where you write your commands.</li></ul><hr><h1 id="navigating-the-filesystem">Navigating the filesystem</h1><h2 id="pwd">pwd</h2><p><code>pwd</code> is an acronym for &quot;print working directory&quot;. When you run this command, the shell will tell you what directory (A.K.A file folder) you are currently working in. Neat!</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://jakespillstea.tech/content/images/2022/09/Screenshot_20220912_180939.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="976" height="109" srcset="https://jakespillstea.tech/content/images/size/w600/2022/09/Screenshot_20220912_180939.png 600w, https://jakespillstea.tech/content/images/2022/09/Screenshot_20220912_180939.png 976w" sizes="(min-width: 720px) 720px"><figcaption>&quot;pwd&quot; prints the directory &quot;/home/jacob&quot;. This is my home folder.&#xA0;</figcaption></figure><h2 id="ls">ls</h2><p><code>ls</code> is used to list files. Let&apos;s run it without any syntax.</p><figure class="kg-card kg-image-card"><img src="https://jakespillstea.tech/content/images/2022/09/Screenshot_20220912_220505.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="972" height="142" srcset="https://jakespillstea.tech/content/images/size/w600/2022/09/Screenshot_20220912_220505.png 600w, https://jakespillstea.tech/content/images/2022/09/Screenshot_20220912_220505.png 972w" sizes="(min-width: 720px) 720px"></figure><p>We can now see a list of directories in the home folder of the user <code>jacob</code>. Let&apos;s try to list the files in the Tutorials folder by adding &quot;Tutorials&quot; to the end of <code>ls</code>. By the way, it&apos;s important to know that everything in Linux is <em>case-sensitive!</em></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://jakespillstea.tech/content/images/2022/09/Screenshot_20220912_220752.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="975" height="110" srcset="https://jakespillstea.tech/content/images/size/w600/2022/09/Screenshot_20220912_220752.png 600w, https://jakespillstea.tech/content/images/2022/09/Screenshot_20220912_220752.png 975w" sizes="(min-width: 720px) 720px"><figcaption>&quot;ls&quot; yields 3 results in my &quot;Tutorials&quot; folder.</figcaption></figure><p>We can now see two files and one directory inside the &quot;Tutorials&quot; folder. Directories are shown in blue.</p><blockquote>Tip: You can add arguments to <code>ls</code> to change how it works. For example, <code>ls -l</code> will list files one per line. Try it!</blockquote><h2 id="cd">cd</h2><p><code>cd</code> is an acronym for &quot;change directory&quot; (most of these commands are self-explanatory once you learn what they&apos;re short for.) Use <code>cd</code> plus the name of the folder you want to change to. Let&apos;s change to the folder <code>Tutorials</code>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://jakespillstea.tech/content/images/2022/09/Screenshot_20220912_224721.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="973" height="215" srcset="https://jakespillstea.tech/content/images/size/w600/2022/09/Screenshot_20220912_224721.png 600w, https://jakespillstea.tech/content/images/2022/09/Screenshot_20220912_224721.png 973w" sizes="(min-width: 720px) 720px"><figcaption>I used &quot;pwd&quot; to show we are now working in the Tutorials folder.</figcaption></figure><p>As a prerequisite for what&apos;s about to happen next, the Linux filesystem needs some explanation for a better learning experience. &#xA0;In *nix filesystems, a tilde <code>~</code> is an alias for the user&apos;s home directory. One dot <code>.</code> aliases the current directory, and two dots <code>..</code> alias the parent directory.</p><p>So, now that we have changed to the &quot;Tutorials&quot; directory, how do we go back? How do we move up the file tree? Well, using what we just learned, if we run <code>cd ..</code>, we will move into the parent directory, which is <code>/home/jacob</code>, or <code>~</code>. </p><figure class="kg-card kg-image-card"><img src="https://jakespillstea.tech/content/images/2022/09/Screenshot_20220912_232711.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="975" height="145" srcset="https://jakespillstea.tech/content/images/size/w600/2022/09/Screenshot_20220912_232711.png 600w, https://jakespillstea.tech/content/images/2022/09/Screenshot_20220912_232711.png 975w" sizes="(min-width: 720px) 720px"></figure><p>You can also run something like <code>cd ../..</code> to move up two directories, where you would find yourself at <strong>the</strong><em> </em><strong>root of the filesystem, </strong>resembled as <code>/</code>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://jakespillstea.tech/content/images/2022/09/Screenshot_20220912_225018.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="978" height="317" srcset="https://jakespillstea.tech/content/images/size/w600/2022/09/Screenshot_20220912_225018.png 600w, https://jakespillstea.tech/content/images/2022/09/Screenshot_20220912_225018.png 978w" sizes="(min-width: 720px) 720px"><figcaption>You can also get to the root of the filesystem with <code>cd /</code>.</figcaption></figure><p>If you ever get too lost, use <code>cd ~</code> to get right back to your home folder, or <code>cd -</code> to get back to your previous folder.</p><blockquote>Tip: You can use the <code>TAB</code> key to autocomplete commands, filenames, and pathnames in bash.</blockquote><h2 id="tree">tree</h2><p>One more nice command to add to your toolbelt is <code>tree</code>. This will print all the files, directories, and subdirectories like branches on a tree. A handy option for those who are visual learners.</p><figure class="kg-card kg-image-card"><img src="https://jakespillstea.tech/content/images/2022/09/Screenshot_20220912_231358.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="978" height="321" srcset="https://jakespillstea.tech/content/images/size/w600/2022/09/Screenshot_20220912_231358.png 600w, https://jakespillstea.tech/content/images/2022/09/Screenshot_20220912_231358.png 978w" sizes="(min-width: 720px) 720px"></figure><hr><h1 id="reading-and-viewing-files">Reading and viewing files</h1><h2 id="file">file</h2><p>This one is pretty easy. <code>file</code> will determine the file type for a given file.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_000446.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="976" height="360" srcset="https://jakespillstea.tech/content/images/size/w600/2022/09/Screenshot_20220913_000446.png 600w, https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_000446.png 976w" sizes="(min-width: 720px) 720px"><figcaption>&quot;file&quot; determines a directory, a text file, and an executable binary.</figcaption></figure><h2 id="cat">cat</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://images.unsplash.com/photo-1514888286974-6c03e2ca1dba?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGNhdHxlbnwwfHx8fDE2NjMwNTQyNTA&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="5026" height="3458" srcset="https://images.unsplash.com/photo-1514888286974-6c03e2ca1dba?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGNhdHxlbnwwfHx8fDE2NjMwNTQyNTA&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=600 600w, https://images.unsplash.com/photo-1514888286974-6c03e2ca1dba?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGNhdHxlbnwwfHx8fDE2NjMwNTQyNTA&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=1000 1000w, https://images.unsplash.com/photo-1514888286974-6c03e2ca1dba?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGNhdHxlbnwwfHx8fDE2NjMwNTQyNTA&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=1600 1600w, https://images.unsplash.com/photo-1514888286974-6c03e2ca1dba?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGNhdHxlbnwwfHx8fDE2NjMwNTQyNTA&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2400 2400w" sizes="(min-width: 720px) 720px"><figcaption>Photo by <a href="https://unsplash.com/@madhatterzone?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Manja Vitolic</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure><p>Unfortunately, this has nothing to do with the furry four-legged overlords of the internet. <code>cat</code> is used to &quot;concatenate files and print on the standard output&quot;. In layman&apos;s terms, it will print whatever contents are inside a file. I&apos;ll <code>cat</code> the contents of the file <code>~/Tutorials/hello</code>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://jakespillstea.tech/content/images/2022/09/Screenshot_20220912_230326.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="974" height="109" srcset="https://jakespillstea.tech/content/images/size/w600/2022/09/Screenshot_20220912_230326.png 600w, https://jakespillstea.tech/content/images/2022/09/Screenshot_20220912_230326.png 974w" sizes="(min-width: 720px) 720px"><figcaption>A very important message from the text file titled &quot;hello&quot;.</figcaption></figure><h2 id="less">less</h2><p>Sometimes, you will come across a file that is hundreds, thousands, or many more lines long. If you tried using <code>cat</code> on a file like that, it would just vomit the entire file, line by line, to your terminal. That&apos;s not very helpful. Here is where <code>less</code> is more. </p><p><code>less</code> will open a file in a nice interactive interface that supports scrolling and searching. I&apos;m going to run <code>less bees</code> to read the file &quot;bees&quot;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_104345.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="976" height="475" srcset="https://jakespillstea.tech/content/images/size/w600/2022/09/Screenshot_20220913_104345.png 600w, https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_104345.png 976w" sizes="(min-width: 720px) 720px"><figcaption>Oh look, it&apos;s the script for Jerry Seinfeld&apos;s <em>Bee Movie.</em></figcaption></figure><p>You can use the arrow keys or scroll wheel/touchpad to scroll through the document. You can also use the <code>HOME</code>, <code>PGUP</code>, <code>PGDN</code>, and <code>END</code> keys to navigate.</p><p><code>less</code> also has a search function. With the text file open, type forward slash <code>/</code> then the string of text you want to search for. I&apos;m going to type <code>/Barry</code>.</p><figure class="kg-card kg-image-card"><img src="https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_114508.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="975" height="480" srcset="https://jakespillstea.tech/content/images/size/w600/2022/09/Screenshot_20220913_114508.png 600w, https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_114508.png 975w" sizes="(min-width: 720px) 720px"></figure><p>Press <code>ENTER</code> after typing the string that you want to search.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_114643.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="974" height="468" srcset="https://jakespillstea.tech/content/images/size/w600/2022/09/Screenshot_20220913_114643.png 600w, https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_114643.png 974w" sizes="(min-width: 720px) 720px"><figcaption>less jumps to the first instance of &quot;Barry&quot; and highlights it.</figcaption></figure><p>Use <code>n</code> and <code>N</code> to jump back and forth between your search string&apos;s next and previous instance (&quot;Barry&quot;).</p><figure class="kg-card kg-image-card"><img src="https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_115038.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="973" height="464" srcset="https://jakespillstea.tech/content/images/size/w600/2022/09/Screenshot_20220913_115038.png 600w, https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_115038.png 973w" sizes="(min-width: 720px) 720px"></figure><p>You can exit <code>less</code> by typing <code>q</code>.</p><h2 id="head-and-tail">head and tail</h2><p>And shoulders, knees, and toes! Just kidding. <code>head</code> and <code>tail</code> will output the first or the last part of a file. </p><p>By default, these commands will output the first or the last 10 lines of the document; we can also define how many lines to output with the argument <code>--lines</code>. Let&apos;s try it on the file <code>bees</code>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_145615.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="974" height="239" srcset="https://jakespillstea.tech/content/images/size/w600/2022/09/Screenshot_20220913_145615.png 600w, https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_145615.png 974w" sizes="(min-width: 720px) 720px"><figcaption>&apos;head&apos; prints only the first five lines with the argument &apos;--lines 5&apos;.</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_145802.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="974" height="238" srcset="https://jakespillstea.tech/content/images/size/w600/2022/09/Screenshot_20220913_145802.png 600w, https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_145802.png 974w" sizes="(min-width: 720px) 720px"><figcaption>&apos;tail&apos; prints only the last five lines with the argument &apos;--lines 5&apos;.</figcaption></figure><p><code>head</code> and <code>tail</code> also have another argument <code>--bytes</code> that will let you specify exactly how many bytes will be printed. I think you might be getting the hang of how this works now. ;)</p><h2 id="grep">grep</h2><p><code>grep</code> is probably one of the more advanced commands out of the group, but surely one of the most useful and beneficial to learn early on. It&apos;s fantastic when piped with another command that prints many lines.</p><p><code>grep</code> by definition prints lines that match patterns. In other words, it filters out lines of text that don&apos;t match your &quot;search pattern&quot;. Let&apos;s use <code>grep</code> to find the word &quot;bee&quot; in my text file &quot;bees&quot;. <em>Don&apos;t forget that everything is case-sensitive.</em></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_090656.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="973" height="478" srcset="https://jakespillstea.tech/content/images/size/w600/2022/09/Screenshot_20220913_090656.png 600w, https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_090656.png 973w" sizes="(min-width: 720px) 720px"><figcaption><code>grep</code> prints every line that contains the word &quot;bee&quot;.</figcaption></figure><p>You can also wrap the search pattern in quotation marks <code>&quot;&quot;</code> or <code>&apos;&apos;</code> if it&apos;s more than one word.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://jakespillstea.tech/content/images/2022/10/Screenshot_20221025_191023.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="974" height="404" srcset="https://jakespillstea.tech/content/images/size/w600/2022/10/Screenshot_20221025_191023.png 600w, https://jakespillstea.tech/content/images/2022/10/Screenshot_20221025_191023.png 974w" sizes="(min-width: 720px) 720px"><figcaption>You probably want to use single (not double) quotation marks most of the time.</figcaption></figure><p>Previously, I said that another command could be &quot;piped&quot; into <code>grep</code>. What does a pipe <code>|</code> exactly do? It takes the output text that would otherwise be printed to your terminal, and instead &quot;pipes&quot; it into another command to use as input. To demonstrate, I&apos;ll execute <code>cat ~/Tutorials/bees | grep bee</code>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_091520.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="975" height="473" srcset="https://jakespillstea.tech/content/images/size/w600/2022/09/Screenshot_20220913_091520.png 600w, https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_091520.png 975w" sizes="(min-width: 720px) 720px"><figcaption>&quot;cat bees | grep bee&quot; yields the same result as &quot;grep bee bee&quot;.</figcaption></figure><p>The output of <code>cat bees</code> is fed into the input of <code>grep bee</code>. Let&apos;s try another example. There is a file in the Linux filesystem called <code>/proc/cpuinfo</code>. Let&apos;s search that file for the pattern &quot;MHz&quot; to print to the terminal how fast the CPU is clocked at any given moment. I&apos;ll run <code>cat /proc/cpuinfo | grep MHz</code>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://jakespillstea.tech/content/images/2022/10/Screenshot_20221025_194020.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="975" height="352" srcset="https://jakespillstea.tech/content/images/size/w600/2022/10/Screenshot_20221025_194020.png 600w, https://jakespillstea.tech/content/images/2022/10/Screenshot_20221025_194020.png 975w" sizes="(min-width: 720px) 720px"><figcaption>&quot;cat /proc/cpuinfo | grep MHz&quot; shows my CPU running at 2.8 GHz.</figcaption></figure><p>Hopefully, you&apos;re now seeing the usefulness of this command. Let&apos;s try another. We will use <code>dmesg</code>, a command that prints the <strong>kernel message buffer</strong>, a sort of system log. I&apos;m going to run <code>dmesg | grep nvme</code> to print every kernel message with the pattern &quot;nvme&quot;.</p><blockquote>WARNING: <code>dmesg</code> must be run as root for this to work!</blockquote><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_103128.png" class="kg-image" alt="Bash Basics, Part 1: Navigating the Filesystem and Reading Files" loading="lazy" width="974" height="384" srcset="https://jakespillstea.tech/content/images/size/w600/2022/09/Screenshot_20220913_103128.png 600w, https://jakespillstea.tech/content/images/2022/09/Screenshot_20220913_103128.png 974w" sizes="(min-width: 720px) 720px"><figcaption>Every line from the kernel message buffer with the pattern &quot;nvme&quot;.</figcaption></figure><p>You can also do tricks like piping <code>cat</code> into <code>grep</code> into <code>less</code> if you really wanted. You can mix and match different commands to get sophisticated results. The shell is your... oyster!</p><hr><p> Consider this just a brief overview. All these commands have many different arguments that change their behavior, but you will learn them all in time with practice. Hopefully, you have been properly showcased the power of using bash in the GNU/Linux command line.</p><p><strong>COMING SOON: Bash Basics, Part 2: Manipulating the Filesystem</strong></p>]]></content:encoded></item><item><title><![CDATA[Three Ways You Can Start Using Linux Today]]></title><description><![CDATA[<p>In my personal opinion, Linux is <em>a lot</em> of fun, and I use it in many different applications: as a desktop, a server, in the cloud, and as a virtual machine. It makes me feel good to use and support free, ethical, and privacy-respecting software that I have complete control</p>]]></description><link>https://jakespillstea.tech/three-ways-you-can-start-using-linux-today/</link><guid isPermaLink="false">62cf72b12dfb840682eeb1c4</guid><category><![CDATA[Tutorial]]></category><dc:creator><![CDATA[Jacob Cardinale]]></dc:creator><pubDate>Mon, 24 Oct 2022 00:33:09 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1580894894513-541e068a3e2b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGNvbXB1dGluZ3xlbnwwfHx8fDE2NjMwNTYyNDA&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1580894894513-541e068a3e2b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGNvbXB1dGluZ3xlbnwwfHx8fDE2NjMwNTYyNDA&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Three Ways You Can Start Using Linux Today"><p>In my personal opinion, Linux is <em>a lot</em> of fun, and I use it in many different applications: as a desktop, a server, in the cloud, and as a virtual machine. It makes me feel good to use and support free, ethical, and privacy-respecting software that I have complete control over. Admittedly, there is also a lot to learn and to get used to; it takes time and practice. You might mess up, but that&apos;s just like learning any other skill. This is how you can start learning and using Linux today.</p><h1 id="where-to-find-it">Where to find it</h1><h2 id="picking-a-distribution">Picking a distribution</h2><p>Most beginners should start with <a href="https://linuxmint.com/">Linux Mint</a>. It has a simple Windows-like GUI and is based on Ubuntu, so it has plenty of software and community support. It&apos;s easy, and it just works. If you want something a bit more sophisticated, Fedora is a very popular choice. It&apos;s one out of two de-facto Linux distributions, Ubuntu being the other. Fedora has many of the latest kernel technologies and packages, and it&apos;s also Linus Torvalds&apos; distro of choice. </p><p>If you need to serve a website, host virtual machines, or deploy network-attached storage (NAS), Linux as a server will always be the best choice. (Sorry Windows Server.) Some popular choices might be Ubuntu, Fedora, RHEL, or SLES, but my favorite distro for server use would be Debian. Debian is what Ubuntu is based on. It is extraordinarily popular and has a reputation for being rock-solid and stable, and is also used as a desktop by many.</p><p>If you&apos;re feeling a bit more adventurous or need something specific, check out <a href="https://distrowatch.com">distrowatch.com</a> or <a href="https://distrochooser.de">distrochooser.de</a> to find what may be best for you. There are hundreds of distributions that can specialize in ease of use, productivity, security, privacy, and even hardcore command-line configuration if you&apos;re into that.</p><h2 id="where-to-learn">Where to learn</h2><p>There are <em>so many</em> places to learn about Linux, but don&apos;t let that be a bad thing. I have learned Linux mainly from Google, YouTube, and Reddit, but there are hundreds of thousands of resources where you can learn. Hopefully, this blog will be one of those places for those who are reading. :)<br>RaidOwl and Techhut are two of my favorite Linux-related YouTubers. <a href="https://www.youtube.com/c/raidowl/videos">RaidOwl</a> does a lot of fantastic home-lab-related content, and Brandon from <a href="https://www.youtube.com/c/TechHutHD">Techhut</a> does a great job of taking a close-up look at tools, tricks, and software to help you in your Linux journey. On Reddit, good places to start for a beginner might be r/linux4noobs, r/linuxquestions, r/linuxhardware, and r/selfhosted.</p><h1 id="how-to-start-using-linux">How to start using Linux</h1><h2 id="install-it-virtually">Install it virtually</h2><p>Installing a Linux distribution in a virtual machine is one of the easiest ways to get started. Virtual machines give you the power to back up, snapshot, and even completely pause the VM in a suspended state. Download and install <a href="https://www.virtualbox.org/">Oracle VirtualBox</a> on your computer, a free and open-source hypervisor that runs on Windows, Linux, and macOS (for Intel Macs). There, you can install Linux and practically <em>any</em> operating system your heart desires!</p><blockquote>Furthermore, you can also install the virtual machine on top of a <a href="https://www.hitechnectar.com/blogs/hypervisor-type-1-vs-type-2/">type-1 hypervisor</a>, such as Proxmox, VMware ESXi, Hyper-V, and many others. But let&apos;s not get too ahead of ourselves though, shall we?</blockquote><p>Another way to easily &quot;virtualize&quot; Linux is with <a href="https://ubuntu.com/tutorials/install-ubuntu-on-wsl2-on-windows-10#1-overview">Windows Subsystem for Linux</a> (WSL2). This feature can be turned on easily and installs a Linux VM into Windows&#x2014;and sort of bakes it in&#x2014;so it&apos;s nicely incorporated with the rest of the system. It uses all the same network information and mounts all the disks from the Windows host inside the VM. It is only the CLI, but if you want, you can install the <a href="https://www.baeldung.com/linux/x11">X11 display server</a> and use a GUI. I like WSL2 because I can use Bash on my Windows PC instead of PowerShell or Command Prompt. </p><p>Another fascinating way to start trying Linux quickly and virtually is with the app <a href="https://github.com/ish-app/ish">iSH</a>. It&apos;s Alpine Linux emulated right inside of your phone&apos;s userspace. Unfortunately, it&apos;s exclusive to iOS and doesn&apos;t have all the features that a normal Alpine Linux installation would have, but there is still a lot that you can do with it. I like using it with <code>youtube-dl</code> when I need to grab a video from Twitter, and <code>dig</code> when I need to address any DNS problems I might be facing.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://jakespillstea.tech/content/images/2022/10/IMG_2104.png" class="kg-image" alt="Three Ways You Can Start Using Linux Today" loading="lazy" width="2000" height="924" srcset="https://jakespillstea.tech/content/images/size/w600/2022/10/IMG_2104.png 600w, https://jakespillstea.tech/content/images/size/w1000/2022/10/IMG_2104.png 1000w, https://jakespillstea.tech/content/images/size/w1600/2022/10/IMG_2104.png 1600w, https://jakespillstea.tech/content/images/size/w2400/2022/10/IMG_2104.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>iSH on my iPhone 12 Pro Max.</figcaption></figure><h2 id="deploy-it-in-the-cloud">Deploy it in the cloud</h2><p>Maybe you don&apos;t have the right hardware at home to virtualize it locally on your home computer. A great alternative would be to install it in the cloud. It has all the features a regular VM would provide, as well as the ability to access it from almost anywhere in the world. </p><p><a href="https://www.shells.com/l/en-US/">Shells</a> is a nice solution for people who need a workstation on the go. It gives you the power to use a Linux desktop right inside the web browser of any computer, including a phone or tablet! They provide a wide selection of Linux distributions that start at just $4.95/month.</p><p>If you&apos;re looking for something more on the server side of things, Linode, DigitalOcean, and Vultr are all Virtual Private Server (VPS) providers. I use DigitalOcean out of the three to host this blog, which only costs me $10/month. Each provider has its strengths and weaknesses, so make sure to compare and see what works best for you.</p><h2 id="install-it-on-bare-metal">Install it on bare metal</h2><p>If you&apos;re ready to go all in, congratulations! That&apos;s awesome, and you&apos;re a badass! Welcome to the community; we&apos;re glad you&apos;re here. Here is a slice of cake. Okay, enough celebration.</p><p>Installing Linux on hardware is just like installing any other operating system. You create a bootable USB flash drive, boot into it, run the installer, and voil&#xE0;, you have a working Linux computer. Linux is compatible with <em>a lot</em> of hardware these days, but always do your research, play around in the live environment, and make sure before installing that you won&apos;t run into any issues.</p><h3 id="linux-for-desktop">Linux for desktop</h3><p>To run Linux on a desktop, you will have a couple of decisions to make: Install Linux alongside your preexisting operating system or replace it entirely. If Windows or macOS is required for your work or school, I wouldn&apos;t recommend nuking your installation. If not, cool! Installing Linux on fresh and ready hardware is just as easy as installing it on a virtual machine.</p><p>Installing Linux alongside Windows or macOS is a bit trickier. If you have the luxury of having a second disk you can put in your machine, you can leave your current OS installation untouched. If not, you will likely have to <strong>resize your existing operating system&apos;s partition. </strong>Some Linux distros might offer to do this for you automatically in the installer. Still, if you want to make sure that it survives, you probably want to do it inside of the preexisting OS before installing. In Windows, this can be done through Disk Management, where you can shrink the volume. The same is likely done within Disk Utility in macOS. I would discourage using any 3rd party software to resize the preexisting OS partition. <em>That includes the Linux installer!</em></p><p>I shouldn&apos;t forget to mention that several companies sell computers with Linux installed out of the box. This option is considerably the easiest choice since the installation is already done for you, especially so if you&apos;re in the market for a new daily driver. Some of my favorite picks are Star Labs, System76, Slimbook, Purism, and <a href="https://hpdevone.com/">HP</a>. You can even run <a href="https://www.pine64.org/pinephone/">Linux on your phone</a>!</p><h3 id="linux-as-a-server">Linux as a server</h3><p>You can use any compatible computer as a Linux server. For example, I use a little netbook from 2011 as a NAS to serve music to the hi-fi smart speakers in my home<em>. </em>I also have a Dell Optiplex that I use to host a VPN, DNS server, virtual machines, and other services. That Optiplex is clustered with another custom-built PC that serves many of the same duties.</p><h3 id="linux-elsewhere">Linux elsewhere</h3><p>As I mentioned in my previous blog post, Linux exists in many different places, but it is especially popular in embedded devices. That&apos;s because it can be trimmed down to be so lightweight, and its open-source nature makes it easy to modify. I have a <a href="https://pikvm.org/">Raspberry Pi that I use as a KVM</a> to monitor and power on/off my home lab. Linux also powers routers, switches, phones, smart devices, and so much more. </p><h1 id="conclusion">Conclusion</h1><p>As we can see, there are many different ways to start using Linux. There were a few rabbit holes I could have gone down, but I would like to make those their own separate blog posts. If all went well, this list allowed you to whittle down your choices, or at least give you an idea for something that will work best for you. Cheers!</p>]]></content:encoded></item><item><title><![CDATA[Why You Should Use Linux and Open-Source Software]]></title><description><![CDATA[<p>If you&apos;ve ever heard of Linux, you might relate it to programming, embedded devices like the <a href="https://www.raspberrypi.org/">Raspberry Pi</a>, the command line, and even the web servers that run the internet as a whole (yes, including this blog!). You might think of distributions like Ubuntu or Fedora. If you&</p>]]></description><link>https://jakespillstea.tech/why-use-linux-a-persuasive-essay/</link><guid isPermaLink="false">62bd4c02253f5516e2a6a0eb</guid><category><![CDATA[Essay]]></category><category><![CDATA[Software]]></category><dc:creator><![CDATA[Jacob Cardinale]]></dc:creator><pubDate>Fri, 14 Oct 2022 23:42:11 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1599153066743-08810dc8a419?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHVidW50dXxlbnwwfHx8fDE2NjQyOTczMjI&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1599153066743-08810dc8a419?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHVidW50dXxlbnwwfHx8fDE2NjQyOTczMjI&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Why You Should Use Linux and Open-Source Software"><p>If you&apos;ve ever heard of Linux, you might relate it to programming, embedded devices like the <a href="https://www.raspberrypi.org/">Raspberry Pi</a>, the command line, and even the web servers that run the internet as a whole (yes, including this blog!). You might think of distributions like Ubuntu or Fedora. If you&apos;re not so familiar, it might make you think of the words <em>complicated,</em> <em>intimidating, </em>and<em> confusing</em>. What if it didn&apos;t have to be those words? Instead, wouldn&apos;t it make you think of the words <em>powerful utility</em> and <em>a dream come true</em>? Hopefully, my blog <a href="https://jakespillstea.tech/">jakespillstea.tech</a> can convince you and show you the ins and outs, and do&apos;s and don&apos;t&apos;s of Linux.</p><h1 id="so-what-is-linux">So, what is Linux?</h1><p>Linux, to be very exact, is a kernel. Okay, what is a kernel? A <a href="https://en.wikipedia.org/wiki/Kernel_(operating_system)">kernel</a> is a piece of computer software that sits between the bare metal hardware of the computer and the operating system. It manages memory, I/O, drivers, processes, and more. Every time you save a file, render an image or load a web page, the kernel is working away behind the scenes to make the hardware do what it needs to do. It is one of the very first programs that load into memory when a computer starts and even contributes to loading up the rest of the system. The kernel is a very crucial and central part of the operating system.</p><h3 id="a-brief-history">A brief history</h3><p>The Linux kernel started development in 1991 by Linus Torvalds. It was inspired by Unix (sometimes stylized UNIX), which at the time was another proprietary operating system and kernel developed by AT&amp;T, Bell Labs, <a href="https://www.techopedia.com/definition/6276/berkeley-software-distribution-bsd">UC Berkeley</a>, and others. Unix started a revolution in operating system development and even gave birth to some of the systems we know today, like Apple&apos;s macOS. Linux is not based on Unix, but instead is Unix-like and was designed to be similar and compatible with lots of Unix software.</p><p>Shortly after starting the development of his kernel, Torvalds crossed paths with Richard M. Stallman, the leader of the <a href="https://www.gnu.org/gnu/thegnuproject.en.html">GNU Project</a>. Its goal was to create a free operating system (as in freedom), but it was incomplete. Together, they combined both of their projects to make <strong>GNU/Linux</strong>, successfully creating a fully free-and-open-source operating system on a philosophical and economic level.</p><blockquote>Fun fact: Linux didn&apos;t start as an open-source project. It was actually never meant to be open-source. Stallman needed help with development, so Torvalds released the source code to combine them.</blockquote><h2 id="what-makes-it-special">What makes it special</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://images.unsplash.com/photo-1615525137689-198778541af6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDIwfHxjJTIwY29kZXxlbnwwfHx8fDE2NjQyMDk4NjY&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" class="kg-image" alt="Why You Should Use Linux and Open-Source Software" loading="lazy" width="4444" height="2500" srcset="https://images.unsplash.com/photo-1615525137689-198778541af6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDIwfHxjJTIwY29kZXxlbnwwfHx8fDE2NjQyMDk4NjY&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=600 600w, https://images.unsplash.com/photo-1615525137689-198778541af6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDIwfHxjJTIwY29kZXxlbnwwfHx8fDE2NjQyMDk4NjY&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=1000 1000w, https://images.unsplash.com/photo-1615525137689-198778541af6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDIwfHxjJTIwY29kZXxlbnwwfHx8fDE2NjQyMDk4NjY&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=1600 1600w, https://images.unsplash.com/photo-1615525137689-198778541af6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDIwfHxjJTIwY29kZXxlbnwwfHx8fDE2NjQyMDk4NjY&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2400 2400w" sizes="(min-width: 720px) 720px"><figcaption>Photo by <a href="https://unsplash.com/@krishna2803?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Krishna Pandey</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure><h3 id="its-free-and-open-source">It&apos;s free and open-source</h3><p>One of the most eye-catching features of GNU/Linux is its free and open-source software (or FOSS) licensing. The Linux kernel is licensed under GNU General Public License version 2 (GPL-2.0), which means anybody has the right to freely use, distribute, and modify the software however they may please, but only under the exception that you may not apply any of your own restrictions and you keep the source code open. This concept is called <em>copyleft</em>, ensuring the product stays free and available for everybody, everywhere, forever.</p><h3 id="its-the-perfect-development-platform">It&apos;s the perfect development platform</h3><p>Because Linux is FOSS, it is a very appealing workspace for developers to create their software. Most distributions come out of the box with Python, C, and other programming languages. If what you need doesn&apos;t come by default, installing software such as your favorite <a href="https://www.redhat.com/en/topics/middleware/what-is-ide">IDE</a> or web browser is a total breeze with the <a href="https://www.debian.org/doc/manuals/aptitude/pr01s02.en.html">package manager</a>. <br>It&apos;s not only software developers. Many researchers, such as scientists and health professionals, use Linux to analyze and process data. Examples could be simulation protein folding, or studying data collected from outer space. Everybody has the power to tweak, debug, and tune it to work however they please for their applications&#x2014;the (computing) world is your oyster.</p><h3 id="open-source-is-more-secure">Open source is more secure</h3><p>It also allows us to look for security issues or bugs. It is always open for improvement. By design, open source is collaborative. Developers could cross-check the code for security bugs that may have been left undiscovered if said project was closed-source.</p><h3 id="its-lightweight-but-powerful">It&apos;s lightweight but powerful</h3><p>Compared to other systems, Linux accomplishes being lightweight and powerful. Take Peppermint OS, for example; a fresh boot only uses about 300 MB but still accomplishes being a full-fledged desktop experience that you can even game on. Most Linux distributions come with lighter and more efficient software than Windows, which gives you the space and power to run what you want to run without the system slowing down as fast. On one of my home servers&#x2014;which I will be writing a blog post about&#x2014;running Debian only uses about 60 MB of RAM. If NASA uses Linux, I sure as hell will too. According to <a href="http://blog.zorinaq.com/i-contribute-to-the-windows-kernel-we-are-slower-than-other-oper/">this article</a>, the development of the Windows kernel tends to lag behind other operating systems.</p><h3 id="its-customizable">It&apos;s customizable</h3><p>You can make your Linux system your very own and unique to you. Linux distributions are <em>highly</em> customizable, from changing the system-wide font to which kernel and init system you want to run. Some people even go as far as making <a href="https://www.linuxfromscratch.org/">Linux from scratch</a>. Do you want to have a feature-rich and modern workflow experience? Try Zorin OS or Pop!_OS. Do you want a more lightweight and simple system with the latest updates? Install a <a href="https://itsfoss.com/rolling-release/">rolling-release</a> distro like Arch Linux (good luck if you do!). Do you want to change the desktop environment from GNOME to KDE Plasma? Easily done. Do you feel like <a href="https://www.reddit.com/r/linuxmemes/comments/pthljj/saw_this_meme_here_and_simply_had_to_fix_it/">deleting the bootloader</a>? Say less.</p><h3 id="community-support-is-huge">Community support is huge</h3><p>Although Linux may appear like a small project, it is backed by approximately <a href="https://www.linuxfoundation.org/blog/blog/2017-linux-kernel-report-highlights-developers-roles-accelerating-pace-change#:~:text=Roughly 15%2C600 developers from more,Linux Kernel Summit in Prague.">fifteen thousand</a> developers, including big companies like Red Hat, Canonical, Google, Intel, Samsung, and even Microsoft. The reason is that all of these big companies <em>also</em> use Linux (yes, that&apos;s right). Web hosting is where it is most popular; over<a href="https://webtribunal.net/blog/linux-statistics/#:~:text=According%20to%20Alexa&apos;s%20count%20of,million%20servers%20run%20on%20Linux."> 96%</a> of servers today are Linux-based. <br>The community seems so small because of its share of the consumer desktop market; only an estimated 1% of consumer PCs run Linux. Historically, it has had a hard time penetrating the consumer market, mainly because of Microsoft&apos;s agreement with Intel in the 90&apos;s to include a copy of Windows on every computer shipped with an Intel CPU.</p><h1 id="why-you-should-care">Why you should care</h1><p>In many people&apos;s opinions, including mine, a lot comes down to valuing your privacy and <em>owning</em> your data. Nowadays, it is prevalent to have your data collected and sold to advertisers to target you as a consumer. There&apos;s evidence that U.S. citizens have been spied on in their homes.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://i0.wp.com/insight.bibliotech.us/wp-content/uploads/2018/11/Big-Brother-Zuckerbergjpg.jpg?fit=770%2C513&amp;ssl=1" class="kg-image" alt="Why You Should Use Linux and Open-Source Software" loading="lazy"><figcaption>The Zuck.</figcaption></figure><h2 id="big-tech-and-telemetry">Big tech and telemetry</h2><p>Unless you never have never used a computer, you might already know that Facebook, Microsoft, Amazon, and Google constantly track you online. They collect your search history and purchases to create a profile about you, share that data, then use that data for advertising to you and getting clicks. The cycle continues.<br><strong>Telemetry</strong> is the recording of data that is transmitted back to the creator or distributor of that product. The collected data is generally statistical in nature, but that is a broadly used term. Have you ever talked about a product and then suspiciously enough seen advertisements for it later? It seems way too coincidental, &#xA0;doesn&#x2019;t it?</p><h2 id="the-snowden-leaks">The Snowden leaks</h2><p>In 2013, an NSA contractor named Edward Snowden began leaking documents to the press detailing a global surveillance scheme conducted by the NSA and other countries. This was in cooperation with multiple telecommunications companies that aided them by leaking private information about their users. Some of these companies included Verizon, Comcast, and others. This was called <strong>Operation PRISM. </strong><br>This ignited public controversy against the U.S. and other governments regarding their privacy rights. Was anything private in this new digital age? How could you trust these companies again, and how do you know they are telling the truth? </p><blockquote>I&apos;d recommend reading Edward Snowden&apos;s book, &quot;Permanent Record&quot;. There is also some documentation you can find on the internet about this.</blockquote><h2 id="the-right-to-repair">The right to repair</h2><p>Have you ever had a device notify you that it was &quot;unsupported&quot; and stopped receiving updates? Or have you had your computer tell you that it won&apos;t be supported for Windows 11 or the next version of macOS? Has your phone ever started <a href="https://www.bbc.com/news/business-61823512">running slow</a> after an update? Maybe, you took your computer in for a small repair, but because of proprietary design, you had to spend to replace the entire computer instead.<br>The Right to Repair movement aims to ensure that all devices are repairable and modifiable by the consumer. That includes affordable access to parts, using non-proprietary and affordable hardware interfaces. A device shouldn&apos;t require a heat gun to melt glue and pry the screen off to repair.<br>The fundamental principles of the Right to Repair movement can be expanded to include long-lasting software support. Hardware can only be as good as the software it&apos;s provided (looking at you, <a href="https://www.pcworld.com/article/427004/why-nvidia-graphics-cards-are-the-worst-for-open-source-but-the-best-for-linux-gaming.html">Nvidia</a>.)<br>One more thing that deserves to be mentioned is something called <em>planned obsolescence. </em>This is when a manufacturer will sell their product with a sort of built-in expiration date. This means that you as the consumer will have to go shell out cash for repairs, or an entire replacement. </p><hr><p><em>Doesn&apos;t that all sound shitty?</em> Everything just stated is precisely why open-source as a philosophy is important; everybody owns their data, knows how their software works, and can ultimately trust their computer. Anybody can read the code and see firsthand that the program does only what it&apos;s meant to, and nothing more. You should have the freedom to open your computer, phone, or tablet and repair them, without it costing a fortune. In our ever-evolving world of technology, it&apos;s become more important than ever to protect your data, and in turn your identity. </p><h1 id="is-linux-successful">Is Linux successful?</h1><p>Yes, but no. Sure, Linux is successful in the enterprise world, as a development platform, and as a learning tool. But it doesn&apos;t have the same amount of popularity that Microsoft Windows and macOS have. But to tell you the truth, that&apos;s unimportant to me. Not everybody will know of or use Linux in their lifetime, and that&apos;s just fine with me. &#xA0;What we do have, though, is a vibrant community of enthusiasts, hobbyists, contributors, professionals, amateurs, geeks, and nerds alike. That is what matters most&#x2014;that people care at all.</p><p><strong>UP NEXT: <a href="https://jakespillstea.tech/three-ways-you-can-start-using-linux-today/">Three Ways You Can Start Using Linux Today</a></strong></p><p><strong>A note for my readers:</strong><br>I just want to say thank you for taking the time to read my very first blog post. This was actually a lot for me to write; it&apos;s been months in the making. <s>I am still working on getting the email subscriptions up and running.</s> UPDATE: I got email subscriptions to work! Please subscribe! I am shooting to be posting on a weekly cadence. </p>]]></content:encoded></item></channel></rss>