Hadoop学习笔记(HDP)-Part.09 安装OpenLDAP

目录
Part.01 关于HDP
Part.02 核心组件原理
Part.03 资源规划
Part.04 基础环境配置
Part.05 Yum源配置
Part.06 安装OracleJDK
Part.07 安装MySQL
Part.08 部署Ambari集群
Part.09 安装OpenLDAP
Part.10 创建集群
Part.11 安装Kerberos
Part.12 安装HDFS
Part.13 安装Ranger
Part.14 安装YARN+MR
Part.15 安装HIVE
Part.16 安装HBase
Part.17 安装Spark2
Part.18 安装Flink
Part.19 安装Kafka
Part.20 安装Flume

九、安装OpenLDAP

1.安装

Server端
在hdp01、hdp02上安装

ansible nn -m yum -a 'name=openldap-servers state=present'
ansible nn -m yum -a 'name=migrationtools state=present'

Client端
在hdp01-05上安装

ansible all -m yum -a 'name=openldap-clients state=present'

2.配置并启动

OpenLDAP的配置以树状结构存储在OpenLDAP数据库中,这些节点的配置文件以ldif格式存储在/etc/openldap/slapd.d目录下(从OpenLDAP2.4.23版本开始所有配置数据都保存在/etc/openldap/slapd.d/中,建议不再使用slapd.conf作为配置文件)
① cn=config
根节点用于全局性配置,它的配置文件是/etc/openldap/slapd.d/cn=config.ldif
② cn=module{0},cn=config
用于配置动态模块,它的配置文件位于/etc/openldap/slapd.d/cn=config目录下
③ cn=schema,cn=config
用于schema配置,它的配置文件位于/etc/openldap/slapd.d/cn=config目录下
④ olcDatabase={X},cn=config
用于配置数据库,它的配置文件位于/etc/openldap/slapd.d/cn=config目录下
以下所有内容在hdp01和hdp02上均进行操作

(1)修改olcDatabase={2}hdb.ldif文件

/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
查看密码对应的md5值

slappasswd -h {md5} -s "lnyd@LNsy115"

修改olcDatabase={2}hdb.ldif文件,将管理员密码的md5值增加到此文件中
其中cn=admin中的admin表示OpenLDAP管理员的用户名,可将cn和dc按照实际情况修改,而olcRootPW表示OpenLDAP管理员的密码。

