NETBOOT Alpine Linux using Alpine Linux! PXE Boot Server Setup
I want to add PXE boot functionality to my Proxmox VDI Thin Client project, but I need a functional PXE server first. Today, I build just that. Since I’m planning on using Alpine Linux as the network-booted operating system, I decided to build the server on Alpine as well to familiarize myself with it. In this case, the server is acting as the TFTP and HTTP server, and using the iPXE loader compiled with a custom script to network boot Alpine.
While I don’t go into it in this video, the next part of this series creates the Alpine APKOVL (overlay) to allow us to netboot into a fully configured thin client appliance, with no need to mount any root filesystems or home directories over the network. Once the appliance is booted, it’s completely self sufficient.
While I am planning on using this for a thin client for the SPICE protocol, you could also use this with Remmina for RDP or Firefox for a network booted kiosk. Anything where you can fit the entire filesystem in RAM and don’t need persistent storage for any files the user would change.
Blog post with all of the instructions to copy/paste:
https://www.apalrd.net/posts/2022/alpine_pxe/
Link to my Discord server:
https://discord.gg/xJsaEukAr4
If you find my content useful and would like to support me, feel free to here: https://ko-fi.com/apalrd
Timestamps:
00:00 – Introduction
01:53 – Alpine Installation
06:15 – Basic Setup
08:17 – HTTP Server
11:23 – Download Alpine Netboot
13:26 – TFTP Server
14:36 – iPXE Build
22:32 – DHCP Configuration for OPNsense
24:22 – Testing
#Linux
#Proxmox
#Netboot
#PXE
#AlpineLinux
by apalrd’s adventures
linux web server
Hello, I have a question:
Can I rent a dedicated server and boot the alpine Linux OS from home, using netboot?
im on alpine now apk is ffin fasst
Hello brother,u did a very good job,but got stuck in making pxe boot over http in clonezilla as it supports both tftp & http,As of now in ubuntu i made pxe boot on tftp but it takes a lot of time i want to make it over http please respond & help me
This is quite great. I wonder if you may also share the proxmox backup of this lxc ? That can be quite handy and fully working directly 😉
How would I go about, instead of downloading the image everytime I start the machine from the defined repo, I would make it available on the netboot server and get it from there – 18:55 is what Im talking about
You confuse me. You do the git hub and the scripting, but then you use nano and opensense.
Watching your videos is like taking a sip from a fire hydrant! I am in awe of your knowledge.
But keep em' coming, if I watch enough of them I'm sure I will eventually be able to follow it all!!! 😮
14:23 you said that tftp is running as root and chroot’d under /var/tftpboot. I haven’t tested this, but if it can mount /proc, I believe it can also do something like “chroot /proc/1/root” to escape the chroot?
riny nitpick here, but i'm pretty sure that alpine install came with Vi out of the box. no "need" to install nano. I found alpine a few months back and it feels a lot like gentoo from the mid 00's, super small, super fast, nice and small and customizable.
hi im getting stuck at building ipxe. this the error im getting
" [BUILD] bin-i386-pcbios/gdbserial.o
[BUILD] bin-i386-pcbios/gdbstub.o
[BUILD] bin-i386-pcbios/gdbudp.o
In file included from include/string.h:23,
from core/gdbudp.c:27:
In function '__constant_memcpy',
inlined from 'memcpy' at arch/x86/include/bits/string.h:168:10,
inlined from 'gdbudp_send' at core/gdbudp.c:206:2,
inlined from 'gdbudp_send' at core/gdbudp.c:163:13:
arch/x86/include/bits/string.h:94:44: error: array subscript 'const union <anonymous>[0]' is partly outside array bounds of 'uint8_t[6]' {aka 'unsigned char[6]'} [-Werror=array-bounds]
94 | dest_u->u32[0] = src_u->u32[0];
| ~~~~~~~~~~^~~
core/gdbudp.c: In function 'gdbudp_send':
core/gdbudp.c:53:16: note: object 'dest_eth' of size 6
53 | static uint8_t dest_eth[ETH_ALEN];
| ^~~~~~~~
In function '__constant_memcpy',
inlined from 'memcpy' at arch/x86/include/bits/string.h:168:10,
inlined from 'gdbudp_send' at core/gdbudp.c:206:2,
inlined from 'gdbudp_send' at core/gdbudp.c:163:13:
arch/x86/include/bits/string.h:95:44: error: array subscript 'const union <anonymous>[0]' is partly outside array bounds of 'uint8_t[6]' {aka 'unsigned char[6]'} [-Werror=array-bounds]
95 | dest_u->u16[2] = src_u->u16[2];
| ~~~~~~~~~~^~~
core/gdbudp.c: In function 'gdbudp_send':
core/gdbudp.c:53:16: note: object 'dest_eth' of size 6
53 | static uint8_t dest_eth[ETH_ALEN];
| ^~~~~~~~
In function '__constant_memcpy',
inlined from 'memcpy' at arch/x86/include/bits/string.h:168:10,
inlined from 'gdbudp_recv' at core/gdbudp.c:137:4:
arch/x86/include/bits/string.h:94:32: error: array subscript 'union <anonymous>[0]' is partly outside array bounds of 'uint8_t[6]' {aka 'unsigned char[6]'} [-Werror=array-bounds]
94 | dest_u->u32[0] = src_u->u32[0];
| ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
core/gdbudp.c: In function 'gdbudp_recv':
core/gdbudp.c:53:16: note: object 'dest_eth' of size 6
53 | static uint8_t dest_eth[ETH_ALEN];
| ^~~~~~~~
In function '__constant_memcpy',
inlined from 'memcpy' at arch/x86/include/bits/string.h:168:10,
inlined from 'gdbudp_recv' at core/gdbudp.c:137:4:
arch/x86/include/bits/string.h:95:32: error: array subscript 'union <anonymous>[0]' is partly outside array bounds of 'uint8_t[6]' {aka 'unsigned char[6]'} [-Werror=array-bounds]
95 | dest_u->u16[2] = src_u->u16[2];
| ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
core/gdbudp.c: In function 'gdbudp_recv':
core/gdbudp.c:53:16: note: object 'dest_eth' of size 6
53 | static uint8_t dest_eth[ETH_ALEN];
| ^~~~~~~~
cc1: all warnings being treated as errors
make: * [Makefile.housekeeping:952: bin-i386-pcbios/gdbudp.o] Error 1"
any help is appreciated
it a good video tutorial but i got problem.. when netbooting i got error message wget: server returned error http/1.1 404 not found how to solve this problem thank you…
wouldn't be more performant if we install all the stuff we need in a thin vm…
then collect all the installed stuff into a initrd/initramfs file (makecpio/dracut)…
in the ipxe boot process push this into memory (from the ipxe script,,,)
and launch vmlinuz against this memory image…
This channel is so underrated
Noice, now we're talking 😎 I look forward to further adventuring into the world of network-booted appliances and infrastructure.
Did I mention I love this channel
a 'net booted' Pi 4 with PiMox images/openwrt/21.02/arm64/default/20220427_11:58 lxd files for a fun tutorial
its a shame you dont walk us through a build of the arm variant included as pimox works fine as an arm clustered node https://www.youtube.com/watch?v=g1FXZIvVkq4 Installing Proxmox 7 on Raspberry Pi 4 with PiMox.
a generic Debian 'slax' of liveCD/USB variant fame would also be good too if only someone would port/write the script to make a fresh arm 'pi slax' build on demandwell worth advocating your channel far & wide for that ^_~Sir i would like to create a remmina kiosk..
I searched a lot but reached any where.
Please can you help me?
Can iPXE be used to image custom windows 10 images? Like an image with already installed applications? Or will batch scripts always have to be used post install?
Some 64bit system have 32bit efi. Example Linx7 tablet.
+1
Really cool to see you taking this to the next level, I'll definitely be looking out for your next video to get all the details for getting this set up!
Eu tenho um sistema assim utilizando o LTSP com debian e os terminais com raspberry’s
My question is are you installing the OS on the disks that are on each thin client, or running a diskless boot?