nixpkgs/pkgs/tools/security/tor/torbrowser.nix
Joachim Fasting 961164a8a7
torbrowser: explicitly set paths to torrc-defaults and tor
This patch fixes an issue introduced by b897f825942b63ab790cad9ed66c8a79cbb3fc2d
where the bundled tor fails to run.

The error message claims that it cannot communicate with tor, but what actually
happens is that tor never runs at all, because it is invoked with a non-existent
rc file.  Specifying an absolute path to the torrc-defaults file fixes the
problem.  For good measure, we specify an absolute path to the tor executable
itself as well; we want as little autodetection logic as possible.

Note that users of torbrowser *must* remove the existing `~/.torbrowser4` folder
for this to take effect, otherwise torbrowser will continue to use extension
data from the previous release (this is why some existing users were able to
successfully use the new torbrowser version, see
https://github.com/NixOS/nixpkgs/pull/15854).
2016-05-31 23:37:20 +02:00

87 lines
3.3 KiB
Nix

{ stdenv, fetchurl, makeDesktopItem
, libXrender, libX11, libXext, libXt, alsaLib, dbus, dbus_glib, glib, gtk
, atk, pango, freetype, fontconfig, gdk_pixbuf, cairo, zlib
}:
let
libPath = stdenv.lib.makeLibraryPath [
stdenv.cc.cc zlib glib alsaLib dbus dbus_glib gtk atk pango freetype
fontconfig gdk_pixbuf cairo libXrender libX11 libXext libXt
];
in
stdenv.mkDerivation rec {
name = "tor-browser-${version}";
version = "6.0";
src = fetchurl {
url = "https://archive.torproject.org/tor-package-archive/torbrowser/${version}/tor-browser-linux${if stdenv.is64bit then "64" else "32"}-${version}_en-US.tar.xz";
sha256 = if stdenv.is64bit then
"09ad2x079kaw8q7xdklgkiw3j779ann1dnvbjpf7mlr5f54ijf7n" else
"04pagchs4biw02b3wd86q1rxwsygsfagkippfsnhyykwhgy1r95m";
};
desktopItem = makeDesktopItem {
name = "torbrowser";
exec = "tor-browser";
icon = "torbrowser";
desktopName = "Tor Browser";
genericName = "Tor Browser";
comment = meta.description;
categories = "Network;WebBrowser;Security;";
};
patchPhase = ''
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" Browser/firefox
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" Browser/TorBrowser/Tor/tor
sed -e "s,./TorBrowser,$out/share/tor-browser/Browser/TorBrowser,g" -i Browser/TorBrowser/Data/Tor/torrc-defaults
'';
doCheck = true;
checkPhase = ''
echo "Checking firefox..."
LD_LIBRARY_PATH=${libPath} Browser/firefox --help 1> /dev/null
echo "Checking tor..."
LD_LIBRARY_PATH=${libPath}:Browser/TorBrowser/Tor Browser/TorBrowser/Tor/tor --help 1> /dev/null
'';
installPhase = ''
mkdir -p $out/share/tor-browser
mkdir -p $out/bin
cp -R * $out/share/tor-browser
cat > "$out/bin/tor-browser" << EOF
#! ${stdenv.shell}
unset SESSION_MANAGER
export HOME="\$HOME/.torbrowser4"
if [ ! -d \$HOME ]; then
mkdir -p \$HOME && cp -R $out/share/tor-browser/Browser/TorBrowser/Data \$HOME/ && chmod -R +w \$HOME
echo "pref(\"extensions.torlauncher.tordatadir_path\", \"\$HOME/Data/Tor/\");" >> \
~/Data/Browser/profile.default/preferences/extension-overrides.js
echo "pref(\"extensions.torlauncher.torrc-defaults_path\", \"\$HOME/Data/Tor/torrc-defaults\");" >> \
~/Data/Browser/profile.default/preferences/extension-overrides.js
echo "pref(\"extensions.torlauncher.tor_path\", \"$out/share/tor-browser/Browser/TorBrowser/Tor/tor\");" >> \
~/Data/Browser/profile.default/preferences/extension-overrides.js
fi
export FONTCONFIG_PATH=\$HOME/Data/fontconfig
export LD_LIBRARY_PATH=${libPath}:$out/share/tor-browser/Browser/TorBrowser/Tor
exec $out/share/tor-browser/Browser/firefox --class "Tor Browser" -no-remote -profile ~/Data/Browser/profile.default "\$@"
EOF
chmod +x $out/bin/tor-browser
mkdir -p $out/share/applications
cp $desktopItem/share/applications"/"* $out/share/applications
mkdir -p $out/share/pixmaps
cp Browser/browser/icons/mozicon128.png $out/share/pixmaps/torbrowser.png
'';
meta = with stdenv.lib; {
description = "Tor Browser Bundle";
homepage = https://www.torproject.org/;
platforms = platforms.linux;
maintainers = with maintainers; [ offline matejc doublec thoughtpolice joachifm ];
};
}