制作Centos7自动安装镜像(二)

文章总览:制作Centos7自动安装镜像

RPM安装包制作

Linux镜像的标准安装方式是将待安装的软件制作成RPM包,然后将RPM包解压并复制到指定的目录中去(据说除此之外还可以将带安装的软件做成tar包,直接用来做安装。关于如果把tar包做到镜像里面来实现自动安装,这个我还没有尝试。有机会尝试话再完善一下这篇文章)。

鉴于我们项目的情况,一开始只考虑把开发出来的JAVA应用制作成RPM包。但是后来,在实际制作的时候发现,除了JAVA应用之外,我们还有一些配置文件如 /etc/profile /etc/my.cnf /etc/rc.d/rc.local 这些系统文件,我们也做了修改。为了能让这些配置文件也能做到自动化安装,我们另外制作了一个RPM包,将这些配置文件也做成RPM包,然后装到一个指定的位置,然后再用ks.cfg的post脚本复制到系统路径下覆盖系统的配置文件,从而实现自动安装。

至于为什么不直接安装到系统路径下? 那是由于我尝试过一次,结果得到了一个错误:安装冲突。估计是不允许直接在安装过程中覆盖系统文件吧。 所以只能采用迂回的方式:先装到别的位置,然后在复制到目标路径下。

废话不多说了,开始整体。

1. 安装制作工具

制作RPM包,需要安装RPM包制作的安装工具,通常是两个,使用yum方式安装 yum -y install rpm-build rpmdevtools

2.初始化目录

安装完RPM工具之后,直接执行 rpmdev-setuptree 这个命令(我用的是root用户),执行完成之后,在/root/下面会建立一个 rpmbuild的目录, 在这几个目录下面会有如下的子目录,其中几个我们后续要用到:

rpmbuild目录结构

3.准备安装包的内容

按照以下的方式准备安装包:

  1.建立一个目录,带上版本号

         如果,你打算安装的应用叫做 DeviceController-1.0.0 ,就创建一个目录叫做DeviceController-1.0.0

  2.将要安装的内容全部copy到DeviceController-1.0.0目录下

        假设我们的应用,包含一个 deviceController-1.0.0-Release.jar  一个 config 目录  一个 run.sh 以及一个 data目录, 则需要按照安装后的目录结构复制到DeviceController-1.0.0目录下

 3. 准备makefile文件

     在DeviceController-1.0.0目录下,创建一个makefile文件,内容如下:    

install: 
    mkdir -p ${RPM_BUILD_ROOT}/opt/wedo/deviceController/
    cp deviceController-1.0.0-relese.jar ${RPM_BUILD_ROOT}/opt/wedo/deviceController/deviceController-1.0.0-relese.jar 
    cp -r config ${RPM_BUILD_ROOT}/opt/wedo/deviceController/config
    cp -r data ${RPM_BUILD_ROOT}/opt/wedo/deviceController/data
    cp run.sh ${RPM_BUILD_ROOT}/opt/wedo/deviceController/run.sh

  注意:针对目录要用 -r 复制, mkdir 要加上-p 保证能够建立多级目录, ${RPM_BUILD_ROOT}是必须的

 另外提醒大家一下,install: 后面需要有一个空格,然后再回车,另外每一行前面需要有一个tab作为命令的开始(这些都是makefile的规则,只是在提醒一下大家)

4. 制作source tar.gz包

以上都准备完成之后,回到DeviceController-1.0.0的上级目录,输入如下命令:

tar cvf DeviceController.tar DeviceController.tar-1.0.0;gzip DeviceController.tar.tar

注意中间的DeviceController-1.0.0 要和目录名一致

5.复制source安装包

执行上述命令之后,你将会得到一个叫做DeviceController.tar.gz的文件,将这个文件cp到 /root/rpmbuild/SOURCES/ 目录下

6.制作SPCE文件

进入/root/rpmbuild/SPECS目录下,编制DeviceController.spec文件,文件内容如下:

%global __os_install_post %{nil}
Name:	    controller-rpm  	
Version:    1.0.0	
Release:	1
Summary:	DEVICE-CONTROLLER

Group:		DEVICE
License:	WEDO
Source0:	DeviceController.tar.gz

%description

%prep
%setup -q

%build

%install
make install

%files
%defattr(-,root,root)
/opt/wedo/deviceController/deviceController-1.0.0-release.jar
/opt/wedo/deviceController/config
/opt/wedo/deviceController/run.sh
/opt/wedo/deviceController/data

%changelog

%define __debug_install_post   \
   %{_rpmconfigdir}/find-debuginfo.sh %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"\
%{nil}

注意: 关于这段代码,有几点说明:

 1.%global __os_install_post %{nil}

    这是一个可选的参数,主要的目的是通知RPM构建程序不要对 二进制文件进行压缩。 设置这个参数的目的是,我们的jar为了防止被人篡改,进行了加密。在运行的时候会进行加密校验。而RPM默认会对源文件中的二进制文件进行二次压缩。 结果就是通过rpm安装之后,得到的jar包的尺寸和原始文件不一致,从而导致加密校验失败。 所以我们加上了这个参数,保证rpm不会再对二进制文件进行压缩。 当然,如果你没有这方面的需求的话,可以不需要加入此参数。 关于rpm的一些参数,可以参考 Disable Binary stripping in rpmbuild 这篇文章

2. 保持 NAME VERSION 与你的原始目录中的信息一致

3.%files 段 描述的是你打算把你的文件安装到那个目标路径下的,文件名和原始目录一致。文件数量也需要保持一致。可以少,不能多。

7.构建RPM文件

完成以上操作之后,执行构建命令(在/root/rpmbuild/SPECS目录下执行):

rpmbuil -bb DeviceController.spec

执行完成后,你将会在/root/rpmbuild/RPMS/x86_64 下得到你的安装包(注意x86_64取决于你操作系统的CPU架构,未必都是这个名字)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值