diff --git a/README.md b/README.md index 070f53f..a3875ac 100644 --- a/README.md +++ b/README.md @@ -1,147 +1,147 @@ -# ss-get - -## 介绍 -ss-get规划 - -## 软件架构 - -### 服务端: - -app.amber - -内容: - -``` -pkgname=包名 -version=版本 -depends=ss-get(>=version),其他deb包依赖(这里建议对ss-get额外增加一个依赖,确保是某版本及以上的ss-get以确保有功能) -architecture=架构 ->>>>boom>>>> -description=将会在ss-get search显示的描述 -maintainer= 名字<联系方式>,将会在echo段之后显示 -hints_when_install=会在安装时显示的文本 -get-method= git/download/script -source=目标地址。若方法为git,则会执行git clone到/tmp/ss-get-build,然后执行dpkg -b /tmp/ss-get-build/pkgname ,所以应当把git url设置成包名;若方法为download,则会wget下载指定链接到/tmp/ss-get-build;若方法为script,则会wget到/tmp/ss-get-build/script,然后执行。 -``` -特别地,对于script包,预制参数1为一个目录,是把deb包保存的目录。在非--download条件下,这个参数将会是/tmp/ss-get-build。script包将会被严格审核后才能入库 - -applist.amber -第一行固定 i-love-amber-forever - -往下是用脚本集合以上的所有,每一个应用用`###baron-bunny###`隔开(用于查询) - - -### 客户端 -#### 会在所有操作执行之前执行一次更新applist.amber - -#### ss-get --search pkgname 使用grep寻找package:$1,如果有,则sed寻找所在行,切掉前一行,然后打印第一行pkgname=后的内容+第二行version=后的内容,然后切掉后面第一个`>>>>boom>>>>`之前的内容,打印第一行description=后的内容,接着打印--------------来分隔,然后切掉后面第一个`###baron-bunny###`之前的内容,继续循环,直到sed无输出. - -计划采用 ss-get-info --search - -#### ss-get --install pkgname=version pkgname2.... - -首先判断是否有root权限,如果没有,则退出 - -##### 查询阶段 - -计划使用 模块:ss-get-info - -使用grep寻找pkgname=$1,如果有,则sed寻找所在行,切掉前一行。 - -* 如果指定了版本,则读取版本进行对比,如果不等于,然后切掉后面第一个`###baron-bunny###`之前的内容,继续循环,直到sed无输出。如果找到了,则执行安装步骤;如果没找到,则报错退出 -* 如果没有指定版本,使用grep寻找pkgname=$1,如果有,则sed寻找所在行,切掉前一行。存入第二行version=后的内容,然后切掉后面第一个`###baron-bunny###`之前的内容,继续循环。如果sed找到另一个pkgname=$1,则执行`dpkg --compare-versions` (参考 [这里](http://l.github.io/debian-handbook/html/zh-CN/sect.manipulating-packages-with-dpkg.html#:~:text=%E5%9B%A0%E4%B8%BA%20dpkg%20%E6%98%AF%E5%A4%84%E7%90%86%20Debian%20%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%9A%84%E7%A8%8B%E5%BA%8F%EF%BC%8C%E5%AE%83%E4%B9%9F%E8%83%BD%E5%A4%9F%E9%80%BB%E8%BE%91%E5%9C%B0%E6%AF%94%E8%BE%83%E7%89%88%E6%9C%AC%E7%BC%96%E5%8F%B7%E3%80%82,%E6%89%80%E4%BB%A5%E6%9C%89%20--compare-versions%20%E9%80%89%E9%A1%B9%EF%BC%8C%E4%BB%A5%E5%A4%96%E9%83%A8%E7%A8%8B%E5%BA%8F%E4%BD%BF%E7%94%A8%E5%AE%83%20%28%E5%B0%A4%E5%85%B6%E6%98%AF%E8%A2%AB%20dpkg%20%E6%9C%AC%E8%BA%AB%E8%BF%90%E8%A1%8C%E7%9A%84%E9%85%8D%E7%BD%AE%E8%84%9A%E6%9C%AC%29%E3%80%82) )。如果后者更大,则替换变量,否则保持,直到sed无输出为止。 - -以上阶段结束后,将会得到 pkgname+version值 - -存入数组 pkgname_list和version_list,循环,直到所有的参数都被解析结束 - -##### 安装阶段 - -##### 进入循环,直到pkgname_list数组没有成员 - -把目前的第一位赋值给pkgname和version - -sed寻找pkgname=$1所在行,切掉前一行,然后比对第二行version=后的内容与version变量。如果不一致,切掉后面第一个`###baron-bunny###`之前的内容,继续循环,直到找到。 - -version=与变量一致后,读取第三行depends,第四行架构,利用此信息在`/tmp/ss-get-build/pkgname`构建一个空包,利用apt-get dryrun测试。如果报错,则提示`pkgname`有依赖问题,无法安装,exit 1;如果不报错,则执行 - -ss-get-search --appinfo pkgname version - -预计会设置变量: get-method description maintainer hints_when_install source - -随后执行 -```bash -cat << EOF -准备构建软件包... -包名:"$pkgname" -版本:"$version" -方式:"$get-method" -来源:"$source" -描述:"$description" -安装提示:"$hints_when_install" - -开始构建... - -EOF -``` -然后判断$get-method - -``` -case $get-method in - git) - mkdir -p /tmp/ss-get-build - cd /tmp/ss-get-build - git clone $source - cd /tmp/ss-get-build/pkgname - dpkg -b . ../ - ;; - download) - mkdir -p /tmp/ss-get-build - cd /tmp/ss-get-build - wget -q --show-progress "$source" - ;; - script) - mkdir -p /tmp/ss-get-build/scripts - cd /tmp/ss-get-build/scripts - wget -q --show-progress "$source" - target=`echo ${source##*/}` - chmod +x ./$target.sh - bash ./target.sh /tmp/ss-get-build/ - ;; -esac - -``` - -随后echo ------------------------------------ - -进入循环开头 - -##### 结束循环后 - -`dpkg -i /tmp/ss-get-build/*.deb || apt install -yf - -完成安装过程 - -### ss-get --download pkgname=version - -执行查询阶段,然后对于非script包,执行相关操作得到deb并打包到pwd。 - -### ss-get --remove/--purge - -转给apt-get处理 - - -## 设计模块:ss-get-info - -输出内容: -* 对于无参数:pkgname version -* 对于 --appinfo,返回`>>>>boom>>>>`后的内容 -* 对于 --search:第一行pkgname=后的内容+第二行version=后的内容+description后的内容--------------分隔 - -## 参与贡献 - -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 -3. 提交代码 -4. 新建 Pull Request - +# oyo + +## 介绍 +oyo规划 + +## 软件架构 + +### 服务端: + +app.amber + +内容: + +``` +pkgname=包名 +version=版本 +depends=oyo(>=version),其他deb包依赖(这里建议对oyo额外增加一个依赖,确保是某版本及以上的oyo以确保有功能) +architecture=架构 +>>>>boom>>>> +description=将会在oyo search显示的描述 +maintainer= 名字<联系方式>,将会在echo段之后显示 +hints_when_install=会在安装时显示的文本 +get-method= git/download/script +source=目标地址。若方法为git,则会执行git clone到/tmp/oyo-build,然后执行dpkg -b /tmp/oyo-build/pkgname ,所以应当把git url设置成包名;若方法为download,则会wget下载指定链接到/tmp/oyo-build;若方法为script,则会wget到/tmp/oyo-build/script,然后执行。 +``` +特别地,对于script包,预制参数1为一个目录,是把deb包保存的目录。在非--download条件下,这个参数将会是/tmp/oyo-build。script包将会被严格审核后才能入库 + +applist.amber +第一行固定 i-love-amber-forever + +往下是用脚本集合以上的所有,每一个应用用`###baron-bunny###`隔开(用于查询) + + +### 客户端 +#### 会在所有操作执行之前执行一次更新applist.amber + +#### oyo --search pkgname 使用grep寻找package:$1,如果有,则sed寻找所在行,切掉前一行,然后打印第一行pkgname=后的内容+第二行version=后的内容,然后切掉后面第一个`>>>>boom>>>>`之前的内容,打印第一行description=后的内容,接着打印--------------来分隔,然后切掉后面第一个`###baron-bunny###`之前的内容,继续循环,直到sed无输出. + +计划采用 oyo-info --search + +#### oyo --install pkgname=version pkgname2.... + +首先判断是否有root权限,如果没有,则退出 + +##### 查询阶段 + +计划使用 模块:oyo-info + +使用grep寻找pkgname=$1,如果有,则sed寻找所在行,切掉前一行。 + +* 如果指定了版本,则读取版本进行对比,如果不等于,然后切掉后面第一个`###baron-bunny###`之前的内容,继续循环,直到sed无输出。如果找到了,则执行安装步骤;如果没找到,则报错退出 +* 如果没有指定版本,使用grep寻找pkgname=$1,如果有,则sed寻找所在行,切掉前一行。存入第二行version=后的内容,然后切掉后面第一个`###baron-bunny###`之前的内容,继续循环。如果sed找到另一个pkgname=$1,则执行`dpkg --compare-versions` (参考 [这里](http://l.github.io/debian-handbook/html/zh-CN/sect.manipulating-packages-with-dpkg.html#:~:text=%E5%9B%A0%E4%B8%BA%20dpkg%20%E6%98%AF%E5%A4%84%E7%90%86%20Debian%20%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%9A%84%E7%A8%8B%E5%BA%8F%EF%BC%8C%E5%AE%83%E4%B9%9F%E8%83%BD%E5%A4%9F%E9%80%BB%E8%BE%91%E5%9C%B0%E6%AF%94%E8%BE%83%E7%89%88%E6%9C%AC%E7%BC%96%E5%8F%B7%E3%80%82,%E6%89%80%E4%BB%A5%E6%9C%89%20--compare-versions%20%E9%80%89%E9%A1%B9%EF%BC%8C%E4%BB%A5%E5%A4%96%E9%83%A8%E7%A8%8B%E5%BA%8F%E4%BD%BF%E7%94%A8%E5%AE%83%20%28%E5%B0%A4%E5%85%B6%E6%98%AF%E8%A2%AB%20dpkg%20%E6%9C%AC%E8%BA%AB%E8%BF%90%E8%A1%8C%E7%9A%84%E9%85%8D%E7%BD%AE%E8%84%9A%E6%9C%AC%29%E3%80%82) )。如果后者更大,则替换变量,否则保持,直到sed无输出为止。 + +以上阶段结束后,将会得到 pkgname+version值 + +存入数组 pkgname_list和version_list,循环,直到所有的参数都被解析结束 + +##### 安装阶段 + +##### 进入循环,直到pkgname_list数组没有成员 + +把目前的第一位赋值给pkgname和version + +sed寻找pkgname=$1所在行,切掉前一行,然后比对第二行version=后的内容与version变量。如果不一致,切掉后面第一个`###baron-bunny###`之前的内容,继续循环,直到找到。 + +version=与变量一致后,读取第三行depends,第四行架构,利用此信息在`/tmp/oyo-build/pkgname`构建一个空包,利用apt-get dryrun测试。如果报错,则提示`pkgname`有依赖问题,无法安装,exit 1;如果不报错,则执行 + +oyo-search --appinfo pkgname version + +预计会设置变量: get-method description maintainer hints_when_install source + +随后执行 +```bash +cat << EOF +准备构建软件包... +包名:"$pkgname" +版本:"$version" +方式:"$get-method" +来源:"$source" +描述:"$description" +安装提示:"$hints_when_install" + +开始构建... + +EOF +``` +然后判断$get-method + +``` +case $get-method in + git) + mkdir -p /tmp/oyo-build + cd /tmp/oyo-build + git clone $source + cd /tmp/oyo-build/pkgname + dpkg -b . ../ + ;; + download) + mkdir -p /tmp/oyo-build + cd /tmp/oyo-build + wget -q --show-progress "$source" + ;; + script) + mkdir -p /tmp/oyo-build/scripts + cd /tmp/oyo-build/scripts + wget -q --show-progress "$source" + target=`echo ${source##*/}` + chmod +x ./$target.sh + bash ./target.sh /tmp/oyo-build/ + ;; +esac + +``` + +随后echo ------------------------------------ + +进入循环开头 + +##### 结束循环后 + +`dpkg -i /tmp/oyo-build/*.deb || apt install -yf + +完成安装过程 + +### oyo --download pkgname=version + +执行查询阶段,然后对于非script包,执行相关操作得到deb并打包到pwd。 + +### oyo --remove/--purge + +转给apt-get处理 + + +## 设计模块:oyo-info + +输出内容: +* 对于无参数:pkgname version +* 对于 --appinfo,返回`>>>>boom>>>>`后的内容 +* 对于 --search:第一行pkgname=后的内容+第二行version=后的内容+description后的内容--------------分隔 + +## 参与贡献 + +1. Fork 本仓库 +2. 新建 Feat_xxx 分支 +3. 提交代码 +4. 新建 Pull Request +