-
Notifications
You must be signed in to change notification settings - Fork 0
/
build-deb-packages.sh
executable file
·127 lines (105 loc) · 3.14 KB
/
build-deb-packages.sh
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
#!/bin/bash
_banner() {
local PKG_PATH
PKG_PATH=$1
WIDTH=$2
test -z "$WIDTH" && WIDTH=30
printf -- =%.0s $(seq 1 $WIDTH) && echo
echo "Building '$PKG_PATH'"
printf -- =%.0s $(seq 1 $WIDTH) && echo
}
_build_pkg() {
local TMP_DIR PKG_PATH CHANGELOG PKG_NAME PKG_VERSION TARBALL_FNAME OUTPUT_DIR
PKG_PATH="$1"
_banner "$PKG_PATH"
OUTPUT_DIR="$2"
echo "OUTPUT_DIR=$OUTPUT_DIR"
# Create temporary storage.
TMP_DIR="$(mktemp -d)" || return
echo "TMP_DIR=$TMP_DIR"
# Check if `changelog` exists.
CHANGELOG="$PKG_PATH/debian/changelog"
echo "CHANGELOG=$CHANGELOG"
test -f "$CHANGELOG" || {
echo "ERROR: '$CHANGELOG' is not a regular file."
return
}
# Figure out package name.
PKG_NAME=$(
dpkg-parsechangelog \
--file "$PKG_PATH/debian/changelog" \
--show-field Source
)
echo "PKG_NAME=$PKG_NAME"
test -n "$PKG_NAME" || {
echo "ERROR: Cannot find the field 'Source' in '$CHANGELOG'."
return
}
# Figure out package version.
dpkg-parsechangelog \
--file "$PKG_PATH/debian/changelog" \
--show-field Version >"$TMP_DIR/pkg_full_version" || return
PKG_FULL_VERSION=$(cat "$TMP_DIR/pkg_full_version")
echo "PKG_FULL_VERSION=$PKG_FULL_VERSION"
grep "-" <"$TMP_DIR/pkg_full_version" || {
echo "ERROR: Cannot find '-' in version string 'PKG_FULL_VERSION'."
return
}
PKG_VERSION=$(
cut -d "-" -f 1 <"$TMP_DIR/pkg_full_version"
)
echo "PKG_VERSION=$PKG_VERSION"
test -n "$PKG_VERSION" || {
echo "ERROR: Cannot find the field 'Version' in '$CHANGELOG'."
return
}
# Copy the source files.
rsync -r -v "$PKG_PATH" "$TMP_DIR" || return
# Create the tarball.
TARBALL_FNAME="${PKG_NAME}_${PKG_VERSION}.orig.tar.xz"
echo "TARBALL_FNAME=$TARBALL_FNAME"
(
cd "$TMP_DIR" &&
tar --exclude=debian -cJf "$TARBALL_FNAME" "$PKG_NAME"
) || return
# Build the package.
(
cd "$TMP_DIR/$PKG_NAME" &&
debuild -us -uc
) || return
# Copy the built artifacts to the output directory.
(
cd "$TMP_DIR" &&
cp -v ./*.deb "$OUTPUT_DIR" &&
cp -v ./*.build "$OUTPUT_DIR" &&
cp -v ./*.buildinfo "$OUTPUT_DIR" &&
cp -v ./*.changes "$OUTPUT_DIR" &&
cp -v ./*.debian.tar.xz "$OUTPUT_DIR" &&
cp -v ./*.dsc "$OUTPUT_DIR" &&
cp -v ./*.orig.tar.xz "$OUTPUT_DIR"
) || return
# Remove the temporary storage on success. We don't remove the temporary
# storage on failure so we can debug the code.
rm -rf "$TMP_DIR" || return
}
_build_packages() {
local PKG_PATHS
PKG_PATHS=$1
for PKG_PATH in $PKG_PATHS; do
# Create the output directory.
mkdir -p "$PWD/build/$PKG_PATH" || return
_build_pkg "$PWD/$PKG_PATH" "$PWD/build/$PKG_PATH" || return
done
}
PKG_PATHS="
python/ywen
python/secret-file
python/tex-pkg
openvpn-utils
pyinterpreter
"
_build_packages "$PKG_PATHS" || {
echo "Build failed!"
exit
}
echo "Build succeeded!"