使用python本机构建dpkgs。

deb-constrictor的Python项目详细描述


#deb constractor



在python中本机构建debian包(.deb/dpkgs)。不依赖Java、Ruby或其他Debian软件包。

二进制控制

dirs=[
{
‘源’:'~/python/beneboyit/frontend/src',
‘目的地’:'/srv/python/bbit web frontend',
"uname":"www data"
}
]



维护者脚本{
"postinst":"~/python/beneboyit/frontend/scripts/after install",
"preinst":~/python/beneboyit/frontend/scripts/before install'
}

links=[
{
"path":/etc/nginx/sites enabled/bbit web frontend',
"target":/sites available/bbit web frontend'
},
{
"路径":/etc/uwsgi/apps enabled/bbit web frontend.ini,
"目标":"../apps available/bbit web frontend.ini"

]


depends=("nginx","uwsgi")

output_directory='~/build'

c=binarycontrol('bbit-web-frontend','1.5','all','ben shaw','bbit web frontend')

c.set_control_field('dependents',dependents)


d=dpkgbuilder(output_directory,c,dirs,links,mainter_scripts)
d.build_package()
````

格式*<;package name>;<;version>;<;architecture>;.deb*并放在*destination\dir*
或者,为包提供一个名称作为*output\u name*参数,这个包将用这个
名称在*output_目录中创建*




constractor build tool
----


constractor build是一个命令行工具,它将基于json文件中的信息构建包。默认情况下,
此文件位于当前目录中,名为"build config.json"。

必需)
*维护程序(字符串,必需)
*说明(字符串,必需)
*额外的控制字段(标准dpkg控制字段对的字典,可选)
*目录(上面示例中的字典数组,可选)
*链接(上面示例中的字典数组,可选)
*配置文件(字符串数组,可以是路径或全局以匹配多个)
*维护程序脚本(上面示例中的字典,可选)
*父(字符串,可选,请参阅下面的父节)
*deb廑u压缩程序(字典,可选,见下面的Deb_Constractor部分)。有效键是:
*忽略路径(字符串数组,可选)
*环境变量(两个元素数组的数组,可选)
*变量(两个元素数组的数组,可选)
*命令(字典)



与examples目录中包含的其他生成步骤一起使用constractor build。

它是另一个生成json文件的路径(路径与配置文件相关)
从中读取配置值。例如,您可能希望仅在父配置中定义节,而不是在每个子配置中定义节。父查找是递归的,因此父查找可以有父查找,依此类推。constractor build
还尝试将基本配置文件加载为配置树的根目录。此文件的默认位置
是*~/constractor build config.json*,但可以通过设置*constractor_build_base_co来覆盖nfig_path*
环境变量。

子值将替换父值。列表或词典中的字段将被追加/更新为适当的
。如果子配置列表中的项已经存在,则不会将其添加到父配置中;
这意味着如果父项和子项都定义了相同的依赖项或要包含的目录(例如),则它们不会在计算机配置中包含两次,

例如,具有此配置的父级:

``json
{
"额外控制字段":{
"依赖":["某些包"]
}
}
`````


可以使用具有此配置的子级:

``json
{
"额外控制字段":{
"depends":["some other package"],
"provides":["this package"]
}
}
`````

>创建这样的计算配置:

```json
{
"extra_control撸fields":{
"depends":["some package","some other package"],
"provides":["this package"]
}
}
````




*环境变量(两个元素数组的数组,可选)
*变量(两个元素数组的数组,可选)
*命令(数组字典,可选)

文件与它们相对于
include dir的名称进行比较,并有一个前导斜杠。

例如,在文件系统中,目录布局如下:

-src
-src/media/
-src/media/123.jpg
-src/media/456.jpg

源为*src/*的目录。要排除媒体目录中的所有JPG文件,
设置忽略路径:

`"忽略路径":["/media/*.jpg"]`

如果希望部署空目录,这可能是不可取的。

如果找到此文件,则其包含目录将被添加到存档(因为它
不为空),但占位符文件将不包括在内。


保存顺序的字典,以便
值可能依赖于先前定义的值。

"环境变量"和"变量"的行为方式相同,它们定义的任何值都可以用于在整个配置中插入变量,但是,如果调用外部脚本(例如,构建前/构建后脚本)
,则只有"环境变量"将传递给子进程。

["构建目录","构建"]
],
"环境变量":[
["python_version","3.6"],
["venv_name","example virtualenv"],
["venv_dir","${build_dir}/${venv_name}],
["venv_bin_dir","${venv_dir}/bin"]
]

"目录":[
{
"源":"${build_dir}/virtualenvs/${venv_name}",
"destination":"/var/virtualenvs/${venv_name}"
}
]
}
````

>插入变量后,配置将如下:

``json
{
"package":"example virtualenv",
"directories":[
{
"source":"build/virtualenvs/example virtualenv",
"destination":"/var/virtualenvs/example virtualenv"
}
]
}
````

如果它不存在,那么"environment\u variables"等将被用于"os.environ"。

` venv_u name`、`venv_u dir`和
`venv_u bin_u dir`将添加到os.environ,而'build_u dir'将不会添加。


例如,设置一个用于打包的virtualenv,并在之后将构建的.deb上载到apt存储库。


命令支持的键是"prebuild"和"postbuild",这两个键分别在创建dpkg之前和之后调用。这些命令应该作为数组提供(就像发送到"subprocess.call"一样)。

子目录中定义的命令将覆盖父目录中的命令(而不是追加)。

包含当前正在使用的配置文件(例如,对于
foo/bar/build-config.json_u,该值为u/foo/bar_u)
*`deb_constrator_output_path`:dpkg相对于cwd的输出路径。此变量仅为
"postbuild"设置。这可以与工作目录路径组合以获得绝对路径。

"apt@apt server.example.com/srv/apt/incoming/"]
}
}
}
````


prebuild命令"build virtualenv.sh"可以访问"deb戋u constrator戋u working戋dir"环境变量(以及已定义的其他"environment戋variables"环境变量),并可以引用所有这些命令用于执行任务。

此示例显示将在执行前插入的postbuild命令,因此,实际调用的命令可能是:

`scp build/example-1.0_amd64.deb apt@apt server.example.com/srv/apt/incoming/`


运行"postbuild"命令后(即使"postbuild"命令不存在,也会删除该命令)。


此命令用于清除不再需要的dpkg,例如,如果"postbuild"脚本将其发送到远程服务器。




小心使用
或创建要修复的postinst脚本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java什么数据库最类似于Map,每个用户/id存储无限多个“键”和“值”?   java仅使用super pom进行测试   内存不足如何解析java。OutOfMemoryError:Java堆空间在增加堆大小的情况下将意味着延迟OutOfMemoryError   来自另一个类的mysql和java jdbc调用[运行时应用程序]   java通过下拉菜单更改搜索框搜索的内容   JAVAlang.ClassNotFoundException:sun。jdbc。odbc。JdbcOdbcDriver   java Selenium点击链接   JavaSpringHibernate:从唯一值列表中获取对象列表   java Bing广告与桌面身份验证问题   java如何在没有任何外部SDK的情况下从安卓打印到收据打印机?   未调用java菜单片段类   java在IDEA和PyCharm中同时为同一个项目工作   java我们如何为同一个异常提供不同的海关信息   jakarta ee中是否预定义了“请求”和“响应”变量或值?   java更好地解决“之前和之后”难题?   尝试将数据从Excel添加到Java   发送电子邮件的Java代码只适用于一个电子邮件id?   java如何从资产解析XML?