├── .github └── workflows │ └── build_openwrt_ipk.yaml ├── LICENSE ├── README.md ├── netmaker ├── Makefile └── root │ └── etc │ └── init.d │ └── netclient └── scripts └── build_ipk.sh /.github/workflows/build_openwrt_ipk.yaml: -------------------------------------------------------------------------------- 1 | name: 'Build docker image' 2 | on: 3 | # Auto build on push to main branch 4 | push: 5 | paths-ignore: 6 | - “README.md” 7 | - ".gitignore" 8 | - "LICENSE" 9 | branches: 10 | - main 11 | # Auto build @ every day 6:00am 12 | schedule: 13 | - cron: '0 6 * * *' 14 | jobs: 15 | openwrt-builder-ipk: 16 | name: 'Build ipk for openwrt branches' 17 | strategy: 18 | matrix: 19 | branch: ["openwrt-18.06", "openwrt-19.07", "openwrt-21.02", "master"] 20 | runs-on: ubuntu-latest 21 | # Use the Bash shell regardless whether the GitHub Actions runner is ubuntu-latest, macos-latest, or windows-latest 22 | defaults: 23 | run: 24 | shell: bash 25 | steps: 26 | - run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event." 27 | - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!" 28 | - run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}." 29 | - run: echo "Building ${{ matrix.branch }} branch." 30 | 31 | # Checkout the repository to the GitHub Actions runner 32 | - name: 'Checkout the repository to the GitHub Actions runner' 33 | uses: actions/checkout@v2 34 | 35 | # Set up QEMU 36 | - name: 'Set up QEMU' 37 | uses: docker/setup-qemu-action@v1 38 | 39 | # Login to DockerHub with username and token 40 | - name: Login to DockerHub with username and token 41 | uses: docker/login-action@v1 42 | with: 43 | username: ${{ secrets.DOCKERHUB_USERNAME }} 44 | password: ${{ secrets.DOCKERHUB_TOKEN }} 45 | 46 | # Build image and push to DockerHub 47 | - name: 'Build image DockerHub' 48 | run: | 49 | echo "Building ${{ matrix.branch }} branch." 50 | 51 | # build ipk 52 | docker run -t --rm -e OPENWRT_BRANCH="${{ matrix.branch }}" -v `pwd`:/src sbilly/openwrt-builder:latest /bin/bash /src/scripts/build_ipk.sh ${{ matrix.branch }} 53 | 54 | # Upload release 55 | - name: Upload binaries to release 56 | uses: svenstaro/upload-release-action@v2 57 | with: 58 | repo_token: ${{ secrets.TOKEN }} 59 | file: bin/*.ipk 60 | tag: ${{ github.ref }} 61 | overwrite: true 62 | file_glob: true -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | Copyright (c) 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 5 | 6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 7 | 8 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Netmaker-OpenWRT 2 | 3 | [Netmaker](https://github.com/gravitl/netmaker) is a platform for creating and managing fast, secure, and dynamic virtual overlay networks using WireGuard. This project offers OpenWRT packages for Netmaker. 4 | 5 | ## Installing package 6 | 7 | Download the prebuild package and copy it onto your OpenWRT installation, preferably into the `/tmp` folder. 8 | 9 | Then install the ipk package file: 10 | 11 | ```bash 12 | opkg install netmaker_*.ipk 13 | ``` 14 | 15 | Now start `netclient` of Netmaker: 16 | 17 | ```bash 18 | /etc/init.d/netclient start 19 | ``` 20 | 21 | ## Compiling from Sources 22 | 23 | To include Netmaker into your OpenWRT image or to create an `.ipk` package (equivalent to Debians .deb files), you have to build an OpenWRT image. 24 | 25 | Now prepare OpenWRT: 26 | 27 | ```bash 28 | git clone https://github.com/openwrt/openwrt 29 | cd openwrt 30 | 31 | ./scripts/feeds update -a 32 | ./scripts/feeds install -a 33 | ``` 34 | 35 | To build Netmaker for OpenWRT, you need to have Golang with OpenWRT build envirment. Then, you can insert the Netmaker package using a package feed or add the package manually. 36 | 37 | ### Add package by feed 38 | 39 | A feed is the standard way packages are made available to the OpenWRT build system. 40 | 41 | Put this line in your feeds list file (e.g. feeds.conf.default) 42 | 43 | ```bash 44 | src-git netmaker http://github.com/sbilly/netmaker-openwrt.git 45 | ``` 46 | 47 | Update and install the new feed 48 | 49 | ```bash 50 | ./scripts/feeds update netmaker 51 | ./scripts/feeds install netmaker 52 | ``` 53 | 54 | Now continue with the building packages section. 55 | 56 | ## Building Packages 57 | 58 | Configure packages: 59 | 60 | ```bash 61 | make menuconfig 62 | ``` 63 | 64 | Now select the appropiate "Target System" and "Target Profile" depending on what target chipset/router you want to build for. Also mark the Netmaker package under `Network ---> VPN ---> <*> netmaker`. 65 | 66 | Now compile/build everything: 67 | 68 | ```bash 69 | make 70 | ``` 71 | 72 | The images and all *.ipk packages are now inside the bin/ folder, including the netmaker package. You can install the Netmaker .ipk on the target device using opkg install . 73 | 74 | For details please check the OpenWRT documentation. 75 | 76 | ## Build bulk packages 77 | 78 | For a release, it is useful the build packages at a bulk for multiple targets: 79 | 80 | ```shell 81 | #!/bin/sh 82 | 83 | # dump-target-info.pl is used to get all targets configurations: 84 | # https://git.openwrt.org/?p=openwrt/openwrt.git;a=blob;f=scripts/dump-target-info.pl 85 | 86 | ./scripts/dump-target-info.pl architectures | while read pkgarch target1 rest; do 87 | echo "CONFIG_TARGET_${target1%/*}=y" > .config 88 | echo "CONFIG_TARGET_${target1%/*}_${target1#*/}=y" >> .config 89 | echo "CONFIG_PACKAGE_example1=y" >> .config 90 | 91 | # Debug output 92 | echo "pkgarch: $pkgarch, target1: $target1" 93 | 94 | make defconfig 95 | make -j4 tools/install 96 | make -j4 toolchain/install 97 | 98 | # Build package 99 | make package/netmaker/{clean,compile} 100 | 101 | # Free space (optional) 102 | rm -rf build_dir/target-* 103 | rm -rf build_dir/toolchain-* 104 | done 105 | ``` 106 | 107 | ## Thanks 108 | 109 | - [netmaker](https://github.com/gravitl/netmaker) 110 | - [zerotier-openwrt](https://github.com/mwarning/zerotier-openwrt) 111 | - [openwrt-golang-package-test-feed](https://github.com/jefferyto/openwrt-golang-package-test-feed) 112 | -------------------------------------------------------------------------------- /netmaker/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (C) 2019 sbilly 3 | # 4 | # This is free software, licensed under the MIT License. 5 | # See /LICENSE for more information. 6 | # 7 | 8 | include $(TOPDIR)/rules.mk 9 | 10 | PKG_NAME:=netmaker 11 | PKG_VERSION:=0.9.4 12 | PKG_RELEASE:=1 13 | 14 | PKG_SOURCE_PROTO:=git 15 | PKG_SOURCE_URL:=https://github.com/gravitl/netmaker.git 16 | PKG_SOURCE_VERSION:=e9bce264719f88c30e252ecc754d08f422f4c080 17 | PKG_SOURCE_DATE:=20220117 18 | PKG_MIRROR_HASH:=skip 19 | 20 | PKG_LICENSE:=MIT 21 | PKG_LICENSE_FILES:=LICENSE 22 | PKG_MAINTAINER:=sbilly 23 | 24 | PKG_BUILD_DEPENDS:=golang/host 25 | PKG_BUILD_PARALLEL:=1 26 | PKG_USE_MIPS16:=0 27 | 28 | GO_PKG:=github.com/gravitl/netmaker 29 | GO_PKG_INSTALL_EXTRA:=extra/file extra/dir 30 | GO_PKG_EXCLUDES:=excluded 31 | GO_PKG_LDFLAGS:=-s -w 32 | 33 | include $(INCLUDE_DIR)/package.mk 34 | include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk 35 | 36 | define Package/netmaker 37 | $(call Package/netmaker/Default) 38 | $(call GoPackage/GoSubMenu) 39 | SECTION:=net 40 | CATEGORY:=Network 41 | SUBMENU:=VPN 42 | endef 43 | 44 | define Package/netmaker/Default 45 | TITLE:=Netmaker for OpenWRT 46 | URL:=https://github.com/gravitl/netmaker 47 | DEPENDS:=$(GO_ARCH_DEPENDS) 48 | MAINTAINER:=sbilly 49 | endef 50 | 51 | define Package/netmaker/Default/description 52 | Netmaker is a platform for creating and managing fast, secure, and 53 | dynamic virtual overlay networks using WireGuard. This project offers 54 | OpenWRT packages for Netmaker. 55 | endef 56 | 57 | define Package/netmaker/description 58 | $(call Package/netmaker/Default/description) 59 | 60 | This package contains the binaries. 61 | endef 62 | 63 | define Package/netmaker-dev 64 | TITLE+= (source files) 65 | SECTION:=net 66 | CATEGORY:=Network 67 | SUBMENU:=VPN 68 | PKGARCH:=all 69 | endef 70 | 71 | define Package/netmaker-dev/description 72 | $(call Package/netmaker/Default/description) 73 | 74 | This package provides the source files. 75 | endef 76 | 77 | define Package/netmaker/install 78 | $(INSTALL_DIR) $(1)/etc/netclient/ 79 | $(INSTALL_DIR) $(1)/etc/netclient/config 80 | $(INSTALL_DIR) $(1)/etc/systemd/ 81 | $(INSTALL_DIR) $(1)/etc/systemd/system 82 | $(INSTALL_DIR) $(1)/usr/bin 83 | $(INSTALL_BIN) $(GO_PKG_BUILD_BIN_DIR)/netmaker $(1)/usr/bin/ 84 | $(INSTALL_BIN) $(GO_PKG_BUILD_BIN_DIR)/netclient $(1)/usr/bin/ 85 | $(CP) ./root/* $(1)/ 86 | $(LN) netclient $(1)/etc/netclient/netclient 87 | endef 88 | 89 | $(eval $(call GoBinPackage,netmaker)) 90 | $(eval $(call BuildPackage,netmaker)) 91 | 92 | $(eval $(call GoSrcPackage,netmaker-dev)) 93 | $(eval $(call BuildPackage,netmaker-dev)) 94 | -------------------------------------------------------------------------------- /netmaker/root/etc/init.d/netclient: -------------------------------------------------------------------------------- 1 | #!/bin/sh /etc/rc.common 2 | #Created by oycol 3 | 4 | EXTRA_COMMANDS="status" 5 | EXTRA_HELP=" status Check service is running" 6 | START=99 7 | 8 | LOG_FILE="/tmp/netclient.logs" 9 | 10 | start() { 11 | mkdir -p /etc/netclient/config 12 | mkdir -p /etc/systemd/system 13 | 14 | if [ ! -f "${LOG_FILE}" ];then 15 | touch "${LOG_FILE}" 16 | fi 17 | local PID=$(ps|grep "netclient checkin -n all"|grep -v grep|awk '{print $1}') 18 | if [ "${PID}" ];then 19 | echo "service is running" 20 | return 21 | fi 22 | /bin/sh -c "while [ 1 ]; do netclient checkin -n all >> ${LOG_FILE} 2>&1;sleep 15;\ 23 | if [ $(ls -l ${LOG_FILE}|awk '{print $5}') -gt 10240000 ];then tar zcf "${LOG_FILE}.tar" -C / "tmp/netclient.logs" && > $LOG_FILE;fi;done &" 24 | echo "start" 25 | } 26 | 27 | stop() { 28 | local PID=$(ps|grep "netclient checkin -n all"|grep -v grep|awk '{print $1}') 29 | if [ "${PID}" ];then 30 | kill "${PID}" 31 | fi 32 | echo "stop" 33 | } 34 | 35 | status() { 36 | local PID=$(ps|grep "netclient checkin -n all"|grep -v grep|awk '{print $1}') 37 | if [ "${PID}" ];then 38 | echo -e "netclient[${PID}] is running \n" 39 | else 40 | echo -e "netclient is not running \n" 41 | fi 42 | } 43 | -------------------------------------------------------------------------------- /scripts/build_ipk.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # setting working directory 4 | WORK_DIR="/home/user" 5 | 6 | # setting branch 7 | if [ "${OPENWRT_BRANCH}" = "" ] 8 | then 9 | DEFAULT_OPENWRT_BRANCH="openwrt-21.02" 10 | else 11 | DEFAULT_OPENWRT_BRANCH="${OPENWRT_BRANCH}" 12 | fi 13 | 14 | download_openwrt() { 15 | cd ${WORK_DIR} 16 | 17 | # pull code 18 | if [ ! -d "openwrt" ]; then 19 | git clone https://git.openwrt.org/openwrt/openwrt.git 20 | fi 21 | } 22 | 23 | change_openwrt_branch() { 24 | cd ${WORK_DIR}/openwrt 25 | 26 | if [ "${1}" = "" ] 27 | then 28 | echo "Building ${DEFAULT_OPENWRT_BRANCH}" 29 | git checkout -B ${DEFAULT_OPENWRT_BRANCH} origin/${DEFAULT_OPENWRT_BRANCH} 30 | else 31 | echo "Building ${1}" 32 | git checkout -B ${1} origin/${1} 33 | fi 34 | } 35 | 36 | init_openwrt_branch() { 37 | cd ${WORK_DIR}/openwrt 38 | 39 | git stash 40 | git pull --all 41 | git pull --tags 42 | } 43 | 44 | init_openwrt_link() { 45 | cd ${WORK_DIR}/openwrt 46 | 47 | sudo chown 1000:1000 /src -R 48 | 49 | mkdir -p /src/dl 50 | mkdir -p /src/staging_dir 51 | mkdir -p /src/build_dir 52 | mkdir -p /src/tmp 53 | mkdir -p /src/bin 54 | 55 | ln -s /src/dl ${WORK_DIR}/openwrt/dl 56 | ln -s /src/staging_dir ${WORK_DIR}/openwrt/staging_dir 57 | ln -s /src/build_dir ${WORK_DIR}/openwrt/build_dir 58 | ln -s /src/tmp ${WORK_DIR}/openwrt/tmp 59 | } 60 | 61 | update_install_openwrt_feeds() { 62 | cd ${WORK_DIR}/openwrt 63 | 64 | ./scripts/feeds update -a 65 | ./scripts/feeds install -a 66 | } 67 | 68 | openwrt_init_config() { 69 | cd ${WORK_DIR}/openwrt 70 | 71 | echo "CONFIG_TARGET_x86=y" > ${WORK_DIR}/openwrt/.config 72 | echo "CONFIG_TARGET_x86_64=y" >> ${WORK_DIR}/openwrt/.config 73 | } 74 | 75 | openwrt_make_build_env() { 76 | cd ${WORK_DIR}/openwrt 77 | 78 | make defconfig 79 | make -j4 download 80 | make -j4 tools/install 81 | make -j4 toolchain/install 82 | } 83 | 84 | openwrt_make() { 85 | cd ${WORK_DIR}/openwrt 86 | 87 | make -j4 88 | } 89 | 90 | openwrt_install_netmaker_feeds() { 91 | cd ${WORK_DIR}/openwrt 92 | 93 | echo "src-git netmaker http://github.com/sbilly/netmaker-openwrt.git" >> feeds.conf.default 94 | 95 | ./scripts/feeds update netmaker 96 | ./scripts/feeds install netmaker 97 | } 98 | 99 | openwrt_install_package_netmaker_config() { 100 | cd ${WORK_DIR}/openwrt 101 | 102 | echo "CONFIG_FEED_netmaker=y" >> ${WORK_DIR}/openwrt/.config 103 | echo "CONFIG_PACKAGE_netmaker=m" >> ${WORK_DIR}/openwrt/.config 104 | echo "CONFIG_PACKAGE_netmaker-dev=m" >> ${WORK_DIR}/openwrt/.config 105 | } 106 | 107 | 108 | openwrt_patch_golang_host() { 109 | cd ${WORK_DIR}/openwrt 110 | echo "patching ${1}" 111 | 112 | if [ "${1}" = "openwrt-19.07" ] 113 | then 114 | sed -i 's/5fb43171046cf8784325e67913d55f88a683435071eef8e9da1aa8a1588fcf5d/2255eb3e4e824dd7d5fcdc2e7f84534371c186312e546fb1086a34c17752f431/g' ${WORK_DIR}/openwrt/feeds/packages/lang/golang/golang/Makefile 115 | sed -i 's/1.13/1.17/g' ${WORK_DIR}/openwrt/feeds/packages/lang/golang/golang-version.mk 116 | sed -i 's/15/2/g' ${WORK_DIR}/openwrt/feeds/packages/lang/golang/golang-version.mk 117 | fi 118 | 119 | if [ "${1}" = "openwrt-18.06" ] 120 | then 121 | sed -i 's/6faf74046b5e24c2c0b46e78571cca4d65e1b89819da1089e53ea57539c63491/2255eb3e4e824dd7d5fcdc2e7f84534371c186312e546fb1086a34c17752f431/g' ${WORK_DIR}/openwrt/feeds/packages/lang/golang/golang/Makefile 122 | sed -i 's/1.10/1.17/g' ${WORK_DIR}/openwrt/feeds/packages/lang/golang/golang-version.mk 123 | sed -i 's/8/2/g' ${WORK_DIR}/openwrt/feeds/packages/lang/golang/golang-version.mk 124 | fi 125 | } 126 | 127 | openwrt_make_netmaker_package() { 128 | cd ${WORK_DIR}/openwrt 129 | 130 | make defconfig 131 | make toolchain/gcc/final/compile 132 | make package/netmaker/clean 133 | find ./ -type d | xargs -n1 sudo chmod 755 -R 134 | make package/netmaker/compile V=s 135 | } 136 | 137 | 138 | openwrt_copy_pacage() { 139 | echo ${1} 140 | echo > /tmp/copy.sh 141 | 142 | cd ${WORK_DIR}/openwrt/bin/packages/x86_64/netmaker/ 143 | 144 | for ipk in ./*.ipk 145 | do 146 | if [ -f "$ipk" ] 147 | then 148 | echo ${ipk} | gawk -F".ipk" -v BRANCH=${1} '{ print "cp -rfv "$0" /src/bin/"$1"-"BRANCH".ipk" }' >> /tmp/copy.sh 149 | fi 150 | done 151 | 152 | /bin/bash /tmp/copy.sh 153 | } 154 | 155 | download_openwrt 156 | 157 | change_openwrt_branch ${DEFAULT_OPENWRT_BRANCH} 158 | 159 | init_openwrt_branch 160 | 161 | init_openwrt_link 162 | 163 | openwrt_install_netmaker_feeds 164 | 165 | update_install_openwrt_feeds 166 | 167 | openwrt_init_config 168 | 169 | openwrt_install_package_netmaker_config 170 | 171 | openwrt_patch_golang_host ${DEFAULT_OPENWRT_BRANCH} 172 | 173 | openwrt_make_netmaker_package 174 | 175 | openwrt_copy_pacage ${DEFAULT_OPENWRT_BRANCH} 176 | 177 | ls -alF ${WORK_DIR}/openwrt/bin/ /src/bin 178 | --------------------------------------------------------------------------------