Linux + Cake SQM

Looks like there is a conflict with where master has gone. You'd have to resolve the conflicts by editing the partial merge (you'll see the old/new choices in the combined file) and commit to your local branch.

And for those of us who have no idea how to do that... are we just SOL?

To answer my own question, yes I suppose we are. On that note I took a shot at sorting the two files out and was able to integrate them. I successfully compiled a build but my hardware hasn't arrived yet so I don't have a test bed. If there's a way to attach files to this thread I'd be happy to share.

Google drive? Github? Dropbox? I think it is excellent that you are taking this approach and expanding on it. Taking one idea and furthering our collective knowledge. That is how we make progress!

Caveats: I'm not a programmer. I have almost zero experience with GitHub. I have even less experience with Linux. The fact I was able to update these files and successfully build is a bigger surprise to me than to you.

With that out of the way, here we go!

1. Download the modified files from here (Google Drive Link) and save them in a convenient location. I put them in ~/1968updates.
2. Clone the OpenWRT git repository.
3. Create a branch. I called mine x86patch.
4. Pull in the 1968 pull request as a patch and apply it.
5. Replace the two bad files with the files from step 1.
6. Add the new files to git.
7. Continue the patch.
8. You are ready to build. :sunglasses:

Yeah I admit that isn't very helpful so here are the commands I used:

> me@computer:~$ git clone https://git.openwrt.org/openwrt/openwrt.git ; cd openwrt
me@computer:~/openwrt$ git checkout -b x86patch
me@computer:~/openwrt$ wget https://github.com/openwrt/openwrt/pull/1968.patch
me@computer:~/openwrt$ git am 1968.patch
me@computer:~/openwrt$ cp ~/1968updates/gen_image_generic.sh ./scripts/gen_image_generic.sh
me@computer:~/openwrt$ cp ~/1968updates/Makefile ./target/linux/x86/image/Makefile
me@computer:~/openwrt$ git add scripts/gen_image_generic.sh
me@computer:~/openwrt$ git add target/linux/x86/image/Makefile
me@computer:~/openwrt$ git am --continue

Now you can continue with your regular build process as if you've just finished cloning the repository.

Let us never speak of this again.

1 Like

OK that totally didn't work! :roll_eyes: And I can't edit the post so let's try again! This time with feeling!!*
Caveats: I'm not a programmer, use at your own risk, blah blah blah...

With that out of the way, here we go!

  1. Specific Commands follow. If you use the same directory and branch names you can just copy-paste!
  2. Download the modified files from here (link corrected) and save them in ~/1968updates.**
  3. Clone the OpenWRT git repository.
  4. Create a branch called x86patch.
    Here are the commands for steps 3 and 4:

git clone https://git.openwrt.org/openwrt/openwrt.git
cd openwrt
git checkout -b x86patch

  1. Pull in the 1968 pull request as a patch and apply it.
  2. Replace the two bad files with the files from step 2.

wget https://github.com/openwrt/openwrt/pull/1968.patch
patch -p1 < 1968.patch
cp ~/1968updates/gen_image_generic.sh ./scripts/gen_image_generic.sh
cp ~/1968updates/Makefile ./target/linux/x86/image/Makefile

  1. Add the new files to git.

git add config/Config-images.in
git add package/base-files/files/lib/upgrade/common.sh
git rm package/boot/grub2/Makefile
git add scripts/gen_image_generic.sh
git add target/linux/x86/base-files/lib/preinit/79_move_config
git add target/linux/x86/base-files/lib/upgrade/platform.sh
git add target/linux/x86/generic/config-4.14
git add target/linux/x86/generic/config-4.19
git add target/linux/x86/image/Makefile
git add target/linux/x86/image/grub-iso.cfg
git add tools/firmware-utils/Makefile
git add tools/firmware-utils/src/ptgen.c
git add package/boot/grub2/common.mk
git add package/boot/grub2/grub2-efi/
git add package/boot/grub2/grub2/

  1. You are ready to build. :sunglasses:

If you select Target System (x86), Subtarget (x86_64), and Target Profile (Generic x86/64) you'll get a new option under Target Images --->

