buildd


Debian buildd setup guide

(Many thanks, Andreas Barth.)

Buildd is the distribute build system for Debian. There are two buildd network, 'official buildd' and 'experimental buildd' (plus 'security buildd'). 'official buildd' is coordinated by James Troup (elmo) and Ryan Murray (neuro). 'experimental buildd' is coordinated by Andreas Barth (aba).

I'm ARM experimental/non-free/volatile/testing-secure buildd maintainer.

If you'd like to join the buildd team, attending experimental buildd team is good starting point, in my opinion.

Although this guide is for experimental buildd, it will be applied for official buildd also.

Before setup

You need:

buildd will work 24 hours, 365 days.

Structure

Example

Making a chroot environment for buildd

Because buildd has a root privilege, I recommend you to setup buildd system in chroot.

  1. apt-get install debootstrap
  2. mkdir -p /chroot/buildd
  3. debootstrap sid /chroot/buildd http://ftp.jp.debian.org/debian
  4. Add following lines to /etc/fstab.
    proc    /chroot/buildd/proc   proc    defaults        0       0
    /tmp    /chroot/buildd/tmp none bind  0       0
    devpts  /chroot/buildd/dev/pts devpts rw,noexec,nosuid,gid=5,mode=620  0  0
    
  5. mount -a
  6. chroot /chroot/buildd /bin/bash (Now, you entered buildd chroot)

You'd better to setup schroot or dchroot to enter buildd chroot again easily.

Install buildd tools

OK, let's start to install buildd packages.

  1. vi /etc/apt/sources.list.etch-buildds is the repository has some packages for buildd.
    deb http://ftp.jp.debian.org/debian sid main
    deb http://farmarchive.turmzimmer.net/ etch-buildds main
    
  2. apt-get install buildd sbuild dupload sudo debootstrap

Set up MX

buildd send logs by mail. So you have to setup local mail server on this chroot. You can use any your favorite SMTP server. I prefer postfix.

relayhost = mail.example.org
mynetworks = 127.0.0.0/8
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
message_size_limit=50000000

Setup buildd account

Next, let's make buildd account.

  1. adduser --disabled-password --home /org/buildd buildd
  2. cd /org/buildd
  3. install -d logs stats build mqueue -o buildd -g buildd
  4. install -d chroots -m 755
  5. chown -R buildd:buildd /var/debbuild -o buildd
  6. visudo
    Defaults env_keep+="*"
    ...
    buildd  ALL=(ALL) NOPASSWD:ALL
    

Create build-chroot

There are many distributions to build. The build processes will be done in each chroots. So let's make the distribution chroot for what you'd like to build.

non-free unstable chroot

  1. cd ~buildd
  2. debootstrap --variant=buildd sid chroots/sid http://ftp.jp.debian.org/debian
  3. vi chroots/sid/etc/apt/sources.list
    deb http://ftp.jp.debian.org/debian sid main contrib non-free
    deb-src http://ftp.jp.debian.org/debian sid main contrib non-free
    
  4. mkdir -p chroots/sid/build/buildd chroots/sid/var/debbuild;
  5. chown buildd:buildd chroots/sid/build/buildd chroots/sid/var/debbuild
  6. cp /etc/passwd chroots/sid/etc
  7. chroot chroots/sid apt-get update
  8. chroot chroots/sid apt-get install fakeroot build-essential sudo debfoster
  9. chroot chroots/sid debfoster (just Enter to all questions)

Then setup /etc/fstab of your root environment and do "mount -a".

proc    /chroot/buildd/org/buildd/chroots/sid/proc   proc    defaults        0       0
devpts  /chroot/buildd/org/buildd/chroots/sid/dev/pts devpts rw,noexec,nosuid,gid=5,mode=620  0  0

experimental chroot

  1. cd ~buildd
  2. debootstrap --variant=buildd sid chroots/experimental http://ftp.jp.debian.org/debian
  3. vi chroots/experimental/etc/apt/sources.list
    deb http://ftp.jp.debian.org/debian sid main contrib non-free
    deb-src http://ftp.jp.debian.org/debian experimental main contrib non-free
    
  4. mkdir -p chroots/experimental/build/buildd chroots/experimental/var/debbuild;
  5. chown buildd:buildd chroots/experimental/build/buildd chroots/experimental/var/debbuild
  6. cp /etc/passwd chroots/experimental/etc
  7. chroot chroots/experimental apt-get update
  8. chroot chroots/experimental apt-get install fakeroot build-essential sudo debfoster
  9. chroot chroots/experimental debfoster (just Enter to all questions)

