首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何清理gentoo系统上的.keywords文件?

如何清理gentoo系统上的.keywords文件?
EN

Unix & Linux用户
提问于 2014-07-11 21:37:54
回答 7查看 2.8K关注 0票数 10

可以通过在关键字列表中添加一行具有以下语法的行来选择gentoo stable系统上的测试包:

cat /etc/portage/package.keywords

代码语言:javascript
复制
=dev-python/ipython-0.13.2 ~amd64
# and many lines later
=dev-python/ipython-0.14.1 ~amd64
# and many lines later
>=dev-python/ipython-0.13.4 ~amd64

这个文件会在一段时间内增长,迟早会记不起哪一行已经过时。

我如何不时地用脚本来整理列表?

应该删除一行,

  • 如果测试版本已经稳定下来
  • =用于同一包
  • =用于同一个版本号较小的包。
EN

回答 7

Unix & Linux用户

回答已采纳

发布于 2016-06-19 09:44:08

现在有一个正式的包用于这项任务,称为app-portage/portpeek

它可以

  • 查找过时的使用标志和
  • 过时关键字和
  • 如果添加了-f (fix)作为参数,则清除文件。
票数 6
EN

Unix & Linux用户

发布于 2014-07-22 18:47:58

我编写了一个处理这个问题的小python脚本。逻辑查看文件package.accept_keywords中的每一行,并且只对以=<=开头的行起作用。这些行有一个最大的绑定版本,因此我们可以检查它们是否还需要。没有限定符或>=的行保留为-is,因为我们无法知道它们是否过时。

然后对我们关心的行进行解析,并检查已安装的包版本。如果已安装的版本比关键字版本更新,或者根本不安装,则该关键字被视为过时。如果已安装的包与关键字版本相同,则将检查已安装的包是否仍然是关键字。如果已经稳定下来,这条线就会过时,否则就会被保留。

代码语言:javascript
复制
#!/bin/env python

import re
import portage

vartree = portage.db[portage.root]['vartree']

with open('/etc/portage/package.accept_keywords') as f:
    for x in f:
        # eat newline
        x = x.rstrip()
        # we only want lines with a bounded max version
        if re.match('^(=|<=)',x):
            # get the package cpv atom -- strip the =|<= and the trailing keyword(s)
            cpv_masked = re.sub('[<=]','',x.split(' ',1)[0])
            cat, pkg, ver, rev = portage.catpkgsplit(cpv_masked)
            # get cpv for all installed versions of the package
            cpv_installed = vartree.dep_match(cat+'/'+pkg)
            for cpv in cpv_installed:
                cmp = portage.pkgcmp(portage.pkgsplit(cpv), portage.pkgsplit(cpv_masked))
                # if the installed version is not newer than the masked version
                if (cmp <= 0):
                    # check if this version is still keyworded
                    cpv_keywords = vartree.dbapi.aux_get(cpv, ['KEYWORDS'])
                    # keep keyword if the package has no keywords (**)
                    if not cpv_keywords[0]:
                        print(x)
                        break
                    # check if the installed package is still keyworded
                    for cpv_keyword in cpv_keywords[0].split(' '):
                        if cpv_masked_keyword == cpv_keyword:
                            # it is, keep the atom and move on to the next one
                            print(x)
                            break                    
        else:
            # keep atoms that have an unbounded max version
            print(x)

这将打印新的关键字文件的标准输出。注意:不要将输出重定向回/etc/portage/package.accept_keywords,否则会破坏文件并丢失所有内容。

这将大大有助于清理关键字文件和其他关注事项,对文件进行排序,然后检查同一包的多行,将有助于解决大部分剩馀内容。

票数 3
EN

Unix & Linux用户

发布于 2015-02-23 08:52:10

你知道你可以转换包。*目录中的文件,对吗?

然后你可以把你的原子组织在几个文件中,例如,在我的系统中,我得到了以下内容(嗯,不完全,我现在不在我的笔记本电脑上。)但你有这样的想法):

代码语言:javascript
复制
/etc/portage/package.keywords:
  package.keywords
  qt5.keywords
  xfce.keywords

/etc/portage/package.use:
  package.use
  qt5.use
  xfce.use

等。

我发现这真的很有用,可以帮助我更新文件。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/144084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档