diff --git a/INSTALL b/INSTALL index 1007b431fe..ddb790b0b1 100644 --- a/INSTALL +++ b/INSTALL @@ -23,12 +23,20 @@ If it doesn't build for you: Lastly, check out https://www.torproject.org/docs/faq#DoesntWork -An example of how to build a mostly static Tor: +How to do static builds of tor: -Libevent should be built with: -% ./configure --disable-shared --enable-static --with-pic +Tor supports linking each of the libraries it needs statically. Use the +--enable-static-X ./configure option in conjunction with the --with-X-dir +option for libevent, zlib, and openssl. For this to work sanely, libevent +should be built with --disable-shared --enable-static --with-pic, and +OpenSSL should be built with no-shared no-dso. -An example of how to build a mostly static Tor: +If you need to build tor so that system libraries are also statically linked, +use the --enable-static-tor ./configure option. This won't work on OS X +unless you build the required crt0.o yourself. It is also incompatible with +the --enable-gcc-hardening option. + +An example of how to build a mostly static tor: ./configure --enable-static-libevent \ --enable-static-openssl \ --enable-static-zlib \ @@ -36,29 +44,9 @@ An example of how to build a mostly static Tor: --with-openssl-dir=/tmp/static-tor/openssl-0.9.8r/ \ --with-zlib-dir=/tmp/static-tor/zlib-1.2.5 -An example of how to build an entirely static Tor (no Mac OS X support, sorry): +An example of how to build an entirely static tor: ./configure --enable-static-tor \ - --enable-static-libevent \ - --enable-static-openssl \ - --enable-static-zlib \ --with-libevent-dir=/tmp/static-tor/libevent-1.4.14b-stable \ --with-openssl-dir=/tmp/static-tor/openssl-0.9.8r/ \ --with-zlib-dir=/tmp/static-tor/zlib-1.2.5 -This currently does not work with --enable-gcc-hardening because of libevent issues: - -configure:6176: gcc -o conftest -D_FORTIFY_SOURCE=2 -fstack-protector-all -fwrapv -fPIE -Wstack-protector ---param ssp-buffer-size=1 -I/tmp/static-tor/libevent-1.4.14b-stable -I${top_srcdir}/src/common - -L/tmp/static-tor/libevent-1.4.14b-stable -pie conftest.c -lpthread -ldl -levent -lrt >&5 -/usr/bin/ld: /tmp/static-tor/libevent-1.4.14b-stable/libevent.a(event.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC -/tmp/static-tor/libevent-1.4.14b-stable/libevent.a: could not read symbols: Bad value - collect2: ld returned 1 exit status - configure:6176: $? = 1 - -This produces the following Tor binaries on Gnu/Linux x86-64: - -% file src/or/tor -src/or/tor: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.15, not stripped - -% ldd src/or/tor - not a dynamic executable diff --git a/changes/bug2702 b/changes/bug2702 index cd004f555f..b119f696ff 100644 --- a/changes/bug2702 +++ b/changes/bug2702 @@ -1,5 +1,5 @@ - o Minor enhancement - - Implements --enable-static-tor for configure time. Closes bug 2702. - Idea, general hackery and thoughts from Alexei Czeskis, John Gilmore, - Jacob Appelbaum. + o Minor features: + - Implements --enable-static-tor for configure time. Implements ticket + 2702. Idea, general hackery and thoughts from Alexei Czeskis, John + Gilmore, Jacob Appelbaum. diff --git a/configure.in b/configure.in index f7875df71e..b7e418050b 100644 --- a/configure.in +++ b/configure.in @@ -33,14 +33,12 @@ AC_ARG_ENABLE(static-libevent, AC_ARG_ENABLE(static-zlib, AS_HELP_STRING(--enable-static-zlib, Link against a static zlib library. Requires --with-zlib-dir)) AC_ARG_ENABLE(static-tor, - AS_HELP_STRING(--enable-static-tor, Create an entirely static Tor binary. Requires --static-openssl - --static-libevent and --static-zlib)) + AS_HELP_STRING(--enable-static-tor, Create an entirely static Tor binary. Requires --with-openssl-dir and --with-libevent-dir and --with-zlib-dir)) if test "$enable_static_tor" = "yes"; then enable_static_libevent="yes"; enable_static_openssl="yes"; enable_static_zlib="yes"; - AC_MSG_NOTICE("We're attempting to build a static Tor.") CFLAGS="$CFLAGS -static" fi @@ -527,20 +525,6 @@ else fi AC_SUBST(TOR_ZLIB_LIBS) -if test "$enable_static_tor" = "yes"; then - if test "$enable_static_libevent" = "no"; then - AC_MSG_ERROR("You must configure with --enable-static-libevent") - fi - if test "$enable_static_openssl" = "no"; then - AC_MSG_ERROR("You must configure with --enable-static-openssl") - fi - if test "$enable_static_zlib" = "no"; then - AC_MSG_ERROR("You must configure with --enable-static-zlib") - fi - AC_MSG_NOTICE("We're attempting to build a static Tor.") - CFLAGS="$CFLAGS -static" -fi - dnl Make sure to enable support for large off_t if available.