位置: 编程技术 - 正文

创建RPM包的同时构建Docker镜像的方法(rpm包安装的apache可以如何启动)

编辑:rootadmin

推荐整理分享创建RPM包的同时构建Docker镜像的方法(rpm包安装的apache可以如何启动),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:rpm安装多个,rpm包安装的apache可以如何启动,linux rpm包制作,怎么用rpm命令来装软件包,rpm包安装的apache可以如何启动,rpm 安装多个包,rpm 安装多个包,rpm 安装多个包,内容如对您有帮助,希望把文章链接给更多的朋友!

RPM(Red Hat Package Manager)是用于 Linux 分发版的最常见的软件包管理器。因为它允许分发已编译的软件,所以用户只用一个命令就可以安装软件。而RPM包的构建相当繁琐,并且对环境的要求比较高, 本文作者介绍了如何借助Docker来构建可以适用多个平台的RPM包。

在一个内部项目中,我一直在思考如何通过非CI工具/流程生成RPM包,我想手动生成RPM包,这样我可以测试它们是否能正常安装,并用于正常的冒烟测试(译者注:冒烟测试就是在每日构建完成后,对系统的基本功能进行简单的测试。这种测试强调功能的覆盖率,而不对功能的正确性进行验证)。

在我们的CI流程中,Docker算是个全能手,所以我也在想能否将Docker镜像和RPM结合起来。理想的情况下,让RPM与Docker集成, 这样,创建RPM包的过程其实就是在构建一个Docker镜像。基本上,RPM包的%prep部分的构建可以在一个特殊的Docker镜像中快速完成,然 后将生成的RPM包返回给主机。

这种方式的的优点在于,你的RPM包是在一个相对封闭且可再生的环境中构建的,所以你可以快速的为CentOS、Fedora、RHEL等其它系统构建RPM包。

我相信还有其它的一些变通方法也可以完成这样的工作,比如chroot之类的。但如果在RPM中内建这种打包机制(通过chroot/Docker或者别的容器技术抽象而来的系统来完成打包工作)的话,我想会更好。

由于我的项目还没有完成,所以我只是对我的想法进行了验证:简单构建一个包含依赖的镜像。

这是一个使用PBR生成版本 的Python项目。 首先我在build目录中生成一个tarball,然后得到生成的版本号,紧接着修改spec文件中的版本号,然后开始用新的tar包和spec文件构建 镜像。最后运行镜像,并挂载卷(Volume)到本地目录。当运行容器中的start.sh脚本之后,镜像就运行起来了。

创建RPM包的同时构建Docker镜像的方法(rpm包安装的apache可以如何启动)

start.sh相当简单。 它构建好RPM包后,以root身份把它拷贝到卷目录下, 还可以从主机上将它拷贝到output目录。我没有将它拷贝或者说更新到类似swift之类的对象存储系统,因为我还要在CI中使用它,所以就使用本地文件拷贝了。

在SPECS/project.spec以及 SOURCES/* 是标准RPM包需要的spec文件,源文件和patch文件。需要做的唯一一件事是定义%define_version宏,并在spec文件中使用它。下面是我的一些脚本。

主脚本build.sh。 可以从CI中运行。

复制代码代码如下:#!/bin/bashset -exfPROJECT=myproject</p><p>CURDIR=$(dirname $(readlink -f $0))TOPDIR=$(git rev-parse --show-topklevel 2>/dev/null)</p><p>rm -rf ${CURDIR}/.build/rpmmkdir -p ${CURDIR}/.build/rpm/{BUILD,SRPMS,SPECS,RPMS/noarch}cp -r ${CURDIR}/SOURCES ${CURDIR}/.build/rpm</p><p>pushd ${TOPDIR} >/dev/nullpython setup.py sdist --dist-dir ${CURDIR}/.build/rpm/SOURCES/SALADIER_VERSION=$(sed -n '/^Version/ { s/.* //; p}' ${PROJECT}.egg-info/PKG-INFO)popd >/dev/null</p><p>sed -e "s/%define _version.*/%define _version ${SALADIER_VERSION}/" ${CURDIR}/SPECS/${MYROJECT}.spec > ${CURDIR}/.build/rpm/SPECS/${MYPROJECT}.spec</p><p>docker build -t chmouel/buildrpm ${CURDIR}docker run -v $CURDIR/.build:/data -it chmouel/buildrpm</p><p>if [[ -n ${ARTIFACT_DIR} ]];then rm -rf ${ARTIFACT_DIR}/rpm cp -a ${CURDIR}/.build/output ${ARTIFACT_DIR}/rpmfi

DockerFile,为Docker 缓存做了一些优化:

复制代码代码如下:FROM fedora:MAINTAINER Chmouel Boudjnah <chmouel@enovance.com></p><p>RUN yum -y groupinstall 'Development Tools'RUN yum -y install fedora-packagerRUN yum -y install yum-utils</p><p>RUN yum -y install sudoRUN sed -i.bak -n -e '/^Defaults.*requiretty/ { s/^/# /;};/^%wheel.*ALL$/ { s/^/# / ;} ;/^#.*wheel.*NOPASSWD/ { s/^#[ ]*//;};p' /etc/sudoers</p><p>RUN yum install -y This is an optimisation for caching, since using the auto generated one will# make docker always run the builddep steps since new fileADD SPECS/project.spec /tmp/RUN yum-builddep -y /tmp/project.spec</p><p>ADD bin/start.sh /start.sh</p><p>RUN useradd -s /bin/bash -G adm,wheel,systemd-journal -m rpm</p><p>WORKDIR /home/rpmCMD /start.sh</p><p>ADD .build/rpm/ /home/rpm/rpmbuild/RUN chown -R rpm: /home/rpm</p><p>USER rpm

