chromium/update: Update Debian binaries as well.

This cases the Debian binaries to be fetched from Google's official APT
repository. If we aren't able to find a package from the APT repository,
it's very likely that it already got deleted upstream and we need to
fallback to mirrors instead.

Unfortunately, we can't use mirrors for updating, because Google doesn't
sign the Debian packages themselves and only the release files.

We're going to hook it into a Chromium updater soon, making the sha256
hashes publicly available, so if it is missing, we can still put the
sha256 manually into sources.nix, without risking anything by blindly
fetching from one of the provided mirrors.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
This commit is contained in:
aszlig 2014-03-27 09:40:21 +01:00
parent 2741523926
commit 6184ee89fe
No known key found for this signature in database
GPG Key ID: D0EBD0EC8C2DC961
2 changed files with 79 additions and 10 deletions

View File

@ -1,7 +1,7 @@
{ system ? builtins.currentSystem }: { system ? builtins.currentSystem }:
let let
inherit (import <nixpkgs> {}) lib writeText; inherit (import <nixpkgs> {}) lib writeText stdenv;
sources = if builtins.pathExists ./sources.nix sources = if builtins.pathExists ./sources.nix
then import ./sources.nix then import ./sources.nix
@ -10,21 +10,34 @@ let
bucketURL = "http://commondatastorage.googleapis.com/" bucketURL = "http://commondatastorage.googleapis.com/"
+ "chromium-browser-official"; + "chromium-browser-official";
debURL = "https://dl.google.com/linux/chrome/deb/pool/main/g";
# Untrusted mirrors, don't try to update from them!
debMirrors = [
"http://95.31.35.30/chrome/pool/main/g"
"http://mirror.pcbeta.com/google/chrome/deb/pool/main/g"
];
tryChannel = channel: let tryChannel = channel: let
chanAttrs = builtins.getAttr channel sources; chan = builtins.getAttr channel sources;
in if sources != null then '' in if sources != null then ''
oldver="${chanAttrs.version}"; oldver="${chan.version}";
echo -n "Checking if $oldver ($channel) is up to date..." >&2; echo -n "Checking if $oldver ($channel) is up to date..." >&2;
if [ "x$(get_newest_ver "$version" "$oldver")" != "x$oldver" ]; if [ "x$(get_newest_ver "$version" "$oldver")" != "x$oldver" ];
then then
echo " no, getting sha256 for new version $version:" >&2; echo " no, getting sha256 for new version $version:" >&2;
sha256="$(nix-prefetch-url "$url")" || return 1; sha256="$(prefetch_sha "$channel" "$version")" || return 1;
else else
echo " yes, keeping old sha256." >&2; echo " yes, keeping old sha256." >&2;
sha256="${chanAttrs.sha256}"; sha256="${chan.sha256}";
${if (chan ? sha256bin32 && chan ? sha256bin64) then ''
sha256="$sha256.${chan.sha256bin32}.${chan.sha256bin64}";
'' else ''
sha256="$sha256.$(prefetch_deb_sha "$channel" "$version")";
''}
fi; fi;
'' else '' '' else ''
sha256="$(nix-prefetch-url "$url")" || return 1; sha256="$(prefetch_sha "$channel" "$version")" || return 1;
''; '';
caseChannel = channel: '' caseChannel = channel: ''
@ -35,16 +48,62 @@ in rec {
getChannel = channel: let getChannel = channel: let
chanAttrs = builtins.getAttr channel sources; chanAttrs = builtins.getAttr channel sources;
in { in {
url = "${bucketURL}/chromium-${chanAttrs.version}.tar.xz"; main = {
inherit (chanAttrs) version sha256; url = "${bucketURL}/chromium-${chanAttrs.version}.tar.xz";
inherit (chanAttrs) version sha256;
};
binary = let
pname = if channel == "dev"
then "google-chrome-unstable"
else "google-chrome-${channel}";
arch = if stdenv.is64bit then "amd64" else "i386";
relpath = "${pname}/${pname}_${chanAttrs.version}-1_${arch}.deb";
in lib.optionalAttrs (chanAttrs ? sha256bin64) {
urls = map (url: "${url}/${relpath}") ([ debURL ] ++ debMirrors);
sha256 = if stdenv.is64bit
then chanAttrs.sha256bin64
else chanAttrs.sha256bin32;
inherit (chanAttrs) version;
};
}; };
updateHelpers = writeText "update-helpers.sh" '' updateHelpers = writeText "update-helpers.sh" ''
prefetch_main_sha()
{
nix-prefetch-url "${bucketURL}/chromium-$2.tar.xz";
}
prefetch_deb_sha()
{
channel="$1";
version="$2";
case "$1" in
dev) pname="google-chrome-unstable";;
*) pname="google-chrome-$channel";;
esac;
deb_pre="${debURL}/$pname/$pname";
deb32=$(nix-prefetch-url "''${deb_pre}_$version-1_i386.deb");
deb64=$(nix-prefetch-url "''${deb_pre}_$version-1_amd64.deb");
echo "$deb32.$deb64";
return 0;
}
prefetch_sha()
{
echo "$(prefetch_main_sha "$@").$(prefetch_deb_sha "$@")";
return 0;
}
get_sha256() get_sha256()
{ {
channel="$1"; channel="$1";
version="$2"; version="$2";
url="${bucketURL}/chromium-$version.tar.xz";
case "$channel" in case "$channel" in
${lib.concatMapStrings caseChannel [ "stable" "dev" "beta" ]} ${lib.concatMapStrings caseChannel [ "stable" "dev" "beta" ]}

View File

@ -92,9 +92,19 @@ get_channel_exprs()
sha_insert "$version" "$sha256"; sha_insert "$version" "$sha256";
main="${sha256%%.*}";
deb="${sha256#*.}";
deb32="${deb%.*}";
deb64="${deb#*.}";
echo " $channel = {"; echo " $channel = {";
echo " version = \"$version\";"; echo " version = \"$version\";";
echo " sha256 = \"$sha256\";"; echo " sha256 = \"$main\";";
if [ "x${deb#*[a-z0-9].[a-z0-9]}" != "x$deb" ];
then
echo " sha256bin32 = \"$deb32\";";
echo " sha256bin64 = \"$deb64\";";
fi;
echo " };"; echo " };";
done; done;
} }