100 lines
2.5 KiB
Markdown
100 lines
2.5 KiB
Markdown
# 总体目标 #
|
||
|
||
## 软件包依赖存储到软件包中 ##
|
||
|
||
### 使用实现简单合理的存储格式 ###
|
||
|
||
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实现软件包在线自动化编译 ##
|
||
|
||
### 当前自动编译集成工具的改造 ###
|
||
|
||
### 对开发分支提供在线编译下载 ###
|