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

通过rpmbuild构建Elasticsearch-7.14.2-search-guard的RPM包

系列文章目录

rpmbuild从入门到放弃
search-guard插件使用入门手册


文章目录

  • 系列文章目录
  • 前言
  • 一、资源准备
  • 二、spec文件
    • 1.基础信息
    • 2.%prep
    • 3.%Install
    • 4.%file
    • 5.%post
    • 6.%postun
  • 三、成果演示
    • 1.执行构建过程图示例
    • 2.执行安装RPM包示例
    • 3.进程检查
    • 4.访问esApi
  • 总结


前言

不管是源码安装elasticsearch还是通过elastic官网的rpm包进行安装,在安装完成后都需要进行手动配置elastic的安全认证,这样不管从安装效率还是维护都比较麻烦,为了让安装和开启鉴权一起完成,本篇文章就使用rpmbuild自行构建elasticsearch-7.14.2的RPM包,安全认证插件使用的是search-guard,具体构建方式看下方文章即可。阅读下方文章前,请先阅读顶部的两章链接文件,先对整体知识有个大体上的了解。


提示:已在本地centos 7环境执行过构建测试、安装、使用流程,目前未发现异常

一、资源准备

	1、rpmbuild工具安装此处不再描述,详情查看顶部文章链接即可
	2、下载elasticsearch-7.14.2的tar包[root@python2 SOURCES]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.2-linux-x86_64.tar.gz
	3、下载elasticsearch版本对应的search-guard插件[root@python2 SOURCES]# wget https://maven.search-guard.com/search-guard-suite-release/com/floragunn/search-guard-suite-plugin/7.14.2-52.3.0/search-guard-suite-plugin-7.14.2-52.3.0.zip[root@python2 SOURCES]# https://docs.search-guard.com/latest/search-guard-installation

至此源码包准备完成,下面开始编写spec文件

二、spec文件

1.基础信息

文件如下(示例):

#自定义宏,相当于Linux中"Key-Value"变量形式
#--->名称
%define Name elasticsearch
#--->版本
%define Version 7.14.2
#--->本rpm包中需更换的配置文件#--->本rpm包默认安装的路径
%define InstallPath /export/server/elasticsearch-7.14.2
#-->rpm包封装进去的脚本
%define configYaml elasticsearch.yml
%define search_guard  search-guard-suite-plugin-7.14.2-52.3.0.zip
%define search_tlstools search-guard-tlstool-1.7.tar.gz
%define __spec_install_post %{nil}
%define _build_id_links none
# 软件包的名称 
Name: %{Name}
# 软件包的版本 
Version: %{Version}
# 软件包发布序列号,1表示第几次打包 %{?dist} 会再包名中添加操作系统系统
Release: 1
# 软件包的概要信息,不要超过50个 
# 软件授权方式 
License: BSD# 软件分类
Group: System Middleware
# 源代码软件包的官方地址或源码包的下载地址 
URL: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.2-linux-x86_64.tar.gzSummary: The elasticsearch for centos 7.14.2 x86_64.
# 源代码软件包的名字 
Source0: %{Name}-%{Version}-linux-x86_64.tar.gz
Source3: %{configYaml}
Source4: %{search_guard}
Source5: %{search_tlstools}# install使用的虚拟目录,安装后就在该目录下打包 
AutoReqProv: no
#制作过程中用到的软件包
Requires: bash#软件包详细描述信息 
%description
This is %{Name}

2.%prep

解压源码包部分
如下(示例):

# 安装前的准备工作,一般用于解压源码包
%prep
#解压并cd到相关目录  tar xf SOURCES/xxx.tar.gz -C BUILD && cd BUILD
%setup -q -n elasticsearch-7.14.2  #-q 静默 不输出信息  -n 指定解压后的名称

3.%Install

此部分主要用于解压后的源码安装及目录创建等工作
在该文件中主要实现目录创建、search-guard插件的安装及密钥文件的创建工作,并将准备好的文件和目录拷贝到BUILDROOT目录下

