Last weeks have been spent solely on reworking the build system.
First, it was a matter of rebranding the current LEDE back into OpenWrt and fixing a couple of hard-coded names that would cause issues with OpenWrt name. It also involved dropping the old OpenWrt build system which has not been used for years and most likely never will again, so that removes unnecessary code to maintain.
After rebranding, I spent some time verifying that the whole system still works.
Fortunately, there were only small bugs which were simple to fix.
And then came the main task of this project, to completely rework and massively simplify the whole building the image builder job a lot easier and resource intensive.
Firstly, since I was still gonna use Docker to images for a build environment updating the base image which is the actual build environment was needed from old Trusty 14.04 to fresh 18.04 Bionic. This proved to be mostly trial and error as a lot less of default packages were included in 18.04 so getting all dependencies working. After a while base image is now working fine and is relatively small, actually smaller than 14.04 base image.
This is due to less unnecessary packages.
Once the base image was sorted out I finally got working on dropping the unnecessary scripts, docker files and all of the hardcoded build files.
This proved to be not so hard, so work on a new docker based build system started.
So far it’s broken into only 4 separate scripts:
- docker-prepare-build system: Like its name hints it builds the base image and installs the needed packages. I am still thinking to maybe pull this from the auto built image on Docker Hub.
- generate-docker files: Which generates the temporary docker files needed for building inside a Docker 18.04 base image.
- docker-build: Which actually “builds” the image builder and SDK.
- build: Main script, which simply calls others to configure and build everything.
Number of scripts will most likely grow by one or two since the built image builder with all of the packages need to be packaged and then deployed in a runtime specific image which will only contain the bare minimum of packages to keep it as lightweight as possible.
Currently, building works fine for most custom packages using SDK, but its stuck at building ncurses with a weird LC_TIME assertion error which I need to fix.
So next period will be strictly for fixing the bugs and finishing the build system.
After that is done I will update the custom packages and try to get them upstreamed.