Internet unstable after recent update

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.

3 Likes

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! :smiley:

I’m to noob to compile my own kernel but could be an interesting read :sweat_smile:.

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

1 Like

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.ā€ :sweat_smile: Maybe someone here can share tips.

Yeah, I should surely change my habits… this friendly forum is much too addictive… :wink: 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. :smiley:

Thanks for taking the effort to minutely describe the steps you took!

1 Like

Haha, I totally get you—this forum is dangerously addictive! :grinning_face_with_smiling_eyes:

In relation to our ages, let’s just say we’re in the ā€œvintage computersā€ club. :wink:

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!

2 Likes

An awful lot of this today…

:angry:

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…