change-to-oyo

This commit is contained in:
2022-06-23 00:57:02 +08:00
parent 0cc162ee96
commit b10e3b685a

294
README.md
View File

@@ -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