osnosn

  博客园 :: 首页 :: :: 联系 :: 订阅 :: 管理 ::

刷openwrt固件_Newifi_D2/Y1_对应设备的固件文件名_在线定制固件_owut

刷openwrt固件_Newifi_D2/Y1_对应设备的固件文件名_在线定制固件_owut

转载注明来源: 本文链接 来自osnosn的博客,写于 2019-12-24, 更新2023-05.

Newifi mini, 对应 Y1

Newifi 3, 对应 D2

  • 1个千兆WAN/4个千兆LAN/1个USB3.0/2.4G+5G WIFI/4条天线
  • http://downloads.openwrt.org/
    • 找 Stable Release
    • ramips/mt7621/d-team_newifi-d2-squashfs-sysupgrade.bin
    • d-team_newifi-d2-initramfs-kernel.bin 不用这个。
      这个kernel可以用来直刷设备的flash,或者用来制作启动映像。
      有个参考 【openwrt之initramfs-kernel】。
  • 注: Newifi D2的5G wifi只能工作在36-44,149-161这些频道之间。其他频道5G不工作。

  • 官网原始版openWRT-22.03.3
    • overlay总空间/剩余空间: 25.4MB/24.6MB。账号:root/无密。默认IP: 192.168.1.1 。
  • 推荐immortalwrt-24.10.01
    • 默认中文界面。登录:root/无密。wifi: "ImmortalWrt" 开放网络(无密)。
    • 默认IP:192.168.1.1 。overlay总空间/剩余空间: 22.4MB/21.7MB。
    • wg支持,装 luci-proto-wireguard 即可
  • P3TERX/OpenWrt-Newifi_D2】比较新。
    • 2023-01 测试, 记录。
    • overlay总空间/剩余空间: 9.6MB/8.9MB。账号: root/password。默认IP: 10.0.0.1 。
    • 服务: "系统"中,"TTYD","时间同步","磁盘管理","挂载点(文件系统)"。
      "服务"中,***+,上网时间控制,DDNS,迅雷快鸟,网络唤醒,KMS服务,frpc内网穿透,UPnP。
      "网络存储"中,usb打印服务,硬盘休眠,FTP服务,网络共享smbd,挂载外部smb目录。
      "网络"中,访客网络(wifi),TurboACC网络加速。
  • 【2022.9.9 更新】新路由3/小娱 Lean源码 支持一键更新固件
  • Hyy2001X/AutoBuild-Actions-BETA/releases
    • 2023-01 测试, 记录。
    • overlay总空间/剩余空间: full 512KB/110KB, *** 5.7MB/5.2MB, Lite 9.1MB/8.4MB。账号: root/password。默认IP: 192.168.1.1 。
    • Lite版的服务: "系统"中,"web管理","TTYD","挂载点(文件系统)"。
      "服务"中,广告屏蔽大师Plus+,AdGrard Home,***+,上网时间控制,解锁网易云灰色歌曲,DDNS,smartDNS,网络唤醒,KMS服务,UPnP。
      "网络存储"中,usb打印服务,硬盘休眠,Webd网盘,FTP服务,网络共享smbd。
      "VPN"中,ZeroTier
      "网络"中,Natter,Socat,网速控制,SQM/QoS,TurboACC网络加速,多线多拨,负载均衡。
      Lite版,长时间不重启(超过7个月,也可能是4个月),会死机(无法连接wifi,电脑有线插LAN口无法获取IP,无法登录luci,ping不通wan,wan口不停收发数据包,导致交换机卡死.)。断电重启openwrt就恢复了。
    • ***: "服务"中多了"Open*****","阿里云盘WebDav","微信推送","iperf3服务","udpxy","uHttpd","MWan3分流"。
      "网络存储"中多了"aria2"。"VPN"中多了"PPTP","IPsec"。
    • Full: "服务"中少了"Open*****",多了"阿里云盘WebDav","微信推送","iperf3服务","udpxy","uHttpd","MWan3分流","frpc内网穿透"。
      "网络存储"中多了"aria2"。"VPN"中多了"PPTP","IPsec"。
  • fichenx/OpenWrt
  • IvanSolis1989/OpenWrt-DIY
  • Newifi3-D2刷自定义Openwrt固件指北
  • kizimirua/NEWIFI-D2-OpenWrt
  • kizimirua/NEWIFI-D2-OP
  • a0575/Newifi3d2-OpenWrt
  • ASUS 【hfxunlp/TMRAF

其他