Then setup /etc/fstab of your root environment and do "mount -a".

proc    /chroot/buildd/org/buildd/chroots/experimental/proc   proc    defaults        0       0
devpts  /chroot/buildd/org/buildd/chroots/experimental/dev/pts devpts rw,noexec,nosuid,gid=5,mode=620  0  0

etch-volatile chroot

  1. cd ~buildd
  2. debootstrap --variant=buildd etch chroots/etch-volatile http://ftp.jp.debian.org/debian
  3. vi chroots/etch-volatile/etc/apt/sources.list
    deb http://ftp.jp.debian.org/debian etch main contrib non-free
    deb http://ftp.jp.debian.org/debian-volatile etch main contrib non-free
    deb http://security.debian.org/ etch/updates main contrib non-free
    deb-src http://volatile.debian.net/debian-volatile etch-proposed-updates/volatile main contrib non-free
    
  4. mkdir -p chroots/etch-volatile/build/buildd chroots/etch-volatile/var/debbuild;
  5. chown buildd:buildd chroots/etch-volatile/build/buildd chroots/etch-volatile/var/debbuild
  6. cp /etc/passwd chroots/etch-volatile/etc
  7. chroot chroots/etch-volatile apt-get update
  8. chroot chroots/etch-volatile apt-get install fakeroot build-essential sudo debfoster
  9. chroot chroots/etch-volatile debfoster (just Enter to all questions)

Then setup /etc/fstab of your root environment and do "mount -a".

proc    /chroot/buildd/org/buildd/chroots/etch-volatile/proc   proc    defaults        0       0
devpts  /chroot/buildd/org/buildd/chroots/etch-volatile/dev/pts devpts rw,noexec,nosuid,gid=5,mode=620  0  0

etch-secure & etch-buildd chroot

  1. cd ~buildd
  2. debootstrap --variant=buildd etch chroots/etch-secure http://ftp.jp.debian.org/debian
  3. vi chroots/etch-secure/etc/apt/sources.list
    deb http://ftp.jp.debian.org/debian etch main contrib non-free
    deb http://secure-testing.debian.net/debian-secure-testing etch-proposed-updates/security-updates main contrib non-free
    deb http://security.debian.org/ etch/updates main contrib non-free
    deb-src http://secure-testing.debian.net/debian-secure-testing etch-proposed-updates/security-updates main contrib non-free
    deb-src http://farmarchive.turmzimmer.net/ etch-buildd main
    
  4. mkdir -p chroots/etch-secure/build/buildd chroots/etch-secure/var/debbuild;
  5. chown buildd:buildd chroots/etch-secure/build/buildd chroots/etch-secure/var/debbuild
  6. cp /etc/passwd chroots/etch-secure/etc
  7. chroot chroots/etch-secure apt-get update
  8. chroot chroots/etch-secure apt-get install fakeroot build-essential sudo debfoster
  9. chroot chroots/etch-secure debfoster (just Enter to all questions)

Then setup /etc/fstab of your root environment and do "mount -a".

proc    /chroot/buildd/org/buildd/chroots/etch-secure/proc   proc    defaults        0       0
devpts  /chroot/buildd/org/buildd/chroots/etch-secure/dev/pts devpts rw,noexec,nosuid,gid=5,mode=620  0  0

etch-bpo chroot

  1. cd ~buildd
  2. debootstrap --variant=buildd etch chroots/etch-bpo http://ftp.jp.debian.org/debian
  3. vi chroots/etch-bpo/etc/apt/sources.list
    deb http://ftp.jp.debian.org/debian etch main contrib non-free
    deb http://security.debian.org/ etch/updates main contrib non-free
    deb http://www.backports.org/buildd/ etch-backports main contrib non-free
    deb-src http://www.backports.org/buildd/ etch-backports main contrib non-free
    
  4. mkdir -p chroots/etch-bpo/build/buildd chroots/etch-bpo/var/debbuild;
  5. chown buildd:buildd chroots/etch-bpo/build/buildd chroots/etch-bpo/var/debbuild
  6. cp /etc/passwd chroots/etch-bpo/etc
  7. chroot chroots/etch-bpo apt-get update
  8. chroot chroots/etch-bpo apt-get install fakeroot build-essential sudo debfoster
  9. chroot chroots/etch-bpo debfoster (just Enter to all questions)

