id-pbuild-all invokes sudo itself. Note about sudosers
[git-tools-moved-to-github.git] / id-deb-build / id-pbuild-all.sh
1 #!/bin/sh
2 # This script builds Debian packages for one or more distributions
3 # in i386/amd64 architectures. It uses pbuilder. pbuilder requires root
4 # privilege and is invoked with sudo.
5 #
6 # In order to avoid having to type-in the password for it, you might
7 # use something like this in sudoers 
8 #  user ALL=NOPASSWD,SETENV: /usr/sbin/pbuilder
9 # where user is your username.
10
11 usage()
12 {
13     cat <<EOF
14 Usage: id-pbuild-all.sh [OPTIONS]
15 Options:
16         [--debian=distros]
17         [--ubuntu=distros]
18         [--update=true|false]
19         [--upload]
20         [--concurrency=N]
21 EOF
22     exit $1
23 }
24
25 # things that might be set by options
26 upload=false
27 update=true
28 do_help=false
29 concurrency=4
30
31 if test -f IDMETA; then
32     . ./IDMETA
33 fi
34 while test $# -gt 0; do
35     case "$1" in
36         -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
37         *) optarg= ;;
38     esac
39     
40     case $1 in
41         --ubuntu=*)
42             UBUNTU_DIST=$optarg
43             ;;
44         --debian=*)
45             DEBIAN_DIST=$optarg
46             ;;
47         --update=*)
48             update=$optarg
49             ;;
50         --concurrency=*)
51             concurrency=$optarg
52             ;;
53         --upload)
54             upload=true
55             ;;
56         -*)
57             do_help=yes
58             ;;
59     esac
60     shift
61 done
62
63 if test "$do_help" = "yes"; then
64     usage 1 1>&2
65 fi
66
67 if test -d deb-src; then
68     cd deb-src
69 fi
70 for f in *.dsc; do
71     if test -f "$f"; then
72         PKG=$f
73     fi
74 done
75 if test -z "$PKG"; then
76     echo "Specify .dsc file"
77     exit 1
78 fi
79 if test ! -e "$PKG"; then
80     echo "${PKG} does not exist"
81     exit 1
82 fi
83 PBUILDER=/usr/sbin/pbuilder
84 PRODUCT=`echo *.dsc|sed 's/_.*//g'`
85 ARCHS="i386 amd64"
86 echo "Dsc $PKG . Product $PRODUCT"
87 echo "Ubuntu distros: $UBUNTU_DIST"
88 echo "Debian distros: $DEBIAN_DIST"
89 if $upload; then
90     for dist in ${UBUNTU_DIST}; do
91         scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/ubuntu/${dist}
92     done
93     for dist in ${DEBIAN_DIST}; do
94         scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/debian/${dist}
95     done
96     echo "Remember to update APT on ftp.indexdata.dk"
97     echo "cd git-tools/update-archive"
98     echo "sudo su"
99     echo "./update-archive.sh"
100     exit 0
101 fi
102 i=0
103 date
104 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
105     for arch in ${ARCHS}; do
106         rm -fr ${dist}-${arch}
107         (
108             if test ! -f /var/cache/pbuilder/${dist}-${arch}-base.tgz; then
109                 sudo DIST=$dist ARCH=$arch $PBUILDER create
110             fi
111             if $update; then
112                 sudo DIST=$dist ARCH=$arch $PBUILDER update --override-config
113             fi
114             sudo DIST=$dist ARCH=$arch $PBUILDER --build $PKG
115             ) >${dist}-${arch}.log 2>&1 &
116         i=`expr $i + 1`
117         if test $i -eq $concurrency; then
118             i=0
119             wait
120         fi
121     done
122 done
123 wait
124 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
125     for arch in ${ARCHS}; do
126         if test -f ${dist}-${arch}/*.dsc; then
127             :
128         else
129             echo "No .dsc file for ${dist}-${arch}"
130             exit 1
131         fi
132     done
133 done
134 date
135 echo "Done"
136 # Local Variables:
137 # mode:shell-script
138 # sh-indentation: 2
139 # sh-basic-offset: 4
140 # End: