安装了magisk的pixel4xl升级到安卓13

原因 我的pxiel4xl在线升级安卓13的时候报升级出错,后来找了一下原因,是因为系统更新(OTA)更新的时候,会检测验证system分区是否完整,如果被修改,则会导致更新失败,所以在下载的时候直接提示安装失败。刷Magisk时修改了boot.img这个system分区的文件,所以刷Magisk后不能直接安装OTA更新。 解决方法 准备工作 先关闭开发者设置中的系统自动更新 先卸载magisk 打开Magisk 点击卸载Magisk 点击弹出窗口的还原原厂镜像 还原远程镜像会可能会提示 stock backup does not exist 原厂镜像备份不存在 解决原厂镜像不存在的问题 如果还原成功不需要进行该操作 在设置里面打开关于手机->版本号 我在这里的版本号就是 221005.002 ,你需要注意你的安装版本号 下载对应的镜像 下载网页 找到你手机对应的版本号下载 解压boot.img 在下载好的压缩包找到 image- 开头的压缩包 再从这个image-开头的压缩包里面提取boot.img 制作准备还原的boot.img 在电脑上push boot.img到手机上 adb push boot.img /sdcard/boot.img 进入adb shell adb shell su 分别执行一下命令 SHA1=$(cat $(magisk --path)/.magisk/config | grep SHA1 | cut -d '=' -f 2) gzip -9f /sdcard/boot.img mkdir /data/magisk_backup_${SHA1} mv /sdcard/boot.img.gz /data/magisk_backup_${SHA1}/boot.img.gz chmod -R 755 /data/magisk_backup_${SHA1} chown -R root.root /data/magisk_backup_${SHA1} 上面的操作都成功了就可以了

SpringBoot配置VueJs或者React的history路由

