Coder Social home page Coder Social logo

shared-lede's Introduction

使用 GitHub Actions 快速定制编译 OpenWrt 固件

流程文档参考KFERMercer/OpenWrt-CI,十分感谢!

使用的固件源码包括openwrt官方,以及coolsnowwolf、Lienol、immortalwrt、x-wrt维护的版本,详见表格

预置机型有小米4A千兆版、小米CR6606、红米AX6S等,详见preset*/headers.json

快速生成固件 ---> 登陆GitHub,fork此仓库,点击上方Actions,选择左侧流程中的build XXX运行,运行完毕即可下载固件。示意如下:

选择机型:在run workflow界面点开选择设备的下拉框,即可手动选择机型。

如预置机型中没有你需要的,可以使用templet目录下的文件新增机型。

喜欢的话,右上角Star一下,方便再找。

使用本项目你需要

  • GitHub 账号

  • GitHub Actions 基本使用技能

Liunx、OpenWrt、Actions等相关知识,可自行搜索学习

使用教程

点击展开/关闭

1. 注册GitHub账号并开启GitHub Actions

3. 自定义固件

什么也不修改,按默认配置,可以跳过此步。

每个机型关联三个文件,在preset*目录中。

  • [数字].clone.sh

此脚本用来拉取固件源码和扩展插件源码,新增插件源时,建议先在本地测试下是否缺依赖。

常用的克隆命令如下(克隆理解为下载即可):

git clone 链接

git clone -b 分支名 链接

  • [数字].modify.sh

此脚本用于固件初始化设置,修改登录IP、主机名、WiFi名称等。

此脚本用到最多的命令是sed,详细用法参见链接,这里只简单说明。

比如,下面这条命令就是用来修改管理IP的:

sed -i 's/192.168.1.1/192.168.31.1/g' package/base-files/files/bin/config_generate

192.168.1.1是源码中默认的lan口登录IP,也即初始的;192.168.31.1是新的,用来替换初始文本的。

可以看出命令的构成是这样的:

sed -i 's/原字符串/新字符串/g' 文件路径

这就可以用来替换掉源码中的特定位置,-i指直接改动文件,s指替换,g指全局。

原字符串记为str1,新字符串记为str2,自定义设置改动str2位置即可,如果你改动了str1,那么命令在源码中就匹配不到东西了,替换也就无效了。

🎈🎈🎈 各基础命令的用法可参考该链接,适合新手查阅。

  • [数字].config

该文件对应本地编译执行make menuconfig后生成的.config文件。

该文件主要包含luci应用,流程中会自动转为完整的.config。

增减插件修改这个文件即可,以argon主题为例,格式如下:

CONFIG_PACKAGE_luci-theme-argon=y 选中编译进固件的是这种

CONFIG_PACKAGE_luci-theme-argon=m 选中仅编译ipk插件是这种

# CONFIG_PACKAGE_luci-theme-argon is not set 未选中是这种

4. Actions中手动开始编译流程

选择你需要的build XXXworkflow,再点击Run workflow,按需填内容,运行即可。

各选项说明如下:

  • 超频到1100Mhz:

build lede有此选项。

默认不勾选。仅适用于5.10内核,除红米AX6S外,其余机型默认皆为5.10内核。

  • 使用5.15内核:

build lede有此选项。

默认不勾选。lean lede源码勾选此项时,编译小米4A千兆版和小米3Gv2时会报错,勿用。

红米AX6S只有5.15内核,不必勾选。

  • 选择机型:

点开下拉框,可以选择不同的机型。

  • 上传到release:

默认勾选。单文件不能超过2GB,可添加内容记录。 release区见下图:

  • 上传到artifact:

默认不勾选。artifact区见下图:

  • 版本描述:

可作一些简单记录,会在release中显示。

5. 编译完成

Actions流程顺利完成后,去release(或者artifact)下载你的固件,release中allfiles.zip是所有文件的打包。