自用,刷官网原始版步骤,(备忘)

Y1 (2023-01 刷机)

  • 通过breed刷入 【22.03.3 的"release版"】。需要等很久。Y1的刷写1分钟,等第一次启动约5分钟,耗时较长。再次重启只要1.5分钟。
  • 设置root密码。关WIFI。改lan IP,避开光猫IP。overlay总/剩余: 10MB/9.5MB。
  • 联网,opkg update
  • 替换 wpad-openssl 包,做 radius 服务。【这里】。
    • remove wpad-basic-wolfssl, 先装hostapd-common,再装wpad-openssl。
      考虑原来使用的是 wolfssl库,用sdk重新编译一个 wpad-wolfssl 的包。避免再多装一个900多kb 的 libopenssl 库。
      英文或数字证书,wpad-wolfssl 支持 OK。
      但是,如果证书中包含中文,wpad-wolfssl 支持不好,客户端通过证书登陆失败,有时会导致hostapd进程退出。
      证书中是否含有中文,wpad-openssl 支持都 OK。
  • 创建 /etc/hostapd/ 配置文件。【这里】。
  • 装入 3proxy 包。【这里】。overlay总/剩余: 10MB/6.3MB。
  • 安装 usb 支持包。ext4支持。见【newifi_D2_新3_lede_插U盘扩容overlay_装可道云
  • 装 upnp (按需)。
  • 这样手工安装比较麻烦,考虑用imagebuilder打包一个自定义bin文件
    但,不知道"release版"的bin中有些什么包。
    方法1:可以先刷到Y1设备上,设备不需联网,用命令opkg list-installed获取包列表。
    方法2,推荐:通过设备中的 /usr/lib/opkg/status文件获取包列表。
    方法3:可以先刷到Y1设备上,设备需要联网,用命令owut list -f fs-all获取包列表。
    Y1的bin是 "u-boot legacy uImage" 格式,lzma压缩的。
    有文章说,应该用 mkimage -l xxx.bin 来读取。安装apt install u-boot-tools之后,发现读取失败,更别说提取文件了。
    又有文章【Help unpacking U-boot firmware】,说可以用【ReFirmLabs/binwalk】来读取。
    安装apt install binwalk之后,确实可以读取了。 binwalk这个包是python3写的,依赖包挺多,装下来占用150MB硬盘空间。
    这篇文章也提到了binwalk【从固件里反编译dtb为dts】。
    binwalk -e xxxx.binbinwalk -Me xxxx.bin 解包。
    用 debian 的 p7zipp7zip-full包的 7za命令, 或windows版的 7-zip, 也可以把 xxx.bin 解压出来, 只是symbolic link解的不对,但不影响看bin里头的文件。
    xxx.itb文件,手工改名为xxx.itb.gz后,7-zip 也能解开。
    在解压出来的文件系统目录中,找到 .../squashfs-root/usr/lib/opkg/status, 应该可以得知原来有些什么ipk包。
    这样就可以在这个基础上,添加/删减ipk,制作自己的bin文件了。见【用ImageBuilder打包自定义img】。
    • 里头有个squashfs的文件,用mount -r -o loop xxx.squashfs test/挂载失败。可以用 unsquashfs -f 强制解开里头的文件。和 binwalk 解出的是一样的。没必要自己解压了。
    • 里头有个"40"文件,其中包含 dtb 的设备信息表(需截取)。可以使用 dtc 命令,对 dtb和 dts文件相互转换。dts是个可读的文本文件。使用apt install device-tree-compiler
      生成的dts文件不包含任何注释,并展开和替换了dtsi中的引用。【使用dtc将dtb转换成dts】。
  • 两种方法获取"release版"的bin中的缺省包。
    用"方法1",得到的列表比较多,有140多个,其中包含很多依赖包。
    用"方法2",得到的列表比较精简,只有30多个。
    用"方法3",得到的列表也比较精简,只有30多个,但设备需要联网。
    我实际使用"方法2"获取缺省包,制作自定义bin,刷入之后,再用 opkg list-installed 获取列表,和"release版"是一样的,除了我另加入的包。也是140多个。
  • imagebuilder 创建过程:
    把需要替换的 hostapd-common, wpad-wolfssl或 wpad-openssl 两个包,copy 到 imagebuilder 的 /packages/ 目录中。
    因为 packages 目录中的新包的版本号,比"release版"的新,所以打包时,会使用这个新包。
    在 imagebuilder 中创建 /ext_root/ 目录。在此目录中添加额外文件,
    创建 /ext_root/etc/hostapd/ 目录,在里头放入配置文件 hostapd.conf 等相关文件,【这里】。
    再创建 /ext_root/lib/upgrade/keep.d/hostapd-radius文件, 内容为 /etc/hostapd/,备份配置时包含这个目录。
    再创建 /ext_root/etc/3proxy/ 目录。在此目录中添加配置文件,【这里】。
    再创建 /ext_root/lib/upgrade/keep.d/3proxy文件, 内容为 /etc/3proxy/,备份配置时包含这个目录。
    再创建 /ext_root/etc/rc.local文件, 加入启动命令,用于替换"release版"的 rc.local 。
    再创建 /ext_root/root/task/task5min.sh 脚本文件。用于定时任务。【这里】。
    再创建 /ext_root/etc/crontabs/root 文件。chmod 600,内容为*/5 * * * * /bin/sh /root/task/task5min.sh,建立定时任务。
    再创建 /ext_root/lib/upgrade/keep.d/root-task文件, 内容为 /root/task/,备份配置时包含这个目录。
    如果要修改 /etc/config/ 中的配置,见【openwrt_imagebuilder_修改缺省配置_system_network_firewall_root密码_制作免配置固件】。
    make image PROFILE="lenovo_newifi-y1" FILES="ext_root" PACKAGES="-wpad-basic-wolfssl wpad-openssl coreutils-shuf htop bind-dig curl rsync diffutils luci-app-wireguard block-mount kmod-fs-exfat kmod-fs-ext4 kmod-fs-vfat kmod-usb-storage 3proxy ...." 参数,生成新的bin包。
    "...." 是 "liblucihttp0 cgi-io luci-lib-base luci-app-opkg rpcd luci-lib-ip libubus-lua libiwinfo-lua luci-mod-system luci-theme-bootstrap px5g-wolfssl luci-mod-status luci-app-firewall lua luci-ssl rpcd-mod-file rpcd-mod-luci luci-proto-ppp luci-mod-admin-full luci-base luci-proto-ipv6 uhttpd liblua5.1.5 luci-lib-nixio liblucihttp-lua luci-lib-jsonc luci rpcd-mod-iwinfo luci-mod-network uhttpd-mod-ubus rpcd-mod-rrdns"
    没装 wget-ssl 。
    通过breed刷入。overlay 总/剩余: 6.8/6.4MB。
    分别插入usb2.0/3.0的U盘,都能正常挂载,支持exfat,vfat,ext4。
  • 另做一个bin,加上 vim vim-full etherwake ncat telnet-bsd ntpdate file proxychains-ng nmap 。(空间6.3/5.8MB)。
    再加coreutils-sleep wget-ssl luasql-sqlite3 xfrpc
    xfrpc 默认是disabled。coreutils-sleep支持ms毫秒级,可以用lua的nixio中的sleep代替。
    插个 U盘,再装 sqlite3-cli nmap-ssl file proxychains-ng tmux wget-ssl
  • 早些时候,做过一次剩余空间对比
    同样是替换一个包,增加两个包。(-wpad-basic-wolfssl wpad-wolfssl libopenssl 3proxy)
    手工用 opkg 安装,overlay 总/剩余 10MB/7.1MB。
    用 imagebuilder 生成bin,通过breed刷入,overlay 总/剩余 9MB/8.5MB。
  • 把其他比较大的包装到U盘上。【opkg安装软件到u盘】。

