您的位置:首页 > 运维架构 > Linux

Linux下安装包制作涉及知识总结

2015-05-17 18:21 183 查看
五一前的晴天霹雳,ShJS使用机器涉密,对软件安装包要求特别严格,Linux下的安装包不能使用。
已经接近成熟的安装包啊,此安装包虽既不是用网络上成熟的安装包制作工具制作的,也不是出在大牛之手,却也是从今年二月份紧张制作好后,不断根据实际需求进行资源优化,并经过与数十家客户的不断测试制作出来的安装包啊。这令我觉得不可思议,也可能因为初出茅庐,也可能因为知识面太窄,觉得只需要在root用户下,简单的按照我写的安装说明,一步步走下来就可以啊,几近接近傻瓜式的操作啊。到底是什么样的高端机器连一个简单的二进制脚本安装包都不可以用。
或许是无知者无惧,或许也因为此产品的安装包是我一手制作出来的。最终我跟着领导来到现场领略了一下这个高大上的机器,哎呀妈呀,太多限制了,机器无法识别普通U盘,不能用光盘,普通U盘想要传输文件,只能通过对U盘做特殊处理,才能进行单向输入,这机器是有进无出啊。。。经过1个小时的折腾,才发现在那台机器装东西,需要在root用户和管理员用户下多次操作,并添加信任列表等n多限制。
在那儿呆了一天,开了一下午的会,摸索一个小时,收获就是知道自己制作的安装包为何不能正常使用。他们要求用rpm包,因为linux下的安装包自始至终都是我一个人去制作并维护的,自然这个任务又落在我身上了,初生牛犊不怕虎,我也直接接下来了(我也没得选择啊,谁让咱只是一名小码农呢,呜呜。。。)。
按要求是要在5.15前制作好安装包的,并接受测试的。这个rpm虽然网上资料不少,可基本都是千篇一律,不知水深水浅啊。更令人头疼的是,公司里没有人制作过linux下的安装包,也就是说我从公司寻求不到帮助,而ShJS的机器又有诸多严格的规范。头大啊。。。五一,我又有其他事,必须调休两天,5.6到5.15看似有10天,去掉周末,还有留下测试时间,也就是必须在本周三前提交测试。面对一个完全未知的东西,真心想说,时间好紧张。
5.6,赶到公司,上午又办了一些公司临时安排的事,上午就这样过去了。中午吃完饭,赶紧在网上不停查阅资料,查看“高端机器”保密规范,首先了解到,制作rpm前提,机器上必须首先装rpmbuild这个包制作工具,完了,从网上下载的版本都不行,而neokylin机器镜像源有问题,多出沟通都没有找到rpm工具,但是不能耽误进度啊,时间太紧迫了。这一天都快过了。想了想自己机器上有虚拟机,有centos系统,那么plan
B产生了。先给leader A反映此情况,并让A想办法联系neokylin去拿rpmbuild安装包。然后我就在centos上先做rpm安装包,先跑通前面的流程再说。中间掺杂着帮本部门及兄弟部门处理一些事,终于在周五上午,完成了rpm的制作的安装,貌似都没有什么异常。只是软件没法测试是否可运行。还有在ShJS的机器可否顺利安装,和运行呢?这边又跟A反映进度,并沟通下一步解决方案。
5.11拿到了rpmbuild,下面就是无尽让人抓狂的测试,在ShJS的机器,需要切换两次用户才能完成一个流程的安装测试,再加上文件的传输,还有其他的限制,真是举步维艰啊。。。rpm可用,软件安装完后,似乎一切都是正常的,为啥软件无法运行???百般思考,突发奇想,把可执行程序加入信任列表,看看软件是否可以运行,又是一次用户切换(fuck,不能用终端切换用户,只能注销再进入新的用户,密码长达17位啊。。。),添加好后,再次切换回root用户,功夫不负有心人,好人有好报,软件可运行了。。。似乎明白了什么,第一次制作的rpm是添加了可信任,但是安装文件里面的可执行不是可信任的啊。。。
取得这个巨大的突破后,接下来firefox下的插件的安装就同理了。如释重负啊。。。5.12半天时间完成插件的集成,并进行测试,一切顺利。还剩下一天半时间。那就轻松很多了,仔细理理思路,对安装包进行资源优化,添加桌面启动器,开始菜单,右键菜单等修边幅的工作。进行两次(还是很讨厌的,一个测试流程没有20分钟,根本走不下来,万恶的系统啊)。。。此时离给自己限定的时间,还有将近一天时间,安静的写了安装使用说明(小四字体接近一页半啊。。。主要是整个流程下来要切换四次用户啊。。。)终于完了。。。下午下班前打包,发给ShJS,第二天经测试,通过,哈哈,太开心了。。。不过插件下遇到一个问题,不过不是rpm包有问题了,也不是我们的软件有问题了,是js脚本网址需要修改了。这个就得兄弟部门去处理了。。。
紧张充实的几天啊,凌乱的文字。。。
周末了,决定针对制作的两个安装包涉及的一些东西进行下简单总结,犒劳下自己。。。。
一、二进制脚本安装包

