<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Abdenour ALIANE</title>
    <description>The latest articles on Forem by Abdenour ALIANE (@aicignaw).</description>
    <link>https://forem.com/aicignaw</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F217917%2F2d7f3a3d-2948-49e4-a513-426ef5abf37d.png</url>
      <title>Forem: Abdenour ALIANE</title>
      <link>https://forem.com/aicignaw</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/aicignaw"/>
    <language>en</language>
    <item>
      <title>Install Linux 6.2 (and 6.3) on Google Cloud Compute Engine instance</title>
      <dc:creator>Abdenour ALIANE</dc:creator>
      <pubDate>Mon, 20 Feb 2023 15:36:37 +0000</pubDate>
      <link>https://forem.com/aicignaw/install-linux-62-on-google-cloud-compute-engine-instance-4b74</link>
      <guid>https://forem.com/aicignaw/install-linux-62-on-google-cloud-compute-engine-instance-4b74</guid>
      <description>&lt;p&gt;Update : Use the same trick to install Version 6.3 !&lt;br&gt;
&lt;a href="https://www.omgubuntu.co.uk/2023/02/linux-kernel-6-2-new-features" rel="noopener noreferrer"&gt;6.2 is here, here is what's new&lt;/a&gt;, but we will not focus on that, but how to try it on Google Cloud !&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Be careful, this is an &lt;a href="https://lukasmestan.com/your-kernels-are-unsigned-this-system-will-fail-to-boot-in-a-secure-boot-environment/" rel="noopener noreferrer"&gt;unsigned kernel, The system will fail to boot in a secure boot environment&lt;/a&gt; !&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before we start, I need you to do two important steps, so in case something goes wrong, you can always go back :&lt;/p&gt;

&lt;p&gt;1- You need ton &lt;a href="https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/installation" rel="noopener noreferrer"&gt;install the Ops Agent&lt;/a&gt; so you can see &lt;a href="https://www.linkedin.com/pulse/sre-concepts-part-7-whiteblack-box-monitoring-marcel-koert/" rel="noopener noreferrer"&gt;what happens inside your instance&lt;/a&gt;,&lt;br&gt;
2- Create a backup or make a snapshot and create a disk from this snapshot.&lt;/p&gt;

&lt;p&gt;Create a snapshot,&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fndnf1bn4t9s1ui5ay78g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fndnf1bn4t9s1ui5ay78g.png" alt="snapshot" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Covert it to disk to be attached to the instance&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgu3uq2q4alpgzh5nb0rk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgu3uq2q4alpgzh5nb0rk.png" alt="convert" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that you took care of the backup plan, let's dive in !&lt;/p&gt;

&lt;p&gt;Here is what we do have with a default Ubuntu 18.04 installation (there is also 20.04 and 22.04 as LTS, but here, we want just to make a small demo) :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4k1cpvv36o3u7q6e4bco.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4k1cpvv36o3u7q6e4bco.png" alt="kernel 0" width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We need to add mainline package to our repos list so we can install it using &lt;code&gt;apt&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo add-apt-repository ppa:cappelikan/ppa&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then update the new repos by &lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;then we just install it using &lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt install -y mainline&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To get all available kernels, we just make&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mainline --list&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh3t7hgkztd5h14qm1zvx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh3t7hgkztd5h14qm1zvx.png" alt="mainline list" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, we choose what to install, by explicitly giving the version, &lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo mainline --install 6.2.0&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;or, if we want to get the latest stable kernel, we simply :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo mainline --install-latest&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Restart, and voilà !&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fco9v67ey0pne8vlazhkh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fco9v67ey0pne8vlazhkh.png" alt="voila" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;But here is an issue, how do we go back to old kernel ?&lt;/p&gt;

&lt;p&gt;The problem here, is we are accessing using SSH, and kernel selection is done from &lt;a href="https://help.ubuntu.com/community/Grub2/" rel="noopener noreferrer"&gt;Grub Menu&lt;/a&gt;, and SSH is not available at this stage, which means we need another way, here is how !&lt;/p&gt;

