当前位置: 首页 > news >正文

openssl3.2 - update debian12‘s default openssl to openssl3.2

文章目录

    • openssl3.2 - update debian12's default openssl to openssl3.2
    • 概述
    • 笔记
    • 回到debian12自带的openssl版本
    • 从源码编译安装最新版的openssl
    • 配置ssl访问
    • END

openssl3.2 - update debian12’s default openssl to openssl3.2

概述

在debian12虚拟机中编译了openssl3.2(openssl3.2 - 编译)
只做openssl3.2的实验没问题, 但是用SSH连接就不行了. 原因在于系统中的openssl还是旧版.

lostspeed@debian12d4x64:~$ apt show openssl
Package: openssl
Version: 3.0.11-1~deb12u2
Priority: optional
Section: utils
Maintainer: Debian OpenSSL Team <pkg-openssl-devel@alioth-lists.debian.net>
Installed-Size: 2,346 kB
Depends: libc6 (>= 2.34), libssl3 (>= 3.0.9)
Suggests: ca-certificates
Homepage: https://www.openssl.org/
Tag: implemented-in::c, interface::commandline, protocol::ssl, role::program,scope::utility, security::cryptography, security::integrity,use::checking
Download-Size: 1,419 kB
APT-Sources: http://mirrors.tuna.tsinghua.edu.cn/debian bookworm/main amd64 Packages
Description: 安全套接字层工具箱 - 加密工具本软件包是 OpenSSL 项目对应用于在互联网上进行安全通信的 SSL 和 TLS 加密协议的一个实现。.它包含了通用命令行工具 /usr/bin/openssl,主要用于各类加密操作,例如:* 创建 RSA、DH 和 DSA 密钥选项;* 创建 X.509 证书、CSR 和 CRL;* 计算消息摘要;* 对密文的加密和解密;* 测试 SSL/TLS 客户端和服务端;* 处理 S/MIME 签名和加密的邮件。lostspeed@debian12d4x64:~$ openssl version -a
OpenSSL 3.2.0 23 Nov 2023 (Library: OpenSSL 3.2.0 23 Nov 2023)
built on: Sat Jan 20 13:03:36 2024 UTC
platform: linux-x86_64
options:  bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O0 -g -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL
OPENSSLDIR: "/usr/local/openssl_3d2/common"
ENGINESDIR: "/usr/local/openssl_3d2/lib64/engines-3"
MODULESDIR: "/usr/local/openssl_3d2/lib64/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0xfffa32034f8bffff:0x18405f5ef1bf27eb
lostspeed@debian12d4x64:~$ 

从以上命令可以看出:

  • debian12系统中看到的openssl还是3.0.11-1~deb12u2
  • 但是我自己编译后, 可以在本地运行的openssl是最新的稳定版 3.2.0

今天查了一下资料, 准备将debian12系统中的openssl也换成最新版的openssl3.2

笔记

查看libssl-dev也是旧版

lostspeed@debian12d4x64:~$ apt show libssl-dev
Package: libssl-dev
Version: 3.0.11-1~deb12u2
Priority: optional
Section: libdevel
Source: openssl
Maintainer: Debian OpenSSL Team <pkg-openssl-devel@alioth-lists.debian.net>
Installed-Size: 12.6 MB
Depends: libssl3 (= 3.0.11-1~deb12u2)
Suggests: libssl-doc
Homepage: https://www.openssl.org/
Tag: devel::lang:c, devel::library, implemented-in::TODO, implemented-in::c,protocol::ssl, role::devel-lib, security::cryptography
Download-Size: 2,430 kB
APT-Sources: http://mirrors.tuna.tsinghua.edu.cn/debian bookworm/main amd64 Packages
Description: Secure Sockets Layer toolkit - development filesThis package is part of the OpenSSL project's implementation of the SSLand TLS cryptographic protocols for secure communication over theInternet..It contains development libraries, header files, and manpages for libssland libcrypto.lostspeed@debian12d4x64:~$ 

回到debian12自带的openssl版本

sudo apt update
sudo apt install openssl libssl-dev

现在查看openssl版本, 已经是linux自带的旧版本.
但是环境变量(OPENSSLDIR, ENGINESDIR, MODULESDIR)还是自己编译的新版的路径