Then setup /etc/fstab of your root environment and do "mount -a".

proc    /chroot/buildd/org/buildd/chroots/etch-bpo/proc   proc    defaults        0       0
devpts  /chroot/buildd/org/buildd/chroots/etch-bpo/dev/pts devpts rw,noexec,nosuid,gid=5,mode=620  0  0

Configure files by root

  1. vi /etc/buildd.conf.farm.
    @take_from_dists = qw(etch-farm etch-secure etch-bpo unstable experimental) # Target distributions
    $sshcmd = "/usr/bin/ssh -l wanna-build wanna-build.farm.ftbfs.de"; # Wanna-build server
    $uploaddir = sub { # Upload directories
            my $changes = shift;
            my @dists = main::get_dists_from_changes( $changes );
            foreach (@dists) {
                    return "upload-bpo" if /bpo$/;
                    return "upload-debian" if /^unstable$/;
                    return "upload-debian" if /^experimental$/;
                    return "upload-volatile" if /volatile$/;
                    return "upload-secure" if /secure$/;
                    return "upload-ganneff" if /ganneff$/;
                    return "upload-farm" if /-farm$/;
            }
            return "upload-unknown";
    };
    
    %uploadtargets = ( # dupload name
    'upload-debian' => 'anonymous-ftp-master',
    'upload-volatile' => 'volatile',
    'upload-secure' => 'secure',
    'upload-ganneff' => 'ganneff',
    'upload-bpo' => 'bpo',
    'upload-farm' => 'farmarchive'
    );
    
    $ENV{'LC_ALL'} = 'C';
    
    # don't remove this, Perl needs it
    
    1;
    

vi /etc/sbuild.conf.local

 ...
$stalled_pkg_timeout = 10080; # although default is 90, it's too early for ARM
 ...

Configure files by buildd

  1. vi ~/buildd.conf.
    require "/etc/buildd.conf.global";
    require "/etc/buildd.conf.farm";
    
    
    $wanna_build_user = "kmuto"; # personal account of wanna-build
    
    $wanna_build_dbbase = "arm/build-db"; # wanna-build DB name 
    $admin_mail='kmuto_builddarm@example.jp'; # address to send an admin log
    
    # don't remove this, Perl needs it
    
    1;
    
  2. vi ~/.sbuildrc.
    $mailto = 'kmuto_buildd@example.com,build@ftbfs.de'; # address to send a build log
    $maintainer_name = 'arm Build Daemon - Kenshi Muto <kmuto_buildd@example.com>'; # Maintainer field of built package
    $fakeroot = '/usr/bin/fakeroot';
    
  3. ssh-keygen -t dsa. Don't set passphrase.

Send and wait

Now, you're ready to build, but you don't have a permission to access wanna-build server. Send your information and ~buildd/.ssh/id_dsa.pub to the buildd coordinator.

Run

When coordinator adds your key, you can start buildd.

$ buildd

Check ~/daemon.log.

You can watch the build progress by using buildd-vlog. If you'd like to stop current sbuild, use buildd-abort.

MX

buildd/.forward

| buildd-mail-wrapper

Files

Sign and upload

buildd sends a log file to administrator's address. Administrator's reply mail will be processed by buildd-mail.

aba has nice interface for mutt MUA.

Manual build

$ cd build
$ sbuild -d unstable -v hello_2.1.1-4

(-d defines which chroot do you use, -v is verbose)

Log will be sent.

When you build a package for someone's request,

  1. Build packages by sbuild.
  2. Put log and packages somewhere.
  3. Check md5sum and size of files.
  4. Send informations of 2. and 3. to requester. (sign with gpg is better)
  5. Requester downloads and checks files and log. Then, "debsign changes-file" and dput it.

Maintenance

# cd ~buildd
# chroot chroot-unstable
# (Fix them)

binNMU