[*] Build EFI images (Linux x86 or x86_64 host only)

If you see this you are in good shape, and when you compile you'll see efi images like

openwrt-x86-64-combined-ext4-efi.img.gz
openwrt-x86-64-combined-squashfs-efi.img.gz

Final caveats: I haven't had a chance to load this on hardware yet. It looks correct but I won't know for sure until the next day or two when I give it a go.

Footnotes:

  • with feeling and more exclamation points.
    ** Sorry the link got messed up. But I don't think the files were quite right anyway. I spent a good chunk of my weekend sorting out what went wrong. I think I might have it now.

@warchief

2 Likes

I rebased, resoved conflicts and did some of the requested tidy ups in the PR, dumping it here https://git.openwrt.org/?p=openwrt/staging/ldir.git;a=shortlog;h=refs/heads/pr/1968

Completely untested. Maybe it will save some of the above work arounds for you.

5 Likes

(Talking to myself again...)

Well today I was able to compile a UEFI image and install it on a ODROID-H2! Looks like we are in business :smiley:

Oh sure, steal my thunder @ldir. A thunder thief is what you are! All jokes aside thank you for doing this. My workarounds are because I wouldn't know where to begin to do what you did. Now how do we get UEFI support formally tested and merged?

All I did was git-pr 1968 github to pull in the PR branch.
git rebase master to rebase that onto current master state, which produced the conflict warning.
edit the 2 conflicting files to resolve those conflicts (which were very straightforward) and fix up a couple of things that were mentioned in the PR whilst I was there. It's straightforward if you know how of course, a perplexing mystery if you don't.

I've nudged the PR, you never know. :-/

The simplest way to accomplish building a custom firewall is @dlakelan's approach: Retain LuCI and the OpenWRT Kernel. By removing iptables and implementing nftables the cake sqm is fully coded. Simply remove and replace the firewall code.

Things are moving slowly but progress is happening. I will begin with @dlakelan's approach to start things off because this method involves switching things and my method involves learning linux networking commands, and I do not even know where to begin with those - there is no definitive guide on constructing anything like this, it is reserved for the knowledgeable few and seems as though people would like to have it kept that way. We are out to change that. If anyone can point out resources for us to use this topic can serve as a stepping stone for linux networking, the first of its kind.

Alternatively~

Thanks to @moeller0 and @jeff. This is a thread which will continue on the building of a Linux system with implementation of Cake SQM as I build the system, my underlying problem of having latency problems was solved with disabling the OpenWRT firewall and coding a basic firewall with iptables, which is fairly standard. @dlakelan also suggests running nftables which requies some extensive knowledge in the networking area. I built a stable firewall within 16 hours with iptables.

At first I tried to edit /etc/config/firewall with the default rules from fw3 print and just save the file that way. I ran into a ton of issues then figured luci builds the iptables rules from the /etc/config/firewall. This mainly came because I spent an hour fiddeling with the /etc/config/firewall adding iptables to it then something happened, I must have messed up the code and with my own iptables rules in it something happened and the latency issues were gone. I made an addition to the /etc/config/firewall and I couldn't get the firewall to connect. I had a pppoe dial and drew an ip and web access on the interfaces but nothing going through to the internet so I had to start over but I had a general idea of where the lag was in the iptables code of the default firewall.

Thus I set out to code a firewall with iptables. At the beginning of the coding I had trouble finding the script I wanted then adding the things I wanted to make the firewall function properly latency wise. After I got the firewall to function with cake but I had latency troubles which just gave me a sluggish sort of feeling, just like the default firewall, basically I had a custom firewall which didn't perform any better than what I had before and I felt like I wasted 10 hours.

Then I added some rules which broke through the latency issues. I can't tell which one did the trick but if anyone can offer some advice on how and why this happened, I set up the firewall to function as usual, then from my previous trial and error of editing the default firewalls iptables rules I saw these rules and changed them, this is what removed the lag.

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A -o eth1 -j ACCEPT
iptables -A -o pppoe-wan -j ACCEPT
ptables  -A -o br-lan -j ACCEPT
iptables -A FORWARD -j ACCEPT
iptables -A OUTPUT -j ACCEPT

