日常折腾 篇一:编译属于自己理想的Openwrt
前言
这两年一直都在接触Openwrt,主要用来做旁路由弄的特殊功能(都懂的)。这期间也是在恩山那边做伸手党,直接拿别人弄好的x86固件来使。用着发现有的太过精简,而有的给的太多,没办法只能自己试着编译一个。先声明,我只是小白,写的不对的地方,希望各位大佬不吝赐教,多多指正。继续叠个甲,非常感谢各大佬的开源项目。
一、编译环境
在确定编译环境之前,先确定需要编译的固件。目前固件有原版固件和各路大神开源固件。
原版固件
原版固件插件比较少,需要自己去找,更适合动手能力高的大神使用,小白还是不推荐
Lean的固件
目前很多Openwrt的固件都是基于Lean大神的固件编译,包含恩山上面的大多数固件,当然还有其他固件,比如HomeLede。选Lean大神的固件主要是插件丰富,好编译,功能上按需选择,基本上都能满足。
环境
固件确定后,就可以选择编译环境,大致说下现在能编译的环境有哪些
云编译:可以使用P3TERX大佬编写的Actions-OpenWrt项目, 可以在 GitHub Actions 云编译 OpenWrt,项目官网也有详细的使用说明
Debian或Ubuntu编译:因为选择了Lean大的固件,在项目说明中也提及了用这两个系统,所以紧跟步伐就行。物理机或者虚拟机都是可以的,所以我选择了VMware+Ubuntu。这里跳过环境搭建
二、Openwrt编译
安装编译依赖
# 更新软件包列表,检查可用的软件包更新
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 fastjar flex gawk gettext gcc-multilib g++-multilib git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libfuse-dev libglib2.0-dev libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libpython3-dev libreadline-dev libssl-dev libtool lrzsz mkisofs msmtp ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pyelftools python3-setuptools qemu-utils rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
源码下载及配置
1、首次编译
# 从GitHub仓库上面获取编译文件
git clone https://github.com/coolsnowwolf/lede
# 进入lede文件目录
cd lede
再继续下面步骤前,先进行插件源设置,即配置下载仓库
配置下载仓库有两种方法
1、使用命令行添加下载仓库
下载仓库方式:命令行输入以下命令"git clone https://github.com/fw876/helloworld.git package/lean/luci-app-ssr-plus"
添加feeds方式:命令行输入以下命令"echo 'src-git helloworld https://github.com/fw876/helloworld' >>feeds.conf.default"
以上两种方式区别:下载仓库方式只编译,而feeds方式在编译后,还会出现在openwrt的“软件包”,“软件源”中
2、直接修改feeds.conf.default下载仓库配置文件,路径lede --> feeds.conf.default
这种方式也会出现在openwrt的“软件包”,“软件源”中
feeds.conf.default文件更新并安装feeds
# 升级所有的软件包和所有的在feeds中指定的库
./scripts/feeds update -a
# 安装所有的软件包和所有的在feeds中指定的库
./scripts/feeds install -a
配置OpenWrt Configuration
# 生成配置界面
make menuconfig
在这里根据路由器的平台和架构,选择相应的选项,比如我是x86架构,所以默认都是x86选项。其他就是设置无线支持、ipv6支持以及需要的插件。
下载 dl 库,编译固件 (-j 后面是线程数,第一次编译推荐用单线程)
# 下载dl库,这里也可以加上V=s查看输出日志,如make download -j8 V=s
make download -j8
当dl库下载完成后,可以做一个不那么严谨的动作,就是检查文件完整性。根据有些大佬经验,小于1k的文件可能属于不完整,所以可以根据下面命名则需使用
a.查看小于1k文件
find dl -size -1024c -exec ls -l {} ;
b.删除小于1k文件
find dl -size -1024c -exec rm -f {} ;
c.再执行一次
make download
编译固件(Lean大神建议,首次编译用一个线程数)
make V=s -j1
2、二次编译
# 首先要进入lede目录
cd lede
# 拉取最新代码
git pull
# 更新下载安装订阅源包含的软件包
./scripts/feeds update -a && ./scripts/feeds install -af
# 只对.config 部分代码片段的默认值补全
make defconfig
# 清理旧文件,也可以不清理
# 如果只是调整检查和驱动等,清理bin目录内容
make clean
# 如果需要调整架构,或者之前编译出错,清理clean+交叉编译工具及工具链目录
make dirclean
# 如果需要调清理所有,包括下载的软件包,配置文件,feed内容等
make distclean
# 删除旧的配置文件,即lede目录下的.config文件(如果看不到可以ctrl+h)
rm -rf ./tmp && rm -rf .config
# 选择插件,如果需要调整的话
make menuconfig
# 下载包
make download -j8 V=s
# 优先使用多线程编译,出错则使用单线程并输出详细信息
make -j$(nproc) || make -j1 V=s
最后,编译完成后输出路径:bin/targets
总结
我在VMware+Ubuntu的编译环境下,成功失败并存,根据了解的情况来说,可能是本地环境网络问题,有时候成功了,后面如果修改配置,在编译也会存在失败情况。至于为什么不选择云编译,我觉得在云编译之前,自己在本地编译下会更好的了解整个编译过程,即使云编译的时候保存,也能大概得了解为什么报错,从而进行修改。另外就是,一次编译,如果稳定的话,下一次编译可能在几个月或者更长时间。这东西稳定运行就行,没必要追新。
失败啦!作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
人见人爱
校验提示文案
值友7833391788
校验提示文案
张大妈老公公
推荐一个在线编译自定义openwrt的网站:
去看看
校验提示文案
riverqh
校验提示文案
浩宇丿星辰
校验提示文案
谁敢杀我
校验提示文案
solekg
校验提示文案
值友7833391788
校验提示文案
riverqh
校验提示文案
浩宇丿星辰
校验提示文案
人见人爱
校验提示文案
solekg
校验提示文案
张大妈老公公
推荐一个在线编译自定义openwrt的网站:
去看看
校验提示文案
谁敢杀我
校验提示文案