dn: olcDatabase={2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=hdp315,dc=com
olcRootDN: cn=admin,dc=hdp315,dc=com
olcRootPW: {MD5}WL8F9lXqbxOxR0xwaIG9Jg==
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
entryUUID: 22848b60-4563-103d-8500-c5b20ff267b6
creatorsName: cn=config
createTimestamp: 20230220120913Z
entryCSN: 20230220120913.754062Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20230220120913Z

在这里插入图片描述

(2)修改olcDatabase={1}monitor.ldif文件

/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif
将dn.base中OpenLDAP管理员的相关信息修改为{2}hdb.ldif中相同的内容

dn: olcDatabase={1}monitor
objectClass: olcDatabaseConfig
olcDatabase: {1}monitor
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=admin,dc=hdp315,dc=com" read by * none
structuralObjectClass: olcDatabaseConfig
entryUUID: 2284858e-4563-103d-84ff-c5b20ff267b6
creatorsName: cn=config
createTimestamp: 20230220120913Z
entryCSN: 20230220120913.753913Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20230220120913Z

在这里插入图片描述

(3)修改olcDatabase={0}config.ldif文件

/etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif
增加olcRootDN和olcRootPW项

dn: olcDatabase={0}config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage by * none
olcRootDN: cn=config
olcRootPW: {MD5}WL8F9lXqbxOxR0xwaIG9Jg==
structuralObjectClass: olcDatabaseConfig
entryUUID: 228480e8-4563-103d-84fe-c5b20ff267b6
creatorsName: cn=config
createTimestamp: 20230220120913Z
entryCSN: 20230220120913.753793Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20230220120913Z

(4)验证LDAP基本配置

对上述配置进行测试验证

slaptest -u

在这里插入图片描述

(5)启动

启动LDAP程序

systemctl start slapd
systemctl status slapd

LDAP默认监听端口为389,通过netstat进行验证

netstat -tunalp | grep 389

3.配置数据库

Schema是LDAP的一个重要组成部分,类似于数据库的模式定义,LDAP的Schema定义了LDAP目录所应遵循的结构和规则,被LDAP服务器识别。schema是一个标准,定义了ldap的对象和属性,也就是ldap能够存储什么数据,数据有什么属性等。
以下操作在hdp01和hdp02上均进行。

(1)导入基础schema

从/etc/openldap/schema/中导入3个基础的schema

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

在这里插入图片描述

(2)修改migrate_common.ph文件

migrate_common.ph文件主要是用于生成ldif文件使用

vim /usr/share/migrationtools/migrate_common.ph

修改内容如下

$DEFAULT_MAIL_DOMAIN = "hdp315.com";
$DEFAULT_BASE = "dc=hdp315,dc=com";
$EXTENDED_SCHEMA = 1;

4.启用HA

本次配置采用MirrorMode方式。

(1)mod_syncprov.ldif

在hdp01和hdp02上,创建mod_syncprov.ldif文件,ldap双主复制功能的实现依赖于syncprov模块,这个模块位于/usr/lib64/openldap目录下
/etc/openldap/syncprov_mod.ldif

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: syncprov.la

加载模块

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/syncprov_mod.ldif

(2)syncprov.ldif

在hdp01和hdp02上,创建syncprov.ldif文件,导入同步配置日志信息,/etc/openldap/syncprov_enable.ldif

dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpCheckpoint: 1 1
olcSpSessionLog: 32767

olcSpCheckpoint:表示当修改1条或者1分钟时,以实现实时同步
olcSpSessionLog:session log会话日志条目的最大数量
加载模块

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/syncprov_enable.ldif

(3)master_node_1.ldif

在hdp01上,创建master_node_1.ldif文件,/etc/openldap/master_node_1.ldif
(注:每个dn属于u一部分,上面需要加一个空行,否则会报错)
2个主节点属性olcServerID的值不能相同,provider指向对方
provider:同步来源,也就是主节点,可以包含多个主节点
binddn:主节点管理账户
credentials主节点管理账户密码
searchbase:根目录

dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 0dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001provider=ldap://hdp02.hdp.com:389/bindmethod=simplebinddn="cn=admin,dc=hdp315,dc=com"credentials=lnyd@LNsy115searchbase="dc=hdp315,dc=com"scope=subschemachecking=ontype=refreshAndPersistretry="30 5 300 3"interval=00:00:05:00
-
add: olcMirrorMode
olcMirrorMode: TRUEdn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov

注:credentials为其他主节点的密码,只能用明文,不能用md5加密等格式
加载生效

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/master_node_1.ldif

(4)master_node_2.ldif

在hdp02上,创建master_node_2.ldif文件,/etc/openldap/master_node_2.ldif

dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 1dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001provider=ldap://hdp01.hdp.com:389/bindmethod=simplebinddn="cn=admin,dc=hdp315,dc=com"credentials=lnyd@LNsy115searchbase="dc=hdp315,dc=com"scope=subschemachecking=ontype=refreshAndPersistretry="30 5 300 3"interval=00:00:05:00
-
add: olcMirrorMode
olcMirrorMode: TRUEdn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov

加载生效

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/master_node_2.ldif

(5)KeepAlived+HAProxy

① 安装
在hdp04和hdp05安装keepalived和HAProxy服务

yum install -y haproxy keepalived

② 配置HAProxy
在hdp04和hdp05上,修改配置文件,/etc/haproxy/haproxy.cfg

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  tcp_389_openldapbind *:389mode tcpstats uri /haproxy?statsdefault_backend  tcp_389_openldap#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend tcp_389_openldapmode tcpbalance     roundrobinserver server1 hdp01.hdp.com:389 check weight 100server server2 hdp02.hdp.com:389 check weight 1

启动keepalived服务

systemctl start haproxy
systemctl status haproxy

③ 配置KeepAlived
在hdp04上,修改配置文件,/etc/keepalived/keepalived.conf

global_defs {notification_email {root@localhost}notification_email_from root@localhostsmtp_server localhostsmtp_connect_timeout 30router_id hdp04.hdp.comscript_user rootenable_script_security
}vrrp_script chk_ha_port {script "/etc/keepalived/chk_ha.sh"interval 2weight -5fall 2rise 1
}vrrp_instance VI_1 {state MASTERinterface ens192virtual_router_id 128priority 100advert_int 1authentication {auth_type PASSauth_pass 12345678}virtual_ipaddress {192.168.111.222}track_script {chk_ha_port}
}

在hdp05上,修改配置文件,/etc/keepalived/keepalived.conf

global_defs {notification_email {root@localhost}notification_email_from root@localhostsmtp_server localhostsmtp_connect_timeout 30router_id hdp05.hdp.comscript_user rootenable_script_security
}vrrp_script chk_ha_port {script "/etc/keepalived/chk_ha.sh"interval 2weight -5fall 2rise 1
}vrrp_instance VI_1 {state BACKUPinterface ens192virtual_router_id 128priority 99advert_int 1authentication {auth_type PASSauth_pass 12345678}virtual_ipaddress {192.168.111.222}track_script {chk_ha_port}
}

监测脚本,/etc/keepalived/chk_ha.sh

#!/bin/bash
counter=$(ps -C haproxy --no-heading | wc -l)
if [ "${counter}" = "0" ]; thensystemctl start haproxysleep 1counter=$(ps -C haproxy --no-heading | wc -l)if [ "${counter}" = "0" ]; thensystemctl stop keepalivedfi
fi

启动keepalived服务

systemctl start keepalived
systemctl status keepalived

在hdp04上查看ens192端口上的IP增加了192.168.111.222

ip a

在这里插入图片描述
测试切换的时候,可以将chk_ha.sh中的启动haproxy注释掉,防止再次被拉起

5.添加用户及用户组

默认情况下OpenLDAP是没有普通用户的,但是有一个管理员用户。

(1)创建ldif模板

现在需要Linux系统中的用户tenant1,添加到OpenLDAP中。

useradd tenant1
echo "Aa123456" | passwd --stdin tenant1

提取tenant1的信息

grep -E "tenant1[^.]" /etc/passwd > /root/users
grep -E "tenant1[^.]" /etc/group > /root/groups
cat /root/users /root/groups

根据上述生成的用户和用户组属性,使用migrate_passwd.pl文件生成要添加用户和用户组的ldif(可以从/etc/passwd、/etc/shadow、/etc/groups中生成ldif更新ldap数据库,需要用到migrationtools工具)

/usr/share/migrationtools/migrate_passwd.pl /root/users > /root/template.ldif
/usr/share/migrationtools/migrate_group.pl /root/groups >> /root/template.ldif
cat /root/template.ldif

在这里插入图片描述
在模板的末尾添加

memberUid: uid=tenant1,ou=People,dc=hdp315,dc=com

后续如果要新加用户到OpenLDAP中的话,可以直接修改template.ldif文件即可。
注:增加LDAP用户,无需在OS层面添加用户,tenant1的添加只是为了生成ldif模板

(2)初始化

在hdp01上,创建/etc/openldap/base.ldif文件,先创建hdp315这个organization(简称O),然后在其下面创建三个OU:
ou=People,dc=hdp315,dc=com用于存放用户账号
ou=services,dc=hdp315,dc=com用户存放服务账号
ou=Group,dc=hdp315,dc=com用户存放组账号

dn: dc=hdp315,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: hdp315dn: cn=admin,dc=hdp315,dc=com
objectClass: organizationalRole
cn: admin
description: Directory Admindn: ou=People,dc=hdp315,dc=com
objectClass: organizationalUnit
ou: Peopledn: ou=services,dc=hdp315,dc=com
objectclass: organizationalUnit
ou: servicesdn: ou=Group,dc=hdp315,dc=com
objectClass: organizationalUnit
ou: Group

导入

ldapadd -x -D "cn=admin,dc=hdp315,dc=com" -w "lnyd@LNsy115" -f /etc/openldap/base.ldif

(3)添加账号

使用管理员账号admin添加普通用户tenant1到LDAP中,其中-D指定了管理员账号去执行,-w为管理员账号的口令

ldapadd -x -w "lnyd@LNsy115" -D "cn=admin,dc=hdp315,dc=com" -f /root/template.ldif

(4)确认账号信息

使用ldapsearch查询全部用户信息

ldapsearch -x -H ldap://hdp01.hdp.com:389 -b 'ou=People,dc=hdp315,dc=com'

(5)HA同步情况确认

在hdp01上创建的tenant1用户,在hdp02的LDAP上查询

ldapsearch -x -H ldap://hdp01.hdp.com:389 -b 'ou=People,dc=hdp315,dc=com' 'uid=tenant1'
ldapsearch -x -H ldap://hdp02.hdp.com:389 -b 'ou=People,dc=hdp315,dc=com' 'uid=tenant1'
ldapsearch -x -H ldap://192.168.111.222:389 -b 'ou=People,dc=hdp315,dc=com' 'uid=tenant1'

关闭hdp01上的slapd程序,测试是否负载至hdp02上
在这里插入图片描述

6.部署web服务

在hdp01上分别进行Yum安装phpldapadmin服务

yum install -y phpldapadmin

yum安装完phpldapadmin后会默认在/etc/httpd/conf.d加入,修改配置文件/etc/httpd/conf.d/phpldapadmin.conf

Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs<Directory /usr/share/phpldapadmin/htdocs><IfModule mod_authz_core.c># Apache 2.4#Require localRequire all granted</IfModule><IfModule !mod_authz_core.c># Apache 2.2Order Deny,AllowDeny from allAllow from 127.0.0.1Allow from ::1</IfModule>
</Directory>

修改phpldapadmin的设置,首先备份配置文件

cp /etc/phpldapadmin/config.php /etc/phpldapadmin/config.php.bak.20230222

/etc/phpldapadmin/config.php,修改内容如下:

#注释掉以下行
#287行
#$servers->newServer('ldap_pla');
#291行
#$servers->setValue('server','name','Local LDAP Server');
#388行
#$servers->setValue('appearance','pla_password_hash','');
#398行
#$servers->setValue('login','attr','uid');#取消注释并增加以下行,537行开始
$servers->newServer('ldap_pla');
$servers->setValue('server','name','hdp01 Server');
$servers->setValue('server','host','192.168.111.201');
$servers->setValue('server','port',389);
$servers->setValue('server','base',array('dc=hdp315,dc=com'));
$servers->setValue('login','auth_type','cookie');
$servers->setValue('login','bind_id','cn=admin,dc=hdp315,dc=com');
$servers->setValue('login','bind_pass','lnyd@LNsy115');
$servers->setValue('login','anon_bind',false);  !此行为新增
$servers->setValue('server','tls',false);$servers->newServer('ldap_pla');
$servers->setValue('server','name','hdp02 Server');
$servers->setValue('server','host','192.168.111.202');
$servers->setValue('server','port',389);
$servers->setValue('server','base',array('dc=hdp315,dc=com'));
$servers->setValue('login','auth_type','cookie');
$servers->setValue('login','bind_id','cn=admin,dc=hdp315,dc=com');
$servers->setValue('login','anon_bind',false);
$servers->setValue('login','bind_pass','lnyd@LNsy115');

重启httpd服务

systemctl restart httpd
systemctl status httpd

访问页面http://192.168.111.201/phpldapadmin,可以分别选择不同的OpenLDAP Server进行登录,用户名为在config.php中设置的内容

在这里插入图片描述
在这里插入图片描述
在hdp02上进行同样的部署,然后对页面进行HA高可用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/199634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网工内推 | 上市公司初级网工,HCIP认证优先,14薪,享企业年金

01 易佰网络 招聘岗位&#xff1a;初级网络工程师 职责描述&#xff1a; 1.电脑周边设备&#xff08;打印机、扫描仪、传真机、复印机、投影仪等&#xff09;安装与维护&#xff1b; 2.局域网维护&#xff1b;无线网WLAN维护&#xff1b;监控系统维护&#xff1b; 3.固资维护管…

学校图书管理系统的开发

目 录 摘要 1 Abstract. 1 1 引言 2 1.1 图书管理的现状 2 1.2 现有图书管理系统的概述 3 1.3 选题的目的、意义 3 1.4 图书管理系统的可行性分析 4 1.5 系统开发运行环境 4 2 图书管理系统开发相关技术的介绍 5 2.1 Asp.net的介绍 5 2.1.1 Asp.net的优势介绍 5 2.1.2 Asp.net…

记录一下Mac配置SpringBoot开发环境

由于很多项目喜欢使用传统的 Java 8 进行开发&#xff0c;而且 Java 8 的稳定性也是经过长久考验的&#xff0c;我们接下来就尝试一下&#xff0c;在一台新的 Mac 中配置 Java 环境&#xff0c;并且开始创建 SpringBoot 项目。 首先&#xff0c;去 Oracle 官网下载 java8 JDK …

玩转数据8:数据质量管理与数据清洗的实践

引言 在当今数字化时代&#xff0c;数据质量管理和数据清洗对于企业和组织来说变得至关重要。随着大数据的快速增长和数据驱动决策的普及&#xff0c;确保数据的准确性、一致性和完整性成为保证业务成功的关键因素。本文将探讨数据质量管理和数据清洗的概念、目标以及其在Java…

Servlet作业1

1.【单选题】 (10分) &#xff08;B &#xff09;是一个用 Java 编写的程序&#xff0c;是一种实现了Servlet接口的类&#xff0c;它是由web容器负责创建并调用&#xff0c;在服务器容器上运行&#xff0c;用于接收和响应用户的请求。 A.Filter B.Servlet C.Request D.Res…

药敏分析分子对接

RCSB PDB: Homepage AutoDock Vina (scripps.edu) GSCA - Gene Set Cancer Analysis (hust.edu.cn) 药物筛选 gscalite数据库&#xff08;好像用不了了&#xff09; PRISM CTRP CMap GDSC oncoPredict文献学习-CSDN博客 蛋白的3D结构 RCSB PDB: Homepage SH3PXD2B G…

CRC(循环冗余校验)直接计算和查表法

文章目录 CRC概述CRC名词解释宽度 (WIDTH)多项式 &#xff08;POLY&#xff09;初始值 &#xff08;INIT&#xff09;结果异或值 &#xff08;XOROUT&#xff09;输入数据反转&#xff08;REFIN&#xff09;输出数据反转&#xff08;REFOUT&#xff09; CRC手算过程模二加减&am…

vue3中手写一个日历,年部分,月部分,周部分,日部分

效果图 高度自定义&#xff0c;支持每天的统计展示&#xff0c;弹窗展示&#xff0c;详情操作 月部分&#xff1a; 默认展示当前月&#xff0c;支持前进和后退选择下一月 支持自定义每月的展示数据&#xff0c; 周部分&#xff1a; 分为上下午&#xff0c;可以列出要做的事项…

30、pytest入门内容回顾

整体结构 解读与实操 pytest30讲主要从四个方面由浅入深的进行解读&#xff0c; 开始 讲解了pytest的概述&#xff0c;安装前的准备工作&#xff08;python,pycharm,pytest&#xff09;&#xff0c;运行方式&#xff08;命令行&#xff09;&#xff0c;断言&#xff08;assert…

麒麟linux将图片批量生成PDF的方法

笔者手里有一批国产linu系统&#xff0c;目前开始用在日常的工作生产环境中&#xff0c;我这个老程序猿勉为其难的充当运维的或网管的角色。 国产linux系统常见的为麒麟Linux&#xff0c;统信UOS等&#xff0c;基本都是基于debian再开发的linux。 问题描述&#xff1a; wind…

OCP Java17 SE Developers 复习题08

答案 答案 答案 A. This code is correct. Line 8 creates a lambda expression that checks whether the age is less than 5, making option A correct. Since there is only one parameter and it does not specify a type, the parentheses around the parameter are …

【C++】POCO学习总结(九):网络

【C】郭老二博文之&#xff1a;C目录 1、Poco::Net::IPAddress IP地址 Poco::Net::IPAddress类存储IPv4或IPv6主机地址。 Poco::Net::IPAddress可以从字符串解析&#xff0c;也可以格式化为字符串。支持IPv4格式(d.d.d.d)和IPv6格式(x: x: x: x: x: x: x: x)。 常用函数&…

springboot整合阿里云oss上传图片,解决无法预览的问题

1.前置工作 需要申请一个域名,需要备案&#xff0c;对接这个踩了不少坑,写的很详细,guan fang tong guo bu 了,各位参考别的博客结合看吧,主要是域名配置,还有看service里面的实现 2.进入控制台 bucket列表 选择bucket 选择域名管理 复制你申请的域名,比如域名:abkhkajs…

1970-2022年中国省级国家级开发区数据集

1970-2022年Z国省级国家级开发区数据集 1、时间&#xff1a;1970-2022年 2、指标&#xff1a;单位名称、所属区域、所属省份、所属级别、开发区类型、关注热度、成立时间、核准面积、主导产业、地址、联系电话、经纬度 3、范围&#xff1a;2781个开发区 4、来源&#xff1a…

MagicPipe3D地下管网三维建模数据规格

经纬管网建模系统MagicPipe3D&#xff08;www.magic3d.net&#xff09;本地离线参数化构建三维地下管网&#xff08;含管道、接头、附属物等&#xff09;模型&#xff0c;输出标准3DTiles、Obj等格式&#xff0c;支持Cesium、Unreal、Unity等引擎可视化查询。MagicPipe3D三维建…

c++基本常见错误总结

我们无论是在学习中还是在工作当中&#xff0c;总是会遇到各种各样的c编译错误问题&#xff0c;经常会有一种情况就是上一次好像遇到过这种问题&#xff0c;但是就是想不起来了&#xff08;我就是这样&#xff09;所以下面这一篇文章就是总结自己遇到的编译以及运行错误。 注意…

【C语言】函数递归详解(二)

前言 在上一篇博客函数递归详解&#xff08;一&#xff09;中讲解了什么是递归&#xff0c;递归的思想及限制条件以及两个递归的例子&#xff0c;这一篇博客将讲解递归与迭代的关系。 递归与迭代 递归是一种很好的编程技巧&#xff0c;但是同很多技巧一样也是可能被误用的&…

Centos7 制作Openssh9.5 RPM包

Centos7 制作Openssh9.5 RPM包 最近都在升级Openssh版本到9.3.在博客里也放了openssh 9.5的rpm包. 详见:https://blog.csdn.net/qq_29974229/article/details/133878576 但还是有小伙伴不停追问这个rpm包是怎么做的,怕下载别人的rpm包里被加了盐. 于是做了个关于怎么用官方的o…

yolov5实现多图形识别和图像训练

1.使用了yolov7,检测更好,但是训练上有问题,运行不起来,转了一圈发现yolov5是应用更广泛使用简单 2.怎么使用 //下载代码 https://github.com/ultralytics/yolov5 //安装依赖 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple some-package //按…

CMake中的CACHE关键字

2023年12月5日&#xff0c;周二晚上 在 CMake 中&#xff0c;CACHE 关键字用于在变量定义时将其值缓存起来&#xff0c;以便在后续的 CMake 运行中重用。这对于在多次构建过程中保持变量的持久性和一致性非常有用。 当使用 CACHE 关键字定义一个变量时&#xff0c;CMake 将会为…