File: iso_run

package info (click to toggle)
debian-cd 3.2.3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 10,848 kB
  • sloc: sh: 6,129; perl: 4,129; makefile: 413
file content (143 lines) | stat: -rwxr-xr-x 4,094 bytes parent folder | download | duplicates (2)
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
#!/bin/bash
#
# Helper for image creation
#

# Pull in the core settings for all builds
. settings.sh
. weekly.sh
. common.sh

PUBDIRJIG=$1
RSYNC_TARGET=$2
ARCH=$3

HOSTNAME=`hostname -f`
LOCK=~/iso_run.lock
START=$(now)

# Check to see if another sync is in progress
if lockfile -! -l 43200 -r-1 "$LOCK"; then  
    echo $HOSTNAME is not doing another iso_run, lock file $LOCK exists
    exit 1
fi
trap "rm -f $LOCK > /dev/null 2>&1" exit  

COPY_START=$(now)

# Poor man's rsync, but with some local optimisations
copy_files() {
    SRC=$1
    TARGET=$2
    ARCHES=$3

    echo "Copying files for $ARCHES from $SRC to $TARGET"

    DISKTYPES="cd dvd bd dlbd 16G"
    DIRTYPES="iso jigdo list"

    # Only make torrent files and dirs for release builds
    if [ "$RELEASE_BUILD"x != ""x ] ; then
	DIRTYPES="$DIRTYPES bt"
    fi

    CURRENT=`pwd`
    cd $SRC
    for ARCH in $ARCHES
    do
        for DISKTYPE in $DISKTYPES; do
            for DIRTYPE in $DIRTYPES; do
		if [ -d $ARCH/$DIRTYPE-$DISKTYPE ]; then
                    mkdir -pv -m775 $TARGET/$ARCH.tmp/$DIRTYPE-$DISKTYPE
		fi
            done
        done

	# Copy the specific files across that we want in the
	# publishing dir
        cd $ARCH
        find . -name '*.jigdo' -o -name '*.template' \
	    -o -name '*.iso' \
	    -o -name '*.torrent' \
	    -o -name '*.list.gz' -o -name '*SUMS*' | \
            xargs tar cf - | (cd $TARGET/$ARCH.tmp/ && tar xvf -)
	
	if [ "$RELEASE_BUILD"x = ""x ] ; then
	    # Only populate the HEADER.html file for regular weekly
	    # builds; we don't want it for releases
            HUM_DATE=`date -u`
            sed "s/ARCH/$ARCH/g;s/DATE/$HUM_DATE/g" ~/build.${CODENAME}/weekly.html \
		> $TARGET/$ARCH.tmp/HEADER.html
	fi

	mkdir -pv $TARGET/$ARCH.tmp/log/$DATE
	echo "Copying logfiles from $PWD to $TARGET/$ARCH.tmp/log/$DATE:"
	cp -v $PWD/*.log $TARGET/$ARCH.tmp/log/$DATE
	ln -sfv $DATE $TARGET/$ARCH.tmp/log/success
	
	# Now clean up any directories without any real content
	# (i.e. empty dir, or just containing checksum files)
	for dir in $TARGET/$ARCH.tmp/*-* ; do
	    num=`ls -l $dir | grep -v -e SUMS -e total | wc -l`
	    if [ $num = 0 ] ; then 
		echo "Removing empty dir $dir"
		rm -rvf $dir
	    fi
	done	

        cd ..

    done
    cd $CURRENT
}

copy_files $PUBDIRJIG $RSYNC_TARGET $ARCH

echo "$START: Starting $ARCH sync from $PUBDIRJIG to $RSYNC_TARGET"
if [ -e $RSYNC_TARGET/$ARCH ] ; then
    mv -f $RSYNC_TARGET/$ARCH $RSYNC_TARGET/$ARCH.old
fi
mv $RSYNC_TARGET/$ARCH.tmp $RSYNC_TARGET/$ARCH
rm -rf $RSYNC_TARGET/$ARCH.old &

# Update the trace file now to force a sync on free.hands.com after each arch
mkdir -p $RSYNC_TARGET/trace
date -u > $RSYNC_TARGET/trace/cdimage.debian.org

# Generate the HEADER.html files in the subdirectories
~/build.${CODENAME}/generate_headers ~/build.${CODENAME}/HEADER.html.in $RSYNC_TARGET/$ARCH $ARCH

END=$(now)
echo "$ARCH synced across to $RSYNC_TARGET; started at $START, copying started at $COPY_START, ended at $END"

case $(hostname) in
    pettersson*)
	ISO_OPTIONS='--exclude .iso-wanted'
	;;
    *)
	ISO_OPTIONS='--exclude *.iso'
	;;
esac

# Publish the image
# If we're on casulana, this will push things to umu.se via rsync
# over ssh; on pettersson* we use the same script but no ssh to make
# things as similar as possible
SYNC_START=$(now)
PETOUT=${RSYNC_TARGET##${OUT_BASE}/}
echo "$START: Starting $ARCH sync from $RSYNC_TARGET/$ARCH to umu:${PETOUT}/$ARCH"
(cd $RSYNC_TARGET/$ARCH && find . -name '*.iso' > .iso-wanted)
rsync_to_umu $RSYNC_TARGET/$ARCH/ ${PETOUT}/$ARCH/ "$ISO_OPTIONS"
rsync_to_umu $RSYNC_TARGET/trace/ ${PETOUT}/trace/
publish_at_umu ${PETOUT}/$ARCH ${PETOUT}/trace
SIZE=$(du -s -BM $ISO_OPTIONS $RSYNC_TARGET/$ARCH/ | awk '{gsub("M","",$1); print $1}')
SYNC_END=$(now)
TIME_TAKEN=$(calc_time $SYNC_START $SYNC_END)
echo "$RSYNC_TARGET/$ARCH synced across to umu; started at $SYNC_START, ended at $SYNC_END; transferred $SIZE MB in $TIME_TAKEN"

case $ARCH in
    amd64|arm64) trigger_openqa $PETOUT "$(debversion)" ${DATE_BUILD/-/-w-} $ARCH ;;
esac

END=$(now)
echo "$END: Finished"