|
本帖最后由 忘忧GX 于 2023-2-18 15:58 编辑
OpenWRT的强大相信知道这个英文名的人都知道哈,用的人很多,编译出来发固件的人更多,但是基于源码开发的人很少(国内、符合国情需求的开发者)
在OpenWRT官方分有trunk\Snapshot\稳定版,大多数开发者会选择trunk\Snapshot进行开发,也不做版本管理,所以非官方版本很多时候都被贴上“折腾版”的标签;功能、插件是很多,也很好用,但是Bug也多,是否fix还要看开发者(通常是个人非团队)的心情;没办法,毕竟是开源嘛。
作为OpenWRT的重度用户,秉承稳定大于一切的理念,也不想三天两头地反复刷固件查bug;于是在网上搜罗了各路大神开发者的源码并编译测试后,发现Lienol这个开发者基于源码疯狂魔改地比较少,也比较接近源码,于是萌生了官方稳定版混合民间开发者插件的想法。
混合Lienol编译的优势:
- 1.可以使用很多插件(仔细发现部分插件来源于Lean),比如本人喜欢的前台status下看到cpu型号\瞬时频率\温度信息等
- 2.一些网络功能上的增强优化,比如fullconenat\BBR等
- 3.功能插件多的同时,还能继续用官方稳定版的opkg源!甚至还可以随意安装opkg源里面的kmod
复制代码 目前已知Bug:
- 1.shortcut-fe编译会报错,搞不定,建议make menuconfig时不要选shortcut-fe
- 2.smartdns前端网页是英文,即便安装了luci-i18n-smartdns-zh-cn还是英文
复制代码
郑重声明:本人小白,不懂开发不懂源码不懂linux内核,都是胡编乱造,以下方法仅限个人研究讨论,不确保一定成功,请大家多多包涵!
编译需要提前准备好Ubuntu,个人推荐20.04版本,安装Ubuntu过程+编译环境准备就不再展开了,请自行百度或者g.com
以下是本人混合并编译的操作步骤
- #注意: 1.本脚本仅适用于openwrt v21.02.X 版本编译
- ###### 2.本脚本仅适用于X86 64位架构编译
- ###### 3.需要手工执行make menuconfig 产生.config文件
- #openwrt官方git稳定版版本号
- tag_ver="v21.02.3"
- #目前lienol基于官方SNAPSHOT版分支,最新是openwrt-21.02
- lienol_ver=$(echo $tag_ver|sed 's/v//g'|awk -F '.' '{print $1"."$2}')
- current_dir=$(pwd)
- lienol_dir=$(echo ${current_dir}/lienol_openwrt)
- #官方git地址
- openwrt_git="https://github.com/openwrt/openwrt"
- #lienol地址
- lienol_git="https://github.com/Lienol/openwrt"
- git clone $openwrt_git
- git clone -b $lienol_ver --single-branch $lienol_git $lienol_dir
- ddir=$(echo $openwrt_git|awk -F '/' '{print $NF}')
- cd $ddir
- #git tag
- #切换到稳定tag
- git checkout $tag_ver
- kernel_git=$(echo "$tag_ver"|sed 's/v//g')
- feeds_conf=feeds.conf.default
- #此处获取稳定版内核md5值并替换到编译配置文件中
- wget https://downloads.openwrt.org/releases/${kernel_git}/targets/x86/64/packages/Packages.gz
- zgrep -m 1 "Depends: kernel (=.*)$" Packages.gz | sed -e 's/.*-\(.*\))/\1/' > .vermagic
- sed -i -e 's/^\(.\).*vermagic$/\1cp $(TOPDIR)\/.vermagic $(LINUX_DIR)\/.vermagic/' include/kernel-defaults.mk
- #更换官方的packages为lienol的packages
- sed -i "/ packages /d" $feeds_conf
- echo "src-git packages https://github.com/Lienol/openwrt-packages.git;${lienol_ver}" >> $feeds_conf
- #替换官方的luci为lienol的luci
- sed -i "/ luci /d" $feeds_conf
- echo "src-git luci https://github.com/Lienol/openwrt-luci.git;${lienol_ver}" >> $feeds_conf
- #加入lienol的特殊加成
- sed -i "/ lienol /d" $feeds_conf
- echo "src-git lienol https://github.com/Lienol/openwrt-package.git;main" >> $feeds_conf
- #加入lienol的其他特殊加成
- sed -i "/ other /d" $feeds_conf
- echo "src-git other https://github.com/Lienol/openwrt-package.git;other" >> $feeds_conf
- #更改官方默认的连接数,改为65536
- sed -i 's/16384/65536/g' package/kernel/linux/files/sysctl-nf-conntrack.conf
- #复制lienol的samba36\fullconenat 等
- cp -R ${lienol_dir}/package/network/services/samba36 package/network/services
- cp -R ${lienol_dir}/package/kernel/shortcut-fe package/kernel
- cp -R ${lienol_dir}/package/network/config/firewall/patches package/network/config/firewall
- cp -R ${lienol_dir}/package/network/fullconenat package/network
- ########################
- #加入fw876的helloworld
- echo "src-git helloworld https://github.com/fw876/helloworld" >> feeds.conf.default
- mkdir -p package/helloworld
- for i in "dns2socks" "microsocks" "ipt2socks" "pdnsd-alt" "redsocks2"; do \
- svn checkout "https://github.com/immortalwrt/packages/trunk/net/$i" "package/helloworld/$i"; \
- done
- ########################
- ./scripts/feeds update -a
- ./scripts/feeds install -a
- #./scripts/feeds update helloworld
- #./scripts/feeds install -a -f -p helloworld
- #手工配置你的配置项,否则无.config无法编译
- #如需要本人的配置项请执行 wget runchar.com:92/openwrt_${tag_ver}.config -O ${current_dir}/${ddir}/.config
- make menuconfig
复制代码 编辑好配置后,执行下载,下载失败可以反复执行,因为提交后台,注意不要同时间执行多个(htop或者ps查看进程)
- #提交后台下载,需要下载完成方可编译(提高编译成功率),为了方便分析问题,下载线程thread设置成了1,可以调大
- thread=1;nohup make -j${thread} download V=s > ${ddir}/j${thread}_down.log 2>&1 &
- #查看下载日志
- tail -f ${ddir}/j${thread}_down.log
复制代码
下载完成后,执行编译,因为提交后台,注意不要同时间执行多个
- #开始编译,为了方便分析问题,编译线程thread设置成了1,可以调大
- thread=1;nohup make -j${thread} V=s > ${ddir}/j${thread}.log 2>&1 &
- #查看编译日志
- tail -f ${ddir}/j${thread}.log
复制代码
有兴趣讨论的话请反馈,不常上论坛,有问题请博客留言,本人博客:编译稳定版的OpenWRT并且混入Lienol大神的插件
|
|