D2 (2023-01 刷机)

  • op-22.03.3 版。用 make image PROFILE="d-team_newifi-d2" FILES="ext_root" PACKAGES="-wpad-basic-wolfssl wpad-openssl coreutils-shuf htop bind-dig curl rsync diffutils luci-app-frpc luci-app-wireguard luci-app-ddns luci-app-upnp adguardhome block-mount kmod-fs-exfat kmod-fs-ext4 kmod-fs-vfat kmod-usb-storage-uas 3proxy ...." 参数,生成新的bin包。
    "...." 是 "cgi-io libiwinfo-lua liblua5.1.5 liblucihttp0 liblucihttp-lua libubus-lua lua luci luci-app-firewall luci-app-opkg luci-base luci-lib-base luci-lib-ip luci-lib-jsonc luci-lib-nixio luci-mod-admin-full luci-mod-network luci-mod-status luci-mod-system luci-proto-ipv6 luci-proto-ppp luci-ssl luci-theme-bootstrap px5g-wolfssl rpcd rpcd-mod-file rpcd-mod-iwinfo rpcd-mod-luci rpcd-mod-rrdns uhttpd uhttpd-mod-ubus"
    通过breed刷入。overlay 总/剩余: 10.4MB/10.0MB。
    分别插入usb2.0/3.0的U盘,都能正常挂载,支持exfat,vfat,ext4。(通常usb3会支持storage-uas,更快)
    • 其中,
      htop : 进程查看器
      tmux : 终端复用器
      diffutils : diff 命令, 方便对比不同版本的配置文件。
      bind-dig : dig 命令, 自己写ddns脚本用。
      coreutils-shuf : 随机排列,随机数,自建的脚本中用到。
      rsync : 文件同步,方便备份op的配置
      wget-ssl : 完整版wget,支持https走代理
      luci-app-upnp luci-app-ddns : UPNP(有公网ipv4用), 动态域名(IPv4,v6)
      luci-app-watchcat : 网络看门狗。它默认ping 8.8.8.8;这是不可能ping通的,需要修改一下。
      adguardhome : 广告过滤
      block-mount kmod-usb-storage kmod-usb-* kmod-fs-* : 挂载硬盘, U盘支持, u口驱动, 文件系统支持。
      3proxy : 精巧的 http 和 socks5 代理
      fdisk e2fsprogs : 分区 mkfs.ext4的支持。
  • 通过breed刷入。D2的刷写2.5分钟,等待第一次启动1.6分钟。再次启动50秒。
    用op系统自带的固件升级,有时会启动不了。
    overlay 总/剩余空间: 11.4/10.9MB(-wpad-basic-wolfssl wpad-wolfssl adguardhome 3proxy)。
  • 使用 wpad-wolfssl包,用hostapd命令启动radius服务进程。
    如果证书中信息全是英文或数字,wolfssl 支持OK,客户端通过证书登陆OK。
    但是,如果证书中包含中文,wolfssl 支持不好,客户端通过证书登陆失败,有时会导致hostapd进程退出。导致之后的WiFi无法通过任何认证。
    换用 wpad-openssl ,证书中无论是否含中文,支持都没问题
    如果坚持使用 wpad-wolfssl ,可以启动一个每5分钟执行一次的检查脚本。防止其退出。
    #!/bin/sh
    a=$(ps w|grep '/usr/sbin/hostapd -s -B -P /var/run/hostapd-radius.pid /etc/hostapd/hostapd.con[f]')
    if [ -z "$a" ]; then
      echo $(date +%F_%T%z) 'missing,restart.' >> /root/log.hostapd-radius
      /usr/sbin/hostapd -s -B -P /var/run/hostapd-radius.pid /etc/hostapd/hostapd.conf
    fi
    
  • 不用luci-app-frpc,改用xfrpc。默认xfrpc是disabled。自己写脚本启动更方便。
    xfrpc-2.1.606 还不太成熟,会闪退,需要再等等。
  • openwrt-24.10 中 xfrpc-3.05.661
    • luci-app-xfrpc 25.116.62431 界面太老,不匹配 xfrpc-3.05.661。装了没用,不如不装。
    • 安装 opkg install xfrpc,配置 修改 /etc/config/xfrpc 或者使用 uci 命令。
      uci -q batch << EOI
       set xfrpc.common=xfrpc
       set xfrpc.common.enabled='1'
       set xfrpc.common.loglevel='7'
       set xfrpc.common.server_addr='your_frps_ddns_domain'
       set xfrpc.common.server_port='7000'
       set xfrpc.common.token='your_frps_token'
       # Delete default "ssh01"
       del xfrpc.ssh01
       set xfrpc.ssh_test=tcp
       set xfrpc.ssh_test.local_ip='127.0.0.1'
       set xfrpc.ssh_test.local_port='22'
       set xfrpc.ssh_test.remote_port='6022'
       set xfrpc.ht_test=tcp
       set xfrpc.ht_test.local_ip='127.0.0.1'
       set xfrpc.ht_test.local_port='80'
       set xfrpc.ht_test.remote_port='6080'
       #---tcp TO 3proxy's socks5 port with auth, work OK---
       del xfrpc.s5_test
       set xfrpc.s5_test=tcp
       set xfrpc.s5_test.local_ip='127.0.0.1'
       set xfrpc.s5_test.local_port='1080'
       set xfrpc.s5_test.remote_port='61080'
       #---socks5 type NOT work. Do not know how to use!
       #set xfrpc.s5_test2=socks5
       #set xfrpc.s5_test2.remote_port='61081'
       #--- http, NOT tested
       #set xfrpc.s5_test=http
       #set xfrpc.s5_test.local_ip='127.0.0.1'
       #set xfrpc.s5_test.local_port='1080'
       #set xfrpc.s5_test.custom_domains='my_domain'
       #set xfrpc.s5_test.subdomains='mysub'
       #--- https, NOT tested
       #set xfrpc.s5_test=https
       #set xfrpc.s5_test.local_ip='127.0.0.1'
       #set xfrpc.s5_test.local_port='1080'
       #set xfrpc.s5_test.custom_domains='my_domain'
       #set xfrpc.s5_test.subdomains='mysub'
       commit xfrpc
      EOI
      service xfrpc restart  # 重启xfrpc服务
      

