hayse 发表于 2024-7-23 16:24

使用imagebuilder按需制作刷入即用0配置的op固件

本帖最后由 hayse 于 2024-7-24 09:38 编辑

最近op更新了最新的稳定版23.05.4,恰好很久没有升级,索性把前段时间折腾中学到的整理记录分享一下。
imagebuilder是op官方的工具,大大简化了固件的编译过程,接触他是因为当时需要扩容分区,
虽然网上教程五花八门但还是觉得不够优雅,且繁琐,并且在后续使用过程中可能存在各类小问题,最终学会了这个工具一劳永逸。

我的路由器是R4S,固件版本是immortal,编译系统是ubuntu22.04,希望对你有所帮助
我的水平也是菜鸟一只,只能在浅显的应用层面,对着一些教程,能照猫画虎一下,有错误还请大佬们指点

一,准备编译环境
使用非root用户登陆ubuntu,安装编译依赖
sudo apt update
sudo apt install build-essential libncurses5-dev libncursesw5-dev \
zlib1g-dev gawk git gettext libssl-dev xsltproc rsync wget unzip python


二,下载目标平台Imagebuilder工具
immortal的版本号比官方的小一个数,23.05.3就是官方的23.05.4,不知为何这么设计,可以查看内核得知。
https://downloads.immortalwrt.org/
进入网页后选择你自己想要的版本,以我的r4s为例
https://downloads.immortalwrt.org/releases/23.05.3/targets/rockchip/armv8/

右键复制链接,在ubuntu中使用wget下载
wget https://downloads.immortalwrt.org/releases/23.05.3/targets/rockchip/armv8/immortalwrt-imagebuilder-23.05.3-rockchip-armv8.Linux-x86_64.tar.xz

解压
tar -Jxvf immortalwrt-imagebuilder-23.05.3-rockchip-armv8.Linux-x86_64.tar.xz

三,制作固件
为了屏幕清爽,把解压出来的目录重名为op,并进入该目录 cd op
输入 make info 查看一些基础信息
Default Packages:固件默认包含的pkg
往下拉可以看到r4s的信息,friendlyarm_nanopi-r4s为 "profile-name"
friendlyarm_nanopi-r4s:
    FriendlyARM NanoPi R4S
    Packages: kmod-r8168
    hasImageMetadata: 1
    SupportedDevices: friendlyarm,nanopi-r4s

如果你没有其他需求,输入以下命令即可编译最原始的固件,一些参数是op目录下的隐藏文件.config里定义的
make image PROFILE="friendlyarm_nanopi-r4s"
结束后固件在这里:op/bin/targets/rockchip/armv8/

如果你想要自定义分区大小为2G,添加正在使用的插件,添加第三方的插件(无法在immortal固件中opkg安装的)
修改默认固件密码,lan口登陆ip,pppoe账号密码,一比一复制正在用的固件的配置文件
达到刷入后启动即用,0配置的效果那么就需要一些额外的步骤,用到的命令如下
make image PROFILE="profile-name" PACKAGES="pkg -pkg" FILES="files" ROOTFS_PARTSIZE="2048"

1,自定义设置
需要把正在使用固件的/etc/config等配置文件集成在固件里,为了方便,我把命令写成一个脚本来执行
为了使用scp命令方便(不用反复输入密码),我的op开启了key登陆,并把key放在/home/ubuntu/.ssh/下,文件名为opr4s
把以下内容复制到文本,命名为scp.sh保存在op目录下,添加执行权限chmod +x scp.sh
---------
#!/bin/bash

# 在当前目录下创建本地目标文件夹
mkdir -p ./files/etc