$ cd build
$ sbuild --make-binNMU="Rebuild for erase unwelcomed dependency" --binNMU=1 -d unstable -v hello_2.1.1-4

Cron sample for buildd

MAILTO=<admin mail address>
30 0,6,12,18 * * * /usr/bin/buildd-uploader
20 0,6,12,18 * * * * /usr/bin/buildd-watcher

Bug?

On my system, buildd-mail-farm-wrapper fails during fork. I disabled fork routine:

sed -e 's/\*p = 0;/exit(0);\n *p = 0;/' buildd-mail-wrapper.c.old > buildd-mail-wrapper.c

And run buildd-mail by cron.

10 * * * * /usr/bin/buildd-mail

Wanna-build handling

For example:

ssh -l wanna-build odin.fnb.maschinenbau.tu-darmstadt.de wanna-build --database=arm/build-db  --dist=experimental --list=building

MEMORANDUM

Following texts/scripts have some obsolete contexts. Under constructing...

builddセットアップ

abaドキュメントに沿ってやってみた。

http://www.nl.debian.org/devel/buildd/setting-up これ。微妙に情報が足りなかったり間違ってたり…。

さらにabaからいろいろ追加情報をもらって、動作中。

builddにroot権限与えたりしないといけないので、chroot-sidをまず作ることにした。

  1. apt-get install debootstrap
  2. mkdir -p /chroot/buildd
  3. debootstrap sid /chroot/buildd http://ftp.jp.debian.org/debian
  4. 次の行を/etc/fstabに追加。
    proc    /chroot/buildd/proc   proc    defaults        0       0
    /tmp    /chroot/buildd/tmp none bind  0       0
    
  5. mount /chroot/buildd/proc
  6. mount /chroot/buildd/tmp
  7. chroot /chroot/buildd /bin/bash

作ったchrootの中で作業開始。

  1. vi /etc/apt/sources.list
  2. 普通のapt-lineのほか、
    deb http://byhand.turmzimmer.net/ woody-byhand main
    
    も追加する。
  3. apt-get install buildd buildd-farm sbuild dupload sudo cvs debootstrap

builddユーザーの設定。

  1. adduser --disabled-password --home /org/buildd buildd
  2. cd /org/buildd
  3. install -d build mqueue -o buildd -g buildd
  4. install -d chroots -m 755
  5. install -d logs stats -o buildd -g buildd
  6. install -d secret -o buildd -g adm -m 2770
  7. install -d /var/debbuild/srcdep-lock -o buildd
  8. install -d /var/lib/sbuild/srcdep-lock -o buildd
  9. install -d bin -o buildd -g adm -m 775
  10. chown buildd /var/debbuild
  11. visudo
    buildd  ALL=(ALL) NOPASSWD:ALL
    
  12. vi ~buildd/.sbuildrc ($mailto、$maintainer_nameは適宜変更)
    $mailto = 'kmuto,build@ftbfs.de'; # (build〜はログに残すサイト。でもどうやって参照するんだろう?)
    $maintainer_name = 'arm Build Daemon - Kenshi Muto <kmuto_arm@...>';
    $fakeroot = '/usr/bin/fakeroot';
    

ビルド用chrootを作成。

  1. cd ~buildd
  2. debootstrap-farm --variant=buildd sid chroots/sid http://ftp.jp.debian.org/debian
  3. cp /etc/passwd /etc/group chroots/sid/etc/
  4. ln -s source-dependencies-unstable /etc/source-dependencies-sid-nonfree
  5. ln -s /org/buildd/chroots/sid/ build/chroot-unstable
  6. vi chroots/sid/etc/apt/sources.list
  7. chroot chroots/sid apt-get update
  8. chroot chroots/sid apt-get install fakeroot build-essential sudo debfoster
  9. chroot chroots/sid debfoster を実行。全部Enterを押す。

(mips, mipselの場合には修正版fakerootが必要)

テスト

  1. su - buildd
  2. cd build
  3. sbuild -d unstable -v hello_2.1.1-4