使用官方服务,自定义预安装包,定制固件

尝试构建一个和release版相同的固件

op22,op23,op24

  • release版打包的固件
  • immortalwrt, 24.10.1, newifi-D2, 使用页面提供的默认包,默认启动脚本。
    请求构建,耗时约80秒,成功生成一个bin文件。(2025-05测试)
    binwalk -e xxxx.bin 或 7zip 解包 (见前文), 对比 squashfs-root/usr/lib/opkg/status, 自定义版(184个)比"release版"(192个)少8个ipk。
    kmod-crypto-acompress luci-i18n-package-manager-zh-cn luci-app-attendedsysupgrade attendedsysupgrade-common rpcd-mod-rpcsys luci-i18n-attendedsysupgrade-zh-cn kmod-lib-lzo luci-i18n-firewall-zh-cn
    
    首次运行的脚本是/etc/uci-defaults/99-asu-defaults文件。
  • op22,op23,op24,把"release版"的 /usr/lib/opkg/status文件 copy 出来,
    如果有安装在其他介质的软件包,比如"dest usb /sda/pkgs",把/sda/pkgs/usr/lib/opkg/status也copy出来。
    执行以下三句命令
    grep '^Package:' status |cut -d' ' -f 2|sort > pkg-ins   #已经安装的包名
    grep '^Depends:' status |cut -d ' ' -f 2- |sed 's/ (.*)//g'|sed 's/, /\n/g'|sort |uniq > pkg-dep   #已经安装的依赖包名
    echo $(diff pkg-ins pkg-dep |grep '<'|cut -d' ' -f 2)    #已安装包中,去除依赖包
    
    从所有安装包中,去除依赖包。得到immortalwrt的精简的安装包列表 (35个软件包):
    base-files block-mount ca-bundle default-settings-chn dnsmasq-full dropbear firewall4 kmod-crypto-hw-eip93 kmod-gpio-button-hotplug kmod-leds-gpio kmod-lib-lzo kmod-mt7603 kmod-mt76x2 kmod-nf-nathelper kmod-nf-nathelper-extra kmod-usb3 kmod-usb-ledtrig-usbport libustream-openssl logd luci-compat luci-i18n-attendedsysupgrade-zh-cn luci-i18n-firewall-zh-cn luci-i18n-package-manager-zh-cn luci-lib-ipkg mtd odhcp6c odhcpd-ipv6only opkg ppp ppp-mod-pppoe procd-ujail uci urandom-seed urngd wpad-openssl
    
    immortalwrt, 24.10.1, newifi-D2, 使用这个包列表(35个)。
    再次请求构建,耗时约80秒,成功生成一个bin文件。(2025-05测试)
    对比"release版",预安装包完全一样 (192个)。其中24个包的版本比"release版"的新。应该是使用最新版构建的。
  • 如果去官方原始版firmware-selector.openwrt.org请求构建,也可以用这35个包,把其中的default-settings-chn去掉,加上luci即可。
  • 有时候"请求构建",要等很久才开始构建,也许要排队。一旦开始构建,80秒就能完成。
  • 如果需要支持"U盘",要 kmod-usb2或者kmod-usb3usb驱动,再加上kmod-usb-storageusb存储。
    然后再选取希望支持的文件系统kmod-fs-???,比如: vfat, ext4, exfat, f2fs, isofs, jfs, squashfs, ntfs3, ...
  • 如果需要 https访问 luci,可以加入luci-ssl-openssl。因lib库冲突luci-ssl可能装不上。
  • uci 脚本的格式,可以在op中执行 uci show 命令的输出,来设置。
  • 对于newifi-Y1 op24.10.6 设置 uci-defaults 脚本,
    uci -q batch << EOI
    set network.lan.ipaddr='192.168.99.1'  #Y1背面的标签写的是这个IP.
    set network.lan.netmask='255.255.255.0'
    commit network
    set system.led_wifi.dev='phy1-ap0'    #2.4G灯设置,WiFi做热点
    set system.led_wifi5g.dev='phy0-ap0'  #5G灯设置,WiFi做热点
    set system.@system[0].hostname='Newifi-Y1'  #wan口获取IP时会用这个名称
    set system.ntp.enable_server='1'
    commit system
    set wireless.radio0.disabled=1   #关5G
    # set wireless.radio1.disabled=1  #关2.4G
    set wireless.default_radio0.ssid='Newifi-5'
    set wireless.default_radio0.encryption='psk-mixed'  #wpa-psk/wpa2-psk
    set wireless.default_radio0.key='12345678'
    set wireless.default_radio1.ssid='Newifi-2'
    set wireless.default_radio1.encryption='psk-mixed'
    set wireless.default_radio1.key='12345678'
    commit wireless
    EOI
    exit 0
    
    • 手工配置时,如果Y1的wifi做客户端,则用 phy0-sta0, phy1-sta0设备。
      如果拨号上网,internet灯,可以指定 pppoe-wan设备,非拨号和wan灯一样,用 eth0.2设备。
  • 对于newifi-D2 op24.10.6 设置 uci-defaults 脚本,
    uci -q batch << EOI
    set network.lan.ipaddr='192.168.10.1'  #D2背面没写,还是换个不常用的网段.
    set network.lan.netmask='255.255.255.0'
    commit network
    set system.@system[0].hostname='Newifi-D2'  #wan口获取IP时会用这个名称
    set system.ntp.enable_server='1'
    set system.led_wlan2g.dev='phy0-ap0'   #指示灯,做WiFi热点
    set system.led_wlan5g.dev='phy1-ap0'   #指示灯,做WiFi热点
    commit system
    # wifi部分参考Y1的脚本
    EOI
    exit 0
    

