CN105446759A - 一种rpm包更新方法与设备 - Google Patents
一种rpm包更新方法与设备 Download PDFInfo
- Publication number
- CN105446759A CN105446759A CN201410432169.4A CN201410432169A CN105446759A CN 105446759 A CN105446759 A CN 105446759A CN 201410432169 A CN201410432169 A CN 201410432169A CN 105446759 A CN105446759 A CN 105446759A
- Authority
- CN
- China
- Prior art keywords
- rpm
- bag
- file
- database file
- information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请的目的是提供一种rpm包更新方法与设备;基于事件监控获取rpm包的包变更信息;根据所述包变更信息更新所述rpm包对应的数据库文件;压缩更新后的所述数据库文件以获得所述rpm包对应的发布文件。与现有技术相比,本申请通过事件监控获得rpm包的包变更信息,有针对性对产生变更的rpm包进行更新操作,从而避免了对全部rpm包判断更新;并且,以多线程压缩的方法获得发布文件大大减少了压缩文件消耗的时间。从而,在整体上大大提高了rpm包数据更新的效率。
Description
技术领域
本申请涉及计算机领域,尤其涉及一种rpm包更新技术。
背景技术
在Linux操作系统下,几乎所有的软件均通过RPM进行安装、卸载及管理等操作。RPM的全称为RedhatPackageManager(RedHat软件包管理工具),是由Redhat公司提出的,用于管理Linux下软件包的软件。现在包括OpenLinux、S.u.S.E.以及TurboLinux等Linux的分发版本都有采用,可以算是公认的行业标准了。
作为一种被广泛使用的软件包,rpm包在实际应用中会不断的更新、升级,使得网络设备或软件管理器需要不断获取rpm包的更新数据来进一步搜索调用和管理应用相应的rpm包,同时随着实际需要,管理的rpm包的数量不断增多,相应的所需要更新的rpm元数据也随之增加,进而,对rpm包元数据的更新效率有了更高的要求。
目前,该领域采用的方案为:利用createrepo(创建仓库)工具对所有的rpm包进行遍历,对每个rpm包先计算出其对应的md5值,再与存放包首要信息的文件中已有的所述rpm包的md5值相比较,若不一致,则更新包的元数据信息。因为要对所有的rpm包不加区分的遍历,更新操作会随着rpm包的增多大幅度增加,相应的,用户需要花费大量的时间等待获取rpm包,应用效率大大降低。
发明内容
本申请的目的是提供一种rpm包更新方法与设备。
根据本申请的一个方面,提供了一种rpm包更新方法,包括:
基于事件监控获取rpm包的包变更信息;
根据所述包变更信息更新所述rpm包对应的数据库文件;
压缩更新后的所述数据库文件以获得所述rpm包对应的发布文件。
根据本申请的另一方面,还提供了一种rpm包更新设备,包括:
第一装置,用于基于事件监控获取rpm包的包变更信息;
第二装置,用于根据所述包变更信息更新所述rpm包对应的数据库文件;
第三装置,用于压缩更新后的所述数据库文件以获得所述rpm包对应的发布文件。
与现有技术相比,本申请通过事件监控获得rpm包的包变更信息,再依据所述包变更信息更新所述rpm包对应的数据库文件,并压缩所述数据库文件形成发布数据;从而,不需要对全部的rpm包依次判断并更新,而是有针对性的以产生变更的rpm包为更新判断和操作的对象,从而避免了对不发生变更的rpm包所做的更新判断,以局部更新的机制大大地提高了rpm包数据更新的效率。
进一步,对于所获得的更新后的数据库文件以多线程压缩方法进行压缩,对比之前的压缩方法,本申请对数据库文件的压缩时间大幅度减少,从而优化了rpm包数据更新的整体速度。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出根据本申请一个方面的一种rpm包更新设备示意图;
图2示出根据本申请另一个方面的一种rpm包更新方法流程图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
图1示出根据本申请一个方面的一种rpm包更新设备示意图。rpm包更新设备1包括第一装置101、第二装置102和第三装置103。
其中,第一装置基于事件监控获取rpm包的包变更信息;第二装置根据所述包变更信息更新所述rpm包对应的数据库文件;第三装置压缩更新后的所述数据库文件以获得所述rpm包对应的发布文件。
具体地,rpm包更新设备1的第一装置101基于事件监控获取rpm包的包变更信息。所述事件监控包括某种设备装置、方法或机制。优选地,利用linux内核的Inotify事件驱动通知器对指定的rpm包的数据进行实时监控,从而获得rpm包的包变更信息。在此,采用的linux系统内核版本不低于2.6.13。所述Inotify是linux系统(内核不低于2.6.13)支持的一种文件系统的变化通知机制,其功能是监视文件系统的变化,在监视到文件系统发生变化以后,会发送相应的变化事件。本申请通过Inotify事件驱动通知器可以获得较为精准的rpm包变更列表。
例如,首先,针对需要监控的rpm包,在系统内核中创建inotify的实体,并返回相应的文件描述符,此文件描述符用于读取监控目标可能发生的变更事件;然后,为需要监控的rpm包创建一个或多个监视器,用以监视rpm包可能出现的变更事件,所创建的监视器包括对应实体的文件描述符、监视目标路径、监视事件列表等信息;当有变更发生时,如rpm包数据被增加、删除、修改时,使用read系统调用读取相应实体的文件描述符,则系统返回变更事件,从而获得需要监控的rpm包的变更信息。在此,为了避免不断轮询文件,read()默认采用同步I/O的模式读取事件,因此,只有当变更事件发生后才会返回变更事件。
本领域技术人员应能理解,上述运用linux内核的Inotify事件驱动通知器获取rpm包变更信息仅为举例,其他事件监控如可适用本申请,也应包含在本申请的保护范围以内,并在此以引用方式包含于此。
在此,通过Inotify事件驱动通知器获得较为精准的rpm包变更列表可以基于一定的程序语言实现,本申请优选地使用了开源的python模块pyinotify.py,来获得实时的rpm包变更情况。
在此,通过事件监控可以对可能发生变更的rpm包实时监控,只有在监控目标发生变更时,系统才会返回变更信息,对于没有发生变更的rpm包,系统不会响应,从而,在进行rpm数据更新时,不需要扫描对比全部rpm包数据,而是有针对性的进行局部更新,因此大幅度提升了更新操作的效率。
接着,rpm包更新设备1的第二装置102根据所述包变更信息更新所述rpm包对应的数据库文件。因为所述rpm包变更信息的类型至少包括新增文件信息、删除文件信息或修改文件信息中的一项,所以相应的更新操作包括对数据的增加、删除、修改,同时,所述更新操作需要基于一定的数据库,包括关系型数据库来完成的,所以对于所获得的rpm包的变更信息,其更新操作的直接对象是变更的rpm数据对应的数据库文件,若不是数据库文件则需要先将变更的rpm数据对应的原文件转化为可执行更新操作的数据库文件,然后再执行一定的更新操作。
在此,为了更好的调用和管理更多的rpm包,一般将多个rpm包集合在一个软件仓库中,以此软件仓库为rpm包管理设备的资源库,将软件仓库中所有rpm包的头部信息组合成repodata数据,所述repodata数据包括了rpm包的详细信息,以及包之间的依赖性信息等,通过此数据能够方便相应的管理设备对rpm包进行搜索和调用。例如,通过在各个rpm包目录中分别执行createrepo命令生成当前目录下的repodata数据,包括primary.xml.[gz]、filelists.xml.[gz]、other.xml.[gz]、repomd.xml等压缩文件形式,其中,primary.xml.[gz]这个文件存储了rpm包主要的元数据信息,包含每一个分组中的rpm包的依赖性信息;filelists.xml.[gz]包含每一个分组中的rpm包的详细信息。当依据事件监控获得rpm包的包变更信息时,需要依据此变更信息修改变更的rpm包对应的repodata数据。又因为所述包变更信息包括对数据的增加、删除、修改等变化,所以需要对原先存在的所述rpm包对应的repodata数据进行相应的增加、删除、修改等更新操作,同时,所述更新操作应所述基于相应的关系型数据库,所以在更新操作之前需要先将所述rpm包对应的repodata数据文件转化为相应的数据库文件形式,本申请优选sqlite文件,然后对相应的数据库文件进行增加、删除、修改等数据库操作操作。例如,获得的某个rpm包的一个修改文件信息,需要将与所述rpm包对应的primary.xml.[gz]先解压缩为primary.xml,再转化为数据库文件primary.sqlite,进而根据所获得的所述rpm包的所述修改文件信息对此primary.sqlite中的数据进行修改。
本领域技术人员应能理解,上述所优选的sqlite文件以及相应的数据库操作仅为举例,其他数据库文件形式以及其相应的数据库操作如可适用本申请,也应包含在本申请的保护范围以内,并在此以引用方式包含于此。
接着,rpm包更新设备1的第三装置103压缩更新后的所述数据库文件以获得所述rpm包对应的发布文件。在完成对rpm包所对应的数据库文件更新操作后,需要对更新后的数据库文件进行压缩,经过压缩的rpm数据可以直接被相应的网络设备或管理设备所识别,从而能够更有效地在网络间传输应用。
例如,进行gzib压缩方法、lbzip2压缩方法等,从而获得压缩文件,如gz文件、bz2文件等,此压缩文件就是更新后的rpm包所对应的新的发布文件,如primary.sqlite.gz、filelists.sqlite.bz2。
在此,基于事件监控获得rpm包的包变更信息,并依据此包变更信息更新rpm包对应的数据库文件,再将更新后的数据库文件压缩并发布,使得用户可以进行相应的rpm包管理和应用。其中,利用事件监控对rpm数据进行有针对性的局部更新,使得rpm数据的更新避免了耗时较多的全量扫描方式,特别是在rpm包数量增加的情况下,依然可以保证较快的更新速度。例如,当实际管理的rpm包达到21700多个时,采用全量扫描方法更新的耗时为14分种21秒,而采用优化后的本方法,编制rpm包的时间降低到12秒,相比之下,效率提升约70倍,优势十分显著。并且管理的rpm包越多,优化的效果越明显。
优选地,所述rpm包更新设备1还包括第四装置(未示出)。所述第四装置将所述发布文件发布至对应的网络设备。
具体地,所述发布文件是压缩更新后的数据库文件得到的对应文件,如primary.sqlite.bz2、filelists.sqlite.bz2。所述发布文件精确描述了rpm包的详细信息,如依赖关系、包含文件、校验信息等等。将发布文件发布到相应的网络设备,由所述网络设备对所述发布文件进行分析并调用、管理相应的rpm包。例如,所述网络设备包括yum服务器,所述发布文件,如primary.sqlite.bz2包含着rpm包主要的元数据信息,包含每一个分组中的rpm包的依赖性信息,所述yum服务器获得所述发布文件后,通过分析得到各个rpm包的具体信息和相互依赖关系并记录,当客户端需要搜索、安装某个软件时,可以通过对下载所述服务器上的记录数据进行相应的操作,如对所述服务器上记载的依赖性关系文件进行分析,进而获得所有相关的软件,并一次性全部下载下来进行安装。
在一个优选实施例中,所述rpm包更新设备1的第二装置102用于:检测所述rpm包对应的目录下是否存在所述rpm包对应的数据库文件;当所述数据库文件存在,根据所述包变更信息更新所述数据库文件。
具体地,需要先判断是否存在所述rpm包对应的数据库文件,若检测到所述rpm包对应的目录下存在所述rpm包对应的数据库文件,就可以基于rpm包的变更信息,直接对所述数据库文件进行相应的数据库操作,例如,在软件仓库中rpm包所对应的repodata目录下若存在repodata/primary.sqlite、repodata/filelists.sqlite,则直接对所述所述sqlite文件进行数据库操作,如增加、删除、修改等操作。
优选地,所述rpm包更新设备1的第二装置102还用于:当所述数据库文件不存在,获取所述数据库文件;根据所述包变更信息更新所述数据库文件。
具体地,若通过检测,发现所述rpm包对应的数据库文件不存在,但是rpm包变更信息的更新操作又需要针对一定的数据库文件,所以需要先获得所述rpm包对应的数据库文件。例如,所述rpm包对应的软件仓库repodata目录下不存在相应的repodata/primary.sqlite、repodata/filelists.sqlite文件形式,在此,这里的rpm包对应的repodata数据的存在形态,包括以其他的文件形式存在的情况,也包括rpm包对应的repodata数据并未形成的情况,不论是何种情况,只要此时不存在可以直接进行数据库操作的数据库文件,就需要预先获得rpm包对应的数据库文件。进而,依据所述包变更信息更新所述数据库文件。
更优选地,所述rpm包更新设备1获取所述数据库文件包括:当所述rpm包对应的目录下存在所述rpm包对应的压缩文件时,解压缩所述压缩文件以获得所述数据库文件;或当所述压缩文件不存在时,通过rpm包初始化获取所述数据库文件。
具体地,若所述rpm包对应的目录下存在的是所述rpm包对应的压缩文件,对所述压缩文件也无法直接进行相应的增加、删除、修改更新操作,则需要对所述压缩文件进行解压以获得所述数据库文件。例如,rpm包对应的目录下存在压缩文件primary.sqlite.gz,对其进行解压缩转化为primary.sqlite,再对此解压缩的数据库文件进行相应的更新操作。若不存在所述rpm包对应的压缩文件,则说明与rpm包对应的数据库文件相应的原始文件并没有存在,此时,可以通过初始化方式获得rpm包的数据库文件,例如在软件仓库中,rpm包对应的repodata数据原始文件还没形成,则收集目录中所有rpm包的header信息组成repodata数据文件,如,可以运用全量扫描工具createrepo初始化创建元数据的xml文件,再将此xml文件转化成数据库文件,如转化为sqlite文件。
优选地,根据所述rpm包更新设备1,其中,所述rpm包的包变更信息包括以下至少任一项:一是所述rpm包对应的新增文件信息;二是所述rpm包对应的删除文件信息;三是所述rpm包对应的修改文件信息。
具体地,rpm包的变更信息包括rpm元数据信息,如rpm包的名称、版本、文件大小、文件位置、冲突、依赖关系、包含文件、校验码信息等各方面详细信息。所述rpm元数据信息的增加、删除、修改等变化会对rpm包的应用带来很大影响,所以需要不断更新以更好的适应用户对rpm包应用的需求。
更优选地,所述rpm包更新设备1的第二装置102还用于以下至少任一项:一是根据所述rpm包对应的新增文件信息抽取对应新增文件的元数据信息,并将所述元数据信息插入所述数据库文件;二是根据所述rpm包对应的删除文件信息删除所述数据库文件中的对应记录;三是根据所述rpm包对应的修改文件信息抽取对应变更文件的元数据信息,并根据所述元数据信息修改所述数据库文件。
具体地,基于事件监控获取了rpm包对应的包变更信息,并且获得了所述rpm包对应的数据库文件,进而可以对所述数据库文件进行相应的更新操作。因为所述rpm包变更信息的种类为新增文件信息、删除文件信息和修改文件信息中的一种或几种,所以rpm对应的更新操作也与此变更信息相应。若所述文件信息增加,则从增加的文件信息中抽取其元数据,并插入到所述数据库文件中;若所述文件信息被删除,则直接对相应数据库文件中的对应记录做删除;若所述文件信息被修改,则从修改的文件信息中抽取其元数据,并修改数据库文件中的相应记录。
优选地,所述rpm包更新设备1的第三装置103以多线程压缩方法压缩更新后的所述数据库文件,并以此为所述rpm包对应的发布文件。
具体地,rpm包对应的数据库文件在发布之前需要进行文件压缩,从而方便信息数据的传输。相比于一般的gzib压缩方法,多线程压缩方法,如多线程lbzip2压缩工具,可以在一段时间内开启多个线程同时压缩文件,使得同样大小的文件压缩的时间大幅度降低,例如,对于150M的数据库文件,用gzib压缩方法需要30秒压缩完成,而使用多线程压缩工具lbzip2则可以将压缩时间提升到8秒。进而,随着应用中rpm包数量的不断增加,多线程压缩方法对整个更新操作的优化效果十分显著。
优选地,所述rpm包更新设备1的第三装置103在所述rpm包对应的目录下保存更新后的所述数据库文件。
具体地,rpm包对应的数据库文件是为了完成rpm包更新而在操作中临时生成的文件,每一次依据相应的rpm包的包变更信息进行更新操作时都需要获得相应的数据库文件,若每一次更新完相应rpm包后,都将对应的数据库文件释放,则下一次对所述rpm包再次更新的时候就需要再次生成对应的数据库文件。例如,获得了某个rpm包的一个修改文件信息,需要将与所述rpm包对应的包含着包数据的primary.xml.[gz]先解压缩为primary.xml,再转化为临时数据库文件primary.sqlite,进而,根据所获得的所述rpm包的修改文件信息对此primary.sqlite中的数据进行修改,更新完成后,若立即释放所述rpm包对应的primary.sqlite,则当下一次所述rpm包变更时,需要重新检测并生成对应的primary.sqlite以完成对应的数据库操作,但若是保留了前一次更新后的此primary.sqlite,就可以在本次变更时直接使用此primary.sqlite,省去此次解压缩操作。例如对150M的数据库文件不删除,下次变更时直接使用所述数据库文件,将会节省解压缩时间20秒。在此,当rpm包数量增多时,变更信息的更新操作就会节省下相应多个解压缩操作,产生显著的优化效果。
图2示出根据本申请另一个方面的一种rpm包更新方法流程图。
其中,在步骤S201中,rpm包更新设备1基于事件监控获取rpm包的包变更信息;在步骤S202中,rpm包更新设备1根据所述包变更信息更新所述rpm包对应的数据库文件;在步骤S203中,rpm包更新设备1压缩更新后的所述数据库文件以获得所述rpm包对应的发布文件。
具体地,在步骤S201中,rpm包更新设备1基于事件监控获取rpm包的包变更信息。所述事件监控包括某种设备装置、方法或机制。优选地,利用linux内核的Inotify事件驱动通知器对指定的rpm包的数据进行实时监控,从而获得rpm包的包变更信息。在此,采用的linux系统内核版本不低于2.6.13。所述Inotify是linux系统(内核不低于2.6.13)支持的一种文件系统的变化通知机制,其功能是监视文件系统的变化,在监视到文件系统发生变化以后,会发送相应的变化事件。本申请通过Inotify事件驱动通知器可以获得较为精准的rpm包变更列表。
例如,首先,针对需要监控的rpm包,在系统内核中创建inotify的实体,并返回相应的文件描述符,此文件描述符用于读取监控目标可能发生的变更事件;然后,为需要监控的rpm包创建一个或多个监视器,用以监视rpm包可能出现的变更事件,所创建的监视器包括对应实体的文件描述符、监视目标路径、监视事件列表等信息;当有变更发生时,如rpm包数据被增加、删除、修改时,使用read系统调用读取相应实体的文件描述符,则系统返回变更事件,从而获得需要监控的rpm包的变更信息。在此,为了避免不断轮询文件,read()默认采用同步I/O的模式读取事件,因此,只有当变更事件发生后才会返回变更事件。
本领域技术人员应能理解,上述运用linux内核的Inotify事件驱动通知器获取rpm包变更信息仅为举例,其他事件监控如可适用本申请,也应包含在本申请的保护范围以内,并在此以引用方式包含于此。
在此,通过Inotify事件驱动通知器获得较为精准的rpm包变更列表可以基于一定的程序语言实现,本申请优选地使用了开源的python模块pyinotify.py,来获得实时的rpm包变更情况。
在此,通过事件监控可以对可能发生变更的rpm包实时监控,只有在监控目标发生变更时,系统才会返回变更信息,对于没有发生变更的rpm包,系统不会响应,从而,在进行rpm数据更新时,不需要扫描对比全部rpm包数据,而是有针对性的进行局部更新,因此大幅度提升了更新操作的效率。
接着,在步骤S202中,rpm包更新设备1根据所述包变更信息更新所述rpm包对应的数据库文件。因为所述rpm包变更信息的类型至少包括新增文件信息、删除文件信息或修改文件信息中的一项,所以相应的更新操作包括对数据的增加、删除、修改,同时,所述更新操作需要基于一定的数据库,包括关系型数据库来完成的,所以对于所获得的rpm包的变更信息,其更新操作的直接对象是变更的rpm数据对应的数据库文件,若不是数据库文件则需要先将变更的rpm数据对应的原文件转化为可执行更新操作的数据库文件,然后再执行一定的更新操作。
在此,为了更好的调用和管理更多的rpm包,一般将多个rpm包集合在一个软件仓库中,以此软件仓库为rpm包管理设备的资源库,将软件仓库中所有rpm包的头部信息组合成repodata数据,所述repodata数据包括了rpm包的详细信息,以及包之间的依赖性信息等,通过此数据能够方便相应的管理设备对rpm包进行搜索和调用。例如,通过在各个rpm包目录中分别执行createrepo命令生成当前目录下的repodata数据,包括primary.xml.[gz]、filelists.xml.[gz]、other.xml.[gz]、repomd.xml等压缩文件形式,其中,primary.xml.[gz]这个文件存储了rpm包主要的元数据信息,包含每一个分组中的rpm包的依赖性信息;filelists.xml.[gz]包含每一个分组中的rpm包的详细信息。当依据事件监控获得rpm包的包变更信息时,需要依据此变更信息修改变更的rpm包对应的repodata数据。又因为所述包变更信息包括对数据的增加、删除、修改等变化,所以需要对原先存在的所述rpm包对应的repodata数据进行相应的增加、删除、修改等更新操作,同时,所述更新操作应所述基于相应的关系型数据库,所以在更新操作之前需要先将所述rpm包对应的repodata数据文件转化为相应的数据库文件形式,本申请优选sqlite文件,然后对相应的数据库文件进行增加、删除、修改等数据库操作操作。例如,获得的某个rpm包的一个修改文件信息,需要将与所述rpm包对应的primary.xml.[gz]先解压缩为primary.xml,再转化为数据库文件primary.sqlite,进而根据所获得的所述rpm包的所述修改文件信息对此primary.sqlite中的数据进行修改。
本领域技术人员应能理解,上述所优选的sqlite文件以及相应的数据库操作仅为举例,其他数据库文件形式以及其相应的数据库操作如可适用本申请,也应包含在本申请的保护范围以内,并在此以引用方式包含于此。
接着,在步骤S203中,rpm包更新设备1压缩更新后的所述数据库文件以获得所述rpm包对应的发布文件。在完成对rpm包所对应的数据库文件更新操作后,需要对更新后的数据库文件进行压缩,经过压缩的rpm数据可以直接被相应的网络设备或管理设备所识别,从而能够更有效地在网络间传输应用。
例如,进行gzib压缩方法、lbzip2压缩方法等,从而获得压缩文件,如gz文件、bz2文件等,此压缩文件就是更新后的rpm包所对应的新的发布文件,如primary.sqlite.gz、filelists.sqlite.bz2。
在此,基于事件监控获得rpm包的包变更信息,并依据此包变更信息更新rpm包对应的数据库文件,再将更新后的数据库文件压缩并发布,使得用户可以进行相应的rpm包管理和应用。其中,利用事件监控对rpm数据进行有针对性的局部更新,使得rpm数据的更新避免了耗时较多的全量扫描方式,特别是在rpm包数量增加的情况下,依然可以保证较快的更新速度。例如,当实际管理的rpm包达到21700多个时,采用全量扫描方法更新的耗时为14分种21秒,而采用优化后的本方法,编制rpm包的时间降低到12秒,相比之下,效率提升约70倍,优势十分显著。并且管理的rpm包越多,优化的效果越明显。
优选地,所述方法还包括步骤S204(未示出)。在步骤S204中,rpm包更新设备1将所述发布文件发布至对应的网络设备。
具体地,所述发布文件是压缩更新后的数据库文件得到的对应文件,如primary.sqlite.bz2、filelists.sqlite.bz2。所述发布文件精确描述了rpm包的详细信息,如依赖关系、包含文件、校验信息等等。将发布文件发布到相应的网络设备,由所述网络设备对所述发布文件进行分析并调用、管理相应的rpm包。例如,所述网络设备包括yum服务器,所述发布文件,如primary.sqlite.bz2包含着rpm包主要的元数据信息,包含每一个分组中的rpm包的依赖性信息,所述yum服务器获得所述发布文件后,通过分析得到各个rpm包的具体信息和相互依赖关系并记录,当客户端需要搜索、安装某个软件时,可以通过对下载所述服务器上的记录数据进行相应的操作,如对所述服务器上记载的依赖性关系文件进行分析,进而获得所有相关的软件,并一次性全部下载下来进行安装。
在一个优选实施例中,步骤S202包括:检测所述rpm包对应的目录下是否存在所述rpm包对应的数据库文件;当所述数据库文件存在,根据所述包变更信息更新所述数据库文件。
具体地,需要先判断是否存在所述rpm包对应的数据库文件,若检测到所述rpm包对应的目录下存在所述rpm包对应的数据库文件,就可以基于rpm包的变更信息,直接对所述数据库文件进行相应的数据库操作,例如,在软件仓库中rpm包所对应的repodata目录下若存在repodata/primary.sqlite、repodata/filelists.sqlite,则直接对所述所述sqlite文件进行数据库操作,如增加、删除、修改等操作。
优选地,在步骤S202中,rpm包更新设备1还用于:当所述数据库文件不存在,获取所述数据库文件;根据所述包变更信息更新所述数据库文件。
具体地,若通过检测,发现所述rpm包对应的数据库文件不存在,但是rpm包变更信息的更新操作又需要针对一定的数据库文件,所以需要先获得所述rpm包对应的数据库文件。例如,所述rpm包对应的软件仓库repodata目录下不存在相应的repodata/primary.sqlite、repodata/filelists.sqlite文件形式,在此,这里的rpm包对应的repodata数据的存在形态,包括以其他的文件形式存在的情况,也包括rpm包对应的repodata数据并未形成的情况,不论是何种情况,只要此时不存在可以直接进行数据库操作的数据库文件,就需要预先获得rpm包对应的数据库文件。进而,依据所述包变更信息更新所述数据库文件。
更优选地,所述方法中,rpm包更新设备1获取所述数据库文件包括:当所述rpm包对应的目录下存在所述rpm包对应的压缩文件时,解压缩所述压缩文件以获得所述数据库文件;或当所述压缩文件不存在时,通过rpm包初始化获取所述数据库文件。
具体地,若所述rpm包对应的目录下存在的是所述rpm包对应的压缩文件,对所述压缩文件也无法直接进行相应的增加、删除、修改更新操作,则需要对所述压缩文件进行解压以获得所述数据库文件。例如,rpm包对应的目录下存在压缩文件primary.sqlite.gz,对其进行解压缩转化为primary.sqlite,再对此解压缩的数据库文件进行相应的更新操作。若不存在所述rpm包对应的压缩文件,则说明与rpm包对应的数据库文件相应的原始文件并没有存在,此时,可以通过初始化方式获得rpm包的数据库文件,例如在软件仓库中,rpm包对应的repodata数据原始文件还没形成,则收集目录中所有rpm包的header信息组成repodata数据文件,如,可以运用全量扫描工具createrepo初始化创建元数据的xml文件,再将此xml文件转化成数据库文件,如转化为sqlite文件。
优选地,在所述方法中,所述rpm包的包变更信息包括以下至少任一项:一是所述rpm包对应的新增文件信息;二是所述rpm包对应的删除文件信息;三是所述rpm包对应的修改文件信息。
具体地,rpm包的变更信息包括rpm元数据信息,如rpm包的名称、版本、文件大小、文件位置、冲突、依赖关系、包含文件、校验码信息等各方面详细信息。所述rpm元数据信息的增加、删除、修改等变化会对rpm包的应用带来很大影响,所以需要不断更新以更好的适应用户对rpm包应用的需求。
更优选地,在步骤S202中,rpm包更新设备1还用于以下至少任一项:一是根据所述rpm包对应的新增文件信息抽取对应新增文件的元数据信息,并将所述元数据信息插入所述数据库文件;二是根据所述rpm包对应的删除文件信息删除所述数据库文件中的对应记录;三是根据所述rpm包对应的修改文件信息抽取对应变更文件的元数据信息,并根据所述元数据信息修改所述数据库文件。
具体地,基于事件监控获取了rpm包对应的包变更信息,并且获得了所述rpm包对应的数据库文件,进而可以对所述数据库文件进行相应的更新操作。因为所述rpm包变更信息的种类为新增文件信息、删除文件信息和修改文件信息中的一种或几种,所以rpm对应的更新操作也与此变更信息相应。若所述文件信息增加,则从增加的文件信息中抽取其元数据,并插入到所述数据库文件中;若所述文件信息被删除,则直接对相应数据库文件中的对应记录做删除;若所述文件信息被修改,则从修改的文件信息中抽取其元数据,并修改数据库文件中的相应记录。
优选地,在步骤S203中,rpm包更新设备1以多线程压缩方法压缩更新后的所述数据库文件,并以此为所述rpm包对应的发布文件。
具体地,rpm包对应的数据库文件在发布之前需要进行文件压缩,从而方便信息数据的传输。相比于一般的gzib压缩方法,多线程压缩方法,如多线程lbzip2压缩工具,可以在一段时间内开启多个线程同时压缩文件,使得同样大小的文件压缩的时间大幅度降低,例如,对于150M的数据库文件,用gzib压缩方法需要30秒压缩完成,而使用多线程压缩工具lbzip2则可以将压缩时间提升到8秒。进而,随着应用中rpm包数量的不断增加,多线程压缩方法对整个更新操作的优化效果十分显著。
优选地,在步骤S203中,rpm包更新设备1在所述rpm包对应的目录下保存更新后的所述数据库文件。
具体地,rpm包对应的数据库文件是为了完成rpm包更新而在操作中临时生成的文件,每一次依据相应的rpm包的包变更信息进行更新操作时都需要获得相应的数据库文件,若每一次更新完相应rpm包后,都将对应的数据库文件释放,则下一次对所述rpm包再次更新的时候就需要再次生成对应的数据库文件。例如,获得了某个rpm包的一个修改文件信息,需要将与所述rpm包对应的包含着包数据的primary.xml.[gz]先解压缩为primary.xml,再转化为临时数据库文件primary.sqlite,进而,根据所获得的所述rpm包的修改文件信息对此primary.sqlite中的数据进行修改,更新完成后,若立即释放所述rpm包对应的primary.sqlite,则当下一次所述rpm包变更时,需要重新检测并生成对应的primary.sqlite以完成对应的数据库操作,但若是保留了前一次更新后的此primary.sqlite,就可以在本次变更时直接使用此primary.sqlite,省去此次解压缩操作。例如对150M的数据库文件不删除,下次变更时直接使用所述数据库文件,将会节省解压缩时间20秒。在此,当rpm包数量增多时,变更信息的更新操作就会节省下相应多个解压缩操作,产生显著的优化效果。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (18)
1.一种rpm包更新方法,包括:
基于事件监控获取rpm包的包变更信息;
根据所述包变更信息更新所述rpm包对应的数据库文件;
压缩更新后的所述数据库文件以获得所述rpm包对应的发布文件。
2.根据权利要求1所述的方法,其中,所述方法还包括:
将所述发布文件发布至对应的网络设备。
3.根据权利要求1或2所述的方法,其中,所述根据所述包变更信息更新所述rpm包对应的数据库文件包括:
检测所述rpm包对应的目录下是否存在所述rpm包对应的数据库文件;
当所述数据库文件存在,根据所述包变更信息更新所述数据库文件。
4.根据权利要求3所述的方法,其中,所述根据所述包变更信息更新所述rpm包对应的数据库文件还包括:
当所述数据库文件不存在,获取所述数据库文件;
根据所述包变更信息更新所述数据库文件。
5.根据权利要求4所述的方法,其中,获取所述数据库文件包括:
当所述rpm包对应的目录下存在所述rpm包对应的压缩文件时,解压缩所述压缩文件以获得所述数据库文件;或
当所述压缩文件不存在时,通过rpm包初始化获取所述数据库文件。
6.根据权利要求1至5中任一项所述的方法,其中,所述rpm包的包变更信息包括以下至少任一项:
所述rpm包对应的新增文件信息;
所述rpm包对应的删除文件信息;
所述rpm包对应的修改文件信息。
7.根据权利要求6所述的方法,其中,所述根据所述包变更信息更新所述rpm包对应的数据库文件包括以下至少任一项:
根据所述rpm包对应的新增文件信息抽取对应新增文件的元数据信息,并将所述元数据信息插入所述数据库文件;
根据所述rpm包对应的删除文件信息删除所述数据库文件中的对应记录;
根据所述rpm包对应的修改文件信息抽取对应变更文件的元数据信息,并根据所述元数据信息修改所述数据库文件。
8.根据权利要求1至7中任一项所述的方法,其中,所述压缩更新后的所述数据库文件以获得所述rpm包对应的发布文件包括:
多线程压缩更新后的所述数据库文件以获得所述rpm包对应的发布文件。
9.根据权利要求1至8中任一项所述的方法,其中,所述压缩更新后的所述数据库文件以获得所述rpm包对应的发布文件还包括:
在所述rpm包对应的目录下保存更新后的所述数据库文件。
10.一种rpm包更新设备,包括:
第一装置,用于基于事件监控获取rpm包的包变更信息;
第二装置,用于根据所述包变更信息更新所述rpm包对应的数据库文件;
第三装置,用于压缩更新后的所述数据库文件以获得所述rpm包对应的发布文件。
11.根据权利要求10所述的设备,其中,所述设备还包括:
第四装置,用于将所述发布文件发布至对应的网络设备。
12.根据权利要求10或11所述的设备,其中,所述第二装置用于:
检测所述rpm包对应的目录下是否存在所述rpm包对应的数据库文件;
当所述数据库文件存在,根据所述包变更信息更新所述数据库文件。
13.根据权利要求12所述的设备,其中,所述第二装置还用于:
当所述数据库文件不存在,获取所述数据库文件;
根据所述包变更信息更新所述数据库文件。
14.根据权利要求13所述的设备,其中,获取所述数据库文件包括:
当所述rpm包对应的目录下存在所述rpm包对应的压缩文件时,解压缩所述压缩文件以获得所述数据库文件;或
当所述压缩文件不存在时,通过rpm包初始化获取所述数据库文件。
15.根据权利要求10至14中任一项所述的设备,其中,所述rpm包的包变更信息包括以下至少任一项:
所述rpm包对应的新增文件信息;
所述rpm包对应的删除文件信息;
所述rpm包对应的修改文件信息。
16.根据权利要求15所述的方法,其中,所述第二装置用于以下至少任一项:
根据所述rpm包对应的新增文件信息抽取对应新增文件的元数据信息,并将所述元数据信息插入所述数据库文件;
根据所述rpm包对应的删除文件信息删除所述数据库文件中的对应记录;
根据所述rpm包对应的修改文件信息抽取对应变更文件的元数据信息,并根据所述元数据信息修改所述数据库文件。
17.根据权利要求10至16中任一项所述的设备,其中,所述第三装置用于:
多线程压缩更新后的所述数据库文件以获得所述rpm包对应的发布文件。
18.根据权利要求10至17中任一项所述的设备,其中,所述第三装置还用于:
在所述rpm包对应的目录下保存更新后的所述数据库文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410432169.4A CN105446759A (zh) | 2014-08-28 | 2014-08-28 | 一种rpm包更新方法与设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410432169.4A CN105446759A (zh) | 2014-08-28 | 2014-08-28 | 一种rpm包更新方法与设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105446759A true CN105446759A (zh) | 2016-03-30 |
Family
ID=55557004
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410432169.4A Pending CN105446759A (zh) | 2014-08-28 | 2014-08-28 | 一种rpm包更新方法与设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105446759A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106371865A (zh) * | 2016-08-26 | 2017-02-01 | 浪潮(北京)电子信息产业有限公司 | 一种软件环境部署方法和系统 |
CN110134409A (zh) * | 2019-04-12 | 2019-08-16 | 宁波麦度智联科技股份有限公司 | 一种程序的烧录优化方法 |
CN111880781A (zh) * | 2020-07-29 | 2020-11-03 | 北京浪潮数据技术有限公司 | 一种rpm安装包的生成方法、装置、设备及存储介质 |
WO2022148185A1 (zh) * | 2021-01-07 | 2022-07-14 | 苏州浪潮智能科技有限公司 | 一种数据包更新方法、装置、电子设备及可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101826103A (zh) * | 2010-04-06 | 2010-09-08 | 山东高效能服务器和存储研究院 | 一种unix操作系统中逆向查找包被依赖的方法 |
CN102831204A (zh) * | 2012-08-09 | 2012-12-19 | 珠海金山网络游戏科技有限公司 | 一种具备版本控制能力的文件打包格式 |
CN103401867A (zh) * | 2013-07-31 | 2013-11-20 | 珠海金山网络游戏科技有限公司 | 一种通过协议对打包文件进行更新的方法及系统 |
CN103530148A (zh) * | 2013-09-18 | 2014-01-22 | 国云科技股份有限公司 | 一种大型Linux软件包的发布方法 |
-
2014
- 2014-08-28 CN CN201410432169.4A patent/CN105446759A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101826103A (zh) * | 2010-04-06 | 2010-09-08 | 山东高效能服务器和存储研究院 | 一种unix操作系统中逆向查找包被依赖的方法 |
CN102831204A (zh) * | 2012-08-09 | 2012-12-19 | 珠海金山网络游戏科技有限公司 | 一种具备版本控制能力的文件打包格式 |
CN103401867A (zh) * | 2013-07-31 | 2013-11-20 | 珠海金山网络游戏科技有限公司 | 一种通过协议对打包文件进行更新的方法及系统 |
CN103530148A (zh) * | 2013-09-18 | 2014-01-22 | 国云科技股份有限公司 | 一种大型Linux软件包的发布方法 |
Non-Patent Citations (1)
Title |
---|
余川江: ""网格中基于MapReduce应用的可视化系统的设计与实现"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106371865A (zh) * | 2016-08-26 | 2017-02-01 | 浪潮(北京)电子信息产业有限公司 | 一种软件环境部署方法和系统 |
CN110134409A (zh) * | 2019-04-12 | 2019-08-16 | 宁波麦度智联科技股份有限公司 | 一种程序的烧录优化方法 |
CN111880781A (zh) * | 2020-07-29 | 2020-11-03 | 北京浪潮数据技术有限公司 | 一种rpm安装包的生成方法、装置、设备及存储介质 |
WO2022148185A1 (zh) * | 2021-01-07 | 2022-07-14 | 苏州浪潮智能科技有限公司 | 一种数据包更新方法、装置、电子设备及可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9817877B2 (en) | Optimizing data processing using dynamic schemas | |
US9716771B2 (en) | Cache control for web application resources | |
CN108446363B (zh) | 一种kv引擎的数据处理方法及装置 | |
KR102391839B1 (ko) | 사용자 페르소나를 처리하는 방법, 장치, 서버 및 저장 매체 | |
CN105446759A (zh) | 一种rpm包更新方法与设备 | |
CN108021590A (zh) | 一种目标对象属性确定方法、属性更新方法及装置 | |
CN111221564A (zh) | Web应用配置部署方法及装置 | |
CN106878365B (zh) | 一种数据同步方法和设备 | |
US8266589B2 (en) | Optimizing the handling of source code requests between a software configuration management (SCM) system and a software integrated development environment (IDE) using projected ancillary data | |
CN111107133A (zh) | 差异包的生成方法、数据更新方法、装置和存储介质 | |
US20160173590A1 (en) | Method for building up a content management system | |
CN110659296B (zh) | 存储方法、装置、设备以及计算机可读介质 | |
CN116483605A (zh) | 数据处理方法、装置、系统、存储介质及电子设备 | |
CN108228246B (zh) | 一种应用安装包的生成方法及装置 | |
CN110554867A (zh) | 一种应用程序的处理方法和装置 | |
WO2015154683A1 (zh) | 一种文件发布系统、文件发布方法和网络服务器 | |
CN112286974A (zh) | Apk压缩存储、还原和检索方法及相关设备 | |
CN110362595A (zh) | 一种sql语句动态解析方法 | |
CN110750563A (zh) | 多模型数据处理方法、系统、装置、电子设备及存储介质 | |
CN112866354B (zh) | 资源封装方法及装置、以及资产打包方法 | |
CN113822014B (zh) | 一种代码物料的存储方法、装置、电子设备及存储介质 | |
CN114398073B (zh) | 基于rn的应用更新方法及装置 | |
US11784661B2 (en) | Method for compressing behavior event in computer and computer device therefor | |
CN114943301A (zh) | 图片资源监控管理的方法和装置、电子设备和存储介质 | |
CN116611933A (zh) | 金融业务的处理方法及装置、存储介质和电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160330 |