openssl version -a
OpenSSL 3.0.11 19 Sep 2023 (Library: OpenSSL 3.2.0 23 Nov 2023)
built on: Sat Jan 20 13:03:36 2024 UTC
platform: linux-x86_64
options:  bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O0 -g -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL
OPENSSLDIR: "/usr/local/openssl_3d2/common"
ENGINESDIR: "/usr/local/openssl_3d2/lib64/engines-3"
MODULESDIR: "/usr/local/openssl_3d2/lib64/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0xfffa32034f8bffff:0x18405f5ef1bf27eb

到现在为止, 就回到了debian12自带的openssl环境.

从源码编译安装最新版的openssl

sudo apt update
sudo apt install build-essential checkinstall zlib1g-devmkdir /home/lostspeed/openssl
cd /home/lostspeed/openssl# 现在最新版本为3.2.1了, 不过为了自己学习openssl, 还是下载3.2.0版本
wget --no-check-certificate https://www.openssl.org/source/openssl-3.2.0.tar.gztar -xf openssl-3.2.0.tar.gzcd openssl-3.2.0/./config --debug --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib# 指定用和CPU数量一样的线程数来干活(锦上添花, 直接用make就可以)
make -j$(nproc)make testsudo make install# openssl3.2 已经安装到了 /usr/local/ssl, 看一下
lostspeed@debian12d4x64:~/openssl/openssl-3.2.0$ ls -l /usr/local/ssl
总计 68
drwxr-xr-x 2 root root  4096  2612:38 bin
drwxr-xr-x 2 root root  4096  2612:38 certs
-rw-r--r-- 1 root root   412  2612:38 ct_log_list.cnf
-rw-r--r-- 1 root root   412  2612:38 ct_log_list.cnf.dist
drwxr-xr-x 3 root root  4096  2612:38 include
drwxr-xr-x 5 root root  4096  2612:38 lib64
drwxr-xr-x 2 root root  4096  2612:38 misc
-rw-r--r-- 1 root root 12328  2612:38 openssl.cnf
-rw-r--r-- 1 root root 12328  2612:38 openssl.cnf.dist
drwxr-xr-x 2 root root  4096  2612:38 private
drwxr-xr-x 4 root root  4096  2612:39 share

配置openssl库选项, 配置目录在 /etc/ld.so.conf.d

lostspeed@debian12d4x64:~/openssl/openssl-3.2.0$ ls -l /etc/ld.so.conf.d
总计 16
-rw-r--r-- 1 root root  38 20233月18日 fakeroot-x86_64-linux-gnu.conf
-rw-r--r-- 1 root root  44 20229月23日 libc.conf
-rw-r--r-- 1 root root  91  1月20日 14:59 openssl.conf
-rw-r--r-- 1 root root 100  9月30日 16:31 x86_64-linux-gnu.conf

里面有我以前失败实验创建的openssl.conf, 删掉.

sudo rm /etc/ld.so.conf.d/openssl.conf 

建立编辑新的openssl库配置文件

sudo vi /etc/ld.so.conf.d/openssl-3.2.0.conf# 添加库路径
/usr/local/ssl/lib64# 关闭保存
:wq# 重新载入so
sudo ldconfig -v

可以看到自己编译的openssl.so已经被载入了

/usr/local/ssl/lib64: (from /etc/ld.so.conf.d/openssl-3.2.0.conf:1)libssl.so.3 -> libssl.so.3libcrypto.so.3 -> libcrypto.so.3

配置路径
先备份一下

sudo cp /etc/environment /etc/environment.bk
# 这个文件在我这默认是空的
# 但是直接看PATH变量是有内容的
echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

编辑配置文件

sudo vi /etc/environment# 添加如下内容
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/snap/bin:/usr/local/ssl/bin"

比较$PATH和添加的内容, 可以发现, 多添加了一些路径, 如下:

$PATH                 /usr/local/bin:          /usr/bin:      /bin:/usr/local/games:/usr/gamesPATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/snap/bin:/usr/local/ssl/bin"

现在看openssl版本还是旧的.

将opessl的预安装文件改名

sudo mv /usr/bin/c_rehash /usr/bin/c_rehash.bk# 用openssl看版本时, 用的就是下面的旧openssl
sudo mv /usr/bin/openssl /usr/bin/openssl.bk

更新环境变量

sudo source /etc/environment

这时, 再看openssl版本, 已经是新版的. 而且用的openssl位置, 也是自己源码编译安装后的位置.