preset*目录说明

点击展开/关闭

全部机型信息可查看文件preset*/headers.json,各配置目录略有不同,如preset-openwrt/headers.json

config说明

  • 1.config用于小闪存设备(16MB及以下)
  • 2.config用于大闪存设备

标号规则

  • headers.json中每个机型的数字标号,用于选择对应的clone.sh、modify.sh、config。
  • 按headers.json中的机型标号,找不到对应的clone.sh、modify.sh、config时,默认选择1.clone.sh、1.modify.sh、1.config。

自定义配置

方法一

修改clone.sh、modify.sh、config三个文件

方法二

  • 添加新的clone.sh、modify.sh、config,并用数字标号,比如5.clone.sh、5.modify.sh、5.config
  • 修改headers.json指定机型的标号,比如把"xiaomi-ac2100": ["1", "ramips", "mt7621", "xiaomi_mi-router-ac2100"]改成"xiaomi-ac2100": ["5", "ramips", "mt7621", "xiaomi_mi-router-ac2100"]

方法三

  • 添加新的clone.sh、modify.sh、config,并用数字标号,比如5.clone.sh、5.modify.sh、5.config
  • 向headers.json添加新机型,比如添加"xiaomi-ac2100-xxx": ["5", "ramips", "mt7621", "xiaomi_mi-router-ac2100"]
  • .github/workflows/build-xxx.ymlinputs.model.options添加新机型,比如向.github/workflows/build-openwrt.yml添加- 'xiaomi-ac2100-xxx'

本地测试

点击展开/关闭

本地测试生成.config文件

以生成preset-openwrt/other.config为例,编译流程build openwrtother机型对应当前的other.config。

  1. 使用Codespace或本地环境,克隆本仓库,并进入仓库根目录。

    建议使用Codespace,只需要一个浏览器即可,且不会存在网络问题。

  2. 安装yq工具。

    Codespace中安装yq,命令如下:

    wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O ~/.local/bin/yq
    chmod +x ~/.local/bin/yq

    本地Linux环境可使用snap安装,命令如下:

    snap install yq
  3. 运行以下命令,克隆openwrt源码。

    chmod +x extra-files/clone.sh
    ./extra-files/clone.sh extra-files/clone.toml openwrt
    cd _test_code

    clone.sh脚本可以不加参数运行,但需根据提示输入clone.toml路径、源码名、测试文件存放目录(可选)。

  4. (可选)从已有的.config修改。

    cp ../preset-openwrt/other.config .config
  5. 运行以下命令,开始配置。

    make menuconfig
  6. 配置完成后,_test_code目录里,也就是现在所在的目录下已生成.config文件。

  7. (可选)简化一下.config文件,只保留常用的配置项,运行以下命令。

    chmod +x ../extra-files/ptext
    ../extra-files/ptext c2m .config ../preset-openwrt/other.config
  8. 若执行了上一步的简化则该步跳过。将.config文件复制到本仓库的preset-openwrt目录下,运行以下命令。

    cp .config ../preset-openwrt/other.config
  9. 提交到远程仓库,开始运行编译流程build openwrt,选择机型other

固件源码

点击展开/关闭
配置目录 流程名 源码
preset-lede build lede coolsnowwolf/lede
preset-lienol-openwrt build lienol openwrt Lienol/openwrt
preset-openwrt build openwrt openwrt/openwrt
preset-immortalwrt build immortalwrt immortalwrt/immortalwrt
preset-x-wrt build x-wrt x-wrt/x-wrt

提示

  1. 直接在Actions中运行build XXX就能编译出固件,但默认插件数量较少,对插件有增、减需要的,可修改preset*/[数字].config。若在[数字].clone.sh中添加了插件源,在[数字].config要作对应修改,建议先在本地make menuconfig测试。

  2. 超频方案默认不启用,方案来自该帖子

  3. 小米4A千兆版和小米3Gv2需修改分区才能在breed直刷,参考该帖子,本项目中已修改好,见脚本modify-xiaomi-router-4a-3g-v2.sh

  4. 小米4A千兆版和小米3Gv2闪存小(仅16MB),若编译插件太多,包体积超出闪存上限,则不会生成sysupgrade.bin。