Now one of these worked the magic - but which one?

rule 3,4,5 don't specify a chain to add after -A, so I don't think they could possibly work. rule 6 seems to bypass your firewall entirely allowing all forwarding, that would certainly reduce the computational overhead :joy:

but what you've done is valuable, if you see latency caused by firewalling it's useful to know and we should investigate!

Also I really think writing nftables rules is easier than iptables rules... so once we have debugged the problems with nftables on 19.x.x I invite you to ask questions on that thread, we can put together a script for you.

1 Like

So on the quest to to determine optimal latency figures based off of hardware and network configurations I have settled on the route I wish to take. I ordered another VDSL modem meaning I will have 3 broadcom chips to test and select the best performer. Where it gets really muddy is building a firewall.

I attempted to build and use an iptables firewall by inserting the script below into /etc/rc.local and system>>startup>firewall:disable. I was not able to make the firewall function and kept losing conneciton and rewriting the x86.


# clear iptable rules

iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X


# reset counters

iptables -Z


# set default policies

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A OUTPUT -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -j ACCEPT
iptables -A INPUT -i eth1 -j REJECT
iptables -A OUTPUT -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -j REJECT
iptables -t nat -A PREROUTING ACCEPT
iptables -t nat -A INPUT ACCEPT
iptables -t nat -A OUTPUT ACCEPT
iptables -t nat -A POSTROUTING ACCEPT

# Service rules
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT

# wan MTU fixing

iptables -t mangle -A FORWARD -p tcp -o eth1 -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu


# NAT traffic going out the WAN interface.

iptables -A POSTROUTING -o eth1 -j MASQUERADE


# forward from LAN to WAN

iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT


# Fix loopback settings

iptables -A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT
iptables -A INPUT -s 10.1.1.2/32 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT


# Allow traffic on lan

iptables -A INPUT -i eth0 -j ACCEPT


# SSH - accept from LAN

iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT


# enable traceroute rejections to get sent out

iptables -A INPUT -p udp -m udp --dport 33434:33523 -j REJECT --reject-with icmp-port-unreachable


# DNS - accept from LAN

iptables -A INPUT -i eth0 -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 53 -j ACCEPT


# DHCP client requests - accept from LAN

iptables -A INPUT -i eth0 -p udp --dport 67:68 -j ACCEPT


# allow known connections

iptables -A -m conntrack --ctstate DNAT -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT


# Allow incoming traffic from the firewall

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT


# Allow outgoing traffic from the firewall

iptables -A OUTPUT -m conntrack --ctstate NEW -j ACCEPT


# User initiated and related traffic

iptables -A FORWARD -i eth1 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED,DNAT -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT


# Internet access from subnets

iptables -A FORWARD -m conntrack --ctstate NEW -j ACCEPT

I decided ultimately on nftables and debian with cake sqm because compiling an openwrt kernel looks too difficult and honestly I would just write it in Linux if it is going to be that difficult. I wanted to see if there is something I can use in the meantime? Something I can build and test with in like an hour or so on a minimal firewall possibly without cake sqm - or would I need to just write a debian box with iptables, because I can probably do that in a day.

Mainly I am asking because looking for assistance in repairing my iptables script went nowhere and if I start with a Linux box I would just be trying to fix the same script.

maybe

Whoa! So all I do with OpenWrt-ImageBuilder-x86-64.Linux-x86_64.tar.bz2 would be the exact same way I would have with openwrt-x86-64-combined-ext4.img.gz? gunzip, fdisk, dd write to disk? SSH into the device and execute these in CLI?

## Place your custom repositories here, they must match the architecture and version.
# src/gz %n http://downloads.openwrt.org/releases/18.06.0-rc2
# src custom file:///usr/src/openwrt/bin/ramips/packages

