简体中文 | 繁體中文 | English |
GitHub Action帮你自动构建个人OpenWrt IPK包

GitHub Action帮你自动构建个人OpenWrt IPK包

typecho
2024-07-21 / 0 评论 / 1,564 阅读 / 正在检测是否收录... ===> PDD优惠福利券,千万好物,不要错过 <===

嘿,小伙伴们👋,今天带来的是一篇非常给力的教程!这次我们要揭秘如何使用GitHub Action构建OpenWrt IPK包。小白也能轻松搞定,快来看看吧!

准备工作:在Github上创建一个账号,并新建一个项目,然后打开Actions面板,创建一条新的工作流new workflow,命名为build-openwrt-ipk.yml。下面开始对里面的内容进行介绍。
lyvpg6bz.png

一、基础配置
在GitHub Action中,先来看看我们的基础配置部分,从基本的name和on事件开始配置:

name: Build OpenWrt IPK

on:
  workflow_dispatch:
    inputs:
      architecture:
        description: 'Target architecture'
        required: true
        default: 'x86-64'
      package:
        description: 'Package to build'
        required: true
        default: 'luci-app-alwaysonline'

这里,我们设置了一个手动触发的workflow,并且允许用户选择目标架构和要构建的包。

二、构建工作流程
接下来是构建的核心部分。我们在jobs下定义了一个名为build的工作流程:

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2

    - name: Set up Docker
      uses: docker/setup-buildx-action@v1

第一步是检查出代码库,第二步是设置Docker环境。Docker是我们构建OpenWrt IPK包的关键工具。

三、构建IPK包
下面是构建IPK包的具体步骤:

    - name: Build IPK
      run: |
        docker pull openwrt/sdk:${{ github.event.inputs.architecture }}
        docker run --name openwrtsdk -e FORCE_UNSAFE_CONFIGURE=1 -e TERM=xterm openwrt/sdk:${{ github.event.inputs.architecture }} /bin/bash -c "
          echo 'src-git kiddin9 https://github.com/kiddin9/openwrt-packages' >>feeds.conf.default &&
          ./scripts/feeds update -a &&
          ./scripts/feeds install ${{ github.event.inputs.package }} &&
          make defconfig &&
          make package/${{ github.event.inputs.package }}/{clean,compile} -j$(nproc) &&
          find /builder/bin/packages -name '*${{ github.event.inputs.package }}*.ipk'
        "
        docker cp openwrtsdk:/builder/bin/packages ./packages

这一部分代码解释起来很简单:我们先从Docker拉取OpenWrt的SDK镜像,然后运行一些脚本来更新feeds,安装指定的包,最后编译生成IPK包并复制到本地。

备注:这里引用的包源为: github.com/kiddin9/openwrt-packages ,可以到此项目下查询有哪些可用的包哦,如有更好的包源也可用自行增加或替换哦。

四、上传IPK包和生成Release
构建完IPK包后,我们需要上传这些包作为artifact:

    - name: Upload IPK as artifact
      uses: actions/upload-artifact@v2
      with:
        name: ipk-files
        path: packages/**/*.ipk

然后,我们生成一个release tag,并创建一个新的GitHub Release:

    - name: Generate release tag
      id: tag
      run: |
        echo "::set-output name=release_tag::$(date +"%Y.%m.%d_%H-%M")_${{ github.event.inputs.architecture }}_${{ github.event.inputs.package }}"

    - name: Create Release and Upload Asset
      uses: softprops/action-gh-release@v1
      with:
        files: ./packages/**/*${{ github.event.inputs.package }}*.ipk
        tag_name: ${{ steps.tag.outputs.release_tag }}
        name: Release ${{ steps.tag.outputs.release_tag }}
        draft: false
        prerelease: false
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

备注:如遇到GITHUB_TOKEN权限问题,请打开github项目Settings->Actions->General->Workflow permissions,圈选 Read and write permissions后Save。
lyvq5od1.png

将所有内容合并配置到yml文件后,我们就可以run workflow,根据你的实际情况填入OpenWrt设备的架构和luci-app-xxx的包名,就可以开始运行了。

lyvq91j9.png

完成后,我们的IPK包就被上传到了GitHub Release,方便进行下载和使用啦!

lyvpr8a1.png

看吧,是不是很简单?整个过程只需要配置几个步骤,就可以自动化地构建和发布OpenWrt IPK包。绝绝子,实在是太方便了!希望大家都能学会这个技能,赶快去试试吧!👨‍💻👩‍💻

更多关注:www.9418666.xyz

0

评论 (0)

取消