# 源码安装
#目前还是在/export/rpmbuild/BUILD/目录中,执行以下操作
#rm -rf /export/rpmbuild/BUILDROOT
%install
%{_rm} -rf %{buildroot} # 清理之前的安装
mkdir -p /tmp/search-guard-tlstool
tar -zxvf %{SOURCE5} -C /tmp/search-guard-tlstool
cd /tmp/search-guard-tlstool/config/ && cp example.yml tlsconfig.yml
sed -i '/^#/d; /^$/d' tlsconfig.yml
sed -i '/root\.ca\.example\.com/c\      dn: CN=root.ca.com.local,OU=CA,O=com,DC=com,DC=local' tlsconfig.yml
sed -i '/signing\.ca\.example\.com/c\      dn: CN=root.ca.com.local,OU=CA,O=com,DC=com,DC=local' tlsconfig.yml
sed -i 's/#nodesDn/nodesDn/' tlsconfig.yml
sed -i 's/#- "CN=\*.example.com,OU=Ops,O=Example Com\\\\, Inc.,DC=example,DC=com"/- "CN=\*.com.local,OU=Ops,O=com,DC=com,DC=local"/' tlsconfig.yml
sed -i 's/# nodeOid: "1.2.3.4.5.5"/nodeOid: "1.2.3.4.5.5"/' tlsconfig.yml
sed -i '88,99d' tlsconfig.yml
sed -i 's/- name: node1/- name: esnode/' tlsconfig.yml
sed -i '/dn: CN=node1\.example\.com*/c\    dn: CN=esnode.com.local,OU=Ops,O=com,DC=com,DC=local' tlsconfig.yml
sed -i 's/dns: node1.example.com/dns: esnode/' tlsconfig.yml
sed -i '/dn: CN=spock\.example\.com/c\    dn: CN=spock.com.local,OU=Ops,O=com,DC=com,DC=local' tlsconfig.yml
sed -i '/dn: CN=kirk\.example\.com/c\    dn: CN=kirk.com.local,OU=Ops,O=com,DC=com,DC=local' tlsconfig.yml
sed -i 's/pkPassword: auto/pkPassword: none/' tlsconfig.yml
cd /tmp/search-guard-tlstool/tools/
./sgtlstool.sh -c ../config/tlsconfig.yml -ca
./sgtlstool.sh -c ../config/tlsconfig.yml -crt
cd out/ && chmod 644 root-ca.* signing-ca.* esnode* kirk.*
mkdir -p %{buildroot}%{InstallPath}/plugins/search-guard-7
mkdir -p %{buildroot}%{InstallPath}/{modules,logs,data,lib,config,bin}
cp -rp /tmp/search-guard-tlstool/tools/out/{root-ca.pem,kirk.pem,kirk.key,esnode.pem,esnode.key} %{buildroot}%{InstallPath}/config# 复制自定义的或额外的配置文件和脚本
unzip %{SOURCE4} -d %{buildroot}%{InstallPath}/plugins/search-guard-7/
cp -rp %{_builddir}/%{Name}-%{Version}/* %{buildroot}%{InstallPath}/
rm -rf %{buildroot}%{InstallPath}/jdk

4.%file

主要用于安装后目录下都包含哪些文件或子目录

%files
%defattr(-,elasticsearch,elasticsearch,-)
%dir %{InstallPath}
%dir %{InstallPath}/bin
%dir %{InstallPath}/config
%dir %{InstallPath}/lib
%dir %{InstallPath}/logs
%dir %{InstallPath}/data
%dir %{InstallPath}/modules
%dir %{InstallPath}/plugins
%{InstallPath}/bin/*
%{InstallPath}/config/*
%{InstallPath}/lib/*
%{InstallPath}/modules/*
%{InstallPath}/plugins/*
%{InstallPath}/NOTICE.txt
%{InstallPath}/LICENSE.txt
%{InstallPath}/README.asciidoc

5.%post

主要用于安装rpm后做的相关操作,比如启动进程、创建用户等工作。在此文件中,该部分主要用于替换elasticsearch.yml文件、授权、设置所需要的内核参数、初始化search-guard插件并重置es密码

%post
#!/bin/sh
cat >%{InstallPath}/config/elasticsearch.yml<<EOF
cluster.name: cityosnode.name: wangyingkai-test-01path.data: %{InstallPath}/data
path.logs: %{InstallPath}/logs
# Lock the memory on startup:
#bootstrap.memory_lock: true
network.host: $local_ip
http.port: 9200discovery.seed_hosts: ["$local_ip"]
cluster.initial_master_nodes: ["$local_ip"]
#discovery.zen.minimum_master_nodes:#gateway.recover_after_nodes: 3# Search Duard Configure
action.auto_create_index: true
node.master: true
node.data: true
searchguard.ssl.transport.pemcert_filepath: esnode.pem
searchguard.ssl.transport.pemkey_filepath: esnode.key
searchguard.ssl.transport.pemtrustedcas_filepath: root-ca.pem
searchguard.ssl.transport.enforce_hostname_verification: false
searchguard.ssl.transport.resolve_hostname: false
searchguard.authcz.admin_dn:
- CN=kirk.com.local,OU=Ops,O=com,DC=com,DC=local
searchguard.cert.oid: 1.2.3.4.5.5
EOF# edit config file 修改yml文件
sed -i "s/node.name:.*/node.name: $local_ip/g" %{InstallPath}/config/elasticsearch.yml# useradd elasticsearch 创建用户
id elasticsearch > /dev/null 2>&1
if [ $? == 0 ];thenecho 'elasticsearch user exist.'
elseuseradd -s /sbin/nologin elasticsearch
fi#chown 设置目录权限
chown -R elasticsearch:elasticsearch %{InstallPath}#设置kernel参数
if ! grep -w "fs.file-max" /etc/sysctl.conf |grep -v ^# >/dev/null
thensed -i '$a\\nfs.file-max = 65536' /etc/sysctl.conf
fiif ! grep -w "vm.max_map_count" /etc/sysctl.conf |grep -v ^#  >/dev/null
thensed -i '$a\\nvm.max_map_count = 262144' /etc/sysctl.conf
fi
sysctl -p > /dev/null
# 启动 Elasticsearch 服务
su elasticsearch -c "%{InstallPath}/bin/elasticsearch -d -p %{InstallPath}/%{Name}.pid"
# 等待 Elasticsearch 启动,修改密码
until curl -s http://$local_ip:9200 > /dev/null; doecho "Waiting for Elasticsearch to start..."sleep 10
done# 生成哈希密码并更新配置文件
HASHED_PASSWORD=$(%{InstallPath}/plugins/search-guard-7/tools/hash.sh -p "0gvzJr66iNs5")
# 转义特殊字符
ESCAPED_HASHED_PASSWORD=$(echo "$HASHED_PASSWORD" | sed 's/[\/&]/\\&/g')
# 更新 sg_internal_users.yml 文件
if [ -n "$ESCAPED_HASHED_PASSWORD" ]; thensed -i 's/^  hash: ".*"/  hash: "'"$ESCAPED_HASHED_PASSWORD"'"/' %{InstallPath}/plugins/search-guard-7/sgconfig/sg_internal_users.ymlsed -i 's/\r//g' %{InstallPath}/plugins/search-guard-7/sgconfig/sg_internal_users.yml
fi#修改完配置文件并执行初始化
cd %{InstallPath}/plugins/search-guard-7/tools && sh sgadmin.sh -h $local_ip -cd ../sgconfig -key ../../../config/kirk.key -cert ../../../config/kirk.pem -cacert ../../../config/root-ca.pem -nhnv -icl