op25

  • op25,把"release版"的 /lib/apk/db/installed文件 copy 出来,
    op25不知道如何安装软件包在其他介质,如果有,也copy出来。
    执行以下三句命令。(202606测)
    grep '^P:' installed |cut -d: -f2 |sort > pkg-ins   #已经安装的包名
    grep '^D:' installed |cut -d: -f2 |sed 's/ /\n/g'|sort|uniq > pkg-dep   #已经安装的依赖包名
    echo $(diff pkg-ins pkg-dep |grep '<'|cut -d' ' -f 2)    #已安装包中,去除依赖包
    
    immortalwrt, 25.12.0, newifi-D2, 得到的精简包列表,有34个。
    apk-openssl base-files block-mount ca-bundle default-settings-chn dnsmasq-full dropbear firewall4 kernel kmod-crypto-hw-eip93 kmod-gpio-button-hotplug kmod-leds-gpio kmod-mt7603 kmod-mt76x2 kmod-nf-nathelper kmod-usb3 kmod-usb-ledtrig-usbport libustream-openssl20201210 logd luci-i18n-attendedsysupgrade-zh-cn luci-i18n-firewall-zh-cn luci-i18n-package-manager-zh-cn mtd odhcp6c odhcpd-ipv6only owut ppp ppp-mod-pppoe procd-ujail uci uclient-fetch urandom-seed urngd wpad-openssl
    
  • immortalwrt, 25.12.0, rax3000m emmc, 得到的精简包列表,有40个。(用于 XR30 emmc)
    apk-openssl autocore automount base-files bridger ca-bundle default-settings-chn dnsmasq-full dropbear f2fsck firewall4 fitblk kernel kmod-crypto-hw-safexcel kmod-gpio-button-hotplug kmod-leds-gpio kmod-mt7915e kmod-mt7981-firmware kmod-nf-nathelper kmod-usb3 libustream-openssl20201210 logd mkf2fs mt7981-wo-firmware mtd odhcp6c odhcpd-ipv6only owut ppp ppp-mod-pppoe procd-ujail uboot-envtools uci uclient-fetch urandom-seed urngd wpad-openssl luci-i18n-attendedsysupgrade-zh-cn luci-i18n-firewall-zh-cn luci-i18n-package-manager-zh-cn
    
    定制固件,包含上面40个包,再添加一些包,
    kmod-usb-storage kmod-fs-exfat kmod-fs-ext4 kmod-fs-vfat luci-proto-wireguard diffutils less rsync curl proxychains-ng e2fsprogs parted
    bind-dig coreutils-shuf htop luci-app-upnp miniupnpd-nftables openssh-sftp-server telnet-bsd wget-ssl frpc
    7z bzip2 certtool file haproxy gnutls-utils lsblk ncat nmap-ssl ntpdate openssh-client sqlite3-cli stunnel tcpdump tmux unzip vim-full vim-runtime
    
    如果需要 https访问 luci,可以加入luci-ssl-openssl。因lib库冲突luci-ssl可能装不上。
  • uci 脚本的格式,可以在op中执行 uci show 命令的输出,来设置。
    设置 uci-defaults 脚本,
    uci -q batch << EOI
    del network.lan.ipaddr
    add_list network.lan.ipaddr='192.168.10.1/24'   #XR30机身标签是这个IP
    commit network
    set system.@system[0].hostname='XR30'  #wan口获取IP时会用这个名称
    set system.ntp.enable_server='1'
    add system led             #led设置
    set system.@led[-1].name='white'
    set system.@led[-1].sysfs='mt76-phy0'
    set system.@led[-1].trigger='heartbeat'
    set system.@led[-1].inverted='1'
    commit system
    # 默认WiFi无加密,为了安全,先关掉
    # set wireless.radio0.disabled=1     #关2.4G
    # set wireless.radio1.disabled=1     #关5G
    set wireless.default_radio0.ssid='XR30-2'
    set wireless.default_radio0.encryption='psk-mixed'
    set wireless.default_radio0.key='12345678'
    set wireless.default_radio1.ssid='XR30-5'
    set wireless.default_radio1.encryption='psk-mixed'
    set wireless.default_radio1.key='12345678'
    commit wireless
    
    del dropbear.main.Interface  #去掉默认接口绑定,为了能在wan口开放22端口
    commit dropbear
    set stunnel.dummy.enabled=0  #去掉struunl默认服务
    commit stunnel
    
    # 开放wan上22,80端口,并限制来源IP
    add firewall rule
    set firewall.@rule[-1].name='allow-local-ssh-luci'
    set firewall.@rule[-1].src='wan'
    add_list firewall.@rule[-1].proto='tcp'
    set firewall.@rule[-1].dest_port='22 80'
    set firewall.@rule[-1].target='ACCEPT'
    add_list firewall.@rule[-1].src_ip='192.168.0.0/16'
    add_list firewall.@rule[-1].src_ip='fd00::/8'
    commit firewall
    EOI
    # service haproxy disable 命令,不生效,
    # 改 init.d/, 有效。关闭两个服务,因为未配置。
    /etc/init.d/haproxy disable
    /etc/init.d/frpc disable
    /etc/init.d/ntpdate disable  #这个无需启用
    exit 0
    
    做出来的固件约30MB。
  • 这样,把 XR30 的 wan口接入家里的内网,它会自动获取 IP,就可以通过它的 wan口配置 XR30。
  • 也可以插条网线到 LAN口,配置 XR30。
    • 电脑本身可以上网,比如通过wifi。电脑连接op的网口,设置手工IP,不填网关,不填dns。
      否则电脑通过 dhcp从 op获取 ip和 dns,导致电脑自己无法上网。
    • 电脑在 cmd.exe中运行一个命令行程序 【dnsproxy】或使用 CCproxy 的 dns代理。
      op的 LAN口添加自定义 dns指向电脑。
    • op中, 系统设置中,点击"同步浏览器时间",设置 op正确的时间。否则 apk/opkg访问 https因证书时间问题而报错。
    • 电脑中跑一个 http代理,比如 CCproxy, 3proxy, proxify, vproxy 之类的。
      op中要有 wget-ssl,配置 .wgetrc, 或 proxychians-ng, 让 apk/opkg走电脑的代理,安装软件包。
      wget-ssl约780kB, luci软件包管理页也能用。proxychains约130kB, 仅用于命令行。
      如果上传apk安装包,手动安装,需要--allow-untrusted参数。
    • op就可以通过电脑管理和安装软件包。

