首页 > 其他分享 >定制rpm包制作

定制rpm包制作

时间:2023-08-17 15:33:26浏览次数:26  
标签:apprun -- rpm nginx sh openresty root 定制 制作

什么是定制rpm包?为什么要定制rpm包?

将原本使用源码安装的服务,打包成rpm包;
使用源码安装,步骤繁琐复杂浪费时间,把源码包打成rpm包安装时可以节省时间,提高工作效率。做好rpm包,可以将rpm包放入yum仓库中,方便安装。 

rpm包的俩种制作方式:

1.rpmbuild制作:学会SPEC语言

2.fpm制作:fpm是封装了rpmbuild,不再要求我们学会SPEC语言

 

本文先讲解fpm制作rpm包:

一、系统环境:

[root@localhost ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)
[root@localhost ~]# uname -r
3.10.0-957.el7.x86_64
[root@localhost ~]# getenforce
Disabled
[root@localhost ~]# systemctl status firewalld
[root@localhost ~]# systemctl stop firewalld

 二.安装fpm

1.下载阿里云的base源和epel源

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

2.安装ruby环境

yum -y install ruby rubygems ruby-devel

3.查看gem默认的源

[root@localhost apprun]# gem sources

gem作用:gem和yum差不多,是包管理工具,yum来管理.rpm的包,gem来管理.gem包

4.删除gem默认官方源

gem sources --remove https://rubygems.org/ https://rubygems.org/ removed from sources

查看
[root@localhost apprun]# gem sources

5.添加阿里云的gem源

gem sources -a https://mirrors.aliyun.com/rubygems/ https://mirrors.aliyun.com/rubygems/ added to sources

查看

[root@localhost apprun]# gem sources
*** CURRENT SOURCES ***

https://mirrors.aliyun.com/rubygems/
[root@localhost apprun]#

6.安装fpm

[root@localhost apprun]# gem install fpm -v 1.3.3

....

ERROR: Error installing fpm:
childprocess requires Ruby version >= 2.4.0.
[root@localhost apprun]#

升级ruby:

升级Ruby之前,我们需要先安装Ruby Version Manager(简称RVM),它是Ruby环境的管理器,可以让我们轻松地切换不同的Ruby版本。以下是安装RVM的步骤:

7.安装Ruby Version Manager

第一步:安装gpg密钥[执行第二步会提示]

第二步:安装RVM (会提示安装密钥,网络情况可能需多次操作成功)

curl -L get.rvm.io | bash -s stable

 安装完成按提示重新连接就可以使用rvm

