Openwrt 编译问题及方案记录(实时更新)

作者: 胖宅 分类: Openwrt 发布时间: 2022-04-10 17:42
  • 问题:如何对某个硬件进行全编译,输出所有的ipk文件?
  • 解决方案:

删除/home/pangzhai/openwrt/tmp目录及/home/pangzhai/openwrt/.config文件

make menuconfig
1、目标架构根据需要勾选
2、在global setting中勾选所有包
3、取消dnsmasq勾选,否则编译报错,和dnsmasq-full冲突
make -j5 V=99 IGNORE_ERRORS=m

网上多建议第一次用单线程编译,实际上openwrt编译很容易报错,反正都是失败,第一次编译还不如用多线程高速编译,报错后再单线程定位错误。如果是全量编译,可以忽略编译级包出错问题。实测全编译大约输出8000+ ipk包。

  • 问题:编译过程缓慢,很多feed包下载失败
  • 解决方案:

编译过程需要下载大量编译文件,大部分文件分散在海外,因涉及长城问题,所以下载缓慢、下载失败都属于正常情况。因为curl下载缓冲五轮,所以一个包可能要尝试5分钟左右。为加快编译速度,可先将dl文件库文件下载到工程目录的dl目录下。

pangzhai@ubuntu:~$ cd openwrt/dl/
pangzhai@ubuntu:/tmp$ wget -r -nd -np https://repository.pangzhai.cn/dl/
  • 问题:passwall下的v2ray无法正常工作,基于vmess协议
  • 解决方案:

1、首先要确定时间是否同步,时间不同步无法连接。调整时区及时间一致。

2、老版本的v2ray服务器,一般配置了alterId,然而新版本的v2ray中这项配置被删除掉了,造成无法连接。可以在openwrt中手动增加alterId项。

  • 通过ssh连接openwrt
  • 修改v2ray配置自动生成脚本
  • 增加alterId = xx, 其中xx的值与服务器配置一致即可。
vi /usr/lib/lua/luci/model/cbi/passwall/api/gen_v2ray.lua
  • 问题:编译时个性化定制方法
  • 解决方案:

1、开启无线及修改SSID

  • 配置文件路径:lede/package/mac80211/files/lib/wifi/mac80211.sh
  • 默认开启无线,把disabled后的参数改成数字0,否则改1 即 option disabled 0
  • 修改默认SSID,即 option ssid     OpenWrt-suibian

2、修改默认软件源

  • 配置路径:lede/package/lean/default-settings/files/zzz-default-settings
#!/bin/sh

uci set luci.main.lang=zh_cn
uci commit luci

uci set system.@system[0].timezone=CST-8
uci set system.@system[0].zonename=Asia/Shanghai
uci commit system

uci set fstab.@global[0].anon_mount=1
uci commit fstab

rm -f /usr/lib/lua/luci/view/admin_status/index/mwan.htm
rm -f /usr/lib/lua/luci/view/admin_status/index/upnp.htm
rm -f /usr/lib/lua/luci/view/admin_status/index/ddns.htm
rm -f /usr/lib/lua/luci/view/admin_status/index/minidlna.htm

sed -i 's/\"services\"/\"nas\"/g' /usr/lib/lua/luci/controller/aria2.lua
sed -i 's/services/nas/g' /usr/lib/lua/luci/view/aria2/overview_status.htm
sed -i 's/\"services\"/\"nas\"/g' /usr/lib/lua/luci/controller/hd_idle.lua
sed -i 's/\"services\"/\"nas\"/g' /usr/lib/lua/luci/controller/samba.lua
sed -i 's/\"services\"/\"nas\"/g' /usr/lib/lua/luci/controller/samba4.lua
sed -i 's/\"services\"/\"nas\"/g' /usr/lib/lua/luci/controller/minidlna.lua
sed -i 's/\"services\"/\"nas\"/g' /usr/lib/lua/luci/controller/transmission.lua
sed -i 's/\"services\"/\"nas\"/g' /usr/lib/lua/luci/controller/mjpg-streamer.lua
sed -i 's/\"services\"/\"nas\"/g' /usr/lib/lua/luci/controller/p910nd.lua
sed -i 's/\"services\"/\"nas\"/g' /usr/lib/lua/luci/controller/usb_printer.lua
sed -i 's/\"services\"/\"nas\"/g' /usr/lib/lua/luci/controller/xunlei.lua
sed -i 's/services/nas/g'  /usr/lib/lua/luci/view/minidlna_status.htm

