Showing posts with label debian. Show all posts
Showing posts with label debian. Show all posts

2010-10-08

approx

打包时经常需要反复下载一些包, 如果你的网速不够快,建议安装 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 能快速判定一个文件,是不是完整的,是不是最新的, 也可以定时清理掉不再被使用的文件。

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, 也可以直接发信给他让他帮忙检查。

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: 整个流程分为如下几步:
  1. 首先你应该提交一份 ITP bug, ITP 的含义是"Intent To Packaging", 最简单的方式是运行 "reportbug wnpp", 接着选择 "ITP", 填完他要求的内容, 即可提交, 这个 bug 报告最主要的作用是为了防止重复劳动, 可以追踪谁在负责这个包, 也方便直接联系负责人询问进度, 所以也没有必要太详细, 范例可以参见 ibus 的 ITP bug
  2. 稍后你可以收到一封邮件, 里面应该有这个 bug 对应的号码, 比如 ibus 的 ITP bug 号就是 501106, 这个号码在第3步打包时会用到(放在 debian/changelog 文件中)
  3. 接着就是具体的打包工作了, 这个部分内容比较多,不在这儿说了, 详细情况你可以查看Debian 新维护人员手册(英文版, 简体中文版)。 打好的包首先要保证能用, 同时最好用 pbuilder 编译一遍,确定能编译成功, 用 lintian 检查一遍, 确认没有警告, 然后再复查一下 debian/copyright 里面的版权声明, 是否有遗漏和错误, 这些都检查完毕后, 就可以申请上传了.
  4. 接着呢,你需要把这个包上传到 mentors.debian.net, 方便其他人员检查你的包, 上传方法可以查看他的文档
  5. 接着呢你要发封信到 debian-mentors@lists.debian.org, 找一个Debian Developer 帮你上传, 这个人一般被称之为 sponsor, 这封信的标题一般含有"RFS", 含义为 "Request For Sponsor"。mentors.debian.net 一般已经为你准备了一个模板,  就在你的包详细页面下面会有一个链接, 你把模板拷贝一份, 补充一下里面缺少的内容, 就可以发到 debian-mentors@lists.debian.org , 值得注意的是, 如果你没有订阅这个邮件列表, 记得在邮件里面加上一句 "please cc me, thanks.".
  6. 接着呢就需要等待几天时间, 当然如果运气不好, 没人对你的包没有兴趣的话, 可能需要更长的时间, 一般两周后你可以重新发一遍你的邮件, 补充说明一下为什么你的包值得进入 Debian. 如果你想加快这个进程, 一个办法是到 IRC 问问, IRC 服务器是 irc.debian.org (不是 freenode), 频道是 #debian-mentors 。另外, 如果你有认识的 Debian Developer 的话, 可以直接给他发信, 问他是否愿意帮你上传这个包。
  7. 包上传后就进入 Debian 的 unstable了(即sid), 然后一般会在 10 天后进入 testing (需要满足如下的要求: a. 包在所有的平台上都成功编译, b.这10天内没有发现重大 bug, c. 你所依赖的包也已经都在 testing 存在了), 下一个 stable 版发布时就会包含你的包了。
  8. 恭喜你,你的包已经进入 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

2008-10-19

sound card support for Dell Inspiron 1420 under Debian



$ sudo udevadm trigger

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了