diff options
author | Mx Kookie <kookie@spacekookie.de> | 2020-10-31 19:35:09 +0100 |
---|---|---|
committer | Mx Kookie <kookie@spacekookie.de> | 2020-10-31 19:35:09 +0100 |
commit | c4625b175f8200f643fd6e11010932ea44c78433 (patch) | |
tree | bce3f89888c8ac3991fa5569a878a9eab6801ccc /infra/libkookie/nixpkgs/pkgs/development/web/now-cli | |
parent | 49f735974dd103039ddc4cb576bb76555164a9e7 (diff) | |
parent | d661aa56a8843e991261510c1bb28fdc2f6975ae (diff) |
Add 'infra/libkookie/' from commit 'd661aa56a8843e991261510c1bb28fdc2f6975ae'
git-subtree-dir: infra/libkookie
git-subtree-mainline: 49f735974dd103039ddc4cb576bb76555164a9e7
git-subtree-split: d661aa56a8843e991261510c1bb28fdc2f6975ae
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/development/web/now-cli')
-rw-r--r-- | infra/libkookie/nixpkgs/pkgs/development/web/now-cli/default.nix | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/development/web/now-cli/default.nix b/infra/libkookie/nixpkgs/pkgs/development/web/now-cli/default.nix new file mode 100644 index 000000000000..3016ba4cb84b --- /dev/null +++ b/infra/libkookie/nixpkgs/pkgs/development/web/now-cli/default.nix @@ -0,0 +1,87 @@ +{ stdenv, lib, fetchurl }: +stdenv.mkDerivation rec { + pname = "now-cli"; + version = "15.8.7"; + + # TODO: switch to building from source, if possible + src = fetchurl { + url = "https://github.com/zeit/now-cli/releases/download/${version}/now-linux.gz"; + sha256 = "1x6nsn9qmsy4hk7l2dsyabc7fxkwwwl1y1852vs4dgxi8w1hax93"; + }; + + sourceRoot = "."; + unpackCmd = '' + gunzip -c $curSrc > now-linux + ''; + + buildPhase = ":"; + + installPhase = '' + mkdir $out + mkdir $out/bin + cp now-linux $out/bin/now + ''; + + # now is a node program packaged using zeit/pkg. + # thus, it contains hardcoded offsets. + # patchelf shifts these locations when it expands headers. + + # this could probably be generalised into allowing any program packaged + # with zeit/pkg to be run on nixos. + + preFixup = let + libPath = lib.makeLibraryPath [stdenv.cc.cc]; + in '' + + orig_size=$(stat --printf=%s $out/bin/now) + + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/bin/now + patchelf --set-rpath ${libPath} $out/bin/now + chmod +x $out/bin/now + + new_size=$(stat --printf=%s $out/bin/now) + + ###### zeit-pkg fixing starts here. + # we're replacing plaintext js code that looks like + # PAYLOAD_POSITION = '1234 ' | 0 + # [...] + # PRELUDE_POSITION = '1234 ' | 0 + # ^-----20-chars-----^^------22-chars------^ + # ^-- grep points here + # + # var_* are as described above + # shift_by seems to be safe so long as all patchelf adjustments occur + # before any locations pointed to by hardcoded offsets + + var_skip=20 + var_select=22 + shift_by=$(expr $new_size - $orig_size) + + function fix_offset { + # $1 = name of variable to adjust + location=$(grep -obUam1 "$1" $out/bin/now | cut -d: -f1) + location=$(expr $location + $var_skip) + + value=$(dd if=$out/bin/now iflag=count_bytes,skip_bytes skip=$location \ + bs=1 count=$var_select status=none) + value=$(expr $shift_by + $value) + + echo -n $value | dd of=$out/bin/now bs=1 seek=$location conv=notrunc + } + + fix_offset PAYLOAD_POSITION + fix_offset PRELUDE_POSITION + + ''; + dontStrip = true; + + + + meta = with stdenv.lib; { + homepage = "https://zeit.co/now"; + description = "The Command Line Interface for Now - Global Serverless Deployments"; + license = licenses.asl20; + platforms = platforms.linux; + maintainers = [ maintainers.bhall ]; + }; +} |