OpenWrt之feeds.conf.default详解
文章目录
- OpenWrt之feeds.conf.default详解
- 文件内容
- 命令解释
- src-svn与src-gitsvn
- src-git与src-git-full
- src-cpy与src-link
- 其他的src命令
- feeds命令用法
- branch与commit的分割符号
- branch与tag的区别
OpenWrt之feeds.conf.default详解
文件内容
src-git-full packages https://git.openwrt.org/feed/packages.git
src-git-full luci https://git.openwrt.org/project/luci.git
src-git-full routing https://git.openwrt.org/feed/routing.git
src-git-full telephony https://git.openwrt.org/feed/telephony.git
#src-git-full video https://github.com/openwrt/video.git
#src-git-full targets https://github.com/openwrt/targets.git
#src-git-full oldpackages http://git.openwrt.org/packages.git
#src-link custom /usr/src/openwrt/custom-feed
OpenWrt的feeds.conf.default, 是添加一些应用和包的文件, 看过之后下面解析命令用法
命令解释
先说
#
, 这个是注释
用, 不会有人不知道吧这个文件主要是由
scripts/feeds
这个perl脚本控制着, 贴一个命令的定义my %update_method = ('src-svn' => {'init' => "svn checkout '%s' '%s'",'update' => "svn update",'controldir' => ".svn",'revision' => "svn info | grep 'Revision' | cut -d ' ' -f 2 | tr -d '\n'"},'src-cpy' => {'init' => "cp -Rf '%s' '%s'",'update' => "",'revision' => "echo -n 'local'"},'src-link' => {'init' => "ln -s '%s' '%s'",'update' => "",'revision' => "echo -n 'local'"},'src-dummy' => {'init' => "true '%s' && mkdir '%s'",'update' => "",'revision' => "echo -n 'dummy'"},'src-git' => {'init' => "git clone --depth 1 '%s' '%s'",'init_branch' => "git clone --depth 1 --branch '%s' '%s' '%s'",'init_commit' => "git clone '%s' '%s' && cd '%s' && git checkout -b '%s' '%s' && cd -",'update' => "git pull --ff-only",'update_force' => "git pull --ff-only || (git reset --hard HEAD; git pull --ff-only; exit 1)",'post_update' => "git submodule update --init --recursive",'controldir' => ".git",'revision' => "git rev-parse --short HEAD | tr -d '\n'"},'src-git-full' => {'init' => "git clone '%s' '%s'",'init_branch' => "git clone --branch '%s' '%s' '%s'",'init_commit' => "git clone '%s' '%s' && cd '%s' && git checkout -b '%s' '%s' && cd -",'update' => "git pull --ff-only",'update_force' => "git pull --ff-only || (git reset --hard HEAD; git pull --ff-only; exit 1)",'post_update' => "git submodule update --init --recursive",'controldir' => ".git",'revision' => "git rev-parse --short HEAD | tr -d '\n'"},'src-gitsvn' => {'init' => "git svn clone -r HEAD '%s' '%s'",'update' => "git svn rebase",'controldir' => ".git",'revision' => "git rev-parse --short HEAD | tr -d '\n'"},'src-bzr' => {'init' => "bzr checkout --lightweight '%s' '%s'",'update' => "bzr update",'controldir' => ".bzr"},'src-hg' => {'init' => "hg clone '%s' '%s'",'update' => "hg pull --update",'controldir' => ".hg"},'src-darcs' => {'init' => "darcs get '%s' '%s'",'update' => "darcs pull -a",'controldir' => "_darcs"}, );# src-git: pull broken # src-cpy: broken if `basename $src` != $name
src-svn与src-gitsvn
'src-svn' => {'init' => "svn checkout '%s' '%s'",'update' => "svn update",'controldir' => ".svn",'revision' => "svn info | grep 'Revision' | cut -d ' ' -f 2 | tr -d '\n'"},
'src-gitsvn' => {'init' => "git svn clone -r HEAD '%s' '%s'",'update' => "git svn rebase",'controldir' => ".git",'revision' => "git rev-parse --short HEAD | tr -d '\n'"},
- 用法:
src-svn NueXini_Packages https://github.com/NueXini/NueXini_Packages/trunk/
# 拉取默认分支
src-svn NueXini_Packages https://github.com/NueXini/NueXini_Packages/branches/v20220620
# 拉取指定分支
src-svn NueXini_Packages https://github.com/NueXini/NueXini_Packages/trunk/luci-app-disableipv6/
# 拉取指定文件夹
src-gitsvn
我愿称之为git与svn的结合体
这个主要命令是
git svn clone -r HEAD
, 参考https://git-scm.com/docs/git-svn用法:
src-gitsvn NueXini_Packages https://github.com/NueXini/NueXini_Packages.git
src-git与src-git-full
'src-git' => {'init' => "git clone --depth 1 '%s' '%s'",'init_branch' => "git clone --depth 1 --branch '%s' '%s' '%s'",'init_commit' => "git clone '%s' '%s' && cd '%s' && git checkout -b '%s' '%s' && cd -",'update' => "git pull --ff-only",'update_force' => "git pull --ff-only || (git reset --hard HEAD; git pull --ff-only; exit 1)",'post_update' => "git submodule update --init --recursive",'controldir' => ".git",'revision' => "git rev-parse --short HEAD | tr -d '\n'"},'src-git-full' => {'init' => "git clone '%s' '%s'",'init_branch' => "git clone --branch '%s' '%s' '%s'",'init_commit' => "git clone '%s' '%s' && cd '%s' && git checkout -b '%s' '%s' && cd -",'update' => "git pull --ff-only",'update_force' => "git pull --ff-only || (git reset --hard HEAD; git pull --ff-only; exit 1)",'post_update' => "git submodule update --init --recursive",'controldir' => ".git",'revision' => "git rev-parse --short HEAD | tr -d '\n'"},
- 这两者共同操作是
git clone
区别是clone的深度不一样,src-git-full
是全clone, 而src-git
的深度为--depth 1
- 用法:
src-git-full / src-git-full 保存的文件夹名 仓库地址
- 注: 后面可指定 分支, tag, commit , 不填则是拉取默认分支
src-git NueXini_Packages https://github.com/NueXini/NueXini_Packages.git;main
# 指定branch
src-git NueXini_Packages https://github.com/NueXini/NueXini_Packages.git;v20220620
# 指定tag
src-git NueXini_Packages https://github.com/NueXini/NueXini_Packages.git^47e35dd380b88d5cffc267eabe7a125da86d194b
# 指定commit
src-cpy与src-link
'src-cpy' => {'init' => "cp -Rf '%s' '%s'",'update' => "",'revision' => "echo -n 'local'"},
'src-link' => {'init' => "ln -s '%s' '%s'",'update' => "",'revision' => "echo -n 'local'"},
这两个命令的唯一区别是src-cpy
会复制一份源到feeds目录
, src-link
则是ln -s
创建一个软链接, 我个人是比较倾向src-link
的, 这样可以修改源码能及时响应.
- 用法:
src-cpy / src-link 保存的文件名 源目录
src-link
必须是完整的绝对路径
src-link NueXini_Packages package/NueXini_Packages
# 拉取package目录下的NueXini_Packages目录
其他的src命令
- 像
bzr
,hg
,darcs
一些其他的分布式版本控制系统
, 基本很少用到, 可以自行参考命令解释了解使用方法
feeds命令用法
sub usage() {print <<EOF;
Usage: $0 <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 packageOptions:-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 packageOptions:-r <feedname>: Only search in this feeduninstall -a|<package>: Uninstall a packageOptions:-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.
EOFexit(1);
}my %commands = ('list' => \&list,'update' => \&update,'install' => \&install,'search' => \&search,'uninstall' => \&uninstall,'feed_config' => \&feed_config,'clean' => sub {system("rm -rf ./feeds ./package/feeds ./target/linux/feeds");}
);
branch与commit的分割符号
sub update_feed_via($$$$$) {my $type = shift;my $name = shift;my $src = shift;my $relocate = shift;my $force = shift;my $m = $update_method{$type};my $localpath = "./feeds/$name";my $safepath = $localpath;$safepath =~ s/'/'\\''/;my ($base_branch, $branch) = split(/;/, $src, 2);my ($base_commit, $commit) = split(/\^/, $src, 2);if( $relocate || !$m->{'update'} || !-d "$localpath/$m->{'controldir'}" ) {system("rm -rf '$safepath'");if ($m->{'init_branch'} and $branch) {system(sprintf($m->{'init_branch'}, $branch, $base_branch, $safepath)) == 0 or return 1;} elsif ($m->{'init_commit'} and $commit) {system(sprintf($m->{'init_commit'}, $base_commit, $safepath, $safepath, $commit, $commit)) == 0 or return 1;} else {system(sprintf($m->{'init'}, $src, $safepath)) == 0 or return 1;}} elsif ($m->{'init_commit'} and $commit) {# in case git hash has been provided don't update the feed} else {my $update_cmd = $m->{'update'};if ($force && exists $m->{'update_force'}) {$update_cmd = $m->{'update_force'};}system("cd '$safepath'; $update_cmd") == 0 or return 1;}if ($m->{'post_update'}) {my $cmd = $m->{'post_update'};system("cd '$safepath'; $cmd") == 0 or return 1;}return 0;
}
- 透过以上代码, 主要能看见
branch
与commit
的分割是不一样的 branch
用的分割符号是;
commit
用的分割符号是^
my ($base_branch, $branch) = split(/;/, $src, 2);
my ($base_commit, $commit) = split(/\^/, $src, 2);
branch与tag的区别
tag就是给commit的hash校验和取的一个名字,比较直观,方便记忆和使用
tag就像是一个里程碑一个标志一个点,branch是一个新的征程一条线;tag是静态的,branch要向前走;
tag 对应某次 commit, 是一个点,是不可移动的。
branch 对应一系列 commit,是很多点连成的一根线,有一个HEAD 指针,是可以依靠 HEAD 指针移动的。所以,两者的区别决定了使用方式,改动代码用 branch ,不改动只查看用 tag。
参考https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE
Enjoy it ~
OpenWrt之feeds.conf.default详解相关推荐
- openwrt 修改feeds.conf.default为GitHub源
lede和openwrt合并之后 lede官网挂了.. git.openwrt.org,也访问不了.. 只要去github上找最新源码: git clone https://github.com/op ...
- Redis配置文件redis.conf文件详解
Redis配置文件redis.conf文件详解 唠嗑 这里面的意思只要看得差不多其实就是已经对redis有熟悉的感觉,就比如 推塔已经推到别人家的大门~~~~~~~~废话不多说直接开始了 知道大家都不 ...
- ntp 服务端配置(/etc/ntp.conf配置详解) -小白实操记录
1 ntp 安装查看 1.1 安装命令 apt-get install ntp 1.2 查看服务是否启动 service --status-all 或者 ps -aux | grep ntp 1.3 ...
- Nginx配置文件nginx.conf中文详解(转)
######Nginx配置文件nginx.conf中文详解######定义Nginx运行的用户和用户组 user www www;#nginx进程数,建议设置为等于CPU总核心数. worker_pr ...
- nginx.conf配置详解
######Nginx配置文件nginx.conf中文详解######定义Nginx运行的用户和用户组 user www www;#nginx进程数,建议设置为等于CPU总核心数. worker_pr ...
- vsftpd的主配置文件是什么linux,vsftpd.conf配置文件详解
vsftpd.conf配置文件详解 # 是否允许匿名用户登录.默认值为YES. anonymous=YES|NO # 是否允许匿名用户上传文件(如果设置为YES,则write_enable也必须设置为 ...
- nginx.conf 配置文件详解
本文来说下nginx.conf 配置文件详解 文章目录 Nginx 配置文件概述 nginx.conf 配置文件 通用(这里是 windows 系统系 nginx1.14.2 下 nginx.conf ...
- vsftp.conf 配置文件详解
/etc/vsftpd/vsftpd.conf文件详解,分好类,方便大家查找与学习 #################匿名权限控制############### anonymous_enable=YE ...
- php-fpm.conf 配置文件详解
php-fpm.conf 配置文件详解 [global] pid = run/php-fpm.pid error_log = log/php-fpm.log log_level = notice # ...
最新文章
- python 语音websocket_Python 牺牲性能以提升程序员的工作效率
- 根据excel中的容填写信息
- PK3Err0040: The target device is not ready for debugging. Please check your configuration bit settin
- 后端:SpringBoot 的@Value注解,高级特性,非常实用!!
- WPF利用HelixToolKit后台导入3D模型
- 自制小型USB TO TTL串口工具
- C语言编写FFT程序
- echarts 基于个性化百度地图的迁徙图
- stm32之HAL库实现us延时方法
- C. Game Master(强连通分量,缩点,建图
- mysql hugepage_mysql启用hugepage-阿里云开发者社区
- “The Gentle Lentil Restaurant“ Case Solution Report 模型与决策-温柔小扁豆餐厅例题
- Java设计模式之模板方法模式(UML类图分析+代码详解)
- 超级好用的芯片封装网站IC Search
- linux shell 输出红色,Bash Shell怎么打印各种颜色
- 手把手教你如何设置H5页面动画效果
- 粗糙集matlab,粗糙集理论权重确定方法用matlab实现
- C语言中exit的简单用法
- 【报错】could not acquire management access for administration MySQL不能登录
- web前端开发入门之HTML完整版