&lt;p&gt;Here is what we have now as installed kernels, we can use one of this commands :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;dpkg --list | grep -i linux-image&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;apt list --installed | grep -i linux-image&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3f3smt0x3qn4bgqreihw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3f3smt0x3qn4bgqreihw.png" alt="installed kernels" width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, let's change something in default grub loading, here is the trick, but before, we need to understand how Grub works :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Grub menu on a machine that we have physical access can be tuned to show a menu at restart, so we generally have two options (&lt;em&gt;menu&lt;/em&gt;) : the default kernel, and advanced mode that have a &lt;em&gt;submenu&lt;/em&gt;, and they are assigned by indexes starting with &lt;code&gt;0&lt;/code&gt; :&lt;br&gt;
1- first menu entry = 0&lt;br&gt;
2- second menu entry = 1&lt;br&gt;
and so on ...&lt;br&gt;
and each &lt;em&gt;menu&lt;/em&gt; has a &lt;em&gt;submenu&lt;/em&gt; with index numbers, but to not complicate this, we will &lt;em&gt;flatten&lt;/em&gt; this &lt;em&gt;submenus&lt;/em&gt; to make it easier&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Grub saves its file to &lt;code&gt;/boot/grub/grub.cfg&lt;/code&gt; , but this file should never be modified manually, as it's a result of some scripts (that we will know shortly), so eachtime for example we do a kernel update, it will be erased a new one will be generated, so we need to modify this script that generates the file, and not the file itself :&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1n3629ha7zavbrrde6i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1n3629ha7zavbrrde6i.png" alt="balak!" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The files that we need to modify for our case is &lt;code&gt;/etc/default/grub&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzbui8stuln8tr3h90zct.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzbui8stuln8tr3h90zct.png" alt="grub" width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And as you can see, the first option is &lt;code&gt;0&lt;/code&gt; which means take the first entry in the menu and validate it, we will change that, but first we need to :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;flatten the menu to avoid submenus&lt;/li&gt;
&lt;li&gt;get the index of the kernel version we need&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is how it was with default values (with submenus):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fflvrclnj3mkxe7sbkwqa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fflvrclnj3mkxe7sbkwqa.png" alt="submenu" width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's first add this entry to disable submenus :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GRUB_DISABLE_SUBMENU=y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8qbvt04m3ro60ykdtbre.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8qbvt04m3ro60ykdtbre.png" alt="disable" width="800" height="235"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then let's validate the config by running the script to re-generate the &lt;code&gt;/boot/grub/grub.cfg&lt;/code&gt; by running :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo update-grub&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And it's flat now, no more submenus !&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi305w8c0xs8xcklnzedv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi305w8c0xs8xcklnzedv.png" alt="flat" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we need to understand the origin of other variables from other files, so when we do &lt;code&gt;update-grub&lt;/code&gt; there is also a bunch of scripts that runs from &lt;code&gt;/etc/grub.d/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqagsohuyzkq35d28c7r7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqagsohuyzkq35d28c7r7.png" alt="grub.d" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On Google Cloud, there is another file, which is :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/etc/default/grub.d/50-cloudimg-settings.cfg&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzqy943q3vxo46er6xv9v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzqy943q3vxo46er6xv9v.png" alt="hidden" width="800" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So let's change this value, it will override the global one ...&lt;/p&gt;

&lt;p&gt;But to replace it with what ?&lt;/p&gt;

&lt;p&gt;Well, let's enumerate the menus we got starting with zero&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvou9pn0zw88pdfnnbjm1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvou9pn0zw88pdfnnbjm1.png" alt="enum" width="800" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So now that we know that we need entry &lt;code&gt;2&lt;/code&gt; let's replace it :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqn44dqw3xnwt4og61yn9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqn44dqw3xnwt4og61yn9.png" alt="bzzz" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Restart, and voilà again !&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3iibjzi7w5jcjtarha2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3iibjzi7w5jcjtarha2.png" alt="voilo" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>freelance</category>
      <category>codenewbie</category>
      <category>fullstack</category>
    </item>
    <item>
      <title>Learn Kubernetes on your laptop with Minikube</title>
      <dc:creator>Abdenour ALIANE</dc:creator>
      <pubDate>Mon, 28 Nov 2022 16:59:35 +0000</pubDate>
      <link>https://forem.com/aicignaw/learn-kubernetes-on-your-laptop-with-minikube-548o</link>
      <guid>https://forem.com/aicignaw/learn-kubernetes-on-your-laptop-with-minikube-548o</guid>
      <description>&lt;p&gt;First, let's be clear; future is containers !&lt;/p&gt;

