 It's 10 p.m. Do you know where your engineers are? Alright, so it's 10 p.m. I don't know what time it is in Germany, but let's do this. Okay, so the last little time we did one of these 10 p.m. streams, I think it was like last week on Friday, I was trying to get Linux, a miniature version of Linux running on the Metro ESP32 S3, which is a great platform to try because it has 16 megabytes of flash and 8 megabytes of PS RAM, that's what the N16 R8 stands for, of this room ESP32 S3 module, and I was able to get built binaries working, but I was like, I want to make my own custom binary because I wanted to make one that used the whole 16 megabytes of flash, and also I wanted to maybe have custom binaries on there. So some good news is, last time I was trying to get this script running, this JCM-MKBC Maxes build ESP32 Linux Wi-Fi shell script. So thanks to Max who wrote this script, and I was basically trying to run this, like I tried Mac OS and then I had an end curses problem with Brew, and it was kind of a pain to figure out, and I kind of tried working with MCIS, and MCIS had some issues. I tried WSL and WSL had a path complaint. I didn't actually get it built with WSL just by editing the path, turns out that was the easiest way, but then I was like, you know, this is a common issue, like you want to build something, and this is like a lot of like AutoConf patched GCC, you want to use CTNG, you want to do this custom build, and maybe you don't have Linux running, and again, you can't just use any Linux, it has to be kind of like real Linux to do this, like VirtualBox did work, but you had to have like 50 gigabyte drives. So what you would normally do in this situation is run something called a Docker, which I played with a couple of years ago, but I sort of remembered might be a really good option for this kind of problem, you know, you're running the script and you only need to run it once or twice, and maybe customize it, but you don't need like a GUI, you don't need like a whole operating system. So what Docker is, is a system where you have these things called images, sorry, here, yeah, images, and you can create an image with what's called a Docker file, and a Docker file looks like this, and you know, basically this is the port that I've made from, wait, this is, okay, this is, that's just a typo, that's a different thing I was doing. Instead of a shell script, you kind of port it over to a Docker file where you have these one commands, and then you tell the Docker, okay, like make this argument where I'm going to do stuff, you do all your app gets, and then you can run the commands from the shell script. So like, the shell script has all these commands, and you put them in as runs. It's not like one to one, I will say, like there were a couple of things that I had to adjust like, you know, the app, like the version of the Docker, you tell it like what operating system you want, and I tried like the default Debian, and it turns out the default Debian comes with Python 3.1.1, but ESP IDF has a bug that makes it not work with 3.1.1, and so I actually need to kind of go back to an earlier version of Ubuntu 2204, which is still actively supported, but thankfully comes with Python 3.10, which worked great. And then there's a couple other little things, like some environment path stuff I had to do, and I had to make a user. One thing I learned is the cross tool does not run as root, and like it's kind of not easy to make it let you run as root, but Docker files by default run as root, and so you can create a new user, I call this ESP32, and then I cone the directory where I do my work, and then I can continue running everything else as a user. I can go through what I build Max's version of the cross tool, and I build the kernel. This is actually also another thing that's interesting. So when you build the cross tool, it actually fails, but the failure is okay. You actually get like the GCC and everything gets compiled, and then the tool chain compiles, but then it like fails on something other thing. So I put a logical or here to be like, hey, this still worked. And then the next test is just to verify like, did you actually build the tool chain here? So here you verify like, you know, the shell command doesn't exist this GCC that's built by the cross tool for the extensive tool chain. And then once you build the tool chain, you go back to the directory, and then you actually go through and clone build root, and then you compile the boot tools and Linux. And then you can once it's compiled, you move the files over to a new directory. So this is all that created files. And then what you do is from your shell directory, you can copy the files over and then you can run ESP tool and partition tool, which is comes with the IDF. And then you burn it into your ESP32 board and it's booting Linux. So, yeah, this actually even has Wi-Fi working on it. So I have to figure out how to tell it what the access point is, but now I can customize it. So I got it compiling and working. Oh, and I'm going to publish the Docker file and the Docker build itself. If you want to just get started, it's pushed to Docker Hub under this path. You can actually just download it right now and duplicate this work pretty easily.