# 复制远程目录和文件到当前目录下的files文件夹
scp -i "/home/ubuntu/.ssh/opr4s" -r root@192.168.2.1:/root                         ./files/
scp -i "/home/ubuntu/.ssh/opr4s" -r root@192.168.2.1:/etc/config                 ./files/etc/
scp -i "/home/ubuntu/.ssh/opr4s" -r root@192.168.2.1:/etc/alist                 ./files/etc/
scp -i "/home/ubuntu/.ssh/opr4s" -r root@192.168.2.1:/etc/daed                 ./files/etc/
scp -i "/home/ubuntu/.ssh/opr4s" -r root@192.168.2.1:/etc/crontabs                 ./files/etc/
scp -i "/home/ubuntu/.ssh/opr4s" -r root@192.168.2.1:/etc/dropbear         ./files/etc/
scp -i "/home/ubuntu/.ssh/opr4s" -r root@192.168.2.1:/etc/sysctl.d                 ./files/etc/
scp -i "/home/ubuntu/.ssh/opr4s"   root@192.168.2.1:/etc/rc.local                 ./files/etc/
----------
可以按需保留自己实际需要的,理论上这些配置文件一比一覆盖即可达到和原固件一样的效果
但官方更推荐使用uci-defaults脚本来自定义,
相比自定义 files 有一个好处是,OpenWrt 有一些配置是在启动时动态生成的,而 files 会覆盖掉这些逻辑生成的配置
而 uci-defaults 的uci命令 仅增量集成所需自定义. 这有助于最大限度地减少与自动生成的设置冲突,这些设置可能在版本之间更改.

水平有限,并不能深入理解这里的不同和具体影响,所以我在/etc/config里只保留了一些插件的配置文件
相对系统的一些基础功能的配置文件尽量不覆盖,使用uci-defaults来设置固件密码,lan口ip,pppoe账密
在/files/etc目录新建名为uci-defaults文件夹,创建一个内容如下的脚本,文件名随意
这里的uci set参数,可以在你正常使用的固件中查看,命令为uci show
uci show network 即可查看相关信息
-----------
#!/bin/sh
passwd root << EOI
admin
admin
EOI

uci -q batch << EOI
set network.lan.ipaddr='192.168.2.1'

set network.wan=interface
set network.wan.device='eth0'
set network.wan.proto='pppoe'
set network.wan.username='123456'
set network.wan.password='123456'
set network.wan.ipv6='auto'
commit network
EOI
exit 0
---------

2,添加插件,第三方插件(无法在immortal固件中opkg安装的),删除集成的插件
在当前op系统里输入以下命令来得到自己系统里所有的插件
echo $(opkg list-installed | sed -e "s/\s.*$//")
一般情况下内容会非常多,很多pkg是安装插件时自动安装的,而我们一般只会主动安装带有界面的插件如luci-app-alist
使用grep筛选luci
echo $(opkg list-installed | sed -e "s/\s.*$//" | grep 'luci') 内容会少很多,再根据实际自行添加非luci插件,比如iperf3,btop

需要注意的是,第三方插件需要下载ipk放入packages目录里,并使用pkg包名来集成。
比如aliyundrive插件,immortal自带源没有,ipk名称可能叫aliyundrive-webdav_2.3.3-1_aarch64_generic.ipk
实际他的pkg名称为aliyundrive-webdav,pkg包名可以在已经安装了固件中:系统-软件包-已安装中筛选查看
如果不方便也可解压ipk文件来查找pkg包名,这些请自行尝试。

有时候因为一些插件导致报错编译不过,想要删除插件时,在pkg前面加上-即可
--------------
以下内容为我最终make命令,里面一些pkg其实只需要有i18n的就行,其他的会自动安装,直接复制粘贴的,懒得去调整了,
为了方便操作,将内容写入到文本里,命名为make.sh放在op目录下执行
make image PROFILE="friendlyarm_nanopi-r4s" PACKAGES="atftpd iperf3 btop pppoe-discovery fping screen libopenssl-legacy wget-ssl libopenssl3 jsonfilter luci-app-adblock luci-app-alist luci-app-aria2 luci-app-arpbind luci-app-daed luci-app-filebrowser luci-app-firewall luci-app-opkg luci-app-samba4 luci-app-sqm luci-app-uhttpd luci-app-upnp luci-app-wechatpush luci-app-wol luci-base luci-compat luci-i18n-adblock-zh-cn luci-i18n-alist-zh-cn luci-i18n-aria2-zh-cn luci-i18n-arpbind-zh-cn luci-i18n-attendedsysupgrade-zh-cn luci-i18n-base-zh-cn luci-i18n-daed-zh-cn luci-i18n-diskman-zh-cn luci-i18n-filebrowser-zh-cn luci-i18n-firewall-zh-cn luci-i18n-hd-idle-zh-cn luci-i18n-opkg-zh-cn luci-i18n-samba4-zh-cn luci-i18n-sqm-zh-cn luci-i18n-uhttpd-zh-cn luci-i18n-upnp-zh-cn luci-i18n-wechatpush-zh-cn luci-i18n-wol-zh-cn luci-lib-fs luci-lib-ip luci-lib-ipkg luci-lib-jsonc luci-lua-runtime -luci-app-aliyundrive-webdav" FILES="files" ROOTFS_PARTSIZE="2048"

