用于对openwrt固件特殊定制.

我对patch文件结构不太了解,这里只是记录我自己本次使用.

 

patch的作用

如果你要对源码进行修改有两个方法

一,找到源码文件,修改代码

二,使用patch文件打补丁.

 

 

直接修改源码有个严重的弊端

当你更新openwrt源码,或者更新feeds,或者更新包的时候,你会发现你修改的代码被覆盖了.

 

 

patch文件就是为了解决这个弊端出来的,你可以忽略官方更新,只需要更新后打下补丁,那么代码就修改了.

 

 

 

演示一个目标

当uhttpd启用ssl之后,会默认开启 http跳转https

你打开http://192.168.1.1的时候,会自动跳转到https://192.168.1.1而且浏览器还会提示证书错误.

 

尝试制作一个补丁文件,来处理这个问题.

 

 

找到配置文件

package/network/services/uhttpd/files/uhttpd.config

 

 

编写修改

 

原理:

其实只需要在uhttpd配置中option redirect_https    1 改成0即可

 

我这里还做了一些其他定制.(仅自己用)

 

 

1,复制文件

到自己一个临时目录,我在openwrt下建立一个yake_fix文件夹,用于临时存放各种自己修改后的文件.

mkdir yake_fix

cp package/network/services/uhttpd/files/uhttpd.config yake_fix

 

2,修改文件

修改是修改拷贝后的文件,也就是拷贝到yake_fix目录的uhttpd.config

这个编辑看自己需求.

 

我做了3个修改

  • 关掉http跳转https
  • 去掉默认的IPV6访问(仅我个人需要)
  • 新添加一个ipv6专用站点(仅我个人需要)

 

生成patch文件

 

不需要自己处理,用指令生成

diff 如果没有安装自己安装一个.

 

 

diff -Naur   package/network/services/uhttpd/files/uhttpd.config yake_fix/uhttpd.config  >uhttpd-disable-https-redirect.patch

 

将在openwrt的主目录生成一个uhttpd-disable-https-redirect.patch

 

patch文件内容

 

第二行我修改过. 将文件名直接是源文件名.

--- package/network/services/uhttpd/files/uhttpd.config	2020-09-30 18:26:48.638203386 +0800
+++ package/network/services/uhttpd/files/uhttpd.config	2020-09-30 18:29:43.094199445 +0800
@@ -3,14 +3,14 @@
 
 	# HTTP listen addresses, multiple allowed
 	list listen_http	0.0.0.0:80
-	list listen_http	[::]:80
+	#list listen_http	[::]:80
 
 	# HTTPS listen addresses, multiple allowed
 	list listen_https	0.0.0.0:443
-	list listen_https	[::]:443
+	#list listen_https	[::]:443
 
 	# Redirect HTTP requests to HTTPS if possible
-	option redirect_https	1
+	option redirect_https	0
 
 	# Server document root
 	option home		/www
@@ -112,6 +112,27 @@
 #	list httpauth prefix_user
 
 
+config uhttpd 'web'
+        list listen_http '[::]:80'
+        list listen_https '[::]:443'
+        option home '/web'
+        option rfc1918_filter '1'
+        option max_requests '3'
+        option max_connections '100'
+        option cert '/etc/ipv6.getce.cn.crt'
+        option key '/etc/ipv6.getce.cn.key'
+        option script_timeout '60'
+        option network_timeout '30'
+        option http_keepalive '20'
+        option tcp_keepalive '1'
+        option ubus_prefix '/ubus'
+        option redirect_https '1'
+        option error_page '/404.html'
+        option no_dirlists '1'
+        option no_symlinks '1'
+
+
+
 # Defaults for automatic certificate and key generation
 config cert defaults
 

 

 

 

打patch

patch -p0 < uhttpd-disable-https-redirect.patch 

-p后面的0是补丁编号.

 

然后编译openwrt会自动应用修改的后的文件.

 

补丁还原

 

patch -R 文件 < 补丁

 

 

参考链接

https://blog.csdn.net/qq_39522922/article/details/77648071

https://blog.csdn.net/shenwanjiang111/article/details/52252249

https://github.com/unwireddevices/openwrt/blob/master/uhttpd-disable-https-redirect.patch

https://www.cnblogs.com/xuhongchuan/p/3180013.html