Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== OpenWrt Feeds ====== 在OpenWrt中,"feed"是一组共享相同位置的[[docs:guide-developer:packages]]的集合。Feed可以位于远程服务器、版本控制系统、本地文件系统或任何其他通过支持的feed方法使用单个名称(路径/URL)寻址的位置。 Feed是OpenWrt Buildroot的额外预定义软件包构建配方。可以通过feed配置文件来配置它们,以支持自定义feed或非默认的feed软件包。 ===== Feed Configuration ===== 可用的feed列表是从存在的"feeds.conf"文件或者"feeds.conf.default"文件中进行配置。该文件包含一个feed列表,每个feed单独列在一行上。每个feed行由3个以空格分隔的组件组成:feed方法、feed名称和feed源。在解析过程中,空行、过多的空格/换行符和注释将被忽略。注释以"#"开头,延伸到行尾。 截至2018年12月15日的"master"分支上,"feeds.conf.default"中的默认配置如下所示。请注意,以"#"开头的行是注释行,为了方便配置而包含在内。 <file xml 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 </file> git方法可以使用以下格式指定特定的分支或提交: <file> 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 </file> 截至目前,支持以下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克隆更新为"完整"克隆。 ===== 使用Feeds ===== 截至2018年12月,feeds是由位于"openwrt/openwrt.git"存储库中的"scripts/feeds"脚本检索和管理的。"feeds"脚本将来自各种feed源的软件包整合到OpenWrt构建系统中。这是一个两步骤的过程,在构建镜像之前,开发人员通过更新feed,然后安装来自该feed的特定软件包。 在"update"步骤中,feeds从[[docs:guide-developer:feeds#feed_configuration|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>'' <file> $ ./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. </file> ==== Feed命令 ==== 可以通过"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列表,请参阅上面的部分。 | {{:meta:icons:tango:48px-outdated.svg.png?nolink}} |请注意,这取代了创建符号链接的旧方法,这个旧方法仍然可以在许多旧的论坛和用户组条目中找到。| === 列表 === 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"中,以便可以检测和适当处理配置的更改。 在检索后,下载的软件包需要进行//"安装"//。只有在安装后,它们才会在配置界面中可用! ===== 自定义Feeds ===== 好的,您已经开发了自己的软件包,现在您想通过make menuconfig来使用它,或者您正在开发一个软件包,并希望在尝试将其包含在OpenWrt之前在构建中进行测试。 解决方案是创建一个自定义feed。您可以创建一个全新的feed,或者使用一个标准feed的修改版本。 ==== 创建软件包目录 ==== 在本示例中,我们假设您的基本目录是"/home/user/openwrt"。 === 将您的软件包添加到现有的feed中 === FIXME === 将您的软件包添加到自己的feed中 === 在本示例中,我们假设您将您的feed命名为"custom",您的项目名为"helloworld",其OpenWrt的Makefile位于"/usr/src/openwrt/custom-feed/helloworld/Makefile"。 - 编辑 ''/home/user/openwrt/feeds.conf.default'' - Add a new line for your feed. <code>src-link custom /usr/src/openwrt/custom-feed/</code> - Update the feed: from the ''<buildroot dir>'' (e.g. ''/home/user/openwrt'') do: <code>./scripts/feeds update custom</code> - And then install it <code>./scripts/feeds install -a -p custom</code> ==== 使用feed ==== - 现在,当您执行<code>make menuconfig</code>时,您的软件包应该可用。 ===== 解释 ===== 下载的源代码(在软件包的Makefile中引用)不在那里... 下载的文件首先以.gz文件的形式存储在<buildroot>/dl目录中。然后它们被解压到/build_dir目录中。例如,可以在<buildroot>/build_dir/target-*/目录下找到每个软件包源代码的子目录。 ==== 文档 ==== - [[docs:guide-developer:toolchain:start|OpenWrt Buildroot – 关于]] - [[docs:guide-developer:toolchain:install-buildsystem|OpenWrt Buildroot – 安装]] - [[docs:guide-developer:toolchain:use-buildsystem|OpenWrt Buildroot – 使用]] - OpenWrt Buildroot – Feeds - [[docs:techref:buildroot|OpenWrt Buildroot – 技术参考]] {{:meta:icons:tango:48px-construction.svg.png?nolink&16}} 这篇文章需要//您的//关注。 ===== 链接 ===== Last modified: 2023/11/30 08:40by superice