6.%postun

这部分主要用于卸载后需要做的任务,比如:删除目录等任务工作,在该spec文件中,这部分主要用于根据pid是否存在停止程序、删除目录,完成相应的卸载工作

%postun -p /bin/sh
#!/bin/bash
PID_FILE="%{InstallPath}/%{Name}.pid"
DIR_TO_REMOVE="%{InstallPath}"# Check if the PID file exists and read the PID from it
if [ -f "$PID_FILE" ]; thenPID=$(cat "$PID_FILE")# Check if a process with the given PID existsif ps -p $PID > /dev/null 2>&1; then# Kill the process with the PID found in the PID filekill $PID# Wait a moment to allow the process to terminatesleep 1fi# Remove the PID filerm -f "$PID_FILE"
fi# Remove the directory
rm -rf "$DIR_TO_REMOVE"

三、成果演示

1.执行构建过程图示例

在这里插入图片描述
在这里插入图片描述

2.执行安装RPM包示例

在这里插入图片描述
在这里插入图片描述

3.进程检查

在这里插入图片描述

4.访问esApi

在这里插入图片描述在这里插入图片描述


总结

通过完成本篇文章,已经对rombuild有了60%的理解和使用,熟能生巧,希望也对大家的实际工作能起到帮助作用。加油!!!

