Files
oyo/README.md
2022-06-22 17:00:39 +00:00

150 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 ------------------------------------
删除pkgname_list和version_list的第一个成员
进入循环开头
##### 结束循环后
`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