lostspeed@debian12d4x64:~/openssl/openssl-3.2.0$ openssl version -a
OpenSSL 3.2.0 23 Nov 2023 (Library: OpenSSL 3.2.0 23 Nov 2023)
built on: Tue Feb  6 04:26:44 2024 UTC
platform: linux-x86_64
options:  bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O0 -g -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DZLIB
OPENSSLDIR: "/usr/local/ssl"
ENGINESDIR: "/usr/local/ssl/lib64/engines-3"
MODULESDIR: "/usr/local/ssl/lib64/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0xfffa32034f8bffff:0x18405f5ef1bf27eb
lostspeed@debian12d4x64:~/openssl/openssl-3.2.0$ which openssl
/usr/local/ssl/bin/openssl
lostspeed@debian12d4x64:~/openssl/openssl-3.2.0$ 

确认更新后的环境变量

echo "$PATH" | tr ':' '\n'/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/local/games
/usr/games
/snap/bin
/usr/local/ssl/bin

可以看到自己编译安装的openssl路径, 已经在PATH变量值的尾巴上.
确认现在系统中用的openssl位置和版本

lostspeed@debian12d4x64:~/openssl/openssl-3.2.0$ which openssl
/usr/local/ssl/bin/openssl
lostspeed@debian12d4x64:~/openssl/openssl-3.2.0$ type openssl
openssl 已被录入哈希表 (/usr/local/ssl/bin/openssl)
lostspeed@debian12d4x64:~/openssl/openssl-3.2.0$ openssl version
OpenSSL 3.2.0 23 Nov 2023 (Library: OpenSSL 3.2.0 23 Nov 2023)
lostspeed@debian12d4x64:~/openssl/openssl-3.2.0$ 

重启开机后, 发现环境变量不好使, 必须自己手工执行一下才行.
将环境变量开机启动.

cd /etc
sudo cp ./profile ./profile.bk
sudo vi ./profile# 在export PATH 上面加一行改掉, 将openssl路径加上去.
if [ "$(id -u)" -eq 0 ]; thenPATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else# 将这句话改为包含openssl路径, 要改的和上面手工运行的环境变量文件(/etc/environment)内容相同PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/snap/bin:/usr/local/ssl/bin"
fi
export PATH# :wq
#重新开机启动

这回开机重启后, 进入桌面, 可以正常运行自己编译安装好的openssl.

配置ssl访问

如果只能在虚拟机桌面操作, 那太难受了, 配置为可以用SSH客户端远程访问.
最好是升级openssl之前, 就将ssh访问配好.
debian12.4配置

然后按照这篇笔记, 升级到openssl3.2

运行ssh --version时, 会出现下面的报错.

lostspeed@debian12d4x64:/$ ssh --version
OpenSSL version mismatch. Built against 300000a0, you have 30200000

此时, 只需要运行以下一句话就能搞定.

sudo mv /etc/ld.so.cache /etc/ld.so.cache_bak

此时, 再将SSH配置执行执行一下. 确认SSH配置的没问题.

sudo systemctl start ssh
sudo systemctl enable ssh
sudo systemctl status ssh

然后确定debian12所在的IP.

ip addr

然后去win10主机上, 先ping通debian12, 然后用SSH连接, 搞定.

重启后, 运行openssl3.2, 发现so用的是旧版本.
做软连接, 替换掉/usr/lib/x86_64-linux-gnu中的openssl so

cd /usr/lib/x86_64-linux-gnu
sudo mv ./libssl.so.3 ./libssl.so.3_bk
sudo ln -s /usr/local/ssl/lib64/libssl.so.3 /usr/lib/x86_64-linux-gnu/libssl.so.3sudo mv ./libcrypto.so.3 ./libcrypto.so.3.bk
sudo ln -s /usr/local/ssl/lib64/libcrypto.so.3 /usr/lib/x86_64-linux-gnu/libcrypto.so.3

现在openssl是新版的了.

现在看看ssh

ssh -V
OpenSSL version mismatch. Built against 300000a0, you have 30200000

看看重新配置一下ssh行不行

sudo systemctl start ssh
sudo systemctl enable ssh
sudo systemctl status ssh

没报错.
重新启动试试.
查看ssh状态, 失败
重新用上面3条语句配置试试.
不行啊