相关文章:

通过rpmbuild构建Elasticsearch-7.14.2-search-guard的RPM包

系列文章目录 rpmbuild从入门到放弃 search-guard插件使用入门手册 文章目录 系列文章目录前言一、资源准备二、spec文件1.基础信息2.%prep3.%Install4.%file5.%post6.%postun 三、成果演示1.执行构建过程图示例2.执行安装RPM包示例3.进程检查4.访问esApi 总结 前言 不管是源…...

js 图片放大镜

写购物项目的时候&#xff0c;需要放大图片&#xff0c;这里用js写了一个方法&#xff0c;鼠标悬浮的时候放大当前图片 这个是class写法 <!--* Descripttion: * Author: 苍狼一啸八荒惊* LastEditTime: 2024-07-10 09:41:34* LastEditors: 夜空苍狼啸 --><!DOCTYPE …...

数据模型-ER图在数据模型设计中的应用

ER图在数据模型设计中的应用 1. ER图概述&#xff1a;起源与发展​ 实体-关系图&#xff08;Entity Relationship Diagram&#xff0c;简称ER图&#xff09;起源于1970年代&#xff0c;由Peter Chen首次提出&#xff0c;作为描述数据和信息间关系的图形化语言。随着数据库技术…...

C++ //练习 14.46 你认为应该为Sales_data类定义上面两种类型转换运算符吗?应该把它们声明成explicit的吗?为什么?

C Primer&#xff08;第5版&#xff09; 练习 14.46 练习 14.46 你认为应该为Sales_data类定义上面两种类型转换运算符吗&#xff1f;应该把它们声明成explicit的吗&#xff1f;为什么&#xff1f; 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&…...

tensorflow张量生成以及常用函数

张量tensor&#xff1a;多维数组&#xff08;列表&#xff09; 阶&#xff1a;张量的维数 维数 阶 名字 例子 0-D 0 标量 scalar s 1&#xff0c; 2&#xff0c; 3 1-D 1 向量 vector…...

如何在 Windows 10 上恢复未保存的 Word 文档

您是否整晚都在处理一个重要的 word 文件&#xff0c;但忘记保存它了&#xff1f;本文适合您。在这里&#xff0c;我们将解释如何恢复未保存的 word 文档。除此之外&#xff0c;您还将学习如何恢复已删除的 word 文档。 从专业人士到高中生&#xff0c;每个人都了解丢失重要 W…...

Rust入门实战 编写Minecraft启动器#3解析资源配置

首发于Enaium的个人博客 在上一篇文章中&#xff0c;我们已经建立了资源模型&#xff0c;接下来我们需要解析游戏的配置文件。 首先我们添加serde_json依赖和model依赖。 model { path "../model" } serde_json "1.0"之后我们在lib.rs中添加解析的tra…...

openFileInput 内部保持的数据如何删除

在Android中&#xff0c;openFileInput 是用于从设备内部存储中读取文件的API&#xff0c;但它本身并不提供直接删除文件的功能。要删除通过 openFileInput 读取的文件&#xff0c;你需要使用其他方法。以下是如何删除内部存储中文件的步骤和说明&#xff1a; 步骤 获取文件路…...

Python编写的俄罗斯方块小游戏

文章目录 游戏页面实现代码 游戏页面 左右键移动方块位置&#xff0c;上键切换方块形态。 实现代码 import pygame import random# 初始化 Pygame pygame.init()# 定义颜色 colors [(0, 0, 0), # 黑色(255, 0, 0), # 红色(0, 255, 0), # 绿色(0, 0, 255), # 蓝色(255,…...