buildd

  1. rootにて。
  2. vi /etc/buildd.conf.farm
  3. $admin_mailに管理者ユーザーアドレス。公式wanna-buildを使うときには$sshcmdはそのまま。(ローカルwanna-buildの場合は空にする)
  4. ~builddにて。
  5. cp /etc/buildd.localconf.farm ~/buildd.conf
  6. vi ~/buildd.conf
  7. $wanna_build_userにユーザー名を指定。$wanna_build_dbbase="アーキテクチャ名/build-db" (ローカルのwanna-buildの場合はbuild-dbのみ)
  8. buildd を実行

wanna-buildマニュアル

ssh -l wanna-build odin.fnb.maschinenbau.tu-darmstadt.de wanna-build --database=arm/build-db  --dist=experimental --list=building

builddデーモン

muttの設定

/.muttrc

set from="kmuto@debian.org"
my_hdr From: Kenshi Muto <kmuto@debian.org>
send-hook '~t buildd ~s success' "set signature='' pgp_autosign=yes indent_string='' edit_headers=yes editor='~/bin/buildd-script.sh' fast_reply=yes pgp_create_traditional=yes include=yes pgp_sign_as=kmuto@debian.org"
send-hook '!(~t buildd ~s success)' "set pgp_autosign=no indent_string='> ' editor=vim fast_reply=no pgp_create_traditional=no include=yes set signature=''"
set editor="vim"

/bin/buildd-script.sh

#!/bin/bash +e

cat $1 > ~/Mail/buildd/orig
if [ -n "$(grep Subject $1 | grep '(')" ]; then
  egrep -v '^Fcc:' $1 | sed -e '9,/\.changes\:$/d' -e '/^\*/,$d' > ~/Mail/buildd/changes
else
  egrep -v '^Fcc:' $1 | sed -e '10,/\.changes\:$/d' -e '/^\*/,$d' > ~/Mail/buildd/changes
fi
cat ~/Mail/buildd/changes > $1

script1 (outside from chroot)

#!/bin/sh
MIRROR=http://ftp.jp.debian.org/debian
apt-get install debootstrap dchroot
mkdir -p /chroot/buildd
debootstrap sid /chroot/buildd $MIRROR
cat >> /etc/fstab <<EOT
proc    /chroot/buildd/proc   proc    defaults        0       0
/tmp    /chroot/buildd/tmp none bind  0       0
EOT
mount /chroot/buildd/proc
mount /chroot/buildd/tmp
cat > /chroot/buildd/etc/apt <<EOT
deb $MIRROR sid main contrib non-free
deb-src $MIRROR sid main contrib non-free
EOT
chroot /chroot/buildd apt-get update
chroot /chroot/buildd apt-get install build-essential
echo "buildd /chroot/buildd" >> /etc/dchroot.conf

script2 (inside chroot, as root (sudo dchroot -c buildd) )

#!/bin/sh
ARCH=$(dpkg --print-architecture)
ADMINMAIL="kmuto"
FULLNAME="Kenshi Muto"
SIGNMAIL="buildd-$ARCH@topstudio.co.jp"
MIRROR=http://ftp.jp.debian.org/debian

cat >> /etc/apt/sources.list <<EOT
deb http://db.debian.org debian-admin/
EOT
adduser --disabled-password --home /org/buildd buildd
apt-get update
apt-get install buildd sbuild sudo cvs quinn-diff debootstrap ssh
cd /org/buildd
install -d build mqueue -o buildd -g buildd
install -d chroots -m 755
install -d logs stats -o buildd -g buildd
install -d secret -o buildd -g adm -m 2770
install -d /var/debbuild/srcdep-lock -o buildd
install -d /var/lib/sbuild/srcdep-lock -o buildd
install -d bin -o buildd -g adm -m 775
chown buildd /var/debbuild
chmod u+w /etc/sudoers
cat >> /etc/sudoers <<EOT
buildd  ALL=(ALL) NOPASSWD:ALL
EOT
chmod u-w /etc/sudoers
cat > ~buildd/.sbuildrc <<EOT
\$mailto = '$ADMINMAIL';
\$maintainer_name = '$ARCH Build Daemon - $FULLNAME <$SIGNMAIL>';
\$fakeroot = '/usr/bin/fakeroot';
%dist_order = ( 'oldstable-security' => 0, stable => 1,
  'stable-security' => 1, testing => 2, 'testing-security' => 2,
  unstable => 3, 'woody-backports.org' => 5,
  'sarge-backports.org' => 6, experimental => 7 );