## Remote package repositories
src/gz openwrt_core http://downloads.openwrt.org/releases/18.06.0-rc2/targets/ramips/mt7621/packages
src/gz openwrt_base http://downloads.openwrt.org/releases/18.06.0-rc2/packages/mipsel_24kc/base
src/gz openwrt_luci http://downloads.openwrt.org/releases/18.06.0-rc2/packages/mipsel_24kc/luci
src/gz openwrt_packages http://downloads.openwrt.org/releases/18.06.0-rc2/packages/mipsel_24kc/packages
src/gz openwrt_routing http://downloads.openwrt.org/releases/18.06.0-rc2/packages/mipsel_24kc/routing
src/gz openwrt_telephony http://downloads.openwrt.org/releases/18.06.0-rc2/packages/mipsel_24kc/telephony

## This is the local package repository, do not remove!
src imagebuilder file:packages


I am noticing that is not the current build 19.07, does the link change for the new build or do I copy and paste in 19.07. I just do not want to attempt to compile or build an image and not have a link or run into an error I cannot identify. Speaking of errors, how do I diagnose the errors, are there a few key commands after they occur when building the ROMS to help with this?

After thinking about it, compiling an image would be just about as work intensive as using the snapshot - as I would have to go through the same set up process as if I had compiled it. Appreciate it greatly @anomeome ! If I am going to go into the CLI it may as well be from the start and not half way in.

Also there is usually a few things I do when I write and compile the fresh image of OpenWRT. I will need direction of how to get them done. First, I set passwd. Then, I set the SSH to listen only on LAN, I need help to do this in CLI. Then, I set static links on my pc, switch, AP, I need to set this up in CLI. Next, I configure SQM and set this up using CLI. I am assuming I can configure sqm with vi /etc/config/sqm

I am copying the setup of my current x86 /etc/config/network and /etc/config/firewall and /etc/config/firewall. Are the any other locales which I should copy incase I can't get a link - this router is simple DHCP so I usually link as soon as the device is up.