前端直连小票打印机,前端静默打印,js静默打印解决方案

最近公司开发了一个vue3收银系统&#xff0c;需要使用小票打印机打印小票&#xff0c;但是又不想结账的时候弹出打印预览&#xff0c;找了很多方案&#xff0c;解决不了js打印弹出的打印预览窗口&#xff01; 没办法&#xff0c;自己写了一个winform版本的静默打印软件&#xf…...

python批量读取Excel数据写入word

from docx import Document from docx.shared import Pt from docx.enum.table import WD_TABLE_ALIGNMENT, WD_ROW_HEIGHT_RULE import os import pandas as pd from docx import Document from docx.oxml.ns import qn from docx.shared import Pt # ... 其他代码 ... work…...

Unity 常用取整方法

向下取整&#xff1a;Mathf.FloorToInt&#xff08;&#xff09; 向上取整&#xff1a;Math.Ceiling 截断取整&#xff1a;(int) 四舍五入&#xff1a;Mathf.RoundToInt e.NewValues.value.ToString(“F0”) 百分比&#xff1a; int i 400; int j 200; string p ((double)i…...

Apache Seata Mac下的Seata Demo环境搭建

本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 Mac下的Seata Demo环境搭建&#xff08;AT模式&#xff09; 前言 最近因为工作需要&#xf…...

记录|C#安装+HslCommunication安装

记录线索 前言一、C#安装1.社区版下载2.VS2022界面设置 二、HslCommunication安装1.前提2.安装3.相关文件【重点】 更新记录 前言 初心是为了下次到新的电脑上安装VS2022做C#上机位项目时能快速安装成功。 一、C#安装 1.社区版下载 Step1. 直接点击VS2022&#xff0c;跳转下…...

Android 12系统源码_设备设置(一)Settings介绍

前言 Settings 类是一个用于访问和管理设备设置的关键类&#xff0c;而作为系统开发人员&#xff0c;经常需要用这个类来做一些系统设备设置&#xff0c;而Settings里面存在着好几个处理不同领域的设备设置类&#xff0c;那么如何才能结合自己的业务场景正确选择使用这些设备设…...

如何查看GD32 Keil和IAR工程的map文件

我们在设计调试程序时&#xff0c;往往需要知道一个函数或一个变量它在MCU中具体所在的地址以及所占用的空间大小&#xff0c;这时候就需要查看map文件。 那么什么是map文件呢&#xff1f;map文件是编译器编译工程后生成的一个文件&#xff0c;文件会有很多信息&#xff0c;比…...

1Panel安装命令脚本大全,多Linux操作系统版本

1Panel安装命令脚本大全&#xff0c;包括RedHat、CentOS、Ubuntu、Debian和openEuler等linux操作系统&#xff0c;码笔记整理1Panel安装命令脚本清单&#xff1a; RedHat/CentOS安装命令&#xff1a; curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh…...

校园电动车安全监控和调度系统-计算机毕业设计源码13028

摘要 校园电动车安全监控和调度系统是为了确保校园内电动车的安全和高效运行而设计的。该系统通过安装在电动车上的监控设备&#xff0c;实时监测电动车的运行状态&#xff0c;包括速度、位置、电池电量等&#xff0c;一旦发现异常情况&#xff0c;系统会立即发出警报并通知相关…...

【LLM之Agent】ReAct论文阅读笔记

研究背景 论文介绍了 “ReAct” 范式&#xff0c;该范式旨在融合推理和行动的功能&#xff0c;通过让大型语言模型&#xff08;LLMs&#xff09;生成既包括言语推理轨迹又包括行动序列的输出&#xff0c;解决多种语言推理和决策任务。这种方法允许模型在与外部环境&#xff08…...

LeetCode 125. 验证回文串

更多题解尽在 https://sugar.matrixlab.dev/algorithm 每日更新。 组队打卡&#xff0c;更多解法等你一起来参与哦&#xff01; LeetCode 125. 验证回文串&#xff0c;难度简单。 双指针 解题思路&#xff1a; 遍历字符串&#xff0c;将所有大写字符转换为小写字符、并移除所…...