1. ## while read结合,完成一次正确的询问

while echo -n"    Do you agree to abolve licenseterms?[yes or no]:"
do
read reply leftover
case $reply in
y* | N*)
break;
;;
n* | N*)
echo "you can't continue to dothe next operation!";
exit 1
;;
esac
done


linux shell if参数

2. ##从安装包尾部取出tar包
lines=50
tail-n+$lines $0>/tmp/welcome.tar.gz

3. ##改变指定目录以及其子目录下的所有文件的拥有者和群组
chown -R -v$USER:root "/opt/welcome" >/dev/null

4. ##将两个文件链接为一个完整的二进制.run文件
cat inst.sh welcome.tar.gz > welcome -mips-V$DefaultVersion.run
5. ##创建软连接
ln –s “libWelcome.so.2.1” “libWelcome.so”
创建libWelcome.so.2.1的软连接libWelcome.so;
6.
##开始菜单中软件启动器的添加和删除
cp –rf “Welcome.desktop” “/usr/local/share/applications/.”
rm –rf "/usr/local/share/applications/ Welcome.desktop"
7. ##软件在右键菜单中的添加和删除
echo “application/zip=Welcome.desktop” >>“/usr/local/share/applications/defaults.list”
sed -i '/ Welcome.desktop/d' "/usr/local/share/applications/defaults.list"
8. ##系统级环境变量的添加和删除
##注册环境变量
##当前软件安装路径
echo exportWelcomeApplicationDirPath=/opt/Welcome>>/etc/profile
##QT路径
echo exportLD_LIBRARY_PATH=/opt/Welcome/QT>>/etc/profile
##删除环境变量
sed -i '/ WelcomeApplicationDirPath/d'/etc/profile
sed -i'/LD_LIBRARY_PATH/d' /etc/profile
二、rpm安装包
鉴于ShJS机器的特殊性,此处rpm安装的时候无法完成软件的完整安装。分为两步,1.安装rpm;2.运行脚本文件,进一步配置。
脚本文件类似二进制脚本文件,在此处不再累述。
spec文件如下:

Summary: Welcome is an application program。#软件包简要介绍
Name: Welcome#软件包的名字
Version: 1.0#软件包的主版本号
Release: 0430#软件包的次版本号
Source0: %{name}#源代码包,默认将在上面提到的SOURCES目录中寻找
License: GPL#授权协议
Vendor: WelcomeCom
Packager:myself
BuildRoot:%{_tmppath}/%{name}-opt#定义临时构建目录,这个地址将作为临时安装目录在后面引用
Group: Applications/Archiving#软件分类:应用文档
Prefix: /
%description#软件包的内容介绍
The Welcome package contains the scripts and excutable programs that are used to view.
%install#安装软件包时执行
export RPM_SOURCES_DIR=../SOURCES
cd $RPM_SOURCES_DIR
rm -rf $RPM_BUILD_ROOT
mkdir $RPM_BUILD_ROOT
cp -rf %{name} $RPM_BUILD_ROOT/.
%clean#删除临时构建目录
rm -rf $RPM_BUILD_ROOT

%files#文件说明字段,声明多余或者缺少都将可能出错,收集文件并创建二进制和源rpm文件
%defattr(-,root,root)>#设置文件权限属性
/%{name}#声明将出现在软件包中


注:

spec文件:如何构建和打包软件;

二进制rpm文件仅包含已编译的软件和如何安装的信息。

%prep
echo "预处理脚本程序开始执行"

%build
echo "编译链接(构建)脚本程序开始执行"

%clean
echo "建包结束后清理脚本程序开始执行"
%pre
echo "安装前脚本程序开始执行"
%post
echo "安装后脚本程序开始执行"
%preun
echo "卸载前脚本程序开始执行"
%postun
echo "卸载后脚本程序开始执行"

RPM打包技术与典型SPEC文件分析

RPM使用和制作教程集合
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: