OpenWrt Feeds

在OpenWrt中,“feed”是一组共享相同位置的packages的集合。Feed可以位于远程服务器、版本控制系统、本地文件系统或任何其他通过支持的feed方法使用单个名称(路径/URL)寻址的位置。

Feed是OpenWrt Buildroot的额外预定义软件包构建配方。可以通过feed配置文件来配置它们,以支持自定义feed或非默认的feed软件包。

可用的feed列表是从存在的“feeds.conf”文件或者“feeds.conf.default”文件中进行配置。该文件包含一个feed列表,每个feed单独列在一行上。每个feed行由3个以空格分隔的组件组成:feed方法、feed名称和feed源。在解析过程中,空行、过多的空格/换行符和注释将被忽略。注释以“#“开头,延伸到行尾。

截至2018年12月15日的”master”分支上,“feeds.conf.default”中的默认配置如下所示。请注意,以“#“开头的行是注释行,为了方便配置而包含在内。

feeds.conf.default
src-git packages https://git.openwrt.org/feed/packages.git
src-git luci https://git.openwrt.org/project/luci.git
src-git routing https://git.openwrt.org/feed/routing.git
src-git telephony https://git.openwrt.org/feed/telephony.git
#src-git video https://github.com/openwrt/video.git
#src-git targets https://github.com/openwrt/targets.git
#src-git management https://github.com/openwrt-management/packages.git
#src-git oldpackages http://git.openwrt.org/packages.git
#src-link custom /usr/src/openwrt/custom-feed

git方法可以使用以下格式指定特定的分支或提交:

src-git local_feed_name https://example.com/repo_name/something.git;branch_name
src-git local_feed_name https://example.com/repo_name/something.git^commit_hash

截至目前,支持以下feed方法:

Method Function
src-bzr 数据使用”bzr”从源路径/URL下载。
src-cpy 数据从源路径复制。路径可以相对于OpenWrt存储库根目录或绝对路径来指定。
src-darcs 数据使用“darcs”从源路径/URL下载。
src-git 数据使用“git”作为浅层(深度为1)克隆从源路径/URL下载。
src-git-full 数据使用“git”作为完整克隆从源路径/URL下载。
src-gitsvn Subversion(SVN)仓库和Git之间的双向操作可以通过使用git-svn工具实现。
src-hg 数据使用“hg”从源路径/URL下载。
src-link 会创建一个指向源路径的符号链接。路径必须是绝对路径。
src-svn 数据使用“svn”从源路径/URL下载。

Feed名称用于标识feed,并作为创建用于保存有关feed信息的多个文件和目录名称的基础。Feed源是下载feed数据的位置。

对于上述依赖于支持“有限历史记录”选项的版本控制系统(例如git的“--depth=1”和bzr的“--lightweight”),将下载最小可用的历史记录。这是一个很好的默认设置,但是那些正在积极提交feed和/或使用提交历史记录的开发人员可能希望更改此行为。可以通过编辑“scripts/feeds”来使用“src-git-full”,或者在不使用“scripts/feeds”的情况下检出feed来完成此操作。可以通过使用“git fetch --unshallow”将浅层git克隆更新为“完整”克隆。

截至2018年12月,feeds是由位于“openwrt/openwrt.git”存储库中的“scripts/feeds”脚本检索和管理的。“feeds”脚本将来自各种feed源的软件包整合到OpenWrt构建系统中。这是一个两步骤的过程,在构建镜像之前,开发人员通过更新feed,然后安装来自该feed的特定软件包。

在“update”步骤中,feeds从feed配置中列出的源获取,并复制到“feeds”目录中。成功更新后,每个feed中的每个软件包配方都在“feeds/<feed_name>/<package_name>/“文件夹中表示,但它们目前尚未包含在OpenWrt构建系统中,因为它们不在”package/“目录中。

在”install”步骤中,从“update”过程中获取的feeds中的软件包被链接到“package/feeds/<feed_name>“文件夹中,其中”<feed_name>“被替换为feed配置中的feed名称。完成此步骤后,可以通过在”package/“文件夹中使用软件包的路径来执行特定于软件包的make操作。例如:

make package/feeds/<feed_name>/<package_name>

$ ./scripts/feeds 
Usage: ./scripts/feeds <command> [options]

Commands:
	list [options]: List feeds, their content and revisions (if installed)
	Options:
	    -n :            List of feed names.
	    -s :            List of feed names and their URL.
	    -r <feedname>:  List packages of specified feed.
	    -d <delimiter>: Use specified delimiter to distinguish rows (default: spaces)
	    -f :            List feeds in feeds.conf compatible format (when using -s).

	install [options] <package>: Install a package
	Options:
	    -a :           Install all packages from all feeds or from the specified feed using the -p option.
	    -p <feedname>: Prefer this feed when installing packages.
	    -d <y|m|n>:    Set default for newly installed packages.
	    -f :           Install will be forced even if the package exists in core OpenWrt (override)

	search [options] <substring>: Search for a package
	Options:
	    -r <feedname>: Only search in this feed

	uninstall -a|<package>: Uninstall a package
	Options:
	    -a :           Uninstalls all packages.

	update -a|<feedname(s)>: Update packages and lists of feeds in feeds.conf .
	Options:
	    -a :           Update all feeds listed within feeds.conf. Otherwise the specified feeds will be updated.
	    -i :           Recreate the index only. No feed update from repository is performed.
	    -f :           Force updating feeds even if there are changed, uncommitted files.

	clean:             Remove downloaded/generated files.

可以通过”scripts/feeds”脚本来使用Feeds。调用“scripts/feeds”而不带任何参数会生成可用命令的列表。大多数命令需要本地可用的feed信息,因此通常需要先运行update命令。在下面的讨论中,术语“适用的软件包”通常指的是命令行上给出的软件包名称,或者在使用-a选项时指的是feed中的所有软件包。

Clean

clean命令会删除本地存储的feed数据,包括feed索引和feed中所有软件包的数据(但不会删除install命令创建的符号链接,这些链接将在update命令重新下载feed之前处于悬空状态)。这是通过删除“feeds”目录及其所有子目录来完成的。

安装

install命令安装适用的软件包以及适用软件包所依赖的任何软件包(包括直接依赖和构建依赖)。安装过程包括将“package/feeds/$feed_name/$package_name”创建为到“feeds/$feed_name/$package_name”的符号链接,以便在搜索“packages”目录层次结构时将软件包包含在配置过程中。

命令 描述
./scripts/feeds install -a 安装所有软件包(非必需;可以根据需要为构建速度较慢的机器逐个安装软件包)
./scripts/feeds install luci 仅安装LuCI软件包
./scripts/feeds install -a -p luci 通过从首选feed(-p)luci安装所有(-a)软件包来安装完整的LuCI WebUI

有关默认可用的feeds列表,请参阅上面的部分。

请注意,这取代了创建符号链接的旧方法,这个旧方法仍然可以在许多旧的论坛和用户组条目中找到。

列表

list命令从适用的feeds的索引文件中读取并显示每个feed中的软件包列表。索引文件存储在“feeds”目录中,文件名以feed的名称为后缀,后跟“.index”。该文件由update命令生成。

搜索

search命令通过读取feed元数据并列出与给定搜索条件匹配的软件包。

卸载

uninstall命令与install命令相反(尽管它不以任何方式处理依赖软件包)。它只是从“package/feeds”的子目录中删除对软件包的任何符号链接。

更新

当调用“scripts/feeds update”时,会将每个适用的feed从其源位置下载到“feeds”目录的子目录中,子目录的名称与feed名称相对应。然后,它会将feed中的软件包信息解析到由list和search命令使用的索引文件中。

命令 描述
./scripts/feeds update packages luci 检出packages和luci feeds。

请注意,update还会将feed的配置位置存储在“feeds/$feed_name.tmp/location”中,以便可以检测和适当处理配置的更改。

在检索后,下载的软件包需要进行“安装”。只有在安装后,它们才会在配置界面中可用!

好的,您已经开发了自己的软件包,现在您想通过make menuconfig来使用它,或者您正在开发一个软件包,并希望在尝试将其包含在OpenWrt之前在构建中进行测试。

解决方案是创建一个自定义feed。您可以创建一个全新的feed,或者使用一个标准feed的修改版本。

在本示例中,我们假设您的基本目录是“/home/user/openwrt”。

将您的软件包添加到现有的feed中

FIXME

将您的软件包添加到自己的feed中

在本示例中,我们假设您将您的feed命名为“custom”,您的项目名为“helloworld”,其OpenWrt的Makefile位于“/usr/src/openwrt/custom-feed/helloworld/Makefile”。

  1. 编辑 /home/user/openwrt/feeds.conf.default
  2. Add a new line for your feed.
    src-link custom /usr/src/openwrt/custom-feed/
  1. Update the feed: from the <buildroot dir> (e.g. /home/user/openwrt) do:
    ./scripts/feeds update custom
  2. And then install it
    ./scripts/feeds install -a -p custom
  1. 现在,当您执行
    make menuconfig

    时,您的软件包应该可用。

下载的源代码(在软件包的Makefile中引用)不在那里... 下载的文件首先以.gz文件的形式存储在<buildroot>/dl目录中。然后它们被解压到/build_dir目录中。例如,可以在<buildroot>/build_dir/target-*/目录下找到每个软件包源代码的子目录。

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2023/11/30 08:40
  • by superice