ps:op官方文档
https://openwrt.org/zh/docs/guide-user/additional-software/imagebuilder

因为这段时间还换过光猫,多说几句,武汉地区,
移动宽带,原光猫是华为8546X6-30换中兴7015TV3成功
联通FTTR宽带,原光猫是中兴,换移动版本的中兴光猫也成功
有想换光猫有顾虑的可以参考一下,教程都是网上那些。

wqzxhpx 发表于 2024-7-23 16:31

复杂,不过还是支持

hayse 发表于 2024-7-23 16:36

wqzxhpx 发表于 2024-7-23 16:31
复杂,不过还是支持

相比全新编译已经简化了很多,刚开始我也觉得复杂,麻烦一次,以后会非常方便。
固件更新只需要下载新版本的imagebuilder,scp脚本传文件,make脚本执行就完了。

高子 发表于 2024-7-23 17:04

最新版本较老版本,有什么肉眼可见,或者可感知的变化么?

我还停留在 OpenWrt R22.8.20

hayse 发表于 2024-7-23 17:18

高子 发表于 2024-7-23 17:04
最新版本较老版本,有什么肉眼可见,或者可感知的变化么?

我还停留在 OpenWrt R22.8.20 ...

那倒没有,很多东西都是这样,如果抱着能用即可的心态,确实不用换。
相对一些很老的版本,要我说最大的可能是内核上的升级,能使用daed插件,
个人感知比其他科学插件好用些

高子 发表于 2024-7-23 17:26

hayse 发表于 2024-7-23 17:18
那倒没有,很多东西都是这样,如果抱着能用即可的心态,确实不用换。
相对一些很老的版本,要我说最大的 ...

好的,感谢,有时间折腾一下,好久没折腾了。

九天御风 发表于 2024-7-23 19:05

我是用的一个在线编译的网页,只要勾上自己想要的插件然后等上一个多小时就可以下载编译好的了

fifaplayer88 发表于 2024-7-23 19:21

九天御风 发表于 2024-7-23 19:05
我是用的一个在线编译的网页,只要勾上自己想要的插件然后等上一个多小时就可以下载编译好的了 ...

兄弟能否共享这个网站

hayse 发表于 2024-7-24 09:32

九天御风 发表于 2024-7-23 19:05
我是用的一个在线编译的网页,只要勾上自己想要的插件然后等上一个多小时就可以下载编译好的了 ...

这类网站背后的东西就是imagebuilder,但是自由度并不高,稳定性还有问题。

eclipse126 发表于 2024-7-24 09:43

没有硬件nat,干嘛不用原版的op,用这些第三方的

hayse 发表于 2024-7-24 09:50

eclipse126 发表于 2024-7-24 09:43
没有硬件nat,干嘛不用原版的op,用这些第三方的

immortal和官方几乎一样了,就是多了一些增加易用性的默认插件,官方默认都没有luci界面,小白遇到一脸懵。另外就是多一些科学插件,他的源维护的很好,直接在软件包里更新插件都不会有问题。确实很多杂交的都不建议通过软件包去更新,非常容易把系统弄崩。

九天御风 发表于 2024-7-24 09:50

fifaplayer88 发表于 2024-7-23 19:21
兄弟能否共享这个网站

openwrt.ai 就是这个

axiauk 发表于 2025-2-6 13:05

本帖最后由 axiauk 于 2025-2-6 13:08 编辑

这也是我正在用的方法,最简单。写好脚本docker 一键搞定。
这个里面我增加了两步。
第一步先用docker 版本的sdk 编译生成自己使用的第三方软件,自动导入packages目录
第二步将所有配置参数写入/files/etc/uci-defaults/99-defaults
第三步用这种方法直接将自己的默认配置和第三方软件生成为最新官方ROM
每半年生成一次ROM更新,就够了。

sufee2000 发表于 2025-2-6 16:47

谢谢楼主分享!个性化软路由!
页: [1]
查看完整版本: 使用imagebuilder按需制作刷入即用0配置的op固件