diff --git a/4.2-new-pkg/new-pkg.md b/4.2-new-pkg/new-pkg.md new file mode 100644 index 0000000..6230dae --- /dev/null +++ b/4.2-new-pkg/new-pkg.md @@ -0,0 +1,99 @@ +# 总体目标 # + +## 软件包依赖存储到软件包中 ## + +### 使用实现简单合理的存储格式 ### + +1. 备选json,理由:格式简单易读,有现成的解析库,内容可以根据需求自定义。 + +2. 基于json设计4.2软件包的control文件 + + 通过分析dependency.xml 以及 debian redhat 的control文件和spec文件设计出合理的可扩展的定义格式 + +3. control文件命名 + + control文件存放到软件包的 `/var/lib/pkginfo/control-pkgname.jq` 中 + +4. 获取软件包信息 + + 读取软件包信息时可以只读取一个控制文件,节省开销参考命令: + + ``` + tar --wildcards -xvf pkgname.pkg.tar.gz /var/lib/pkginfo/control-*.jq + 读取文件信息 + ``` + +5. 实现control文件内元素基础解析函数 + + 使用现成的解析库命令行工具jq实现json格式control文件已定义元素的,增、删、改、查基本函数。 + +6. 基于` 上一条`的基本函数实现,多个软件包信息的合并,软件包信息的获取(名称,版本号,依赖等),软件包依赖的计算等。 相当于debian系统中的源索引生成,处理工具。 + +## 拆分applicatons库 ## + +使用git命令将applications库中的软件包拆分,每个包一个git库。并且保留历史记录。 + +参考代码: + +``` +#! /bin/bash + +WORKDIR=`cd $(dirname $0) && pwd` + +ORIG_GIT=$WORKDIR/applications + + +echo "$WORKDIR $ORIG_GIT" +info(){ + echo $@ 1>&2 +} + +if [ -d $ORIG_GIT ] +then + info "Found $ORIG_GIT" +else + info "Not found $ORIG_GIT" + exit 0 +fi + +if [ -f $WORKDIR/list ] +then + info "Found list!" +else + info "There's no list!" + cd $ORIG_GIT + find -name Pkgfile | sort | sed -e 's|^./||g' | awk -F "/Pkgfile" '{print $1}' >> $WORKDIR/list + cd - +fi + +cat ${WORKDIR}/list | while read f +do + new_branch=$(echo $f | awk -F "/" '{print $NF}') + info "$new_branch" + cd $ORIG_GIT + git checkout -b ${new_branch} + git filter-branch -f --prune-empty --subdirectory-filter $f ${new_branch} + mkdir ../${new_branch}.git ; cd ../${new_branch}.git ; git init --bare ; cd - + + git remote add ${new_branch} file:///`pwd`/../${new_branch}.git + git push ${new_branch} ${new_branch}:master + + git checkout 4.2/daily-build +done + +``` + +## 构建软件包源 ## + +### 实现类似debian 系统中的 apt-get install/source 等命令统一管理二进制软件包 ### + +### 基于源构建依赖编译软件包 ### + +### 基于源安装软件包 ### + + +## 依托gitlab-ci实现软件包在线自动化编译 ## + +### 当前自动编译集成工具的改造 ### + +### 对开发分支提供在线编译下载 ###