&lt;p&gt;This is a long debate, but as we asked in the past "Does it work on Windows or Linux", we will just ask "Does it work on Kubernetes" ! &lt;/p&gt;

&lt;p&gt;Cloud is here, Multi Cloud is here, Hybrid Cloud is here, and to make everything works in a "perfect" way, there is Kubernetes, there are tons of tutorials, on &lt;a href="https://www.youtube.com/results?search_query=kubernetes+101" rel="noopener noreferrer"&gt;Youtube&lt;/a&gt;, on &lt;a href="https://www.google.com/search?q=kubernetes+tutorials" rel="noopener noreferrer"&gt;Google&lt;/a&gt; ,&lt;/p&gt;

&lt;p&gt;Kubernetes is what orchestrates containers on clusters, it uses config files (yaml) where everything is perfect and tries to mimic this perfect world (state).&lt;/p&gt;

&lt;p&gt;The architecture of Kubernetes needs some time to be understood, but to make stuff run (make hands dirty, then learn what made them dirty !), we can use &lt;a href="https://minikube.sigs.k8s.io/" rel="noopener noreferrer"&gt;Minikube&lt;/a&gt;, and of course there are &lt;a href="https://www.google.com/search?q=minikube+vs+microk8s+vs+k3s" rel="noopener noreferrer"&gt;alternatives&lt;/a&gt;, and tutorials too for each of them !&lt;/p&gt;

&lt;p&gt;But this article will try to make two hits with one shot; use Minikube while you already have installed &lt;a href="https://cloud.google.com/sdk/docs/install" rel="noopener noreferrer"&gt;gcloud SDK&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa2yz2ppmqfli5jzajsdc.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa2yz2ppmqfli5jzajsdc.jpeg" alt="install sdk, right?" width="500" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The installation will be made in a headless server Ubuntu 22.04 fresh minimal installation, Ubuntu uses Debian family commands, you can replace them with simple transitions if you are on Redhat family (&lt;code&gt;yum/dnf&lt;/code&gt; instead of &lt;code&gt;apt&lt;/code&gt;)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can follow the instruction directly &lt;a href="https://cloud.google.com/sdk/docs/install" rel="noopener noreferrer"&gt;from the link&lt;/a&gt;, or, use the ones here :&lt;/p&gt;

&lt;p&gt;First, let's download the SDK :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-410.0.0-linux-x86_64.tar.gz&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5rulwztijgeie56dm4o3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5rulwztijgeie56dm4o3.png" alt="download gcloud sdk" width="800" height="127"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then let's uncompress it&lt;/p&gt;

&lt;p&gt;&lt;code&gt;tar -xf google-cloud-cli-410.0.0-linux-x86_64.tar.gz&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then let's run the script :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;./google-cloud-sdk/install.sh&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And just follow the instructions by answering with one letter :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqx2vziqsyqraew7hml7y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqx2vziqsyqraew7hml7y.png" alt="sorry i am lazy to do descriptions" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, we need to re-run &lt;code&gt;.bashrc&lt;/code&gt; file to enable the new inserted path, it will insert those two lines :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# The next line updates PATH for the Google Cloud SDK.
if [ -f '/home/yourUserName/google-cloud-sdk/path.bash.inc' ]; then . '/home/yourUserName/google-cloud-sdk/path.bash.inc'; fi

# The next line enables shell command completion for gcloud.
if [ -f '/home/yourUserName/google-cloud-sdk/completion.bash.inc' ]; then . '/home/yourUserName/google-cloud-sdk/completion.bash.inc'; fi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq9ivmtfc8jredeyy4eba.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq9ivmtfc8jredeyy4eba.png" alt="gcloud command" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, each time we need to install a &lt;strong&gt;component&lt;/strong&gt; we just need to run &lt;/p&gt;

&lt;p&gt;&lt;code&gt;gcloud components install SomeThing&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That we already got its name from&lt;/p&gt;