I figure while I get an nftables firewall figured out for a debian box I can compile something.

  • After youtubing(https://youtu.be/kjzQg_sB8rY?t=621) I see abilities to call commands via CLI ~ i.e cd /bin ls
  • Found Set Password with passwd
  • Found /etc/config/dhcp for static IP handing to devices
  • Assume /etc/config/dropbear is used for setting SSH to listen only on LAN
  • Assume my current config will work if pasted into/etc/config/sqm or set as I go
  • And as far as diagnostice goes do I just use ip link ip addr cat /etc/network cat /etc/dhcp cat /etc/sqm ifstatus wan tc -s qdisc dmesg logread for any diagnostics?

With the cpuI ran into a ton of issues. I wasn’t sure which type to run and I initially wanted to run an 9700k but ultimately went with the pentium G4400 for latency performace. I ordered a used HP prodesk 600 g2 from ebay and after what I assume was the motherboard wiping and or corrupting the drives - hard drive, flash drive, solid state drive and not detecting the operating system I moved the cpu into another spare dell system I had which shared the same intel h110 chipset.

For ram its just I think it has 8gb ddr4 that shipped from dell.

For the nic I believe it was @jeff f who pointed out the counterfeit intel parts are widespread and I ended up ordering about 5 different nics. 4 intel and 1 broadcom. One of the intel nics was a counterfeit and the seller refunded the product. I have the INTEL I350-T2 in it right now but also used the Intel EXPI9402PT PRO/1000 and EXPI9400PT PRO/1000.

Basic cheapo dell psu.

I started with the distribution. As @moeller0 asked at the beginning and I did not really specify, what would be the outcome of a linux+cake build. To have a minimal system as possible and given the options of either buildimage with openwrt or a linux build I started with the linux build to be able to get the system up quicker as with the previous posts building an image on x86 may have had some problems. I went with ubuntu server 14.04. Here I also had a ton of trouble with getting services to run or commands to run. I did not have the prior knowledge of linux to troubleshoot and I spent over a week just getting the system to link. But what will be will be and alas it is up and running and the process to build a linux router is as such:

Install upstart

sudo apt-get install upstart

Install SSH server

sudo apt-get install openssh-server

Install editor - VIM

sudo apt-get install vim-nox

Install network manager

sudo apt-get install network-manager

Install ifconfig

sudo apt-get install net-tools

Disable keyboard reboot

sudo vim /etc/init/control-alt-delete.conf

comment out:

exec shutdown -r now “Control-Alt-Delete pressed”

Additional commands:

Service controls:

sudo /etc/init.d/service_name start|stop|restart|status

System directories:

cat /etc/var/syslog

cat /etc/var/kern.log

cat query-errors

cat /etc/var/chron

cat /etc/init.d

cat /lib/systemd/system

cat /etc/systemd/system

Packages:

sudo which (package)

sudo dpkg -l

sudo apt list --installed

Services:

sudo top

sudo initctl list

sudo service --status-all

NETWORK

Configure network

sudo vim /etc/network/interfaces


# The local loopback adapter

auto lo

iface lo inet loopback

# The network interface

auto eth0

iface eth0 inet dhcp

# The local network interface

auto eth1

iface eth1 inet static

address 10.1.10.1

netmask 255.255.255.0

dns-search example.com

dns-nameservers 10.1.10.1


Bring up interfaces

sudo ifdown interface & sudo ifup interface

Check routes

sudo ip route show

Update install, add contrib + non free

sudo vim /etc/apt/sources.list

sudo apt-get update

sudo apt-get upgrade

Enable ipv4 forwarding

sudo vim /etc/sysctl.conf

Uncomment:

#net.ipv4.ip_forward=1

Start service

sudo sysctl -p /etc/sysctl.conf

Helpful commands

sudo ifstatus interfaces

sudo lshw -class network

cat /proc/sys/net/ipv4/ip_forward

FIREWALL

Configure /etc/rc.local

sudo vim /etc/rc.local

Begin with minimal ruleset:


#!/bin/bash

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

iptables -A FORWARD -i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

exit 0


Make executable with

sudo chmod 755 /etc/rc.local

Reboot

sudo reboot

After getting the system functional continue to harden the firewall.

DHCP & DNS

Install isc DHCP

sudo apt-get install isc-dhcp-server

Configure Interface

sudo vim /etc/default/isc-dhcp-server

Add eth1 to:

INTERFACES=””

Configure isc

sudo vim /etc/dhcp/dhcpd.conf


# minimal sample /etc/dhcp/dhcpd.con

default -lease-time 600;

max-lease-time 7200;

subnet 10.1.10.0 netmask 255.255.255.0 {

range 10.1.10.50 10.1.10.200;

option routers 10.1.10.1;

option domain-name-servers 10.1.10.1;

option domain-name “mydomain.example”;

}

host abc {

hardware ethernet 00:00:00:00:00:00;

fixed-address 192.1.2.3;

}

host abc{

hardware ethernet 00:00:00:00:00:00;

fixed-address 192.1.2.3;

}

host abc {

hardware ethernet 00:00:00:00:00:00;

fixed-address 192.1.2.3;

}


Check route

sudo ip route

Restart service

sudo service isc-dhcp-server restart

Stop service

sudo service isc-dhcp-server stop

Start service

sudo service isc-dhcp-server start

Check service

sudo /etc/init.d/isc-dhcp-server status

Check DHCP leases

cd /var/lib/dhcp/

ls -l

cat dhcpd.lease

Install DNS Server

sudo apt-get install bind9

Change forwards to ISP forwards

sudo vim /etc/bind/named.conf.options


Fowarders {

1.2.3.4;

5.6.7.8;

};


Restart Bind9

sudo /etc/init.d/isc-dhcp-server restart

Cake SQM

Get tools

sudo apt-get install build-essential

Install git

sudo apt-get install git

Clone the git repo

sudo git clone https://github.com/tohojo/sqm-scripts

Change directory

cd ./sqm-scripts

Install SQM

sudo make install

Edit config

sudo vim /etc/sqm/default.conf

Start sqm on interfaces - change to your links’ variables in the forementioned

sudo service sqm@eth0 start

sudo service sqm@eth1 start

Or

qdisc cake1: root recnt 2 bandwidth 8500Mbit ack-filter ptm diffserv3 dual-dsthost overhead 30 ptm mpu 68

Reboot

sudo reboot

Useful commands

tc -d qdisc

tc -s qdisc

Ifconfig

ethtool -S (interface)

iptables -L -v -n

sysctl -a | grep net.ip

tcpdump

Sorry the text has to be in code I did not know how to properly add a scroll to the text. As I stated before I did not know whether I was in for building a linux router or a openwrt homebrew on x86. Now that I made one, I figure I will try the other for testing and report the results here.

Tonight I attempted to build an x86 image without success. I am running a liveboot of ubuntu 14.04 on a 16gb flash drive. I had to install python 3. If there are any recommendations to build the x86 image successfully please feel free to educate me. I will probably need to install on a HDD before I can continue the build but am I applying the patches correctly and pulling the files in/putting them in the required areas?

sudo apt install asciidoc bash binutils bzip2 flex git-core g++ util-linux help2man intltool libelf-dev make patch perl-modules wget build-essential libncurses5-dev gawk git libssl-dev gettext unzip zlib1g-dev file python swig time subversion ccache gettext libssl-dev xsltproc zip

sudo apt-get install build-essential checkinstall
sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
cd /usr/src
wget https://www.python.org/ftp/python/3.5.6/Python-3.5.6.tgz
sudo tar xzf Python-3.5.6.tgz
cd Python-3.5.6
sudo ./configure --enable-optimizations
sudo make altinstall

git clone https://git.openwrt.org/openwrt/openwrt.git

cd openwrt
git checkout master

wget https://github.com/openwrt/openwrt/pull/1968.patch
git am 1968.patch

x86: fix sysupgrade for EFI images pr/1968


https://git.openwrt.org/?p=openwrt/staging/ldir.git;a=snapshot;h=16b08944d599db65fb145ca071529fd8f1b7e10f;sf=tgz

x86: add EFI images and make iso images EFI bootable


https://git.openwrt.org/?p=openwrt/staging/ldir.git;a=snapshot;h=042684b07e3e3623ab6a7f7e6f69282b3808b2bc;sf=tgz

grub2: split to grub2 and grub2-efi packages
https://git.openwrt.org/?p=openwrt/staging/ldir.git;a=snapshot;h=c854285ef51d10f71fd66d847cc4ba40c9922107;sf=tgz


firmware-utils: ptgen: add GPT support


https://git.openwrt.org/?p=openwrt/staging/ldir.git;a=snapshot;h=070fa5660942378b2f69d1d5bea772d699feb835;sf=tgz

Extracted the 4 tar folders into ~/openwrt/1968updates.

Created a branch called x86patch.

When the command:

git checkout -b x86patch

Was done it gave an error for 2 patches saying should I dial it back or something? Selected no > continued to next step

./scripts/feeds update -a
./scripts/feeds install -a

make menuconfig

>>>>>>>>>>>Build failed: Error during writing of configuration.
>>>>>>>>>>620:6;674:4,678:4,689:4,689:4
>>>>>>>>>>>>Fatal error can't write conf.o:no space left on device

CONFIG_BUILD_LOG=y
CONFIG_CCACHE=y

CONFIG_PACKAGE_luci-ssl-nginx=y
CONFIG_PACKAGE_luci-app-sqm=y

make -j2 clean download toolchain/install world
make -j2 clean download world

Also attempted the imagebuilder method suggested by @anomeome to no avail with:

make image PROFILE=GENERIC
make image PACKAGES="pkg1 pkg2 pkg3 pkg4 -pkg5 pkg6"

successfully wrote an img file, dd onto flash drive, bios did not see any bootable device

ubuntu server 14.04.6 didn't work with cake because of 4.4 kernel. So that went out the window, in with Debian 10 and simple.qos was started on <iface> successfully.

I almost didn't notice but I kept running speed tests and the bandwidth wasn't being limited so I thought hm something is wrong and thus the result was cake was not working. I couldn't tell but I had a hint because there was no cake on tc -s qdisc just pfifo_fast. Now I have a new interfaces in ip a so I figure it is working.

On another note, I booted my previously failed openwrt homebrews using the above configs and they seemed to boot with no obvious errors, further testing to come.