一种linux环境中快速部署软件的方法与流程

文档序号:11133690阅读:558来源:国知局
一种linux环境中快速部署软件的方法与制造工艺

本发明涉及linux系统技术领域,特别是涉及一种linux环境中快速部署软件的方法。



背景技术:

目前,Linux操作系统被广泛的应用于软件开发,计算机集群以及高性能计算等领域。在Linux操作系统下的软件快速部署是Linux的使用人员以及集群的管理员较为关注且较为棘手的问题。Windows的软件部署一般是使用exe的可执行压缩包进行分发,然后用图形安装界面和鼠标点击即可进行较为简单的安装。但是在Linux操作系统中,软件常常以源代码的形式进行分发,而受限于Linux操作系统的版本,以及软件源代码对其他一些软件库的依赖,使得Linux操作系统中软件及其运行环境的部署显得较为复杂。传统的Linux软件部署一般采取如下的步骤:安装依赖包->指定依赖包路径->编译软件->安装软件并设置软件的运行环境。但是这种方式在批量部署的时候往往会浪费使用者大量的时间,特别是需要部署的Linux操作系统的类型和版本并不相同的时候。虽然现在有一个较为自动化的工具,比如autoconf,cmake等可以减轻其中某些操作的复杂度,但是对于需要大批量部署的时候,这种方法还是会显得效率极其低下。

更为麻烦的是,在某些情况下,开发和测试人员想要测试软件在不同平台的兼容性和性能,比如同一套系统在Ubuntu上和CentOS上是否兼容,则其部署难度和时间并不仅仅是在一个系统中部署的两倍,由于两个系统的底层库的多寡,版本都不相同,使得能够在一个系统中顺利编译和运行的软件可能在另一个系统中没有办法编译,并且很有可能会有系统版本库的依赖冲突。解决这些问题往往需要较为丰富的Linux使用经验,也极为考验软件部署人员的耐心。

另一方面,虽然现在已经有了一些容器技术,比如docker,是一种类似于虚拟机而又相对轻量级的系统,借助于容器技术,软件可以在其中进行一次部署,然后整个docker容器就可以在支持docker的其它操作系统中运行。但是类似于docker的容器技术相对而言还是较为臃肿,在使用过程中需要先启动容器,然后才能执行应用,并且docker和其外部的系统相对封闭,使得文件的共享还是不能完全的透明。另外,类似于docker的容器系统,其安装包往往较大,不利于快速的分发,并且其类虚拟机的技术使得其在运行时会占用一定的系统资源,这样对于高性能计算等对计算资源需求较高的领域,这种技术就会显得过于臃肿,并浪费计算资源。

因此linux操作系统中软件的复杂依赖关系所导致的程序部署麻烦,移植困难,部署效率较低。



技术实现要素:

本发明的目的是提供一种linux环境中快速部署软件的方法,以实现提高部署效率。

为解决上述技术问题,本发明提供一种linux环境中快速部署软件的方法,该方法包括:

建立一个依赖关系解决器;

利用所述依赖关系解决器来运行目标软件,解析得到所述目标软件所需要的库文件和依赖文件,并获取所述目标软件在运行中调用的文件;

将所述库文件、依赖文件以及所述调用的文件按照目录结构放置到一个新的文件夹中;

将所述新的文件夹作为一个整体移植到新的操作系统中,在所述新的操作环境中运行所述目标软件,完成目标软件的快速部署。

优选的,所述调用的文件包括显式调用的文件和隐式调用的文件。

优选的,解析得到所述目标软件所需要的库文件和依赖文件之后,还包括:

对所述库文件和依赖文件进行分析,获取所述库文件的权限和存储路径,获取所述依赖文件的权限和存储路径。

优选的,所述将所述新的文件夹作为一个整体移植到新的操作系统中之后,还包括:

修改目标软件的依赖路径。

优选的,所述修改目标软件的依赖路径之后,还包括:

重定向目标软件需要调用的库文件和依赖文件的存储路径。

优选的,所述利用所述依赖关系解决器来运行目标软件之前,还包括:

对所述目标软件进行初始化。

优选的,采用编程语言建立一个依赖关系解决器。

