System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及it与软件开发中操作系统领域,更具体地,涉及一种查询yum源中rpm包版本与路径的方法及系统。
技术介绍
1、yum源是linux系统中rpm软件安装包的来源,通常情况下一类linux发行版都对应有yum源,以持续性地提供linux发行版的服务能力。yum源通过web形式提供给使用者,yum源的提供者需先在本地服务器创建本地源,再将本地更新同步至yum源,因此yum源和本地源数据是一致的。yum源的使用,通过在linux发行版的/etc/yum.repos.d/目录下配置好可用的repo文件后,系统解析指定的yum源路径中的repodata文件(该文件记录了repodata所在目录下的所有rpm软件包的路径、版本和依赖等信息),使用者可以利用yum命令对rpm软件包进行在线查询、安装和卸载等管理。
2、目前在主流linux发行版对应的官方yum源中,根据软件包的类别通常有几个到十几个数目不等的软件目录,而在不同目录下根据架构放置了不同的repodata。这种方式的配置便于yum管理防止混淆,但是存在一个缺点,当需要查询正在使用的linux发行版是否支持某个rpm软件,以及软件所在的repodata路径和版本这两类最关键的信息时,则需要先知道软件所在的yum源路径才能查询,如果已配置的repo中不包含该软件包信息,直接查询则得不到该包信息。
3、因此,如何便捷、高效的获取软件所在的yum源路径是目前有待解决的技术问题。
技术实现思路
1、本专利技术提
2、一方面,本专利技术提出了一种查询yum源中rpm包版本与路径的方法,包括:
3、步骤1,确定yum源的根目录,并获取本地源中与yum源路径相同的目录,将查询结果写入文件a,并裁剪出yum源路径存入文件b;
4、步骤2,基于文件a获取所有包名的信息,并存入文件c作为查询时的关键信息;
5、步骤3,基于文件a获取所有包的完整版本信息,并存入文件d,版本信息由epoch、version-release组成;
6、步骤4,根据存储的信息,拼接和格式化成"包名-版本-路径"形式的json文件;
7、步骤5,定期检测并更新json文件,并同步至相应的服务目录;
8、步骤6,提供web界面给用户进行展示,用户只需输入包名并提交即可获取json文件数据。
9、优选的,所述步骤1中查询方式和存储流程为:
10、通过linux中的find命令查询出本地源中相同目录下所有的rpm包文件的完整路径并重定向存入文件a,并通过对比yum源实际根路径使用awk进行裁剪出和yum源相同对应的路径、并重定向存入文件b。
11、优选的,所述步骤2中获取每个包名信息的具体方法为:
12、使用cat文件a然后利用管道符“|”并使用xargs将参数分段传递给rpm–q命令,并且和queryformat参数约定查询包名,得到单独的不带版本号和架构等信息,并将查询到的所有信息重定向存入新的存储文件c。
13、优选的,所述步骤3中得到每个包完整版本信息的方法为:
14、通过cat文件a利用管道符和xargs命令传递文件a中信息给rpm查询命令并使用queryformat参数打印epoch:version-release格式的版本信息,对于epoch本身为空的版本信息使用sed命令截取掉,最后将版本信息重定向存入到存储文件d。
15、优选的,所述步骤4中拼接和得到最终json文件的方式为:
16、使用paste命令将文件c、d、和b进行按行组合为文件e,文件e中即是rpm包名、包版本信息和包所在yum源路径的key-values对应关系;并使用jq命令将文件e中的每组对应关系处理为json对象并重定向存入json文件f。
17、优选的,所述步骤5中定时更新json文件的方法为:
18、在本地源服务器的定时任务crontab中集成加入生成json文件f的流程工具,在执行生成json的流程前,通过计算文件a的md5值判断是否需要进行所述步骤1-所述步骤5的所有流程,当新的文件a的md5值若和旧md5值相同则说明yum源数据没有变化,不需要更新json文件;在更新生成新的json文件后,使用cp/scp命令将json文件定时更新到所述步骤2中的html文件同目录,即可完成json文件的更新并保持查询工具的数据时效性。
19、优选的,所述步骤6中展示给使用者的使用方式为:
20、通过html生成包含搜索输入栏和可点击搜索按键的简易静态搜索框,并通过onclick事件关联到javascript中的自定义函数g以实现交互,使发生点击“搜索”按钮的事件时,触发javascript传递初始页数和包名给后端nodejs,后端nodejs通过包名和当前页数查询json文件并仅返回当前页内容和总的计数给函数g,函数g传递json和总数给函数h,h根据总数和json分页显示当前页的数据到前端,并判断是否发生页数点击事件,若发生则调用函数g查询该页数据。
21、另一方面,本专利技术提出了查询yum源中rpm包版本与路径的系统,包括:
22、信息处理模块,所述信息处理模块用于确定yum源的根目录,并获取本地源中与yum源路径相同的目录,将查询结果写入文件a,并裁剪出yum源路径存入文件b;所述信息处理模块还用于,基于文件a获取所有包名的信息,并存入文件c作为查询时的关键信息;所述信息处理模块还用于基于文件a获取所有包的完整版本信息,并存入文件d,版本信息由epoch、version-release组成;根据存储的信息,拼接和格式化成"包名-版本-路径"形式的json文件;
23、自动检测模块,定期检测并更新json文件,并同步至相应的服务目录;
24、交互模块,提供web界面给用户进行展示,用户只需输入包名并提交即可获取json文件数据。
25、优选的,所述信息处理模块的查询方式和存储流程为:
26、通过linux中的find命令查询出本地源中相同目录下所有的rpm包文件的完整路径并重定向存入文件a,并通过对比yum源实际根路径使用awk进行裁剪出和yum源相同对应的路径、并重定向存入文件b;
27、所述信息处理模块的获取每个包名信息的具体方法为:
28、使用cat文件a然后利用管道符“|”并使用xargs将参数分段传递给rpm–q命令,并且和queryformat参数约定查询包名,得到单独的不带版本号和架构等信息,并将查询到的所有信息重定向存入新的存储文件c;
29、所述信息处理模块得到每个包完整版本信息的方法为:
30、通过cat文件a利用管道符和xargs命令本文档来自技高网...
【技术保护点】
1.一种查询yum源中rpm包版本与路径的方法,其特征在于,包括:
2.如权利要求1所述的查询yum源中rpm包版本与路径的方法,其特征在于,所述步骤1中查询方式和存储流程为:
3.如权利要求1所述的查询yum源中rpm包版本与路径的方法,其特征在于,所述步骤2中获取每个包名信息的具体方法为:
4.如权利要求1所述的查询yum源中rpm包版本与路径的方法,其特征在于,所述步骤3中得到每个包完整版本信息的方法为:
5.如权利要求1所述的查询yum源中rpm包版本与路径的方法,其特征在于,所述步骤4中拼接和得到最终json文件的方式为:
6.如权利要求1所述的查询yum源中rpm包版本与路径的方法,其特征在于,所述步骤5中定时更新json文件的方法为:
7.如权利要求1所述的查询yum源中rpm包版本与路径的方法,其特征在于,所述步骤6中展示给使用者的使用方式为:
8.一种查询yum源中rpm包版本与路径的系统,其特征在于,包括:
9.如权利要求8所述的查询yum源中rpm包版本与路径的系
10.如权利要求8所述的查询yum源中rpm包版本与路径的系统,其特征在于,
...【技术特征摘要】
1.一种查询yum源中rpm包版本与路径的方法,其特征在于,包括:
2.如权利要求1所述的查询yum源中rpm包版本与路径的方法,其特征在于,所述步骤1中查询方式和存储流程为:
3.如权利要求1所述的查询yum源中rpm包版本与路径的方法,其特征在于,所述步骤2中获取每个包名信息的具体方法为:
4.如权利要求1所述的查询yum源中rpm包版本与路径的方法,其特征在于,所述步骤3中得到每个包完整版本信息的方法为:
5.如权利要求1所述的查询yum源中rpm包版本与路径的方法,其特征在于,所述步骤4中拼接和得到最终jso...
【专利技术属性】
技术研发人员:邬祥钊,姜少涛,王麟,杨桃,吴开顺,
申请(专利权)人:天翼云科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。