]> git.decadent.org.uk Git - dak.git/blob - scripts/debian/byhand-di
dinstall
[dak.git] / scripts / debian / byhand-di
1 #!/bin/sh -ue
2
3 if [ $# -lt 4 ]; then
4         echo "Usage: $0 filename version arch changes_file"
5         exit 1
6 fi
7
8 TARBALL="$1"    # Tarball to read, compressed with gzip
9 VERSION="$2"
10 ARCH="$3"
11 CHANGES="$4"    # Changes file for the upload
12
13 error() {
14         echo "$*"
15         exit 1
16 }
17
18 # Check validity of version number
19 # Expected are: YYYYMMDD, YYYYMMDD.x, YYYYMMDD<suite>x
20 if ! echo "$VERSION" | grep -Eq "^[0-9]{8}(|(\.|[a-z]+)[0-9]+)$"; then
21         error "Invalid version: '$VERSION'"
22 fi
23
24 # Get the target suite from the Changes file
25 # NOTE: it may be better to pass this to the script as a parameter!
26 SUITE="$(grep "^Distribution:" "$CHANGES" | awk '{print $2}')"
27 case $SUITE in
28     "")
29         error "Error: unable to determine suite from Changes file"
30         ;;
31     unstable|sid)
32         : # nothing to do
33         ;;
34     *)
35         SUITE="${SUITE}-proposed-updates"
36         ;;
37 esac
38
39 # This must end with /
40 TARGET="/srv/ftp.debian.org/ftp/dists/$SUITE/main/installer-$ARCH/"
41
42 # Check validity of the target directory
43 # This could fail, for example for new architectures; doing
44 # a regular BYHAND is safer in that case
45 if [ ! -d "$TARGET" ]; then
46         mkdir -p "$TARGET"
47 fi
48 # Check that there isn't already a directory for this version
49 if [ -d "$TARGET/$VERSION" ]; then
50         error "Directory already exists: $TARGET/$VERSION"
51 fi
52
53 # We know all data to be in ./installer-<arch>/<version>; see if there's
54 # anything else in the tarball except that and the 'current' symlink
55 if tar tzf "$TARBALL" | \
56    grep -Eqv "^\./(installer-$ARCH/($VERSION/.*|current|)|)$"; then
57         error "Tarball contains unexpected contents"
58 fi
59
60 # Create a temporary directory where to store the images
61 umask 002
62 TMPDIR="$(mktemp -td byhand-di.XXXXXX)"
63
64 # If we fail somewhere, cleanup the temporary directory
65 cleanup() {
66         rm -rf "$TMPDIR"
67 }
68 trap cleanup EXIT
69
70 # Extract the data into the temporary directory
71 tar xzf "$TARBALL" --directory="$TMPDIR" "./installer-$ARCH/"
72
73 # Check the 'current' symlink
74 if [ ! -L $TMPDIR/installer-$ARCH/current ]; then
75         error "Missing 'current' symlink"
76 elif [ X"$(readlink "$TMPDIR/installer-$ARCH/current")" != X"$VERSION" ]; then
77         error "Incorrect 'current' symlink"
78 fi
79
80 # We should have an MD5SUMS file; use that for a final check
81 if [ -r "$TMPDIR/installer-$ARCH/$VERSION/images/MD5SUMS" ]; then
82         (
83                 cd "$TMPDIR/installer-$ARCH/$VERSION/images"
84                 md5sum -c --status MD5SUMS || error "Error while checking MD5SUMS"
85         )
86 else
87         error "Missing MD5SUMS file"
88 fi
89
90 # Move the data to the final location
91 mv "$TMPDIR/installer-$ARCH/$VERSION" "$TARGET"
92 mv "$TMPDIR/installer-$ARCH/current"  "$TARGET"
93
94 # Fixup permissions
95 find "$TARGET/$VERSION" -type d -exec chmod 755 {} +
96 find "$TARGET/$VERSION" -type f -exec chmod 644 {} +
97
98 # Make sure nothing symlinks outside of the ftpdir
99 # Shouldnt happen, but better be sure.
100 symlinks -d -r /srv/ftp.debian.org/ftp
101
102 trap - EXIT
103 cleanup
104
105 exit 0