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 ------------------------------------
删除pkgname_list和version_list的第一个成员
进入循环开头
结束循环后
`dpkg -i /tmp/oyo-build/*.deb || apt install -yf
完成安装过程
oyo --download pkgname=version
执行查询阶段,然后执行相关操作得到deb并打包到pwd。
oyo --remove/--purge
转给apt-get处理
设计模块:oyo-info
输出内容:
- 对于无参数:pkgname version
- 对于 --appinfo,返回
>>>>boom>>>>后的内容 - 对于 --search:第一行pkgname=后的内容+第二行version=后的内容+description后的内容--------------分隔
参与贡献
- Fork 本仓库
- 新建 Feat_xxx 分支
- 提交代码
- 新建 Pull Request