How to compile native programs for use in openwrt ------------------------------------------------- 1) Install required packages to the host system : debian,ubuntu : apt install build-essential patch libncurses-dev python3-distutils unzip gawk wget git fedora: dnf install make patch gcc g++ ncurses-devel git perl Other packages may be required on your distribution. Look for the errors. 2) Download latest SDK for your target platform from https://downloads.openwrt.org examples : curl -o - https://downloads.openwrt.org/releases/23.05.5/targets/x86/64/openwrt-sdk-23.05.5-x86-64_gcc-12.3.0_musl.Linux-x86_64.tar.xz | tar -Jxv cd openwrt-sdk-23.05.5-x86-64_gcc-12.3.0_musl.Linux-x86_64 curl -o - https://downloads.openwrt.org/snapshots/targets/x86/64/openwrt-sdk-x86-64_gcc-13.3.0_musl.Linux-x86_64.tar.zst | tar --zstd -xv cd openwrt-sdk-x86-64_gcc-13.3.0_musl.Linux-x86_64 3) Install required libs ./scripts/feeds update base packages ./scripts/feeds install libnetfilter-queue zlib libcap luajit 4) If you need static build edit `feeds/packages/lang/luajit/Makefile` change BUILDMODE from "dynamic" to "mixed" add '$(CP) $(PKG_INSTALL_DIR)/usr/lib/*a $(1)/usr/lib/' after '$(CP) $(PKG_INSTALL_DIR)/usr/lib/*so* $(1)/usr/lib/' should look like : define Build/Compile $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \ HOST_CC="$(HOSTCC) $(HOST_CFLAGS) $(HOST_BITS)" \ CROSS="$(TARGET_CROSS)" \ DPREFIX=$(PKG_INSTALL_DIR)/usr \ PREFIX=/usr \ TARGET_SYS=Linux \ TARGET_CFLAGS="$(TARGET_CFLAGS)" \ BUILDMODE=mixed rm -rf $(PKG_INSTALL_DIR) mkdir -p $(PKG_INSTALL_DIR) $(MAKE) -C $(PKG_BUILD_DIR) \ DPREFIX=$(PKG_INSTALL_DIR)/usr \ PREFIX=/usr \ TARGET_SYS=Linux \ install endef define Build/InstallDev $(INSTALL_DIR) $(1)/usr/include/luajit-2.1 $(CP) $(PKG_INSTALL_DIR)/usr/include/luajit-2.1/*.{h,hpp} $(1)/usr/include/luajit-2.1 $(INSTALL_DIR) $(1)/usr/lib $(CP) $(PKG_INSTALL_DIR)/usr/lib/*so* $(1)/usr/lib/ $(CP) $(PKG_INSTALL_DIR)/usr/lib/*a $(1)/usr/lib/ $(INSTALL_DIR) $(1)/usr/lib/pkgconfig $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/luajit.pc $(1)/usr/lib/pkgconfig/ $(CP) $(PKG_INSTALL_DIR)/usr/bin/luajit-$(PKG_VERSION) $(PKG_INSTALL_DIR)/usr/bin/$(PKG_NAME) endef 5) Prepare openwrt package definitions cp -R /opt/zapret2/docs/compile/openwrt/. . cp -R /opt/zapret2/nfq2 package/zapret/nfqws2 cp -R /opt/zapret2/mdig package/zapret/mdig cp -R /opt/zapret2/ip2net package/zapret/ip2net 6) Prepare .config make defconfig If you only need bins without packages comment 'CONFIG_AUTOREMOVE=y' line in .config Change 'y' to 'n' in Config.in should look like : config AUTOREMOVE bool "Automatic removal of build directories" default n and in Config-build.in should look like : config AUTOREMOVE bool default n 7) Compile dynamic build : make package/{nfqws2,mdig,ip2net}/compile static build : make CFLAGS=-static LDFLAGS=-lgcc_eh package/{nfqws2,mdig,ip2net}/compile 8) Get result executables only : build_dir/target/ ipk or apk packages : bin/packages/*/base 9) Installing to openwrt to use with zapret zapret with or without binaries should be already installed in /opt/zapret2. Install ipk's or apk's with all compiled progs using opkg or apk. Bins are placed to /opt/zapret2/binaries/my. Or copy binaries there manually and set chmod 755 to them. Run install_bin.sh or install_easy.sh. They will use bins in 'my' folder.