@take_from_dists = qw(experimental unstable);
EOT
chown buildd:buildd ~buildd/.sbuildrc

cd ~buildd

install -d chroots/sid/var/debbuild/srcdep-lock -o buildd
install -d chroots/sid/build/buildd -m 777
debootstrap --variant=buildd sid chroots/sid $MIRROR
cp /etc/passwd /etc/group chroots/sid/etc/
ln -s source-dependencies-unstable /etc/source-dependencies-sid-nonfree
ln -s /org/buildd/chroots/sid/ build/chroot-unstable
grep -v db.debian.org /etc/apt/sources.list > chroots/sid/etc/apt/sources.list
chroot chroots/sid apt-get update
chroot chroots/sid apt-get install fakeroot build-essential sudo debfoster

install -d chroots/experimental/var/debbuild/srcdep-lock -o buildd
install -d chroots/experimental/build/buildd -m 777
debootstrap --variant=buildd sid chroots/experimental $MIRROR
cp /etc/passwd /etc/group chroots/experimental/etc/
ln -s source-dependencies-unstable-experimental /etc/source-dependencies-experimental-nonfree
ln -s source-dependencies-unstable /etc/source-dependencies-experimental
ln -s /org/buildd/chroots/experimental/ build/chroot-experimental
grep -v db.debian.org /etc/apt/sources.list > chroots/experimental/etc/apt/sources.list
echo "deb-src $MIRROR ../project/experimental main contrib non-free" >> chroots/experimental/etc/apt/sources.list
chroot chroots/experimental apt-get update
chroot chroots/experimental apt-get install fakeroot build-essential sudo debfoster

chroot chroots/sid debfoster
chroot chroots/experimental debfoster

script3 (as buildd)

#!/bin/sh
ARCH=$(dpkg --print-architecture)
ADMINMAIL="kmuto"
CHANGESMAIL="kmuto"
MIRROR=http://ftp.jp.debian.org/debian
HOSTNAME=$(hostname)

cd ~
cvs -d :pserver:anon@cvs.linux-m68k.org:/CVS login
cvs -d :pserver:anon@cvs.linux-m68k.org:/CVS co wanna-build
cd wanna-build
mv buildd-mail-wrapper.c buildd-mail-wrapper.c.old
sed -e 's/\*p = 0;/exit(0);\n *p = 0;/' buildd-mail-wrapper.c.old > buildd-mail-wrapper.c
make buildd-mail-wrapper

mv wanna-build wanna-build.old
sed -e "s/\$| = 1;/@distributions = qw(oldstable-security stable testing unstable stable-security testing-security experimental);\n%dist_order = ( 'oldstable-security' => 0, stable => 1, 'stable-security' => 1, testing => 2, 'testing-security' => 2, unstable => 3, experimental => 7 );\n\$| = 1;/" wanna-build.old > wanna-build
chmod 755 wanna-build

cp /usr/bin/sbuild sbuild.old
sed -e "s/@main::toolchain_pkgs = ();/%main::dist_order = ( 'oldstable-security' => 0, stable => 1, 'stable-security' => 1, testing => 2, 'testing-security' => 2, unstable => 3, experimental => 7 );\n@main::toolchain_pkgs = ();/" sbuild.old > sbuild

cp do-merge-packages do-merge-packages.old
sed -e 's/@dists = qw(stable frozen unstable);/@dists = qw(stable frozen unstable experimental);/' -e "s/my \$f = \"\$conf::pkgs_source\/dists\/\$dist\/\$sect\/\$bindir\/Packages.gz\";/my \$f = \"\$conf::pkgs_source\/dists\/\$dist\/\$sect\/\$bindir\/Packages.gz\";\n\$f = \"\$conf::pkgs_source\/project\/\$dist\/\$sect\/\$bindir\/Packages.gz\" if (\$dist eq 'experimental');/"  -e "s/my \$f = \"\$conf::pkgs_source\/dists\/\$dist\/\$sect\/sources\/Sources.gz\";/my \$f = \"\$conf::pkgs_source\/dists\/\$dist\/\$sect\/source\/Sources.gz\";\n\$f = \"\$conf::pkgs_source\/project\/\$dist\/\$sect\/source\/Sources.gz\" if (\$dist eq 'experimental');/" do-merge-packages.old > do-merge-packages

