├── .github ├── FUNDING.yml └── workflows │ ├── bcm27xx-bcm2708.yml │ ├── bcm27xx-bcm2709.yml │ ├── bcm27xx-bcm2710.yml │ ├── bcm27xx-bcm2711.yml │ ├── delete-workflows.yml │ ├── ipq40xx-generic.yml │ ├── rockchip-armv8.yml │ └── x86-64.yml ├── CONTRIBUTED.md ├── FUNDING.md ├── LICENSE ├── README.md ├── config ├── bcm27xx │ ├── bcm2708.config │ ├── bcm2709.config │ ├── bcm2710.config │ └── bcm2711.config ├── extra-drivers.config ├── general-packages.config ├── ipq40xx │ └── generic.config ├── rockchip │ └── armv8.config └── x86 │ └── 64.config ├── data ├── opkg │ └── distfeeds.conf ├── support-targets.txt └── zsh │ └── .zshrc └── scripts ├── custom.sh ├── init-settings.sh ├── preset-clash-core.sh └── preset-terminal-tools.sh /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: ['https://github.com/SuLingGG/OpenWrt-Rpi/blob/main/FUNDING.md'] 13 | -------------------------------------------------------------------------------- /.github/workflows/bcm27xx-bcm2708.yml: -------------------------------------------------------------------------------- 1 | #================================================= 2 | # https://github.com/P3TERX/Actions-OpenWrt 3 | # Description: Build OpenWrt using GitHub Actions 4 | # Lisence: MIT 5 | # Author: P3TERX 6 | # Blog: https://p3terx.com 7 | #================================================= 8 | 9 | name: Build bcm27xx/bcm2708 openwrt 10 | 11 | on: 12 | workflow_dispatch: 13 | schedule: 14 | - cron: 0 18 * * * 15 | # watch: 16 | # types: started 17 | 18 | env: 19 | CONFIG_FILE: config/bcm27xx/bcm2708.config 20 | SOURCE_URL: https://github.com/immortalwrt/immortalwrt 21 | SOURCE_BRANCH: openwrt-18.06-k5.4 22 | DIY_SH: scripts/custom.sh 23 | TOOLCHAIN_TAG: toolchain 24 | CLASH_BINARY_PLATFORM: armv6 25 | TOOLCHAIN_RELEASE_UPLOAD: true 26 | FIRMWARE_RELEASE_UPLOAD: true 27 | WEB_ROOT_PATH: /data/www/openwrt.cc 28 | TZ: Asia/Shanghai 29 | 30 | jobs: 31 | Toolchain: 32 | runs-on: ubuntu-20.04 33 | 34 | outputs: 35 | OPENWRT_ROOT_PATH: ${{ steps.clone.outputs.OPENWRT_ROOT_PATH }} 36 | CURRENT_BRANCH: ${{ steps.env.outputs.CURRENT_BRANCH }} 37 | SOURCE_OWNER: ${{ steps.env.outputs.SOURCE_OWNER }} 38 | SOURCE_REPO: ${{ steps.env.outputs.SOURCE_REPO }} 39 | DEVICE_PLATFORM: ${{ steps.env.outputs.DEVICE_PLATFORM }} 40 | DEVICE_TARGET: ${{ steps.env.outputs.DEVICE_TARGET }} 41 | DEVICE_SUBTARGET: ${{ steps.env.outputs.DEVICE_SUBTARGET }} 42 | TOOLCHAIN_IMAGE: ${{ steps.env.outputs.TOOLCHAIN_IMAGE }} 43 | 44 | steps: 45 | - name: Initialization Environment 46 | env: 47 | DEBIAN_FRONTEND: noninteractive 48 | run: | 49 | sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc 50 | sudo -E apt-get -qq update 51 | sudo -E apt-get -qq install squashfs-tools $(curl -fsSL git.io/depends-ubuntu-2004) 52 | sudo -E apt-get -qq autoremove --purge 53 | sudo -E apt-get -qq clean 54 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 55 | docker image prune -a -f 56 | mkdir -p workspace 57 | 58 | - name: Checkout 59 | uses: actions/checkout@main 60 | 61 | - name: Clone Source Code 62 | id: clone 63 | run: | 64 | df -hT $PWD 65 | git clone $SOURCE_URL -b $SOURCE_BRANCH workspace/openwrt 66 | cd workspace/openwrt 67 | echo "OPENWRT_ROOT_PATH=$PWD" >> $GITHUB_ENV 68 | echo "::set-output name=OPENWRT_ROOT_PATH::$(echo $PWD)" 69 | 70 | - name: Generate Toolchain Config 71 | run: | 72 | [ -e $CONFIG_FILE ] && mv $CONFIG_FILE $OPENWRT_ROOT_PATH/.config 73 | echo -e "\nCONFIG_ALL=y" >> $OPENWRT_ROOT_PATH/.config 74 | echo -e "\nCONFIG_ALL_NONSHARED=y" >> $OPENWRT_ROOT_PATH/.config 75 | cd $OPENWRT_ROOT_PATH 76 | make defconfig > /dev/null 2>&1 77 | 78 | - name: Generate Variables 79 | id: env 80 | run: | 81 | export CURRENT_BRANCH="$(git symbolic-ref --short HEAD)" 82 | echo "CURRENT_BRANCH=$CURRENT_BRANCH" >> $GITHUB_ENV 83 | echo "::set-output name=CURRENT_BRANCH::$(echo $CURRENT_BRANCH)" 84 | cd $OPENWRT_ROOT_PATH 85 | export SOURCE_OWNER="$(echo $SOURCE_URL | awk -F '/' '{print $(NF-1)}')" 86 | echo "SOURCE_OWNER=$SOURCE_OWNER" >> $GITHUB_ENV 87 | echo "::set-output name=SOURCE_OWNER::$(echo $SOURCE_OWNER)" 88 | export SOURCE_REPO="$(echo $SOURCE_URL | awk -F '/' '{print $(NF)}')" 89 | echo "SOURCE_REPO=$SOURCE_REPO" >> $GITHUB_ENV 90 | echo "::set-output name=SOURCE_REPO::$(echo $SOURCE_REPO)" 91 | export DEVICE_TARGET=$(cat .config | grep CONFIG_TARGET_BOARD | awk -F '"' '{print $2}') 92 | echo "DEVICE_TARGET=$DEVICE_TARGET" >> $GITHUB_ENV 93 | echo "::set-output name=DEVICE_TARGET::$(echo $DEVICE_TARGET)" 94 | export DEVICE_SUBTARGET=$(cat .config | grep CONFIG_TARGET_SUBTARGET | awk -F '"' '{print $2}') 95 | echo "DEVICE_SUBTARGET=$DEVICE_SUBTARGET" >> $GITHUB_ENV 96 | echo "::set-output name=DEVICE_SUBTARGET::$(echo $DEVICE_SUBTARGET)" 97 | export DEVICE_PLATFORM=$(cat .config | grep CONFIG_TARGET_ARCH_PACKAGES | awk -F '"' '{print $2}') 98 | echo "DEVICE_PLATFORM=$DEVICE_PLATFORM" >> $GITHUB_ENV 99 | echo "::set-output name=DEVICE_PLATFORM::$(echo $DEVICE_PLATFORM)" 100 | export TOOLCHAIN_IMAGE="toolchain-$SOURCE_OWNER-$SOURCE_REPO-$SOURCE_BRANCH-$DEVICE_TARGET-$DEVICE_SUBTARGET" 101 | echo "TOOLCHAIN_IMAGE=$TOOLCHAIN_IMAGE" >> $GITHUB_ENV 102 | echo "::set-output name=TOOLCHAIN_IMAGE::$(echo $TOOLCHAIN_IMAGE)" 103 | 104 | - name: Compare Toolchain Hash 105 | id: hash 106 | run: | 107 | cd $OPENWRT_ROOT_PATH 108 | export CURRENT_HASH=$(git log --pretty=tformat:"%H" -n1 tools toolchain) 109 | echo "CURRENT_HASH=$CURRENT_HASH" >> $GITHUB_ENV 110 | echo "::set-output name=CURRENT_HASH::$(echo $CURRENT_HASH)" 111 | echo "CURRENT_HASH is $CURRENT_HASH" 112 | export CACHE_HASH=$(curl -fSsL https://github.com/$GITHUB_REPOSITORY/releases/download/$TOOLCHAIN_TAG/$TOOLCHAIN_IMAGE.hash) 113 | echo "CACHE_HASH is $CACHE_HASH" 114 | if [ -z "$CACHE_HASH" ] || [ "$CURRENT_HASH" != "$CACHE_HASH" ]; then 115 | echo "::set-output name=REBUILD_TOOLCHAIN::true" 116 | fi 117 | 118 | - name: Install Feeds 119 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 120 | run: | 121 | cd $OPENWRT_ROOT_PATH 122 | ./scripts/feeds update -a 123 | ./scripts/feeds install -a 124 | make defconfig 125 | 126 | - name: Compile Tools 127 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 128 | run: | 129 | cd $OPENWRT_ROOT_PATH 130 | echo -e "$(nproc) thread compile" 131 | make tools/compile -j$(nproc) || make tools/compile -j1 V=s 132 | 133 | - name: Compile Toolchain 134 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 135 | run: | 136 | cd $OPENWRT_ROOT_PATH 137 | echo -e "$(nproc) thread compile" 138 | make toolchain/compile -j$(nproc) || make toolchain/compile -j1 V=s 139 | rm -rf .config* dl bin 140 | 141 | - name: Generate Toolchain Image 142 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 143 | run: | 144 | cd workspace 145 | mksquashfs openwrt $TOOLCHAIN_IMAGE -force-gid 1001 -force-uid 1001 -comp zstd 146 | mkdir -p $GITHUB_WORKSPACE/output 147 | split -d -b 1900M $TOOLCHAIN_IMAGE $GITHUB_WORKSPACE/output/$TOOLCHAIN_IMAGE.img. 148 | rm $TOOLCHAIN_IMAGE 149 | cd $OPENWRT_ROOT_PATH 150 | echo $CURRENT_HASH > $GITHUB_WORKSPACE/output/toolchain-$SOURCE_OWNER-$SOURCE_REPO-$SOURCE_BRANCH-$DEVICE_TARGET-$DEVICE_SUBTARGET.hash 151 | ls -lh $GITHUB_WORKSPACE/output 152 | 153 | - name: Upload Toolchain Image To Artifact 154 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 155 | uses: actions/upload-artifact@main 156 | with: 157 | name: ${{ env.TOOLCHAIN_IMAGE }} 158 | path: output 159 | 160 | - name: Delete Old Toolchain Assets From Release 161 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 162 | uses: mknejp/delete-release-assets@v1 163 | with: 164 | token: ${{ secrets.GITHUB_TOKEN }} 165 | tag: ${{ env.TOOLCHAIN_TAG }} 166 | assets: "toolchain-${{ env.TOOLCHAIN_IMAGE }}.*" 167 | fail-if-no-assets: false 168 | fail-if-no-release: false 169 | 170 | - name: Upload Toolchain Image To Release 171 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 172 | uses: ncipollo/release-action@v1.8.0 173 | with: 174 | name: toolchain-image 175 | allowUpdates: true 176 | replacesArtifacts: true 177 | tag: ${{ env.TOOLCHAIN_TAG }} 178 | commit: ${{ env.CURRENT_BRANCH }} 179 | token: ${{ secrets.GITHUB_TOKEN }} 180 | artifacts: output/* 181 | 182 | Build: 183 | needs: [Toolchain] 184 | runs-on: ubuntu-20.04 185 | 186 | steps: 187 | - name: Restore Variables 188 | run: | 189 | echo "CURRENT_BRANCH=$(echo '${{needs.Toolchain.outputs.CURRENT_BRANCH}}')" >> $GITHUB_ENV 190 | echo "OPENWRT_ROOT_PATH=$(echo '${{needs.Toolchain.outputs.OPENWRT_ROOT_PATH}}')" >> $GITHUB_ENV 191 | echo "SOURCE_OWNER=$(echo '${{needs.Toolchain.outputs.SOURCE_OWNER}}')" >> $GITHUB_ENV 192 | echo "SOURCE_REPO=$(echo '${{needs.Toolchain.outputs.SOURCE_REPO}}')" >> $GITHUB_ENV 193 | echo "DEVICE_PLATFORM=$(echo '${{needs.Toolchain.outputs.DEVICE_PLATFORM}}')" >> $GITHUB_ENV 194 | echo "DEVICE_TARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_TARGET}}')" >> $GITHUB_ENV 195 | echo "DEVICE_SUBTARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_SUBTARGET}}')" >> $GITHUB_ENV 196 | echo "TOOLCHAIN_IMAGE=$(echo '${{needs.Toolchain.outputs.TOOLCHAIN_IMAGE}}')" >> $GITHUB_ENV 197 | 198 | - name: Initialization Environment 199 | env: 200 | DEBIAN_FRONTEND: noninteractive 201 | run: | 202 | sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc 203 | sudo -E apt-get -qq update 204 | sudo -E apt-get -qq install rdate squashfs-tools $(curl -fsSL git.io/depends-ubuntu-2004) 205 | sudo -E apt-get -qq autoremove --purge 206 | sudo -E apt-get -qq clean 207 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 208 | docker image prune -a -f 209 | 210 | - name: Combine Disks 211 | run: | 212 | sudo swapoff -a 213 | sudo rm -f /mnt/swapfile 214 | export ROOT_FREE_KB=$(df --block-size=1024 --output=avail / | tail -1) 215 | export ROOT_LOOP_KB=$(expr $ROOT_FREE_KB - 1048576) 216 | export ROOT_LOOP_BYTES=$(expr $ROOT_LOOP_KB \* 1024) 217 | sudo fallocate -l $ROOT_LOOP_BYTES /root.img 218 | export ROOT_LOOP_DEVNAME=$(sudo losetup -Pf --show /root.img) 219 | sudo pvcreate -f $ROOT_LOOP_DEVNAME 220 | export MNT_FREE_KB=$(df --block-size=1024 --output=avail /mnt | tail -1) 221 | export MNT_LOOP_KB=$(expr $MNT_FREE_KB - 102400) 222 | export MNT_LOOP_BYTES=$(expr $MNT_LOOP_KB \* 1024) 223 | sudo fallocate -l $MNT_LOOP_BYTES /mnt/mnt.img 224 | export MNT_LOOP_DEVNAME=$(sudo losetup -Pf --show /mnt/mnt.img) 225 | sudo pvcreate -f $MNT_LOOP_DEVNAME 226 | sudo vgcreate vgstorage $ROOT_LOOP_DEVNAME $MNT_LOOP_DEVNAME 227 | sudo lvcreate -n lvstorage -l 100%FREE vgstorage 228 | export LV_DEVNAME=$(sudo lvscan | awk -F "'" '{print $2}') 229 | sudo mkfs.btrfs -L combinedisk $LV_DEVNAME 230 | sudo mount -o compress=zstd $LV_DEVNAME $GITHUB_WORKSPACE 231 | sudo chown -R runner:runner $GITHUB_WORKSPACE 232 | mkdir $GITHUB_WORKSPACE/tmp 233 | chmod 777 $GITHUB_WORKSPACE/tmp 234 | sudo cp -rp /tmp/* $GITHUB_WORKSPACE/tmp 235 | sudo mount -B $GITHUB_WORKSPACE/tmp /tmp 236 | df -hT $GITHUB_WORKSPACE 237 | sudo btrfs filesystem usage $GITHUB_WORKSPACE 238 | 239 | - name: Checkout 240 | run: | 241 | cd $GITHUB_WORKSPACE 242 | git init 243 | git remote add origin https://github.com/$GITHUB_REPOSITORY 244 | git fetch 245 | git checkout -t origin/$CURRENT_BRANCH 246 | 247 | - name: Download Toolchain Image Form Artifacts 248 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' 249 | uses: actions/download-artifact@v2 250 | with: 251 | name: ${{ env.TOOLCHAIN_IMAGE }} 252 | path: workspace 253 | 254 | - name: Prepare Toolchain Image Form Artifacts 255 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' 256 | run: | 257 | cd workspace 258 | for i in {1..9} 259 | do 260 | cat $TOOLCHAIN_IMAGE.img.0$i >> $TOOLCHAIN_IMAGE.img.00 && rm $TOOLCHAIN_IMAGE.img.0$i || break 261 | done 262 | mv $TOOLCHAIN_IMAGE.img.00 $TOOLCHAIN_IMAGE.img 263 | mkdir openwrt-ro openwrt workdir overlay 264 | sudo mount -o loop $TOOLCHAIN_IMAGE.img openwrt-ro 265 | sudo mount -t overlay overlay -o lowerdir=openwrt-ro,upperdir=overlay,workdir=workdir openwrt 266 | cd $OPENWRT_ROOT_PATH 267 | git pull 268 | 269 | - name: Prepare Toolchain Image Form Releases 270 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' 271 | run: | 272 | mkdir -p workspace 273 | cd workspace 274 | for i in {0..9} 275 | do 276 | curl -fsL https://github.com/$GITHUB_REPOSITORY/releases/download/$TOOLCHAIN_TAG/$TOOLCHAIN_IMAGE.img.0$i >> $TOOLCHAIN_IMAGE.img || break 277 | done 278 | mkdir openwrt-ro openwrt workdir overlay 279 | sudo mount -o loop $TOOLCHAIN_IMAGE.img openwrt-ro 280 | sudo mount -t overlay overlay -o lowerdir=openwrt-ro,upperdir=overlay,workdir=workdir openwrt 281 | cd $OPENWRT_ROOT_PATH 282 | git pull 283 | 284 | - name: Install Feeds 285 | run: | 286 | cd $OPENWRT_ROOT_PATH 287 | ./scripts/feeds update -a 288 | ./scripts/feeds install -a 289 | 290 | - name: Load Custom Configuration 291 | run: | 292 | [ -e files ] && mv files $OPENWRT_ROOT_PATH/files 293 | [ -e $CONFIG_FILE ] && mv $CONFIG_FILE $OPENWRT_ROOT_PATH/.config 294 | cat config/general-packages.config >> $OPENWRT_ROOT_PATH/.config 295 | cat config/extra-drivers.config >> $OPENWRT_ROOT_PATH/.config 296 | cd $OPENWRT_ROOT_PATH 297 | chmod +x $GITHUB_WORKSPACE/scripts/*.sh 298 | $GITHUB_WORKSPACE/$DIY_SH 299 | $GITHUB_WORKSPACE/scripts/preset-clash-core.sh $CLASH_BINARY_PLATFORM 300 | $GITHUB_WORKSPACE/scripts/preset-terminal-tools.sh 301 | make defconfig 302 | 303 | - name: Download DL Package 304 | id: download 305 | run: | 306 | cd $OPENWRT_ROOT_PATH 307 | make download -j64 308 | 309 | - name: Compile Packages 310 | run: | 311 | cd $OPENWRT_ROOT_PATH 312 | echo -e "$(nproc) thread compile" 313 | make buildinfo 314 | make diffconfig buildversion feedsversion 315 | make target/compile -j$(nproc) IGNORE_ERRORS="m n" BUILD_LOG=1 || \ 316 | yes n | make target/compile -j1 V=s IGNORE_ERRORS=1 317 | make package/compile -j$(nproc) IGNORE_ERRORS=1 || make package/compile -j1 V=s IGNORE_ERRORS=1 318 | make package/index 319 | 320 | - name: Generate Firmware 321 | id: generate 322 | run: | 323 | if grep -q $DEVICE_TARGET/$DEVICE_SUBTARGET $GITHUB_WORKSPACE/data/support-targets.txt; then 324 | mkdir -p $OPENWRT_ROOT_PATH/files/etc/opkg 325 | cd $OPENWRT_ROOT_PATH/files/etc/opkg 326 | cp $GITHUB_WORKSPACE/data/opkg/distfeeds.conf . 327 | sed -i "s/DEVICE_SUBTARGET/$DEVICE_SUBTARGET/g" distfeeds.conf 328 | sed -i "s/DEVICE_TARGET/$DEVICE_TARGET/g" distfeeds.conf 329 | sed -i "s/DEVICE_PLATFORM/$DEVICE_PLATFORM/g" distfeeds.conf 330 | cd $OPENWRT_ROOT_PATH 331 | git clone https://git.openwrt.org/project/usign.git 332 | cd usign 333 | cmake . 334 | make 335 | sudo mv usign /bin 336 | mkdir -p $OPENWRT_ROOT_PATH/files/etc/opkg/keys 337 | cd $OPENWRT_ROOT_PATH/files/etc/opkg/keys 338 | wget -q https://openwrt.cc/keys/key-build.pub 339 | mv key-build.pub $(usign -F -p key-build.pub) 340 | fi 341 | cd $OPENWRT_ROOT_PATH 342 | echo "dtparam=i2c_arm=on,audio=on" >> target/linux/bcm27xx/image/config.txt 343 | mkdir -p files/etc/uci-defaults/ 344 | cp $GITHUB_WORKSPACE/scripts/init-settings.sh files/etc/uci-defaults/99-init-settings 345 | mkdir -p files/www/snapshots 346 | cp -r bin/targets files/www/snapshots 347 | make package/install -j$(nproc) || make package/install -j1 V=s 348 | make target/install -j$(nproc) || make target/install -j1 V=s 349 | make json_overview_image_info 350 | make checksum 351 | 352 | - name: Print Sha256sums 353 | run: | 354 | cd $OPENWRT_ROOT_PATH/bin/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET 355 | cat sha256sums 356 | 357 | - name: Compress Bin Folder 358 | run: | 359 | cd $OPENWRT_ROOT_PATH 360 | zip -r $DEVICE_TARGET-$DEVICE_SUBTARGET.zip bin 361 | 362 | - name: Print Disk Usage 363 | if: always() 364 | run: | 365 | echo 'lsblk -f' 366 | lsblk -f 367 | echo '-----' 368 | echo 'df -h' 369 | df -h 370 | echo '-----' 371 | echo 'btrfs filesystem usage' 372 | sudo btrfs filesystem usage $GITHUB_WORKSPACE 373 | echo '-----' 374 | 375 | - name: Upload Bin Archive 376 | uses: actions/upload-artifact@main 377 | with: 378 | name: bin-archive 379 | path: ${{ env.OPENWRT_ROOT_PATH }}/${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }}.zip 380 | 381 | Upload: 382 | needs: [Build, Toolchain] 383 | runs-on: ubuntu-20.04 384 | 385 | steps: 386 | - name: Checkout 387 | uses: actions/checkout@main 388 | 389 | - name: Restore Variables 390 | run: | 391 | echo "CURRENT_BRANCH=$(echo '${{needs.Toolchain.outputs.CURRENT_BRANCH}}')" >> $GITHUB_ENV 392 | echo "OPENWRT_ROOT_PATH=$(echo '${{needs.Toolchain.outputs.OPENWRT_ROOT_PATH}}')" >> $GITHUB_ENV 393 | echo "SOURCE_OWNER=$(echo '${{needs.Toolchain.outputs.SOURCE_OWNER}}')" >> $GITHUB_ENV 394 | echo "SOURCE_REPO=$(echo '${{needs.Toolchain.outputs.SOURCE_REPO}}')" >> $GITHUB_ENV 395 | echo "DEVICE_PLATFORM=$(echo '${{needs.Toolchain.outputs.DEVICE_PLATFORM}}')" >> $GITHUB_ENV 396 | echo "DEVICE_TARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_TARGET}}')" >> $GITHUB_ENV 397 | echo "DEVICE_SUBTARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_SUBTARGET}}')" >> $GITHUB_ENV 398 | echo "TOOLCHAIN_IMAGE=$(echo '${{needs.Toolchain.outputs.TOOLCHAIN_IMAGE}}')" >> $GITHUB_ENV 399 | 400 | - name: Initialization Environment 401 | env: 402 | DEBIAN_FRONTEND: noninteractive 403 | run: | 404 | sudo -E apt-get -qq update 405 | sudo -E apt-get -qq install zip unzip rsync 406 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 407 | 408 | - name: Download Bin Archive 409 | uses: actions/download-artifact@v2 410 | with: 411 | name: bin-archive 412 | path: ${{ env.OPENWRT_ROOT_PATH }} 413 | 414 | - name: Decompress Bin Archive 415 | run: | 416 | cd $OPENWRT_ROOT_PATH 417 | unzip $DEVICE_TARGET-$DEVICE_SUBTARGET.zip 418 | 419 | - name: Organize Files 420 | run: | 421 | export BUILD_DATE=$(date +"%Y-%m-%d") 422 | echo "BUILD_DATE=$BUILD_DATE" >> $GITHUB_ENV 423 | cd $OPENWRT_ROOT_PATH/bin/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET 424 | rm -rf packages 425 | df -hT $PWD 426 | 427 | - name: Deploy Files To HostHatch Node 428 | env: 429 | HOST: "${{ secrets.REMOTE_USER }}@${{ secrets.HOSTHATCH_IP }}" 430 | SOURCE_TARGETS: "${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 431 | DEST_TARGETS: "${{ env.WEB_ROOT_PATH }}/releases/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 432 | REMOTE_PRIVATEKEY: "${{ secrets.HOSTHATCH_PRIVATEKEY }}" 433 | if: env.REMOTE_PRIVATEKEY != null 434 | run: | 435 | mkdir -p ~/.ssh/ 436 | install -m 600 /dev/null ~/.ssh/id_rsa 437 | echo "${{ secrets.HOSTHATCH_PRIVATEKEY }}" > ~/.ssh/id_rsa 438 | chmod 600 ~/.ssh/id_rsa 439 | ssh -q -t -i ~/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $HOST \ 440 | bash -c "'mkdir -p $WEB_ROOT_PATH/releases/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET'" 441 | rsync -chavP --delete -e 'ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no' $SOURCE_TARGETS $HOST:$DEST_TARGETS 442 | 443 | - name: Deploy Files To Backblaze 444 | env: 445 | B2_APPLICATION_KEY: "${{ secrets.B2_APPLICATION_KEY }}" 446 | B2_APPLICATION_KEY_ID: "${{ secrets.B2_APPLICATION_KEY_ID }}" 447 | SOURCE_TARGETS: "${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 448 | DEST_TARGETS: "b2://${{ secrets.B2_BUCKETNAME }}/releases/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 449 | if: env.B2_APPLICATION_KEY != null && env.B2_APPLICATION_KEY_ID != null 450 | run: | 451 | sudo wget -q -O /bin/b2 https://github.com/Backblaze/B2_Command_Line_Tool/releases/latest/download/b2-linux 452 | sudo chmod +x /bin/b2 453 | b2 authorize-account $B2_APPLICATION_KEY_ID $B2_APPLICATION_KEY 454 | b2 sync --noProgress --threads 32 --keepDays 7 --replaceNewer $SOURCE_TARGETS $DEST_TARGETS 455 | 456 | - name: Delete Old Firmware Assets 457 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 458 | uses: mknejp/delete-release-assets@v1 459 | with: 460 | token: ${{ secrets.GITHUB_TOKEN }} 461 | tag: ${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 462 | fail-if-no-assets: false 463 | fail-if-no-release: false 464 | assets: "*" 465 | 466 | - name: Deploy Files To Release 467 | uses: ncipollo/release-action@v1.8.0 468 | if: env.FIRMWARE_RELEASE_UPLOAD == 'true' 469 | with: 470 | name: openwrt-${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 471 | allowUpdates: true 472 | replacesArtifacts: true 473 | tag: ${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 474 | body: ${{ env.BUILD_DATE }} 475 | commit: ${{ env.CURRENT_BRANCH }} 476 | token: ${{ secrets.GITHUB_TOKEN }} 477 | artifacts: ${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/* 478 | -------------------------------------------------------------------------------- /.github/workflows/bcm27xx-bcm2709.yml: -------------------------------------------------------------------------------- 1 | #================================================= 2 | # https://github.com/P3TERX/Actions-OpenWrt 3 | # Description: Build OpenWrt using GitHub Actions 4 | # Lisence: MIT 5 | # Author: P3TERX 6 | # Blog: https://p3terx.com 7 | #================================================= 8 | 9 | name: Build bcm27xx/bcm2709 openwrt 10 | 11 | on: 12 | workflow_dispatch: 13 | schedule: 14 | - cron: 0 18 * * * 15 | # watch: 16 | # types: started 17 | 18 | env: 19 | CONFIG_FILE: config/bcm27xx/bcm2709.config 20 | SOURCE_URL: https://github.com/immortalwrt/immortalwrt 21 | SOURCE_BRANCH: openwrt-18.06-k5.4 22 | DIY_SH: scripts/custom.sh 23 | TOOLCHAIN_TAG: toolchain 24 | CLASH_BINARY_PLATFORM: armv7 25 | TOOLCHAIN_RELEASE_UPLOAD: true 26 | FIRMWARE_RELEASE_UPLOAD: true 27 | WEB_ROOT_PATH: /data/www/openwrt.cc 28 | TZ: Asia/Shanghai 29 | 30 | jobs: 31 | Toolchain: 32 | runs-on: ubuntu-20.04 33 | 34 | outputs: 35 | OPENWRT_ROOT_PATH: ${{ steps.clone.outputs.OPENWRT_ROOT_PATH }} 36 | CURRENT_BRANCH: ${{ steps.env.outputs.CURRENT_BRANCH }} 37 | SOURCE_OWNER: ${{ steps.env.outputs.SOURCE_OWNER }} 38 | SOURCE_REPO: ${{ steps.env.outputs.SOURCE_REPO }} 39 | DEVICE_PLATFORM: ${{ steps.env.outputs.DEVICE_PLATFORM }} 40 | DEVICE_TARGET: ${{ steps.env.outputs.DEVICE_TARGET }} 41 | DEVICE_SUBTARGET: ${{ steps.env.outputs.DEVICE_SUBTARGET }} 42 | TOOLCHAIN_IMAGE: ${{ steps.env.outputs.TOOLCHAIN_IMAGE }} 43 | 44 | steps: 45 | - name: Initialization Environment 46 | env: 47 | DEBIAN_FRONTEND: noninteractive 48 | run: | 49 | sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc 50 | sudo -E apt-get -qq update 51 | sudo -E apt-get -qq install squashfs-tools $(curl -fsSL git.io/depends-ubuntu-2004) 52 | sudo -E apt-get -qq autoremove --purge 53 | sudo -E apt-get -qq clean 54 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 55 | docker image prune -a -f 56 | mkdir -p workspace 57 | 58 | - name: Checkout 59 | uses: actions/checkout@main 60 | 61 | - name: Clone Source Code 62 | id: clone 63 | run: | 64 | df -hT $PWD 65 | git clone $SOURCE_URL -b $SOURCE_BRANCH workspace/openwrt 66 | cd workspace/openwrt 67 | echo "OPENWRT_ROOT_PATH=$PWD" >> $GITHUB_ENV 68 | echo "::set-output name=OPENWRT_ROOT_PATH::$(echo $PWD)" 69 | 70 | - name: Generate Toolchain Config 71 | run: | 72 | [ -e $CONFIG_FILE ] && mv $CONFIG_FILE $OPENWRT_ROOT_PATH/.config 73 | echo -e "\nCONFIG_ALL=y" >> $OPENWRT_ROOT_PATH/.config 74 | echo -e "\nCONFIG_ALL_NONSHARED=y" >> $OPENWRT_ROOT_PATH/.config 75 | cd $OPENWRT_ROOT_PATH 76 | make defconfig > /dev/null 2>&1 77 | 78 | - name: Generate Variables 79 | id: env 80 | run: | 81 | export CURRENT_BRANCH="$(git symbolic-ref --short HEAD)" 82 | echo "CURRENT_BRANCH=$CURRENT_BRANCH" >> $GITHUB_ENV 83 | echo "::set-output name=CURRENT_BRANCH::$(echo $CURRENT_BRANCH)" 84 | cd $OPENWRT_ROOT_PATH 85 | export SOURCE_OWNER="$(echo $SOURCE_URL | awk -F '/' '{print $(NF-1)}')" 86 | echo "SOURCE_OWNER=$SOURCE_OWNER" >> $GITHUB_ENV 87 | echo "::set-output name=SOURCE_OWNER::$(echo $SOURCE_OWNER)" 88 | export SOURCE_REPO="$(echo $SOURCE_URL | awk -F '/' '{print $(NF)}')" 89 | echo "SOURCE_REPO=$SOURCE_REPO" >> $GITHUB_ENV 90 | echo "::set-output name=SOURCE_REPO::$(echo $SOURCE_REPO)" 91 | export DEVICE_TARGET=$(cat .config | grep CONFIG_TARGET_BOARD | awk -F '"' '{print $2}') 92 | echo "DEVICE_TARGET=$DEVICE_TARGET" >> $GITHUB_ENV 93 | echo "::set-output name=DEVICE_TARGET::$(echo $DEVICE_TARGET)" 94 | export DEVICE_SUBTARGET=$(cat .config | grep CONFIG_TARGET_SUBTARGET | awk -F '"' '{print $2}') 95 | echo "DEVICE_SUBTARGET=$DEVICE_SUBTARGET" >> $GITHUB_ENV 96 | echo "::set-output name=DEVICE_SUBTARGET::$(echo $DEVICE_SUBTARGET)" 97 | export DEVICE_PLATFORM=$(cat .config | grep CONFIG_TARGET_ARCH_PACKAGES | awk -F '"' '{print $2}') 98 | echo "DEVICE_PLATFORM=$DEVICE_PLATFORM" >> $GITHUB_ENV 99 | echo "::set-output name=DEVICE_PLATFORM::$(echo $DEVICE_PLATFORM)" 100 | export TOOLCHAIN_IMAGE="toolchain-$SOURCE_OWNER-$SOURCE_REPO-$SOURCE_BRANCH-$DEVICE_TARGET-$DEVICE_SUBTARGET" 101 | echo "TOOLCHAIN_IMAGE=$TOOLCHAIN_IMAGE" >> $GITHUB_ENV 102 | echo "::set-output name=TOOLCHAIN_IMAGE::$(echo $TOOLCHAIN_IMAGE)" 103 | 104 | - name: Compare Toolchain Hash 105 | id: hash 106 | run: | 107 | cd $OPENWRT_ROOT_PATH 108 | export CURRENT_HASH=$(git log --pretty=tformat:"%H" -n1 tools toolchain) 109 | echo "CURRENT_HASH=$CURRENT_HASH" >> $GITHUB_ENV 110 | echo "::set-output name=CURRENT_HASH::$(echo $CURRENT_HASH)" 111 | echo "CURRENT_HASH is $CURRENT_HASH" 112 | export CACHE_HASH=$(curl -fSsL https://github.com/$GITHUB_REPOSITORY/releases/download/$TOOLCHAIN_TAG/$TOOLCHAIN_IMAGE.hash) 113 | echo "CACHE_HASH is $CACHE_HASH" 114 | if [ -z "$CACHE_HASH" ] || [ "$CURRENT_HASH" != "$CACHE_HASH" ]; then 115 | echo "::set-output name=REBUILD_TOOLCHAIN::true" 116 | fi 117 | 118 | - name: Install Feeds 119 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 120 | run: | 121 | cd $OPENWRT_ROOT_PATH 122 | ./scripts/feeds update -a 123 | ./scripts/feeds install -a 124 | make defconfig 125 | 126 | - name: Compile Tools 127 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 128 | run: | 129 | cd $OPENWRT_ROOT_PATH 130 | echo -e "$(nproc) thread compile" 131 | make tools/compile -j$(nproc) || make tools/compile -j1 V=s 132 | 133 | - name: Compile Toolchain 134 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 135 | run: | 136 | cd $OPENWRT_ROOT_PATH 137 | echo -e "$(nproc) thread compile" 138 | make toolchain/compile -j$(nproc) || make toolchain/compile -j1 V=s 139 | rm -rf .config* dl bin 140 | 141 | - name: Generate Toolchain Image 142 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 143 | run: | 144 | cd workspace 145 | mksquashfs openwrt $TOOLCHAIN_IMAGE -force-gid 1001 -force-uid 1001 -comp zstd 146 | mkdir -p $GITHUB_WORKSPACE/output 147 | split -d -b 1900M $TOOLCHAIN_IMAGE $GITHUB_WORKSPACE/output/$TOOLCHAIN_IMAGE.img. 148 | rm $TOOLCHAIN_IMAGE 149 | cd $OPENWRT_ROOT_PATH 150 | echo $CURRENT_HASH > $GITHUB_WORKSPACE/output/toolchain-$SOURCE_OWNER-$SOURCE_REPO-$SOURCE_BRANCH-$DEVICE_TARGET-$DEVICE_SUBTARGET.hash 151 | ls -lh $GITHUB_WORKSPACE/output 152 | 153 | - name: Upload Toolchain Image To Artifact 154 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 155 | uses: actions/upload-artifact@main 156 | with: 157 | name: ${{ env.TOOLCHAIN_IMAGE }} 158 | path: output 159 | 160 | - name: Delete Old Toolchain Assets From Release 161 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 162 | uses: mknejp/delete-release-assets@v1 163 | with: 164 | token: ${{ secrets.GITHUB_TOKEN }} 165 | tag: ${{ env.TOOLCHAIN_TAG }} 166 | assets: "toolchain-${{ env.TOOLCHAIN_IMAGE }}.*" 167 | fail-if-no-assets: false 168 | fail-if-no-release: false 169 | 170 | - name: Upload Toolchain Image To Release 171 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 172 | uses: ncipollo/release-action@v1.8.0 173 | with: 174 | name: toolchain-image 175 | allowUpdates: true 176 | replacesArtifacts: true 177 | tag: ${{ env.TOOLCHAIN_TAG }} 178 | commit: ${{ env.CURRENT_BRANCH }} 179 | token: ${{ secrets.GITHUB_TOKEN }} 180 | artifacts: output/* 181 | 182 | Build: 183 | needs: [Toolchain] 184 | runs-on: ubuntu-20.04 185 | 186 | steps: 187 | - name: Restore Variables 188 | run: | 189 | echo "CURRENT_BRANCH=$(echo '${{needs.Toolchain.outputs.CURRENT_BRANCH}}')" >> $GITHUB_ENV 190 | echo "OPENWRT_ROOT_PATH=$(echo '${{needs.Toolchain.outputs.OPENWRT_ROOT_PATH}}')" >> $GITHUB_ENV 191 | echo "SOURCE_OWNER=$(echo '${{needs.Toolchain.outputs.SOURCE_OWNER}}')" >> $GITHUB_ENV 192 | echo "SOURCE_REPO=$(echo '${{needs.Toolchain.outputs.SOURCE_REPO}}')" >> $GITHUB_ENV 193 | echo "DEVICE_PLATFORM=$(echo '${{needs.Toolchain.outputs.DEVICE_PLATFORM}}')" >> $GITHUB_ENV 194 | echo "DEVICE_TARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_TARGET}}')" >> $GITHUB_ENV 195 | echo "DEVICE_SUBTARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_SUBTARGET}}')" >> $GITHUB_ENV 196 | echo "TOOLCHAIN_IMAGE=$(echo '${{needs.Toolchain.outputs.TOOLCHAIN_IMAGE}}')" >> $GITHUB_ENV 197 | 198 | - name: Initialization Environment 199 | env: 200 | DEBIAN_FRONTEND: noninteractive 201 | run: | 202 | sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc 203 | sudo -E apt-get -qq update 204 | sudo -E apt-get -qq install rdate squashfs-tools $(curl -fsSL git.io/depends-ubuntu-2004) 205 | sudo -E apt-get -qq autoremove --purge 206 | sudo -E apt-get -qq clean 207 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 208 | docker image prune -a -f 209 | 210 | - name: Combine Disks 211 | run: | 212 | sudo swapoff -a 213 | sudo rm -f /mnt/swapfile 214 | export ROOT_FREE_KB=$(df --block-size=1024 --output=avail / | tail -1) 215 | export ROOT_LOOP_KB=$(expr $ROOT_FREE_KB - 1048576) 216 | export ROOT_LOOP_BYTES=$(expr $ROOT_LOOP_KB \* 1024) 217 | sudo fallocate -l $ROOT_LOOP_BYTES /root.img 218 | export ROOT_LOOP_DEVNAME=$(sudo losetup -Pf --show /root.img) 219 | sudo pvcreate -f $ROOT_LOOP_DEVNAME 220 | export MNT_FREE_KB=$(df --block-size=1024 --output=avail /mnt | tail -1) 221 | export MNT_LOOP_KB=$(expr $MNT_FREE_KB - 102400) 222 | export MNT_LOOP_BYTES=$(expr $MNT_LOOP_KB \* 1024) 223 | sudo fallocate -l $MNT_LOOP_BYTES /mnt/mnt.img 224 | export MNT_LOOP_DEVNAME=$(sudo losetup -Pf --show /mnt/mnt.img) 225 | sudo pvcreate -f $MNT_LOOP_DEVNAME 226 | sudo vgcreate vgstorage $ROOT_LOOP_DEVNAME $MNT_LOOP_DEVNAME 227 | sudo lvcreate -n lvstorage -l 100%FREE vgstorage 228 | export LV_DEVNAME=$(sudo lvscan | awk -F "'" '{print $2}') 229 | sudo mkfs.btrfs -L combinedisk $LV_DEVNAME 230 | sudo mount -o compress=zstd $LV_DEVNAME $GITHUB_WORKSPACE 231 | sudo chown -R runner:runner $GITHUB_WORKSPACE 232 | mkdir $GITHUB_WORKSPACE/tmp 233 | chmod 777 $GITHUB_WORKSPACE/tmp 234 | sudo cp -rp /tmp/* $GITHUB_WORKSPACE/tmp 235 | sudo mount -B $GITHUB_WORKSPACE/tmp /tmp 236 | df -hT $GITHUB_WORKSPACE 237 | sudo btrfs filesystem usage $GITHUB_WORKSPACE 238 | 239 | - name: Checkout 240 | run: | 241 | cd $GITHUB_WORKSPACE 242 | git init 243 | git remote add origin https://github.com/$GITHUB_REPOSITORY 244 | git fetch 245 | git checkout -t origin/$CURRENT_BRANCH 246 | 247 | - name: Download Toolchain Image Form Artifacts 248 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' 249 | uses: actions/download-artifact@v2 250 | with: 251 | name: ${{ env.TOOLCHAIN_IMAGE }} 252 | path: workspace 253 | 254 | - name: Prepare Toolchain Image Form Artifacts 255 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' 256 | run: | 257 | cd workspace 258 | for i in {1..9} 259 | do 260 | cat $TOOLCHAIN_IMAGE.img.0$i >> $TOOLCHAIN_IMAGE.img.00 && rm $TOOLCHAIN_IMAGE.img.0$i || break 261 | done 262 | mv $TOOLCHAIN_IMAGE.img.00 $TOOLCHAIN_IMAGE.img 263 | mkdir openwrt-ro openwrt workdir overlay 264 | sudo mount -o loop $TOOLCHAIN_IMAGE.img openwrt-ro 265 | sudo mount -t overlay overlay -o lowerdir=openwrt-ro,upperdir=overlay,workdir=workdir openwrt 266 | cd $OPENWRT_ROOT_PATH 267 | git pull 268 | 269 | - name: Prepare Toolchain Image Form Releases 270 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' 271 | run: | 272 | mkdir -p workspace 273 | cd workspace 274 | for i in {0..9} 275 | do 276 | curl -fsL https://github.com/$GITHUB_REPOSITORY/releases/download/$TOOLCHAIN_TAG/$TOOLCHAIN_IMAGE.img.0$i >> $TOOLCHAIN_IMAGE.img || break 277 | done 278 | mkdir openwrt-ro openwrt workdir overlay 279 | sudo mount -o loop $TOOLCHAIN_IMAGE.img openwrt-ro 280 | sudo mount -t overlay overlay -o lowerdir=openwrt-ro,upperdir=overlay,workdir=workdir openwrt 281 | cd $OPENWRT_ROOT_PATH 282 | git pull 283 | 284 | - name: Install Feeds 285 | run: | 286 | cd $OPENWRT_ROOT_PATH 287 | ./scripts/feeds update -a 288 | ./scripts/feeds install -a 289 | 290 | - name: Load Custom Configuration 291 | run: | 292 | [ -e files ] && mv files $OPENWRT_ROOT_PATH/files 293 | [ -e $CONFIG_FILE ] && mv $CONFIG_FILE $OPENWRT_ROOT_PATH/.config 294 | cat config/general-packages.config >> $OPENWRT_ROOT_PATH/.config 295 | cat config/extra-drivers.config >> $OPENWRT_ROOT_PATH/.config 296 | cd $OPENWRT_ROOT_PATH 297 | chmod +x $GITHUB_WORKSPACE/scripts/*.sh 298 | $GITHUB_WORKSPACE/$DIY_SH 299 | $GITHUB_WORKSPACE/scripts/preset-clash-core.sh $CLASH_BINARY_PLATFORM 300 | $GITHUB_WORKSPACE/scripts/preset-terminal-tools.sh 301 | make defconfig 302 | 303 | - name: Download DL Package 304 | id: download 305 | run: | 306 | cd $OPENWRT_ROOT_PATH 307 | make download -j64 308 | 309 | - name: Compile Packages 310 | run: | 311 | cd $OPENWRT_ROOT_PATH 312 | echo -e "$(nproc) thread compile" 313 | make buildinfo 314 | make diffconfig buildversion feedsversion 315 | make target/compile -j$(nproc) IGNORE_ERRORS="m n" BUILD_LOG=1 || \ 316 | yes n | make target/compile -j1 V=s IGNORE_ERRORS=1 317 | make package/compile -j$(nproc) IGNORE_ERRORS=1 || make package/compile -j1 V=s IGNORE_ERRORS=1 318 | make package/index 319 | 320 | - name: Generate Firmware 321 | id: generate 322 | run: | 323 | if grep -q $DEVICE_TARGET/$DEVICE_SUBTARGET $GITHUB_WORKSPACE/data/support-targets.txt; then 324 | mkdir -p $OPENWRT_ROOT_PATH/files/etc/opkg 325 | cd $OPENWRT_ROOT_PATH/files/etc/opkg 326 | cp $GITHUB_WORKSPACE/data/opkg/distfeeds.conf . 327 | sed -i "s/DEVICE_SUBTARGET/$DEVICE_SUBTARGET/g" distfeeds.conf 328 | sed -i "s/DEVICE_TARGET/$DEVICE_TARGET/g" distfeeds.conf 329 | sed -i "s/DEVICE_PLATFORM/$DEVICE_PLATFORM/g" distfeeds.conf 330 | cd $OPENWRT_ROOT_PATH 331 | git clone https://git.openwrt.org/project/usign.git 332 | cd usign 333 | cmake . 334 | make 335 | sudo mv usign /bin 336 | mkdir -p $OPENWRT_ROOT_PATH/files/etc/opkg/keys 337 | cd $OPENWRT_ROOT_PATH/files/etc/opkg/keys 338 | wget -q https://openwrt.cc/keys/key-build.pub 339 | mv key-build.pub $(usign -F -p key-build.pub) 340 | fi 341 | cd $OPENWRT_ROOT_PATH 342 | echo "dtparam=i2c_arm=on,audio=on" >> target/linux/bcm27xx/image/config.txt 343 | mkdir -p files/etc/uci-defaults/ 344 | cp $GITHUB_WORKSPACE/scripts/init-settings.sh files/etc/uci-defaults/99-init-settings 345 | mkdir -p files/www/snapshots 346 | cp -r bin/targets files/www/snapshots 347 | make package/install -j$(nproc) || make package/install -j1 V=s 348 | make target/install -j$(nproc) || make target/install -j1 V=s 349 | make json_overview_image_info 350 | make checksum 351 | 352 | - name: Print Sha256sums 353 | run: | 354 | cd $OPENWRT_ROOT_PATH/bin/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET 355 | cat sha256sums 356 | 357 | - name: Compress Bin Folder 358 | run: | 359 | cd $OPENWRT_ROOT_PATH 360 | zip -r $DEVICE_TARGET-$DEVICE_SUBTARGET.zip bin 361 | 362 | - name: Print Disk Usage 363 | if: always() 364 | run: | 365 | echo 'lsblk -f' 366 | lsblk -f 367 | echo '-----' 368 | echo 'df -h' 369 | df -h 370 | echo '-----' 371 | echo 'btrfs filesystem usage' 372 | sudo btrfs filesystem usage $GITHUB_WORKSPACE 373 | echo '-----' 374 | 375 | - name: Upload Bin Archive 376 | uses: actions/upload-artifact@main 377 | with: 378 | name: bin-archive 379 | path: ${{ env.OPENWRT_ROOT_PATH }}/${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }}.zip 380 | 381 | Upload: 382 | needs: [Build, Toolchain] 383 | runs-on: ubuntu-20.04 384 | 385 | steps: 386 | - name: Checkout 387 | uses: actions/checkout@main 388 | 389 | - name: Restore Variables 390 | run: | 391 | echo "CURRENT_BRANCH=$(echo '${{needs.Toolchain.outputs.CURRENT_BRANCH}}')" >> $GITHUB_ENV 392 | echo "OPENWRT_ROOT_PATH=$(echo '${{needs.Toolchain.outputs.OPENWRT_ROOT_PATH}}')" >> $GITHUB_ENV 393 | echo "SOURCE_OWNER=$(echo '${{needs.Toolchain.outputs.SOURCE_OWNER}}')" >> $GITHUB_ENV 394 | echo "SOURCE_REPO=$(echo '${{needs.Toolchain.outputs.SOURCE_REPO}}')" >> $GITHUB_ENV 395 | echo "DEVICE_PLATFORM=$(echo '${{needs.Toolchain.outputs.DEVICE_PLATFORM}}')" >> $GITHUB_ENV 396 | echo "DEVICE_TARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_TARGET}}')" >> $GITHUB_ENV 397 | echo "DEVICE_SUBTARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_SUBTARGET}}')" >> $GITHUB_ENV 398 | echo "TOOLCHAIN_IMAGE=$(echo '${{needs.Toolchain.outputs.TOOLCHAIN_IMAGE}}')" >> $GITHUB_ENV 399 | 400 | - name: Initialization Environment 401 | env: 402 | DEBIAN_FRONTEND: noninteractive 403 | run: | 404 | sudo -E apt-get -qq update 405 | sudo -E apt-get -qq install zip unzip rsync 406 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 407 | 408 | - name: Download Bin Archive 409 | uses: actions/download-artifact@v2 410 | with: 411 | name: bin-archive 412 | path: ${{ env.OPENWRT_ROOT_PATH }} 413 | 414 | - name: Decompress Bin Archive 415 | run: | 416 | cd $OPENWRT_ROOT_PATH 417 | unzip $DEVICE_TARGET-$DEVICE_SUBTARGET.zip 418 | 419 | - name: Organize Files 420 | run: | 421 | export BUILD_DATE=$(date +"%Y-%m-%d") 422 | echo "BUILD_DATE=$BUILD_DATE" >> $GITHUB_ENV 423 | cd $OPENWRT_ROOT_PATH/bin/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET 424 | rm -rf packages 425 | df -hT $PWD 426 | 427 | - name: Deploy Files To HostHatch Node 428 | env: 429 | HOST: "${{ secrets.REMOTE_USER }}@${{ secrets.HOSTHATCH_IP }}" 430 | SOURCE_TARGETS: "${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 431 | DEST_TARGETS: "${{ env.WEB_ROOT_PATH }}/releases/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 432 | REMOTE_PRIVATEKEY: "${{ secrets.HOSTHATCH_PRIVATEKEY }}" 433 | if: env.REMOTE_PRIVATEKEY != null 434 | run: | 435 | mkdir -p ~/.ssh/ 436 | install -m 600 /dev/null ~/.ssh/id_rsa 437 | echo "${{ secrets.HOSTHATCH_PRIVATEKEY }}" > ~/.ssh/id_rsa 438 | chmod 600 ~/.ssh/id_rsa 439 | ssh -q -t -i ~/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $HOST \ 440 | bash -c "'mkdir -p $WEB_ROOT_PATH/releases/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET'" 441 | rsync -chavP --delete -e 'ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no' $SOURCE_TARGETS $HOST:$DEST_TARGETS 442 | 443 | - name: Deploy Files To Backblaze 444 | env: 445 | B2_APPLICATION_KEY: "${{ secrets.B2_APPLICATION_KEY }}" 446 | B2_APPLICATION_KEY_ID: "${{ secrets.B2_APPLICATION_KEY_ID }}" 447 | SOURCE_TARGETS: "${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 448 | DEST_TARGETS: "b2://${{ secrets.B2_BUCKETNAME }}/releases/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 449 | if: env.B2_APPLICATION_KEY != null && env.B2_APPLICATION_KEY_ID != null 450 | run: | 451 | sudo wget -q -O /bin/b2 https://github.com/Backblaze/B2_Command_Line_Tool/releases/latest/download/b2-linux 452 | sudo chmod +x /bin/b2 453 | b2 authorize-account $B2_APPLICATION_KEY_ID $B2_APPLICATION_KEY 454 | b2 sync --noProgress --threads 32 --keepDays 7 --replaceNewer $SOURCE_TARGETS $DEST_TARGETS 455 | 456 | - name: Delete Old Firmware Assets 457 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 458 | uses: mknejp/delete-release-assets@v1 459 | with: 460 | token: ${{ secrets.GITHUB_TOKEN }} 461 | tag: ${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 462 | fail-if-no-assets: false 463 | fail-if-no-release: false 464 | assets: "*" 465 | 466 | - name: Deploy Files To Release 467 | uses: ncipollo/release-action@v1.8.0 468 | if: env.FIRMWARE_RELEASE_UPLOAD == 'true' 469 | with: 470 | name: openwrt-${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 471 | allowUpdates: true 472 | replacesArtifacts: true 473 | tag: ${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 474 | body: ${{ env.BUILD_DATE }} 475 | commit: ${{ env.CURRENT_BRANCH }} 476 | token: ${{ secrets.GITHUB_TOKEN }} 477 | artifacts: ${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/* 478 | -------------------------------------------------------------------------------- /.github/workflows/bcm27xx-bcm2710.yml: -------------------------------------------------------------------------------- 1 | #================================================= 2 | # https://github.com/P3TERX/Actions-OpenWrt 3 | # Description: Build OpenWrt using GitHub Actions 4 | # Lisence: MIT 5 | # Author: P3TERX 6 | # Blog: https://p3terx.com 7 | #================================================= 8 | 9 | name: Build bcm27xx/bcm2710 openwrt 10 | 11 | on: 12 | workflow_dispatch: 13 | schedule: 14 | - cron: 0 18 * * * 15 | # watch: 16 | # types: started 17 | 18 | env: 19 | CONFIG_FILE: config/bcm27xx/bcm2710.config 20 | SOURCE_URL: https://github.com/immortalwrt/immortalwrt 21 | SOURCE_BRANCH: openwrt-18.06-k5.4 22 | DIY_SH: scripts/custom.sh 23 | TOOLCHAIN_TAG: toolchain 24 | CLASH_BINARY_PLATFORM: armv8 25 | TOOLCHAIN_RELEASE_UPLOAD: true 26 | FIRMWARE_RELEASE_UPLOAD: true 27 | WEB_ROOT_PATH: /data/www/openwrt.cc 28 | TZ: Asia/Shanghai 29 | 30 | jobs: 31 | Toolchain: 32 | runs-on: ubuntu-20.04 33 | 34 | outputs: 35 | OPENWRT_ROOT_PATH: ${{ steps.clone.outputs.OPENWRT_ROOT_PATH }} 36 | CURRENT_BRANCH: ${{ steps.env.outputs.CURRENT_BRANCH }} 37 | SOURCE_OWNER: ${{ steps.env.outputs.SOURCE_OWNER }} 38 | SOURCE_REPO: ${{ steps.env.outputs.SOURCE_REPO }} 39 | DEVICE_PLATFORM: ${{ steps.env.outputs.DEVICE_PLATFORM }} 40 | DEVICE_TARGET: ${{ steps.env.outputs.DEVICE_TARGET }} 41 | DEVICE_SUBTARGET: ${{ steps.env.outputs.DEVICE_SUBTARGET }} 42 | TOOLCHAIN_IMAGE: ${{ steps.env.outputs.TOOLCHAIN_IMAGE }} 43 | 44 | steps: 45 | - name: Initialization Environment 46 | env: 47 | DEBIAN_FRONTEND: noninteractive 48 | run: | 49 | sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc 50 | sudo -E apt-get -qq update 51 | sudo -E apt-get -qq install squashfs-tools $(curl -fsSL git.io/depends-ubuntu-2004) 52 | sudo -E apt-get -qq autoremove --purge 53 | sudo -E apt-get -qq clean 54 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 55 | docker image prune -a -f 56 | mkdir -p workspace 57 | 58 | - name: Checkout 59 | uses: actions/checkout@main 60 | 61 | - name: Clone Source Code 62 | id: clone 63 | run: | 64 | df -hT $PWD 65 | git clone $SOURCE_URL -b $SOURCE_BRANCH workspace/openwrt 66 | cd workspace/openwrt 67 | echo "OPENWRT_ROOT_PATH=$PWD" >> $GITHUB_ENV 68 | echo "::set-output name=OPENWRT_ROOT_PATH::$(echo $PWD)" 69 | 70 | - name: Generate Toolchain Config 71 | run: | 72 | [ -e $CONFIG_FILE ] && mv $CONFIG_FILE $OPENWRT_ROOT_PATH/.config 73 | echo -e "\nCONFIG_ALL=y" >> $OPENWRT_ROOT_PATH/.config 74 | echo -e "\nCONFIG_ALL_NONSHARED=y" >> $OPENWRT_ROOT_PATH/.config 75 | cd $OPENWRT_ROOT_PATH 76 | make defconfig > /dev/null 2>&1 77 | 78 | - name: Generate Variables 79 | id: env 80 | run: | 81 | export CURRENT_BRANCH="$(git symbolic-ref --short HEAD)" 82 | echo "CURRENT_BRANCH=$CURRENT_BRANCH" >> $GITHUB_ENV 83 | echo "::set-output name=CURRENT_BRANCH::$(echo $CURRENT_BRANCH)" 84 | cd $OPENWRT_ROOT_PATH 85 | export SOURCE_OWNER="$(echo $SOURCE_URL | awk -F '/' '{print $(NF-1)}')" 86 | echo "SOURCE_OWNER=$SOURCE_OWNER" >> $GITHUB_ENV 87 | echo "::set-output name=SOURCE_OWNER::$(echo $SOURCE_OWNER)" 88 | export SOURCE_REPO="$(echo $SOURCE_URL | awk -F '/' '{print $(NF)}')" 89 | echo "SOURCE_REPO=$SOURCE_REPO" >> $GITHUB_ENV 90 | echo "::set-output name=SOURCE_REPO::$(echo $SOURCE_REPO)" 91 | export DEVICE_TARGET=$(cat .config | grep CONFIG_TARGET_BOARD | awk -F '"' '{print $2}') 92 | echo "DEVICE_TARGET=$DEVICE_TARGET" >> $GITHUB_ENV 93 | echo "::set-output name=DEVICE_TARGET::$(echo $DEVICE_TARGET)" 94 | export DEVICE_SUBTARGET=$(cat .config | grep CONFIG_TARGET_SUBTARGET | awk -F '"' '{print $2}') 95 | echo "DEVICE_SUBTARGET=$DEVICE_SUBTARGET" >> $GITHUB_ENV 96 | echo "::set-output name=DEVICE_SUBTARGET::$(echo $DEVICE_SUBTARGET)" 97 | export DEVICE_PLATFORM=$(cat .config | grep CONFIG_TARGET_ARCH_PACKAGES | awk -F '"' '{print $2}') 98 | echo "DEVICE_PLATFORM=$DEVICE_PLATFORM" >> $GITHUB_ENV 99 | echo "::set-output name=DEVICE_PLATFORM::$(echo $DEVICE_PLATFORM)" 100 | export TOOLCHAIN_IMAGE="toolchain-$SOURCE_OWNER-$SOURCE_REPO-$SOURCE_BRANCH-$DEVICE_TARGET-$DEVICE_SUBTARGET" 101 | echo "TOOLCHAIN_IMAGE=$TOOLCHAIN_IMAGE" >> $GITHUB_ENV 102 | echo "::set-output name=TOOLCHAIN_IMAGE::$(echo $TOOLCHAIN_IMAGE)" 103 | 104 | - name: Compare Toolchain Hash 105 | id: hash 106 | run: | 107 | cd $OPENWRT_ROOT_PATH 108 | export CURRENT_HASH=$(git log --pretty=tformat:"%H" -n1 tools toolchain) 109 | echo "CURRENT_HASH=$CURRENT_HASH" >> $GITHUB_ENV 110 | echo "::set-output name=CURRENT_HASH::$(echo $CURRENT_HASH)" 111 | echo "CURRENT_HASH is $CURRENT_HASH" 112 | export CACHE_HASH=$(curl -fSsL https://github.com/$GITHUB_REPOSITORY/releases/download/$TOOLCHAIN_TAG/$TOOLCHAIN_IMAGE.hash) 113 | echo "CACHE_HASH is $CACHE_HASH" 114 | if [ -z "$CACHE_HASH" ] || [ "$CURRENT_HASH" != "$CACHE_HASH" ]; then 115 | echo "::set-output name=REBUILD_TOOLCHAIN::true" 116 | fi 117 | 118 | - name: Install Feeds 119 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 120 | run: | 121 | cd $OPENWRT_ROOT_PATH 122 | ./scripts/feeds update -a 123 | ./scripts/feeds install -a 124 | make defconfig 125 | 126 | - name: Compile Tools 127 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 128 | run: | 129 | cd $OPENWRT_ROOT_PATH 130 | echo -e "$(nproc) thread compile" 131 | make tools/compile -j$(nproc) || make tools/compile -j1 V=s 132 | 133 | - name: Compile Toolchain 134 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 135 | run: | 136 | cd $OPENWRT_ROOT_PATH 137 | echo -e "$(nproc) thread compile" 138 | make toolchain/compile -j$(nproc) || make toolchain/compile -j1 V=s 139 | rm -rf .config* dl bin 140 | 141 | - name: Generate Toolchain Image 142 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 143 | run: | 144 | cd workspace 145 | mksquashfs openwrt $TOOLCHAIN_IMAGE -force-gid 1001 -force-uid 1001 -comp zstd 146 | mkdir -p $GITHUB_WORKSPACE/output 147 | split -d -b 1900M $TOOLCHAIN_IMAGE $GITHUB_WORKSPACE/output/$TOOLCHAIN_IMAGE.img. 148 | rm $TOOLCHAIN_IMAGE 149 | cd $OPENWRT_ROOT_PATH 150 | echo $CURRENT_HASH > $GITHUB_WORKSPACE/output/toolchain-$SOURCE_OWNER-$SOURCE_REPO-$SOURCE_BRANCH-$DEVICE_TARGET-$DEVICE_SUBTARGET.hash 151 | ls -lh $GITHUB_WORKSPACE/output 152 | 153 | - name: Upload Toolchain Image To Artifact 154 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 155 | uses: actions/upload-artifact@main 156 | with: 157 | name: ${{ env.TOOLCHAIN_IMAGE }} 158 | path: output 159 | 160 | - name: Delete Old Toolchain Assets From Release 161 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 162 | uses: mknejp/delete-release-assets@v1 163 | with: 164 | token: ${{ secrets.GITHUB_TOKEN }} 165 | tag: ${{ env.TOOLCHAIN_TAG }} 166 | assets: "toolchain-${{ env.TOOLCHAIN_IMAGE }}.*" 167 | fail-if-no-assets: false 168 | fail-if-no-release: false 169 | 170 | - name: Upload Toolchain Image To Release 171 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 172 | uses: ncipollo/release-action@v1.8.0 173 | with: 174 | name: toolchain-image 175 | allowUpdates: true 176 | replacesArtifacts: true 177 | tag: ${{ env.TOOLCHAIN_TAG }} 178 | commit: ${{ env.CURRENT_BRANCH }} 179 | token: ${{ secrets.GITHUB_TOKEN }} 180 | artifacts: output/* 181 | 182 | Build: 183 | needs: [Toolchain] 184 | runs-on: ubuntu-20.04 185 | 186 | steps: 187 | - name: Restore Variables 188 | run: | 189 | echo "CURRENT_BRANCH=$(echo '${{needs.Toolchain.outputs.CURRENT_BRANCH}}')" >> $GITHUB_ENV 190 | echo "OPENWRT_ROOT_PATH=$(echo '${{needs.Toolchain.outputs.OPENWRT_ROOT_PATH}}')" >> $GITHUB_ENV 191 | echo "SOURCE_OWNER=$(echo '${{needs.Toolchain.outputs.SOURCE_OWNER}}')" >> $GITHUB_ENV 192 | echo "SOURCE_REPO=$(echo '${{needs.Toolchain.outputs.SOURCE_REPO}}')" >> $GITHUB_ENV 193 | echo "DEVICE_PLATFORM=$(echo '${{needs.Toolchain.outputs.DEVICE_PLATFORM}}')" >> $GITHUB_ENV 194 | echo "DEVICE_TARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_TARGET}}')" >> $GITHUB_ENV 195 | echo "DEVICE_SUBTARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_SUBTARGET}}')" >> $GITHUB_ENV 196 | echo "TOOLCHAIN_IMAGE=$(echo '${{needs.Toolchain.outputs.TOOLCHAIN_IMAGE}}')" >> $GITHUB_ENV 197 | 198 | - name: Initialization Environment 199 | env: 200 | DEBIAN_FRONTEND: noninteractive 201 | run: | 202 | sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc 203 | sudo -E apt-get -qq update 204 | sudo -E apt-get -qq install rdate squashfs-tools $(curl -fsSL git.io/depends-ubuntu-2004) 205 | sudo -E apt-get -qq autoremove --purge 206 | sudo -E apt-get -qq clean 207 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 208 | docker image prune -a -f 209 | 210 | - name: Combine Disks 211 | run: | 212 | sudo swapoff -a 213 | sudo rm -f /mnt/swapfile 214 | export ROOT_FREE_KB=$(df --block-size=1024 --output=avail / | tail -1) 215 | export ROOT_LOOP_KB=$(expr $ROOT_FREE_KB - 1048576) 216 | export ROOT_LOOP_BYTES=$(expr $ROOT_LOOP_KB \* 1024) 217 | sudo fallocate -l $ROOT_LOOP_BYTES /root.img 218 | export ROOT_LOOP_DEVNAME=$(sudo losetup -Pf --show /root.img) 219 | sudo pvcreate -f $ROOT_LOOP_DEVNAME 220 | export MNT_FREE_KB=$(df --block-size=1024 --output=avail /mnt | tail -1) 221 | export MNT_LOOP_KB=$(expr $MNT_FREE_KB - 102400) 222 | export MNT_LOOP_BYTES=$(expr $MNT_LOOP_KB \* 1024) 223 | sudo fallocate -l $MNT_LOOP_BYTES /mnt/mnt.img 224 | export MNT_LOOP_DEVNAME=$(sudo losetup -Pf --show /mnt/mnt.img) 225 | sudo pvcreate -f $MNT_LOOP_DEVNAME 226 | sudo vgcreate vgstorage $ROOT_LOOP_DEVNAME $MNT_LOOP_DEVNAME 227 | sudo lvcreate -n lvstorage -l 100%FREE vgstorage 228 | export LV_DEVNAME=$(sudo lvscan | awk -F "'" '{print $2}') 229 | sudo mkfs.btrfs -L combinedisk $LV_DEVNAME 230 | sudo mount -o compress=zstd $LV_DEVNAME $GITHUB_WORKSPACE 231 | sudo chown -R runner:runner $GITHUB_WORKSPACE 232 | mkdir $GITHUB_WORKSPACE/tmp 233 | chmod 777 $GITHUB_WORKSPACE/tmp 234 | sudo cp -rp /tmp/* $GITHUB_WORKSPACE/tmp 235 | sudo mount -B $GITHUB_WORKSPACE/tmp /tmp 236 | df -hT $GITHUB_WORKSPACE 237 | sudo btrfs filesystem usage $GITHUB_WORKSPACE 238 | 239 | - name: Checkout 240 | run: | 241 | cd $GITHUB_WORKSPACE 242 | git init 243 | git remote add origin https://github.com/$GITHUB_REPOSITORY 244 | git fetch 245 | git checkout -t origin/$CURRENT_BRANCH 246 | 247 | - name: Download Toolchain Image Form Artifacts 248 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' 249 | uses: actions/download-artifact@v2 250 | with: 251 | name: ${{ env.TOOLCHAIN_IMAGE }} 252 | path: workspace 253 | 254 | - name: Prepare Toolchain Image Form Artifacts 255 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' 256 | run: | 257 | cd workspace 258 | for i in {1..9} 259 | do 260 | cat $TOOLCHAIN_IMAGE.img.0$i >> $TOOLCHAIN_IMAGE.img.00 && rm $TOOLCHAIN_IMAGE.img.0$i || break 261 | done 262 | mv $TOOLCHAIN_IMAGE.img.00 $TOOLCHAIN_IMAGE.img 263 | mkdir openwrt-ro openwrt workdir overlay 264 | sudo mount -o loop $TOOLCHAIN_IMAGE.img openwrt-ro 265 | sudo mount -t overlay overlay -o lowerdir=openwrt-ro,upperdir=overlay,workdir=workdir openwrt 266 | cd $OPENWRT_ROOT_PATH 267 | git pull 268 | 269 | - name: Prepare Toolchain Image Form Releases 270 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' 271 | run: | 272 | mkdir -p workspace 273 | cd workspace 274 | for i in {0..9} 275 | do 276 | curl -fsL https://github.com/$GITHUB_REPOSITORY/releases/download/$TOOLCHAIN_TAG/$TOOLCHAIN_IMAGE.img.0$i >> $TOOLCHAIN_IMAGE.img || break 277 | done 278 | mkdir openwrt-ro openwrt workdir overlay 279 | sudo mount -o loop $TOOLCHAIN_IMAGE.img openwrt-ro 280 | sudo mount -t overlay overlay -o lowerdir=openwrt-ro,upperdir=overlay,workdir=workdir openwrt 281 | cd $OPENWRT_ROOT_PATH 282 | git pull 283 | 284 | - name: Install Feeds 285 | run: | 286 | cd $OPENWRT_ROOT_PATH 287 | ./scripts/feeds update -a 288 | ./scripts/feeds install -a 289 | 290 | - name: Load Custom Configuration 291 | run: | 292 | [ -e files ] && mv files $OPENWRT_ROOT_PATH/files 293 | [ -e $CONFIG_FILE ] && mv $CONFIG_FILE $OPENWRT_ROOT_PATH/.config 294 | cat config/general-packages.config >> $OPENWRT_ROOT_PATH/.config 295 | cat config/extra-drivers.config >> $OPENWRT_ROOT_PATH/.config 296 | cd $OPENWRT_ROOT_PATH 297 | chmod +x $GITHUB_WORKSPACE/scripts/*.sh 298 | $GITHUB_WORKSPACE/$DIY_SH 299 | $GITHUB_WORKSPACE/scripts/preset-clash-core.sh $CLASH_BINARY_PLATFORM 300 | $GITHUB_WORKSPACE/scripts/preset-terminal-tools.sh 301 | make defconfig 302 | 303 | - name: Download DL Package 304 | id: download 305 | run: | 306 | cd $OPENWRT_ROOT_PATH 307 | make download -j64 308 | 309 | - name: Compile Packages 310 | run: | 311 | cd $OPENWRT_ROOT_PATH 312 | echo -e "$(nproc) thread compile" 313 | make buildinfo 314 | make diffconfig buildversion feedsversion 315 | make target/compile -j$(nproc) IGNORE_ERRORS="m n" BUILD_LOG=1 || \ 316 | yes n | make target/compile -j1 V=s IGNORE_ERRORS=1 317 | make package/compile -j$(nproc) IGNORE_ERRORS=1 || make package/compile -j1 V=s IGNORE_ERRORS=1 318 | make package/index 319 | 320 | - name: Generate Firmware 321 | id: generate 322 | run: | 323 | if grep -q $DEVICE_TARGET/$DEVICE_SUBTARGET $GITHUB_WORKSPACE/data/support-targets.txt; then 324 | mkdir -p $OPENWRT_ROOT_PATH/files/etc/opkg 325 | cd $OPENWRT_ROOT_PATH/files/etc/opkg 326 | cp $GITHUB_WORKSPACE/data/opkg/distfeeds.conf . 327 | sed -i "s/DEVICE_SUBTARGET/$DEVICE_SUBTARGET/g" distfeeds.conf 328 | sed -i "s/DEVICE_TARGET/$DEVICE_TARGET/g" distfeeds.conf 329 | sed -i "s/DEVICE_PLATFORM/$DEVICE_PLATFORM/g" distfeeds.conf 330 | cd $OPENWRT_ROOT_PATH 331 | git clone https://git.openwrt.org/project/usign.git 332 | cd usign 333 | cmake . 334 | make 335 | sudo mv usign /bin 336 | mkdir -p $OPENWRT_ROOT_PATH/files/etc/opkg/keys 337 | cd $OPENWRT_ROOT_PATH/files/etc/opkg/keys 338 | wget -q https://openwrt.cc/keys/key-build.pub 339 | mv key-build.pub $(usign -F -p key-build.pub) 340 | fi 341 | cd $OPENWRT_ROOT_PATH 342 | echo "dtparam=i2c_arm=on,audio=on" >> target/linux/bcm27xx/image/config.txt 343 | mkdir -p files/etc/uci-defaults/ 344 | cp $GITHUB_WORKSPACE/scripts/init-settings.sh files/etc/uci-defaults/99-init-settings 345 | mkdir -p files/www/snapshots 346 | cp -r bin/targets files/www/snapshots 347 | make package/install -j$(nproc) || make package/install -j1 V=s 348 | make target/install -j$(nproc) || make target/install -j1 V=s 349 | make json_overview_image_info 350 | make checksum 351 | 352 | - name: Print Sha256sums 353 | run: | 354 | cd $OPENWRT_ROOT_PATH/bin/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET 355 | cat sha256sums 356 | 357 | - name: Compress Bin Folder 358 | run: | 359 | cd $OPENWRT_ROOT_PATH 360 | zip -r $DEVICE_TARGET-$DEVICE_SUBTARGET.zip bin 361 | 362 | - name: Print Disk Usage 363 | if: always() 364 | run: | 365 | echo 'lsblk -f' 366 | lsblk -f 367 | echo '-----' 368 | echo 'df -h' 369 | df -h 370 | echo '-----' 371 | echo 'btrfs filesystem usage' 372 | sudo btrfs filesystem usage $GITHUB_WORKSPACE 373 | echo '-----' 374 | 375 | - name: Upload Bin Archive 376 | uses: actions/upload-artifact@main 377 | with: 378 | name: bin-archive 379 | path: ${{ env.OPENWRT_ROOT_PATH }}/${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }}.zip 380 | 381 | Upload: 382 | needs: [Build, Toolchain] 383 | runs-on: ubuntu-20.04 384 | 385 | steps: 386 | - name: Checkout 387 | uses: actions/checkout@main 388 | 389 | - name: Restore Variables 390 | run: | 391 | echo "CURRENT_BRANCH=$(echo '${{needs.Toolchain.outputs.CURRENT_BRANCH}}')" >> $GITHUB_ENV 392 | echo "OPENWRT_ROOT_PATH=$(echo '${{needs.Toolchain.outputs.OPENWRT_ROOT_PATH}}')" >> $GITHUB_ENV 393 | echo "SOURCE_OWNER=$(echo '${{needs.Toolchain.outputs.SOURCE_OWNER}}')" >> $GITHUB_ENV 394 | echo "SOURCE_REPO=$(echo '${{needs.Toolchain.outputs.SOURCE_REPO}}')" >> $GITHUB_ENV 395 | echo "DEVICE_PLATFORM=$(echo '${{needs.Toolchain.outputs.DEVICE_PLATFORM}}')" >> $GITHUB_ENV 396 | echo "DEVICE_TARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_TARGET}}')" >> $GITHUB_ENV 397 | echo "DEVICE_SUBTARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_SUBTARGET}}')" >> $GITHUB_ENV 398 | echo "TOOLCHAIN_IMAGE=$(echo '${{needs.Toolchain.outputs.TOOLCHAIN_IMAGE}}')" >> $GITHUB_ENV 399 | 400 | - name: Initialization Environment 401 | env: 402 | DEBIAN_FRONTEND: noninteractive 403 | run: | 404 | sudo -E apt-get -qq update 405 | sudo -E apt-get -qq install zip unzip rsync 406 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 407 | 408 | - name: Download Bin Archive 409 | uses: actions/download-artifact@v2 410 | with: 411 | name: bin-archive 412 | path: ${{ env.OPENWRT_ROOT_PATH }} 413 | 414 | - name: Decompress Bin Archive 415 | run: | 416 | cd $OPENWRT_ROOT_PATH 417 | unzip $DEVICE_TARGET-$DEVICE_SUBTARGET.zip 418 | 419 | - name: Organize Files 420 | run: | 421 | export BUILD_DATE=$(date +"%Y-%m-%d") 422 | echo "BUILD_DATE=$BUILD_DATE" >> $GITHUB_ENV 423 | cd $OPENWRT_ROOT_PATH/bin/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET 424 | rm -rf packages 425 | df -hT $PWD 426 | 427 | - name: Deploy Files To HostHatch Node 428 | env: 429 | HOST: "${{ secrets.REMOTE_USER }}@${{ secrets.HOSTHATCH_IP }}" 430 | SOURCE_TARGETS: "${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 431 | DEST_TARGETS: "${{ env.WEB_ROOT_PATH }}/releases/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 432 | REMOTE_PRIVATEKEY: "${{ secrets.HOSTHATCH_PRIVATEKEY }}" 433 | if: env.REMOTE_PRIVATEKEY != null 434 | run: | 435 | mkdir -p ~/.ssh/ 436 | install -m 600 /dev/null ~/.ssh/id_rsa 437 | echo "${{ secrets.HOSTHATCH_PRIVATEKEY }}" > ~/.ssh/id_rsa 438 | chmod 600 ~/.ssh/id_rsa 439 | ssh -q -t -i ~/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $HOST \ 440 | bash -c "'mkdir -p $WEB_ROOT_PATH/releases/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET'" 441 | rsync -chavP --delete -e 'ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no' $SOURCE_TARGETS $HOST:$DEST_TARGETS 442 | 443 | - name: Deploy Files To Backblaze 444 | env: 445 | B2_APPLICATION_KEY: "${{ secrets.B2_APPLICATION_KEY }}" 446 | B2_APPLICATION_KEY_ID: "${{ secrets.B2_APPLICATION_KEY_ID }}" 447 | SOURCE_TARGETS: "${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 448 | DEST_TARGETS: "b2://${{ secrets.B2_BUCKETNAME }}/releases/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 449 | if: env.B2_APPLICATION_KEY != null && env.B2_APPLICATION_KEY_ID != null 450 | run: | 451 | sudo wget -q -O /bin/b2 https://github.com/Backblaze/B2_Command_Line_Tool/releases/latest/download/b2-linux 452 | sudo chmod +x /bin/b2 453 | b2 authorize-account $B2_APPLICATION_KEY_ID $B2_APPLICATION_KEY 454 | b2 sync --noProgress --threads 32 --keepDays 7 --replaceNewer $SOURCE_TARGETS $DEST_TARGETS 455 | 456 | - name: Delete Old Firmware Assets 457 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 458 | uses: mknejp/delete-release-assets@v1 459 | with: 460 | token: ${{ secrets.GITHUB_TOKEN }} 461 | tag: ${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 462 | fail-if-no-assets: false 463 | fail-if-no-release: false 464 | assets: "*" 465 | 466 | - name: Deploy Files To Release 467 | uses: ncipollo/release-action@v1.8.0 468 | if: env.FIRMWARE_RELEASE_UPLOAD == 'true' 469 | with: 470 | name: openwrt-${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 471 | allowUpdates: true 472 | replacesArtifacts: true 473 | tag: ${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 474 | body: ${{ env.BUILD_DATE }} 475 | commit: ${{ env.CURRENT_BRANCH }} 476 | token: ${{ secrets.GITHUB_TOKEN }} 477 | artifacts: ${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/* 478 | -------------------------------------------------------------------------------- /.github/workflows/bcm27xx-bcm2711.yml: -------------------------------------------------------------------------------- 1 | #================================================= 2 | # https://github.com/P3TERX/Actions-OpenWrt 3 | # Description: Build OpenWrt using GitHub Actions 4 | # Lisence: MIT 5 | # Author: P3TERX 6 | # Blog: https://p3terx.com 7 | #================================================= 8 | 9 | name: Build bcm27xx/bcm2711 openwrt 10 | 11 | on: 12 | workflow_dispatch: 13 | schedule: 14 | - cron: 0 18 * * * 15 | # watch: 16 | # types: started 17 | 18 | env: 19 | CONFIG_FILE: config/bcm27xx/bcm2711.config 20 | SOURCE_URL: https://github.com/immortalwrt/immortalwrt 21 | SOURCE_BRANCH: openwrt-18.06-k5.4 22 | DIY_SH: scripts/custom.sh 23 | TOOLCHAIN_TAG: toolchain 24 | CLASH_BINARY_PLATFORM: armv8 25 | TOOLCHAIN_RELEASE_UPLOAD: true 26 | FIRMWARE_RELEASE_UPLOAD: true 27 | WEB_ROOT_PATH: /data/www/openwrt.cc 28 | TZ: Asia/Shanghai 29 | 30 | jobs: 31 | Toolchain: 32 | runs-on: ubuntu-20.04 33 | 34 | outputs: 35 | OPENWRT_ROOT_PATH: ${{ steps.clone.outputs.OPENWRT_ROOT_PATH }} 36 | CURRENT_BRANCH: ${{ steps.env.outputs.CURRENT_BRANCH }} 37 | SOURCE_OWNER: ${{ steps.env.outputs.SOURCE_OWNER }} 38 | SOURCE_REPO: ${{ steps.env.outputs.SOURCE_REPO }} 39 | DEVICE_PLATFORM: ${{ steps.env.outputs.DEVICE_PLATFORM }} 40 | DEVICE_TARGET: ${{ steps.env.outputs.DEVICE_TARGET }} 41 | DEVICE_SUBTARGET: ${{ steps.env.outputs.DEVICE_SUBTARGET }} 42 | TOOLCHAIN_IMAGE: ${{ steps.env.outputs.TOOLCHAIN_IMAGE }} 43 | 44 | steps: 45 | - name: Initialization Environment 46 | env: 47 | DEBIAN_FRONTEND: noninteractive 48 | run: | 49 | sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc 50 | sudo -E apt-get -qq update 51 | sudo -E apt-get -qq install squashfs-tools $(curl -fsSL git.io/depends-ubuntu-2004) 52 | sudo -E apt-get -qq autoremove --purge 53 | sudo -E apt-get -qq clean 54 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 55 | docker image prune -a -f 56 | mkdir -p workspace 57 | 58 | - name: Checkout 59 | uses: actions/checkout@main 60 | 61 | - name: Clone Source Code 62 | id: clone 63 | run: | 64 | df -hT $PWD 65 | git clone $SOURCE_URL -b $SOURCE_BRANCH workspace/openwrt 66 | cd workspace/openwrt 67 | echo "OPENWRT_ROOT_PATH=$PWD" >> $GITHUB_ENV 68 | echo "::set-output name=OPENWRT_ROOT_PATH::$(echo $PWD)" 69 | 70 | - name: Generate Toolchain Config 71 | run: | 72 | [ -e $CONFIG_FILE ] && mv $CONFIG_FILE $OPENWRT_ROOT_PATH/.config 73 | echo -e "\nCONFIG_ALL=y" >> $OPENWRT_ROOT_PATH/.config 74 | echo -e "\nCONFIG_ALL_NONSHARED=y" >> $OPENWRT_ROOT_PATH/.config 75 | cd $OPENWRT_ROOT_PATH 76 | make defconfig > /dev/null 2>&1 77 | 78 | - name: Generate Variables 79 | id: env 80 | run: | 81 | export CURRENT_BRANCH="$(git symbolic-ref --short HEAD)" 82 | echo "CURRENT_BRANCH=$CURRENT_BRANCH" >> $GITHUB_ENV 83 | echo "::set-output name=CURRENT_BRANCH::$(echo $CURRENT_BRANCH)" 84 | cd $OPENWRT_ROOT_PATH 85 | export SOURCE_OWNER="$(echo $SOURCE_URL | awk -F '/' '{print $(NF-1)}')" 86 | echo "SOURCE_OWNER=$SOURCE_OWNER" >> $GITHUB_ENV 87 | echo "::set-output name=SOURCE_OWNER::$(echo $SOURCE_OWNER)" 88 | export SOURCE_REPO="$(echo $SOURCE_URL | awk -F '/' '{print $(NF)}')" 89 | echo "SOURCE_REPO=$SOURCE_REPO" >> $GITHUB_ENV 90 | echo "::set-output name=SOURCE_REPO::$(echo $SOURCE_REPO)" 91 | export DEVICE_TARGET=$(cat .config | grep CONFIG_TARGET_BOARD | awk -F '"' '{print $2}') 92 | echo "DEVICE_TARGET=$DEVICE_TARGET" >> $GITHUB_ENV 93 | echo "::set-output name=DEVICE_TARGET::$(echo $DEVICE_TARGET)" 94 | export DEVICE_SUBTARGET=$(cat .config | grep CONFIG_TARGET_SUBTARGET | awk -F '"' '{print $2}') 95 | echo "DEVICE_SUBTARGET=$DEVICE_SUBTARGET" >> $GITHUB_ENV 96 | echo "::set-output name=DEVICE_SUBTARGET::$(echo $DEVICE_SUBTARGET)" 97 | export DEVICE_PLATFORM=$(cat .config | grep CONFIG_TARGET_ARCH_PACKAGES | awk -F '"' '{print $2}') 98 | echo "DEVICE_PLATFORM=$DEVICE_PLATFORM" >> $GITHUB_ENV 99 | echo "::set-output name=DEVICE_PLATFORM::$(echo $DEVICE_PLATFORM)" 100 | export TOOLCHAIN_IMAGE="toolchain-$SOURCE_OWNER-$SOURCE_REPO-$SOURCE_BRANCH-$DEVICE_TARGET-$DEVICE_SUBTARGET" 101 | echo "TOOLCHAIN_IMAGE=$TOOLCHAIN_IMAGE" >> $GITHUB_ENV 102 | echo "::set-output name=TOOLCHAIN_IMAGE::$(echo $TOOLCHAIN_IMAGE)" 103 | 104 | - name: Compare Toolchain Hash 105 | id: hash 106 | run: | 107 | cd $OPENWRT_ROOT_PATH 108 | export CURRENT_HASH=$(git log --pretty=tformat:"%H" -n1 tools toolchain) 109 | echo "CURRENT_HASH=$CURRENT_HASH" >> $GITHUB_ENV 110 | echo "::set-output name=CURRENT_HASH::$(echo $CURRENT_HASH)" 111 | echo "CURRENT_HASH is $CURRENT_HASH" 112 | export CACHE_HASH=$(curl -fSsL https://github.com/$GITHUB_REPOSITORY/releases/download/$TOOLCHAIN_TAG/$TOOLCHAIN_IMAGE.hash) 113 | echo "CACHE_HASH is $CACHE_HASH" 114 | if [ -z "$CACHE_HASH" ] || [ "$CURRENT_HASH" != "$CACHE_HASH" ]; then 115 | echo "::set-output name=REBUILD_TOOLCHAIN::true" 116 | fi 117 | 118 | - name: Install Feeds 119 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 120 | run: | 121 | cd $OPENWRT_ROOT_PATH 122 | ./scripts/feeds update -a 123 | ./scripts/feeds install -a 124 | make defconfig 125 | 126 | - name: Compile Tools 127 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 128 | run: | 129 | cd $OPENWRT_ROOT_PATH 130 | echo -e "$(nproc) thread compile" 131 | make tools/compile -j$(nproc) || make tools/compile -j1 V=s 132 | 133 | - name: Compile Toolchain 134 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 135 | run: | 136 | cd $OPENWRT_ROOT_PATH 137 | echo -e "$(nproc) thread compile" 138 | make toolchain/compile -j$(nproc) || make toolchain/compile -j1 V=s 139 | rm -rf .config* dl bin 140 | 141 | - name: Generate Toolchain Image 142 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 143 | run: | 144 | cd workspace 145 | mksquashfs openwrt $TOOLCHAIN_IMAGE -force-gid 1001 -force-uid 1001 -comp zstd 146 | mkdir -p $GITHUB_WORKSPACE/output 147 | split -d -b 1900M $TOOLCHAIN_IMAGE $GITHUB_WORKSPACE/output/$TOOLCHAIN_IMAGE.img. 148 | rm $TOOLCHAIN_IMAGE 149 | cd $OPENWRT_ROOT_PATH 150 | echo $CURRENT_HASH > $GITHUB_WORKSPACE/output/toolchain-$SOURCE_OWNER-$SOURCE_REPO-$SOURCE_BRANCH-$DEVICE_TARGET-$DEVICE_SUBTARGET.hash 151 | ls -lh $GITHUB_WORKSPACE/output 152 | 153 | - name: Upload Toolchain Image To Artifact 154 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 155 | uses: actions/upload-artifact@main 156 | with: 157 | name: ${{ env.TOOLCHAIN_IMAGE }} 158 | path: output 159 | 160 | - name: Delete Old Toolchain Assets From Release 161 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 162 | uses: mknejp/delete-release-assets@v1 163 | with: 164 | token: ${{ secrets.GITHUB_TOKEN }} 165 | tag: ${{ env.TOOLCHAIN_TAG }} 166 | assets: "toolchain-${{ env.TOOLCHAIN_IMAGE }}.*" 167 | fail-if-no-assets: false 168 | fail-if-no-release: false 169 | 170 | - name: Upload Toolchain Image To Release 171 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 172 | uses: ncipollo/release-action@v1.8.0 173 | with: 174 | name: toolchain-image 175 | allowUpdates: true 176 | replacesArtifacts: true 177 | tag: ${{ env.TOOLCHAIN_TAG }} 178 | commit: ${{ env.CURRENT_BRANCH }} 179 | token: ${{ secrets.GITHUB_TOKEN }} 180 | artifacts: output/* 181 | 182 | Build: 183 | needs: [Toolchain] 184 | runs-on: ubuntu-20.04 185 | 186 | steps: 187 | - name: Restore Variables 188 | run: | 189 | echo "CURRENT_BRANCH=$(echo '${{needs.Toolchain.outputs.CURRENT_BRANCH}}')" >> $GITHUB_ENV 190 | echo "OPENWRT_ROOT_PATH=$(echo '${{needs.Toolchain.outputs.OPENWRT_ROOT_PATH}}')" >> $GITHUB_ENV 191 | echo "SOURCE_OWNER=$(echo '${{needs.Toolchain.outputs.SOURCE_OWNER}}')" >> $GITHUB_ENV 192 | echo "SOURCE_REPO=$(echo '${{needs.Toolchain.outputs.SOURCE_REPO}}')" >> $GITHUB_ENV 193 | echo "DEVICE_PLATFORM=$(echo '${{needs.Toolchain.outputs.DEVICE_PLATFORM}}')" >> $GITHUB_ENV 194 | echo "DEVICE_TARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_TARGET}}')" >> $GITHUB_ENV 195 | echo "DEVICE_SUBTARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_SUBTARGET}}')" >> $GITHUB_ENV 196 | echo "TOOLCHAIN_IMAGE=$(echo '${{needs.Toolchain.outputs.TOOLCHAIN_IMAGE}}')" >> $GITHUB_ENV 197 | 198 | - name: Initialization Environment 199 | env: 200 | DEBIAN_FRONTEND: noninteractive 201 | run: | 202 | sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc 203 | sudo -E apt-get -qq update 204 | sudo -E apt-get -qq install rdate squashfs-tools $(curl -fsSL git.io/depends-ubuntu-2004) 205 | sudo -E apt-get -qq autoremove --purge 206 | sudo -E apt-get -qq clean 207 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 208 | docker image prune -a -f 209 | 210 | - name: Combine Disks 211 | run: | 212 | sudo swapoff -a 213 | sudo rm -f /mnt/swapfile 214 | export ROOT_FREE_KB=$(df --block-size=1024 --output=avail / | tail -1) 215 | export ROOT_LOOP_KB=$(expr $ROOT_FREE_KB - 1048576) 216 | export ROOT_LOOP_BYTES=$(expr $ROOT_LOOP_KB \* 1024) 217 | sudo fallocate -l $ROOT_LOOP_BYTES /root.img 218 | export ROOT_LOOP_DEVNAME=$(sudo losetup -Pf --show /root.img) 219 | sudo pvcreate -f $ROOT_LOOP_DEVNAME 220 | export MNT_FREE_KB=$(df --block-size=1024 --output=avail /mnt | tail -1) 221 | export MNT_LOOP_KB=$(expr $MNT_FREE_KB - 102400) 222 | export MNT_LOOP_BYTES=$(expr $MNT_LOOP_KB \* 1024) 223 | sudo fallocate -l $MNT_LOOP_BYTES /mnt/mnt.img 224 | export MNT_LOOP_DEVNAME=$(sudo losetup -Pf --show /mnt/mnt.img) 225 | sudo pvcreate -f $MNT_LOOP_DEVNAME 226 | sudo vgcreate vgstorage $ROOT_LOOP_DEVNAME $MNT_LOOP_DEVNAME 227 | sudo lvcreate -n lvstorage -l 100%FREE vgstorage 228 | export LV_DEVNAME=$(sudo lvscan | awk -F "'" '{print $2}') 229 | sudo mkfs.btrfs -L combinedisk $LV_DEVNAME 230 | sudo mount -o compress=zstd $LV_DEVNAME $GITHUB_WORKSPACE 231 | sudo chown -R runner:runner $GITHUB_WORKSPACE 232 | mkdir $GITHUB_WORKSPACE/tmp 233 | chmod 777 $GITHUB_WORKSPACE/tmp 234 | sudo cp -rp /tmp/* $GITHUB_WORKSPACE/tmp 235 | sudo mount -B $GITHUB_WORKSPACE/tmp /tmp 236 | df -hT $GITHUB_WORKSPACE 237 | sudo btrfs filesystem usage $GITHUB_WORKSPACE 238 | 239 | - name: Checkout 240 | run: | 241 | cd $GITHUB_WORKSPACE 242 | git init 243 | git remote add origin https://github.com/$GITHUB_REPOSITORY 244 | git fetch 245 | git checkout -t origin/$CURRENT_BRANCH 246 | 247 | - name: Download Toolchain Image Form Artifacts 248 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' 249 | uses: actions/download-artifact@v2 250 | with: 251 | name: ${{ env.TOOLCHAIN_IMAGE }} 252 | path: workspace 253 | 254 | - name: Prepare Toolchain Image Form Artifacts 255 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' 256 | run: | 257 | cd workspace 258 | for i in {1..9} 259 | do 260 | cat $TOOLCHAIN_IMAGE.img.0$i >> $TOOLCHAIN_IMAGE.img.00 && rm $TOOLCHAIN_IMAGE.img.0$i || break 261 | done 262 | mv $TOOLCHAIN_IMAGE.img.00 $TOOLCHAIN_IMAGE.img 263 | mkdir openwrt-ro openwrt workdir overlay 264 | sudo mount -o loop $TOOLCHAIN_IMAGE.img openwrt-ro 265 | sudo mount -t overlay overlay -o lowerdir=openwrt-ro,upperdir=overlay,workdir=workdir openwrt 266 | cd $OPENWRT_ROOT_PATH 267 | git pull 268 | 269 | - name: Prepare Toolchain Image Form Releases 270 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' 271 | run: | 272 | mkdir -p workspace 273 | cd workspace 274 | for i in {0..9} 275 | do 276 | curl -fsL https://github.com/$GITHUB_REPOSITORY/releases/download/$TOOLCHAIN_TAG/$TOOLCHAIN_IMAGE.img.0$i >> $TOOLCHAIN_IMAGE.img || break 277 | done 278 | mkdir openwrt-ro openwrt workdir overlay 279 | sudo mount -o loop $TOOLCHAIN_IMAGE.img openwrt-ro 280 | sudo mount -t overlay overlay -o lowerdir=openwrt-ro,upperdir=overlay,workdir=workdir openwrt 281 | cd $OPENWRT_ROOT_PATH 282 | git pull 283 | 284 | - name: Install Feeds 285 | run: | 286 | cd $OPENWRT_ROOT_PATH 287 | ./scripts/feeds update -a 288 | ./scripts/feeds install -a 289 | 290 | - name: Load Custom Configuration 291 | run: | 292 | [ -e files ] && mv files $OPENWRT_ROOT_PATH/files 293 | [ -e $CONFIG_FILE ] && mv $CONFIG_FILE $OPENWRT_ROOT_PATH/.config 294 | cat config/general-packages.config >> $OPENWRT_ROOT_PATH/.config 295 | cat config/extra-drivers.config >> $OPENWRT_ROOT_PATH/.config 296 | cd $OPENWRT_ROOT_PATH 297 | echo -e "CONFIG_USB_LAN78XX=y\nCONFIG_USB_NET_DRIVERS=y" >> target/linux/bcm27xx/bcm2711/config-5.4 298 | sed -i 's/36/44/g;s/VHT80/VHT20/g' package/kernel/mac80211/files/lib/wifi/mac80211.sh 299 | chmod +x $GITHUB_WORKSPACE/scripts/*.sh 300 | $GITHUB_WORKSPACE/$DIY_SH 301 | $GITHUB_WORKSPACE/scripts/preset-clash-core.sh $CLASH_BINARY_PLATFORM 302 | $GITHUB_WORKSPACE/scripts/preset-terminal-tools.sh 303 | make defconfig 304 | 305 | - name: Download DL Package 306 | id: download 307 | run: | 308 | cd $OPENWRT_ROOT_PATH 309 | make download -j64 310 | 311 | - name: Compile Packages 312 | run: | 313 | cd $OPENWRT_ROOT_PATH 314 | echo -e "$(nproc) thread compile" 315 | make buildinfo 316 | make diffconfig buildversion feedsversion 317 | make target/compile -j$(nproc) IGNORE_ERRORS="m n" BUILD_LOG=1 || \ 318 | yes n | make target/compile -j1 V=s IGNORE_ERRORS=1 319 | make package/compile -j$(nproc) IGNORE_ERRORS=1 || make package/compile -j1 V=s IGNORE_ERRORS=1 320 | make package/index 321 | 322 | - name: Generate Firmware 323 | id: generate 324 | run: | 325 | if grep -q $DEVICE_TARGET/$DEVICE_SUBTARGET $GITHUB_WORKSPACE/data/support-targets.txt; then 326 | mkdir -p $OPENWRT_ROOT_PATH/files/etc/opkg 327 | cd $OPENWRT_ROOT_PATH/files/etc/opkg 328 | cp $GITHUB_WORKSPACE/data/opkg/distfeeds.conf . 329 | sed -i "s/DEVICE_SUBTARGET/$DEVICE_SUBTARGET/g" distfeeds.conf 330 | sed -i "s/DEVICE_TARGET/$DEVICE_TARGET/g" distfeeds.conf 331 | sed -i "s/DEVICE_PLATFORM/$DEVICE_PLATFORM/g" distfeeds.conf 332 | cd $OPENWRT_ROOT_PATH 333 | git clone https://git.openwrt.org/project/usign.git 334 | cd usign 335 | cmake . 336 | make 337 | sudo mv usign /bin 338 | mkdir -p $OPENWRT_ROOT_PATH/files/etc/opkg/keys 339 | cd $OPENWRT_ROOT_PATH/files/etc/opkg/keys 340 | wget -q https://openwrt.cc/keys/key-build.pub 341 | mv key-build.pub $(usign -F -p key-build.pub) 342 | fi 343 | cd $OPENWRT_ROOT_PATH 344 | echo "dtparam=i2c_arm=on,audio=on" >> target/linux/bcm27xx/image/config.txt 345 | mkdir -p files/etc/uci-defaults/ 346 | cp $GITHUB_WORKSPACE/scripts/init-settings.sh files/etc/uci-defaults/99-init-settings 347 | mkdir -p files/www/snapshots 348 | cp -r bin/targets files/www/snapshots 349 | make package/install -j$(nproc) || make package/install -j1 V=s 350 | make target/install -j$(nproc) || make target/install -j1 V=s 351 | make json_overview_image_info 352 | make checksum 353 | 354 | - name: Print Sha256sums 355 | run: | 356 | cd $OPENWRT_ROOT_PATH/bin/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET 357 | cat sha256sums 358 | 359 | - name: Compress Bin Folder 360 | run: | 361 | cd $OPENWRT_ROOT_PATH 362 | zip -r $DEVICE_TARGET-$DEVICE_SUBTARGET.zip bin 363 | 364 | - name: Print Disk Usage 365 | if: always() 366 | run: | 367 | echo 'lsblk -f' 368 | lsblk -f 369 | echo '-----' 370 | echo 'df -h' 371 | df -h 372 | echo '-----' 373 | echo 'btrfs filesystem usage' 374 | sudo btrfs filesystem usage $GITHUB_WORKSPACE 375 | echo '-----' 376 | 377 | - name: Upload Bin Archive 378 | uses: actions/upload-artifact@main 379 | with: 380 | name: bin-archive 381 | path: ${{ env.OPENWRT_ROOT_PATH }}/${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }}.zip 382 | 383 | Upload: 384 | needs: [Build, Toolchain] 385 | runs-on: ubuntu-20.04 386 | 387 | steps: 388 | - name: Checkout 389 | uses: actions/checkout@main 390 | 391 | - name: Restore Variables 392 | run: | 393 | echo "CURRENT_BRANCH=$(echo '${{needs.Toolchain.outputs.CURRENT_BRANCH}}')" >> $GITHUB_ENV 394 | echo "OPENWRT_ROOT_PATH=$(echo '${{needs.Toolchain.outputs.OPENWRT_ROOT_PATH}}')" >> $GITHUB_ENV 395 | echo "SOURCE_OWNER=$(echo '${{needs.Toolchain.outputs.SOURCE_OWNER}}')" >> $GITHUB_ENV 396 | echo "SOURCE_REPO=$(echo '${{needs.Toolchain.outputs.SOURCE_REPO}}')" >> $GITHUB_ENV 397 | echo "DEVICE_PLATFORM=$(echo '${{needs.Toolchain.outputs.DEVICE_PLATFORM}}')" >> $GITHUB_ENV 398 | echo "DEVICE_TARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_TARGET}}')" >> $GITHUB_ENV 399 | echo "DEVICE_SUBTARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_SUBTARGET}}')" >> $GITHUB_ENV 400 | echo "TOOLCHAIN_IMAGE=$(echo '${{needs.Toolchain.outputs.TOOLCHAIN_IMAGE}}')" >> $GITHUB_ENV 401 | 402 | - name: Initialization Environment 403 | env: 404 | DEBIAN_FRONTEND: noninteractive 405 | run: | 406 | sudo -E apt-get -qq update 407 | sudo -E apt-get -qq install zip unzip rsync 408 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 409 | 410 | - name: Download Bin Archive 411 | uses: actions/download-artifact@v2 412 | with: 413 | name: bin-archive 414 | path: ${{ env.OPENWRT_ROOT_PATH }} 415 | 416 | - name: Decompress Bin Archive 417 | run: | 418 | cd $OPENWRT_ROOT_PATH 419 | unzip $DEVICE_TARGET-$DEVICE_SUBTARGET.zip 420 | 421 | - name: Organize Files 422 | run: | 423 | export BUILD_DATE=$(date +"%Y-%m-%d") 424 | echo "BUILD_DATE=$BUILD_DATE" >> $GITHUB_ENV 425 | cd $OPENWRT_ROOT_PATH/bin/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET 426 | rm -rf packages 427 | df -hT $PWD 428 | 429 | - name: Deploy Files To HostHatch Node 430 | env: 431 | HOST: "${{ secrets.REMOTE_USER }}@${{ secrets.HOSTHATCH_IP }}" 432 | SOURCE_TARGETS: "${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 433 | DEST_TARGETS: "${{ env.WEB_ROOT_PATH }}/releases/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 434 | REMOTE_PRIVATEKEY: "${{ secrets.HOSTHATCH_PRIVATEKEY }}" 435 | if: env.REMOTE_PRIVATEKEY != null 436 | run: | 437 | mkdir -p ~/.ssh/ 438 | install -m 600 /dev/null ~/.ssh/id_rsa 439 | echo "${{ secrets.HOSTHATCH_PRIVATEKEY }}" > ~/.ssh/id_rsa 440 | chmod 600 ~/.ssh/id_rsa 441 | ssh -q -t -i ~/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $HOST \ 442 | bash -c "'mkdir -p $WEB_ROOT_PATH/releases/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET'" 443 | rsync -chavP --delete -e 'ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no' $SOURCE_TARGETS $HOST:$DEST_TARGETS 444 | 445 | - name: Deploy Files To Backblaze 446 | env: 447 | B2_APPLICATION_KEY: "${{ secrets.B2_APPLICATION_KEY }}" 448 | B2_APPLICATION_KEY_ID: "${{ secrets.B2_APPLICATION_KEY_ID }}" 449 | SOURCE_TARGETS: "${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 450 | DEST_TARGETS: "b2://${{ secrets.B2_BUCKETNAME }}/releases/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 451 | if: env.B2_APPLICATION_KEY != null && env.B2_APPLICATION_KEY_ID != null 452 | run: | 453 | sudo wget -q -O /bin/b2 https://github.com/Backblaze/B2_Command_Line_Tool/releases/latest/download/b2-linux 454 | sudo chmod +x /bin/b2 455 | b2 authorize-account $B2_APPLICATION_KEY_ID $B2_APPLICATION_KEY 456 | b2 sync --noProgress --threads 32 --keepDays 7 --replaceNewer $SOURCE_TARGETS $DEST_TARGETS 457 | 458 | - name: Delete Old Firmware Assets 459 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 460 | uses: mknejp/delete-release-assets@v1 461 | with: 462 | token: ${{ secrets.GITHUB_TOKEN }} 463 | tag: ${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 464 | fail-if-no-assets: false 465 | fail-if-no-release: false 466 | assets: "*" 467 | 468 | - name: Deploy Files To Release 469 | uses: ncipollo/release-action@v1.8.0 470 | if: env.FIRMWARE_RELEASE_UPLOAD == 'true' 471 | with: 472 | name: openwrt-${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 473 | allowUpdates: true 474 | replacesArtifacts: true 475 | tag: ${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 476 | body: ${{ env.BUILD_DATE }} 477 | commit: ${{ env.CURRENT_BRANCH }} 478 | token: ${{ secrets.GITHUB_TOKEN }} 479 | artifacts: ${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/* 480 | -------------------------------------------------------------------------------- /.github/workflows/delete-workflows.yml: -------------------------------------------------------------------------------- 1 | name: Delete Old Workflows 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | schedule: 7 | - cron: '0 0 * * *' 8 | 9 | jobs: 10 | Delete-Workflow-Archive: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Delete Workflow Runs 14 | id: workflow 15 | uses: GitRML/delete-workflow-runs@main 16 | with: 17 | token: ${{ secrets.GITHUB_TOKEN }} 18 | retain_days: 7 19 | -------------------------------------------------------------------------------- /.github/workflows/ipq40xx-generic.yml: -------------------------------------------------------------------------------- 1 | #================================================= 2 | # https://github.com/P3TERX/Actions-OpenWrt 3 | # Description: Build OpenWrt using GitHub Actions 4 | # Lisence: MIT 5 | # Author: P3TERX 6 | # Blog: https://p3terx.com 7 | #================================================= 8 | 9 | name: Build ipq40xx/generic openwrt 10 | 11 | on: 12 | workflow_dispatch: 13 | schedule: 14 | - cron: 0 18 * * * 15 | # watch: 16 | # types: started 17 | 18 | env: 19 | CONFIG_FILE: config/ipq40xx/generic.config 20 | SOURCE_URL: https://github.com/immortalwrt/immortalwrt 21 | SOURCE_BRANCH: openwrt-18.06-k5.4 22 | DIY_SH: scripts/custom.sh 23 | TOOLCHAIN_TAG: toolchain 24 | CLASH_BINARY_PLATFORM: armv7 25 | TOOLCHAIN_RELEASE_UPLOAD: true 26 | FIRMWARE_RELEASE_UPLOAD: true 27 | WEB_ROOT_PATH: /data/www/openwrt.cc 28 | TZ: Asia/Shanghai 29 | 30 | jobs: 31 | Toolchain: 32 | runs-on: ubuntu-20.04 33 | 34 | outputs: 35 | OPENWRT_ROOT_PATH: ${{ steps.clone.outputs.OPENWRT_ROOT_PATH }} 36 | CURRENT_BRANCH: ${{ steps.env.outputs.CURRENT_BRANCH }} 37 | SOURCE_OWNER: ${{ steps.env.outputs.SOURCE_OWNER }} 38 | SOURCE_REPO: ${{ steps.env.outputs.SOURCE_REPO }} 39 | DEVICE_PLATFORM: ${{ steps.env.outputs.DEVICE_PLATFORM }} 40 | DEVICE_TARGET: ${{ steps.env.outputs.DEVICE_TARGET }} 41 | DEVICE_SUBTARGET: ${{ steps.env.outputs.DEVICE_SUBTARGET }} 42 | TOOLCHAIN_IMAGE: ${{ steps.env.outputs.TOOLCHAIN_IMAGE }} 43 | 44 | steps: 45 | - name: Initialization Environment 46 | env: 47 | DEBIAN_FRONTEND: noninteractive 48 | run: | 49 | sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc 50 | sudo -E apt-get -qq update 51 | sudo -E apt-get -qq install squashfs-tools $(curl -fsSL git.io/depends-ubuntu-2004) 52 | sudo -E apt-get -qq autoremove --purge 53 | sudo -E apt-get -qq clean 54 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 55 | docker image prune -a -f 56 | mkdir -p workspace 57 | 58 | - name: Checkout 59 | uses: actions/checkout@main 60 | 61 | - name: Clone Source Code 62 | id: clone 63 | run: | 64 | df -hT $PWD 65 | git clone $SOURCE_URL -b $SOURCE_BRANCH workspace/openwrt 66 | cd workspace/openwrt 67 | echo "OPENWRT_ROOT_PATH=$PWD" >> $GITHUB_ENV 68 | echo "::set-output name=OPENWRT_ROOT_PATH::$(echo $PWD)" 69 | 70 | - name: Generate Toolchain Config 71 | run: | 72 | [ -e $CONFIG_FILE ] && mv $CONFIG_FILE $OPENWRT_ROOT_PATH/.config 73 | echo -e "\nCONFIG_ALL=y" >> $OPENWRT_ROOT_PATH/.config 74 | echo -e "\nCONFIG_ALL_NONSHARED=y" >> $OPENWRT_ROOT_PATH/.config 75 | cd $OPENWRT_ROOT_PATH 76 | make defconfig > /dev/null 2>&1 77 | 78 | - name: Generate Variables 79 | id: env 80 | run: | 81 | export CURRENT_BRANCH="$(git symbolic-ref --short HEAD)" 82 | echo "CURRENT_BRANCH=$CURRENT_BRANCH" >> $GITHUB_ENV 83 | echo "::set-output name=CURRENT_BRANCH::$(echo $CURRENT_BRANCH)" 84 | cd $OPENWRT_ROOT_PATH 85 | export SOURCE_OWNER="$(echo $SOURCE_URL | awk -F '/' '{print $(NF-1)}')" 86 | echo "SOURCE_OWNER=$SOURCE_OWNER" >> $GITHUB_ENV 87 | echo "::set-output name=SOURCE_OWNER::$(echo $SOURCE_OWNER)" 88 | export SOURCE_REPO="$(echo $SOURCE_URL | awk -F '/' '{print $(NF)}')" 89 | echo "SOURCE_REPO=$SOURCE_REPO" >> $GITHUB_ENV 90 | echo "::set-output name=SOURCE_REPO::$(echo $SOURCE_REPO)" 91 | export DEVICE_TARGET=$(cat .config | grep CONFIG_TARGET_BOARD | awk -F '"' '{print $2}') 92 | echo "DEVICE_TARGET=$DEVICE_TARGET" >> $GITHUB_ENV 93 | echo "::set-output name=DEVICE_TARGET::$(echo $DEVICE_TARGET)" 94 | export DEVICE_SUBTARGET=$(cat .config | grep CONFIG_TARGET_SUBTARGET | awk -F '"' '{print $2}') 95 | echo "DEVICE_SUBTARGET=$DEVICE_SUBTARGET" >> $GITHUB_ENV 96 | echo "::set-output name=DEVICE_SUBTARGET::$(echo $DEVICE_SUBTARGET)" 97 | export DEVICE_PLATFORM=$(cat .config | grep CONFIG_TARGET_ARCH_PACKAGES | awk -F '"' '{print $2}') 98 | echo "DEVICE_PLATFORM=$DEVICE_PLATFORM" >> $GITHUB_ENV 99 | echo "::set-output name=DEVICE_PLATFORM::$(echo $DEVICE_PLATFORM)" 100 | export TOOLCHAIN_IMAGE="toolchain-$SOURCE_OWNER-$SOURCE_REPO-$SOURCE_BRANCH-$DEVICE_TARGET-$DEVICE_SUBTARGET" 101 | echo "TOOLCHAIN_IMAGE=$TOOLCHAIN_IMAGE" >> $GITHUB_ENV 102 | echo "::set-output name=TOOLCHAIN_IMAGE::$(echo $TOOLCHAIN_IMAGE)" 103 | 104 | - name: Compare Toolchain Hash 105 | id: hash 106 | run: | 107 | cd $OPENWRT_ROOT_PATH 108 | export CURRENT_HASH=$(git log --pretty=tformat:"%H" -n1 tools toolchain) 109 | echo "CURRENT_HASH=$CURRENT_HASH" >> $GITHUB_ENV 110 | echo "::set-output name=CURRENT_HASH::$(echo $CURRENT_HASH)" 111 | echo "CURRENT_HASH is $CURRENT_HASH" 112 | export CACHE_HASH=$(curl -fSsL https://github.com/$GITHUB_REPOSITORY/releases/download/$TOOLCHAIN_TAG/$TOOLCHAIN_IMAGE.hash) 113 | echo "CACHE_HASH is $CACHE_HASH" 114 | if [ -z "$CACHE_HASH" ] || [ "$CURRENT_HASH" != "$CACHE_HASH" ]; then 115 | echo "::set-output name=REBUILD_TOOLCHAIN::true" 116 | fi 117 | 118 | - name: Install Feeds 119 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 120 | run: | 121 | cd $OPENWRT_ROOT_PATH 122 | ./scripts/feeds update -a 123 | ./scripts/feeds install -a 124 | make defconfig 125 | 126 | - name: Compile Tools 127 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 128 | run: | 129 | cd $OPENWRT_ROOT_PATH 130 | echo -e "$(nproc) thread compile" 131 | make tools/compile -j$(nproc) || make tools/compile -j1 V=s 132 | 133 | - name: Compile Toolchain 134 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 135 | run: | 136 | cd $OPENWRT_ROOT_PATH 137 | echo -e "$(nproc) thread compile" 138 | make toolchain/compile -j$(nproc) || make toolchain/compile -j1 V=s 139 | rm -rf .config* dl bin 140 | 141 | - name: Generate Toolchain Image 142 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 143 | run: | 144 | cd workspace 145 | mksquashfs openwrt $TOOLCHAIN_IMAGE -force-gid 1001 -force-uid 1001 -comp zstd 146 | mkdir -p $GITHUB_WORKSPACE/output 147 | split -d -b 1900M $TOOLCHAIN_IMAGE $GITHUB_WORKSPACE/output/$TOOLCHAIN_IMAGE.img. 148 | rm $TOOLCHAIN_IMAGE 149 | cd $OPENWRT_ROOT_PATH 150 | echo $CURRENT_HASH > $GITHUB_WORKSPACE/output/toolchain-$SOURCE_OWNER-$SOURCE_REPO-$SOURCE_BRANCH-$DEVICE_TARGET-$DEVICE_SUBTARGET.hash 151 | ls -lh $GITHUB_WORKSPACE/output 152 | 153 | - name: Upload Toolchain Image To Artifact 154 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 155 | uses: actions/upload-artifact@main 156 | with: 157 | name: ${{ env.TOOLCHAIN_IMAGE }} 158 | path: output 159 | 160 | - name: Delete Old Toolchain Assets From Release 161 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 162 | uses: mknejp/delete-release-assets@v1 163 | with: 164 | token: ${{ secrets.GITHUB_TOKEN }} 165 | tag: ${{ env.TOOLCHAIN_TAG }} 166 | assets: "toolchain-${{ env.TOOLCHAIN_IMAGE }}.*" 167 | fail-if-no-assets: false 168 | fail-if-no-release: false 169 | 170 | - name: Upload Toolchain Image To Release 171 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 172 | uses: ncipollo/release-action@v1.8.0 173 | with: 174 | name: toolchain-image 175 | allowUpdates: true 176 | replacesArtifacts: true 177 | tag: ${{ env.TOOLCHAIN_TAG }} 178 | commit: ${{ env.CURRENT_BRANCH }} 179 | token: ${{ secrets.GITHUB_TOKEN }} 180 | artifacts: output/* 181 | 182 | Build: 183 | needs: [Toolchain] 184 | runs-on: ubuntu-20.04 185 | 186 | steps: 187 | - name: Restore Variables 188 | run: | 189 | echo "CURRENT_BRANCH=$(echo '${{needs.Toolchain.outputs.CURRENT_BRANCH}}')" >> $GITHUB_ENV 190 | echo "OPENWRT_ROOT_PATH=$(echo '${{needs.Toolchain.outputs.OPENWRT_ROOT_PATH}}')" >> $GITHUB_ENV 191 | echo "SOURCE_OWNER=$(echo '${{needs.Toolchain.outputs.SOURCE_OWNER}}')" >> $GITHUB_ENV 192 | echo "SOURCE_REPO=$(echo '${{needs.Toolchain.outputs.SOURCE_REPO}}')" >> $GITHUB_ENV 193 | echo "DEVICE_PLATFORM=$(echo '${{needs.Toolchain.outputs.DEVICE_PLATFORM}}')" >> $GITHUB_ENV 194 | echo "DEVICE_TARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_TARGET}}')" >> $GITHUB_ENV 195 | echo "DEVICE_SUBTARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_SUBTARGET}}')" >> $GITHUB_ENV 196 | echo "TOOLCHAIN_IMAGE=$(echo '${{needs.Toolchain.outputs.TOOLCHAIN_IMAGE}}')" >> $GITHUB_ENV 197 | 198 | - name: Initialization Environment 199 | env: 200 | DEBIAN_FRONTEND: noninteractive 201 | run: | 202 | sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc 203 | sudo -E apt-get -qq update 204 | sudo -E apt-get -qq install rdate squashfs-tools $(curl -fsSL git.io/depends-ubuntu-2004) 205 | sudo -E apt-get -qq autoremove --purge 206 | sudo -E apt-get -qq clean 207 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 208 | docker image prune -a -f 209 | 210 | - name: Combine Disks 211 | run: | 212 | sudo swapoff -a 213 | sudo rm -f /mnt/swapfile 214 | export ROOT_FREE_KB=$(df --block-size=1024 --output=avail / | tail -1) 215 | export ROOT_LOOP_KB=$(expr $ROOT_FREE_KB - 1048576) 216 | export ROOT_LOOP_BYTES=$(expr $ROOT_LOOP_KB \* 1024) 217 | sudo fallocate -l $ROOT_LOOP_BYTES /root.img 218 | export ROOT_LOOP_DEVNAME=$(sudo losetup -Pf --show /root.img) 219 | sudo pvcreate -f $ROOT_LOOP_DEVNAME 220 | export MNT_FREE_KB=$(df --block-size=1024 --output=avail /mnt | tail -1) 221 | export MNT_LOOP_KB=$(expr $MNT_FREE_KB - 102400) 222 | export MNT_LOOP_BYTES=$(expr $MNT_LOOP_KB \* 1024) 223 | sudo fallocate -l $MNT_LOOP_BYTES /mnt/mnt.img 224 | export MNT_LOOP_DEVNAME=$(sudo losetup -Pf --show /mnt/mnt.img) 225 | sudo pvcreate -f $MNT_LOOP_DEVNAME 226 | sudo vgcreate vgstorage $ROOT_LOOP_DEVNAME $MNT_LOOP_DEVNAME 227 | sudo lvcreate -n lvstorage -l 100%FREE vgstorage 228 | export LV_DEVNAME=$(sudo lvscan | awk -F "'" '{print $2}') 229 | sudo mkfs.btrfs -L combinedisk $LV_DEVNAME 230 | sudo mount -o compress=zstd $LV_DEVNAME $GITHUB_WORKSPACE 231 | sudo chown -R runner:runner $GITHUB_WORKSPACE 232 | mkdir $GITHUB_WORKSPACE/tmp 233 | chmod 777 $GITHUB_WORKSPACE/tmp 234 | sudo cp -rp /tmp/* $GITHUB_WORKSPACE/tmp 235 | sudo mount -B $GITHUB_WORKSPACE/tmp /tmp 236 | df -hT $GITHUB_WORKSPACE 237 | sudo btrfs filesystem usage $GITHUB_WORKSPACE 238 | 239 | - name: Checkout 240 | run: | 241 | cd $GITHUB_WORKSPACE 242 | git init 243 | git remote add origin https://github.com/$GITHUB_REPOSITORY 244 | git fetch 245 | git checkout -t origin/$CURRENT_BRANCH 246 | 247 | - name: Download Toolchain Image Form Artifacts 248 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' 249 | uses: actions/download-artifact@v2 250 | with: 251 | name: ${{ env.TOOLCHAIN_IMAGE }} 252 | path: workspace 253 | 254 | - name: Prepare Toolchain Image Form Artifacts 255 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' 256 | run: | 257 | cd workspace 258 | for i in {1..9} 259 | do 260 | cat $TOOLCHAIN_IMAGE.img.0$i >> $TOOLCHAIN_IMAGE.img.00 && rm $TOOLCHAIN_IMAGE.img.0$i || break 261 | done 262 | mv $TOOLCHAIN_IMAGE.img.00 $TOOLCHAIN_IMAGE.img 263 | mkdir openwrt-ro openwrt workdir overlay 264 | sudo mount -o loop $TOOLCHAIN_IMAGE.img openwrt-ro 265 | sudo mount -t overlay overlay -o lowerdir=openwrt-ro,upperdir=overlay,workdir=workdir openwrt 266 | cd $OPENWRT_ROOT_PATH 267 | git pull 268 | 269 | - name: Prepare Toolchain Image Form Releases 270 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' 271 | run: | 272 | mkdir -p workspace 273 | cd workspace 274 | for i in {0..9} 275 | do 276 | curl -fsL https://github.com/$GITHUB_REPOSITORY/releases/download/$TOOLCHAIN_TAG/$TOOLCHAIN_IMAGE.img.0$i >> $TOOLCHAIN_IMAGE.img || break 277 | done 278 | mkdir openwrt-ro openwrt workdir overlay 279 | sudo mount -o loop $TOOLCHAIN_IMAGE.img openwrt-ro 280 | sudo mount -t overlay overlay -o lowerdir=openwrt-ro,upperdir=overlay,workdir=workdir openwrt 281 | cd $OPENWRT_ROOT_PATH 282 | git pull 283 | 284 | - name: Install Feeds 285 | run: | 286 | cd $OPENWRT_ROOT_PATH 287 | ./scripts/feeds update -a 288 | ./scripts/feeds install -a 289 | 290 | - name: Load Custom Configuration 291 | run: | 292 | [ -e files ] && mv files $OPENWRT_ROOT_PATH/files 293 | [ -e $CONFIG_FILE ] && mv $CONFIG_FILE $OPENWRT_ROOT_PATH/.config 294 | cat config/general-packages.config >> $OPENWRT_ROOT_PATH/.config 295 | cd $OPENWRT_ROOT_PATH 296 | chmod +x $GITHUB_WORKSPACE/scripts/*.sh 297 | $GITHUB_WORKSPACE/$DIY_SH 298 | $GITHUB_WORKSPACE/scripts/preset-clash-core.sh $CLASH_BINARY_PLATFORM 299 | $GITHUB_WORKSPACE/scripts/preset-terminal-tools.sh 300 | make defconfig 301 | 302 | - name: Download DL Package 303 | id: download 304 | run: | 305 | cd $OPENWRT_ROOT_PATH 306 | make download -j64 307 | 308 | - name: Compile Packages 309 | run: | 310 | cd $OPENWRT_ROOT_PATH 311 | echo -e "$(nproc) thread compile" 312 | make buildinfo 313 | make diffconfig buildversion feedsversion 314 | make target/compile -j$(nproc) IGNORE_ERRORS="m n" BUILD_LOG=1 || \ 315 | yes n | make target/compile -j1 V=s IGNORE_ERRORS=1 316 | make package/compile -j$(nproc) IGNORE_ERRORS=1 || make package/compile -j1 V=s IGNORE_ERRORS=1 317 | make package/index 318 | 319 | - name: Generate Firmware 320 | id: generate 321 | run: | 322 | if grep -q $DEVICE_TARGET/$DEVICE_SUBTARGET $GITHUB_WORKSPACE/data/support-targets.txt; then 323 | mkdir -p $OPENWRT_ROOT_PATH/files/etc/opkg 324 | cd $OPENWRT_ROOT_PATH/files/etc/opkg 325 | cp $GITHUB_WORKSPACE/data/opkg/distfeeds.conf . 326 | sed -i "s/DEVICE_SUBTARGET/$DEVICE_SUBTARGET/g" distfeeds.conf 327 | sed -i "s/DEVICE_TARGET/$DEVICE_TARGET/g" distfeeds.conf 328 | sed -i "s/DEVICE_PLATFORM/$DEVICE_PLATFORM/g" distfeeds.conf 329 | cd $OPENWRT_ROOT_PATH 330 | git clone https://git.openwrt.org/project/usign.git 331 | cd usign 332 | cmake . 333 | make 334 | sudo mv usign /bin 335 | mkdir -p $OPENWRT_ROOT_PATH/files/etc/opkg/keys 336 | cd $OPENWRT_ROOT_PATH/files/etc/opkg/keys 337 | wget -q https://openwrt.cc/keys/key-build.pub 338 | mv key-build.pub $(usign -F -p key-build.pub) 339 | fi 340 | cd $OPENWRT_ROOT_PATH 341 | mkdir -p files/etc/uci-defaults/ 342 | cp $GITHUB_WORKSPACE/scripts/init-settings.sh files/etc/uci-defaults/99-init-settings 343 | make package/install -j$(nproc) || make package/install -j1 V=s 344 | make target/install -j$(nproc) || make target/install -j1 V=s 345 | make json_overview_image_info 346 | make checksum 347 | 348 | - name: Print Sha256sums 349 | run: | 350 | cd $OPENWRT_ROOT_PATH/bin/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET 351 | cat sha256sums 352 | 353 | - name: Compress Bin Folder 354 | run: | 355 | cd $OPENWRT_ROOT_PATH 356 | zip -r $DEVICE_TARGET-$DEVICE_SUBTARGET.zip bin 357 | 358 | - name: Print Disk Usage 359 | if: always() 360 | run: | 361 | echo 'lsblk -f' 362 | lsblk -f 363 | echo '-----' 364 | echo 'df -h' 365 | df -h 366 | echo '-----' 367 | echo 'btrfs filesystem usage' 368 | sudo btrfs filesystem usage $GITHUB_WORKSPACE 369 | echo '-----' 370 | 371 | - name: Upload Bin Archive 372 | uses: actions/upload-artifact@main 373 | with: 374 | name: bin-archive 375 | path: ${{ env.OPENWRT_ROOT_PATH }}/${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }}.zip 376 | 377 | Upload: 378 | needs: [Build, Toolchain] 379 | runs-on: ubuntu-20.04 380 | 381 | steps: 382 | - name: Checkout 383 | uses: actions/checkout@main 384 | 385 | - name: Restore Variables 386 | run: | 387 | echo "CURRENT_BRANCH=$(echo '${{needs.Toolchain.outputs.CURRENT_BRANCH}}')" >> $GITHUB_ENV 388 | echo "OPENWRT_ROOT_PATH=$(echo '${{needs.Toolchain.outputs.OPENWRT_ROOT_PATH}}')" >> $GITHUB_ENV 389 | echo "SOURCE_OWNER=$(echo '${{needs.Toolchain.outputs.SOURCE_OWNER}}')" >> $GITHUB_ENV 390 | echo "SOURCE_REPO=$(echo '${{needs.Toolchain.outputs.SOURCE_REPO}}')" >> $GITHUB_ENV 391 | echo "DEVICE_PLATFORM=$(echo '${{needs.Toolchain.outputs.DEVICE_PLATFORM}}')" >> $GITHUB_ENV 392 | echo "DEVICE_TARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_TARGET}}')" >> $GITHUB_ENV 393 | echo "DEVICE_SUBTARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_SUBTARGET}}')" >> $GITHUB_ENV 394 | echo "TOOLCHAIN_IMAGE=$(echo '${{needs.Toolchain.outputs.TOOLCHAIN_IMAGE}}')" >> $GITHUB_ENV 395 | 396 | - name: Initialization Environment 397 | env: 398 | DEBIAN_FRONTEND: noninteractive 399 | run: | 400 | sudo -E apt-get -qq update 401 | sudo -E apt-get -qq install zip unzip rsync 402 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 403 | 404 | - name: Download Bin Archive 405 | uses: actions/download-artifact@v2 406 | with: 407 | name: bin-archive 408 | path: ${{ env.OPENWRT_ROOT_PATH }} 409 | 410 | - name: Decompress Bin Archive 411 | run: | 412 | cd $OPENWRT_ROOT_PATH 413 | unzip $DEVICE_TARGET-$DEVICE_SUBTARGET.zip 414 | 415 | - name: Organize Files 416 | run: | 417 | export BUILD_DATE=$(date +"%Y-%m-%d") 418 | echo "BUILD_DATE=$BUILD_DATE" >> $GITHUB_ENV 419 | cd $OPENWRT_ROOT_PATH/bin/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET 420 | rm -rf packages 421 | df -hT $PWD 422 | 423 | - name: Deploy Files To HostHatch Node 424 | env: 425 | HOST: "${{ secrets.REMOTE_USER }}@${{ secrets.HOSTHATCH_IP }}" 426 | SOURCE_TARGETS: "${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 427 | DEST_TARGETS: "${{ env.WEB_ROOT_PATH }}/releases/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 428 | REMOTE_PRIVATEKEY: "${{ secrets.HOSTHATCH_PRIVATEKEY }}" 429 | if: env.REMOTE_PRIVATEKEY != null 430 | run: | 431 | mkdir -p ~/.ssh/ 432 | install -m 600 /dev/null ~/.ssh/id_rsa 433 | echo "${{ secrets.HOSTHATCH_PRIVATEKEY }}" > ~/.ssh/id_rsa 434 | chmod 600 ~/.ssh/id_rsa 435 | ssh -q -t -i ~/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $HOST \ 436 | bash -c "'mkdir -p $WEB_ROOT_PATH/releases/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET'" 437 | rsync -chavP --delete -e 'ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no' $SOURCE_TARGETS $HOST:$DEST_TARGETS 438 | 439 | - name: Deploy Files To Backblaze 440 | env: 441 | B2_APPLICATION_KEY: "${{ secrets.B2_APPLICATION_KEY }}" 442 | B2_APPLICATION_KEY_ID: "${{ secrets.B2_APPLICATION_KEY_ID }}" 443 | SOURCE_TARGETS: "${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 444 | DEST_TARGETS: "b2://${{ secrets.B2_BUCKETNAME }}/releases/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 445 | if: env.B2_APPLICATION_KEY != null && env.B2_APPLICATION_KEY_ID != null 446 | run: | 447 | sudo wget -q -O /bin/b2 https://github.com/Backblaze/B2_Command_Line_Tool/releases/latest/download/b2-linux 448 | sudo chmod +x /bin/b2 449 | b2 authorize-account $B2_APPLICATION_KEY_ID $B2_APPLICATION_KEY 450 | b2 sync --noProgress --threads 32 --keepDays 7 --replaceNewer $SOURCE_TARGETS $DEST_TARGETS 451 | 452 | - name: Delete Old Firmware Assets 453 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 454 | uses: mknejp/delete-release-assets@v1 455 | with: 456 | token: ${{ secrets.GITHUB_TOKEN }} 457 | tag: ${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 458 | fail-if-no-assets: false 459 | fail-if-no-release: false 460 | assets: "*" 461 | 462 | - name: Deploy Files To Release 463 | uses: ncipollo/release-action@v1.8.0 464 | if: env.FIRMWARE_RELEASE_UPLOAD == 'true' 465 | with: 466 | name: openwrt-${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 467 | allowUpdates: true 468 | replacesArtifacts: true 469 | tag: ${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 470 | body: ${{ env.BUILD_DATE }} 471 | commit: ${{ env.CURRENT_BRANCH }} 472 | token: ${{ secrets.GITHUB_TOKEN }} 473 | artifacts: ${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/* 474 | -------------------------------------------------------------------------------- /.github/workflows/rockchip-armv8.yml: -------------------------------------------------------------------------------- 1 | #================================================= 2 | # https://github.com/P3TERX/Actions-OpenWrt 3 | # Description: Build OpenWrt using GitHub Actions 4 | # Lisence: MIT 5 | # Author: P3TERX 6 | # Blog: https://p3terx.com 7 | #================================================= 8 | 9 | name: Build rockchip/armv8 openwrt 10 | 11 | on: 12 | workflow_dispatch: 13 | schedule: 14 | - cron: 0 18 * * * 15 | # watch: 16 | # types: started 17 | 18 | env: 19 | CONFIG_FILE: config/rockchip/armv8.config 20 | SOURCE_URL: https://github.com/immortalwrt/immortalwrt 21 | SOURCE_BRANCH: openwrt-18.06-k5.4 22 | DIY_SH: scripts/custom.sh 23 | TOOLCHAIN_TAG: toolchain 24 | CLASH_BINARY_PLATFORM: armv8 25 | TOOLCHAIN_RELEASE_UPLOAD: true 26 | FIRMWARE_RELEASE_UPLOAD: true 27 | WEB_ROOT_PATH: /data/www/openwrt.cc 28 | TZ: Asia/Shanghai 29 | 30 | jobs: 31 | Toolchain: 32 | runs-on: ubuntu-20.04 33 | 34 | outputs: 35 | OPENWRT_ROOT_PATH: ${{ steps.clone.outputs.OPENWRT_ROOT_PATH }} 36 | CURRENT_BRANCH: ${{ steps.env.outputs.CURRENT_BRANCH }} 37 | SOURCE_OWNER: ${{ steps.env.outputs.SOURCE_OWNER }} 38 | SOURCE_REPO: ${{ steps.env.outputs.SOURCE_REPO }} 39 | DEVICE_PLATFORM: ${{ steps.env.outputs.DEVICE_PLATFORM }} 40 | DEVICE_TARGET: ${{ steps.env.outputs.DEVICE_TARGET }} 41 | DEVICE_SUBTARGET: ${{ steps.env.outputs.DEVICE_SUBTARGET }} 42 | TOOLCHAIN_IMAGE: ${{ steps.env.outputs.TOOLCHAIN_IMAGE }} 43 | 44 | steps: 45 | - name: Initialization Environment 46 | env: 47 | DEBIAN_FRONTEND: noninteractive 48 | run: | 49 | sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc 50 | sudo -E apt-get -qq update 51 | sudo -E apt-get -qq install squashfs-tools $(curl -fsSL git.io/depends-ubuntu-2004) 52 | sudo -E apt-get -qq autoremove --purge 53 | sudo -E apt-get -qq clean 54 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 55 | docker image prune -a -f 56 | mkdir -p workspace 57 | 58 | - name: Checkout 59 | uses: actions/checkout@main 60 | 61 | - name: Clone Source Code 62 | id: clone 63 | run: | 64 | df -hT $PWD 65 | git clone $SOURCE_URL -b $SOURCE_BRANCH workspace/openwrt 66 | cd workspace/openwrt 67 | echo "OPENWRT_ROOT_PATH=$PWD" >> $GITHUB_ENV 68 | echo "::set-output name=OPENWRT_ROOT_PATH::$(echo $PWD)" 69 | 70 | - name: Generate Toolchain Config 71 | run: | 72 | [ -e $CONFIG_FILE ] && mv $CONFIG_FILE $OPENWRT_ROOT_PATH/.config 73 | echo -e "\nCONFIG_ALL=y" >> $OPENWRT_ROOT_PATH/.config 74 | echo -e "\nCONFIG_ALL_NONSHARED=y" >> $OPENWRT_ROOT_PATH/.config 75 | cd $OPENWRT_ROOT_PATH 76 | make defconfig > /dev/null 2>&1 77 | 78 | - name: Generate Variables 79 | id: env 80 | run: | 81 | export CURRENT_BRANCH="$(git symbolic-ref --short HEAD)" 82 | echo "CURRENT_BRANCH=$CURRENT_BRANCH" >> $GITHUB_ENV 83 | echo "::set-output name=CURRENT_BRANCH::$(echo $CURRENT_BRANCH)" 84 | cd $OPENWRT_ROOT_PATH 85 | export SOURCE_OWNER="$(echo $SOURCE_URL | awk -F '/' '{print $(NF-1)}')" 86 | echo "SOURCE_OWNER=$SOURCE_OWNER" >> $GITHUB_ENV 87 | echo "::set-output name=SOURCE_OWNER::$(echo $SOURCE_OWNER)" 88 | export SOURCE_REPO="$(echo $SOURCE_URL | awk -F '/' '{print $(NF)}')" 89 | echo "SOURCE_REPO=$SOURCE_REPO" >> $GITHUB_ENV 90 | echo "::set-output name=SOURCE_REPO::$(echo $SOURCE_REPO)" 91 | export DEVICE_TARGET=$(cat .config | grep CONFIG_TARGET_BOARD | awk -F '"' '{print $2}') 92 | echo "DEVICE_TARGET=$DEVICE_TARGET" >> $GITHUB_ENV 93 | echo "::set-output name=DEVICE_TARGET::$(echo $DEVICE_TARGET)" 94 | export DEVICE_SUBTARGET=$(cat .config | grep CONFIG_TARGET_SUBTARGET | awk -F '"' '{print $2}') 95 | echo "DEVICE_SUBTARGET=$DEVICE_SUBTARGET" >> $GITHUB_ENV 96 | echo "::set-output name=DEVICE_SUBTARGET::$(echo $DEVICE_SUBTARGET)" 97 | export DEVICE_PLATFORM=$(cat .config | grep CONFIG_TARGET_ARCH_PACKAGES | awk -F '"' '{print $2}') 98 | echo "DEVICE_PLATFORM=$DEVICE_PLATFORM" >> $GITHUB_ENV 99 | echo "::set-output name=DEVICE_PLATFORM::$(echo $DEVICE_PLATFORM)" 100 | export TOOLCHAIN_IMAGE="toolchain-$SOURCE_OWNER-$SOURCE_REPO-$SOURCE_BRANCH-$DEVICE_TARGET-$DEVICE_SUBTARGET" 101 | echo "TOOLCHAIN_IMAGE=$TOOLCHAIN_IMAGE" >> $GITHUB_ENV 102 | echo "::set-output name=TOOLCHAIN_IMAGE::$(echo $TOOLCHAIN_IMAGE)" 103 | 104 | - name: Compare Toolchain Hash 105 | id: hash 106 | run: | 107 | cd $OPENWRT_ROOT_PATH 108 | export CURRENT_HASH=$(git log --pretty=tformat:"%H" -n1 tools toolchain) 109 | echo "CURRENT_HASH=$CURRENT_HASH" >> $GITHUB_ENV 110 | echo "::set-output name=CURRENT_HASH::$(echo $CURRENT_HASH)" 111 | echo "CURRENT_HASH is $CURRENT_HASH" 112 | export CACHE_HASH=$(curl -fSsL https://github.com/$GITHUB_REPOSITORY/releases/download/$TOOLCHAIN_TAG/$TOOLCHAIN_IMAGE.hash) 113 | echo "CACHE_HASH is $CACHE_HASH" 114 | if [ -z "$CACHE_HASH" ] || [ "$CURRENT_HASH" != "$CACHE_HASH" ]; then 115 | echo "::set-output name=REBUILD_TOOLCHAIN::true" 116 | fi 117 | 118 | - name: Install Feeds 119 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 120 | run: | 121 | cd $OPENWRT_ROOT_PATH 122 | ./scripts/feeds update -a 123 | ./scripts/feeds install -a 124 | make defconfig 125 | 126 | - name: Compile Tools 127 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 128 | run: | 129 | cd $OPENWRT_ROOT_PATH 130 | echo -e "$(nproc) thread compile" 131 | make tools/compile -j$(nproc) || make tools/compile -j1 V=s 132 | 133 | - name: Compile Toolchain 134 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 135 | run: | 136 | cd $OPENWRT_ROOT_PATH 137 | echo -e "$(nproc) thread compile" 138 | make toolchain/compile -j$(nproc) || make toolchain/compile -j1 V=s 139 | rm -rf .config* dl bin 140 | 141 | - name: Generate Toolchain Image 142 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 143 | run: | 144 | cd workspace 145 | mksquashfs openwrt $TOOLCHAIN_IMAGE -force-gid 1001 -force-uid 1001 -comp zstd 146 | mkdir -p $GITHUB_WORKSPACE/output 147 | split -d -b 1900M $TOOLCHAIN_IMAGE $GITHUB_WORKSPACE/output/$TOOLCHAIN_IMAGE.img. 148 | rm $TOOLCHAIN_IMAGE 149 | cd $OPENWRT_ROOT_PATH 150 | echo $CURRENT_HASH > $GITHUB_WORKSPACE/output/toolchain-$SOURCE_OWNER-$SOURCE_REPO-$SOURCE_BRANCH-$DEVICE_TARGET-$DEVICE_SUBTARGET.hash 151 | ls -lh $GITHUB_WORKSPACE/output 152 | 153 | - name: Upload Toolchain Image To Artifact 154 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 155 | uses: actions/upload-artifact@main 156 | with: 157 | name: ${{ env.TOOLCHAIN_IMAGE }} 158 | path: output 159 | 160 | - name: Delete Old Toolchain Assets From Release 161 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 162 | uses: mknejp/delete-release-assets@v1 163 | with: 164 | token: ${{ secrets.GITHUB_TOKEN }} 165 | tag: ${{ env.TOOLCHAIN_TAG }} 166 | assets: "toolchain-${{ env.TOOLCHAIN_IMAGE }}.*" 167 | fail-if-no-assets: false 168 | fail-if-no-release: false 169 | 170 | - name: Upload Toolchain Image To Release 171 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 172 | uses: ncipollo/release-action@v1.8.0 173 | with: 174 | name: toolchain-image 175 | allowUpdates: true 176 | replacesArtifacts: true 177 | tag: ${{ env.TOOLCHAIN_TAG }} 178 | commit: ${{ env.CURRENT_BRANCH }} 179 | token: ${{ secrets.GITHUB_TOKEN }} 180 | artifacts: output/* 181 | 182 | Build: 183 | needs: [Toolchain] 184 | runs-on: ubuntu-20.04 185 | 186 | steps: 187 | - name: Restore Variables 188 | run: | 189 | echo "CURRENT_BRANCH=$(echo '${{needs.Toolchain.outputs.CURRENT_BRANCH}}')" >> $GITHUB_ENV 190 | echo "OPENWRT_ROOT_PATH=$(echo '${{needs.Toolchain.outputs.OPENWRT_ROOT_PATH}}')" >> $GITHUB_ENV 191 | echo "SOURCE_OWNER=$(echo '${{needs.Toolchain.outputs.SOURCE_OWNER}}')" >> $GITHUB_ENV 192 | echo "SOURCE_REPO=$(echo '${{needs.Toolchain.outputs.SOURCE_REPO}}')" >> $GITHUB_ENV 193 | echo "DEVICE_PLATFORM=$(echo '${{needs.Toolchain.outputs.DEVICE_PLATFORM}}')" >> $GITHUB_ENV 194 | echo "DEVICE_TARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_TARGET}}')" >> $GITHUB_ENV 195 | echo "DEVICE_SUBTARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_SUBTARGET}}')" >> $GITHUB_ENV 196 | echo "TOOLCHAIN_IMAGE=$(echo '${{needs.Toolchain.outputs.TOOLCHAIN_IMAGE}}')" >> $GITHUB_ENV 197 | 198 | - name: Initialization Environment 199 | env: 200 | DEBIAN_FRONTEND: noninteractive 201 | run: | 202 | sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc 203 | sudo -E apt-get -qq update 204 | sudo -E apt-get -qq install rdate squashfs-tools $(curl -fsSL git.io/depends-ubuntu-2004) 205 | sudo -E apt-get -qq autoremove --purge 206 | sudo -E apt-get -qq clean 207 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 208 | docker image prune -a -f 209 | 210 | - name: Combine Disks 211 | run: | 212 | sudo swapoff -a 213 | sudo rm -f /mnt/swapfile 214 | export ROOT_FREE_KB=$(df --block-size=1024 --output=avail / | tail -1) 215 | export ROOT_LOOP_KB=$(expr $ROOT_FREE_KB - 1048576) 216 | export ROOT_LOOP_BYTES=$(expr $ROOT_LOOP_KB \* 1024) 217 | sudo fallocate -l $ROOT_LOOP_BYTES /root.img 218 | export ROOT_LOOP_DEVNAME=$(sudo losetup -Pf --show /root.img) 219 | sudo pvcreate -f $ROOT_LOOP_DEVNAME 220 | export MNT_FREE_KB=$(df --block-size=1024 --output=avail /mnt | tail -1) 221 | export MNT_LOOP_KB=$(expr $MNT_FREE_KB - 102400) 222 | export MNT_LOOP_BYTES=$(expr $MNT_LOOP_KB \* 1024) 223 | sudo fallocate -l $MNT_LOOP_BYTES /mnt/mnt.img 224 | export MNT_LOOP_DEVNAME=$(sudo losetup -Pf --show /mnt/mnt.img) 225 | sudo pvcreate -f $MNT_LOOP_DEVNAME 226 | sudo vgcreate vgstorage $ROOT_LOOP_DEVNAME $MNT_LOOP_DEVNAME 227 | sudo lvcreate -n lvstorage -l 100%FREE vgstorage 228 | export LV_DEVNAME=$(sudo lvscan | awk -F "'" '{print $2}') 229 | sudo mkfs.btrfs -L combinedisk $LV_DEVNAME 230 | sudo mount -o compress=zstd $LV_DEVNAME $GITHUB_WORKSPACE 231 | sudo chown -R runner:runner $GITHUB_WORKSPACE 232 | mkdir $GITHUB_WORKSPACE/tmp 233 | chmod 777 $GITHUB_WORKSPACE/tmp 234 | sudo cp -rp /tmp/* $GITHUB_WORKSPACE/tmp 235 | sudo mount -B $GITHUB_WORKSPACE/tmp /tmp 236 | df -hT $GITHUB_WORKSPACE 237 | sudo btrfs filesystem usage $GITHUB_WORKSPACE 238 | 239 | - name: Checkout 240 | run: | 241 | cd $GITHUB_WORKSPACE 242 | git init 243 | git remote add origin https://github.com/$GITHUB_REPOSITORY 244 | git fetch 245 | git checkout -t origin/$CURRENT_BRANCH 246 | 247 | - name: Download Toolchain Image Form Artifacts 248 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' 249 | uses: actions/download-artifact@v2 250 | with: 251 | name: ${{ env.TOOLCHAIN_IMAGE }} 252 | path: workspace 253 | 254 | - name: Prepare Toolchain Image Form Artifacts 255 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' 256 | run: | 257 | cd workspace 258 | for i in {1..9} 259 | do 260 | cat $TOOLCHAIN_IMAGE.img.0$i >> $TOOLCHAIN_IMAGE.img.00 && rm $TOOLCHAIN_IMAGE.img.0$i || break 261 | done 262 | mv $TOOLCHAIN_IMAGE.img.00 $TOOLCHAIN_IMAGE.img 263 | mkdir openwrt-ro openwrt workdir overlay 264 | sudo mount -o loop $TOOLCHAIN_IMAGE.img openwrt-ro 265 | sudo mount -t overlay overlay -o lowerdir=openwrt-ro,upperdir=overlay,workdir=workdir openwrt 266 | cd $OPENWRT_ROOT_PATH 267 | git pull 268 | 269 | - name: Prepare Toolchain Image Form Releases 270 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' 271 | run: | 272 | mkdir -p workspace 273 | cd workspace 274 | for i in {0..9} 275 | do 276 | curl -fsL https://github.com/$GITHUB_REPOSITORY/releases/download/$TOOLCHAIN_TAG/$TOOLCHAIN_IMAGE.img.0$i >> $TOOLCHAIN_IMAGE.img || break 277 | done 278 | mkdir openwrt-ro openwrt workdir overlay 279 | sudo mount -o loop $TOOLCHAIN_IMAGE.img openwrt-ro 280 | sudo mount -t overlay overlay -o lowerdir=openwrt-ro,upperdir=overlay,workdir=workdir openwrt 281 | cd $OPENWRT_ROOT_PATH 282 | git pull 283 | 284 | - name: Install Feeds 285 | run: | 286 | cd $OPENWRT_ROOT_PATH 287 | ./scripts/feeds update -a 288 | ./scripts/feeds install -a 289 | 290 | - name: Load Custom Configuration 291 | run: | 292 | [ -e files ] && mv files $OPENWRT_ROOT_PATH/files 293 | [ -e $CONFIG_FILE ] && mv $CONFIG_FILE $OPENWRT_ROOT_PATH/.config 294 | cat config/general-packages.config >> $OPENWRT_ROOT_PATH/.config 295 | cat config/extra-drivers.config >> $OPENWRT_ROOT_PATH/.config 296 | cd $OPENWRT_ROOT_PATH 297 | chmod +x $GITHUB_WORKSPACE/scripts/*.sh 298 | $GITHUB_WORKSPACE/$DIY_SH 299 | $GITHUB_WORKSPACE/scripts/preset-clash-core.sh $CLASH_BINARY_PLATFORM 300 | $GITHUB_WORKSPACE/scripts/preset-terminal-tools.sh 301 | make defconfig 302 | 303 | - name: Download DL Package 304 | id: download 305 | run: | 306 | cd $OPENWRT_ROOT_PATH 307 | make download -j64 308 | 309 | - name: Compile Packages 310 | run: | 311 | cd $OPENWRT_ROOT_PATH 312 | echo -e "$(nproc) thread compile" 313 | make buildinfo 314 | make diffconfig buildversion feedsversion 315 | make target/compile -j$(nproc) IGNORE_ERRORS="m n" BUILD_LOG=1 || \ 316 | yes n | make target/compile -j1 V=s IGNORE_ERRORS=1 317 | make package/compile -j$(nproc) IGNORE_ERRORS=1 || make package/compile -j1 V=s IGNORE_ERRORS=1 318 | make package/index 319 | 320 | - name: Generate Firmware 321 | id: generate 322 | run: | 323 | if grep -q $DEVICE_TARGET/$DEVICE_SUBTARGET $GITHUB_WORKSPACE/data/support-targets.txt; then 324 | mkdir -p $OPENWRT_ROOT_PATH/files/etc/opkg 325 | cd $OPENWRT_ROOT_PATH/files/etc/opkg 326 | cp $GITHUB_WORKSPACE/data/opkg/distfeeds.conf . 327 | sed -i "s/DEVICE_SUBTARGET/$DEVICE_SUBTARGET/g" distfeeds.conf 328 | sed -i "s/DEVICE_TARGET/$DEVICE_TARGET/g" distfeeds.conf 329 | sed -i "s/DEVICE_PLATFORM/$DEVICE_PLATFORM/g" distfeeds.conf 330 | cd $OPENWRT_ROOT_PATH 331 | git clone https://git.openwrt.org/project/usign.git 332 | cd usign 333 | cmake . 334 | make 335 | sudo mv usign /bin 336 | mkdir -p $OPENWRT_ROOT_PATH/files/etc/opkg/keys 337 | cd $OPENWRT_ROOT_PATH/files/etc/opkg/keys 338 | wget -q https://openwrt.cc/keys/key-build.pub 339 | mv key-build.pub $(usign -F -p key-build.pub) 340 | fi 341 | cd $OPENWRT_ROOT_PATH 342 | mkdir -p files/etc/uci-defaults/ 343 | cp $GITHUB_WORKSPACE/scripts/init-settings.sh files/etc/uci-defaults/99-init-settings 344 | mkdir -p files/www/snapshots 345 | cp -r bin/targets files/www/snapshots 346 | make package/install -j$(nproc) || make package/install -j1 V=s 347 | make target/install -j$(nproc) || make target/install -j1 V=s 348 | make json_overview_image_info 349 | make checksum 350 | 351 | - name: Print Sha256sums 352 | run: | 353 | cd $OPENWRT_ROOT_PATH/bin/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET 354 | cat sha256sums 355 | 356 | - name: Compress Bin Folder 357 | run: | 358 | cd $OPENWRT_ROOT_PATH 359 | zip -r $DEVICE_TARGET-$DEVICE_SUBTARGET.zip bin 360 | 361 | - name: Print Disk Usage 362 | if: always() 363 | run: | 364 | echo 'lsblk -f' 365 | lsblk -f 366 | echo '-----' 367 | echo 'df -h' 368 | df -h 369 | echo '-----' 370 | echo 'btrfs filesystem usage' 371 | sudo btrfs filesystem usage $GITHUB_WORKSPACE 372 | echo '-----' 373 | 374 | - name: Upload Bin Archive 375 | uses: actions/upload-artifact@main 376 | with: 377 | name: bin-archive 378 | path: ${{ env.OPENWRT_ROOT_PATH }}/${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }}.zip 379 | 380 | Upload: 381 | needs: [Build, Toolchain] 382 | runs-on: ubuntu-20.04 383 | 384 | steps: 385 | - name: Checkout 386 | uses: actions/checkout@main 387 | 388 | - name: Restore Variables 389 | run: | 390 | echo "CURRENT_BRANCH=$(echo '${{needs.Toolchain.outputs.CURRENT_BRANCH}}')" >> $GITHUB_ENV 391 | echo "OPENWRT_ROOT_PATH=$(echo '${{needs.Toolchain.outputs.OPENWRT_ROOT_PATH}}')" >> $GITHUB_ENV 392 | echo "SOURCE_OWNER=$(echo '${{needs.Toolchain.outputs.SOURCE_OWNER}}')" >> $GITHUB_ENV 393 | echo "SOURCE_REPO=$(echo '${{needs.Toolchain.outputs.SOURCE_REPO}}')" >> $GITHUB_ENV 394 | echo "DEVICE_PLATFORM=$(echo '${{needs.Toolchain.outputs.DEVICE_PLATFORM}}')" >> $GITHUB_ENV 395 | echo "DEVICE_TARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_TARGET}}')" >> $GITHUB_ENV 396 | echo "DEVICE_SUBTARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_SUBTARGET}}')" >> $GITHUB_ENV 397 | echo "TOOLCHAIN_IMAGE=$(echo '${{needs.Toolchain.outputs.TOOLCHAIN_IMAGE}}')" >> $GITHUB_ENV 398 | 399 | - name: Initialization Environment 400 | env: 401 | DEBIAN_FRONTEND: noninteractive 402 | run: | 403 | sudo -E apt-get -qq update 404 | sudo -E apt-get -qq install zip unzip rsync 405 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 406 | 407 | - name: Download Bin Archive 408 | uses: actions/download-artifact@v2 409 | with: 410 | name: bin-archive 411 | path: ${{ env.OPENWRT_ROOT_PATH }} 412 | 413 | - name: Decompress Bin Archive 414 | run: | 415 | cd $OPENWRT_ROOT_PATH 416 | unzip $DEVICE_TARGET-$DEVICE_SUBTARGET.zip 417 | 418 | - name: Organize Files 419 | run: | 420 | export BUILD_DATE=$(date +"%Y-%m-%d") 421 | echo "BUILD_DATE=$BUILD_DATE" >> $GITHUB_ENV 422 | cd $OPENWRT_ROOT_PATH/bin/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET 423 | rm -rf packages 424 | df -hT $PWD 425 | 426 | - name: Deploy Files To HostHatch Node 427 | env: 428 | HOST: "${{ secrets.REMOTE_USER }}@${{ secrets.HOSTHATCH_IP }}" 429 | SOURCE_TARGETS: "${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 430 | DEST_TARGETS: "${{ env.WEB_ROOT_PATH }}/releases/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 431 | REMOTE_PRIVATEKEY: "${{ secrets.HOSTHATCH_PRIVATEKEY }}" 432 | if: env.REMOTE_PRIVATEKEY != null 433 | run: | 434 | mkdir -p ~/.ssh/ 435 | install -m 600 /dev/null ~/.ssh/id_rsa 436 | echo "${{ secrets.HOSTHATCH_PRIVATEKEY }}" > ~/.ssh/id_rsa 437 | chmod 600 ~/.ssh/id_rsa 438 | ssh -q -t -i ~/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $HOST \ 439 | bash -c "'mkdir -p $WEB_ROOT_PATH/releases/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET'" 440 | rsync -chavP --delete -e 'ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no' $SOURCE_TARGETS $HOST:$DEST_TARGETS 441 | 442 | - name: Deploy Files To Backblaze 443 | env: 444 | B2_APPLICATION_KEY: "${{ secrets.B2_APPLICATION_KEY }}" 445 | B2_APPLICATION_KEY_ID: "${{ secrets.B2_APPLICATION_KEY_ID }}" 446 | SOURCE_TARGETS: "${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 447 | DEST_TARGETS: "b2://${{ secrets.B2_BUCKETNAME }}/releases/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 448 | if: env.B2_APPLICATION_KEY != null && env.B2_APPLICATION_KEY_ID != null 449 | run: | 450 | sudo wget -q -O /bin/b2 https://github.com/Backblaze/B2_Command_Line_Tool/releases/latest/download/b2-linux 451 | sudo chmod +x /bin/b2 452 | b2 authorize-account $B2_APPLICATION_KEY_ID $B2_APPLICATION_KEY 453 | b2 sync --noProgress --threads 32 --keepDays 7 --replaceNewer $SOURCE_TARGETS $DEST_TARGETS 454 | 455 | - name: Delete Old Firmware Assets 456 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 457 | uses: mknejp/delete-release-assets@v1 458 | with: 459 | token: ${{ secrets.GITHUB_TOKEN }} 460 | tag: ${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 461 | fail-if-no-assets: false 462 | fail-if-no-release: false 463 | assets: "*" 464 | 465 | - name: Deploy Files To Release 466 | uses: ncipollo/release-action@v1.8.0 467 | if: env.FIRMWARE_RELEASE_UPLOAD == 'true' 468 | with: 469 | name: openwrt-${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 470 | allowUpdates: true 471 | replacesArtifacts: true 472 | tag: ${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 473 | body: ${{ env.BUILD_DATE }} 474 | commit: ${{ env.CURRENT_BRANCH }} 475 | token: ${{ secrets.GITHUB_TOKEN }} 476 | artifacts: ${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/* 477 | -------------------------------------------------------------------------------- /.github/workflows/x86-64.yml: -------------------------------------------------------------------------------- 1 | #================================================= 2 | # https://github.com/P3TERX/Actions-OpenWrt 3 | # Description: Build OpenWrt using GitHub Actions 4 | # Lisence: MIT 5 | # Author: P3TERX 6 | # Blog: https://p3terx.com 7 | #================================================= 8 | 9 | name: Build x86/64 openwrt 10 | 11 | on: 12 | workflow_dispatch: 13 | schedule: 14 | - cron: 0 18 * * * 15 | # watch: 16 | # types: started 17 | 18 | env: 19 | CONFIG_FILE: config/x86/64.config 20 | SOURCE_URL: https://github.com/immortalwrt/immortalwrt 21 | SOURCE_BRANCH: openwrt-18.06-k5.4 22 | DIY_SH: scripts/custom.sh 23 | TOOLCHAIN_TAG: toolchain 24 | CLASH_BINARY_PLATFORM: amd64 25 | TOOLCHAIN_RELEASE_UPLOAD: true 26 | FIRMWARE_RELEASE_UPLOAD: true 27 | WEB_ROOT_PATH: /data/www/openwrt.cc 28 | TZ: Asia/Shanghai 29 | 30 | jobs: 31 | Toolchain: 32 | runs-on: ubuntu-20.04 33 | 34 | outputs: 35 | OPENWRT_ROOT_PATH: ${{ steps.clone.outputs.OPENWRT_ROOT_PATH }} 36 | CURRENT_BRANCH: ${{ steps.env.outputs.CURRENT_BRANCH }} 37 | SOURCE_OWNER: ${{ steps.env.outputs.SOURCE_OWNER }} 38 | SOURCE_REPO: ${{ steps.env.outputs.SOURCE_REPO }} 39 | DEVICE_PLATFORM: ${{ steps.env.outputs.DEVICE_PLATFORM }} 40 | DEVICE_TARGET: ${{ steps.env.outputs.DEVICE_TARGET }} 41 | DEVICE_SUBTARGET: ${{ steps.env.outputs.DEVICE_SUBTARGET }} 42 | TOOLCHAIN_IMAGE: ${{ steps.env.outputs.TOOLCHAIN_IMAGE }} 43 | 44 | steps: 45 | - name: Initialization Environment 46 | env: 47 | DEBIAN_FRONTEND: noninteractive 48 | run: | 49 | sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc 50 | sudo -E apt-get -qq update 51 | sudo -E apt-get -qq install squashfs-tools $(curl -fsSL git.io/depends-ubuntu-2004) 52 | sudo -E apt-get -qq autoremove --purge 53 | sudo -E apt-get -qq clean 54 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 55 | docker image prune -a -f 56 | mkdir -p workspace 57 | 58 | - name: Checkout 59 | uses: actions/checkout@main 60 | 61 | - name: Clone Source Code 62 | id: clone 63 | run: | 64 | df -hT $PWD 65 | git clone $SOURCE_URL -b $SOURCE_BRANCH workspace/openwrt 66 | cd workspace/openwrt 67 | echo "OPENWRT_ROOT_PATH=$PWD" >> $GITHUB_ENV 68 | echo "::set-output name=OPENWRT_ROOT_PATH::$(echo $PWD)" 69 | 70 | - name: Generate Toolchain Config 71 | run: | 72 | [ -e $CONFIG_FILE ] && mv $CONFIG_FILE $OPENWRT_ROOT_PATH/.config 73 | echo -e "\nCONFIG_ALL=y" >> $OPENWRT_ROOT_PATH/.config 74 | echo -e "\nCONFIG_ALL_NONSHARED=y" >> $OPENWRT_ROOT_PATH/.config 75 | cd $OPENWRT_ROOT_PATH 76 | make defconfig > /dev/null 2>&1 77 | 78 | - name: Generate Variables 79 | id: env 80 | run: | 81 | export CURRENT_BRANCH="$(git symbolic-ref --short HEAD)" 82 | echo "CURRENT_BRANCH=$CURRENT_BRANCH" >> $GITHUB_ENV 83 | echo "::set-output name=CURRENT_BRANCH::$(echo $CURRENT_BRANCH)" 84 | cd $OPENWRT_ROOT_PATH 85 | export SOURCE_OWNER="$(echo $SOURCE_URL | awk -F '/' '{print $(NF-1)}')" 86 | echo "SOURCE_OWNER=$SOURCE_OWNER" >> $GITHUB_ENV 87 | echo "::set-output name=SOURCE_OWNER::$(echo $SOURCE_OWNER)" 88 | export SOURCE_REPO="$(echo $SOURCE_URL | awk -F '/' '{print $(NF)}')" 89 | echo "SOURCE_REPO=$SOURCE_REPO" >> $GITHUB_ENV 90 | echo "::set-output name=SOURCE_REPO::$(echo $SOURCE_REPO)" 91 | export DEVICE_TARGET=$(cat .config | grep CONFIG_TARGET_BOARD | awk -F '"' '{print $2}') 92 | echo "DEVICE_TARGET=$DEVICE_TARGET" >> $GITHUB_ENV 93 | echo "::set-output name=DEVICE_TARGET::$(echo $DEVICE_TARGET)" 94 | export DEVICE_SUBTARGET=$(cat .config | grep CONFIG_TARGET_SUBTARGET | awk -F '"' '{print $2}') 95 | echo "DEVICE_SUBTARGET=$DEVICE_SUBTARGET" >> $GITHUB_ENV 96 | echo "::set-output name=DEVICE_SUBTARGET::$(echo $DEVICE_SUBTARGET)" 97 | export DEVICE_PLATFORM=$(cat .config | grep CONFIG_TARGET_ARCH_PACKAGES | awk -F '"' '{print $2}') 98 | echo "DEVICE_PLATFORM=$DEVICE_PLATFORM" >> $GITHUB_ENV 99 | echo "::set-output name=DEVICE_PLATFORM::$(echo $DEVICE_PLATFORM)" 100 | export TOOLCHAIN_IMAGE="toolchain-$SOURCE_OWNER-$SOURCE_REPO-$SOURCE_BRANCH-$DEVICE_TARGET-$DEVICE_SUBTARGET" 101 | echo "TOOLCHAIN_IMAGE=$TOOLCHAIN_IMAGE" >> $GITHUB_ENV 102 | echo "::set-output name=TOOLCHAIN_IMAGE::$(echo $TOOLCHAIN_IMAGE)" 103 | 104 | - name: Compare Toolchain Hash 105 | id: hash 106 | run: | 107 | cd $OPENWRT_ROOT_PATH 108 | export CURRENT_HASH=$(git log --pretty=tformat:"%H" -n1 tools toolchain) 109 | echo "CURRENT_HASH=$CURRENT_HASH" >> $GITHUB_ENV 110 | echo "::set-output name=CURRENT_HASH::$(echo $CURRENT_HASH)" 111 | echo "CURRENT_HASH is $CURRENT_HASH" 112 | export CACHE_HASH=$(curl -fSsL https://github.com/$GITHUB_REPOSITORY/releases/download/$TOOLCHAIN_TAG/$TOOLCHAIN_IMAGE.hash) 113 | echo "CACHE_HASH is $CACHE_HASH" 114 | if [ -z "$CACHE_HASH" ] || [ "$CURRENT_HASH" != "$CACHE_HASH" ]; then 115 | echo "::set-output name=REBUILD_TOOLCHAIN::true" 116 | fi 117 | 118 | - name: Install Feeds 119 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 120 | run: | 121 | cd $OPENWRT_ROOT_PATH 122 | ./scripts/feeds update -a 123 | ./scripts/feeds install -a 124 | make defconfig 125 | 126 | - name: Compile Tools 127 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 128 | run: | 129 | cd $OPENWRT_ROOT_PATH 130 | echo -e "$(nproc) thread compile" 131 | make tools/compile -j$(nproc) || make tools/compile -j1 V=s 132 | 133 | - name: Compile Toolchain 134 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 135 | run: | 136 | cd $OPENWRT_ROOT_PATH 137 | echo -e "$(nproc) thread compile" 138 | make toolchain/compile -j$(nproc) || make toolchain/compile -j1 V=s 139 | rm -rf .config* dl bin 140 | 141 | - name: Generate Toolchain Image 142 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 143 | run: | 144 | cd workspace 145 | mksquashfs openwrt $TOOLCHAIN_IMAGE -force-gid 1001 -force-uid 1001 -comp zstd 146 | mkdir -p $GITHUB_WORKSPACE/output 147 | split -d -b 1900M $TOOLCHAIN_IMAGE $GITHUB_WORKSPACE/output/$TOOLCHAIN_IMAGE.img. 148 | rm $TOOLCHAIN_IMAGE 149 | cd $OPENWRT_ROOT_PATH 150 | echo $CURRENT_HASH > $GITHUB_WORKSPACE/output/toolchain-$SOURCE_OWNER-$SOURCE_REPO-$SOURCE_BRANCH-$DEVICE_TARGET-$DEVICE_SUBTARGET.hash 151 | ls -lh $GITHUB_WORKSPACE/output 152 | 153 | - name: Upload Toolchain Image To Artifact 154 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 155 | uses: actions/upload-artifact@main 156 | with: 157 | name: ${{ env.TOOLCHAIN_IMAGE }} 158 | path: output 159 | 160 | - name: Delete Old Toolchain Assets From Release 161 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 162 | uses: mknejp/delete-release-assets@v1 163 | with: 164 | token: ${{ secrets.GITHUB_TOKEN }} 165 | tag: ${{ env.TOOLCHAIN_TAG }} 166 | assets: "toolchain-${{ env.TOOLCHAIN_IMAGE }}.*" 167 | fail-if-no-assets: false 168 | fail-if-no-release: false 169 | 170 | - name: Upload Toolchain Image To Release 171 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' && steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 172 | uses: ncipollo/release-action@v1.8.0 173 | with: 174 | name: toolchain-image 175 | allowUpdates: true 176 | replacesArtifacts: true 177 | tag: ${{ env.TOOLCHAIN_TAG }} 178 | commit: ${{ env.CURRENT_BRANCH }} 179 | token: ${{ secrets.GITHUB_TOKEN }} 180 | artifacts: output/* 181 | 182 | Build: 183 | needs: [Toolchain] 184 | runs-on: ubuntu-20.04 185 | 186 | steps: 187 | - name: Restore Variables 188 | run: | 189 | echo "CURRENT_BRANCH=$(echo '${{needs.Toolchain.outputs.CURRENT_BRANCH}}')" >> $GITHUB_ENV 190 | echo "OPENWRT_ROOT_PATH=$(echo '${{needs.Toolchain.outputs.OPENWRT_ROOT_PATH}}')" >> $GITHUB_ENV 191 | echo "SOURCE_OWNER=$(echo '${{needs.Toolchain.outputs.SOURCE_OWNER}}')" >> $GITHUB_ENV 192 | echo "SOURCE_REPO=$(echo '${{needs.Toolchain.outputs.SOURCE_REPO}}')" >> $GITHUB_ENV 193 | echo "DEVICE_PLATFORM=$(echo '${{needs.Toolchain.outputs.DEVICE_PLATFORM}}')" >> $GITHUB_ENV 194 | echo "DEVICE_TARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_TARGET}}')" >> $GITHUB_ENV 195 | echo "DEVICE_SUBTARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_SUBTARGET}}')" >> $GITHUB_ENV 196 | echo "TOOLCHAIN_IMAGE=$(echo '${{needs.Toolchain.outputs.TOOLCHAIN_IMAGE}}')" >> $GITHUB_ENV 197 | 198 | - name: Initialization Environment 199 | env: 200 | DEBIAN_FRONTEND: noninteractive 201 | run: | 202 | sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc 203 | sudo -E apt-get -qq update 204 | sudo -E apt-get -qq install rdate squashfs-tools $(curl -fsSL git.io/depends-ubuntu-2004) 205 | sudo -E apt-get -qq autoremove --purge 206 | sudo -E apt-get -qq clean 207 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 208 | docker image prune -a -f 209 | 210 | - name: Combine Disks 211 | run: | 212 | sudo swapoff -a 213 | sudo rm -f /mnt/swapfile 214 | export ROOT_FREE_KB=$(df --block-size=1024 --output=avail / | tail -1) 215 | export ROOT_LOOP_KB=$(expr $ROOT_FREE_KB - 1048576) 216 | export ROOT_LOOP_BYTES=$(expr $ROOT_LOOP_KB \* 1024) 217 | sudo fallocate -l $ROOT_LOOP_BYTES /root.img 218 | export ROOT_LOOP_DEVNAME=$(sudo losetup -Pf --show /root.img) 219 | sudo pvcreate -f $ROOT_LOOP_DEVNAME 220 | export MNT_FREE_KB=$(df --block-size=1024 --output=avail /mnt | tail -1) 221 | export MNT_LOOP_KB=$(expr $MNT_FREE_KB - 102400) 222 | export MNT_LOOP_BYTES=$(expr $MNT_LOOP_KB \* 1024) 223 | sudo fallocate -l $MNT_LOOP_BYTES /mnt/mnt.img 224 | export MNT_LOOP_DEVNAME=$(sudo losetup -Pf --show /mnt/mnt.img) 225 | sudo pvcreate -f $MNT_LOOP_DEVNAME 226 | sudo vgcreate vgstorage $ROOT_LOOP_DEVNAME $MNT_LOOP_DEVNAME 227 | sudo lvcreate -n lvstorage -l 100%FREE vgstorage 228 | export LV_DEVNAME=$(sudo lvscan | awk -F "'" '{print $2}') 229 | sudo mkfs.btrfs -L combinedisk $LV_DEVNAME 230 | sudo mount -o compress=zstd $LV_DEVNAME $GITHUB_WORKSPACE 231 | sudo chown -R runner:runner $GITHUB_WORKSPACE 232 | mkdir $GITHUB_WORKSPACE/tmp 233 | chmod 777 $GITHUB_WORKSPACE/tmp 234 | sudo cp -rp /tmp/* $GITHUB_WORKSPACE/tmp 235 | sudo mount -B $GITHUB_WORKSPACE/tmp /tmp 236 | df -hT $GITHUB_WORKSPACE 237 | sudo btrfs filesystem usage $GITHUB_WORKSPACE 238 | 239 | - name: Checkout 240 | run: | 241 | cd $GITHUB_WORKSPACE 242 | git init 243 | git remote add origin https://github.com/$GITHUB_REPOSITORY 244 | git fetch 245 | git checkout -t origin/$CURRENT_BRANCH 246 | 247 | - name: Download Toolchain Image Form Artifacts 248 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' 249 | uses: actions/download-artifact@v2 250 | with: 251 | name: ${{ env.TOOLCHAIN_IMAGE }} 252 | path: workspace 253 | 254 | - name: Prepare Toolchain Image Form Artifacts 255 | if: env.TOOLCHAIN_RELEASE_UPLOAD != 'true' 256 | run: | 257 | cd workspace 258 | for i in {1..9} 259 | do 260 | cat $TOOLCHAIN_IMAGE.img.0$i >> $TOOLCHAIN_IMAGE.img.00 && rm $TOOLCHAIN_IMAGE.img.0$i || break 261 | done 262 | mv $TOOLCHAIN_IMAGE.img.00 $TOOLCHAIN_IMAGE.img 263 | mkdir openwrt-ro openwrt workdir overlay 264 | sudo mount -o loop $TOOLCHAIN_IMAGE.img openwrt-ro 265 | sudo mount -t overlay overlay -o lowerdir=openwrt-ro,upperdir=overlay,workdir=workdir openwrt 266 | cd $OPENWRT_ROOT_PATH 267 | git pull 268 | 269 | - name: Prepare Toolchain Image Form Releases 270 | if: env.TOOLCHAIN_RELEASE_UPLOAD == 'true' 271 | run: | 272 | mkdir -p workspace 273 | cd workspace 274 | for i in {0..9} 275 | do 276 | curl -fsL https://github.com/$GITHUB_REPOSITORY/releases/download/$TOOLCHAIN_TAG/$TOOLCHAIN_IMAGE.img.0$i >> $TOOLCHAIN_IMAGE.img || break 277 | done 278 | mkdir openwrt-ro openwrt workdir overlay 279 | sudo mount -o loop $TOOLCHAIN_IMAGE.img openwrt-ro 280 | sudo mount -t overlay overlay -o lowerdir=openwrt-ro,upperdir=overlay,workdir=workdir openwrt 281 | cd $OPENWRT_ROOT_PATH 282 | git pull 283 | 284 | - name: Install Feeds 285 | run: | 286 | cd $OPENWRT_ROOT_PATH 287 | ./scripts/feeds update -a 288 | ./scripts/feeds install -a 289 | 290 | - name: Load Custom Configuration 291 | run: | 292 | [ -e files ] && mv files $OPENWRT_ROOT_PATH/files 293 | [ -e $CONFIG_FILE ] && mv $CONFIG_FILE $OPENWRT_ROOT_PATH/.config 294 | cat config/general-packages.config >> $OPENWRT_ROOT_PATH/.config 295 | cat config/extra-drivers.config >> $OPENWRT_ROOT_PATH/.config 296 | cd $OPENWRT_ROOT_PATH 297 | chmod +x $GITHUB_WORKSPACE/scripts/*.sh 298 | $GITHUB_WORKSPACE/$DIY_SH 299 | $GITHUB_WORKSPACE/scripts/preset-clash-core.sh $CLASH_BINARY_PLATFORM 300 | $GITHUB_WORKSPACE/scripts/preset-terminal-tools.sh 301 | make defconfig 302 | 303 | - name: Download DL Package 304 | id: download 305 | run: | 306 | cd $OPENWRT_ROOT_PATH 307 | make download -j64 308 | 309 | - name: Compile Packages 310 | run: | 311 | cd $OPENWRT_ROOT_PATH 312 | echo -e "$(nproc) thread compile" 313 | make buildinfo 314 | make diffconfig buildversion feedsversion 315 | make target/compile -j$(nproc) IGNORE_ERRORS="m n" BUILD_LOG=1 || \ 316 | yes n | make target/compile -j1 V=s IGNORE_ERRORS=1 317 | make package/compile -j$(nproc) IGNORE_ERRORS=1 || make package/compile -j1 V=s IGNORE_ERRORS=1 318 | make package/index 319 | 320 | - name: Generate Firmware 321 | id: generate 322 | run: | 323 | if grep -q $DEVICE_TARGET/$DEVICE_SUBTARGET $GITHUB_WORKSPACE/data/support-targets.txt; then 324 | mkdir -p $OPENWRT_ROOT_PATH/files/etc/opkg 325 | cd $OPENWRT_ROOT_PATH/files/etc/opkg 326 | cp $GITHUB_WORKSPACE/data/opkg/distfeeds.conf . 327 | sed -i "s/DEVICE_SUBTARGET/$DEVICE_SUBTARGET/g" distfeeds.conf 328 | sed -i "s/DEVICE_TARGET/$DEVICE_TARGET/g" distfeeds.conf 329 | sed -i "s/DEVICE_PLATFORM/$DEVICE_PLATFORM/g" distfeeds.conf 330 | cd $OPENWRT_ROOT_PATH 331 | git clone https://git.openwrt.org/project/usign.git 332 | cd usign 333 | cmake . 334 | make 335 | sudo mv usign /bin 336 | mkdir -p $OPENWRT_ROOT_PATH/files/etc/opkg/keys 337 | cd $OPENWRT_ROOT_PATH/files/etc/opkg/keys 338 | wget -q https://openwrt.cc/keys/key-build.pub 339 | mv key-build.pub $(usign -F -p key-build.pub) 340 | fi 341 | cd $OPENWRT_ROOT_PATH 342 | mkdir -p files/etc/uci-defaults/ 343 | cp $GITHUB_WORKSPACE/scripts/init-settings.sh files/etc/uci-defaults/99-init-settings 344 | mkdir -p files/www/snapshots 345 | cp -r bin/targets files/www/snapshots 346 | make package/install -j$(nproc) || make package/install -j1 V=s 347 | make target/install -j$(nproc) || make target/install -j1 V=s 348 | make json_overview_image_info 349 | make checksum 350 | 351 | - name: Print Sha256sums 352 | run: | 353 | cd $OPENWRT_ROOT_PATH/bin/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET 354 | cat sha256sums 355 | 356 | - name: Compress Bin Folder 357 | run: | 358 | cd $OPENWRT_ROOT_PATH 359 | zip -r $DEVICE_TARGET-$DEVICE_SUBTARGET.zip bin 360 | 361 | - name: Print Disk Usage 362 | if: always() 363 | run: | 364 | echo 'lsblk -f' 365 | lsblk -f 366 | echo '-----' 367 | echo 'df -h' 368 | df -h 369 | echo '-----' 370 | echo 'btrfs filesystem usage' 371 | sudo btrfs filesystem usage $GITHUB_WORKSPACE 372 | echo '-----' 373 | 374 | - name: Upload Bin Archive 375 | uses: actions/upload-artifact@main 376 | with: 377 | name: bin-archive 378 | path: ${{ env.OPENWRT_ROOT_PATH }}/${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }}.zip 379 | 380 | Upload: 381 | needs: [Build, Toolchain] 382 | runs-on: ubuntu-20.04 383 | 384 | steps: 385 | - name: Checkout 386 | uses: actions/checkout@main 387 | 388 | - name: Restore Variables 389 | run: | 390 | echo "CURRENT_BRANCH=$(echo '${{needs.Toolchain.outputs.CURRENT_BRANCH}}')" >> $GITHUB_ENV 391 | echo "OPENWRT_ROOT_PATH=$(echo '${{needs.Toolchain.outputs.OPENWRT_ROOT_PATH}}')" >> $GITHUB_ENV 392 | echo "SOURCE_OWNER=$(echo '${{needs.Toolchain.outputs.SOURCE_OWNER}}')" >> $GITHUB_ENV 393 | echo "SOURCE_REPO=$(echo '${{needs.Toolchain.outputs.SOURCE_REPO}}')" >> $GITHUB_ENV 394 | echo "DEVICE_PLATFORM=$(echo '${{needs.Toolchain.outputs.DEVICE_PLATFORM}}')" >> $GITHUB_ENV 395 | echo "DEVICE_TARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_TARGET}}')" >> $GITHUB_ENV 396 | echo "DEVICE_SUBTARGET=$(echo '${{needs.Toolchain.outputs.DEVICE_SUBTARGET}}')" >> $GITHUB_ENV 397 | echo "TOOLCHAIN_IMAGE=$(echo '${{needs.Toolchain.outputs.TOOLCHAIN_IMAGE}}')" >> $GITHUB_ENV 398 | 399 | - name: Initialization Environment 400 | env: 401 | DEBIAN_FRONTEND: noninteractive 402 | run: | 403 | sudo -E apt-get -qq update 404 | sudo -E apt-get -qq install zip unzip rsync 405 | sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 406 | 407 | - name: Download Bin Archive 408 | uses: actions/download-artifact@v2 409 | with: 410 | name: bin-archive 411 | path: ${{ env.OPENWRT_ROOT_PATH }} 412 | 413 | - name: Decompress Bin Archive 414 | run: | 415 | cd $OPENWRT_ROOT_PATH 416 | unzip $DEVICE_TARGET-$DEVICE_SUBTARGET.zip 417 | 418 | - name: Organize Files 419 | run: | 420 | export BUILD_DATE=$(date +"%Y-%m-%d") 421 | echo "BUILD_DATE=$BUILD_DATE" >> $GITHUB_ENV 422 | cd $OPENWRT_ROOT_PATH/bin/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET 423 | rm -rf packages 424 | df -hT $PWD 425 | 426 | - name: Deploy Files To HostHatch Node 427 | env: 428 | HOST: "${{ secrets.REMOTE_USER }}@${{ secrets.HOSTHATCH_IP }}" 429 | SOURCE_TARGETS: "${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 430 | DEST_TARGETS: "${{ env.WEB_ROOT_PATH }}/releases/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 431 | REMOTE_PRIVATEKEY: "${{ secrets.HOSTHATCH_PRIVATEKEY }}" 432 | if: env.REMOTE_PRIVATEKEY != null 433 | run: | 434 | mkdir -p ~/.ssh/ 435 | install -m 600 /dev/null ~/.ssh/id_rsa 436 | echo "${{ secrets.HOSTHATCH_PRIVATEKEY }}" > ~/.ssh/id_rsa 437 | chmod 600 ~/.ssh/id_rsa 438 | ssh -q -t -i ~/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $HOST \ 439 | bash -c "'mkdir -p $WEB_ROOT_PATH/releases/targets/$DEVICE_TARGET/$DEVICE_SUBTARGET'" 440 | rsync -chavP --delete -e 'ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no' $SOURCE_TARGETS $HOST:$DEST_TARGETS 441 | 442 | - name: Deploy Files To Backblaze 443 | env: 444 | B2_APPLICATION_KEY: "${{ secrets.B2_APPLICATION_KEY }}" 445 | B2_APPLICATION_KEY_ID: "${{ secrets.B2_APPLICATION_KEY_ID }}" 446 | SOURCE_TARGETS: "${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 447 | DEST_TARGETS: "b2://${{ secrets.B2_BUCKETNAME }}/releases/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/" 448 | if: env.B2_APPLICATION_KEY != null && env.B2_APPLICATION_KEY_ID != null 449 | run: | 450 | sudo wget -q -O /bin/b2 https://github.com/Backblaze/B2_Command_Line_Tool/releases/latest/download/b2-linux 451 | sudo chmod +x /bin/b2 452 | b2 authorize-account $B2_APPLICATION_KEY_ID $B2_APPLICATION_KEY 453 | b2 sync --noProgress --threads 32 --keepDays 7 --replaceNewer $SOURCE_TARGETS $DEST_TARGETS 454 | 455 | - name: Delete Old Firmware Assets 456 | if: steps.hash.outputs.REBUILD_TOOLCHAIN == 'true' 457 | uses: mknejp/delete-release-assets@v1 458 | with: 459 | token: ${{ secrets.GITHUB_TOKEN }} 460 | tag: ${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 461 | fail-if-no-assets: false 462 | fail-if-no-release: false 463 | assets: "*" 464 | 465 | - name: Deploy Files To Release 466 | uses: ncipollo/release-action@v1.8.0 467 | if: env.FIRMWARE_RELEASE_UPLOAD == 'true' 468 | with: 469 | name: openwrt-${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 470 | allowUpdates: true 471 | replacesArtifacts: true 472 | tag: ${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }} 473 | body: ${{ env.BUILD_DATE }} 474 | commit: ${{ env.CURRENT_BRANCH }} 475 | token: ${{ secrets.GITHUB_TOKEN }} 476 | artifacts: ${{ env.OPENWRT_ROOT_PATH }}/bin/targets/${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}/* 477 | -------------------------------------------------------------------------------- /CONTRIBUTED.md: -------------------------------------------------------------------------------- 1 | ## Based on: 2 | 3 | - P3TERX/Actions-OpenWrt 4 | 5 | https://github.com/P3TERX/Actions-OpenWrt 6 | 7 | https://p3terx.com/archives/build-openwrt-with-github-actions.html 8 | 9 | ## Source by: 10 | 11 | - Openwrt Offical Repository: 12 | 13 | https://github.com/openwrt/openwrt/tree/master 14 | 15 | - Lean's OpenWrt Repository: 16 | 17 | https://github.com/coolsnowwolf/lede/tree/master 18 | 19 | - CTCGFW's OpenWrt Repository: 20 | 21 | https://github.com/project-openwrt/openwrt/tree/openwrt-18.06-k5.4 22 | 23 | ## Community Feeds: 24 | 25 | - Lienol's OpenWrt Packages Feeds: 26 | 27 | https://github.com/xiaorouji/openwrt-package 28 | 29 | ## Community Packages (Sort by A-Z): 30 | 31 | - luci-app-adguardhome: 32 | 33 | https://github.com/Lienol/openwrt/tree/19.07/package/diy/luci-app-adguardhome 34 | 35 | https://github.com/Lienol/openwrt/tree/19.07/package/diy/adguardhome 36 | 37 | - luci-app-diskman: 38 | 39 | https://github.com/lisaac/luci-app-diskman 40 | 41 | - luci-app-dockerman: 42 | 43 | https://github.com/lisaac/luci-app-dockerman 44 | 45 | https://github.com/KFERMercer/luci-app-dockerman 46 | 47 | https://github.com/lisaac/luci-lib-docker 48 | 49 | - luci-app-gowebdav: 50 | 51 | https://github.com/project-openwrt/openwrt-gowebdav 52 | 53 | - luci-app-jd-dailybonus: 54 | 55 | https://github.com/jerrykuku/luci-app-jd-dailybonus 56 | 57 | - luci-app-mentohust: 58 | 59 | https://github.com/KyleRicardo/MentoHUST-OpenWrt-ipk 60 | 61 | - mentohust 62 | 63 | https://github.com/BoringCat/luci-app-mentohust 64 | 65 | - luci-proto-minieap: 66 | 67 | https://github.com/ysc3839/luci-proto-minieap 68 | 69 | - minieap: 70 | 71 | https://github.com/project-openwrt/openwrt/tree/openwrt-18.06/package/ntlf9t/minieap 72 | 73 | - luci-app-oaf \: 74 | 75 | https://github.com/destan19/OpenAppFilter 76 | 77 | - luci-app-onliner: 78 | 79 | https://github.com/rufengsuixing/luci-app-onliner 80 | 81 | - luci-app-openclash: 82 | 83 | https://github.com/vernesong/OpenClash 84 | 85 | - luci-app-serverchan: 86 | 87 | https://github.com/tty228/luci-app-serverchan 88 | 89 | - luci-app-smartdns: 90 | 91 | https://github.com/pymumu/smartdns/tree/master/package/openwrt 92 | 93 | https://github.com/project-openwrt/openwrt/tree/openwrt-18.06/package/ntlf9t/luci-app-smartdns 94 | 95 | - luci-app-ssr-plus 96 | 97 | https://github.com/fw876/helloworld 98 | 99 | - luci-app-vssr \: 100 | 101 | https://github.com/jerrykuku/luci-app-vssr 102 | 103 | https://github.com/jerrykuku/lua-maxminddb 104 | 105 | - luci-theme-argon: 106 | 107 | https://github.com/jerrykuku/luci-theme-argon 108 | 109 | - luci-app-argon-config: 110 | 111 | https://github.com/jerrykuku/luci-app-argon-config 112 | 113 | - luci-udptools: 114 | 115 | https://github.com/bao3/openwrt-udp2raw 116 | 117 | https://github.com/bao3/openwrt-udpspeeder 118 | 119 | https://github.com/bao3/luci-udptools 120 | 121 | - gotop: 122 | 123 | https://github.com/project-openwrt/openwrt/tree/openwrt-18.06/package/ctcgfw/gotop 124 | 125 | - https-dns-proxy: 126 | 127 | https://github.com/Lienol/openwrt-packages/tree/19.07/net/https-dns-proxy 128 | 129 | - subconverter \: 130 | 131 | https://github.com/tindy2013/openwrt-subconverter 132 | 133 | - tmate: 134 | 135 | https://github.com/project-openwrt/openwrt-tmate 136 | 137 | ## Other Useful Items: 138 | 139 | - Build-Scripts By CTCGFW: 140 | 141 | https://github.com/project-openwrt/build-scripts 142 | 143 | - Oh-my-zsh repository: 144 | 145 | https://github.com/robbyrussell/oh-my-zsh 146 | 147 | Zsh-autosuggestions: 148 | 149 | https://github.com/zsh-users/zsh-autosuggestions 150 | 151 | Zsh-syntax-highlighting: 152 | 153 | https://github.com/zsh-users/zsh-syntax-highlighting 154 | 155 | Zsh-completions: 156 | 157 | https://github.com/zsh-users/zsh-completions 158 | 159 | - OpenClash cores: 160 | 161 | https://github.com/vernesong/OpenClash/releases/tag/Clash 162 | 163 | https://github.com/vernesong/OpenClash/releases/tag/TUN-Premium 164 | 165 | https://github.com/vernesong/OpenClash/releases/tag/TUN 166 | -------------------------------------------------------------------------------- /FUNDING.md: -------------------------------------------------------------------------------- 1 | # 捐赠本项目 2 | 3 | 由于提供自建的固件下载服务需要服务器支持,目前我们已尽量选择 “比较经济” 的服务解决方案。 4 | 5 | 但若您可以为此项目出一份力,我们将衷心感谢~ 6 | 7 | 我们保证捐赠所得收入将全部用于改善下载体验以及日常维护项目之用。 8 | 9 | 本项目目前也接受 线路/带宽优秀 的服务器捐赠~ 10 | 11 | # 提示 12 | 13 | **1. 本捐赠渠道作且仅作捐赠用途之用,付费后不会得到任何形式的额外内容及保证,请知悉;** 14 | 15 | **2. 虽然本项目提供捐赠渠道,但仍非强制,即使您未捐赠,也可始终免费下载及使用 OpenWrt-Rpi 项目中的固件;** 16 | 17 | **3. 捐赠行为纯属自愿,不作为 “服务支持” 的筹码与前提。本项目提供的联系方式仅供技术交流,不作为解决问题的保证;** 18 | 19 | **4. 未满 18 岁及尚无独立经济收入来源者不建议捐赠本项目。** 20 | 21 | FUNDING.png 22 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 SuLingGG 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # [OpenWrt-Rpi](https://github.com/SuLingGG/OpenWrt-Rpi) 2 | 3 | ## 仓库存档说明 4 | 5 | 由于 18.06 版本已结束支持周期,且上游分支 [immortalwrt:openwrt-18.06-k5.4](https://github.com/immortalwrt/immortalwrt/tree/openwrt-18.06-k5.4) 已停止更新, 6 | 7 | 故本仓库转为存档 (Archive) 状态,终止所有无意义的编译任务。 8 | 9 | 现有软件源和固件不会被删除,你可以继续在 访问和下载到它们。 10 | 11 | 欢迎使用 immortalwrt 项目的官方固件: 12 | 13 | 14 | 15 | 感谢大家的支持和陪伴~ 16 | 17 | ## 项目介绍 18 | 19 | 1. 提供适配于 树莓派全系、Rockchip 平台、ipq40xx 平台以及 x86 平台设备的 OpenWrt 固件 20 | 2. 包含丰富的 OpenWrt 原版 LuCI 插件及社区 LuCI 插件 21 | 3. 固件跟随源码更新自动编译,确保获得最新体验 22 | 4. 预配置本地 kmod 软件源,远离 kmod 依赖冲突 23 | 5. 集成绝大多数有线、无线、3G / 4G 网卡驱动,无需额外安装 24 | 6. 预置最新版 Clash 核心、预置 oh-my-zsh,最大程度减少配置成本 25 | 7. 提供全格式固件 / 文件 (ext4/squashfs/ubi/initramfs/rootfs) 26 | 8. 对于高级用户,提供完整的固件/软件包构建工具 (imagebuilder / sdk / toolchain) 27 | 9. 如果你想捐助此项目,请移步 [FUNDING.md](https://github.com/SuLingGG/OpenWrt-Mini/blob/main/FUNDING.md) 28 | 29 | ## 文档 30 | 31 | 固件 下载安装 / 初始设置 / 软件包安装说明 等信息请看文档: 32 | 33 | 34 | 35 | ## 固件预览 36 | 37 | ### 主界面: 38 | 39 | ![主界面](https://ae05.alicdn.com/kf/H6814822fa93d4246837bea1edcec6d23j.png) 40 | 41 | ### 内置功能: 42 | 43 | (建议保存至本地放大查看) 44 | 45 | ![内置功能](https://ae02.alicdn.com/kf/Hf29f2d94339d4188bbdde7f3131b500af.png) 46 | 47 | ## 鸣谢 48 | 49 | 感谢以下项目 / 厂商: 50 | 51 | | Github Actions | OpenWrt 源码项目 | OpenWrt 构建项目 | Action 项目 | 云服务厂商 | 52 | | ----------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------------------------------- | 53 | | [Github Actions](https://github.com/features/actions) | [openwrt/openwrt](https://github.com/openwrt/openwrt/) | [openwrt/buildbot](https://git.openwrt.org/?p=buildbot.git;a=summary) | [ncipollo/release-action](https://github.com/ncipollo/release-action) | [Acloud](https://acloud.net/) | 54 | | | [coolsnowwolf/lede](https://github.com/coolsnowwolf/lede) | [P3TERX/Actions-OpenWrt](https://github.com/P3TERX/Actions-OpenWrt) | [mknejp/delete-release-assets](https://github.com/mknejp/delete-release-assets) | [Cloudflare](https://www.cloudflare.com) | 55 | | | [immortalwrt/immortalwrt](https://github.com/immortalwrt/immortalwrt) | [immortalwrt/opde](https://github.com/immortalwrt/opde) | [GitRML/delete-workflow-runs](https://github.com/GitRML/delete-workflow-runs) | [BackBlaze](https://www.backblaze.com/) | 56 | | | | [aparcar/openwrt](https://github.com/aparcar/openwrt) | [easingthemes/ssh-deploy](https://github.com/easingthemes/ssh-deploy) | [HostHatch](https://hosthatch.com/) | 57 | | | | [klever1988/nanopi-openwrt](https://github.com/klever1988/nanopi-openwrt) | [easimon/maximize-build-space](https://github.com/easimon/maximize-build-space) | | 58 | 59 | -------------------------------------------------------------------------------- /config/bcm27xx/bcm2708.config: -------------------------------------------------------------------------------- 1 | # Target Config 2 | CONFIG_TARGET_bcm27xx=y 3 | CONFIG_TARGET_bcm27xx_bcm2708=y 4 | CONFIG_TARGET_bcm27xx_bcm2708_DEVICE_rpi=y 5 | 6 | # Image Config 7 | CONFIG_TARGET_KERNEL_PARTSIZE=50 8 | CONFIG_TARGET_ROOTFS_PARTSIZE=900 9 | CONFIG_TARGET_ROOTFS_TARGZ=y 10 | CONFIG_TARGET_ROOTFS_EXT4FS=y 11 | CONFIG_TARGET_EXT4_JOURNAL=y 12 | CONFIG_TARGET_ROOTFS_SQUASHFS=y 13 | 14 | # Extra LuCI APP 15 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Libev_Client=y 16 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Libev_Server=y 17 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Rust_Client=n 18 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Rust_Server=n 19 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Libev_Client=y 20 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Libev_Server=y 21 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Rust_Client=n 22 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Rust_Server=n -------------------------------------------------------------------------------- /config/bcm27xx/bcm2709.config: -------------------------------------------------------------------------------- 1 | # Target Config 2 | CONFIG_TARGET_bcm27xx=y 3 | CONFIG_TARGET_bcm27xx_bcm2709=y 4 | CONFIG_TARGET_bcm27xx_bcm2709_DEVICE_rpi-2=y 5 | 6 | # Image Config 7 | CONFIG_TARGET_KERNEL_PARTSIZE=50 8 | CONFIG_TARGET_ROOTFS_PARTSIZE=900 9 | CONFIG_TARGET_ROOTFS_TARGZ=y 10 | CONFIG_TARGET_ROOTFS_EXT4FS=y 11 | CONFIG_TARGET_EXT4_JOURNAL=y 12 | CONFIG_TARGET_ROOTFS_SQUASHFS=y 13 | 14 | # Extra LuCI APP 15 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Libev_Client=y 16 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Libev_Server=y 17 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Rust_Client=n 18 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Rust_Server=n 19 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Libev_Client=y 20 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Libev_Server=y 21 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Rust_Client=n 22 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Rust_Server=n 23 | -------------------------------------------------------------------------------- /config/bcm27xx/bcm2710.config: -------------------------------------------------------------------------------- 1 | # Target Config 2 | CONFIG_TARGET_bcm27xx=y 3 | CONFIG_TARGET_bcm27xx_bcm2710=y 4 | CONFIG_TARGET_bcm27xx_bcm2710_DEVICE_rpi-3=y 5 | 6 | # Image Config 7 | CONFIG_TARGET_KERNEL_PARTSIZE=50 8 | CONFIG_TARGET_ROOTFS_PARTSIZE=900 9 | CONFIG_TARGET_ROOTFS_TARGZ=y 10 | CONFIG_TARGET_ROOTFS_EXT4FS=y 11 | CONFIG_TARGET_EXT4_JOURNAL=y 12 | CONFIG_TARGET_ROOTFS_SQUASHFS=y 13 | 14 | # Kmods 15 | CONFIG_PACKAGE_kmod-rtl8187=y 16 | CONFIG_PACKAGE_kmod-rtl8188eu=y 17 | CONFIG_PACKAGE_kmod-rtl8192c-common=y 18 | CONFIG_PACKAGE_kmod-rtl8192cu=y 19 | CONFIG_PACKAGE_kmod-rtl8192du=y 20 | CONFIG_PACKAGE_kmod-rtl8812au-ac=y 21 | CONFIG_PACKAGE_kmod-rtl8821cu=y 22 | CONFIG_PACKAGE_kmod-rtl88x2bu=y 23 | CONFIG_PACKAGE_kmod-rtlwifi=y 24 | CONFIG_PACKAGE_kmod-rtlwifi-usb=y 25 | CONFIG_PACKAGE_kmod-usb-net-rtl8150=y 26 | CONFIG_PACKAGE_kmod-usb-net-rtl8152=y 27 | 28 | # Extra LuCI APP 29 | CONFIG_PACKAGE_luci-app-adbyby-plus=n 30 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Libev_Client=y 31 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Libev_Server=y 32 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Rust_Client=n 33 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Rust_Server=n 34 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Libev_Client=y 35 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Libev_Server=y 36 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Rust_Client=n 37 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Rust_Server=n -------------------------------------------------------------------------------- /config/bcm27xx/bcm2711.config: -------------------------------------------------------------------------------- 1 | # Target Config 2 | CONFIG_TARGET_bcm27xx=y 3 | CONFIG_TARGET_bcm27xx_bcm2711=y 4 | CONFIG_TARGET_bcm27xx_bcm2711_DEVICE_rpi-4=y 5 | 6 | # Image Config 7 | CONFIG_TARGET_KERNEL_PARTSIZE=50 8 | CONFIG_TARGET_ROOTFS_PARTSIZE=900 9 | CONFIG_TARGET_ROOTFS_TARGZ=y 10 | CONFIG_TARGET_ROOTFS_EXT4FS=y 11 | CONFIG_TARGET_EXT4_JOURNAL=y 12 | CONFIG_TARGET_ROOTFS_SQUASHFS=y 13 | 14 | # Kmods 15 | CONFIG_PACKAGE_kmod-rtl8187=y 16 | CONFIG_PACKAGE_kmod-rtl8188eu=y 17 | CONFIG_PACKAGE_kmod-rtl8192c-common=y 18 | CONFIG_PACKAGE_kmod-rtl8192cu=y 19 | CONFIG_PACKAGE_kmod-rtl8192du=y 20 | CONFIG_PACKAGE_kmod-rtl8812au-ac=y 21 | CONFIG_PACKAGE_kmod-rtl8821cu=y 22 | CONFIG_PACKAGE_kmod-rtl88x2bu=y 23 | CONFIG_PACKAGE_kmod-rtlwifi=y 24 | CONFIG_PACKAGE_kmod-rtlwifi-usb=y 25 | CONFIG_PACKAGE_kmod-usb-net-rtl8150=y 26 | CONFIG_PACKAGE_kmod-usb-net-rtl8152=y 27 | 28 | # Extra LuCI APP 29 | CONFIG_PACKAGE_luci-app-adbyby-plus=n 30 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Libev_Client=y 31 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Libev_Server=y 32 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Rust_Client=n 33 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Rust_Server=n 34 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Libev_Client=y 35 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Libev_Server=y 36 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Rust_Client=n 37 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Rust_Server=n -------------------------------------------------------------------------------- /config/extra-drivers.config: -------------------------------------------------------------------------------- 1 | # Kmods 2 | 3 | ## Camera Drivers 4 | CONFIG_PACKAGE_kmod-video-core=y 5 | CONFIG_PACKAGE_kmod-video-uvc=y 6 | 7 | ## File System Drivers 8 | CONFIG_PACKAGE_kmod-fs-f2fs=y 9 | CONFIG_PACKAGE_kmod-fs-nfs=y 10 | CONFIG_PACKAGE_kmod-fs-nfs-common=y 11 | CONFIG_PACKAGE_kmod-fs-nfs-common-rpcsec=y 12 | CONFIG_PACKAGE_kmod-fs-nfs-v3=y 13 | CONFIG_PACKAGE_kmod-fs-nfs-v4=y 14 | CONFIG_PACKAGE_kmod-fs-nfsd=y 15 | CONFIG_PACKAGE_kmod-fs-squashfs=y 16 | CONFIG_PACKAGE_kmod-fs-xfs=y 17 | 18 | ## I2C Drivers 19 | CONFIG_PACKAGE_kmod-i2c-core=y 20 | 21 | ## Network Support 22 | 23 | ### Dependence for OpenClash 24 | CONFIG_PACKAGE_kmod-inet-diag=y 25 | 26 | ## USB Drivers 27 | 28 | ### USB Audio 29 | CONFIG_PACKAGE_kmod-usb-audio=y 30 | 31 | ### USB Net Drivers 32 | CONFIG_PACKAGE_kmod-usb-net=y 33 | CONFIG_PACKAGE_kmod-usb-net-asix=y 34 | CONFIG_PACKAGE_kmod-usb-net-asix-ax88179=y 35 | CONFIG_PACKAGE_kmod-usb-net-rtl8152=y 36 | CONFIG_PACKAGE_kmod-usb-net-cdc-eem=y 37 | CONFIG_PACKAGE_kmod-usb-net-cdc-ether=y 38 | CONFIG_PACKAGE_kmod-usb-net-cdc-mbim=y 39 | CONFIG_PACKAGE_kmod-usb-net-cdc-ncm=y 40 | CONFIG_PACKAGE_kmod-usb-net-cdc-subset=y 41 | CONFIG_PACKAGE_kmod-usb-net-dm9601-ether=y 42 | CONFIG_PACKAGE_kmod-usb-net-hso=y 43 | CONFIG_PACKAGE_kmod-usb-net-huawei-cdc-ncm=y 44 | CONFIG_PACKAGE_kmod-usb-net-ipheth=y 45 | CONFIG_PACKAGE_kmod-usb-net-kalmia=y 46 | CONFIG_PACKAGE_kmod-usb-net-kaweth=y 47 | CONFIG_PACKAGE_kmod-usb-net-mcs7830=y 48 | CONFIG_PACKAGE_kmod-usb-net-pegasus=y 49 | CONFIG_PACKAGE_kmod-usb-net-pl=y 50 | CONFIG_PACKAGE_kmod-usb-net-qmi-wwan=y 51 | CONFIG_PACKAGE_kmod-usb-net-rndis=y 52 | CONFIG_PACKAGE_kmod-usb-net-sierrawireless=y 53 | CONFIG_PACKAGE_kmod-usb-net-smsc95xx=y 54 | CONFIG_PACKAGE_kmod-usb-net-sr9700=y 55 | CONFIG_PACKAGE_kmod-usb-net2280=y 56 | 57 | ### USB Storage Drivers 58 | CONFIG_PACKAGE_kmod-usb-ohci=y 59 | CONFIG_PACKAGE_kmod-usb-ohci-pci=y 60 | CONFIG_PACKAGE_kmod-usb-printer=y 61 | CONFIG_PACKAGE_kmod-usb-storage=y 62 | CONFIG_PACKAGE_kmod-usb-storage-extras=y 63 | CONFIG_PACKAGE_kmod-usb-storage-uas=y 64 | CONFIG_PACKAGE_kmod-usb-uhci=y 65 | CONFIG_PACKAGE_kmod-usb2=y 66 | CONFIG_PACKAGE_kmod-usb2-pci=y 67 | CONFIG_PACKAGE_kmod-usb3=y 68 | 69 | ### USB Wireless Card Drivers 70 | CONFIG_PACKAGE_kmod-ath=y 71 | CONFIG_PACKAGE_kmod-ath6kl=y 72 | CONFIG_PACKAGE_kmod-ath6kl-usb=y 73 | CONFIG_PACKAGE_kmod-ath9k-common=y 74 | CONFIG_PACKAGE_kmod-ath9k-htc=y 75 | CONFIG_PACKAGE_kmod-ath11k=n 76 | CONFIG_PACKAGE_kmod-carl9170=y 77 | CONFIG_PACKAGE_kmod-lib80211=y 78 | CONFIG_PACKAGE_kmod-libertas-usb=y 79 | CONFIG_PACKAGE_kmod-mac80211=y 80 | CONFIG_PACKAGE_kmod-mt7601u=y 81 | CONFIG_PACKAGE_kmod-mt7603=y 82 | CONFIG_PACKAGE_kmod-mt7663u=y 83 | CONFIG_PACKAGE_kmod-mt76x0u=y 84 | CONFIG_PACKAGE_kmod-mt76x2u=y 85 | CONFIG_PACKAGE_kmod-net-prism54=y 86 | CONFIG_PACKAGE_kmod-net-rtl8192su=y 87 | CONFIG_PACKAGE_kmod-p54-common=y 88 | CONFIG_PACKAGE_kmod-p54-usb=y 89 | CONFIG_PACKAGE_kmod-rsi91x=y 90 | CONFIG_PACKAGE_kmod-rsi91x-usb=y 91 | CONFIG_PACKAGE_kmod-rt2500-usb=y 92 | CONFIG_PACKAGE_kmod-rt2800-lib=y 93 | CONFIG_PACKAGE_kmod-rt2800-usb=y 94 | CONFIG_PACKAGE_kmod-rt2x00-lib=y 95 | CONFIG_PACKAGE_kmod-rt2x00-usb=y 96 | CONFIG_PACKAGE_kmod-rt73-usb=y 97 | CONFIG_PACKAGE_kmod-zd1211rw=y 98 | 99 | ### Wireless Card Firmware 100 | CONFIG_PACKAGE_ath9k-htc-firmware=y 101 | CONFIG_PACKAGE_libertas-usb-firmware=y 102 | CONFIG_PACKAGE_mt7601u-firmware=y 103 | CONFIG_PACKAGE_p54-usb-firmware=y 104 | CONFIG_PACKAGE_prism54-firmware=y 105 | CONFIG_PACKAGE_rs9113-firmware=y 106 | CONFIG_PACKAGE_rt2800-usb-firmware=y 107 | CONFIG_PACKAGE_rt73-usb-firmware=y 108 | CONFIG_PACKAGE_rtl8188eu-firmware=y 109 | CONFIG_PACKAGE_rtl8192cu-firmware=y 110 | CONFIG_PACKAGE_rtl8192eu-firmware=y 111 | CONFIG_PACKAGE_rtl8192su-firmware=y 112 | CONFIG_PACKAGE_rtl8723au-firmware=y 113 | CONFIG_PACKAGE_rtl8723bu-firmware=y 114 | 115 | # 3G/4G Drivers & Utilities 116 | CONFIG_PACKAGE_comgt-ncm=y 117 | CONFIG_PACKAGE_comgt=y 118 | CONFIG_PACKAGE_kmod-mii=y 119 | CONFIG_PACKAGE_kmod-usb-acm=y 120 | CONFIG_PACKAGE_kmod-usb-serial=y 121 | CONFIG_PACKAGE_kmod-usb-serial-option=y 122 | CONFIG_PACKAGE_kmod-usb-serial-wwan=y 123 | CONFIG_PACKAGE_luci-proto-3g=y 124 | CONFIG_PACKAGE_luci-proto-ncm=y 125 | CONFIG_PACKAGE_luci-proto-qmi=y 126 | CONFIG_PACKAGE_qmi-utils=y 127 | CONFIG_PACKAGE_umbim=y 128 | CONFIG_PACKAGE_uqmi=y 129 | CONFIG_PACKAGE_usb-modeswitch=y 130 | 131 | # Mobile Network Sharing 132 | CONFIG_PACKAGE_libimobiledevice-utils=y 133 | CONFIG_PACKAGE_libplist-utils=y 134 | CONFIG_PACKAGE_libudev-fbsd=y 135 | CONFIG_PACKAGE_libusbmuxd-utils=y 136 | CONFIG_PACKAGE_usbmuxd=y 137 | -------------------------------------------------------------------------------- /config/general-packages.config: -------------------------------------------------------------------------------- 1 | # Packages Options 2 | CONFIG_ALL_NONSHARED=y 3 | 4 | # Developer Options 5 | CONFIG_IB=y 6 | CONFIG_IB_STANDALONE=y 7 | CONFIG_IMAGEOPT=y 8 | CONFIG_MAKE_TOOLCHAIN=y 9 | CONFIG_SDK=y 10 | CONFIG_SIGNATURE_CHECK=n 11 | 12 | # Extra Packages 13 | CONFIG_PACKAGE_htop=y 14 | CONFIG_PACKAGE_autocore-arm=y 15 | CONFIG_PACKAGE_autocore-x86=y 16 | CONFIG_PACKAGE_automount=y 17 | 18 | # LuCI APP 19 | CONFIG_PACKAGE_luci-app-adguardhome=y 20 | CONFIG_PACKAGE_luci-app-adguardhome_INCLUDE_binary=n 21 | CONFIG_PACKAGE_luci-app-argon-config=y 22 | CONFIG_PACKAGE_luci-app-aria2=y 23 | CONFIG_PACKAGE_luci-app-arpbind=y 24 | CONFIG_PACKAGE_luci-app-cifs-mount=y 25 | CONFIG_PACKAGE_luci-app-commands=y 26 | CONFIG_PACKAGE_luci-app-cpulimit=y 27 | CONFIG_PACKAGE_luci-app-ddns=y 28 | CONFIG_PACKAGE_luci-app-diskman=y 29 | CONFIG_PACKAGE_luci-app-diskman_INCLUDE_btrfs_progs=y 30 | CONFIG_PACKAGE_luci-app-diskman_INCLUDE_lsblk=y 31 | CONFIG_PACKAGE_luci-app-diskman_INCLUDE_mdadm=y 32 | CONFIG_PACKAGE_luci-app-diskman_INCLUDE_kmod_md_raid456=y 33 | CONFIG_PACKAGE_luci-app-diskman_INCLUDE_kmod_md_linear=y 34 | CONFIG_PACKAGE_luci-app-eqos=y 35 | CONFIG_PACKAGE_luci-app-filetransfer=y 36 | CONFIG_PACKAGE_luci-app-fileassistant=y 37 | CONFIG_PACKAGE_luci-app-frpc=y 38 | CONFIG_PACKAGE_luci-app-gowebdav=y 39 | CONFIG_PACKAGE_luci-app-guest-wifi=y 40 | CONFIG_PACKAGE_luci-app-hd-idle=y 41 | CONFIG_PACKAGE_luci-app-ipsec-server=y 42 | CONFIG_PACKAGE_luci-app-ipsec-vpnd=n 43 | CONFIG_PACKAGE_luci-app-n2n_v2=y 44 | CONFIG_PACKAGE_luci-app-netdata=y 45 | CONFIG_PACKAGE_luci-app-nfs=y 46 | CONFIG_PACKAGE_luci-app-nlbwmon=n 47 | CONFIG_PACKAGE_luci-app-nps=y 48 | CONFIG_PACKAGE_luci-app-openclash=y 49 | CONFIG_PACKAGE_luci-app-openvpn-server=y 50 | CONFIG_PACKAGE_luci-app-passwall=y 51 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Brook=y 52 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_ChinaDNS_NG=y 53 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Haproxy=y 54 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Hysteria=y 55 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Kcptun=y 56 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_NaiveProxy=n 57 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_PDNSD=y 58 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Simple_Obfs=y 59 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Trojan_GO=y 60 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Trojan_Plus=y 61 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_V2ray=y 62 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_V2ray_Plugin=y 63 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Xray=y 64 | CONFIG_PACKAGE_luci-app-pptp-server=y 65 | CONFIG_PACKAGE_luci-app-pushbot=y 66 | CONFIG_PACKAGE_luci-app-samba=y 67 | CONFIG_PACKAGE_luci-app-serverchan=y 68 | CONFIG_PACKAGE_luci-app-smartdns=y 69 | CONFIG_PACKAGE_luci-app-softethervpn=y 70 | CONFIG_PACKAGE_luci-app-sqm=y 71 | CONFIG_PACKAGE_luci-app-ssr-plus=y 72 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Kcptun=y 73 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_NaiveProxy=n 74 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Redsocks2=y 75 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Simple_Obfs=y 76 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Trojan=y 77 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_V2ray_Plugin=y 78 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Xray=y 79 | CONFIG_PACKAGE_luci-app-transmission=y 80 | CONFIG_PACKAGE_luci-app-turboacc=y 81 | CONFIG_PACKAGE_TURBOACC_INCLUDE_BBR_CCA=y 82 | CONFIG_PACKAGE_TURBOACC_INCLUDE_DNSFORWARDER=y 83 | CONFIG_PACKAGE_TURBOACC_INCLUDE_DNSPROXY=y 84 | CONFIG_PACKAGE_TURBOACC_INCLUDE_OFFLOADING=y 85 | CONFIG_PACKAGE_TURBOACC_INCLUDE_SHORTCUT_FE=n 86 | CONFIG_PACKAGE_luci-app-ttyd=y 87 | CONFIG_PACKAGE_luci-app-usb-printer=y 88 | CONFIG_PACKAGE_luci-app-watchcat=y 89 | CONFIG_PACKAGE_luci-app-webadmin=y 90 | CONFIG_PACKAGE_luci-app-wifischedule=y 91 | CONFIG_PACKAGE_luci-app-wireguard=y 92 | CONFIG_PACKAGE_luci-app-wrtbwmon=y 93 | CONFIG_PACKAGE_luci-app-zerotier=y 94 | CONFIG_PACKAGE_luci-proto-modemmanager=y 95 | CONFIG_PACKAGE_luci-proto-bonding=y 96 | CONFIG_PACKAGE_luci-proto-openconnect=y 97 | CONFIG_PACKAGE_luci-proto-relay=y 98 | CONFIG_PACKAGE_luci-theme-argonv3=y 99 | CONFIG_PACKAGE_luci-theme-material=y 100 | 101 | # LuCI Language Packages 102 | CONFIG_LUCI_LANG_ca=y 103 | CONFIG_LUCI_LANG_cs=y 104 | CONFIG_LUCI_LANG_de=y 105 | CONFIG_LUCI_LANG_el=y 106 | CONFIG_LUCI_LANG_es=y 107 | CONFIG_LUCI_LANG_fr=y 108 | CONFIG_LUCI_LANG_he=y 109 | CONFIG_LUCI_LANG_hu=y 110 | CONFIG_LUCI_LANG_it=y 111 | CONFIG_LUCI_LANG_ja=y 112 | CONFIG_LUCI_LANG_ko=y 113 | CONFIG_LUCI_LANG_ms=y 114 | CONFIG_LUCI_LANG_no=y 115 | CONFIG_LUCI_LANG_pl=y 116 | CONFIG_LUCI_LANG_pt=y 117 | CONFIG_LUCI_LANG_pt-br=y 118 | CONFIG_LUCI_LANG_ro=y 119 | CONFIG_LUCI_LANG_ru=y 120 | CONFIG_LUCI_LANG_sk=y 121 | CONFIG_LUCI_LANG_sv=y 122 | CONFIG_LUCI_LANG_tr=y 123 | CONFIG_LUCI_LANG_uk=y 124 | CONFIG_LUCI_LANG_vi=y 125 | CONFIG_LUCI_LANG_zh-tw=y 126 | 127 | # Network Tools 128 | CONFIG_PACKAGE_ariang=y 129 | CONFIG_PACKAGE_bind-dig=y 130 | CONFIG_PACKAGE_bind-host=y 131 | CONFIG_PACKAGE_bind-client=y 132 | CONFIG_PACKAGE_coremark=y 133 | CONFIG_PACKAGE_ddns-scripts=y 134 | CONFIG_PACKAGE_ddns-scripts_aliyun=y 135 | CONFIG_PACKAGE_ddns-scripts_cloudflare.com-v4=y 136 | CONFIG_PACKAGE_ddns-scripts_cnkuai_cn=y 137 | CONFIG_PACKAGE_ddns-scripts_digitalocean.com-v2=y 138 | CONFIG_PACKAGE_ddns-scripts_dnspod=y 139 | CONFIG_PACKAGE_ddns-scripts_freedns_42_pl=y 140 | CONFIG_PACKAGE_ddns-scripts_godaddy.com-v1=y 141 | CONFIG_PACKAGE_ddns-scripts_no-ip_com=y 142 | CONFIG_PACKAGE_ddns-scripts_nsupdate=y 143 | CONFIG_PACKAGE_ddns-scripts_route53-v1=y 144 | CONFIG_PACKAGE_iperf=y 145 | CONFIG_PACKAGE_openssh-sftp-client=y 146 | CONFIG_PACKAGE_openssh-sftp-server=y 147 | CONFIG_PACKAGE_ppp-mod-pptp=y 148 | CONFIG_PACKAGE_rsync=y 149 | CONFIG_PACKAGE_rsyncd=y 150 | CONFIG_PACKAGE_xl2tpd=y 151 | 152 | # System Utilities 153 | CONFIG_DOCKER_CGROUP_OPTIONS=y 154 | CONFIG_DOCKER_NET_ENCRYPT=y 155 | CONFIG_DOCKER_NET_MACVLAN=y 156 | CONFIG_DOCKER_NET_OVERLAY=y 157 | CONFIG_DOCKER_NET_TFTP=y 158 | CONFIG_DOCKER_OPTIONAL_FEATURES=y 159 | CONFIG_DOCKER_STO_BTRFS=y 160 | CONFIG_DOCKER_STO_EXT4=y 161 | CONFIG_LXC_BUSYBOX_OPTIONS=y 162 | CONFIG_LXC_KERNEL_OPTIONS=y 163 | CONFIG_LXC_NETWORKING=y 164 | CONFIG_LXC_SECCOMP=y 165 | CONFIG_PACKAGE_alpine-keys=y 166 | CONFIG_PACKAGE_alpine-repositories=y 167 | CONFIG_PACKAGE_apk=y 168 | CONFIG_PACKAGE_cgroupfs-mount=y 169 | CONFIG_PACKAGE_docker=m 170 | CONFIG_PACKAGE_dockerd=m 171 | CONFIG_PACKAGE_e2fsprogs=y 172 | CONFIG_PACKAGE_f2fsck=y 173 | CONFIG_PACKAGE_f2fs-tools=y 174 | CONFIG_PACKAGE_fdisk=y 175 | CONFIG_PACKAGE_fstrim=y 176 | CONFIG_PACKAGE_gpioctl-sysfs=y 177 | CONFIG_PACKAGE_gpiod-tools=y 178 | CONFIG_PACKAGE_gzip=y 179 | CONFIG_PACKAGE_i2c-tools=y 180 | CONFIG_PACKAGE_irqbalance=y 181 | CONFIG_PACKAGE_libcap=y 182 | CONFIG_PACKAGE_libcap-bin=y 183 | CONFIG_PACKAGE_lsblk=y 184 | CONFIG_PACKAGE_lscpu=y 185 | CONFIG_PACKAGE_lxc=m 186 | CONFIG_PACKAGE_nano=y 187 | CONFIG_PACKAGE_resize2fs=y 188 | CONFIG_PACKAGE_screen=y 189 | CONFIG_PACKAGE_sfdisk=y 190 | CONFIG_PACKAGE_snmpd=y 191 | CONFIG_PACKAGE_tmate=y 192 | CONFIG_PACKAGE_tmux=y 193 | CONFIG_PACKAGE_tree=y 194 | CONFIG_PACKAGE_unzip=y 195 | CONFIG_PACKAGE_usbutils=y 196 | CONFIG_PACKAGE_vim-full=y 197 | CONFIG_PACKAGE_whereis=y 198 | CONFIG_PACKAGE_zsh=y 199 | -------------------------------------------------------------------------------- /config/ipq40xx/generic.config: -------------------------------------------------------------------------------- 1 | CONFIG_TARGET_ipq40xx=y 2 | CONFIG_TARGET_ipq40xx_generic=y 3 | CONFIG_TARGET_MULTI_PROFILE=y 4 | CONFIG_TARGET_DEVICE_ipq40xx_generic_DEVICE_asus_rt-ac58u=y 5 | CONFIG_TARGET_DEVICE_ipq40xx_generic_DEVICE_asus_rt-acrh17=y 6 | CONFIG_TARGET_DEVICE_ipq40xx_generic_DEVICE_netgear_ex6100v2=y 7 | CONFIG_TARGET_DEVICE_ipq40xx_generic_DEVICE_netgear_ex6150v2=y 8 | CONFIG_TARGET_DEVICE_ipq40xx_generic_DEVICE_netgear_ex6200v2=y 9 | CONFIG_TARGET_DEVICE_ipq40xx_generic_DEVICE_p2w_r619ac=y 10 | CONFIG_TARGET_PER_DEVICE_ROOTFS=y 11 | CONFIG_TARGET_ROOTFS_TARGZ=y 12 | CONFIG_PACKAGE_kmod-multimedia-input=n 13 | CONFIG_PACKAGE_kmod-qlcnic=n 14 | CONFIG_PACKAGE_kmod-r8125=n 15 | CONFIG_PACKAGE_kmod-r8168=n -------------------------------------------------------------------------------- /config/rockchip/armv8.config: -------------------------------------------------------------------------------- 1 | # Target Config 2 | CONFIG_TARGET_rockchip=y 3 | CONFIG_TARGET_rockchip_armv8=y 4 | CONFIG_TARGET_MULTI_PROFILE=y 5 | CONFIG_TARGET_DEVICE_rockchip_armv8_DEVICE_friendlyarm_nanopi-r2s=y 6 | CONFIG_TARGET_DEVICE_rockchip_armv8_DEVICE_friendlyarm_nanopi-r4s=y 7 | CONFIG_TARGET_DEVICE_rockchip_armv8_DEVICE_pine64_rockpro64=y 8 | CONFIG_TARGET_DEVICE_rockchip_armv8_DEVICE_radxa_rock-pi-4=y 9 | CONFIG_TARGET_DEVICE_rockchip_armv8_DEVICE_xunlong_orangepi-r1-plus=y 10 | CONFIG_TARGET_ALL_PROFILES=y 11 | 12 | # Image Config 13 | CONFIG_TARGET_PER_DEVICE_ROOTFS=y 14 | CONFIG_TARGET_KERNEL_PARTSIZE=50 15 | CONFIG_TARGET_ROOTFS_PARTSIZE=900 16 | CONFIG_TARGET_ROOTFS_TARGZ=y 17 | CONFIG_TARGET_ROOTFS_EXT4FS=y 18 | CONFIG_TARGET_EXT4_JOURNAL=y 19 | CONFIG_TARGET_ROOTFS_SQUASHFS=y 20 | 21 | # Kmod 22 | CONFIG_PACKAGE_kmod-drm-rockchip=y 23 | CONFIG_PACKAGE_kmod-gpu-lima=y 24 | CONFIG_PACKAGE_kmod-rtl8187=y 25 | CONFIG_PACKAGE_kmod-rtl8188eu=y 26 | CONFIG_PACKAGE_kmod-rtl8192c-common=y 27 | CONFIG_PACKAGE_kmod-rtl8192cu=y 28 | CONFIG_PACKAGE_kmod-rtl8192du=y 29 | CONFIG_PACKAGE_kmod-rtl8812au-ac=y 30 | CONFIG_PACKAGE_kmod-rtl8821cu=y 31 | CONFIG_PACKAGE_kmod-rtl88x2bu=y 32 | CONFIG_PACKAGE_kmod-rtlwifi=y 33 | CONFIG_PACKAGE_kmod-rtlwifi-usb=y 34 | CONFIG_PACKAGE_kmod-usb-net-rtl8150=y 35 | CONFIG_PACKAGE_kmod-usb-net-rtl8152=y 36 | CONFIG_PACKAGE_kmod-r8168=n 37 | CONFIG_PACKAGE_kmod-r8125=n 38 | 39 | # Extra LuCI APP 40 | CONFIG_PACKAGE_luci-app-adbyby-plus=n 41 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Libev_Client=n 42 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Libev_Server=n 43 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Rust_Client=y 44 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Rust_Server=y 45 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Libev_Client=n 46 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Libev_Server=n 47 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Rust_Client=y 48 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Rust_Server=y 49 | 50 | # Wireless Support 51 | CONFIG_PACKAGE_iw=y 52 | CONFIG_PACKAGE_iwinfo=y 53 | CONFIG_PACKAGE_wpad-wolfssl=y 54 | CONFIG_DRIVER_11AC_SUPPORT=y 55 | CONFIG_DRIVER_11N_SUPPORT=y 56 | CONFIG_DRIVER_11W_SUPPORT=y -------------------------------------------------------------------------------- /config/x86/64.config: -------------------------------------------------------------------------------- 1 | # Target Config 2 | CONFIG_TARGET_x86=y 3 | CONFIG_TARGET_x86_64=y 4 | CONFIG_TARGET_x86_64_DEVICE_generic=y 5 | CONFIG_TARGET_ROOTFS_TARGZ=y 6 | CONFIG_TARGET_ROOTFS_SQUASHFS=y 7 | CONFIG_TARGET_ROOTFS_EXT4FS=y 8 | CONFIG_TARGET_EXT4_JOURNAL=y 9 | CONFIG_TARGET_KERNEL_PARTSIZE=50 10 | CONFIG_TARGET_ROOTFS_PARTSIZE=900 11 | CONFIG_TARGET_IMAGES_GZIP=y 12 | CONFIG_GRUB_IMAGES=y 13 | CONFIG_GRUB_EFI_IMAGES=y 14 | CONFIG_VDI_IMAGES=y 15 | CONFIG_VMDK_IMAGES=y 16 | CONFIG_GRUB_TIMEOUT="0" 17 | CONFIG_LINUX_5_10=y 18 | CONFIG_TESTING_KERNEL=y 19 | 20 | # Extra Packages 21 | CONFIG_PACKAGE_autocore-x86=y 22 | 23 | # Kmods 24 | 25 | # Display & Extra Drivers 26 | CONFIG_PACKAGE_kmod-backlight=y 27 | CONFIG_PACKAGE_kmod-backlight-pwm=y 28 | CONFIG_PACKAGE_kmod-drm=y 29 | CONFIG_PACKAGE_kmod-drm-amdgpu=y 30 | CONFIG_PACKAGE_kmod-drm-kms-helper=y 31 | CONFIG_PACKAGE_kmod-drm-radeon=y 32 | CONFIG_PACKAGE_kmod-drm-ttm=y 33 | CONFIG_PACKAGE_kmod-fb=y 34 | CONFIG_PACKAGE_kmod-fb-cfb-copyarea=y 35 | CONFIG_PACKAGE_kmod-fb-cfb-fillrect=y 36 | CONFIG_PACKAGE_kmod-fb-cfb-imgblt=y 37 | CONFIG_PACKAGE_kmod-fb-sys-fops=y 38 | CONFIG_PACKAGE_kmod-fb-sys-ram=y 39 | CONFIG_PACKAGE_kmod-video-pwc=y 40 | CONFIG_PACKAGE_kmod-video-uvc=y 41 | CONFIG_PACKAGE_kmod-video-videobuf2=y 42 | 43 | ### USB Suppport 44 | CONFIG_PACKAGE_kmod-usb-acm=y 45 | CONFIG_PACKAGE_kmod-usb-ehci=y 46 | CONFIG_PACKAGE_kmod-usb-wdm=y 47 | 48 | ### SD Card Support 49 | CONFIG_PACKAGE_kmod-sdhci=y 50 | 51 | ### USB Net 52 | CONFIG_PACKAGE_kmod-usb-net-rtl8150=y 53 | CONFIG_PACKAGE_kmod-usb-net-rtl8152=y 54 | 55 | ### Virtualization 56 | CONFIG_PACKAGE_kmod-kvm-amd=y 57 | CONFIG_PACKAGE_kmod-kvm-intel=y 58 | CONFIG_PACKAGE_kmod-kvm-x86=y 59 | 60 | ### Ethernet Support 61 | CONFIG_PACKAGE_kmod-igc=y 62 | 63 | ### Wireless Card Firmware 64 | CONFIG_PACKAGE_kmod-ath=y 65 | CONFIG_ATH_USER_REGD=y 66 | CONFIG_PACKAGE_ATH_DFS=y 67 | CONFIG_PACKAGE_kmod-ath10k=y 68 | CONFIG_ATH10K_LEDS=y 69 | CONFIG_ATH10K_THERMAL=y 70 | CONFIG_PACKAGE_kmod-ath6kl=y 71 | CONFIG_PACKAGE_kmod-ath6kl-usb=y 72 | CONFIG_PACKAGE_kmod-ath9k=y 73 | CONFIG_ATH9K_SUPPORT_PCOEM=y 74 | CONFIG_PACKAGE_kmod-ath9k-common=y 75 | CONFIG_PACKAGE_kmod-ath9k-htc=y 76 | CONFIG_PACKAGE_kmod-b43=y 77 | CONFIG_PACKAGE_B43_USE_SSB=y 78 | CONFIG_PACKAGE_B43_USE_BCMA=y 79 | CONFIG_B43_FW_5_100_138=y 80 | CONFIG_B43_FW_SQUASH=y 81 | CONFIG_B43_FW_SQUASH_COREREVS="5,6,7,8,9,10,11,13,15,16,28,29,30" 82 | CONFIG_B43_FW_SQUASH_PHYTYPES="G,N,LP,HT" 83 | CONFIG_PACKAGE_B43_BUSES_BCMA_AND_SSB=y 84 | CONFIG_PACKAGE_B43_PHY_G=y 85 | CONFIG_PACKAGE_B43_PHY_N=y 86 | CONFIG_PACKAGE_B43_PHY_LP=y 87 | CONFIG_PACKAGE_B43_PHY_HT=y 88 | CONFIG_PACKAGE_kmod-b43legacy=y 89 | CONFIG_PACKAGE_kmod-brcmfmac=y 90 | CONFIG_BRCMFMAC_USB=y 91 | CONFIG_BRCMFMAC_PCIE=y 92 | CONFIG_PACKAGE_kmod-brcmutil=y 93 | CONFIG_PACKAGE_kmod-cfg80211=y 94 | CONFIG_PACKAGE_kmod-iwl-legacy=y 95 | CONFIG_PACKAGE_kmod-iwl3945=y 96 | CONFIG_PACKAGE_kmod-iwl4965=y 97 | CONFIG_PACKAGE_kmod-iwlwifi=y 98 | CONFIG_PACKAGE_kmod-lib80211=y 99 | CONFIG_PACKAGE_kmod-libertas-usb=y 100 | CONFIG_PACKAGE_kmod-libipw=y 101 | CONFIG_PACKAGE_kmod-mac80211=y 102 | CONFIG_PACKAGE_MAC80211_DEBUGFS=y 103 | CONFIG_PACKAGE_MAC80211_MESH=y 104 | CONFIG_PACKAGE_kmod-mt76-connac=y 105 | CONFIG_PACKAGE_kmod-mt76-core=y 106 | CONFIG_PACKAGE_kmod-mt76-usb=y 107 | CONFIG_PACKAGE_kmod-mt7601u-ap=y 108 | CONFIG_PACKAGE_kmod-mt7615-common=y 109 | CONFIG_PACKAGE_kmod-mt7615-firmware=y 110 | CONFIG_PACKAGE_kmod-mt7615e=y 111 | CONFIG_PACKAGE_kmod-mt7663-usb-sdio=y 112 | CONFIG_PACKAGE_kmod-mt7663u=y 113 | CONFIG_PACKAGE_kmod-mt76x0-common=y 114 | CONFIG_PACKAGE_kmod-mt76x02-common=y 115 | CONFIG_PACKAGE_kmod-mt76x02-usb=y 116 | CONFIG_PACKAGE_kmod-mt76x0e=y 117 | CONFIG_PACKAGE_kmod-mt76x0u=y 118 | CONFIG_PACKAGE_kmod-mt76x2=y 119 | CONFIG_PACKAGE_kmod-mt76x2-common=y 120 | CONFIG_PACKAGE_kmod-mt76x2u=y 121 | CONFIG_PACKAGE_kmod-mt7915e=y 122 | CONFIG_PACKAGE_kmod-mt7921e=y 123 | CONFIG_PACKAGE_kmod-mt7921-common=y 124 | CONFIG_PACKAGE_kmod-mwifiex-pcie=y 125 | CONFIG_PACKAGE_kmod-mwl8k=y 126 | CONFIG_PACKAGE_kmod-net-rtl8192su=y 127 | CONFIG_PACKAGE_kmod-p54-common=y 128 | CONFIG_PACKAGE_kmod-p54-pci=y 129 | CONFIG_PACKAGE_kmod-p54-usb=y 130 | CONFIG_PACKAGE_kmod-rsi91x=y 131 | CONFIG_PACKAGE_kmod-rsi91x-usb=y 132 | CONFIG_PACKAGE_kmod-rt2400-pci=y 133 | CONFIG_PACKAGE_kmod-rt2500-pci=y 134 | CONFIG_PACKAGE_kmod-rt2500-usb=y 135 | CONFIG_PACKAGE_kmod-rt2800-lib=y 136 | CONFIG_PACKAGE_kmod-rt2800-mmio=y 137 | CONFIG_PACKAGE_kmod-rt2800-pci=y 138 | CONFIG_PACKAGE_kmod-rt2800-usb=y 139 | CONFIG_PACKAGE_kmod-rt2x00-lib=y 140 | CONFIG_PACKAGE_kmod-rt2x00-mmio=y 141 | CONFIG_PACKAGE_kmod-rt2x00-pci=y 142 | CONFIG_PACKAGE_kmod-rt2x00-usb=y 143 | CONFIG_PACKAGE_kmod-rt61-pci=y 144 | CONFIG_PACKAGE_kmod-rt73-usb=y 145 | CONFIG_PACKAGE_kmod-rtl8180=y 146 | CONFIG_PACKAGE_kmod-rtl8187=y 147 | CONFIG_PACKAGE_kmod-rtl8188eu=y 148 | CONFIG_PACKAGE_kmod-rtl8192c-common=y 149 | CONFIG_PACKAGE_kmod-rtl8192ce=y 150 | CONFIG_PACKAGE_kmod-rtl8192cu=y 151 | CONFIG_PACKAGE_kmod-rtl8192de=y 152 | CONFIG_PACKAGE_kmod-rtl8192eu=y 153 | CONFIG_PACKAGE_kmod-rtl8192se=y 154 | CONFIG_PACKAGE_kmod-rtl8812au-ac=y 155 | CONFIG_PACKAGE_kmod-rtl8821ae=y 156 | CONFIG_PACKAGE_kmod-rtl8821cu=y 157 | CONFIG_PACKAGE_kmod-rtl88x2bu=y 158 | CONFIG_PACKAGE_kmod-rtlwifi=y 159 | CONFIG_PACKAGE_kmod-rtlwifi-btcoexist=y 160 | CONFIG_PACKAGE_kmod-rtlwifi-pci=y 161 | CONFIG_PACKAGE_kmod-rtlwifi-usb=y 162 | CONFIG_PACKAGE_kmod-rtw88=y 163 | CONFIG_PACKAGE_kmod-wil6210=y 164 | 165 | # Luci 166 | CONFIG_PACKAGE_luci-app-adbyby-plus=y 167 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Libev_Client=y 168 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Libev_Server=y 169 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Rust_Client=n 170 | CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Rust_Server=n 171 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Libev_Client=y 172 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Libev_Server=y 173 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Rust_Client=n 174 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Rust_Server=n 175 | 176 | # QEMU 177 | CONFIG_PACKAGE_qemu-arm-softmmu=y 178 | CONFIG_PACKAGE_qemu-bridge-helper=y 179 | CONFIG_PACKAGE_qemu-firmware-efi=y 180 | CONFIG_PACKAGE_qemu-firmware-pxe=y 181 | CONFIG_PACKAGE_qemu-firmware-seabios=y 182 | CONFIG_PACKAGE_qemu-firmware-seavgabios=y 183 | CONFIG_PACKAGE_qemu-ga=y 184 | CONFIG_PACKAGE_qemu-img=y 185 | CONFIG_PACKAGE_qemu-keymaps=y 186 | CONFIG_PACKAGE_qemu-nbd=y 187 | CONFIG_PACKAGE_qemu-x86_64-softmmu=y 188 | CONFIG_PACKAGE_virtio-console-helper=y 189 | CONFIG_QEMU_DEV_USB=y 190 | CONFIG_QEMU_UI_SPICE=y 191 | CONFIG_QEMU_UI_VNC=y 192 | CONFIG_QEMU_UI_VNC_JPEG=y 193 | 194 | # System Utilities 195 | CONFIG_PACKAGE_acl=y 196 | CONFIG_PACKAGE_btrfs-progs=y 197 | CONFIG_PACKAGE_e2fsprogs=y 198 | CONFIG_PACKAGE_htop=y 199 | CONFIG_PACKAGE_mkf2fs=y 200 | CONFIG_PACKAGE_nfs-utils-libs=y 201 | CONFIG_PACKAGE_pciutils=y 202 | CONFIG_PACKAGE_squashfs-tools-mksquashfs=y 203 | CONFIG_PACKAGE_squashfs-tools-unsquashfs=y 204 | CONFIG_PACKAGE_swap-utils=y 205 | CONFIG_PACKAGE_sysfsutils=y 206 | CONFIG_SQUASHFS_TOOLS_LZ4_SUPPORT=y 207 | CONFIG_SQUASHFS_TOOLS_LZO_SUPPORT=y 208 | CONFIG_SQUASHFS_TOOLS_XZ_SUPPORT=y -------------------------------------------------------------------------------- /data/opkg/distfeeds.conf: -------------------------------------------------------------------------------- 1 | src/gz openwrt_core file:///www/snapshots/targets/DEVICE_TARGET/DEVICE_SUBTARGET/packages 2 | src/gz openwrt_base https://openwrt.cc/snapshots/packages/DEVICE_PLATFORM/base 3 | src/gz openwrt_luci https://openwrt.cc/snapshots/packages/DEVICE_PLATFORM/luci 4 | src/gz openwrt_packages https://openwrt.cc/snapshots/packages/DEVICE_PLATFORM/packages 5 | src/gz openwrt_routing https://openwrt.cc/snapshots/packages/DEVICE_PLATFORM/routing 6 | src/gz openwrt_telephony https://openwrt.cc/snapshots/packages/DEVICE_PLATFORM/telephony 7 | -------------------------------------------------------------------------------- /data/support-targets.txt: -------------------------------------------------------------------------------- 1 | # This file include supported targets at https://openwrt.cc 2 | bcm27xx/bcm2708 3 | bcm27xx/bcm2709 4 | bcm27xx/bcm2710 5 | bcm27xx/bcm2711 6 | ipq40xx/generic 7 | rockchip/armv8 8 | x86/64 9 | -------------------------------------------------------------------------------- /data/zsh/.zshrc: -------------------------------------------------------------------------------- 1 | # If you come from bash you might have to change your $PATH. 2 | # export PATH=$HOME/bin:/usr/local/bin:$PATH 3 | 4 | # Path to your oh-my-zsh installation. 5 | export ZSH=$HOME/.oh-my-zsh 6 | 7 | # Set name of the theme to load --- if set to "random", it will 8 | # load a random theme each time oh-my-zsh is loaded, in which case, 9 | # to know which specific one was loaded, run: echo $RANDOM_THEME 10 | # See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes 11 | ZSH_THEME="ys" 12 | 13 | # Set list of themes to pick from when loading at random 14 | # Setting this variable when ZSH_THEME=random will cause zsh to load 15 | # a theme from this variable instead of looking in $ZSH/themes/ 16 | # If set to an empty array, this variable will have no effect. 17 | # ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" ) 18 | 19 | # Uncomment the following line to use case-sensitive completion. 20 | # CASE_SENSITIVE="true" 21 | 22 | # Uncomment the following line to use hyphen-insensitive completion. 23 | # Case-sensitive completion must be off. _ and - will be interchangeable. 24 | # HYPHEN_INSENSITIVE="true" 25 | 26 | # Uncomment the following line to disable bi-weekly auto-update checks. 27 | DISABLE_AUTO_UPDATE="true" 28 | 29 | # Uncomment the following line to automatically update without prompting. 30 | # DISABLE_UPDATE_PROMPT="true" 31 | 32 | # Uncomment the following line to change how often to auto-update (in days). 33 | # export UPDATE_ZSH_DAYS=13 34 | 35 | # Uncomment the following line if pasting URLs and other text is messed up. 36 | # DISABLE_MAGIC_FUNCTIONS="true" 37 | 38 | # Uncomment the following line to disable colors in ls. 39 | # DISABLE_LS_COLORS="true" 40 | 41 | # Uncomment the following line to disable auto-setting terminal title. 42 | # DISABLE_AUTO_TITLE="true" 43 | 44 | # Uncomment the following line to enable command auto-correction. 45 | # ENABLE_CORRECTION="true" 46 | 47 | # Uncomment the following line to display red dots whilst waiting for completion. 48 | # COMPLETION_WAITING_DOTS="true" 49 | 50 | # Uncomment the following line if you want to disable marking untracked files 51 | # under VCS as dirty. This makes repository status check for large repositories 52 | # much, much faster. 53 | # DISABLE_UNTRACKED_FILES_DIRTY="true" 54 | 55 | # Uncomment the following line if you want to change the command execution time 56 | # stamp shown in the history command output. 57 | # You can set one of the optional three formats: 58 | # "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" 59 | # or set a custom format using the strftime function format specifications, 60 | # see 'man strftime' for details. 61 | # HIST_STAMPS="mm/dd/yyyy" 62 | 63 | # Would you like to use another custom folder than $ZSH/custom? 64 | # ZSH_CUSTOM=/path/to/new-custom-folder 65 | 66 | # Which plugins would you like to load? 67 | # Standard plugins can be found in $ZSH/plugins/ 68 | # Custom plugins may be added to $ZSH_CUSTOM/plugins/ 69 | # Example format: plugins=(rails git textmate ruby lighthouse) 70 | # Add wisely, as too many plugins slow down shell startup. 71 | plugins=(git command-not-found extract z docker zsh-syntax-highlighting zsh-autosuggestions zsh-completions) 72 | 73 | source $ZSH/oh-my-zsh.sh 74 | 75 | # User configuration 76 | 77 | # export MANPATH="/usr/local/man:$MANPATH" 78 | 79 | # You may need to manually set your language environment 80 | # export LANG=en_US.UTF-8 81 | 82 | # Preferred editor for local and remote sessions 83 | # if [[ -n $SSH_CONNECTION ]]; then 84 | # export EDITOR='vim' 85 | # else 86 | # export EDITOR='mvim' 87 | # fi 88 | 89 | # Compilation flags 90 | # export ARCHFLAGS="-arch x86_64" 91 | 92 | # Set personal aliases, overriding those provided by oh-my-zsh libs, 93 | # plugins, and themes. Aliases can be placed here, though oh-my-zsh 94 | # users are encouraged to define aliases within the ZSH_CUSTOM folder. 95 | # For a full list of active aliases, run `alias`. 96 | # 97 | # Example aliases 98 | # alias zshconfig="mate ~/.zshrc" 99 | # alias ohmyzsh="mate ~/.oh-my-zsh" 100 | 101 | autoload -U compinit && compinit 102 | -------------------------------------------------------------------------------- /scripts/custom.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #================================================= 3 | # Description: DIY script 4 | # Lisence: MIT 5 | # Author: P3TERX 6 | # Blog: https://p3terx.com 7 | #================================================= 8 | # Modify default IP 9 | #sed -i 's/192.168.1.1/192.168.50.5/g' package/base-files/files/bin/config_generate 10 | 11 | # Add date version 12 | export DATE_VERSION=$(date -d "$(rdate -n -4 -p pool.ntp.org)" +'%Y-%m-%d') 13 | sed -i "s/%C/%C (${DATE_VERSION})/g" package/base-files/files/etc/openwrt_release 14 | 15 | # Fix mt76 wireless driver 16 | pushd package/kernel/mt76 17 | sed -i '/mt7662u_rom_patch.bin/a\\techo mt76-usb disable_usb_sg=1 > $\(1\)\/etc\/modules.d\/mt76-usb' Makefile 18 | popd 19 | 20 | # Rename hostname to OpenWrt 21 | pushd package/base-files/files/bin 22 | sed -i 's/ImmortalWrt/OpenWrt/g' config_generate 23 | popd 24 | 25 | # Change default shell to zsh 26 | sed -i 's/\/bin\/ash/\/usr\/bin\/zsh/g' package/base-files/files/etc/passwd 27 | -------------------------------------------------------------------------------- /scripts/init-settings.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #================================================= 3 | # File name: init-settings.sh 4 | # Description: This script will be executed during the first boot 5 | # Author: SuLingGG 6 | # Blog: https://mlapp.cn 7 | #================================================= 8 | 9 | # Set default theme to luci-theme-argon 10 | uci set luci.main.mediaurlbase='/luci-static/argon' 11 | 12 | # Disable IPV6 ula prefix 13 | sed -i 's/^[^#].*option ula/#&/' /etc/config/network 14 | 15 | # Check file system during boot 16 | uci set fstab.@global[0].check_fs=1 17 | uci commit 18 | 19 | exit 0 20 | -------------------------------------------------------------------------------- /scripts/preset-clash-core.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #================================================= 3 | # File name: preset-clash-core.sh 4 | # Usage: | example: 5 | # System Required: Linux 6 | # Version: 1.0 7 | # Lisence: MIT 8 | # Author: SuLingGG 9 | # Blog: https://mlapp.cn 10 | #================================================= 11 | 12 | mkdir -p files/etc/openclash/core 13 | 14 | CLASH_DEV_URL="https://raw.githubusercontent.com/vernesong/OpenClash/master/core-lateset/dev/clash-linux-${1}.tar.gz" 15 | CLASH_TUN_URL=$(curl -fsSL https://api.github.com/repos/vernesong/OpenClash/contents/core-lateset/premium | grep download_url | grep $1 | awk -F '"' '{print $4}') 16 | CLASH_META_URL="https://raw.githubusercontent.com/vernesong/OpenClash/master/core-lateset/meta/clash-linux-${1}.tar.gz" 17 | GEOIP_URL="https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat" 18 | GEOSITE_URL="https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat" 19 | 20 | wget -qO- $CLASH_DEV_URL | tar xOvz > files/etc/openclash/core/clash 21 | wget -qO- $CLASH_TUN_URL | gunzip -c > files/etc/openclash/core/clash_tun 22 | wget -qO- $CLASH_META_URL | tar xOvz > files/etc/openclash/core/clash_meta 23 | wget -qO- $GEOIP_URL > files/etc/openclash/GeoIP.dat 24 | wget -qO- $GEOSITE_URL > files/etc/openclash/GeoSite.dat 25 | 26 | chmod +x files/etc/openclash/core/clash* 27 | -------------------------------------------------------------------------------- /scripts/preset-terminal-tools.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #================================================= 3 | # File name: preset-terminal-tools.sh 4 | # System Required: Linux 5 | # Version: 1.0 6 | # Lisence: MIT 7 | # Author: SuLingGG 8 | # Blog: https://mlapp.cn 9 | #================================================= 10 | 11 | mkdir -p files/root 12 | pushd files/root 13 | 14 | ## Install oh-my-zsh 15 | # Clone oh-my-zsh repository 16 | git clone https://github.com/robbyrussell/oh-my-zsh ./.oh-my-zsh 17 | 18 | # Install extra plugins 19 | git clone https://github.com/zsh-users/zsh-autosuggestions ./.oh-my-zsh/custom/plugins/zsh-autosuggestions 20 | git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ./.oh-my-zsh/custom/plugins/zsh-syntax-highlighting 21 | git clone https://github.com/zsh-users/zsh-completions ./.oh-my-zsh/custom/plugins/zsh-completions 22 | 23 | # Get .zshrc dotfile 24 | cp $GITHUB_WORKSPACE/data/zsh/.zshrc . 25 | 26 | popd 27 | --------------------------------------------------------------------------------