channel-scripts/mirror-nixos.sh
Eelco Dolstra 65d629a2e2 * For the NixOS channel, use the ‘tested’ aggregate job instead of the
‘tested’ view.  Views are obsolete.


git-svn-id: https://nixos.org/repos/nix/release/trunk/channels@34755 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb
2013-08-13 12:11:54 +00:00

83 lines
3.7 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#! /bin/sh -e
releaseUrl=http://hydra.nixos.org/job/nixos/trunk-combined/tested/latest-finished
releasesDir=/data/releases/nixos
channelsDir=/data/releases/channels
channelName=nixos-unstable
curl="curl --silent --show-error --fail"
wget="wget --no-verbose --content-disposition"
json=$($curl -L -H 'Accept: application/json' $releaseUrl)
releaseId=$(echo "$json" | json id)
if [ -z "$releaseId" ]; then echo "Failed to get release id"; exit 1; fi
release=$(echo "$json" | json nixname)
if [ -z "$release" ]; then echo "Failed to get release"; exit 1; fi
url=$($curl --head http://hydra.nixos.org/build/$releaseId/eval | sed 's/Location: \(.*\)\r/\1/; t; d')
if [ -z "$url" ]; then exit 1; fi
echo "release is $release (build $releaseId), eval is $url"
releaseDir=$releasesDir/$release
echo $releaseDir
if [ -d $releaseDir ]; then
echo "release already exists"
else
tmpDir=$releasesDir/.tmp-$release-$$
mkdir -p $tmpDir
echo $url > $tmpDir/src-url
$wget --directory=$tmpDir $url/job/nixos.iso_minimal.i686-linux/download
$wget --directory=$tmpDir $url/job/nixos.iso_minimal.x86_64-linux/download
$wget --directory=$tmpDir $url/job/nixos.iso_graphical.i686-linux/download
$wget --directory=$tmpDir $url/job/nixos.iso_graphical.x86_64-linux/download
$wget --directory=$tmpDir $url/job/nixos.vdi.x86_64-linux/download
perl -w ./mirror-channel.pl "$url/channel" "$tmpDir" \
nix-cache http://cache.nixos.org \
/data/releases/patches/all-patches "$url/job/nixos.channel/download/1"
# Generate the programs.sqlite database and put it in nixexprs.tar.xz.
mkdir $tmpDir/unpack
tar xfJ $tmpDir/nixexprs.tar.xz -C $tmpDir/unpack
exprDir=$(echo $tmpDir/unpack/*)
./generate-programs-index.pl "$exprDir" "$exprDir/programs.sqlite"
tar cfJ $tmpDir/nixexprs.tar.xz -C $tmpDir/unpack "$(basename "$exprDir")"
rm -rf $tmpDir/unpack
mv $tmpDir $releaseDir
fi
htaccess=$channelsDir/.htaccess-nixos
echo "Redirect /channels/$channelName http://nixos.org/releases/nixos/$release" > $htaccess.tmp
echo "Redirect /releases/nixos/channels/$channelName http://nixos.org/releases/nixos/$release" >> $htaccess.tmp
ln -sfn $releaseDir $channelsDir/$channelName # dummy symlink
mv $htaccess.tmp $htaccess
# Generate a .htaccess with some symbolic redirects to the latest ISOs.
htaccess=$releasesDir/.htaccess
echo "Redirect /releases/nixos/latest http://nixos.org/releases/nixos/$release" > $htaccess.tmp
fn=$(cd $releaseDir && echo nixos-minimal-*-i686-linux.iso)
echo "Redirect /releases/nixos/latest-iso-minimal-i686-linux http://nixos.org/releases/nixos/$release/$fn" >> $htaccess.tmp
fn=$(cd $releaseDir && echo nixos-minimal-*-x86_64-linux.iso)
echo "Redirect /releases/nixos/latest-iso-minimal-x86_64-linux http://nixos.org/releases/nixos/$release/$fn" >> $htaccess.tmp
fn=$(cd $releaseDir && echo nixos-graphical-*-i686-linux.iso)
echo "Redirect /releases/nixos/latest-iso-graphical-i686-linux http://nixos.org/releases/nixos/$release/$fn" >> $htaccess.tmp
fn=$(cd $releaseDir && echo nixos-graphical-*-x86_64-linux.iso)
echo "Redirect /releases/nixos/latest-iso-graphical-x86_64-linux http://nixos.org/releases/nixos/$release/$fn" >> $htaccess.tmp
fn=$(cd $releaseDir && echo nixos-*.vdi.*)
echo "Redirect /releases/nixos/latest-vdi-x86_64-linux http://nixos.org/releases/nixos/$release/$fn" >> $htaccess.tmp
mv $htaccess.tmp $htaccess
# Copy over to nixos.org
cd /data/releases
rsync -avR nixos hydra-mirror@nixos.org:/data/releases --exclude nixos/.htaccess --delete
rsync -avR channels/.htaccess-nixos channels/nixos-unstable nixos/.htaccess hydra-mirror@nixos.org:/data/releases
ssh nixos.org "flock -x $channelsDir/.htaccess.lock -c \"cat $channelsDir/.htaccess-nix* > $channelsDir/.htaccess\""