cp do-merge-quinn do-merge-quinn.old
sed -e 's/@dists = qw(stable frozen unstable);/@dists = qw(stable frozen unstable experimental);/' do-merge-quinn.old > do-merge-quinn

cp wanna-build-statistics wanna-build-statistics.old
sed -e 's/qw(stable frozen unstable)/qw(stable frozen unstable experimental)/' wanna-build-statistics.old > wanna-build-statistics

sudo cp sbuild buildd-mail-wrapper wanna-build wanna-build-mail.pl wanna-build-statistics do-merge-packages do-merge-quinn do-push check-old-builds /usr/bin
sudo cp FetchFile.pm /usr/lib/perl5

cp wanna-build.conf.local wanna-build.conf.local.old
sed -e "s#^1;#\$basedir = \"\/org\/buildd\";\n\$db_maint = '$ADMINMAIL';\n\$notforus_maint = '$ADMINMAIL';\n\$log_mail = '$CHANGESMAIL';\n\$stat_mail = '$CHANGESMAIL';\n\$web_stats = \"\/org\/buildd\/stats\/stats.txt\";\n@sections = qw(main contrib non-free);\n\$pkgs_source = \"$MIRROR\";\n\$quinn_source = \"\/org\/buildd\/quinn.diff\";\n1;#" wanna-build.conf.local.old > wanna-build.conf.local
sudo cp wanna-build.conf wanna-build.conf.local /etc

cp abort-current-build abort-current-build.old
sed -e 's/\/bin\/sh dpkg-buildpackage/\/bin\/sh \/usr\/bin\/dpkg-buildpackage/'  abort-current-build.old > abort-current-build
cp vlog abort-current-build finish-build ~/bin

mkdir ~/old-logs ~/lib
touch ~/build-db-stable ~/build-db-frozen ~/build-db-testing ~/build-db-unstable ~/build-db-experimental

do-merge-packages

mkdir ~/quinn.diff
mkdir -p ~/quinn.diff/$ARCH/main/
mkdir -p ~/quinn.diff/$ARCH/contrib/
mkdir -p ~/quinn.diff/$ARCH/non-free/

HOST=$(echo $MIRROR | sed -e 's/http:\/\///')

cat > ~/bin/getfiles <<EOT
#!/bin/sh
cd ~/quinn.diff

host=$HOST
for a in $ARCH; do
  for v in unstable testing stable; do
    for m in main contrib non-free; do
      wget -m http://\$host/dists/\$v/\$m/binary-\$a/Packages.gz
      wget -m http://\$host/dists/\$v/\$m/source/Sources.gz
      zcat \$host/dists/\$v/\$m/binary-\$a/Packages.gz > Packages
      zcat \$host/dists/\$v/\$m/source/Sources.gz > Sources
      quinn-diff -p Packages -s Sources > \$a/\$m/\$v
    done
  done
  for m in main contrib non-free; do
    wget -m http://\$host/project/experimental/\$m/binary-\$a/Packages.gz
    wget -m http://\$host/project/experimental/\$m/source/Sources.gz
    zcat \$host/project/experimental/\$m/binary-\$a/Packages.gz > Packages
    zcat \$host/project/experimental/\$m/source/Sources.gz > Sources
    quinn-diff -p Packages -s Sources > \$a/\$m/experimental
  done
done
EOT
chmod 755 ~/bin/getfiles
~/bin/getfiles
do-merge-quinn

cd ~
zcat /usr/share/doc/buildd/examples/buildd.conf.gz > buildd.conf.old
sed -e "s#^1;#@take_from_dists = qw(experimental unstable);\n\$admin_mail = '$ADMINMAIL';\n\$statistics_mail = '$ADMINMAIL';\n\$wanna_build_user = \"buildd_$ARCH-$HOSTNAME\";\n\$wanna_build_dbbase = \"build-db\";\n\$sshcmd = \"\";\n1;#" buildd.conf.old > buildd.conf

crontab - <<EOT
MAILTO=$ADMINMAIL
# 0 1 * * * /usr/bin/buildd-uploader
10 2 * * * /org/buildd/bin/getfiles && /usr/bin/do-push
10 * * * * /usr/bin/buildd-mail
20 * * * * /usr/bin/buildd-watcher
EOT