IT审计必看!对比旧版,CISA考试改版升级亮点和重点内容是什么?

官方通知&#xff0c;今年8月1日&#xff0c;CISA新版考纲正式上线&#xff0c;旧版在7月23日后就无法约考了。 艾威培训邀请了国内知名的IT审计CISA授课老师吴老师来为大家详细讲解CISA新版考纲的变化 目前第28th版教材只有英文版&#xff0c;中文版尚未发布。我们艾威经验丰…...

充电宝哪个牌子公认质量好?哪家充电宝好用?4款口碑好充电宝

在如今这个电子设备不离手的时代&#xff0c;充电宝成为了我们生活中的必备品。然而&#xff0c;面对市场上琳琅满目的充电宝品牌和型号&#xff0c;选择一款质量可靠、性能出色的充电宝并非易事。大家都在问&#xff1a;充电宝哪个牌子公认质量好&#xff1f;哪家充电宝好用&a…...

Python实现图像添加水印的方法

1. 简介 在日常图像处理中&#xff0c;为图片添加水印是一项常见任务。有多种方法和工具可供选择&#xff0c;而今天我们将专注于使用Python语言结合PIL库批量添加水印。 需要注意的是&#xff0c;所选用的图片格式不应为JPG或JPEG&#xff0c;因为这两种格式的图片不支持透明…...

MemFire Cloud: 一种全新定义后端即服务的解决方案

在这个快节奏的互联网时代&#xff0c;开发者们最希望的就是能够省时省力地完成项目&#xff0c;快速上线。然而&#xff0c;搭建服务、开发接口API、处理各种后端问题&#xff0c;往往让人头疼不已。别担心&#xff0c;现在有了MemFire Cloud&#xff0c;一款为懒人开发者量身…...

职业教育软件测试实验实训室建设应用案例

在信息化高速发展的今天&#xff0c;软件测试作为保障软件质量的关键环节&#xff0c;其重要性日益凸显。为满足职业教育对软件测试人才的培养需求&#xff0c;提高学生的实践能力和职业素养&#xff0c;唯众倾力打造了一款先进的软件测试实验实训室&#xff0c;并成功应用于多…...

如何判断一个js对象为数组类型

如何判断一个js对象为数组类型? 能想到的最常见的intanceof是吗?开始是这么认为,但是不是哈,看下面的解释,也没有太明白,暂且记住吧 综上,判断js对象为数组的两种方式 Array.isArray([]) // trueObject.prototype.toString.call([]) ‘[object Array]’ //true...

Nacos2.X 配置中心源码分析:客户端如何拉取配置、服务端配置发布客户端监听机制

文章目录 Nacos配置中心源码总流程图NacosClient源码分析获取配置注册监听器 NacosServer源码分析配置dump配置发布 Nacos配置中心源码 总流程图 Nacos2.1.0源码分析在线流程图 源码的版本为2.1.0 &#xff0c;并在配置了下面两个启动参数&#xff0c;一个表示单机启动&#…...

phpstudy框架,window平台,如何开端口给局域网访问?

Windows平台上使用phpstudy框架开端口给同事访问&#xff0c;主要涉及到几个步骤&#xff1a;查看并确认本机IP地址、配置phpstudy及网站项目、开放防火墙端口以及确保同事能够通过局域网访问。以下是详细的步骤说明&#xff1a; 1. 查看并确认本机IP地址 首先&#xff0c;需…...

高性能Python网络框架实现网络应用详解

概要 Python作为一种广泛使用的编程语言,其简洁易读的语法和强大的生态系统,使得它在Web开发领域占据重要位置。高性能的网络框架是构建高效网络应用的关键因素之一。本文将介绍几个高性能的Python网络框架,详细描述它们的特点、使用场景及具体示例代码,帮助高效实现网络应…...

万字学习——DCU编程实战

参考资料 2.1 DCU软件栈&#xff08;DCU ToolKit, DTK&#xff09; DCU 开发与使用文档 (hpccube.com) DCU软件栈 DCU的软件栈—DCU Toolkit&#xff08;DTK&#xff09; HIP&#xff08;Heterogeneous-Compute Interface for Portability&#xff09;是AMD公司在2016年提出…...