用owut命令行工具定制固件

  • 在op中安装 opkg install owut proxychains-ng
    如果要让owut通过代理,只能套用 proxychains, 支持http/socks5, 支持代理认证。
    虽然owut支持 https_proxy=http://192.168.10.10:8888的环境变量,但无法访问https的asu服务器。(2026-07测)
    https_proxy=http://192.168.10.10:8888 owut list -f fs-all  #会报错400, 并且不支持代理认证
    # 配置好 /etc/proxychains.conf
    proxychains owut list -f fs-all  # 访问正常
    
  • ssh 登录op,
    owut list -f fs-all  #也可以得到精简的软件包列表,可用于 firmware-selector定制
    
    owut 只能基于当前op中安装的软件包,定制。(2026-07测)
    cd /tmp/tmp/   #这个是内存盘,速度快,空间超过30MB,并且目录空
    # 自己创建用于 uci-defaults/ 的开机首次运行的脚本, 文件名自定义,比如 /tmp/tmp/my-uci.sh
    owut download -V 24.10.6 -v -k -I my-uci.sh -i /tmp/tmp/firmware.bin --force |tee log.owut
    # log.owut 中有定制固件的下载链接, 带 -v 参数才能看到下载链接
    # -i 不设置默认为 /tmp/firmware.bin; -i 不能仅指定目录
    
    • 固件定制,需要等待排队,信息中会显示前面还有几个排队。排到后生成固件大约30-50秒(newifiD2),然后会下载到本地 /tmp/tmp/firmware.bin (28.3MB)
      • 如果是x86_64或arm64的虚拟机中执行 owut, 则构建需要170-300秒。不指定 -S 参数,默认大小是290兆的rootfs,生成的是一个 vmdk文件,有时是qcow2文件。(2026-07测)
        如果下载链接无法下载,自己改后缀名img.gz,vmdk.gz,qcow2.gz试试。下载的img.gz固件 (23.5MB),可以用sysupgrade命令升级。
      • cmcc-rax3000m 构建固件约170-210秒。生成的是itb文件 (46MB)。
    • 根据 log.owut中的下载链接,可以自行更改文件名。也可以在别的电脑下载这个固件。两三小时内都能下载,一天后已经被删除,不能下载。
    • 基于当前op内的软件包,如果要添加/删除包,可以用 -a 和 -r 参数。(未测试)
  • owut 是个ucode脚本,api操作通过 ucode-mod-uclient模块,如果有兴趣可以自行研究。