echo "| \"buildd-mail-wrapper\"" > ~/.forward

ssh-keygen -t dsa
cd build
exec buildd

その他

wanna-buildの設定

  1. cd ~buildd
  2. cvs -d :pserver:anon@cvs.linux-m68k.org:/CVS login (パスワード空)
  3. cvs -d :pserver:anon@cvs.linux-m68k.org:/CVS co wanna-build
  4. cd wanna-build
  5. vi buildd-mail-wrapper.c *p=0となっているあとに、
    exit(0);
    
    を追加。
  6. make
  7. sudo cp buildd-mail-wrapper wanna-build wanna-build-mail.pl wanna-build-statistics do-merge-packages do-merge-quinn do-push check-old-builds /usr/bin
  8. cp vlog abort-current-build finish-build ~/bin
  9. sudo cp FetchFile.pm /usr/lib/perl5
  10. sudo cp wanna-build.conf wanna-build.conf.local /etc
  11. sudo vi /etc/wanna-build.conf.local
    $basedir="/org/buildd";
    $db_maint = "kmuto";
    $notforus_maint = "kmuto";
    $log_mail = "kmuto"; # 本当はm68k-changes@nocrew.orgなど
    $stat_mail = "kmuto"; # 同上
    $web_stats = "/org/buildd/stats/stats.txt"; # /var/www以下のファイルにしてwebから見られるようにしてもよい
    @sections = qw(main contrib non-free);
    $pkgs_source = "http://ftp.jp.debian.org/debian";
    #$quinn_source = "http://ftp.uni-erlangen.de/pub/Linux/LOCAL/Debian-support/quinn-diff"; #http://buildd.debian.org/quinn-diff/にあるのだが古い。アカウント貰わないとだめ
    $quinn_source = "/org/buildd/quinn.diff"
    1;
    
  12. mkdir ~/old-logs ~/lib
  13. touch ~/build-db-stable ~/build-db-frozen ~/build-db-testing ~/build-db-unstable
  14. do-merge-packages を実行。
  15. lib/merge.logを確認
  16. 無理矢理needs-buildを作るには、wanna-build --export outとかして、outを編集。InstalledとなっているのをNeeds-Buildとしてやればよい。あとはwanna-build --import outで取り込み。

quinn-diff

正式builddにするには、buildd.debian.orgから取ってくるようにしたほうがよいすな。

  1. mkdir ~/quinn.diff
  2. mkdir -p ~/quinn.diff/アーキテクチャ名/main/
  3. mkdir -p ~/quinn.diff/アーキテクチャ名/contrib/
  4. mkdir -p ~/quinn.diff/アーキテクチャ名/non-free/
  5. unstableのPackages.gz、Sources.gzを手動でダウンロードしておき、gzip -dで展開
  6. quinn-diff -p Packages -s Sources > ~/quinn.diff/アーキテクチャ名/main/unstable
  7. /etc/wanna-build.conf.localの$quinn_sourceを/org/buildd/quinn.diffに変更
  8. do-merge-quinn で反映。

たとえばこんなスクリプトとか(quinn.diffの中に置いて実行)。

#!/bin/sh
host=ftp.jp.debian.org/debian
for a in arm; do # アーキテクチャ名を入れる
  for v in unstable testing stable; do
    for m in main contrib non-free; do
      wget -m http://$host/dists/$v/$m/binary-$a/Packages.gz
      wget -m http://$host/dists/$v/$m/source/Sources.gz
      zcat $host/dists/$v/$m/binary-$a/Packages.gz > Packages
      zcat $host/dists/$v/$m/source/Sources.gz > Sources
      quinn-diff -p Packages -s Sources > $a/$m/$v
    done
  done
  for m in main contrib non-free; do
    wget -m http://$host/project/experimental/$m/binary-$a/Packages.gz
    wget -m http://$host/project/experimental/$m/source/Sources.gz
    zcat $host/project/experimental/$m/binary-$a/Packages.gz > Packages
    zcat $host/project/experimental/$m/source/Sources.gz > Sources
    quinn-diff -p Packages -s Sources > $a/$m/experimental
  done
done

Last modified : 2008/03/04 16:06:21 JST