失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 制作Centos7自动安装镜像(二)

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

时间:2019-03-21 05:47:13

相关推荐

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

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

RPM安装包制作

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

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

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

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

1. 安装制作工具

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

2.初始化目录

安装完RPM工具之后,直接执行rpmdev-setuptree 这个命令(我用的是root用户),执行完成之后,在/root/下面会建立一个 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/configcp -r data ${RPM_BUILD_ROOT}/opt/wedo/deviceController/datacp 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.0Release:1Summary:DEVICE-CONTROLLERGroup:DEVICELicense:WEDOSource0:DeviceController.tar.gz%description%prep%setup -q%build%installmake 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架构,未必都是这个名字)

如果觉得《制作Centos7自动安装镜像(二)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。