-
请问代码移植工具目前只有一个MySQL的模板吗?软件构建中心是将x86的rpm包构建成直接在鲲鹏上安装的rpm包吗?
-
1、简介ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。2、基础环境类别子项版本获取地址(方法)华为云虚拟机KC1(920)--OSCentOS7.5Kernel4.14软件包Elastic Stack6.4.4https://github.com/elastic/elasticsearch.githttps://github.com/elastic/kibana.githttps://github.com/elastic/logstash.githttps://github.com/elastic/beats.git3、依赖安装需要安装gcc-c++, make, openjdk, ruby, rpm-build等。其中,kibana和logstash需要使用fpm工具,依赖ruby高版本;elasticsearch要求openjdk版本>=1.10,而logstash要求JAVA 8,因此java-1.8.0-openjdk-devel和java-11-openjdk-devel均需要安装,使用对应版本;yum install rpm-build gcc-c++ make java-11-openjdk-devel rubygem install fpm -v 1.5.0 (此处依赖ruby高版本,自行编译更新ruby解决) 4、组件编译安装1) 编译elsaticsearch注意此处java需为11版本,使用java –version进行确认。git clone https://github.com/elastic/elasticsearch.gitcd elasticsearchgit checkout 6.4./gradlew assemble -x :distribution:packages:buildDeb -x :distribution:packages:buildOssDeb 成功后,rpm包路径为: distribution/packages/rpm/build/distributions/elasticsearch-6.4.4-SNAPSHOT.rpm2) 编译kibana此组件官方未支持arm(见https://github.com/elastic/kibana/issues/41460),我们进行修改适配。安装nvm(参考https://github.com/nvm-sh/nvm )cd ~git clone https://github.com/nvm-sh/nvm.git .nvmcd .nvmgit checkout v0.34.0export NVM_DIR="$HOME/.nvm"[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion 安装node.jsnvm use安装yarn,由于先前已经安装了.node-version指定版本的node.js,此处的yarn可使用skip-broken跳过依赖包node.js的安装(yum源中的版本与.node-version文件中指定的并不一致)yum install --skip-broken yarn修改部分js文件bash-4.2# git diff src/dev/diff --git a/src/dev/build/lib/config.js b/src/dev/build/lib/config.jsindex a68e3dd..105547a 100644--- a/src/dev/build/lib/config.js+++ b/src/dev/build/lib/config.js@@ -29,7 +29,7 @@ export async function getConfig({ isRelease }) { const repoRoot = dirname(pkgPath); const nodeVersion = pkg.engines.node; - const platforms = ['darwin', 'linux', 'windows'].map(createPlatform);+ const platforms = ['linux'].map(createPlatform); const versionInfo = await getVersionInfo({ isRelease, pkg,diff --git a/src/dev/build/lib/platform.js b/src/dev/build/lib/platform.jsindex f4629ca..68f49aa 100644--- a/src/dev/build/lib/platform.js+++ b/src/dev/build/lib/platform.js@@ -24,11 +24,11 @@ export function createPlatform(name) { } getNodeArch() {- return `${name}-x64`;+ return `${name}-arm64`; } getBuildName() {- return `${name}-x86_64`;+ return `${name}-aarch64`; } isWindows() {diff --git a/src/dev/build/tasks/os_packages/create_os_package_tasks.js b/src/dev/build/tasks/os_packages/create_os_package_tasks.jsindex a04f2b6..c66092b 100644--- a/src/dev/build/tasks/os_packages/create_os_package_tasks.js+++ b/src/dev/build/tasks/os_packages/create_os_package_tasks.js@@ -35,7 +35,7 @@ export const CreateRpmPackageTask = { async run(config, log, build) { await runFpm(config, log, build, 'rpm', [- '--architecture', 'x86_64',+ '--architecture', 'aarch64', '--rpm-os', 'linux' ]); }编译kibanayarn build --rpm完成后,rpm包的路径为target/kibana-6.4.4-SNAPSHOT-aarch64.rpm3) 编译logstash此处java版本为8,可使用java –version进行确认。git clone https://github.com/elastic/logstash.gitcd logstashgit checkout 6.4gem install rakegem install bundlerrake artifact:rpm 完成后,rpm包路径为 build/logstash-6.4.4-SNAPSHOT.rpm4) 编译beats此处需安装python-virtualenv, golang由于此工程在容器化环境下进行编译,arm64的rpm包也是通过在docker中交叉编译获得的。若需在arm64原生环境下进行编译,对于整个编译逻辑的改动是彻底的(重新编译docker镜像,mage工具中写死的amd64架构也需要修正)。权衡后还是在x86_64下进行编译,输出aarch64架构的rpm包。mkdir -p ${GOPATH}/src/github.com/elasticgit clone https://github.com/elastic/beats ${GOPATH}/src/github.com/elastic/beatsexport PATH=${GOPATH}/bin:$PATHexport PLATFORMS="+linux/arm64 linux/arm64"cd ${GOPATH}/src/github.com/elastic/beatsgit checkout 6.4make snapshot完成后,rpm包路径为build/distributions/*/*.rpm5、系统配置 无6、测试 Kibana是elasticsearch的视窗,beats其中包含各种采集器,logstash可以视为管道,将beats的输入处理后存放在elasitcsearch中。作为样例,此章节采用filebeat->logstash->elasticsearch->kibana这一条路径进行简单覆盖测试。filebeats的input使用system模块,output设置为logstash1) filebeat[root@arm-app-0003 ~]# rpm –i build/distributions/filebeat/filebeat-6.4.4-SNAPSHOT-aarch64.rpmhttps://www.elastic.co/guide/en/beats/filebeat/6.4/filebeat-module-system.html!!以下配置部分需等到elasticsearch和kibana运行就绪后进行!![root@arm-app-0003 ~]# filebeat modules enable system[root@arm-app-0003 ~]# vi /etc/filebeat/filebeat.yml参照此链接,将output设置为logstashhttps://www.elastic.co/guide/en/beats/filebeat/6.4/config-filebeat-logstash.html[root@arm-app-0003 ~]# filebeat setup --dashboards --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'此步骤设置index模板到elasticsearch中[root@arm-app-0003 ~]# systemctl start filebeat[root@arm-app-0003 ~]# systemctl status filebeat 2) logstash[root@arm-app-0003 ~]# rpm –i build/logstash-6.4.4-SNAPSHOT.rpm[root@arm-app-0003 ~]# vi /etc/logstash/conf.d/filebeat-system.conf将如下链接中的配置写入文件中https://www.elastic.co/guide/en/logstash/6.4/logstash-config-for-filebeat-modules.html#parsing-system[root@arm-app-0003 ~]# systemctl start logstash[root@arm-app-0003 ~]# systemctl status logstash 3) elasticsearch[root@arm-app-0003 ~]# rpm –i distribution/packages/rpm/build/distributions/elasticsearch-6.4.4-SNAPSHOT.rpm[root@arm-app-0003 ~]# vi /etc/elasticsearch/elasticsearch.yml添加xpack.ml.enabled: false,否则ElasticsearchException[X-Pack is not supported and Machine Learning is not available for [linux-aarch64]; you can use the other X-Pack features (unsupported) by setting xpack.ml.enabled: false in elasticsearch.yml] [root@arm-app-0003 ~]# systemctl start elasticsearch[root@arm-app-0003 ~]# systemctl status elasticsearch 4) kibana[root@arm-app-0003 ~]# rpm –i target/kibana-6.4.4-SNAPSHOT-aarch64.rpm[root@arm-app-0003 ~]# vi /etc/kibana/kibana.yml[root@arm-app-0003 ~]# systemctl start kibana[root@arm-app-0003 ~]# systemctl status kibana 5) 测试验证浏览器打开http://localhost:5601/,在Management/Elasticsearch/Index Management中可以查看管理各个索引 在Dashboard标签页中,找到syslog并打开,右上角可以选择时间范围,可查看日志,sudo,ssh登录情况等等,更多功能可自行探索。 7、参考信息https://www.elastic.co/8、FAQ无9、遗留问题1) license问题,elasticsearch,kibana,logstash并不是完全免费的,其中包含的x-pack特性,部分功能是收费的。(see https://www.elastic.co/cn/what-is/open-x-pack ) 2) 制作的rpm包为snapshot包,非发布版本,发布release版本需要签名3) kibana对arm不作官方承诺支持,修改打包相关部分代码实现,不排除存在功能问题。如若发现,请反馈。4)https://github.com/elastic/kibana 所有的版本必须进行对应,且所有kibana必须小于es
-
1、新建spec模板文件rpmdev-newspec librpcsecgss2、宏定义通用宏定义文件:/usr/lib/rpm/macros、/usr/lib/rpm/macros.d、/usr/lib/rpm/redhat/macros、/etc/rpm/、~/.rpmmacros 优先级为:用户自定义相关:~/.rpmmacros > 系统相关的配置:/etc/rpm/ > 全局扩展配置:/usr/lib/rpm/macros.d/* > 全局的配置:/usr/lib/rpm/macros自定义宏:%define _prefix /usr/local查看宏定义:rpm --eval “%{_sysconfdir}” rpm --showrc | grep _sysconfdi3、打包构建RPM:rpmbuild -bb librpcsecgss.spec构建SRPM:rpmbuild -bs librpcsecgss.spec构建SRPM和RPM:rpmbuild -ba librpcsecgss.spec4、查找构建失败原因1) 查看对应构建失败文件内容:vi /var/tmp/rpm.tmp.*2) No build ID found in xx问题,在spec文件中添加如下宏定义:define __debug_install_post \%{_rpmconfigdir}/find-debuginfo.sh %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"\%{nil}3) %configure和./configure重复4) 有些构建使用CMAKE,不使用configure5、软链接创建:ln -s 目标 软链接 -- ln -s libstdc++.so.6.0.19 libstdc++.so.6删除:rm -rf 软链接 -- rm -rf libstdc++.so.6重新链接:ln -snf 新目标 软链接 -- ln -snf libstdc++.so.24 libstdc++.so.66、提取rpm包文件显示包内文件文件:rpm2cpio R-3.6.1-1.el7.aarch64.rpm | cpio -t提取rpm包文件(自动提取到当前目录 ):rpm2cpio R-3.6.1-1.el7.aarch64.rpm | cpio -id ./usr/local/R/lib/R/library/utils/R/sysdata.rdx7、安装src.rpm源码包第一种方法:rpmbuild --rebuild --clean ~/rpmbuild/SRPMS/curl-7.54.0-1.el7.src.rpm第二种方法 :rpm -ivh curl-7.54.0-1.el7.src.rpm (CentOS默认解压路径为~/rpmbuild)rpmbuild -bb ~/rpmbuild/SPECS/curl.spec8、缺少模块和库文件1)有些是因为rpm本身检查的原因导致,可以跳过,如提示缺少包内本就存在的模块rpm -ivh ../RPMS/aarch64/mysql-5.7.28-1.el7.aarch64.rpm --nodeps2)查询模块和库文件文件存在:rpm -qf /usr/lib64/libstdc++.so.6 (绝对路径)文件不存在,通过命令查找提供文件的包:yum provides libstdc++.so.6 或 yum provides */libstdc++.so.63)打包到rpm包中,如缺少libstdc++.so.6(GLIBCXX*):在spec文件中增加如下信息,将其打包到rpm包中:Source1: libstdc++.so.6%{__install} -p -D -m 0755 %{SOURCE1} %{buildroot}/%{_prefix}/%{name}-%{version}/lib/libstdc++.so.69、libstdc++.so.6库内文件查询查询GLIBCXX版本:strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX10、压缩和解压鲲鹏论坛上传文件有大小和格式限制,可能需要分卷操作。zip压缩分卷及解压:压缩 zip R-3.6.1-1.el7.aarch64.rpm.zip R-3.6.1-1.el7.aarch64.rpm分卷 zip -s 20m R-3.6.1-1.el7.aarch64.rpm.zip --out R-3.6.1-1.el7.aarch64.rpm.file.zip(大小单位k/m/g)合并 zip R-3.6.1-1.el7.aarch64.rpm.file.zip R-3.6.1-1.el7.aarch64.rpm.file.z01 R-3.6.1-1.el7.aarch64.rpm.file.z02-s=0 --out R-3.6.1-1.el7.aarch64.rpm.zip解压 unzip R-3.6.1-1.el7.aarch64.rpm.ziprar压缩分卷及解压:分卷 rar a -v18m R-3.6.1-1.el7.aarch64.rpm.rar R-3.6.1-1.el7.aarch64.rpm (大小单位k/m/g)解压 unrar x -o- -y R-3.6.1-1.el7.aarch64.rpm.part1.rar ./ (假设第一个分卷为R-3.6.1-1.el7.aarch64.rpm.part1.rar,所有分卷在同一目录下)11、rpmlint检查rpmlint检查比较严格,有些警告可以忽略。检查spec文件:rpmlint R.spec检查rpm包:rpmlint ../RPMS/aarch64/R-3.6.1-1.el7.aarch64.rpm检查src.rpm包:rpmlint ../SRPMS/curl-7.54.0-1.el7.src.rpm
-
本手册基于华为云共享云硬盘实践所编写,以操作系统为CentOS 7.4的云服务器为例,指导用户搭建RHCS(Red Hat Cluster Suite)集群系统,使用GFS2分布式文件系统,实现一个共享盘在多个云服务器之间可共享文件。具体搭建操作步骤请参考附件,手册目录如图所示。什么是共享盘?共享云硬盘是一种支持多个云服务器并发读写访问的数据块级存储设备,具备多挂载点、高并发性、高性能、高可靠性等特点。单个共享云硬盘最多可同时挂载给16个云服务器,其使用场景如图所示。怎样实现共享功能?将共享云硬盘挂载给多台云服务器后,需要安装共享文件系统或类似的集群管理系统,才能实现在多台云服务器之间共享文件。
-
1 RPM简介1.1 RPM定义RPM(Redhat Package Manager,RedHat包管理器)是用于Redhat、CentOS、Fedora等Linux 分发版(distribution)的常见的软件包管理器。1.2 软件安装方式l 编译安装(从源码到可执行程序)l RPM安装(已完成编译打包,但依赖关系复杂)l YUM安装(自动分析RPM包依赖关系,按需要顺序依次安装)l 绿色安装(直接使用或解压后直接使用)1.3 RPM包类型和名称l RPM包类型1) RPM源码包:2) RPM安装包:l RPM包名组成 mysql 5.7 28 1 -el7 aarch 64 软件名 主版本号 次版本号 修订号 RHEL7 CPU架构平台 支持系统位数 x86_64:一般意义上的64位Intel处理器 aarch64:ARM平台64位处理器 noarch:与CPU架构平台无关1.4 RPM和YUM的区别RPM:1) RPM是一个数据库管理工具,可以通过读取数据库,可以判断软件是否已经安装;RPM可以完成安装软件、卸载软件、查询软件信息、升级、降级、检验、打包程序的操作;2) RPM包是预先在Linux主机上编译好并打包的文件,安装起来非常快捷;3) RPM仅仅能管理符合rpm格式的程序包,不能管理源码格式的程序。YUM:1) YUM是一个RPM包的管理工具,可以实现自动解决RPM包的依赖关系(自动安装依赖顺序进行RPM包的安装);2) 为何RPM包会有依赖关系?制作RPM的人,在制作RPM包的时候,就将这个RPM的所依赖的软件的信息保存在这个RPM包的内部; 2 RPM打包流程2.1 RPM打包空间配置1) 安装rpmdevtools:yum install rpmdevtools2) 执行命令:rpmdev-setuptree3) 进入目录~/rpmbuild,应有如下文件夹:2.2 RPM打包资源准备下载需要进行打包的源代码、补丁包(如果有)及其他文件(如果有),将其拷贝到~/rpmbuild/SOURCES目录下。2.3 编辑SPEC文件2.3.1 生成SPEC文件模板1) 切换目录至~/rpmbuild/SPECS,执行:rpmdev-newspec mysql2) 生成模板文件mysql.spec,然后在此文件基础上添加内容。2.3.2 修改SPEC文件1) 修改header信息Name:软件包的名称,后面可使用%{name}的方式引用Summary:软件包的内容概要Version:软件的实际版本号,例如:1.0.1等,后面可使用%{version}引用Release:发布序列号,标明第几次打包,后面可使用%{release}引用License:软件授权方式,通常就是GPLSource:源代码包,可以带多个用Source0、Source1等源,后面也可以用%{source0}、%{source1}引用。NoSource:0 #第一个源码不包含在包中Patch:补丁源码,可使用Patch0、Patch1等标识多个补丁,使用%patch0或%{patch0}引用,NoPatch:0 #第一个补丁文件不包含在包中URL:软件的主页Vendor:软件开发者名字,发行商或打包组织的信息,例如RedFlag Co,LtdPreReq、Requires(pre)、Requires(post)、Requires(preun)、Requires(postun)、BuildRequires等都是针对不同阶段的依赖指定。2) 修改body信息l %prep阶段%prep:描述了解压源码包的方法。一般而言,其中包含 %autosetup 命令。另外,还可以使用 %setup 和 %patch 命令来指定操作 Source0、Patch0 等标签的文件。%autosetup:用于解压源码包。可用选项包括:-n name:如果源码包解压后的目录名称与 RPM 名称不同,此选项用于指定正确的目录名称。例如,如果 tarball 解压目录为 FOO,则使用 “%autosetup -n FOO”。-c name:如果源码包解压后包含多个目录,而不是单个目录时,此选项可以创建名为 name 的目录,并在其中解压。%setup:通常使用 -q 抑止不必要的输出。 %patch:打补丁,可指定层数(如-p1) 一般用法:l %build阶段%build:对解压到%{_builddir}下的源码进行编译的阶段,整个过程在该目录下完成。%configure:由于 GNU configure 很常见,可使用 %configure 宏来自动设置正确选项。如果编译使用CMAKE,则不使用%configure。编译命令:make %{?_smp_mflags}一般用法:l %install阶段%install:安装阶段需要执行的命令,即从 %{_builddir} 复制相关文件到 %{buildroot} 目录(通常表示从 ~/rpmbuild/BUILD 复制到 ~/rpmbuild/BUILDROOT/XXX) 目录,并根据需要在 %{buildroot} 中创建必要目录。 %make_install或%makeinstall:安装命令 一般用法:高版本系统时$RPM_BUILD_ROOT代替%{buildroot}l %check阶段%check:测试代码应写入 %check 部分,如make test 或 make check一般用法:l %file部分%file:列出了需要被打包的文件和目录 %defattr:用于设置默认文件权限,通常可以在 %files 的开头看到它 %doc:指明文档文件,如README文件 %license:指明许可文件,如LICENSE文件 %config:指明配置文件,如my.cnf %dir:指明目录一般用法:注意:%{_bindir}/* 不会声明此软件包拥有 /usr/bin 目录,而只包含其中的文件。如果您列出一个目录,则该软件包拥有这个目录,及该目录内的所有文件和子目录。因此,不要列出 %{_bindir},并且要小心的处理那些可能和其他软件包共享的目录。 如果存在以下情况,可能引发错误:1)通配符未匹配到任何文件或目录2)文件或目录被多次列出3)未列出 %{buildroot} 下的某个文件或目录也可以使用 %exclude 来排除文件。这对于使用通配符来列出全部文件时会很有用,注意如果未匹配到任何文件也会造成失败。l %changelog部分%changelog:变更日志,本段是修改日志段。第一行是:* 星期月日 年 修改人电子信箱。其中:星期、月份均用英文形式的前3个字母,用中文会报错。接下来的行写的是修改了什么地方,可写多行。一般以减号开始,便于后续的查阅。 总结:Ø SPEC文件中使用了较多的宏,如果查看对应宏的内容,可采用命令:Ø body部分各阶段列表 Ø 常用宏 2.4 RPM打包2.4.1 rpmlint检查SPEC文件或RPM包Ø 安装rpmlint:yum install rpmlintØ 使用rpmlint查找SPEC文件和RPM包的常见错误,如果返回错误/警告,使用 “-i” 选项查看更详细的信息。但由于rpmlint检测较严格,一些错误可忽略。$ rpmlint –i program.spec$ rpmlint NAME.spec ../RPMS/*/NAME*.rpm ../SRPMS/NAME*.rpm2.4.2 构建SRPM和RPMØ 构建SRPM 和RPM包cd ~/rpmbuild/SPECS$ rpmbuild -ba mysql.specØ 构建SRPM包cd ~/rpmbuild/SPECSrpmbuild –bs mysql.specØ 构建RPM包cd ~/rpmbuild/SPECSrpmbuild -bb mysql.specØ 如果成功,RPM 会保存至 ~/rpmbuild/RPMS,SRPM 会保存至 ~/rpmbuild/SRPMS。Ø 如果失败,请查看 BUILD 目录的相应编译日志。为了帮助调试,可以用 --short-circuit 选项来忽略成功的阶段。例如,若想要(略过更早的阶段)重新从 %install 阶段开始,请执行:$ rpmbuild -bi --short-circuit mysql.spec2.5 RPM包安装和卸载Ø 安装RPM包Ø 运行测试Ø 卸载RPM包3 RPM打包示例以R-3.6.1为例进行RPM打包。3.1 前提条件l 配置本地yum源,参考5.2节《yum源配置》l 打包资源准备上传 R-3.6.1.tar.gz源码包至服务器~/rpmbuild/SOURCES下载地址:https://mirror.tuna.tsinghua.edu.cn/CRAN/src/base/R-3/R-3.6.1.tar.gz上传pcre-8.40.tar.gz源码包至服务器任意目录下,如/opt/下载地址:https://netix.dl.sourceforge.net/project/pcre/pcre/8.40/pcre-8.40.tar.gz上传curl-7.64.1.tar.gz源码包至服务器任意目录下,如/opt/下载地址:https://curl.haxx.se/download/curl-7.64.1.tar.gz将上述资源拷贝到~/rpmbuild/SOURCES目录下。3.2 R打包1、 安装依赖2、 安装pcre-8.40和curl-7.64.1相关附件:pcre.spec文件和curl.spec文件。3、 编辑R.spec文件详见附件R.spec文件。 4、打包执行命令打包:打包完成:查看rpm包:至此,RPM打包R-3.6.1完成。4 RPM打包常见问题4.1 SPEC文件从Windows拷贝到Linux换行符问题问题描述:pec文件是从Windows拷贝到Linux系统,执行rpmbuild -ba hello.spec,提示换行符问题。解决办法:如果.spec文件是从Windows拷贝到Linux系统,必须转换为UNIX格式;4.2 打补丁提示找不到patch文件问题描述:patch命令层数参数(-p0)不对导致找不到patch文件解决办法:修改.spec文件中的patch命令指定层数(如p1),忽略起始目录,从相同目录(src/)开始:4.3 No build ID note found in xx现象描述:解决方法:在SPEC文件开始添加如下宏定义:参考文档:https://blog.csdn.net/zhangna20151015/article/details/786050004.4 避免生成debuginfo包找到~/rpmmacros并打开,添加下列内容:4.5 ./configure:No such file or directory解决方法:有些软件安装已不使用./configure进行配置,可使用如下方法:Ø 目录下没有configure,但有configure.am或configure.in时,需要用autoconf命令来生成configure。Ø 有些软件使用CMAKE 注意:如果使用CMAE,在SPEC文件中尽量不要对%configure或./configure进行注释(直接删除就好),否则也会提示找不到./configure文件。4.6 动态库libstdc++.so.6问题安装时缺少动态库问题:解决方法:1、先确认动态库中是否有相应GLIBCXX_3.4.20和GLIBCXX_3.4.20。查看后发现libstdc++.so.6.24有上述文件。参考:https://blog.csdn.net/u012811841/article/details/778545812、将动态库打包进去在spec文件中添加如下内容。5 参考信息5.1 rpm和yum软件包管理https://www.cnblogs.com/du-z/p/10886109.html 5.2 yum源配置本地yum源配置(也可用附件local_yum_install.sh脚本配置):https://www.cnblogs.com/diantong/p/10105805.html网络yum源配置:https://www.cnblogs.com/AganRun/p/12079080.html5.3 RPM打包原理、示例、详解及备查https://blog.csdn.net/get_set/article/details/534533205.4 打补丁问题https://blog.csdn.net/misiter/article/details/73956085.5 安装src.rpm源码包https://www.cnblogs.com/einyboy/archive/2012/09/13/2683015.html5.6 软链接处理https://blog.csdn.net/qq_21386275/article/details/798815435.7 安装RPM找不到库文件https://www.cnblogs.com/zl1991/p/7326142.html5.8 RPM宏定义文件https://blog.csdn.net/hawkerou/article/details/533796645.9 提取RPM包文件https://blog.csdn.net/sdfshfh/article/details/87891457注意:当目录下有相同文件时会拷贝失败,如第一次只拷贝了一个文件,后面拷贝了匹配项。见下图5.10 查询缺少的依赖包https://blog.51cto.com/2638441/2312549?source=dra5.11 RPM官网指南http://rpm.org/
-
之前分享了openssl交叉编译方法,现在可以将编译好的openssl动态库使用到paho mqtt中了。P.S.如果系统中已有openssl库,则可以直接使用。是否有安装openssl可以直接在控制台输入openssl命令,如果没有报命令不识别之类的,且出现如下结果就说明已安装了openssl:一、准备工作下载paho.mqtt.c源码,github下载地址:https://github.com/eclipse/paho.mqtt.c解压后上传到linux编译机上将交叉编译工具链也上传解压,并确认交叉编译器所在路径。如果是64位的编译链,还需要确认头文件(sysroot)所在路径 (详细确认方法请参考openssl交叉编译方法的帖子内容)二、修改Makefile主要修改3个地方:交叉编译器路径(准备工作中找到的交叉编译器所在路径)和openssl目录(之前编译好的openssl库所在目录,因为要替换的不只一处,可在文本编辑器中全局搜索openssl再自行替换),如下图所示(点击下图可使用鼠标滚轮放大缩小)如果要增加编译选项,可以加在CFLAGS中(编译选项根据需求添加,可以不添加):上图中增加的编译选项:-Wall -O3 -Wl,-z,relro,-z,now,-z,noexecstack -fno-strict-aliasing -fno-omit-frame-pointer -pipe -Wall -MD -MP -fno-common -freg-struct-return -fno-inline -fno-exceptions -Wfloat-equal -Wshadow -Wformat=2 -Wextra -rdynamic -Wl,-z,relro,-z,noexecstack -fstack-protector-strong -fstrength-reduce -fno-builtin -fsigned-char -ffunction-sections -fdata-sections -Wpointer-arith -Wcast-qual -Waggregate-return -Winline -Wunreachable-code -Wcast-align -Wundef -Wredundant-decls -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs 三、编译出库修改好Makefile后就可以编译了,先make clean一下(把原来的编译结果先清空),再make即可编译完成后可以在build/output目录下看到编译好的库:四、其他说明如果不需要交叉编译工具,而是直接使用gcc,那么修改Makefile时只要修改openssl目录即可(编译选项可加可不加)
-
一、准备工作 1、到openssl官网下载最新版本openssl(如openssl-1.1.1d.tar.gz),上传到linux编译机上(如上传到目录/home/test下),并使用tar -xvf openssl-1.1.1d.tar.gz解压: 2、将要用到的交叉编译工具链解压后,找到交叉编译器所在路径(如果直接使用系统的gcc,可跳过这一步,但要保证gcc已安装): 注意:gcc/g++/ar/ranlib/nm等文件的名字根据编译链的不同,文件名开头会有所不同,但文件名结尾是不变的,如arm架构比较常见的编译器是arm-linux-gcc二、配置 进入openssl源码目录,运行如下配置命令 ./config shared --prefix=/home/test/openssl --openssldir=/home/test/openssl/ssl或./config no-asm shared --prefix=/home/test/openssl --openssldir=/home/test/openssl/ssl 其中prefix 是安装目录,openssldir 是配置文件目录,shared 作用是生成动态链接库(即.so库) 注意:no-asm表示不使用汇编代码,如果编译有问题再加,没有问题就不加 注意: 如果遇到64位的编译链,需要添加sysroot参数,用如下命令配置(+参考图片): ./config no-asm shared --prefix=/home/test/openssl --openssldir=/home/test/openssl/ssl --sysroot="{头文件所在路径}" 一般来说,头文件所在路径 与 XXX-gcc/g++/ar/nm等(XXX是交叉编译器名字的前缀)的所在目录不一样,在另外一个大目录下(如下图所示) Tips: 可以先用find ./ -name *-gcc命令找到gcc/g++/ar/ranlib/nm等文件所在目录,那另一个目录就是头文件所在路径 从上图看,gcc/g++/ar/ranlib/nm等文件在sysroots/x86_64-fslsdk-linux的某目录,所以头文件一般在另一个目录sysroots/ppc64e6500-fsl-linux下,且sysroots/ppc64e6500-fsl-linux下的usr/include目录下面有许多(不是一两个)头文件(也就是说--sysroot的值是usr/include所在的目录): 三、修改Makefile 配置完成后会在openssl源码目录下生成一个Makefile文件,打开查看内容,会看到CROSS_COMPILE的值是空的 这时要将CROSS_COMPILE的值修改为XXX-gcc所在绝对路径+XXX-gcc的文件名前缀(参考下图),也就是说要先找到交叉编译工具xxx-gcc/g++/ar/nm等文件所在路径(其中“XXX-”是交叉编译工具文件名前缀): 修改CROSS_COMPILE的值最终是为了修改arm-linux-xxx-gcc/ar/ranlib/nm等的路径,在比较老的openssl版本中,没有CROSS_COMPILE参数,需要修改如下5个变量的值 (注意下图所用的交叉编译工具不是跟前面的不一样,所以路径也不同): 四、编译出库 修改完Makefile后就可以进行编译了,到openssl源码目录下,运行make命令: openssl源码目录下,运行make命令: make 如果没有报错,再运行make install make install 在配置的openssl安装目录下/home/test/openssl找到lib目录,有如下两个文件: libcrypto.so.1.1、libssl.so.1.1和软链接libcrypto.so、libssl.so 五、其他说明 1、交叉编译工具不是在任何环境上都可使用的,需要系统环境和编译工具匹配才可以,主要看CPU和指令集 2、如果不需要交叉编译工具,而是直接使用gcc,那么,配置生成Makefile后不需要修改Makefile(即跳过第三步),直接编译即可 3、如果make出错后修改了Makefile,记得make clean后再make 4、有的编译工具是32位的,如果在64位的linux机器上使用,可能会报如下错误,这时只要将Makefile中的-m64都删除,再进行编译即可
-
1、CentOSCentOS系统yum源有rpm安装包,可以直接通过“yum -y install device-mapper-multipath*”安装,或通过如下链接手动使用rpm -ivh命令安装:http://mirror.centos.org/altarch/7/os/aarch64/Packages/device-mapper-multipath-0.4.9-127.el7.aarch64.rpmhttp://mirror.centos.org/altarch/7/os/aarch64/Packages/device-mapper-multipath-devel-0.4.9-127.el7.aarch64.rpmhttp://mirror.centos.org/altarch/7/os/aarch64/Packages/device-mapper-multipath-libs-0.4.9-127.el7.aarch64.rpmhttp://mirror.centos.org/altarch/7/os/aarch64/Packages/device-mapper-multipath-sysvinit-0.4.9-127.el7.aarch64.rpm2、中标麒麟NeoKylin中标麒麟NeoKylin系统yum源有rpm安装包,可以直接通过“yum -y install device-mapper-multipath*”安装,或通过如下链接手动使用rpm -ivh命令安装:http://download.cs2c.com.cn/neokylin/server/releases/7.0/aarch64/os/Packages/device-mapper-multipath-0.4.9-68.nd7.1.aarch64.rpmhttp://download.cs2c.com.cn/neokylin/server/releases/7.0/aarch64/os/Packages/device-mapper-multipath-libs-0.4.9-68.nd7.1.aarch64.rpmhttp://download.cs2c.com.cn/neokylin/server/releases/7.0/aarch64/os/Packages/device-mapper-multipath-sysvinit-0.4.9-68.nd7.1.aarch64.rpm3、凝思凝思有一些自己的多路径软件,需要根据对应系统版本选择对应的软件安装,获取链接如下:http://www.linx-info.com/#/support/software4、FedoraFedora系统针对不同的版本有不同的多路径软件,链接如下:Fedora Rawhide for aarch64:https://rpmfind.net/linux/fedora/linux/development/rawhide/Everything/aarch64/os/Packages/d/device-mapper-multipath-0.8.2-1.fc32.aarch64.rpmFedora 31 for aarch64:https://rpmfind.net/linux/fedora/linux/releases/31/Everything/aarch64/os/Packages/d/device-mapper-multipath-0.8.0-3.fc31.aarch64.rpmFedora 30 for aarch64:https://rpmfind.net/linux/fedora/linux/releases/30/Everything/aarch64/os/Packages/d/device-mapper-multipath-0.7.9-6.git2df6110.fc30.aarch64.rpmFedora 29 updates for aarch64:https://rpmfind.net/linux/fedora/linux/updates/29/Everything/aarch64/Packages/d/device-mapper-multipath-0.7.7-6.gitef6d98b.fc29.aarch64.rpmFedora 29 for aarch64:https://rpmfind.net/linux/fedora/linux/releases/29/Everything/aarch64/os/Packages/d/device-mapper-multipath-0.7.7-5.gitef6d98b.fc29.aarch64.rpm5、UbuntuUbuntu系统直接安装多路径软件multipath-tools即可:apt-get install multipath-tools如果需要从SAN引导,则还需要multipath-tools-boot软件包,不需要可以不安装:apt-get install multipath-tools-boot
-
文档位置已迁移至如下链接:https://support.huaweicloud.com/tstg-kunpenghpcs/kunpenghpcs_tstg_0001.html
-
1、简介Netdata是一个高度优化的Linux守护进程,它为Linux系统,应用程序,SNMP服务等提供实时的性能监测。它用可视化的手段,将被监测者最细微的细节,展现了出来。这样,你便可以清晰地了解你的系统和应用程序此时的状况。使用此软件,你可以得到:1.优美的界面:bootstrap框架下的控制界面2.自定义的控制界面:你可以使用简单的HTML代码去自定义控制界面(不需要使用javascript)3.极其的快速而高效:程序使用C进行编写(默认安装下,预计只有2%的单核CPU使用率和少许的内存使用率)4.零配置:你只需要去安装它,接着它就会自动地监测一切数据5.零依赖:它的静态网络文件和网络接口拥有自己的网络服务器6.可扩展:用它自身的插件API(可以使用许多方式来制作它的插件,从bash到node.js),你可以检测任何可以衡量的数据。7.可嵌入:它可以在任何Linux内核可以运行的地方运行 2、基础环境类别子项版本获取地址(方法)华为云虚拟机KC1(920)--OSCentOS7.5Kernel4.14软件包netdatahttps://github.com/google/googletest.git3、依赖安装 无4、组件编译安装Netdata提供多种安装方式,本文介绍两种1)源码安装安装依赖yum install autoconf automake curl gcc git libmnl-devel libuuid-devel openssl-devel libuv-devel lz4-devel Judy-devel make nc pkgconfig python zlib-devel 下载源码git clone https://github.com/netdata/netdata.git --depth=100cd netdata 运行脚本安装./netdata-installer.sh 2)运行Docker 镜像拉取docker镜像docker pull netdata/netdata 启动docker(使用netdata镜像)docker run -d --name=netdata \ -p 19999:19999 \ -v /etc/passwd:/host/etc/passwd:ro \ -v /etc/group:/host/etc/group:ro \ -v /proc:/host/proc:ro \ -v /sys:/host/sys:ro \ --cap-add SYS_PTRACE \ --security-opt apparmor=unconfined \ netdata/netdata5、系统配置 无6、测试curl 127.0.0.1:19999 浏览器访问: https://<serverip>:19999 7、参考信息https://docs.netdata.cloud/packaging/installer/8、FAQ Q:安装后无法访问服务A:安装或启动docker实例后netdata服务会自动拉起,如果无法访问,首先排除服务是否启动,其次是检查网络是否正常,端口是否可以访问(是否关闭或禁用)。
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签