ln -sf /sbin/ip /usr/bin/ip

sed -i 's#downloads.openwrt.org#mirrors.cloud.tencent.com/lede#g' /etc/opkg/distfeeds.conf
sed -i 's/root::0:0:99999:7:::/root:$1$V4UetPzk$CYXluq4wUazHjmCDBCqXF.:0:0:99999:7:::/g' /etc/shadow
sed -i 's/root:::0:99999:7:::/root:$1$V4UetPzk$CYXluq4wUazHjmCDBCqXF.:0:0:99999:7:::/g' /etc/shadow

sed -i "s/# //g" /etc/opkg/distfeeds.conf
sed -i '/openwrt_luci/ { s/snapshots/releases\/18.06.9/g; }'  /etc/opkg/distfeeds.conf

sed -i '/REDIRECT --to-ports 53/d' /etc/firewall.user
echo 'iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53' >> /etc/firewall.user
echo 'iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53' >> /etc/firewall.user
echo '[ -n "$(command -v ip6tables)" ] && ip6tables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53' >> /etc/firewall.user
echo '[ -n "$(command -v ip6tables)" ] && ip6tables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53' >> /etc/firewall.user

sed -i '/option disabled/d' /etc/config/wireless
sed -i '/set wireless.radio${devidx}.disabled/d' /lib/wifi/mac80211.sh

sed -i '/DISTRIB_REVISION/d' /etc/openwrt_release
echo "DISTRIB_REVISION='R23.2.14'" >> /etc/openwrt_release
sed -i '/DISTRIB_DESCRIPTION/d' /etc/openwrt_release
echo "DISTRIB_DESCRIPTION='OpenWrt '" >> /etc/openwrt_release

sed -i '/log-facility/d' /etc/dnsmasq.conf
echo "log-facility=/dev/null" >> /etc/dnsmasq.conf

rm -rf /tmp/luci-modulecache/
rm -f /tmp/luci-indexcache

exit 0
  • 修改替换命令中的源地址字符串(下面高亮)
  • sed -i 's#downloads.openwrt.org#mirrors.cloud.tencent.com/lede#g' /etc/opkg/distfeeds.conf
  • 修改版本信息、主机名等也可以在这个文件中进行
  • 建议注释掉 sed -i '/openwrt_luci/ { s/snapshots/releases\/18.06.9/g; }' /etc/opkg/distfeeds.conf
  • 不注释掉路径不对,opkg update时报错

3、其他配置文件的覆盖

/www/luci web页面的目录
/etc/banner命令行登陆Openwrt的欢迎信息
/etc/opkg.confOpenwrt的opkg更新源配置文件
/etc/profile系统环境变量
/etc/dnsmasq.confDns解析配置文件
/etc/config/dhcpDhcp服务配置文件
/etc/config/firewall防火墙配置文件
/etc/config/fstab文件系统挂载配置文件
/etc/config/luciLuci界面配置文件
lede/package/base-files/files/etc/config/system系统主机名、时区、NTP及LED配置文件
/etc/config/wireless无线配置文件
相关配置
  • 途径一:
  • 修改lede/package/base-files/files/ 下文件,结构类似openwrt中的根目录
  • 途径二:
  • 在编译目录下新建一个名为files的目录,openwrt在编译的时候,会把files文件夹里的文件覆盖到其根目录 lede/files/
  • 途径三:
  • 上面修改软件源已经提及,lede源码中通过zzz-default-settings文件修改
  • 注意事项:
  • 1、要在非root用户下修改
  • 2、修改完后将所有目录的访问权限改为777
  • 3、可以将路由中的配置导出,放入上述files目录下,不容易出错

发表回复