openwrt中lua,ucode版base64

  • 也可以添加 coreutil-base64, 此软件包约19kb。
  • 下面的lua版base64,仅适合openwrt中使用。
  • 可以用于"首次启动时运行的脚本(uci-defaults)"
    cat << EOI > /root/base64
    #!/usr/bin/lua
    if arg[1] == "-d" or arg[1] == "-e" then
      local buf=""
      local tmp=""
      while true do
        local block=io.stdin:read(1024)
        if not block then break end
        buf=buf..block
      end
      local nixio=require "nixio"
      if arg[1]=="-d" then
        tmp=nixio.bin.b64decode(buf)
      elseif arg[1]=="-e" then
        tmp=nixio.bin.b64encode(buf)
      end
      io.stdout:write(tmp)
    else
      local usage="\nUsage: %s [-d|-e]\n"
      print(usage:format(arg[0]) )
    end
    EOI
    # base64字符串,来自/root/目录中所有文件的打包  `tar czf - -C /root/ ./ |lua /root/base64 -e`
    # 如果在debian中打包,用 `tar czf - -C /<path>/<目录>/ ./ |base64 -w0` 获取base64字符串
    # 把文件解压到 /root/ 目录中
    echo -n "AAAA---base64----BBBB" |lua /root/base64 -d |tar zxf - -C /root/
    
  • op25 没有预装lua,只有ucode。以下是 ucode 版的 base64。(2026-06)
    cat << EOI > /root/base64.uc
    #!/usr/bin/ucode -S
    import { stdin,stdout } from 'fs';
    if (ARGV[0] == "-d" || ARGV[0] == "-e") {
      let buf="";
      let tmp="";
      while (true) {
        let block=stdin.read(1024);
        if (! block ) break;
        buf=buf + block;
      }
      if (ARGV[0]=="-d") {
        tmp=b64dec(buf);
      } else if (ARGV[0]=="-e") {
        tmp=b64enc(buf);
      }
      stdout.write(tmp);
    } else {
      printf("\nUsage: %s [-d|-e]\n", SCRIPT_NAME);
    }
    EOI
    echo -n "AAAA---base64----BBBB" |ucode /root/base64.uc -d |tar zxf - -C /root/
    

---end---


转载注明来源: 本文链接 https://www.cnblogs.com/osnosn/p/12091292.html 来自osnosn的博客.

posted on 2019-12-24 14:34  osnosn  阅读(6002)  评论(0)    收藏  举报