I think it should be mentioned in the software news at https://gitlab.com/endeavouros-filemirror/Important-news/blob/main/README.md. The internet being this broken is a major issue which makes the OS barely usable depending on what you are doing.
Hello! Iām a new user to EndeavourOS and, of course, the day I full send the switch-over ENDOS get a bug like this. It really is a critical issue (for a multitude of reasons) as pointed out by @albersc2. Package updates fail / the online installer was failing for me yesterday (originally I thought it was a mirror issue; I guess I know the real reason why now) / any āauto-updatingā scripts that run on application startup cause them to time-out & crash / cloud syncing is unreliable / filling out any online form is unreliable / gaming is unreliable.
Because I have a relatively new partition and Iām not afraid of breaking things, Iām vibe-coding the kernel patch using the fixes provided by Oscar Mae. Figured Iād suggest the option for others in my boat that arenāt afraid of the vibe-risks. This includes downloading and unpacking the most recent Arch linux PKGBUILD, applying the fix, and rebuilding (this takes a long compute time).
For those in my situation, vibing might be the fastest way to a fix; as others have pointed out you could try to downgrade to an older kernel version. But when I did this I broke my boot to desktop (alt+f2 still worked to get a console). I guess you need to downgrade some other things too besides the ltm kernel or things break.
Hi FSR,
I would also like to encourage people to compile their own fixed and fully functional 6.16.4 kernel. The process is pretty straightforward, and if you know a little bit about what you are doing, the risks are minimal or non-existent. Once you do it, it is very rewarding. I think it is something that all Linux enthusiasts should try at some point.
I just did it, and it took me 40 minutes to compile (i5 10400) and 10 minutes for the rest. If anyone needs a little mini-guide, Iām willing to share how I do it, and we can improve it together. If anyone else thinks itās a good idea, letās do it. I donāt know if something similar has already been done in the forum.
This sounds lika a good idea! Guides are always good!
Iām to noob to compile my own kernel but could be an interesting read .
Iāll just wait for them to fix it(hopefully by next version).
Objective of This Guide
Step-by-step creation of the 6.16.4 kernel patched with Oscar Maesā fix, ensuring fully functional internet connectivity.
This is by no means a āguideā in the strict sense, as there are many ways to prepare, compile, and install a kernel. Rather, itās a step-by-step walkthrough of the method that works for meāone Iāve learned and refined over time. It has been tested and works well on my system, which is a 10th-generation i5 with a dedicated NVIDIA 4060 GPU. On hybrid or different hardware setups, or with different bootloaders, some specific steps may vary.
If anyone identify any issues with this method on a specific system, please report them!
Warning / Disclaimer
This guide is provided for educational purposes only. Although this process is generally safe if followed correctly, every system is different, and each userās experience may vary.
Use this guide at your own risk. Make sure to backup important data and understand each step before proceeding.
Mistakes during kernel/modules installation or final steps, can make your system unbootable if precautions are not taken.
Following this guide carefully minimizes risks, but responsibility ultimately lies with the user.
CHAPTER 1: Prerequisites
Before compiling your own patched kernel, make sure you have the following:
1-Working Internet Connection
You must have a reliable internet connection before starting, since downloading sources and dependencies requires it.
Note: this may not be straightforward if your current kernel has the IPv4 bug. If possible, itās recommended to work with a kernel that allows a stable internet connection. If your connection is not fully stable, you can still attempt the process, but pay close attention to any download error messages and repeat the step until it completes successfully.
2-Disk Space
Youāll need at least ~40 GB of free space (just to be safe), as the compilation process itself takes around 26 GB.
3-Install Required Tools
Run:
sudo pacman -S bc rust rust-bindgen rust-src graphviz python-sphinx texlive-latexextra
These tools are necessary to successfully compile the kernel and generate its documentation.
4-NVIDIA Users
If you have an NVIDIA GPU, I recommend to install nvidia-dkms beforehand. This makes building the NVIDIA kernel modules for your new kernel much easier. There are surely other ways to do it, but I suggest this one.
sudo pacman -S nvidia-dkms
This package conflicts with the regular nvidia
package, which will be uninstalled and replaced. Pay special attention to this step if your internet connection is unstable, and watch for any download errors.
CHAPTER 2: Downloading the Source and Applying the Fix
Clone the Arch Linux kernel repository
You can choose a custom directory to keep things organized. For example, to clone into ~/custom-kernel:
git clone https://gitlab.archlinux.org/archlinux/packaging/packages/linux.git ~/custom-kernel
Navigate to the repository
cd ~/custom-kernel
Preparing the Sources for Direct Modification
makepkg --nobuild
Once the sources are prepared, navigate to the kernel source directory:
cd src/linux-6.16.4
Now we have to modify the file net/ipv4/route.c
I use Kate:
kate net/ipv4/route.c
and apply the diff as showed here: 7 insertions(+), 3 deletions(-)
(If youāre not sure how to modify route.c yourself, just let me know, and I can share a pre-patched version of the file with the fix already applied. You can then replace the original ~/custom-kernel/src/linux-6.16.4/net/ipv4/route.c with this version before compiling)
This is the if
block already modified with the fix applied, including a couple of lines before and after.
!netif_is_l3_master(dev_out))
return ERR_PTR(-EINVAL);
if (ipv4_is_lbcast(fl4->daddr)) {
type = RTN_BROADCAST;
/* reset fi to prevent gateway resolution */
fi = NULL;
} else if (ipv4_is_multicast(fl4->daddr)) {
type = RTN_MULTICAST;
} else if (ipv4_is_zeronet(fl4->daddr)) {
return ERR_PTR(-EINVAL);
}
if (dev_out->flags & IFF_LOOPBACK)
flags |= RTCF_LOCAL;
CHAPTER 3: Compiling the Kernel and Modules
1-Make sure you are in the source directory (you should already be there)
(cd ~/custom-kernel/src/linux-6.16.4)
2-Compile the kernel and modules
Use the LOCALVERSION option to append a custom suffix to your kernel version (e.g., -fix):
make LOCALVERSION=-fix -j$(nproc)
Note: -j$(nproc)
automatically sets the number of parallel jobs to the number of CPU cores on your system. If your system tends to overheat or has poor cooling, you can reduce the number of jobs (e.g., -j4
) to limit CPU usage. This will make the compilation slower but can help prevent thermal issues.
Now wait for the compilation to finish; it may take some time.
This entire compilation process takes place only inside the ~/custom-kernel
directory, without modifying any system directories at this stage. The final build will take up approximately 26 GB of disk space.
In the next step, the final kernel version will be 6.16.4-arch1-1-fix and the modules will be installed under /lib/modules/6.16.4-arch1-1-fix
This ensures that your custom kernel and modules do not conflict with the official Arch kernel.
3-Installing the Modules
sudo make modules_install INSTALL_MOD_STRIP=1
This will place all modules in the directory we mentioned earlier (/lib/modules/6.16.4-arch1-1-fix). The INSTALL_MOD_STRIP=1 option strips debug symbols, reducing the size of the modules.
4-Installing the Kernel
After installing the modules, install the kernel itself with:
sudo make install
This will create two files in /boot:
vmlinuz (the compressed kernel image)
System.map (contains the kernelās symbol table)
(you can ignore the LILO error if it appears)
After installing the kernel, rename the files in /boot
sudo mv /boot/vmlinuz /boot/vmlinuz-linux-6.16.4-arch1-1-fix
sudo mv /boot/System.map /boot/System.map-linux-6.16.4-arch1-1-fix
CHAPTER 4: FINAL STEPS
1-Installing NVIDIA Modules for the New Kernel (if you have nvidia drivers installed)
If you have an NVIDIA GPU and installed nvidia-dkms, you need to build the NVIDIA kernel modules for your new kernel. Replace 580.76.05 with the version of your installed NVIDIA driver:
sudo dkms install --no-depmod nvidia/580.76.05 -k 6.16.4-arch1-1-fix
sudo depmod 6.16.4-arch1-1-fix
2.Generating the Initramfs
Finally, generate the initramfs for your custom kernel using dracut:
sudo dracut --force --hostonly --no-hostonly-cmdline /boot/initramfs-linux-6.16.4-arch1-1-fix.img 6.16.4-arch1-1-fix
(itās just one line)
The output file will be placed in /boot and named /boot/initramfs-linux-6.16.4-arch1-1-fix.img
This initramfs is required for booting your custom kernel and loading necessary modules at startup.
3-Updating the Bootloader and Rebooting
Finally, update your bootloader as you normally do. I use GRUB:
sudo grub-mkconfig -o /boot/grub/grub.cfg
This will detect your new kernel (6.16.4-arch1-1-fix) and add it to the boot menu.
Once this is done, you can reboot your system and select your new custom kernel from the boot menu to test it!
With this, this little guide is now complete, covering everything from prerequisites to booting your patched kernel.
One of the reasons for not enabling IPV6 is to reduce the ability to track. This old thread from Reditt gives both the pros and cons.
A few more references
Still another article
From the article
This should indeed be in the Software News section.
Iām actually rather happy that (almost) everything here can run IPv6āsaved me from that nasty IPv4 bug. There are a few devices (like WLED and ESP32 boards) that can only talk IPv4 in my network, but thatās what dual stack is for.
The only thing I donāt like (of course) is the much higher complexity of IPv6. Had to set up some things correctly, because my provider uses a 56-bit prefix, not 64 bit like some software seems to assume. But done correctly, it works very well.
.
To begin with, the way that IPv6 addresses are usually issued means that most devices wonāt have just one address. Instead, theyāre likely to get various ranges, which means that each time you see a different IPv6 address you donāt know whether it is a distinct device. This is sort of the reverse of the IPv4 problem. Under IPv4 and NAT, one address corresponds to multiple machines. Under IPv6, one machine may correspond to multiple addresses.
.
Same here, and Unbound+Dnscrypt configured for IPv4 AND IPv6.
Good morning! Iāve improved the kernel creation guide by formatting it and correcting a few paragraphs that I found confusing or poorly structured. Any comments, advice, or contributions are welcome.
Great guide. Definitely much more streamlined than whatever I ended up doing. Question for you though. If I installed with system-md (not grub) how do I follow your final steps:
Finally, update your bootloader as you normally do. I use GRUB:
sudo grub-mkconfig -o /boot/grub/grub.cfg
Personally, Iāve only ever used GRUB, as thatās what Iām familiar with. However, make sure that the following files are in the correct location: (The first two are essential)
vmlinuz-linux-6.16.4-arch1-1-fix
initramfs-linux-6.16.4-arch1-1-fix.img
System.map-linux-6.16.4-arch1-1-fix
Then you may then need to create or edit the file:
loader/entries/linux-6.16.4-fix.conf
Maybe with something like this inside:
title Arch Linux 6.16.4-fix
linux /vmlinuz-linux-6.16.4-arch1-1-fix
initrd /initramfs-linux-6.16.4-arch1-1-fix.img
options root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw
(you need the UUID of your root partition)
ābut Iām only speaking from what Iāve read, as I havenāt personally tried this.
More info here:
Perhaps someone on the forum can confirm what Iām saying or give you better guidance.
I wonder how to do that āthe EOS wayā, so that maybe reinstall-kernels
would pick up a self-built kernel and install it using dracut, for those of us using systemd boot.
Hey Moonbase59, looks like youāre one of the regulars here. Nice to meet you! Iām around 55 myselfāgot my start with a ZX Spectrum back in ā83.
Regarding what you said, honestly, I have no idea how to do it the āEOS way.ā Maybe someone here can share tips.
Yeah, I should surely change my habits⦠this friendly forum is much too addictive⦠Add a (currently undisclosed) 2-digit number to your age and you know mine. Guess my profile reveals a bitā¦
Anyway, I only recently (a few months ago) decided to give Arch a chance again, after not using it for a while, and stumbled over EOS. The first ever distro that actually keeps me using Arch. That said, I can also still learn a lot about EOS, and we do have very knowledgeable people here, so maybe one of those will enlighten us.
Thanks for taking the effort to minutely describe the steps you took!
Haha, I totally get youāthis forum is dangerously addictive!
In relation to our ages, letās just say weāre in the āvintage computersā club.
Thanks for your kind words. Iāve always enjoyed learning new things and then sharing what Iāve learned. Plus, I get easily excited by any new idea or project that seems interesting.
Looking forward to seeing what we can all discover and share here. Cheers!
I am frankly amazed that this problem hasnāt been fixed, since the fix is out there, and anyone comfortable (and with the time) to compile a custom kernel can fix it easily.
This is a serious, major issue and itās stuck around quite a while considering itās theoretically a solved problem!
Exactly. Confused about this as well.
Maybe Arch starts losing interest in all that. Years of unpaid (well, mostly) efforts and now the reward is being constantly attacked⦠Wonder when the attacks on kernel.org will beginā¦