blob: a7a4fe3c352744b973b241e97e3a078020c577e0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
#!/bin/sh
# Input:
# distribution (default sid)
# architecture (default amd64)
# force_update (default false)
set -eu
error () {
echo "Error: $@" >&2
exit 1
}
# read pgapt config
for dir in . .. $HOME/apt.postgresql.org; do
test -f $dir/pgapt.conf || continue
. $dir/pgapt.conf
break
done
chroot="source:${distribution:=sid}-${architecture:=$(dpkg --print-architecture)}-sbuild"
chroot_path="/home/chroot/$distribution-$architecture"
set_dist_vars $distribution $architecture
# check if chroot is configured in sbuild
schroot -l | grep -q $chroot || \
error "There is no schroot definition for $chroot (run schroot-config.sh first)"
if [ "${force_update:-false}" = "false" ]; then
timeout="--timeout=10"
fi
# build package and run autopkgtests inside the chroot
# (lock against concurrent apt-get update/upgrade operations and builds)
LOCKDIR="/var/lock/sbuild-package"
if ! test -d $LOCKDIR; then
mkdir $LOCKDIR
chgrp sbuild $LOCKDIR
chmod 3775 $LOCKDIR
fi
umask 002
(
cd /
set -x
if ! flock ${timeout:-} --exclusive 9; then # lock against concurrent access
: "Chroot $chroot is locked, giving up for now"
exit
fi
# create chroot if it doesn't exist yet
if ! test -d $chroot_path; then
echo "Creating chroot in $chroot_path"
if ! test -e /usr/share/debootstrap/scripts/$distribution; then
case $DISTRO in
debian) sudo ln -sv sid /usr/share/debootstrap/scripts/$distribution ;;
ubuntu) sudo ln -sv gutsy /usr/share/debootstrap/scripts/$distribution ;;
esac
fi
sudo debootstrap --variant=buildd --arch=$architecture $distribution $chroot_path $mirror
fi
# do the update
schroot -u root -c $chroot -- sh <<-EOF
set -ex
# tell debconf and ucf not to ask any questions
export DEBIAN_FRONTEND=noninteractive
# configure dpkg and apt
test -e /etc/dpkg/dpkg.cfg.d/01unsafeio || echo force-unsafe-io | tee /etc/dpkg/dpkg.cfg.d/01unsafeio
test -e /etc/apt/apt.conf.d/20dpkg || echo 'DPkg::Options:: "--force-confnew"; DPkg::Options:: "--force-confmiss";' | tee /etc/apt/apt.conf.d/20dpkg
test -e /etc/apt/apt.conf.d/20norecommends || echo 'APT::Install-Recommends "false";' | tee /etc/apt/apt.conf.d/20norecommends
test -e /etc/apt/apt.conf.d/50i18n || echo 'Acquire::Languages { none; };' | tee /etc/apt/apt.conf.d/50i18n
test -e /etc/apt/apt.conf.d/60releaseinfo || echo 'Acquire::AllowReleaseInfoChange "true" { Suite "true"; };' | tee /etc/apt/apt.conf.d/60releaseinfo # don't complain when testing gets released as stable
rm -f /var/lib/apt/lists/*_Translation-*
# write sources lists
echo "deb $mirror $distribution main" > /etc/apt/sources.list
case $DISTRO in
ubuntu) # libossp-uuid-dev is in universe on vivid+
echo "deb $mirror $distribution universe" > /etc/apt/sources.list.d/universe.list
echo "deb $mirror $distribution-updates main universe" > /etc/apt/sources.list.d/updates.list
echo "deb $mirror $distribution-security main universe" > /etc/apt/sources.list.d/security.list
;;
*)
if [ "${dist_security:-}" ]; then
echo "deb ${security:-} ${dist_security:-} main" > /etc/apt/sources.list.d/security.list
else
echo "# no security support for $distribution/$architecture" > /etc/apt/sources.list.d/security.list
fi
;;
esac
if [ "$HAS_BACKPORTS" ]; then
echo "${mirror_backports:-}" > /etc/apt/sources.list.d/backports.list
if [ -d /var/lib/apt/backports ]; then
rm -f /var/lib/apt/lists/*backports* # clean up if last run failed
cp -al /var/lib/apt/backports/* /var/lib/apt/lists
fi
else
rm -f /etc/apt/sources.list.d/backports.list*
fi
# run apt.postgresql.org.sh to install repository key (ca-certificates for https:// repo URL)
if ! test -f /etc/apt/sources.list.d/pgdg.sources; then
apt-get install -y ca-certificates postgresql-common gnupg
echo | /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh # installed version might not know -h yet
apt-get install -y postgresql-common gnupg-
/usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -h$PGDG_MIRROR -st $distribution
fi
# add a local extra repo
if [ "${LOCAL_REPO:-}" ]; then
keyring="/etc/apt/keyrings/${LOCAL_REPO_NAME:-}.asc"
echo "deb [signed-by=\$keyring] ${LOCAL_REPO:-} $distribution main" > /etc/apt/sources.list.d/${LOCAL_REPO_NAME:-}.list
echo "deb-src [signed-by=\$keyring] ${LOCAL_REPO:-} $distribution main" >> /etc/apt/sources.list.d/${LOCAL_REPO_NAME:-}.list
echo "${LOCAL_REPO_KEY:-}" > \$keyring
cat > /etc/apt/preferences.d/${LOCAL_REPO_NAME:-}.pref << EOT
Package: *
Pin: release o=$REPO_ORIGIN
Pin-Priority: 600
EOT
fi
# try update twice because ubuntu mirrors keep acting up
apt-get -y update || { sleep 60; apt-get -y update; }
# save backports lists
rm -rf /var/lib/apt/backports /etc/apt/sources.list.d/backports.list.disabled
if [ "$HAS_BACKPORTS" ]; then
mv /etc/apt/sources.list.d/backports.list /etc/apt/sources.list.d/backports.list.disabled
mkdir -p /var/lib/apt/backports
mv /var/lib/apt/lists/*backports* /var/lib/apt/backports
fi
apt-get -y dist-upgrade
apt-get -y install debhelper # install before tweaking dh_builddeb
apt-get -y autoremove --purge
# overwrite ucf.conf (the package ships its own file)
cat > /etc/ucf.conf <<EOT
conf_force_conffnew=y
conf_force_conffmiss=y
EOT
# revert Ubuntu's default zstd compression for .debs
if dpkg-deb --help | grep zstd; then
if grep "my @dpkg_options;" /usr/bin/dh_builddeb; then
sed -i -e "s/my @dpkg_options;/my @dpkg_options = ('-Zxz');/" /usr/bin/dh_builddeb
fi
if grep "@dbgsym_dpkg_options = ('--root" /usr/bin/dh_builddeb; then
sed -i -e "s/ @dbgsym_dpkg_options = ('--root/ @dbgsym_dpkg_options = ('-Zxz', '--root/" /usr/bin/dh_builddeb
fi
fi
# install PostgreSQL
apt-get -y install postgresql-common
apt-get -y install pgdg-buildenv
apt-get -y install $CHROOT_INSTALL_PKGS # separate step to ease bootstrapping
apt-get clean
dpkg -l 'libpq*' 'newpid' 'pgdg*' 'postgresql*' '*llvm*' '*clang*' || :
EOF
) 9> $LOCKDIR/$distribution-$architecture.lock
|