每当你发布新软件包时,你都需要通知用户,用户也需要重新手动下载并安装这些软件包。你可以通过创建一个自己的软件源来改变这一切,这样用户只需要设置一下你的软件源,当你发布新软件包时,用户只需要确认更新即可,方便多啦。
前提条件
你需要有一个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() |