本文最后更新于 2024年6月25日 早上
记录在ubuntu,wsl,github actions上编译LEDE的经历
1ubutut方式 该方式基本安装readme 照着做即可,没啥奇怪问题。
1.1 安装环境 使用的是ubuntu 20.04 LTS,64位系统。
执行下面命令以安装环境1 2 3 sudo apt-get update sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev -i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0 -dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget curl swig rsync
克隆源码1 git clone https://gi thub.com/coolsnowwolf/ lede
1.2 格外配置 1.2.1 添加科学上网 打开lede\feeds.conf.default文件,添加
1 2 src-git helloworld https://gi thub.com/fw876/ helloworld src-git small https://gi thub.com/kenzok8/ small
1.2.2 其他软件源 1 sed -i '$a src-git NueXini_Packages https://github.com/NueXini/NueXini_Packages.git' feeds.conf.default
1.2.3 修改登录IP 实体文件在lede\package\base-files\files\bin\config_generate在150行
1 lan) ipad=${ipaddr:-"192.168.1.1"} ;;
1.3 更新软件包 1 2 ./scripts/ feeds update -a ./scripts/ feeds install -a
第一次install的时候会有一些警告,第二次执行就没了。
1.4 配置
可以参考这里 如果是编译R2S固件,前三项设置为:Rockchip、默认、R2S。 退出保存文件就在根目录,名为.config 也可以通过下列命令生成默认配置
1.5 下载支持库 这里需要翻墙了,这里容易出现下载不完整导致之后编译错误,注意以下dl文件夹里面文件的大小
1.6 编译 首次编译用单线程,主机是1.8GHz双核,下午2点开始,第二天上班发现编译完成。
2 wsl方式 ** 该方式未能成功编译,但是仍然记录下来,之后找到问题再进行需改 **
2.1 设置区分大小写 首先建立个文件夹openwrt,然后设置为区分大小写,不然之后会报错,没权限就用管理员运行cmd
1 fsutil.exe file setCaseSensitiveInfo openwrt enable
结果:
1 Case sensitive attribute on directory D:\code\ggggg\openwrt is enabled.
2.2 安装环境 然后进入wsl,执行下列命令
1 2 3 4 5 sudo apt update -y sudo apt full-upgrade -y sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential bzip2 ccache cmake cpio curl device-tree-compiler ecj fastjar flex gawk gettext git git-core gperf haveged help2man intltool lib32gcc1 libc6-dev-i386 libelf-dev libglib2.0 -dev libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncurses5-dev libreadline-dev libssl-dev libtool libz-dev lrzsz mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pip python3-ply python-docutils qemu-utils re2c rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
2.3 解决空格问题 文件名是不能有空格的,需要解决空格问题,参考 依次输入
1 2 3 4 5 sudo tee -a /etc/ wsl.conf << EOF > /dev/ null [interop] appendWindowsPath = false EOFexit
重启WSL
2.4 下载源码 克隆源码到openwrt文件夹,wsl没git就在外面克隆一样
1 git clone https://gi thub.com/coolsnowwolf/ lede
2.5 文件夹权限 处理方式来源 在/etc/wsl.conf中添加内容
1 2 3 4 5 6 [automount] options = "metadata,umask=22,fmask=111" mountFsTab = true [filesystem] umask = 022
编辑/etc/fstab,添加:
1 C :\ /mnt/c drvfs rw,noatime,uid=1000 ,gid=1000 ,metadata,umask=22 ,fmask=11 0 0
之后重启。
这里补充下,可能需要进行的修改:
如果在克隆仓库后发现所以文件都被标为了modified,那可能是权限和换行符发生了变化。来源
在WSL中执行
1 2 git config --global core.filemode false git config --global core.autocrlf input
2.6 额外配置 在lede\feeds.conf.default里末尾添加科学上网
1 src-git helloworld https://gi thub.com/fw876/ helloworld
或者
1 2 git clone https://gi thub.com/kenzok8/ openwrt-packages.git src-git small https://gi thub.com/kenzok8/ small
下面这个命令也是添加一个额外的软件源,可选
1 sed -i '$a src-git NueXini_Packages https://github.com/NueXini/NueXini_Packages.git' feeds.conf.default
修改登录IP lede\package\base-files\files\bin\config_generate 在150行。
1 lan) ipad=${ipaddr:-"192.168.1.1"} ;;
2.7 安装更新软件包 在wsl中执行
1 2 ./scripts/ feeds update -a ./scripts/ feeds install -a
配置,可以参考这里 ,我这里编译的是R2S,所以前三项配置是:Rockchip、默认、R2S。
2.8 配置
如果之前由自己的配置,则直接覆盖。测试阶段仅选择编译平台(rockchip/RK33xx/FriendlyARM NanoPi R2S),其他默认。
2.9 下载dl库 这里需要翻墙,并且容易下载不完整,可以删除不完整文件后反复下载。
2.10 编译 最后是编译了,由于上面修改了空格问题,可以直接
否则要使用
1 PATH =/usr/local /sbin:/usr /local/bin :/usr/sbin :/usr/bin :/sbin :/bin make -j1 V=s
然后就报错了,日志如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 Initializing Automake: checking for a BSD-compatible install... /mnt/d /code/ggggg/openwrt/lede/staging_dir/host/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... cat : -: No such file or directoryno checking whether make supports nested variables... yescat : -: No such file or directorycat : -: No such file or directory checking whether ln -s works... yes checking whether make supports the include directive... cat : -: No such file or directoryno checking for x86_64-pc-linux-gnu-gcc... gcccat : -: No such file or directory checking whether the C compiler works... no configure: error : in `/mnt/d /code/ggggg/openwrt/lede/build_dir/host/xz-5.2.5': configure: error : C compiler cannot create executables See `config.log ' for more details make[3]: *** [Makefile:37: /mnt/d /code/ggggg/openwrt/lede/build_dir/host/xz-5.2.5/.configured] Error 77 make[3]: Leaving directory '/mnt/d /code/ggggg/openwrt/lede/tools/xz' time: tools/xz/compile#0.50#0.07#1.89 ERROR : tools/xz failed to build. make[2]: *** [tools/Makefile:159: tools/xz/compile] Error 1 make[2]: Leaving directory '/mnt/d /code/ggggg/openwrt/lede' make[1]: *** [tools/Makefile:155: /mnt/d /code/ggggg/openwrt/lede/staging_dir/host/stamp/.tools_compile_yyynyynnyyyynyyyyyynyynnyyynyyyyyyyyyyyyyyyyynynnyyyyyyyyyy] Error 2 make[1]: Leaving directory '/mnt/d /code/ggggg/openwrt/lede' make: *** [/mnt/d /code/ggggg/openwrt/lede/include /toplevel.mk:230: world] Error 2
2.11 删除相关 挑错阶段需要反复删除一些东西,我特么觉得全部删了,重新克隆更可靠,当还是列出下列命令。
清除旧编译中间文件
清除编译目录,在更换架构前执行
git回滚到拉取的初始状态
删除menuconfig产生的临时文件,如果修改了软件包需要执行
3 Github Action方式 3.1快速使用
方式来源于P3TERX ,使用的是lean的源码
点击 Use this template 建立一个用于编译的工程,里面的文件是一些配置参数。
在根目录创建一个.config,将本地选择好的配置选项复制进去。就是本地编译的时候make menuconfig生成在根目录的那个文件啦。
点击Actions,然后左侧点击build Openwrt,之后右边点击run workflow,便开始编译了。
花了三个半小时,还是比我那个mini-PC快不少- -|
在build openwrt页面里的Artifacts栏下载编译好的压缩包,解压后得到实际固件
烧入SD卡,启动R2S,插入网线,输入192.168.1.1,密码password登入,OK搞定
3.2自定义配置 3.2.1自定义环境变量与功能 .github/workflows/build-openwrt.yml
1 2 3 4 5 6 7 8 9 10 11 env: REPO_URL: https://github.com/coolsnowwolf/lede REPO_BRANCH: master FEEDS_CONF: feeds.conf.default CONFIG_FILE: .config DIY_P1_SH: diy-part1.sh DIY_P2_SH: diy-part2.sh UPLOAD_BIN_DIR: false UPLOAD_FIRMWARE: true UPLOAD_COWTRANSFER: false UPLOAD_WETRANSFER: false UPLOAD_RELEASE: false TZ: Asia/Shanghai
环境变量
功能
REPO_URL
源码仓库地址
REPO_BRANCH
源码分支
FEEDS_CONF
自定义feeds.conf.default文件名
CONFIG_FILE
自定义.config文件名
DIY_P1_SH
自定义diy-part1.sh文件名
DIY_P2_SH
自定义diy-part2.sh文件名
UPLOAD_BIN_DIR
上传 bin 目录。即包含所有 ipk 文件和固件的目录。默认false
UPLOAD_FIRMWARE
上传固件目录。默认true
UPLOAD_COWTRANSFER
上传固件到奶牛快传。默认false
UPLOAD_WERANSFER
上传固件到 WeTransfer 。默认false
UPLOAD_RELEASE
上传固件到 releases 。默认falseTZ时区设置
3.2.2DIY脚本 在根目录下的diy-part1.sh,会在下列命令前执行
1 ./scripts/ feeds update -a
通过修改此文件可以实现增加软件包源,例如在里面添加命令
1 echo 'src-git helloworld https://github.com/fw876/helloworld' >>feeds.conf.default
而diy-part2.sh则是在install后执行,可以进行一个系统配置,例如修改登录IP
1 sed -i 's/192.168.1.1/192.168.50.5/g' package /base-files/ files/bin/ config_generate
3.2.3自定义feeds配置 在上面快速使用中,仅增加了config文件,而feeds.conf.default文件是使用了默认的,如果有意修改,则扔到根目录即可
3.2.4源码更新自动进行编译。 对自己github头像点设置,然后选择子项Developer settings->Personal access tokens 右边点击,Generate new token。 页面中勾选repo,下方点击创建token,时候会生成key,先复制保存下来。 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
之后在自己仓库的settings选项中,点击Secrets,创建一个新的secret,名称填入ACTIONS_TRIGGER_PAT,值填入上面生成的key。
在Actions页面选择Update Checker,点击Run workflow手动进行一次测试运行。如果没有报错且 OpenWrt 编译工作流程被触发,则代表测试通过
最后编辑Update Checker的 workflow 文件(.github/workflows/update-checker.yml),取消注释(删除#)定时触发相关的部分。这里可以根据 cron 格式来设定检测的时间,时区为 UTC 。
1 2 # schedule: # - cron: 0 */18 * * *