Files
oyo/README.md
2022-06-23 00:57:02 +08:00

5.5 KiB
Raw Blame History

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 (参考 这里 。如果后者更大则替换变量否则保持直到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

随后执行

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