&lt;p&gt;&lt;code&gt;gcloud components list&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp5cr7wwcp3u4ydkm22uw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp5cr7wwcp3u4ydkm22uw.png" alt="sorry i am lazy to do descriptions" width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffndou25uxes93i51q4qo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffndou25uxes93i51q4qo.png" alt="sorry i am lazy to do descriptions" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, let's install &lt;strong&gt;minikube&lt;/strong&gt; ^_^&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv3ao87xekaq66aqqhgjb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv3ao87xekaq66aqqhgjb.png" alt="sorry i am lazy to do descriptions" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp387829ukn92orsjynw2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp387829ukn92orsjynw2.png" alt="sorry i am lazy to do descriptions" width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To make &lt;strong&gt;&lt;code&gt;minikube (our mini kubernetes)&lt;/code&gt;&lt;/strong&gt; run, we just run &lt;code&gt;minikube start&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2uqf7epuu61o1hnji8em.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2uqf7epuu61o1hnji8em.png" alt="sorry i am lazy to do descriptions" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But here is the catch; we need some hypervisor (Virtualbox, VMWare, KVM) or a container engine (Docker, Podman) to make it run, so we will install KVM as it's already available on Linux (think about Hyper-V on Windows) &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;a href="https://docs.docker.com/engine/install/ubuntu/" rel="noopener noreferrer"&gt;The easiest way is to install Docker&lt;/a&gt;, but as we want to make something outside of Docker and make you discover 'new' stuff, let's make it differently&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa9xxkv13a6tforc9i527.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa9xxkv13a6tforc9i527.png" alt="sorry i am lazy to do descriptions" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, we need to do some security commands, as we don't want to run &lt;code&gt;sudo&lt;/code&gt; here, so the trick is to add the user to the two groups, &lt;code&gt;kvm&lt;/code&gt; and &lt;code&gt;libvirt&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faryna3lvq0giktqnjumn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faryna3lvq0giktqnjumn.png" alt="sorry i am lazy to do descriptions" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We need to restart to make it work.&lt;/p&gt;

&lt;p&gt;And voilà !&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Hint : this is just a normal kvm virtual machine, this is the interface of Cockpit, the virt-manager alternative *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbfveod379xn1gstpzkun.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbfveod379xn1gstpzkun.png" alt="Image description" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foxc2h43iglwetw87s0ey.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foxc2h43iglwetw87s0ey.png" alt="sorry i am lazy to do descriptions" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But as you see, the main &lt;code&gt;kubectl&lt;/code&gt; command that we find in every tutorial is missing, to solve this, we just need to run :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;minikube kubectl&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And it will download it &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvco0jevwagmiwij4ibdq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvco0jevwagmiwij4ibdq.png" alt="sorry i am lazy to do descriptions" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, why we can't by default run &lt;code&gt;kubectl&lt;/code&gt;, this is to not make conflict between the &lt;code&gt;kubectl&lt;/code&gt; you install from the main Kubernetes installation, and &lt;code&gt;minikube&lt;/code&gt; installation.&lt;/p&gt;

&lt;p&gt;You can create an alias for this (you need to put the alias inside &lt;code&gt;.bashrc&lt;/code&gt; to make it work eachtime you close the console):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg7ouab8gx0z6dd7bqevi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg7ouab8gx0z6dd7bqevi.png" alt="sorry i am lazy to do descriptions" width="800" height="254"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But you can still install &lt;code&gt;kubectl&lt;/code&gt; using &lt;code&gt;gcloud components install kubectl&lt;/code&gt; as this will allow you to use GKE too, and it works with &lt;code&gt;minikube&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5129lwfq8b97r6dgk0g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5129lwfq8b97r6dgk0g.png" alt="sorry i am lazy to do descriptions" width="800" height="574"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is a simple difference between both :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk2tai4d1mimf4m2x4cuy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk2tai4d1mimf4m2x4cuy.png" alt="kubectl difference" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Oh, you want to know what is GKE ?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq34errspt0nates4h39i.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq34errspt0nates4h39i.jpeg" alt="gke" width="500" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you can start practicing and creating what will be the future !&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>backend</category>
      <category>api</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Update env variables in Windows 10 without Restarting/Logout</title>
      <dc:creator>Abdenour ALIANE</dc:creator>
      <pubDate>Mon, 06 Jun 2022 12:38:37 +0000</pubDate>
      <link>https://forem.com/aicignaw/update-env-variables-in-windows-10-4ik7</link>
      <guid>https://forem.com/aicignaw/update-env-variables-in-windows-10-4ik7</guid>
      <description>&lt;p&gt;Hi,&lt;br&gt;