本发明所提供的一种linux环境中快速部署软件的方法,建立一个依赖关系解决器;利用所述依赖关系解决器来运行目标软件,解析得到所述目标软件所需要的库文件和依赖文件,并获取所述目标软件在运行中调用的文件;将所述库文件、依赖文件以及所述调用的文件按照目录结构放置到一个新的文件夹中;将所述新的文件夹作为一个整体移植到新的操作系统中,在所述新的操作环境中运行所述目标软件,完成目标软件的快速部署。可见,设计了一个依赖关系解决器,通过运行目标软件,解析该软件运行所需要的库和依赖文件,以及运行中调用的文件,把这些文件按照其目录结构放置到一个新的文件夹中,该文件夹作为一个整体移植到新的操作系统中,并支持该软件在新的操作系统中运行,从而达到软件的快速部署的目的,本发明能够快速的部署软件及其运行环境,便利于Linux平台下软件的大规模和跨平台部署,解决了linux操作系统中软件的复杂依赖关系所导致的程序部署麻烦,移植困难的问题,提升部署效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明所提供的一种linux环境中快速部署软件的方法的流程图。

具体实施方式

本发明的核心是提供一种linux环境中快速部署软件的方法,以实现提高部署效率。

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参考图1,图1为本发明所提供的一种linux环境中快速部署软件的方法的流程图,该方法包括:

S11:建立一个依赖关系解决器;

S12:利用依赖关系解决器来运行目标软件,解析得到目标软件所需要的库文件和依赖文件,并获取目标软件在运行中调用的文件;

S13:将库文件、依赖文件以及调用的文件按照目录结构放置到一个新的文件夹中;

S14:将新的文件夹作为一个整体移植到新的操作系统中,在新的操作环境中运行目标软件,完成目标软件的快速部署。

可见,设计了一个依赖关系解决器,通过运行目标软件,解析该软件运行所需要的库和依赖文件,以及运行中调用的文件,把这些文件按照其目录结构放置到一个新的文件夹中,该文件夹作为一个整体移植到新的操作系统中,并支持该软件在新的操作系统中运行,从而达到软件的快速部署的目的,本发明能够快速的部署软件及其运行环境,便利于Linux平台下软件的大规模和跨平台部署,解决了linux操作系统中软件的复杂依赖关系所导致的程序部署麻烦,移植困难的问题,提升部署效率。

基于上述方法,具体的,所述调用的文件包括显式调用的文件和隐式调用的文件。所述新的操作环境为linux操作环境。本文中的依赖关系解决器简称为解决器。

其中,步骤S13和步骤S14是由依赖关系解决器来实施完成。即通过依赖关系解决器将库文件、依赖文件以及调用的文件按照目录结构放置到一个新的文件夹中;通过依赖关系解决器将新的文件夹作为一个整体移植到新的操作系统中,在新的操作环境中运行目标软件,完成目标软件的快速部署。

进一步的,解析得到目标软件所需要的库文件和依赖文件之后,还包括:对库文件和依赖文件进行分析,获取库文件的权限和存储路径,获取依赖文件的权限和存储路径。

进一步的,将新的文件夹作为一个整体移植到新的操作系统中之后,还包括:修改目标软件的依赖路径。

其中,修改目标软件的依赖路径之后,重定向目标软件需要调用的库文件和依赖文件的存储路径。

进一步的,利用依赖关系解决器来运行目标软件之前,对目标软件进行初始化。

其中,采用编程语言建立一个依赖关系解决器。上述的各个步骤都是由依赖关系解决器来完成的。

本发明中的依赖关系解决器具有如下功能和特性:

(1)运行可执行程序,并反馈正确的运行结果。比如该解决器叫solver,以前的程序执行命令是./a.out 1.txt,则使用解决器执行的命令是solver./a.out 1.txt,程序可以正确运行。

(2)获取程序执行过程中调用的依赖关系以及涉及到的相应文件。比如执行solver./a.out 1.txt时,解决器能够知道如下内容:a.out在运行时调用的系统库,比如libpng.so,libstdc++.so等;a.out在运行时调用的文件,显示调用的文件1.txt以及隐式调用的2.txt等文件;上述文件存放的路径及各文件的权限。解决器能够获取上述内容的具体实现上并没有限制,一种可以参考的实现方式是使用Linux系统中的ptrace机制。

(3)复制(2)中涉及到的文件,并按照相应的路径拷贝到某一个目标目录中。

(4)修改可执行程序中的依赖路径,重定向其需要调用的库和文件的路径。