lostspeed@debian12d4x64:~$ sudo systemctl start ssh
Job for ssh.service failed because the control process exited with error code.
See "systemctl status ssh.service" and "journalctl -xeu ssh.service" for details.
lostspeed@debian12d4x64:~$ ssh -V
OpenSSL version mismatch. Built against 300000a0, you have 30200000

好像必须要从源码编译ssh才行.
已经从源码编译安装配置了openSSH(debian12 - openssh-9.6.P1的编译安装)
debian12重启后, 已经可以从win10用SSH客户端链接debian12 😛

END

相关文章:

openssl3.2 - update debian12‘s default openssl to openssl3.2

文章目录 openssl3.2 - update debian12s default openssl to openssl3.2概述笔记回到debian12自带的openssl版本从源码编译安装最新版的openssl配置ssl访问END openssl3.2 - update debian12’s default openssl to openssl3.2 概述 在debian12虚拟机中编译了openssl3.2(ope…...

VUE2和VUE3区别对比一览

## Vue3总结 ### 官方文档 * [Vue3](https://v3.cn.vuejs.org/api/options*data.html) * [Vue2](https://vuejs.bootcss.com/api/) ### Vue3相对于Vue2的语法特性#### 1.获取数据 * vue2 javascript export default {data() {return {name: myName,}},mounted() {console.log(t…...

Linux - updatedb 命令

1. 功能 updatedb 命令用来创建或更新slocate命令所必需的数据库文件。updatedb 命令的执行过程较长&#xff0c;因为在执行时它会遍历整个系统的目录树&#xff0c;并将所有的文件信息写入 slocate 数据库文件中。 补充说明&#xff1a;slocate 本身具有一个数据库&#xff…...

云计算市场分析

目录 一、云计算市场概述 1.1 概述 二、国外云计算厂商 2.1 亚马逊AWS 2.2 微软AzureAzure 2.3 Apple iCloud 三、国内云计算厂商 3.1 阿里云 3.2 腾讯云 3.3 华为云 3.4 百度智能云 一、云计算市场概述 1.1 概述 云计算从出现以来&#xff0c;其发展就非常迅速。以…...

前端JavaScript篇之call() 和 apply() 的区别?

目录 call() 和 apply() 的区别&#xff1f; call() 和 apply() 的区别&#xff1f; 在JavaScript中&#xff0c;call()和apply()都是用来改变函数中this指向的方法&#xff0c;它们的作用是一样的&#xff0c;只是传参的方式不同。 call()方法和apply()方法的第一个参数都是…...

Java设计模式大全:23种常见的设计模式详解(三)

本系列文章简介: 设计模式是在软件开发过程中,经过实践和总结得到的一套解决特定问题的可复用的模板。它是一种在特定情境中经过验证的经验和技巧的集合,可以帮助开发人员设计出高效、可维护、可扩展和可复用的软件系统。设计模式提供了一种在设计和编码过程中的指导,它用于…...

汇编语言程序设计(二)十六位汇编框架、子程序与堆栈

寄存器 如下是16位通用寄存器&#xff0c;存储在cpu硬件中 AX 返回值 AX寄存器分为两部分 AH和AL AH 高8位 存储功能号 AL 低8位 存储返回码 以下是一个AX寄存器应用&#xff1a; mov ax,4c00h 4c给高位AL&#xff0c;00低位AL&#xff0c;16进制要以h结尾 BX CX 计数…...

K8S之标签的介绍和使用

标签 标签定义标签实操1、对Node节点打标签2、对Pod资源打标签查看资源标签删除资源标签 标签定义 标签就是一对 key/value &#xff0c;被关联到对象上。 标签的使用让我们能够表示出对象的特点&#xff0c;比如使用在Pod上&#xff0c;能一眼看出这个Pod是干什么的。也可以用…...

网络请求库axios

一、认识Axios库 为什么选择axios? 功能特点: 在浏览器中发送 XMLHttpRequests 请求在 node.js 中发送 http请求支持 Promise API拦截请求和响应转换请求和响应数据 补充: axios名称的由来? 个人理解没有具体的翻译. axios: ajax i/o system 二、axios发送请求 1.axios请求…...

程序设计语言的组成

程序设计语言的组成 程序设计语言基本上由数据、运算、控制、传输组成 数据成分 数据是程序操作的对象&#xff0c;具有存储类别、类型、名称、作用域和生存期等属性 从不同角度可将数据进行不同的划分。 数据类型的分类如下&#xff1a; 按程序运行过程中数据的值能否改…...

论文精读的markdown模板——以及用obsidian阅读网页资料做笔记

# The Investigation of S-P Chart Analysis on the Test Evaluations of Equality Axiom Concepts for Sixth Graders Tags: #/unread 本体论&#xff1a; 背景起源和发展 包含要素 # # # 可关联要素 # # # 逻辑 意义&#xff1a; 方法论&#xff1a; 方法论是一…...

LCP 30. 魔塔游戏

LCP 30. 魔塔游戏 难度: 中等 题目: 小扣当前位于魔塔游戏第一层&#xff0c;共有 N 个房间&#xff0c;编号为 0 ~ N-1。每个房间的补血道具/怪物对于血量影响记于数组 nums&#xff0c;其中正数表示道具补血数值&#xff0c;即血量增加对应数值&#xff1b;负数表示怪物造…...

RCE(命令执行)知识点总结最详细

description: 这里是CTF做题时常见的会遇见的RCE的漏洞知识点总结。 如果你觉得写得好并且想看更多web知识的话可以去gitbook.22kaka.fun去看&#xff0c;上面是我写的一本关于web学习的一个gitbook&#xff0c;当然如果你能去我的github为我的这个项目点亮星星我会感激不尽htt…...

[英语学习][27][Word Power Made Easy]的精读与翻译优化

[序言] 译者的这次翻译非常好. 对what与从句的嵌套用法&#xff0c; 进行了精准的翻译. 这次的记录, 也是对我自己的一次翻译经验的提升. 但是唯一遗憾的是"derivation"没有翻译好. [英文学习的目标] 提升自身的英语水平, 对日后编程技能的提升有很大帮助. 希望大家…...

Jupyter Notebook如何在E盘打开

Jupyter Notebook如何在E盘打开 方法1&#xff1a;方法2&#xff1a; 首先打开Anaconda Powershell Prompt, 可以看到默认是C盘。 可以对应着自己的界面输入&#xff1a; 方法1&#xff1a; (base) PS C:\Users\bella> E: (base) PS E:\> jupyter notebook方法2&#x…...

显示器校准软件:BetterDisplay Pro for Mac v2.0.11激活版下载

BetterDisplay Pro是一款由waydabber开发的Mac平台上的显示器校准软件&#xff0c;可以帮助用户调整显示器的颜色和亮度&#xff0c;以获得更加真实、清晰和舒适的视觉体验。 软件下载&#xff1a; BetterDisplay Pro for Mac v2.0.11激活版下载 以下是BetterDisplay Pro的主要…...

【第六天】c++虚函数多态

一、多态的概述 多态按字面的意思就是多种形态。当类之间存在层次结构&#xff0c;并且类之间是通过继承关联&#xff08;父类与子类&#xff09;时&#xff0c;就会用到多态。 C 多态意味着调用成员函数时&#xff0c;会根据调用函数的对象的类型来执行不同的函数。 静态多态&…...

CGAL::2D Arrangements-3

3.Arrangement查询 Arrangement里面最重要的查询操作是point-location&#xff0c;给定一个点&#xff0c;查找到包含这个点的Arrangement。通常情况下&#xff0c;point-location查询得到的结果是Arrangement的一个face&#xff0c;退化情况下会是一个edge&#xff0c;查一个…...

机器学习--K近邻算法,以及python中通过Scikit-learn库实现K近邻算法API使用技巧

文章目录 1.K-近邻算法思想2.K-近邻算法(KNN)概念3.电影类型分析4.KNN算法流程总结5.k近邻算法api初步使用机器学习库scikit-learn1 Scikit-learn工具介绍2.安装3.Scikit-learn包含的内容4.K-近邻算法API5.案例5.1 步骤分析5.2 代码过程 1.K-近邻算法思想 假如你有一天来到北京…...

Redis 使用 RDB 持久化方式的过程

定时触发&#xff1a; RDB 持久化是通过设置一个定时触发的机制来进行的。管理员可以配置 Redis 在经过一定时间间隔或执行了一定数量的写操作后触发 RDB 持久化。这个配置通常在 Redis 的配置文件中进行&#xff0c;可以通过 save 或 save 900 1 这样的配置项来设定。 save 90…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...