以及从容器中运行的start.sh脚本:

复制代码代码如下:#!/bin/bash# script run inside the containerrpmbuild -ba rpmbuild/SPECS/project.spec || exit 1</p><p>[[ -d /data ]] || exit 0</p><p>sudo rm -rf /data/outputsudo cp -a rpmbuild/RPMS/noarch /data/output

脚本可能无法直接在你的环境中使用,但至少能让你了解这个idea。

将Vmware的镜像格式转换为Virtualbox的镜像格式的方法 由于电脑最近运行vm很卡,所以打算专用virtualbox,为了免重装那些系统,就要把vmware的虚拟镜像vmdk转换为virtualbox的vdi镜像,方法很简单,也是老方法。

在Docker中构建长时间运行的脚本的一些方法 我想我已经找到了一个非常不错的Docker使用案例。你是不是会觉得这是一篇写Docker有多好多好的文章,开始之前我想和你确认,这篇文章会介绍如何把

Docker结合自动化编排工具Fig的使用方法 Fig是一个基于Docker的用于快速搭建开发环境的工具,目前Fig团队已经加入Docker公司。Fig通过一个配置文件来管理多个Docker容器,非常适合组合使用多个

标签: rpm包安装的apache可以如何启动

本文链接地址:https://www.jiuchutong.com/biancheng/354079.html 转载请保留说明!

上一篇:详解虚拟机中的NAT网络连接方式(虚拟机基本知识)

下一篇:将Vmware的镜像格式转换为Virtualbox的镜像格式的方法(vmware img镜像)

  • 扣非净利润和净利润的区别举例说明
  • 将自产货物赠送客户
  • 免税苗木普通发票
  • 分期付款进项税额怎么算
  • 间接费用分配方法不包括哪些
  • 专票没有税点
  • 电子元器件可以带上飞机吗
  • 租赁合同印花税率
  • 已经计提折旧的固定资产购入后 加快折扣年限
  • 剩余折旧月份
  • 计提工会经费是按应付职工薪酬的借方还是贷方
  • 公司前期没有收入开支怎么记账
  • 发票清单太多怎么办理
  • 公司委托法人代收款
  • 文化事业建设费的征收范围
  • 可以背书转让的公司
  • 年度中期是几月份
  • 企业账户利息收入怎么算
  • 小型微利企业需要满足的条件
  • 残疾人保障金人数
  • 购入低值易耗品一批,实际成本4000元
  • 应收预收账款属于什么科目
  • 坏账准备和资产减值损失
  • 电脑右下角弹窗广告怎么彻底清除
  • 存在标的资产的亏损合同,先进行减值
  • 现金比率计算公式含义
  • 公司产生的劳务费如何计算个人所得税
  • win10永久激活码神key一周内
  • Win10 KB5005033 给某些用户带来了新问题的解决方法
  • 医保养老保险怎么查
  • 湘菜尖椒炒肉的做法
  • 前端没思路怎么办
  • 取得投资是什么意思
  • 采购周转材料会计分录怎么写
  • jdbc连接mysql的url怎么写
  • 常用php数组排序方法
  • 代扣代缴应付职工薪酬账务处理
  • 企业自行清算的条件是什么
  • 使用筷子就餐会不会传染乙肝病毒
  • 耕地里埋坟国家有什么规定
  • 合伙企业个人所得税税率表
  • 企业接受捐赠要交增值税
  • 织梦自定义字段
  • 帝国cms获取当日发布的url链接
  • 被投资公司注销把钱转到投资公司怎么做帐
  • 预收款项可以开发票吗
  • 增值税专用发票几个点
  • 社保都有哪几项
  • 注册资本认缴制度
  • 领用包装物用于包装产品的会计分录
  • 法院退诉讼费账务处理
  • 预收工程款怎么做分录
  • 累计盈余的主要来源有
  • 存货周转次数越高好还是越低好
  • 企业收到返利怎么做账
  • 一般纳税人增值税减免政策2023
  • 营改增后工程结算的账务处理
  • 颁给供应商的奖项
  • 应缴纳房产税的房产
  • 设备上的配件计入什么费用
  • 产品成本核算有哪些方法
  • sqlserver将查询结果作为临时表
  • 进程是什么 进程类型
  • red hat7.6
  • win7系统怎么设置微信多开
  • 批量win10激活码怎么弄
  • jquery移除
  • unity shader lerp
  • 用python语言编写
  • js实现双击屏幕放大
  • java arraysort
  • python 嵌套
  • 国家税务总局全国增值税查询
  • 工程咨询服务税需要每月缴纳吗
  • bpc什么时候进入中国
  • 我们要什么行政执法监督机制和能力建设严格落实行政
  • 退车辆购置税流程怎么操作
  • 房屋出租到哪里挂出去
  • 回迁房办房产证需要交多少钱
  • 财务制度备案表单怎么填
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设