通过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%的理解和使用,熟能生巧,希望也对大家的实际工作能起到帮助作用。加油!!!

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

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

相关文章

命令执行(RCE)面对各种过滤,骚姿势绕过总结

1、什么是RCE RCE又称远程代码执行漏洞&#xff0c;可以让攻击者直接向后台服务器远程注入操作系统命令或者代码&#xff0c;从而控制后台系统。 2、RCE产生原因 服务器没有对执行命令的函数做严格的过滤&#xff0c;最终导致命令被执行。 3、命令执行函数 PHP代码执行函数…

软件项目运维服务方案(Word原件)

1.项目情况 2.服务简述 2.1服务内容 2.2服务方式 2.3服务要求 2.4服务流程 2.5工作流程 2.6业务关系 2.7培训 3.资源提供 3.1项目组成员 3.2服务保障 软件文档全套下载&#xff1a;本文末个人名片直接获取或者进主页。

喝酒骰子夜店手灯轮盘扫雷鳄鱼拆弹你演我猜小游戏流量主小程序开源版开发

喝酒骰子夜店手灯轮盘扫雷鳄鱼拆弹你演我猜小游戏流量主小程序开源版开发 喝酒摇骰子、轮盘、扫雷大战、夜店手灯、鳄鱼拔牙、喝酒大叔、指尖光环、拆弹英雄、幸运转转转、你演我猜、眼疾手快、占领方块、你演我猜。 喝酒骰子类小程序通常包含多种互动游戏和娱乐功能&#xf…

深入剖析数据库索引

写在前面&#xff1a; 此博客内容已经同步到我的博客网站&#xff0c;如需要获得更优的阅读体验请前往https://mainjaylai.github.io/Blog/blog/database 文章目录 如何验证我们正在使用InnoDB引擎 主键如果你没有自己创建任何主键会发生什么&#xff1f;关键字和索引之间的区别…

HR8870:H桥PWM直流电机驱动IC性能指标和应用方案选型

HR8870芯片描述 HR8870是一款直流有刷电机驱动器&#xff0c;适用于打印机、电器、工业设备以及其他小型机器。两个逻辑输入控制H桥驱动器&#xff0c;该驱动器由四个N-MOS组成&#xff0c;能够以高达4.5A的峰值电流双向控制电机。利用电流衰减模式&#xff0c;可通过对输入进行…

vue3实现简单登录页面

使用 Vue3 ts scss element-plus 实现简单的用户登录界面&#xff0c;登录方式包括&#xff1a;手机验证码登录、手机账号密码登录、扫码登录&#xff0c;效果如下图所示&#xff1a; 详细代码&#xff1a; 模版部分 <template><div class"login">&l…

阿里云Elasticsearch-趣味体验

阿里云Elasticsearch-趣味体验 什么是阿里云Elasticsearch阿里云Elasticsearch开通服务查看Elasticsearch实例配置Kibana公网IP登录Elasticsearch添加测试数据 Kibana数据分析查看数据字段筛选数据页面条件筛选KQL语法筛选保存搜索语句导出筛选结果指定列表展示字段写在最后 什…

(硬件05)电流检测中运放的“虚短”与“虚断”

本文目录 本篇前言知识点讲解软件仿真 本篇前言 运放&#xff0c;全称是运算放大器&#xff0c;一般的用法是用来发大电信号的&#xff0c;本篇讲解到的就是通过运算放大器将大电流流过采样电阻后的电压进行放大后输出给单片机的ADC&#xff0c;单片机根据ADC的值&#xff08…

Commons-Collections篇-CC7链

前言 和CC5反序列化链相似&#xff0c;CC7也是后半条LazyMap执行命令链不变&#xff0c;但是中间过程通过AbstractMap.equals()触发LazyMap.get()方法 环境 我们可以接着使用之前已经搭建好的环境&#xff0c;具体过程可以看CC1分析文章的环境安装部分 Commons-Collections篇…

leecode-动态规划-基础题目