a quick post, I just installed &lt;a href="https://www.wampserver.com/en/"&gt;WAMP&lt;/a&gt; and I needed to work with MySQL from the shell (Powershell or cmd or whatever :P ), I added the &lt;code&gt;bin&lt;/code&gt; folder to the &lt;a href="https://superuser.com/questions/949560/how-do-i-set-system-environment-variables-in-windows-10"&gt;Environment Variables&lt;/a&gt; but without restarting, here is how to do it quickly :&lt;/p&gt;

&lt;p&gt;1 - Install &lt;a href="https://docs.chocolatey.org/en-us/choco/setup"&gt;Chocolatey&lt;/a&gt; as an Admin using this command from &lt;a href="https://github.com/PowerShell/PowerShell"&gt;PowerShell&lt;/a&gt; :&lt;br&gt;
 &lt;code&gt;Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;2 - Run this simple command : &lt;code&gt;RefreshEnv.cmd&lt;/code&gt; (you can use Refre and type Tab like you do in Linux...right ? ^^ )&lt;/p&gt;

&lt;p&gt;3 - Done&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Use VMware Workstation with the latest Linux Kernel</title>
      <dc:creator>Abdenour ALIANE</dc:creator>
      <pubDate>Fri, 06 May 2022 23:51:27 +0000</pubDate>
      <link>https://forem.com/aicignaw/use-vmware-workstation-with-the-latest-linux-kernel-2ala</link>
      <guid>https://forem.com/aicignaw/use-vmware-workstation-with-the-latest-linux-kernel-2ala</guid>
      <description>&lt;p&gt;Azul,&lt;br&gt;
This is my first article, this my Hello World in dev.to community, I am here to help people as I got and still get helped from those online articles, but, to encourage people from my community to write and share their knowledge !&lt;/p&gt;