(5)该解决器的实现不需要依赖于特定的编程语言。

对于本方法的整个工作流程,分为:初始化;移植和再运行。下面举例说明整个方法的工作流程。

1、初始化

假设有一个python的可执行程序setup.py。以及setup.py在执行过程中会用到参数文件setup.inc,另外也包含了setup.py在执行过程中会隐式调用的一些文件,放在reference文件夹中。整个目录结构即setup.py程序所在的目录结构的代码如下:

一般情况下,执行setup.py的方式是python setup.py setup.inc,其在执行过程中会使用reference文件夹中的三个数据文件1.txt、2.txt、3.txt。

现在使用解决器solver来执行该程序,使用命令为solver python setup.py setup.inc。程序正常执行,并解析出该程序执行中调用的一些系统库,和调用的上述不同文件夹中的一些文件,然后把这些文件按照目录的依赖关系拷贝到一个新的文件夹中。比如该文件夹的名称为solver-root,该文件夹中的目录结构的代码如下:

solver-root的目录结构的代码只展示了其中的两层目录。

可以看到,solver-root的目录结构和linux的根目录结构类似,solver在执行setup.py的过程中把其运行所需要的一些库文件和依赖文件从Linux的系统目录拷贝到了当前的目录。在bin文件夹中包含了python的可执行文件python2.7,solver-root目录中的bin文件夹中的文件的目录结构代码如下:

在home文件夹中包含了setup.py原来所在的位置以及相应的引用的文件。solver-root中的home目录结构的代码如下:

2、移植和再运行

再经过上述的操作之后,在solver-root文件夹中,setup.py就可以仅通过调用solver-root文件夹中的文件和库进行运行。具体的执行可以通过指定额外的参数进行。比如solver-x python setup.py setup.inc。其中的-x参数告诉solver的执行依赖solver-root中的库和文件进行。为了移植,把整个solver-root文件夹打包并拷贝到需要运行的目标操作系统即可。比如在redhat上执行初始化的操作,然后把solver-root文件夹打包拷贝到Ubuntu操作系统中。移植到Ubuntu之后,进入solver-root中的home/guest/tmp/show/,执行solver-x python setup.py setup.inc,即可执行setup.py程序。

如上,可以看出,在初始化之后,solver-root文件夹变成了一个可以非常方便的移植和再运行的微系统。使得相应的软件及其运行环境可以被快速的部署。另外,也可以看出,本方法只是提取了软件运行所需的文件,使得整个需要部署的文件包相对小而轻量级。

本发明能够快速的部署软件及其运行环境,便利于Linux平台下软件的大规模和跨平台部署。具体的,设计了一个依赖关系解决器,通过运行目标软件,解析该软件运行所需要的库和依赖文件,以及运行中显式调用和隐式调用的文件,把这个文件按照其目录结构放置到一个新的文件夹中,该文件夹可以作为一个整体移植到新的操作系统中,并支持该软件在新的操作系统中运行,从而达到软件的快速部署的目的。并且这种方法并不会使得程序运行时占用过多的系统资源,实现节省系统资源。解决了Linux操作系统中软件的复杂依赖关系所导致的程序部署麻烦,移植困难的问题。

综上,本发明所提供的一种linux环境中快速部署软件的方法,建立一个依赖关系解决器;利用依赖关系解决器来运行目标软件,解析得到目标软件所需要的库文件和依赖文件,并获取目标软件在运行中调用的文件;将库文件、依赖文件以及调用的文件按照目录结构放置到一个新的文件夹中;将新的文件夹作为一个整体移植到新的操作系统中,在新的操作环境中运行目标软件,完成目标软件的快速部署。可见,设计了一个依赖关系解决器,通过运行目标软件,解析该软件运行所需要的库和依赖文件,以及运行中调用的文件,把这些文件按照其目录结构放置到一个新的文件夹中,该文件夹作为一个整体移植到新的操作系统中,并支持该软件在新的操作系统中运行,从而达到软件的快速部署的目的,本发明能够快速的部署软件及其运行环境,便利于Linux平台下软件的大规模和跨平台部署,解决了linux操作系统中软件的复杂依赖关系所导致的程序部署麻烦,移植困难的问题,提升部署效率。

以上对本发明所提供的一种linux环境中快速部署软件的方法进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1