最后

无特别详细的教程,自己摸索吧。

如有问题,请利用庞大的网络知识库,能快速解决你的问题。

shared-lede's People

Contributors

github-actions[bot] avatar hugcabbage avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

shared-lede's Issues

在编译cr6609版本时是出现error,Hunk #1 FAILED at 706.

Hunk #1 FAILED at 706.
Hunk #2 succeeded at 3752 (offset -34 lines).
1 out of 2 hunks FAILED -- saving rejects to file net/netfilter/nf_conntrack_netlink.c.rej
Patch failed! Please fix /home/runner/work/shared-lede/shared-lede/target/linux/generic/hack-5.10/952-net-conntrack-events-support-multiple-registrant.patch!
make[3]: *** [Makefile:123: /home/runner/work/shared-lede/shared-lede/build_dir/toolchain-mipsel_24kc_gcc-11.3.0_musl/linux-5.10.138/.prepared] Error 1
make[3]: Leaving directory '/home/runner/work/shared-lede/shared-lede/toolchain/kernel-headers'
time: toolchain/kernel-headers/compile#12.88#6.33#15.76
ERROR: toolchain/kernel-headers failed to build.
make[2]: Leaving directory '/home/runner/work/shared-lede/shared-lede'
make[2]: *** [toolchain/Makefile:97: toolchain/kernel-headers/compile] Error 1
make[1]: *** [toolchain/Makefile:93: /home/runner/work/shared-lede/shared-lede/staging_dir/toolchain-mipsel_24kc_gcc-11.3.0_musl/stamp/.toolchain_compile] Error 2
make[1]: Leaving directory '/home/runner/work/shared-lede/shared-lede'
make: *** [/home/runner/work/shared-lede/shared-lede/include/toplevel.mk:230: world] Error 2
Error: Process completed with exit code 2.

编译第2、3个机型时出错

Run ./scripts/feeds update -a
/home/runner/work/_temp/b2fab536-2f2c-4fd2-9284-b795fe4b4eea.sh: line 1: ./scripts/feeds: No such file or directory

可否增加在线ssh配置config方式

workflow运行的时候可以选择是否SSH链接在线配置config,参考代码如下

env:
REPO_URL: https://github.com/padavanonly/immortalwrt-mt798x
REPO_BRANCH: openwrt-21.02
FEEDS_CONF: feeds.conf.default
CONFIG_FILE: hanwckf/.config
DIY_P1_SH: hanwckf/diy-part1.sh
DIY_P2_SH: hanwckf/diy-part2.sh
SSH_ACTIONS: false
UPLOAD_FIRMWARE: true
UPLOAD_RELEASE: true
TZ: Asia/Shanghai
OPENWRT_NAME: OpenWrt

  • name: SSH链接管理
    uses: P3TERX/[email protected]
    if: (github.event.inputs.ssh == 'true' && github.event.inputs.ssh != 'false') || contains(github.event.action, 'ssh')
    env:
    TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}
    TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}

生成.config文件出错

显示错误如下
Run mv $DOT_CONFIG .config
mv $DOT_CONFIG .config
make defconfig
shell: /usr/bin/bash -e {0}
env:
TEMP_PREFIX: temp
DEPLOYDIR: preset-lienol-openwrt
DOT_CONFIG: preset-lienol-openwrt/temp.config
/home/runner/work/shared-lede/shared-lede/.config:11: *** missing separator. Stop.
make: *** [/home/runner/work/shared-lede/shared-lede/include/toplevel.mk:81: prepare-tmpinfo] Error 2
Error: Process completed with exit code 2.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.