&lt;p&gt;I am Abdenour ALIANE, &lt;a href="https://aicignaw.com/"&gt;Aicignaw Consulting&lt;/a&gt; founder, and teacher (and of course a student), I will write about computer (sure, since I am here), focusing on Cloud Computing (Google Cloud and on-premise solutions) and Linux, and everything related to those two big topics, and I will always try to break the topic to something anyone could understand (I suppose that I am a newbie that comes and read this article because I searched for a keyword on Google, and of course we never stop learning, so I am still a newbie, that's the key to learn ! so sorry if my articles will seem basic, and if you dont understand, please let me know in the comments section)&lt;/p&gt;

&lt;p&gt;Today, I will start with this simple way on how to use VMWare Workstation on Linux distribution with a new kernel (since &lt;a href="https://en.wikipedia.org/wiki/Hypervisor"&gt;hypervisors&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/Virtualization"&gt;virtualization&lt;/a&gt; is important to explain how cloud works), if you know the basics, just scroll down to the yawning cat picture ^_^&lt;/p&gt;

&lt;p&gt;Well, first, let's break down what I said :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Linux"&gt;Linux&lt;/a&gt; is a &lt;a href="https://www.kernel.org/"&gt;Kernel&lt;/a&gt;, a kernel is that part who manages the electricity flaw (those 1 and 0 signals), so if we try to understand using what &lt;a href="https://gs.statcounter.com/os-market-share"&gt;most of people use on Desktop&lt;/a&gt;: Microsoft Windows :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;When we install a driver, we are installing some 'code' that will work with our hardware to tell them how to behave; so when we find a driver compatible with Windows 8.1, that means, it works with the &lt;a href="https://en.wikipedia.org/wiki/Architecture_of_Windows_NT"&gt;Windows kernel of this version&lt;/a&gt;, so chances that it could work with Windows 10, but Windows XP drivers could break for Windows 10 even if it's the same &lt;a href="https://en.wikipedia.org/wiki/X86-64"&gt;architecture&lt;/a&gt;  as the two kernels have lot of differences  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When Windows starts, the kernel is the part that protects the hardware from being broken by something a user or a program could do, which means, a virus for example (which is a program but does something a user will not like ...) &lt;a href="https://en.wikipedia.org/wiki/Protection_ring"&gt;will not burn the hardware by sending too much electricity to it&lt;/a&gt; (we will see that concept a lot with virtualization in next articles),&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Linux is named after the guy who made it, &lt;a href="https://en.wikipedia.org/wiki/Linus_Torvalds"&gt;Linus Torvalds&lt;/a&gt;, you can even check &lt;a href="https://github.com/torvalds/linux"&gt;his git repo&lt;/a&gt;, or &lt;a href="https://www.kernel.org/"&gt;download it from the official website&lt;/a&gt;, but you need then to compile it to your own distribution, you can &lt;a href="https://www.google.com/search?q=upgrade+linux+kernel"&gt;Google&lt;/a&gt; for it, I will make a topic on this later.&lt;br&gt;
So now that we understood what is a kernel, what we use are &lt;a href="https://en.wikipedia.org/wiki/List_of_Linux_distributions"&gt;Distributions&lt;/a&gt; and there are &lt;a href="https://upload.wikimedia.org/wikipedia/commons/b/b5/Linux_Distribution_Timeline_21_10_2021.svg"&gt;a LOT&lt;/a&gt; !&lt;/p&gt;

&lt;p&gt;The good part of using a Linux distribution, is its modularity; we can install &lt;a href="https://ubuntu.com/download/desktop"&gt;Ubuntu&lt;/a&gt; for example, change its user &lt;a href="https://itsfoss.com/best-linux-desktop-environments/"&gt;interface&lt;/a&gt;, and update its kernel to try some new features and bring some new hardware compatibility, without even touching the distribution version !&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important notice :&lt;/strong&gt;&lt;br&gt;
In computer world, there are two kind of people :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Users who like to test and try new stuff, if it breaks, even if there is a loss, but there is time to repair,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Professionals using machines as servers, &lt;a href="https://en.wikipedia.org/wiki/Downtime"&gt;no time to lose&lt;/a&gt; : &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Here, the most important is stability over new stuff, they only do security patches and important updates, that's why some distributions offer what is called an &lt;a href="https://en.wikipedia.org/wiki/Long-term_support"&gt;Long Term Support (LTS)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Those servers are &lt;a href="https://en.wikipedia.org/wiki/Headless_computer"&gt;headeless&lt;/a&gt;, that's why we avoid installing graphical interface on those Linux distributions, so, headeless keyword is also used in Linux to say they dont have &lt;a href="https://en.wikipedia.org/wiki/Graphical_user_interface"&gt;GUI&lt;/a&gt;&lt;br&gt;
&lt;em&gt;* Headeless Linux means &lt;a href="https://www.cyberciti.biz/tips/linux-security.html"&gt;less security holes&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;That is said, &lt;strong&gt;DONT TRY THIS AT ... SERVER&lt;/strong&gt; &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8dbEDFN0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iathedqn2jhxt3i5dl4d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8dbEDFN0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iathedqn2jhxt3i5dl4d.png" alt="tired cat" width="750" height="748"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, since you decided to change the kernel to the latest stable version, here is what happens, and how to solve the problem :&lt;/p&gt;

&lt;p&gt;For this, I will give you my own experience :&lt;/p&gt;

&lt;p&gt;I use &lt;a href="https://pop.system76.com/"&gt;Pop!_OS 22.04 LTS&lt;/a&gt;, which is based on Ubuntu 22.04 LTS which is a &lt;a href="https://en.wikipedia.org/wiki/List_of_Linux_distributions#Debian-based"&gt;Debian based distribution&lt;/a&gt;, I used this version because this is what I personally found good on my laptop with &lt;a href="https://en.wikipedia.org/wiki/Nvidia_Optimus"&gt;Nvidia Optimus&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;if you are an Arch user, and want something on top of KDE that supports Optimus, there is the amazing &lt;a href="https://discovery.endeavouros.com/category/nvidia/"&gt;EndeavourOS&lt;/a&gt; but that's not our main topic, this is just for people who want to discover the Linux world&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Let's begin :&lt;/p&gt;

&lt;p&gt;This is how to get your Linux distribution version :&lt;br&gt;
&lt;code&gt;cat /etc/os-release&lt;/code&gt;&lt;br&gt;
And this is how to get your kernel version :&lt;br&gt;
&lt;code&gt;uname -r&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The result&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zmJwI6V9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t9hkx3zcg1ycxe0irffw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zmJwI6V9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t9hkx3zcg1ycxe0irffw.png" alt="Kernel version" width="880" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you run VMWare Workstation, it will ask you to compile some modules for this kernel&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tO_KAcBz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f26ee57pde1f3mqjqegv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tO_KAcBz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f26ee57pde1f3mqjqegv.png" alt="compile kernel" width="525" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then it will start building the modules vmmon and vmnet&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4raCACIF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wayfrhcgck127nmt45f2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4raCACIF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wayfrhcgck127nmt45f2.png" alt="vmnet" width="525" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And this where it messes and I got the error (unable to install all modules):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3AVntuhQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eqyqdml9v14aky1ayvav.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3AVntuhQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eqyqdml9v14aky1ayvav.png" alt="error" width="650" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The log shows compilation error due to C libraries missing ...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SmVvhRA6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q3tuyrzwijfmquwf8io7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SmVvhRA6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q3tuyrzwijfmquwf8io7.png" alt="log" width="880" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So here is the solution that worked with me :&lt;/p&gt;

&lt;p&gt;The solution is in this &lt;a href="https://github.com/mkubecek/vmware-host-modules"&gt;excellent repo&lt;/a&gt;, it is described :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This repository tracks patches needed to build VMware (Player and&lt;br&gt;
Workstation) host modules against recent kernels. As it focuses on recent&lt;br&gt;
kernels (older ones do not need patching), only &lt;strong&gt;vmmon&lt;/strong&gt; and &lt;strong&gt;vmnet&lt;/strong&gt; modules are&lt;br&gt;
currently handled as the rest has been upstreamed for some time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;First, let's &lt;a href="https://git-scm.com/docs/git-clone"&gt;clone&lt;/a&gt; it to our machine&lt;br&gt;
&lt;code&gt;git clone https://github.com/mkubecek/vmware-host-modules.git&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Git will create a new folder and name it the same name as the git repo, which is &lt;strong&gt;vmware-host-modules&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cd vmware-host-modules&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The repo appears almost empty, the files we need are in the &lt;a href="https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell"&gt;branchs&lt;/a&gt;, we can check them with &lt;/p&gt;

&lt;p&gt;&lt;code&gt;git branch -r&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We will find that it contains branchs for Player and Workstation, with their respective versions, I am using &lt;strong&gt;16.2.4&lt;/strong&gt;, to get the branch name, we can directly use :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you use the latest Worsktation at the time of writing/editing this article, which is &lt;code&gt;workstation-17.0.0&lt;/code&gt; just replace the version number and you are all set !&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git branch -r | grep -i 16.2.4&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then we switch to that branch depending on which version you need :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git checkout workstation-16.2.4&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yf3uewYJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lsryp7z3pkikgmszaddd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yf3uewYJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lsryp7z3pkikgmszaddd.png" alt="branchs" width="880" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can avoid all this by directly clone the branch (replace the VMWare version with the one you use) :&lt;br&gt;
&lt;code&gt;git clone -b workstation-16.2.4 https://github.com/mkubecek/vmware-host-modules.git&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and then once we are there, we just need to compile our modules and install them with the famous :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;make &amp;amp;&amp;amp; sudo make install&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;it should not take time, and TADA ! &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update : Nov 2022&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After upgrading to kernel version 6.xx I got an issue, here is simply how to solve it :&lt;/p&gt;

&lt;p&gt;... after doing &lt;code&gt;make&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;tar -cf vmnet.tar vmnet-only&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;tar -cf vmmon.tar vmmon-only&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo mv vmnet.tar /usr/lib/vmware/modules/source/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo mv vmmon.tar /usr/lib/vmware/modules/source/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo vmware-modconfig --console --install-all&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And if you get issues with gcc as incompatible with the one you are using (gcc 11 vs gcc 12) just change the symlink to the newest one :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;gcc --version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;which gcc&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo unlink /usr/bin/gcc&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo ln /usr/bin/gcc-12 /usr/bin/gcc&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And check again with &lt;/p&gt;

&lt;p&gt;&lt;code&gt;gcc --version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WoNRub-e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fwk5ce79puhns5d3jgxo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WoNRub-e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fwk5ce79puhns5d3jgxo.png" alt="Tada" width="880" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vmware</category>
      <category>linux</category>
      <category>kernel</category>
      <category>virtualization</category>
    </item>
  </channel>
</rss>
