打包时经常需要反复下载一些包, 如果你的网速不够快,建议安装 approx 透明代理, 可以缓存大部分包。
1. 如何安装 approx
安装方法: "sudo apt-get install approx", 然后修改配置文件 /etc/approx/approx.conf 为
ubuntu http://cn.archive.ubuntu.com/ubuntu
debian http://mirrors.163.com/debian
修改 /etc/apt/sources.list, 修改为如下的内容
deb http://127.0.0.1:9999/ubuntu lucid main restricted universe multiverse
deb http://127.0.0.1:9999/ubuntu lucid-security main restricted universe multiverse
deb http://127.0.0.1:9999/ubuntu lucid-updates main restricted universe multiverse
2. approx 的优点
2.1 可以在局域网内共享, approx 缺省绑定在 0.0.0.0, 所以一个局域网内用户可以共享这个源,互相加速, 如果使用安装法部署大量机器时也非常快速
2.2 i386 和 amd64 系统可以互相加速(因为可以互相共享架构无关的包),karmic 和 lucid 也可以互相共享包 (某些包在这两个版本是一致的), 但 debian 和 ubuntu 之间不能共享包
2.3 即使单人使用, approx 也很有帮助,比如可以快速重建 linux chroot, pbuilder, 或者在虚拟机内重装一份debian/ubunu
2.4 可以模拟多线程下载,比如你要同时安装 vim 和 emacs, 可以先运行 "sudo apt-get install vim", 然后在下载时按 Ctrl+C 终端,然后运行 "sudo apt-get install emacs23", 这时候 approx 会在后台帮你下载 vim 所需的包 (一般会帮你下载前面5个)
2.5 智能cache, debian/ubuntu 仓库有逐级签名, approx 能快速判定一个文件,是不是完整的,是不是最新的, 也可以定时清理掉不再被使用的文件。
Hello, I am LI Daobing(first name is family name). You can talk with me in English or Chinese.
Showing posts with label debian. Show all posts
Showing posts with label debian. Show all posts
2010-10-02
在 Ubuntu 构建 Debian 打包环境
0. 原因
尽管你是在 Ubuntu 下工作,但由于种种原因[1],你还是需要给 Debian 做打包工作,如果你不想你做的包因为一些简单的错误被退回,比如无法在 Debian 下编译,没有处理好 lintian 警告,那么最好在 Ubuntu 下给 Debian 打包的环境,步骤如下所示:
1. 安装 approx
打包时经常需要反复下载一些包, 如果你的网速不够快,建议安装 approx 透明代理, 可以缓存大部分包。安装方法: "sudo apt-get install approx", 然后修改配置文件 /etc/approx/approx.conf 为
ubuntu http://cn.archive.ubuntu.com/ubuntu
debian http://mirrors.163.com/debian
2. 修改 /etc/apt/sources.list, 修改为如下的内容
deb http://127.0.0.1:9999/ubuntu lucid main restricted universe multiverse
deb http://127.0.0.1:9999/ubuntu lucid-security main restricted universe multiverse
deb http://127.0.0.1:9999/ubuntu lucid-updates main restricted universe multiverse
3. 安装工具包, 运行 "sudo apt-get install ubuntu-dev-tools cowbuilder"
4. 准备 cowbuilder-sid
$ sudo cp /usr/bin/pbuilder-dist /usr/bin/cowbuilder-sid
$ sudo sed -ie 's,ftp://ftp.debian.org/debian,http://127.0.0.1:9999/debian,' /usr/bin/cowbuilder-sid
5. 准备开发环境
$ sudo mkdir /var/cache/pbuilder-dist/sid_result
$ cowbuilder-sid create
6. 开始开发
$ dget http://ftp.debian.org/debian/pool/main/h/hello/hello_2.6-1.dsc
$ dpkg-source -x hello_2.6-1.dsc
$ cd hello-2.6
$ # 修改 debian 包,版本改为 2.6-2
$ debuild -S -sa
$ cd ..
$ cowbuilder-sid hello_2.6-2.dsc # 使用 sid 环境进行编译
7. 检查
7.1 安装最新版的 lintian
Ubuntu 自带的 lintian 版本不够新,需要从 Debian 安装最新版本
$ # 到 http://ftp.us.debian.org/debian/pool/main/l/lintian/ 下载最新版本的 lintian
$ wget http://ftp.us.debian.org/debian/pool/main/l/lintian/lintian_2.4.3_all.deb
$ sudo dpkg -i lintian_2.4.3_all.deb
$ sudo apt-get -f install
7.2 对包做最后的检查
$ cd /var/cache/pbuilder-dist/sid_result
$ lintian -i hello_2.6-2_amd64.changes
$ #如果上一步出现错误,则继续修正
$ debsign hello_2.6-2_amd64.changes #签名
8. 上传
根据 http://mentors.debian.net/cgi-bin/maintainer-intro 的介绍准备好 mentors.debian.net 的上传的环境, 然后用如下的命令上传
$ dput mentors hello_2.6-2_amd64.changes
9. 召唤 Debian Developer (DD)
到 mentors.debian.net, 登录后可以找到一份模板邮件, 把模板邮件中的内容填好,然后发到 debian-mentors@lists.debian.org
如果你有相熟的 DD, 也可以直接发信给他让他帮忙检查。
尽管你是在 Ubuntu 下工作,但由于种种原因[1],你还是需要给 Debian 做打包工作,如果你不想你做的包因为一些简单的错误被退回,比如无法在 Debian 下编译,没有处理好 lintian 警告,那么最好在 Ubuntu 下给 Debian 打包的环境,步骤如下所示:
1. 安装 approx
打包时经常需要反复下载一些包, 如果你的网速不够快,建议安装 approx 透明代理, 可以缓存大部分包。安装方法: "sudo apt-get install approx", 然后修改配置文件 /etc/approx/approx.conf 为
ubuntu http://cn.archive.ubuntu.com/ubuntu
debian http://mirrors.163.com/debian
2. 修改 /etc/apt/sources.list, 修改为如下的内容
deb http://127.0.0.1:9999/ubuntu lucid main restricted universe multiverse
deb http://127.0.0.1:9999/ubuntu lucid-security main restricted universe multiverse
deb http://127.0.0.1:9999/ubuntu lucid-updates main restricted universe multiverse
3. 安装工具包, 运行 "sudo apt-get install ubuntu-dev-tools cowbuilder"
4. 准备 cowbuilder-sid
$ sudo cp /usr/bin/pbuilder-dist /usr/bin/cowbuilder-sid
$ sudo sed -ie 's,ftp://ftp.debian.org/debian,http://127.0.0.1:9999/debian,' /usr/bin/cowbuilder-sid
5. 准备开发环境
$ sudo mkdir /var/cache/pbuilder-dist/sid_result
$ cowbuilder-sid create
6. 开始开发
$ dget http://ftp.debian.org/debian/pool/main/h/hello/hello_2.6-1.dsc
$ dpkg-source -x hello_2.6-1.dsc
$ cd hello-2.6
$ # 修改 debian 包,版本改为 2.6-2
$ debuild -S -sa
$ cd ..
$ cowbuilder-sid hello_2.6-2.dsc # 使用 sid 环境进行编译
7. 检查
7.1 安装最新版的 lintian
Ubuntu 自带的 lintian 版本不够新,需要从 Debian 安装最新版本
$ # 到 http://ftp.us.debian.org/debian/pool/main/l/lintian/ 下载最新版本的 lintian
$ wget http://ftp.us.debian.org/debian/pool/main/l/lintian/lintian_2.4.3_all.deb
$ sudo dpkg -i lintian_2.4.3_all.deb
$ sudo apt-get -f install
7.2 对包做最后的检查
$ cd /var/cache/pbuilder-dist/sid_result
$ lintian -i hello_2.6-2_amd64.changes
$ #如果上一步出现错误,则继续修正
$ debsign hello_2.6-2_amd64.changes #签名
8. 上传
根据 http://mentors.debian.net/cgi-bin/maintainer-intro 的介绍准备好 mentors.debian.net 的上传的环境, 然后用如下的命令上传
$ dput mentors hello_2.6-2_amd64.changes
9. 召唤 Debian Developer (DD)
到 mentors.debian.net, 登录后可以找到一份模板邮件, 把模板邮件中的内容填好,然后发到 debian-mentors@lists.debian.org
如果你有相熟的 DD, 也可以直接发信给他让他帮忙检查。
2010-08-28
关于 Debian 的一些事实
昨天在 SHLUG 的每月聚会上, 和朋友聊起 Debian, 我是 Debian Developer (简称为 DD), 当时另外一位 developer zigo 也在 (法国人,定居中国), 就跟大家介绍了 Debian 的一些工作方式, 发现大家对 Debian 还是有误解和不理解。现整理如下
- Debian 是纯社区支持的发行版,没有一个公司主导, 这个与 Ubuntu, Fedora 不一致
- Debian 没有需要付薪水员工, 一个也没有
- Debian 后面与钱有关的组织叫 SPI, 一般是有事的时候才开始募钱, 所以收支少的时候一个月就 1000 美金左右,多的时候大概是几万美金(比如每年的 DebConf), DD 可以加入他们的列表,每月有一份账单, openoffice, postgresql 的钱似乎也归他们管,所以也能看到他们的账单,他们的账单比 Debian 还要小。
- Debian 的领导人每年选举一次, 每个DD把候选人进行排序, 如果其中一人严格优于其他候选人,那么他就当选,否则重选, 比如 2010 年的选举: http://www.debian.org/vote/2010/vote_001
- 尽管领导人每年一选,但具体执行事务的人不需要进行选举,也很少更换
- Debian 的大部分事务都是动议,反对制, 也就是说你有一个想法, 就把想法发到邮件列表,没人反对你就可以做了,有人有意见,就大家讨论,达成一致你就可以实施了。
- 对于一些有重大分歧的, 可以使用 General Resolution, 提出几个方案,大家再来投票, 比如以前的 GFDL 是否满足 DFSG, 是否引入 DM 等。
- Debian 的沟通方式以 email 为主, IRC 为辅, 甚至报告 bug 也是通过 email, 对 email 方式不熟的话还是通过 reportbug 或者 reportbug-ng 吧
- 一个软件包需要进入 Debian, 只需要通过一个 DD 的同意即可, 另有一个小组(叫 ftp-master) 负责检查软件的 license 是否干净。
- 申请 DD 的流程很长, 中位值时间大概是 10 个月, 我花了一年多。
- 中国的 DD 总共 7 个(包括 zigo), 但其中一个帐号被锁, 可以通过 http://db.debian.org/ 查询
- 现在有八百多 DD, 但上次Debian Leader 选举只有不到 400 人参加
2010-05-02
[有问有答] 软件如何进入 Debian
Q: 我有一个软件,我觉得他可以进入 Debian, 那么如何让他进入 Debian 呢?
A: 整个流程分为如下几步:
A: 整个流程分为如下几步:
- 首先你应该提交一份 ITP bug, ITP 的含义是"Intent To Packaging", 最简单的方式是运行 "reportbug wnpp", 接着选择 "ITP", 填完他要求的内容, 即可提交, 这个 bug 报告最主要的作用是为了防止重复劳动, 可以追踪谁在负责这个包, 也方便直接联系负责人询问进度, 所以也没有必要太详细, 范例可以参见 ibus 的 ITP bug
- 稍后你可以收到一封邮件, 里面应该有这个 bug 对应的号码, 比如 ibus 的 ITP bug 号就是 501106, 这个号码在第3步打包时会用到(放在 debian/changelog 文件中)
- 接着就是具体的打包工作了, 这个部分内容比较多,不在这儿说了, 详细情况你可以查看Debian 新维护人员手册(英文版, 简体中文版)。 打好的包首先要保证能用, 同时最好用 pbuilder 编译一遍,确定能编译成功, 用 lintian 检查一遍, 确认没有警告, 然后再复查一下 debian/copyright 里面的版权声明, 是否有遗漏和错误, 这些都检查完毕后, 就可以申请上传了.
- 接着呢,你需要把这个包上传到 mentors.debian.net, 方便其他人员检查你的包, 上传方法可以查看他的文档
- 接着呢你要发封信到 debian-mentors@lists.debian.org, 找一个Debian Developer 帮你上传, 这个人一般被称之为 sponsor, 这封信的标题一般含有"RFS", 含义为 "Request For Sponsor"。mentors.debian.net 一般已经为你准备了一个模板, 就在你的包详细页面下面会有一个链接, 你把模板拷贝一份, 补充一下里面缺少的内容, 就可以发到 debian-mentors@lists.debian.org , 值得注意的是, 如果你没有订阅这个邮件列表, 记得在邮件里面加上一句 "please cc me, thanks.".
- 接着呢就需要等待几天时间, 当然如果运气不好, 没人对你的包没有兴趣的话, 可能需要更长的时间, 一般两周后你可以重新发一遍你的邮件, 补充说明一下为什么你的包值得进入 Debian. 如果你想加快这个进程, 一个办法是到 IRC 问问, IRC 服务器是 irc.debian.org (不是 freenode), 频道是 #debian-mentors 。另外, 如果你有认识的 Debian Developer 的话, 可以直接给他发信, 问他是否愿意帮你上传这个包。
- 包上传后就进入 Debian 的 unstable了(即sid), 然后一般会在 10 天后进入 testing (需要满足如下的要求: a. 包在所有的平台上都成功编译, b.这10天内没有发现重大 bug, c. 你所依赖的包也已经都在 testing 存在了), 下一个 stable 版发布时就会包含你的包了。
- 恭喜你,你的包已经进入 Debian 了。
2009-05-01
debian/control: switch between debian and ubuntu format
#!/usr/bin/env python
import logging
import sys
log = logging.getLogger(__name__)
def main():
lines = file('debian/control').readlines()
l1 = None
l2 = None
for idx, x in enumerate(lines):
if x.startswith('Maintainer:'):
l1 = idx
elif x.startswith('XSBC-Original-Maintainer:'):
l2 = idx
if l1 is None:
log.error("can't find maintainer line")
sys.exit(1)
isUbuntu = l2 is not None
if isUbuntu:
maintainer = lines[l2].lstrip('XSBC-Original-Maintainer:').strip()
else:
maintainer = lines[l1].lstrip('Maintainer:').strip()
if isUbuntu:
lines[l1] = 'Maintainer: %s\n' % maintainer
del lines[l2]
else:
lines[l1] = 'Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>\n' \
+ 'XSBC-Original-Maintainer: %s\n' % maintainer
file('debian/control', 'w').writelines(lines)
if __name__ == '__main__':
main()
2008-12-28
sprintf/snprintf 陷阱
最近 ubuntu/debian 正在讨论 sprintf/snprintf 的问题,我在这描述一遍。
sprintf 的原型为:
int sprintf(char *restrict s, const char *restrict format, ...);
其中 char* restrict s 的含义为通过s 指向的内存空间不得与其他指针参数指向的内存的空间重叠。比如如下的语句就是错误的用法, 因为参数1与参数3指向的内存重叠了。但这种做法作为增强版的 strcat 已被广泛使用。
sprintf(buf, "%s foo %d %d", buf, var1, var2);
在 ubuntu 8.10 所带的 gcc 中,如果编译时加入了优化选项(比如 -O1, -O2), 那么sprinf 会首先将 s 清空,比如如下的程序会输出 "fail", 而不是 "not fail"。
#include
char buf[80] = "not ";
int main()
{
sprintf(buf, "%sfail", buf);
puts(buf);
return 0;
}
作为补救方案,可以使用如下的语句来代替:
sprintf(buf+strlen(buf), " foo %d %d", var1, var2);
snprintf 有类似的 bug.
很多 Debian/Ubuntu 包都有此 bug,可以参见如下两个 thread 中的具体内容
[1] https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/305901
[2] http://groups.google.com/group/linux.debian.devel/browse_thread/thread/c5bbda39f1a01bd4
sprintf 的原型为:
int sprintf(char *restrict s, const char *restrict format, ...);
其中 char* restrict s 的含义为通过s 指向的内存空间不得与其他指针参数指向的内存的空间重叠。比如如下的语句就是错误的用法, 因为参数1与参数3指向的内存重叠了。但这种做法作为增强版的 strcat 已被广泛使用。
sprintf(buf, "%s foo %d %d", buf, var1, var2);
在 ubuntu 8.10 所带的 gcc 中,如果编译时加入了优化选项(比如 -O1, -O2), 那么sprinf 会首先将 s 清空,比如如下的程序会输出 "fail", 而不是 "not fail"。
#include
char buf[80] = "not ";
int main()
{
sprintf(buf, "%sfail", buf);
puts(buf);
return 0;
}
sprintf(buf+strlen(buf), " foo %d %d", var1, var2);
snprintf 有类似的 bug.
很多 Debian/Ubuntu 包都有此 bug,可以参见如下两个 thread 中的具体内容
[1] https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/305901
[2] http://groups.google.com/group/linux.debian.devel/browse_thread/thread/c5bbda39f1a01bd4
2006-09-25
1. 安装reportbug, msmtp
2. 修改 $HOME/.reportbugrc
reportbug_version "3.29.3"
mode advanced
offline
no-cc
header "X-Debbugs-CC: lidaobing@gmail.com"
mta /usr/bin/msmtp
# 实际上是先运行"reportbug --config",然后再手动修改的
# 使用offline的原因是reportbug自带的bug查询太慢了,比我用firefox打开bugs.debian.org/packagename还慢
# 使用msmtp的原因是reportbug自带的smtp服务器不稳定,经常不能用(至少对于我来说是如此)
3. 修改 $HOME/.msmtprc
host smtp.gmail.com
port 465
auth plain
from lidaobing@gmail.com
user lidaobing@gmail.com
password "xxxxxxxx"
tls
tls_nostarttls
logfile ~/.msmtp.log
# 我使用的是gmail,如果你们用其他邮箱,这个配置文件可能不适用
# from, user, password 记得改成你自己的
4. 运行 reportbug qterm ,就可以向qterm提交bug了
2. 修改 $HOME/.reportbugrc
reportbug_version "3.29.3"
mode advanced
offline
no-cc
header "X-Debbugs-CC: lidaobing@gmail.com"
mta /usr/bin/msmtp
# 实际上是先运行"reportbug --config",然后再手动修改的
# 使用offline的原因是reportbug自带的bug查询太慢了,比我用firefox打开bugs.debian.org/packagename还慢
# 使用msmtp的原因是reportbug自带的smtp服务器不稳定,经常不能用(至少对于我来说是如此)
3. 修改 $HOME/.msmtprc
host smtp.gmail.com
port 465
auth plain
from lidaobing@gmail.com
user lidaobing@gmail.com
password "xxxxxxxx"
tls
tls_nostarttls
logfile ~/.msmtp.log
# 我使用的是gmail,如果你们用其他邮箱,这个配置文件可能不适用
# from, user, password 记得改成你自己的
4. 运行 reportbug qterm ,就可以向qterm提交bug了
Subscribe to:
Posts (Atom)