一般在配置前端的文件夹的时候都会指定一个路径,如果你想使用根路径我这种方法不支持根路径,请使用另外一种支持根路径的配置方法。 配置 比如把前端放在 h5 路径下面 把前端打包的文件放在resource/META-INF/h5 目录 修改Spring Boot WebMvc的配置 @Configuration public class WebMvcConfiguration implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/h5/**") .addResourceLocations("classpath:/META-INF/h5/"); } @Override public void addViewControllers(ViewControllerRegistry registry) { // 配置如果用户访问的是根目录直接重定向掉h5页面 registry.addRedirectViewController("/", "h5"); // 配置用户如果访问h5路径但是没有带index.html 转发到 /h5/index.html 路径 registry.addViewController("/h5") .setViewName("forward:/h5/index.html"); registry.addViewController("/h5/") .setViewName("forward:/h5/index.html"); // 一下是为了给前端 history路由的一些配置 registry.addViewController("/h5/{spring:\\w+}") .setViewName("forward:/h5/index.html"); registry.addViewController("/h5/**/{spring:\\w+}") .setViewName("forward/h5/index.html"); registry.addViewController("/h5/{spring:\\w+}/**{spring:?!(\\.js|\\.css)$}") .setViewName("forward:/h5/index.html"); } }

在 centos 上搭建k3s 集群

介绍 k3s k3s 是Rancher Labs(以下简称Rancher)宣布推出轻量级Kubernetes发行版K3s(已开源),这款产品专为在资源有限的环境中运行Kubernetes的研发和运维人员设计。Rancher此次发布的K3s项目,将满足在边缘计算环境中运行在x86、ARM64和ARMv7处理器上的小型、易于管理的Kubernetes集群日益增长的需求。 开始安装 安装 docker 官方文档 这里推荐使用官方的脚本一键安装 curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh 如果你想使用 k3s 默认的 contanerd 容器可以跳过,但是由于我对 contanerd 不熟悉所以我在这里使用的是 docker 安装 k3s server 安装 k3s server 有几种方式,由于 k3s 的执行文件是是放在 github上的,但是在中国由于网速不好可能会导致下载不下来,所以可以先使用其它工具下载可执行文件然后上传到服务器上的 /usr/local/bin 目录下,然后执行 chmod 0755 /usr/local/bin/k3s 命令给与执行权限 直接下载安装: curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server --no-deploy traefik --docker" sh -s - 自己下载安装: curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server --no-deploy traefik --docker" INSTALL_K3S_BIN_DIR="/usr/local/bin" INSTALL_K3S_SKIP_DOWNLOAD=true sh -s - 参数说明: INSTALL_K3S_EXEC k3s 启动的参数 –no-deploy traefik 是说不需要部署 traefik ingress,_–docker_是说使用 docker 容器 INSTALL_K3S_BIN _DIRk3s 可执行文件的目录 INSTALL_K3S_SKIP _DOWNLOAD true 跳过下载k3s 可执行文件

Golang在Windows上同时编译64位和32位可执行程序

Golang 在 Windows 上同时编译64位和32位可执行程序 需要在windows上同时编译需要64位的系统,32位只能编译32位的可执行程序。 编译32位 GOOS=windows GOARCH=386 go build main.go 编译64位 GOOS=windows GOARCH=amd64 go build main.go 遇到的问题 由于在项目中用到了sqlite所以在编译的时候报 exec: “gcc”: executable file not found in %PATH%,这是因为在windows上缺少 gcc,所以在windows 上需要安装 MinGW。 下载 MinGW 进入下载页面 下载 MinGW64,注意请选择 _x86_64-posix-seh MinGW64 8.1.0 下载地址 下载 MinGW32 MinGW32 8.1.0 下载地址 解压 MinGW32和MinGW64 注意需要解压到不同地方,可以平级但是千万不要在同一个目录 编译 在编译之前先设置 MinGW 的环境变量,因为是一次性的所以直接用命令行来设置 64位编译 请注意_C:MinGW64bin_ 应该改为你的64位MinGW路径 set PATH=C:\MinGW64\bin;%PATH% GOOS=windows GOARCH=386 go build main.go * 32位编译 请注意_C:MinGW32bin_ 应该改为你的32位MinGW路径 ```bash set PATH=C:\MinGW32\bin;%PATH% GOOS=windows GOARCH=amd64 go build main.

Spring MVC 自定义静态资源下载

在 Spring MVC 中上传文件后把文件保存在本地,但是数据库保存了一份路径,所有需要实现下载文件,网上的教程一般都是自己写一个Controller 去下载,但是我这里直接使用Spring MVC的 ResourceHttpRequestHandler 实现动态下载静态资源,只需一点点代码然后加一段配置就可以实现下载附件功能。 第一步 自定义一个Handler,并重写 ResourceHttpRequestHandler 的 processPath 方法。 @Slf4j public class CustomResourceHttpRequestHandler extends ResourceHttpRequestHandler { private final UploadRepository uploadRepository; public CustomResourceHttpRequestHandler(UploadRepository uploadRepository) { this.uploadRepository = uploadRepository; } // 重写该方法实现动态获取文件路径,而不是直接获取本地文件的路径 @Override protected String processPath(String path) { Optional<Upload> uploadOption = uploadRepository.findById(path); return uploadOption.map(Upload::getPath) .orElseGet(() -> { log.warn("文件获取path不存在。path={}", path); return null; }); } } 第二部配置 在 Spring Boot 中添加一下配置,注意LocationValues 的路径,必须以 / 结尾,访问本地文件必须有 file: ,不然会访问不到,报404 @Bean public ResourceHttpRequestHandler customResourceHttpRequestHandler(UploadRepository uploadRepository) { ResourceHttpRequestHandler requestHandler = new CustomResourceHttpRequestHandler(uploadRepository); requestHandler.

优雅开启和关闭Spring Cloud项目

第一种方式,使用脚本(不推荐) 使用命令行开启和关闭,直接 kill 掉Spring boot 进程,这样会导致Spring Cloud 项目不会去 注册中心把自己销毁掉,明明项目已经关闭,但是注册中心还是显示在线,而且这样还会有一个弊端,如果需 要监听Spring Boot 项目的生命周期钩子,比如项目启动和关闭,也会监听不到。 /home/dev/app.sh #!/bin/bash APP_NAME=$2 #使用说明,用来提示输入参数 usage() { echo "Usage: sh 执行脚本.sh [start|stop|restart|status]" exit 1 } #检查程序是否在运行 is_exist(){ count=`ps -ef |grep java|grep $APP_NAME|grep -v grep|wc -l` #如果不存在返回1,存在返回0 if [ $count == 0 ]; then return 1 else return 0 fi } #启动方法 start(){ is_exist if [ $? -eq "0" ]; then echo "${APP_NAME} is already running. pid=${pid} ." else SHELL_FOLDER=$(cd "$(dirname "$0")";pwd) JAR_PATH="$SHELL_FOLDER/.