commit 267264d9bf1d541c236ad073406c0ea4386f53d9 Author: Simon Zeyer Date: Tue Aug 25 14:37:00 2026 +0200 Init Repo diff --git a/.config b/.config new file mode 100644 index 0000000..e69de29 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..fb1f15e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,71 @@ +FROM ubuntu:22.04 + +# Prevent interactive prompts during package installation +ENV DEBIAN_FRONTEND=noninteractive +ENV LANG=C.UTF-8 + +# Install official OpenWrt build dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + ca-certificates \ + clang \ + cpio \ + curl \ + file \ + gawk \ + gettext \ + git \ + libelf-dev \ + libglib2.0-dev \ + libncurses5-dev \ + libncursesw5-dev \ + libssl-dev \ + python3 \ + python3-dev \ + python3-pip \ + python3-ply \ + python3-pyelftools \ + python3-setuptools \ + rsync \ + subversion \ + swig \ + time \ + unzip \ + wget \ + zlib1g-dev \ + sudo \ + && rm -rf /var/lib/apt/lists/* + +# Create a non-root build user (OpenWrt requires building as non-root) +RUN useradd -m -s /bin/bash builduser && \ + echo "builduser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers + +USER builduser +WORKDIR /home/builduser + +# Clone target OpenWrt release (change branch as needed) +ARG OPENWRT_BRANCH=openwrt-25.12 +RUN git clone --depth 1 -b ${OPENWRT_BRANCH} https://git.openwrt.org/openwrt/openwrt.git openwrt + +WORKDIR /home/builduser/openwrt + +RUN echo "src-git ha_cluster https://github.com/pgaufillet/openwrt-ha-feed.git" >> feeds.conf.default + +# Update and install default package feeds +RUN ./scripts/feeds update -a && \ + ./scripts/feeds install -a + +RUN echo "CONFIG_TARGET_x86=y" > .config && \ + echo "CONFIG_TARGET_x86_64=y" >> .config && \ + echo "CONFIG_PACKAGE_dnsmasq-ha=y" >> .config && \ + echo "CONFIG_PACKAGE_lease-sync=y" >> .config && \ + echo "CONFIG_PACKAGE_owsync=y" >> .config && \ + echo "CONFIG_PACKAGE_ha-cluster=y" >> .config && \ + echo "CONFIG_PACKAGE_luci-app-ha-cluster=y" >> .config && \ + sed -i 's/CONFIG_PACKAGE_dnsmasq=y/# CONFIG_PACKAGE_dnsmasq is not set/' .config && \ + make defconfig + +RUN make -j$(nproc) download +RUN make -j$(nproc) V=s + +CMD ["/bin/bash"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..071b1c6 --- /dev/null +++ b/README.md @@ -0,0 +1,19 @@ +Setup: + +mkdir -p bin dl +touch .config + +chown -R 1000:1000 bin dl .config + +docker compose up -d + + +Making changes: + +Configure OpenWrt: +docker compose exec -it openwrt-builder make menuconfig +Download target source files: +docker compose exec -it openwrt-builder make -j$(nproc) download +Compile firmware: +docker compose exec -it openwrt-builder make -j$(nproc) V=s + diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..a3735fb --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,28 @@ +version: '3.8' + +services: + openwrt-build: + build: + context: . + dockerfile: Dockerfile + container_name: openwrt-build +# image: openwrt-build:latest + user: "1000:1000" + tty: true + stdin_open: true + volumes: + # Firmware outputs mapped directly to host filesystem + - ./bin:/home/builduser/openwrt/bin + # Source tarballs cached on host to avoid re-downloading across builds + - ./dl:/home/builduser/openwrt/dl + # Persistent build configuration file (.config) + - ./.config:/home/builduser/openwrt/.config + # Named volumes for heavy build artifacts (maximizes I/O performance) + - openwrt-build-dir:/home/builduser/openwrt/build_dir + - openwrt-staging-dir:/home/builduser/openwrt/staging_dir + - openwrt-ccache:/home/builduser/.ccache + +volumes: + openwrt-build-dir: + openwrt-staging-dir: + openwrt-ccache: