每当你发布新软件包时,你都需要通知用户,用户也需要重新手动下载并安装这些软件包。你可以通过创建一个自己的软件源来改变这一切,这样用户只需要设置一下你的软件源,当你发布新软件包时,用户只需要确认更新即可,方便多啦。
前提条件
你需要有一个HTTP空间或匿名的FTP空间,如果你还没有那么先不要继续阅读了。
开始创建
创建过程实在是太简单了,只需要运行一下下面的脚本程序来在本地创建源的一些目录,然后向里面增加软件包,更新一下软件包的索引,再上传至HTTP空间或FTP空间里即可。
命令:
$ mkdir ubuntu # 新建一个源根目录
$ ./ownss gendir ubuntu # 运行下面的脚本程序创建源目录
$ ./ownss genrel ubuntu # 进行下面的脚本程序创建源的 Release 文件
# 向 ubuntu/pool/ 的一些子目录里增加软件包
$ ./ownss update ubuntu # 更新软件包索引
# 向空间里上传
用户增加源:
Ubuntu 8.04 用户
deb 空间的URL/ubuntu/ hardy main
例如我的源
deb http://archive.heihaier.org/ubuntu/ hardy main
Ubuntu 8.10 用户
deb 空间的URL/ubuntu/ intrepid main
例如我的源
deb http://archive.heihaier.org/ubuntu/ intrepid main
#!/usr/bin/env python
# Update
import os
import sys
dists = ['hardy', 'intrepid']
sections = ['main', 'universe', 'multiverse', 'restricted']
binary_archs = ['binary-i386', 'binary-amd64']
def update(dir):
for a in dists:
for b in sections:
for c in binary_archs:
path = dir + '/dists/' + a + '/' + b + '/' + c
if os.path.exists(path):
print '#### Updating ' + path + ' ####'
if c == "binary-i386":
os.system('dpkg-scanpackages -a i386 ' + dir + '/pool/' + b + ' /dev/null | gzip -9 > ' + path + '/Packages.gz')
else:
os.system('dpkg-scanpackages -a amd64 ' + dir + '/pool/' + b + ' /dev/null | gzip -9 > ' + path + '/Packages.gz')
def gendir(dir):
os.mkdir(dir + '/dists')
for a in dists:
os.mkdir(dir +'/dists/' + a)
for b in sections:
os.mkdir(dir + '/dists/' + a + '/' + b)
for c in binary_archs:
os.mkdir(dir + '/dists/' + a + '/' + b + '/' + c)
os.mkdir(dir + '/pool')
for b in sections:
os.mkdir(dir + '/pool/' + b)
def genrel(dir):
for a in dists:
for b in sections:
for c in binary_archs:
buf = "Archive: " + a + "\nComponent: " + b + "\nLabel: Ubuntu\n"
if c == "binary-i386":
buf = buf + "Architecture: i386"
else:
buf = buf + "Architecture: amd64"
path = dir + '/dists/' + a + '/' + b + '/' + c + '/Release'
f = open(path, 'w')
f.write(buf)
f.close()
def showhelp():
print 'ownss [gendir|genrel|update] dir'
def main():
if len(sys.argv) != 3:
showhelp()
return
if sys.argv[1] == 'gendir':
gendir(sys.argv[2])
elif sys.argv[1] == 'genrel':
genrel(sys.argv[2])
elif sys.argv[1] == 'update':
update(sys.argv[2])
else:
showhelp()
main()