[root@localhost ~]# rvm -v
rvm 1.29.12 (latest) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin [https://rvm.io]
[root@localhost ~]#

 

将用户添加到rvm组:

查看组:cat /etc/group
root用户加入组: [root@localhost ~]# usermod -aG rvm root
查看root用户所属组列表:
[root@localhost ~]# groups root
root : root rvm
[root@localhost ~]#

 

列表显示都可以安装ruby的哪些版本

rvm list known

更新ruby至版本3.0.0
rvm install 3.0.0

 安装fpm

 

 

三、定制rpm包~本文以openresty-1.17.8.1[选取版本过低,为测试后面升级]为例:

1.创建制作目录

mkdir -p /application/tools/

cd /application/tools/

官网准备源码包[上传安装包 openresty-1.17.8.1.tar.gz]

2.开启yum缓存:

sed -i 's#keelcache=0#keepcache=1#g' /etc/yum.conf

清空本机已有yum缓存:

find /var/cache/ -type f -name "*.rpm" |xargs rm -f

 

3.编译安装[openresty-1.17.8.1.tar.gz]:

cd /application/tools/

安装依赖:
yum install -y gcc gcc-c++ openssl-devel pcre-devel readline-devel

下面四行命令,打依赖包[有很强的版本针对性,如果做不到安装机系统版本一致性,不建议采纳]

find /var/cache/ -type f -name "*.rpm"

#另存rpm包,依据环境不同
find /var/cache/ -type f -name '*.rpm' | xargs cp -t /apprun/tmp/

cd /apprun/tmp/ && tar -zcf openresty-1.17.8.1.el7_yum.tar.gz *.rpm

sz openresty-1.17.8.1.el7_yum.tar.gz

 

cd /application/tools/

tar -zxf openresty-1.17.8.1.tar.gz

cd openresty-1.17.8.1/
./configure \
--user=apprun \
--group=apprun \
--prefix=/apprun/openresty \
--with-cc-opt=-O2 \
--with-http_ssl_module \
--with-http_realip_module \
--with-stream_realip_module \
--with-stream \
--with-http_stub_status_module \
--with-http_v2_module \
--with-stream \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-openssl-opt=-g \
--with-stream

gmake && gmake install

 

此时openresty-1.17.8.1就被安装在了/apprun/openresty目录下~这样我们的基础源就有了,后面我们就可以依据这个修改定制我们自己适用rpm包了,fpm打包前我们先看下fpm常用参数

 

FPM常用参数:

-s          指定源类型
-t          指定目标类型,即想要制作为什么包
-n          指定包的名字
-v          指定包的版本号
-C          指定打包的相对路径  Change directory to here before searching forfiles
-d          指定依赖于哪些包
-f          第二次打包时目录下如果有同名安装包存在,则覆盖它
-p          输出的安装包的目录,不想放在当前目录下就需要指定
-m          打包的作者
--post-install      软件包安装完成之后所要运行的脚本;同--after-install
--pre-install       软件包安装完成之前所要运行的脚本;同--before-install
--post-uninstall    软件包卸载完成之后所要运行的脚本;同--after-remove
--pre-uninstall     软件包卸载完成之前所要运行的脚本;同--before-remove

 

编写脚本:[主要通过 上面提到的参数 软件包安装卸载过程前后的状态,执行定制操作,达到我们的目的]

mkdir -p /server/scripts/
cd /server/scripts/

说明:nginx.conf 配置文件定制,我这里是直接修改基础源中的/apprun/openresty/nginx/conf/nginx.conf文件实现的;不过我们也可以定制一个通过脚本覆盖

           日志切割文件定制,我这也是直接扔到基础源中/apprun/openresty/nginx/sbin/nginx_log_split.sh

            nginx服务脚本,我是扔在基础源目录中,通过下面的脚本处理[sudo cp -r /apprun/openresty/nginx/nginx.service /usr/lib/systemd/system/]

脚本中的参数说明:

%pre和%post段 【1,2】

当传递的第一个参数为1时,表示新安装一个rpm包。

当传递的第一个参数为2时,表示升级一个已经存在的包。

%preun和%postun段 【0,1】

当传递的第一个参数为0时,表示删除一个包。

当传递的第一个参数为1时,表示更新一个包。

  

vim openresty_pre_install.sh    #软件包安装完成之前所要运行的脚本

upgrade() {
    :
#!/bin/sh
[ ! -d /apprun/backup/openresty ] && mkdir -p /apprun/backup/openresty
/bin/cp /var/spool/cron/root /var/spool/cron/root.bak-`date +%F_%R`
/bin/cp /var/spool/cron/root /var/spool/cron/root.bak
if [ -f /apprun/openresty/nginx/sbin/nginx_log_split.sh ]
then
        echo "检测/apprun/openresty/nginx/sbin/nginx_log_split.sh 文件存在,升级前备份该文件到/apprun/backup/openresty/"
        /bin/cp -af /apprun/openresty/nginx/sbin/nginx_log_split.sh /apprun/backup/openresty/
fi

}
_install() {
    :
#!/bin/sh
if grep 'apprun' /etc/passwd
then
        echo "apprun exist"
else
        useradd apprun
fi

}
if [ "${1}" == 1 ]
then
        # "before install" goes here
        _install
elif [ "${1}" == 2 ]
then
        # "before upgrade" goes here
        upgrade
fi

vim openresty_post_install.sh   #软件包安装完成之后所要运行的脚本

upgrade() {
    :
#!/bin/sh
systemctl enable nginx
chown -R apprun:apprun /apprun/openresty
[ ! -d /apprun/openresty/nginx/logs ] && mkdir -p /apprun/openresty/nginx/logs
chmod -R 644 /apprun/openresty/nginx/logs
echo -e "\033[31m cron 自动清理,cron 已备份文件至: /var/spool/cron/下,并以bak+时间后缀,请以此文件进行恢复 \033[0m"
#if grep -i "nginx_log_split.sh" /var/spool/cron/root
#then
#       echo '【温馨提示】请查看nginx_log_split.sh中日志路径是否配置正确。'
#else
#       echo '【温馨提示】已自动创建日志分割、日志清理脚本。请查看nginx_log_split.sh中日志路径是否配置正确。'
#
#       echo "00 * * * * /bin/sh /apprun/openresty/nginx/sbin/nginx_log_split.sh > /dev/null 2>/dev/null" >> /var/spool/cron/root
#
#       echo "00 01 * * * /usr/bin/find /apprun/openresty/nginx/logs -mtime 10 | xargs rm -f > /dev/null 2>/dev/null" >> /var/spool/cron/root
#fi
if [ -f /var/spool/cron/root.bak ]
then cp /var/spool/cron/root.bak /var/spool/cron/root
fi

if [ -f /apprun/backup/openresty/nginx_log_split.sh ] && [ ! -f /apprun/openresty/nginx/sbin/nginx_log_split.sh ]
then
        echo "复制nginx_log_split.sh到新的目录"
        /bin/cp -af /apprun/backup/openresty/nginx_log_split.sh /apprun/openresty/nginx/sbin/nginx_log_split.sh
fi

}

_install() {
:
#!/bin/sh
[ ! -d /apprun/openresty/nginx/logs ] && mkdir -p /apprun/openresty/nginx/logs
chown -R apprun:apprun /apprun/openresty/nginx/logs /apprun/openresty
chmod -R 755 /apprun/openresty/nginx/logs
sudo cp -r /apprun/openresty/nginx/nginx.service /usr/lib/systemd/system/
sudo systemctl daemon-reload
systemctl enable nginx.service
echo "00 * * * * /bin/sh /apprun/openresty/nginx/sbin/nginx_log_split.sh >/dev/null 2>/dev/null" >> /var/spool/cron/root

echo "00 01 * * * /usr/bin/find /apprun/openresty/nginx/logs -mtime 10 | xargs rm -f >/dev/null 2>/dev/null" >> /var/spool/cron/root
#[ ! -d /var/log/nginx ] && mkdir -p /var/log/nginx
#chown -R apprun:apprun /var/log/nginx /apprun/openresty
#chmod -R 755 /var/log/nginx
#systemctl enable nginx.service
#echo "00 * * * * /bin/sh /apprun/openresty/nginx/sbin/nginx_log_split.sh > /dev/null 2>/dev/null" >> /var/spool/cron/root
#
#echo "00 01 * * * /usr/bin/find /var/log/nginx -mtime 10 | xargs rm -f > /dev/null 2>/dev/null" >> /var/spool/cron/root


}
if [ "${1}" == 1 ]
then
# "after install" goes here
_install
elif [ "${1}" == 2 ]
then
# "after upgrade" goes here
upgrade
fi

vim openresty_post_uninstall.sh    #软件包卸载完成之后所要运行的脚本

if [ "${1}" == 0 ]
then
    :
#!/bin/sh
rm -rf /apprun/openresty
#rm -f /usr/lib/systemd/system/nginx.service
sed -i '/nginx_log_split.sh/d' /var/spool/cron/root
sed -i '/\/apprun\/openresty\/nginx\/logs/d' /var/spool/cron/root

fi

  

打包:
fpm -s dir -t rpm -n openresty -v 1.17.8.1 -d 'gcc,gcc-c++,openssl-devel,pcre-devel,readline-devel' \
--pre-install /server/scripts/openresty_pre_install.sh \
--post-install /server/scripts/openresty_post_install.sh \
--post-uninstall /server/scripts/openresty_post_uninstall.sh \
-f /apprun/openresty

 

虚拟机安装openresty-1.17.8.1-1.x86_64.rpm测试是否符合预期:

能通外网的情况下:建议安装命令采用yum localinstall自动解决依赖问题

yum localinstall -y openresty-1.17.8.1-1.x86_64.rpm

 

标签:apprun,--,rpm,nginx,sh,openresty,root,定制,制作
From: https://www.cnblogs.com/NGames/p/17637734.html

相关文章

  • 修复肢体lora制作
    准备fusehand和clearhand数据集训练过拟合模型分层训练1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,用于仅控制肢体增大学习率unet学习率:一般为1e-4,增加为4e-4增大dim和alpha选择128训练步数至少300步差异炼丹法......
  • 低代码开发平台:解锁定制化创新的无限可能
    在如今快节奏的数字化时代,软件产品的快速开发和定制化需求已经成为企业成功的关键因素之一。而低代码开发平台作为一种高效的工具,不仅可以加速应用系统的开发周期,还能够满足各种个性化的需求。它通过无缝集成为应用系统增添了灵活性和创造力,为企业提供了一个真正实现数字化转型的机......
  • IDEA 如何制作代码补丁?IDEA 生成 patch 和使用 patch
    什么是升级补丁?比如你本地修复的bug,需要把增量文件发给客户,很多场景下大家都需要手工整理修改的文件,并整理好目录,这个很麻烦。那有没有简单的技巧呢?看看IDEA生成patch和使用patch的使用。介绍下IDEA的patch工作中用到的补丁大致可以分为两种,一种是patch文件,即补......
  • MT6761|MTK6761安卓核心板_MTK核心板模块方案定制
    MT6761核心板是一款集成了蓝牙、FM、WLAN和GPS模块的高度集成基带平台设备(见图1-1),它融合了调制解调器和应用处理子系统,支持LTE/LTE-A和C2K智能手机应用。芯片集成了ARM®Cortex-A53处理器,主频可达2.0GHz,并搭载强大的多标准视频编解码器。此外,它还包括一系列接口和连接外设,......
  • 紫光展锐T610(虎贲610)_芯片性能介绍_全国产安卓核心板定制
    紫光展锐T610核心板是影像全面升级的8核架构的4G移动平台。采用旗舰级DynamIQ架构设计,基于自主研发的第五代影像引擎Vivimagic解决方案,和高画质显示处理技术,为用户带来精致的高画质体验。展锐T610(虎贲610)安卓核心板基本概述虎贲T610处理器是由紫光展锐研发的一颗基于12nm工艺的4G芯......
  • ThingsKit物联网平台平台定制管理
    每个租户都可以对平台进行自定义配置,包括公司基础信息、平台名称、版权等更新企业信息企业信息界面填入相关信息,点击更新基本信息即可。:::info......
  • [LLM] 开源 AI 大语言模型的本地化定制实践
     LLM(LargeLanguageModel,大型语言模型)是一种基于深度学习的自然语言处理模型,旨在理解和生成人类语言。它们在大量的文本数据上进行训练,可以执行广泛的任务,包括文本总结、翻译、情感分析等等。LLM的特点是规模庞大,包含数十亿的参数,帮助它们学习语言数据中的复杂模式。 本文......
  • Python小项目:利用tkinter与图灵机器人制作智能聊天系统
    文章目录1前言2代码分模块讲解2.1导入相应的库2.2创建机器人对象2.3创建信息交互过程对象2.4页面创建对象3整体代码4结语1前言在本项目中,我们将探索如何使用Python的tkinter库以及图灵机器人API来构建一个智能聊天系统。本项目的初衷是通过实际操作,结合GUI编程和API调用......
  • 芒趣盲盒源码出售开发定制
      该软件的UI界面设计独特,吸引不少的用户前来下载注册,在开发之前软件的设计功能和需求都有什么,是怎么定制开发的,下面就重点介绍关于类似芒趣app软件的相关功能介绍。  芒趣盲盒APP软件开发流程介绍,先确定好芒趣盲盒的软件外观,功能,开发技术,开发语言等相关的各种来编写开发......
  • 紫光展锐T310(虎贲310)_芯片性能介绍_全国产安卓核心板定制
    紫光展锐T310核心板是全球首款基于DynamIQ架构的4核LTE平台,可实现优异的运算性能及低功耗管理,在单核场景下性能比目前主流4核产品提高120%,多核场景下性能提升超过20%,为全球主流市场用户提供流畅的应用体验。展锐T310(虎贲310)安卓核心板基本概述虎贲T310是可运行android11.0操作......