一、简述 DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的 重点&#xff1a;状态转移公式 二、一维 1、[509]斐波那契数 2、[70]爬楼梯 dp[i]可有dp[i-1]再爬一级台阶dp[i-2]再…

手表名表维修开单系统软件教程,佳易王钟表养护维护保养记录开单软件操作教程

手表名表维修开单系统软件教程&#xff0c;佳易王钟表养护维护保养记录开单软件操作教程 以下软件操作教程以&#xff0c;佳易王钟表养护维修管理系统软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 一、软件程序操作教程 1、佳易王钟表维…

第2章 信息技术知识

第2章 信息技术知识 本章简要叙述了信息技术相关基础知识&#xff0c;包含软件工程、面向对象系统分析与设计、应用集成技术、计算机网络技术和新一代信息技术内容。 2.1 软件工程 随着所开发软件的规模越来越大、复杂度越来越高&#xff0c;加之用户需求又并不十分明确&…

k8s上部署单节点apache-lotdb

一、yaml文件 使用的nfs的动态存储类&#xff0c;需要提前搭建。 # cat lotdb.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata:name: logsnamespace: lotdb spec:storageClassName: "nfs-client"accessModes:- ReadWriteManyresources:requests:storag…

Spring Session 多服务Session共享

在新项目中需要开发单点登录功能&#xff0c;单点登录服务端提供方使用的是CAS技术&#xff0c;是根据Session来判断用户是否完成了登录操作的。Session是保存在服务器本地内存中的&#xff0c;而我的项目是需要多服务部署的&#xff0c;这就意味着会部署在不同的服务器中&…

淘宝商品历史价格查询(免费)

当前资料来源于网络&#xff0c;禁止用于商用&#xff0c;仅限于学习。 淘宝联盟里面就可以看到历史价格 并且没有加密 淘宝商品历史价格查询可以通过以下步骤进行&#xff1a; 先下载后&#xff0c;登录app注册账户 打开淘宝网站或淘宝手机App。在搜索框中输入你想要查询的商…

【问题记录】Windows中Node的express无法直接识别

问题描述 在使用express_generator的时候windows平台中出现无法识别express命令的问题&#xff0c;另外就算添加了全局环境变量也没用。 问题解决 查看官方文档发现在node版本8之前的时候使用的是express&#xff0c;但是之后的版本使用npx&#xff0c;这个工具的出现主要想…

keil mdk注释插件合集格式、时间、日期注释

文章目录 一、前言二、安装步骤2.1 解压tools.zip2.2 tools 文件解释2.3 添加注释带keil 三、配置3.1 格式化代码3.2 文件注释3.3函数注释3.4 当前日期3.5 当前时间 四、编辑注释模板4.1 编辑函数注释模板4.2 编辑C文件注释模板4.3 编辑h文件注释模板 五、为注释功能添加快捷键…

【Kubernetes安装】从零开始使用kubeadm命令工具部署K8S v1.28.2 集群

文章目录 一、虚拟机配置参数说明二、kubernetes v1.28.2版本介绍三、CentOS 7.9 系统初始化配置3.1 配置CentOS系统基础环境3.1.1 配置hosts3.1.2 永久关闭selinux3.1.3 关闭swap分区3.1.4 所有节点全部关闭防火墙3.1.5 配置ntp server同步时间3.1.6 添加kubernetes镜像源 3.2…

12--RabbitMQ消息队列

前言&#xff1a;前面一章内容太多&#xff0c;写了kafka&#xff0c;这里就写一下同类产品rabbitmq&#xff0c;rabbitmq内容较少&#xff0c;正好用来过度一下&#xff0c;概念还是会用一些例子来说明&#xff0c;实际部署的内容会放在概念之后。 1、基础概念 1.1、MQ消息队…

CSS原子化

目录 一、定义 二、原子化工具 2.1、tailwind 2.1.1、以PostCss插件形式安装 2.1.2、不依赖PostCss安装 2.1.3、修改原始配置 2.2、unocss 三、优缺点 3.1、优点 3.2、缺点 一、定义 定义&#xff1a;使用一系列的助记词&#xff0c;利用类名来代表样式。 二、原子化…