diff options
Diffstat (limited to 'doc/documentation/chapters/installation.texi')
-rw-r--r-- | doc/documentation/chapters/installation.texi | 4149 |
1 files changed, 0 insertions, 4149 deletions
diff --git a/doc/documentation/chapters/installation.texi b/doc/documentation/chapters/installation.texi deleted file mode 100644 index 665f980be8..0000000000 --- a/doc/documentation/chapters/installation.texi +++ /dev/null @@ -1,4149 +0,0 @@ -@node GNUnet Installation Handbook -@chapter GNUnet Installation Handbook - -This handbook describes how to install (build, setup, compile) and -setup (configure, start) GNUnet @value{VERSION}. After following these -instructions you should be able to install and then start user-interfaces -to interact with the network. - -Note: This manual is far from complete, and we welcome contributions, be -it in the form of new chapters or insightful comments. - -@menu -* Dependencies:: -* Pre-installation notes:: -* Generic installation instructions:: -* Build instructions for Ubuntu 12.04 using Git:: -* Build instructions for software builds from source:: -* Build Instructions for Microsoft Windows Platforms:: -* Build instructions for Debian 7.5:: -* Installing GNUnet from Git on Ubuntu 14.4:: -* Build instructions for Debian 8:: -* Build instructions for macOS:: -@c * Build instructions for OpenBSD 6.2:: -* Outdated build instructions for previous revisions:: -@c * Portable GNUnet:: -* The graphical configuration interface:: -* How to start and stop a GNUnet peer:: -@end menu - -@node Dependencies -@section Dependencies -@c %**end of header - -This section lists the various known dependencies for -GNUnet @value{EDITION}. -Suggestions for missing dependencies or wrong version numbers are welcome. - -@menu -* External dependencies:: -* Optional dependencies:: -* Internal dependencies:: -@end menu - -@node External dependencies -@subsection External dependencies -@c %**end of header - -These packages must be installed before a typical GNUnet installation -can be performed: - -@itemize @bullet -@item autoconf -@item automake -@item pkg-config -@item libltdl -@item gstreamer -@item gst-plugins-base -@item perl -@item python (only 2.7 supported)@footnote{tests and gnunet-qr} -@item jansson -@item nss -@item glib -@item gmp -@item bluez -@item miniupnpc -@item gettext -@item which -@item texinfo @geq{} 5.2 -@item GNU libmicrohttpd @geq{} 0.9.30 @footnote{We recommend to build it -with a GnuTLS version that was configured with libunbound} -@item GNU libextractor @geq{} 1.0 -@item GNU libtool @geq{} 2.2 -@item GNU libunistring @geq{} 0.9.1.1 -@item GNU libidn @geq{} 1.0.0 -@item @uref{https://gnupg.org/software/libgcrypt/, GNU libgcrypt} @geq{} -@uref{https://gnupg.org/ftp/gcrypt/libgcrypt/, 1.6.0} -@item @uref{https://gnutls.org/, GnuTLS} @geq{} 3.2.7 -@footnote{We recommend to compile with libunbound for DANE support; -GnuTLS also requires GNU nettle 2.7 (update: GnuTLS 3.2.7 appears NOT -to work against GNU nettle > 2.7, due to some API updatings done by -nettle. Thus it should be compiled against nettle 2.7 -and, in case you get some error on the reference to `rpl_strerror' being -undefined, follow the instructions on -@uref{http://lists.gnupg.org/pipermail/gnutls-devel/2013-November/006588.html, this} -post (and the link inside it)).} -@item @uref{https://gnunet.org/gnurl, gnURL} libgnurl @geq{} 7.34.0 -@footnote{must be compiled after @code{GnuTLS}} -@item libglpk @geq{} 4.45 -@item @uref{http://www.openssl.org/, OpenSSL} @geq{} 1.0 -@item TeX Live @geq{} 2012, optional (for gnunet-bcd) -@item Texinfo @geq{} 5.2 (for documentation) -@item libsqlite @geq{} 3.8.0 @footnote{(note that the code will -compile and often work with lower version numbers, but you may get subtle -bugs with respect to quota management in certain rare cases); -alternatively, MySQL or Postgres can also be installed, but those -databases will require more complex configurations (not -recommended for first-time users)} -@item zlib -@end itemize - -@node Optional dependencies -@subsection Optional dependencies - -These applications must be installed for various experimental or otherwise -optional features such as @command{gnunet-conversation}, -and @command{gnunet-conversation-gtk} (most of these features are only build if you -configure GNUnet with @command{--enable-experimental}): - -@itemize @bullet -@item libpulse @geq{} 2.0, -optional (for @command{gnunet-conversation}) -@item libopus @geq{} 1.0.1, -optional (for @command{gnunet-conversation}) -@item libogg @geq{} 1.3.0, -optional (for @command{gnunet-conversation}) -@item libnss contained @command{certool} binary, -optional for convenient installation of -the GNS proxy. -@item python-zbar @geq{} 0.10, -optional (for @command{gnunet-qr}) -@item Gtk+ @geq{} 3.0, -optional (for @command{gnunet-gtk}) -@item libgladeui (must match Gtk+ version), -optional (for @command{gnunet-gtk}) -@item libqrencode @geq{} 3.0, -optional (for @command{gnunet-namestore-gtk}) -@item libpbc @geq{} 0.5.14, optional for Attribute-Based Encryption and Identity Provider functionality -@item libgabe (https://github.com/schanzen/libgabe), optional for Attribute-Based Encryption and Identity Provider functionality -@end itemize - -@node Internal dependencies -@subsection Internal dependencies - -This section tries to give an overview of what processes a typical GNUnet -peer running a particular application would consist of. All of the -processes listed here should be automatically started by -@command{gnunet-arm -s}. -The list is given as a rough first guide to users for failure diagnostics. -Ideally, end-users should never have to worry about these internal -dependencies. - -In terms of internal dependencies, a minimum file-sharing system consists -of the following GNUnet processes (in order of dependency): - -@itemize @bullet -@item gnunet-service-arm -@item gnunet-service-resolver (required by all) -@item gnunet-service-statistics (required by all) -@item gnunet-service-peerinfo -@item gnunet-service-transport (requires peerinfo) -@item gnunet-service-core (requires transport) -@item gnunet-daemon-hostlist (requires core) -@item gnunet-daemon-topology (requires hostlist, peerinfo) -@item gnunet-service-datastore -@item gnunet-service-dht (requires core) -@item gnunet-service-identity -@item gnunet-service-fs (requires identity, mesh, dht, datastore, core) -@end itemize - -@noindent -A minimum VPN system consists of the following GNUnet processes (in -order of dependency): - -@itemize @bullet -@item gnunet-service-arm -@item gnunet-service-resolver (required by all) -@item gnunet-service-statistics (required by all) -@item gnunet-service-peerinfo -@item gnunet-service-transport (requires peerinfo) -@item gnunet-service-core (requires transport) -@item gnunet-daemon-hostlist (requires core) -@item gnunet-service-dht (requires core) -@item gnunet-service-mesh (requires dht, core) -@item gnunet-service-dns (requires dht) -@item gnunet-service-regex (requires dht) -@item gnunet-service-vpn (requires regex, dns, mesh, dht) -@end itemize - -@noindent -A minimum GNS system consists of the following GNUnet processes (in -order of dependency): - -@itemize @bullet -@item gnunet-service-arm -@item gnunet-service-resolver (required by all) -@item gnunet-service-statistics (required by all) -@item gnunet-service-peerinfo -@item gnunet-service-transport (requires peerinfo) -@item gnunet-service-core (requires transport) -@item gnunet-daemon-hostlist (requires core) -@item gnunet-service-dht (requires core) -@item gnunet-service-mesh (requires dht, core) -@item gnunet-service-dns (requires dht) -@item gnunet-service-regex (requires dht) -@item gnunet-service-vpn (requires regex, dns, mesh, dht) -@item gnunet-service-identity -@item gnunet-service-namestore (requires identity) -@item gnunet-service-gns (requires vpn, dns, dht, namestore, identity) -@end itemize - -@node Pre-installation notes -@section Pre-installation notes - -Please note that in the code instructions for the installation, -@emph{#} indicates commands run as privileged root user and -@emph{$} shows commands run as unprivileged ("normal") system user. - - -@node Generic installation instructions -@section Generic installation instructions - -First, in addition to the GNUnet sources you might require downloading the -latest version of various dependencies, depending on how recent the -software versions in your distribution of GNU/Linux are. -Most distributions do not include sufficiently recent versions of these -dependencies. -Thus, a typically installation on a "modern" GNU/Linux distribution -requires you to install the following dependencies (ideally in this -order): - -@itemize @bullet -@item libgpgerror and libgcrypt -@item libnettle and libunbound (possibly from distribution), GnuTLS -@item libgnurl (read the README) -@item GNU libmicrohttpd -@item GNU libextractor -@end itemize - -Make sure to first install the various mandatory and optional -dependencies including development headers from your distribution. - -Other dependencies that you should strongly consider to install is a -database (MySQL, sqlite or Postgres). -The following instructions will assume that you installed at least sqlite. -For most distributions you should be able to find pre-build packages for -the database. Again, make sure to install the client libraries @b{and} the -respective development headers (if they are packaged separately) as well. - -You can find specific, detailed instructions for installing of the -dependencies (and possibly the rest of the GNUnet installation) in the -platform-specific descriptions, which can be found in the Index. -Please consult them now. -If your distribution is not listed, please study -@ref{Build instructions for Debian 8}, the build instructions for -Debian stable, carefully as you try to install the dependencies for your -own distribution. -Contributing additional instructions for further platforms is always -appreciated. -Please take in mind that operating system development tends to move at -a rather fast speed. Due to this you should be aware that some of -the instructions could be outdated by the time you are reading this. -If you find a mistake, please tell us about it (or even better: send -a patch to the documentation to fix it!). - -Before proceeding further, please double-check the dependency list. -Note that in addition to satisfying the dependencies, you might have to -make sure that development headers for the various libraries are also -installed. -There maybe files for other distributions, or you might be able to find -equivalent packages for your distribution. - -While it is possible to build and install GNUnet without having root -access, we will assume that you have full control over your system in -these instructions. -First, you should create a system user @emph{gnunet} and an additional -group @emph{gnunetdns}. On the GNU/Linux distributions Debian and Ubuntu, -type: - -@example -# adduser --system --home /var/lib/gnunet --group \ ---disabled-password gnunet -# addgroup --system gnunetdns -@end example - -@noindent -On other Unixes and GNU systems, this should have the same effect: - -@example -# useradd --system --groups gnunet --home-dir /var/lib/gnunet -# addgroup --system gnunetdns -@end example - -Now compile and install GNUnet using: - -@example -$ tar xvf gnunet-@value{VERSION}.tar.gz -$ cd gnunet-@value{VERSION} -$ ./configure --with-sudo=sudo --with-nssdir=/lib -$ make -$ sudo make install -@end example - -If you want to be able to enable DEBUG-level log messages, add -@code{--enable-logging=verbose} to the end of the -@command{./configure} command. -@code{DEBUG}-level log messages are in English only and -should only be useful for developers (or for filing -really detailed bug reports). - -Finally, you probably want to compile @command{gnunet-gtk}, which -includes @command{gnunet-setup} (a graphical tool for -GNUnet configuration) and @command{gnunet-fs-gtk} (a graphical tool for -GNUnet file-sharing): - -@example -$ tar xvf gnunet-gtk-@value{VERSION}.tar.gz -$ cd gnunet-gtk-@value{VERSION} -$ ./configure --with-gnunet=/usr/local/ -$ make -$ sudo make install -$ cd .. -# just to be safe run this: -$ sudo ldconfig -@end example - -@noindent -Next, edit the file @file{/etc/gnunet.conf} to contain the following: - -@example -[arm] -SYSTEM_ONLY = YES -USER_ONLY = NO -@end example - -@noindent -You may need to update your @code{ld.so} cache to include -files installed in @file{/usr/local/lib}: - -@example -# ldconfig -@end example - -@noindent -Then, switch from user @code{root} to user @code{gnunet} to start -the peer: - -@example -# su -s /bin/sh - gnunet -$ gnunet-arm -c /etc/gnunet.conf -s -@end example - -You may also want to add the last line in the gnunet user's @file{crontab} -prefixed with @code{@@reboot} so that it is executed whenever the system -is booted: - -@example -@@reboot /usr/local/bin/gnunet-arm -c /etc/gnunet.conf -s -@end example - -@noindent -This will only start the system-wide GNUnet services. -Type exit to get back your root shell. -Now, you need to configure the per-user part. For each -$USER that should get access to GNUnet on the system, run: - -@example -# adduser $USER gnunet -@end example - -@noindent -to allow them to access the system-wide GNUnet services. Then, each -user should create a configuration file @file{~/.config/gnunet.conf} -with the lines: - -@example -[arm] -SYSTEM_ONLY = NO -USER_ONLY = YES -DEFAULTSERVICES = gns -@end example - -@noindent -and start the per-user services using - -@example -$ gnunet-arm -c ~/.config/gnunet.conf -s -@end example - -@noindent -Again, adding a @code{crontab} entry to autostart the peer is advised: - -@example -@@reboot /usr/local/bin/gnunet-arm -c $HOME/.config/gnunet.conf -s -@end example - -@noindent -Note that some GNUnet services (such as SOCKS5 proxies) may need a -system-wide TCP port for each user. -For those services, systems with more than one user may require each user -to specify a different port number in their personal configuration file. - -Finally, the user should perform the basic initial setup for the GNU Name -System (GNS) certificate authority. This is done by running: - -@example -$ gnunet-gns-proxy-setup-ca -@end example - -@noindent -The first generates the default zones, wheras the second setups the GNS -Certificate Authority with the user's browser. Now, to activate GNS in the -normal DNS resolution process, you need to edit your -@file{/etc/nsswitch.conf} where you should find a line like this: - -@example -hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 -@end example - -@noindent -The exact details may differ a bit, which is fine. Add the text -@emph{"gns [NOTFOUND=return]"} after @emph{"files"}. -Keep in mind that we included a backslash ("\") here just for -markup reasons. You should write the text below on @b{one line} -and @b{without} the "\": - -@example -hosts: files gns [NOTFOUND=return] mdns4_minimal \ -[NOTFOUND=return] dns mdns4 -@end example - -@c FIXME: Document new behavior. -You might want to make sure that @file{/lib/libnss_gns.so.2} exists on -your system, it should have been created during the installation. - -@node Build instructions for Ubuntu 12.04 using Git -@section Build instructions for Ubuntu 12.04 using Git - -@menu -* Install the required build tools:: -* Install libgcrypt 1.6 and libgpg-error:: -* Install gnutls with DANE support:: -* Install libgnurl:: -* Install libmicrohttpd from Git:: -* Install libextractor from Git:: -* Install GNUnet dependencies:: -* Build GNUnet:: -* Install the GNUnet-gtk user interface from Git:: -@end menu - -@node Install the required build tools -@subsection Install the required build tools - -First, make sure Git is installed on your system: - -@example -$ sudo apt-get install git -@end example - -Install the essential buildtools: - -@example -$ sudo apt-get install automake autopoint autoconf libtool -@end example - -@node Install libgcrypt 1.6 and libgpg-error -@subsection Install libgcrypt 1.6 and libgpg-error - -@ref{generic source installation - libgpg-error} - -@node Install gnutls with DANE support -@subsection Install gnutls with DANE support - -@itemize @bullet -@item @ref{generic source installation - nettle} -@item @ref{generic source installation - ldns} -@item @ref{generic source installation - libunbound/unbound} -@item @ref{generic source installation - gnutls} -@item @ref{generic source installation - libgcrypt} -@end itemize - -@node Install libgnurl -@subsection Install libgnurl - -Follow the @ref{generic source installation - libgnurl}. - -@node Install libmicrohttpd from Git -@subsection Install libmicrohttpd from Git - -@example -$ git clone https://gnunet.org/git/libmicrohttpd -$ cd libmicrohttpd/ -$ ./bootstrap -$ ./configure -$ sudo make install ; cd .. -@end example - -@node Install libextractor from Git -@subsection Install libextractor from Git - -Install libextractor dependencies: - -@example -$ sudo apt-get install zlib1g-dev libgsf-1-dev libmpeg2-4-dev \ - libpoppler-dev libvorbis-dev libexiv2-dev libjpeg-dev \ - libtiff-dev libgif-dev libvorbis-dev libflac-dev libsmf-dev \ - g++ -@end example - -Build libextractor: - -@example -$ git clone https://gnunet.org/git/libextractor -$ cd libextractor -$ ./bootstrap -$ ./configure -$ sudo make install ; cd .. -@end example - -@node Install GNUnet dependencies -@subsection Install GNUnet dependencies - -@example -$ sudo apt-get install libidn11-dev libunistring-dev libglpk-dev \ - libpulse-dev libbluetooth-dev libsqlite-dev -@end example - -Install libopus: - -@example -$ wget http://downloads.xiph.org/releases/opus/opus-1.1.tar.gz -$ tar xf opus-1.1.tar.gz -$ cd opus-1.1/ -$ ./configure -$ sudo make install ; cd .. -@end example - -Choose one or more database backends: - -SQLite3: -@example -$ sudo apt-get install libsqlite3-dev -@end example -MySQL: -@example -$ sudo apt-get install libmysqlclient-dev -@end example -PostgreSQL: -@example -$ sudo apt-get install libpq-dev postgresql -@end example - - - -@node Build GNUnet -@subsection Build GNUnet - - - -@menu -* Configuring the installation path:: -* Configuring the system:: -* Installing components requiring sudo permission:: -* Build:: -@end menu - -@node Configuring the installation path -@subsubsection Configuring the installation path - -You can specify the location of the GNUnet installation by setting the -prefix when calling the configure script with @code{--prefix=DIRECTORY} - -@example -$ export PATH=$PATH:DIRECTORY/bin -@end example - -@node Configuring the system -@subsubsection Configuring the system - -Please make sure NOW that you have created a user and group 'gnunet' -and additionally a group 'gnunetdns': - -@example -$ sudo addgroup gnunet -$ sudo addgroup gnunetdns -$ sudo adduser gnunet -@end example - -Each GNUnet user should be added to the 'gnunet' group (may -require fresh login to come into effect): - -@example -$ sudo useradd -G gnunet -@end example - -@node Installing components requiring sudo permission -@subsubsection Installing components requiring sudo permission - -Some components, like the nss plugin required for GNS, may require root -permissions. To allow these few components to be installed use: - -@example -$ ./configure --with-sudo -@end example - -@node Build -@subsubsection Build - -@example -$ git clone https://gnunet.org/git/gnunet/ -$ cd gnunet/ -$ ./bootstrap -@end example - -Use the required configure call including the optional installation prefix -@code{PREFIX} or the sudo permissions: - -@example -$ ./configure [ --with-sudo | --with-prefix=PREFIX ] -@end example - -@example -$ make; sudo make install -@end example - -After installing it, you need to create an empty configuration file: - -@example -mkdir ~/.gnunet; touch ~/.gnunet/gnunet.conf -@end example - -And finally you can start GNUnet with: - -@example -$ gnunet-arm -s -@end example - -@node Install the GNUnet-gtk user interface from Git -@subsection Install the GNUnet-gtk user interface from Git - - -Install depencies: - -@example -$ sudo apt-get install libgtk-3-dev libunique-3.0-dev libgladeui-dev \ - libqrencode-dev -@end example - -Build GNUnet (with an optional prefix) and execute: - -@example -$ git clone https://gnunet.org/git/gnunet-gtk/ -$ cd gnunet-gtk/ -$ ./bootstrap -$ ./configure [--prefix=PREFIX] --with-gnunet=DIRECTORY -$ make; sudo make install -@end example - -@node Build instructions for software builds from source -@section Build instructions for software builds from source - -This section describes software builds in case your operating -system lacks binary substitutes / binary builds for some dependencies -of GNUnet. -It is assumed that you have installed common build dependencies -and that these instructions are treated as generic without any -debugging help. -It is furthermore assumed that you use the release tarballs of -the software, installation from the respective version control -sources might differ in ways that are only minimal different -(for example a dependency on autotools etc). - -@menu -* generic source installation - nettle:: -* generic source installation - ldns:: -* generic source installation - libunbound/unbound:: -* generic source installation - libav:: -* generic source installation - libextractor:: -* generic source installation - libgpg-error:: -* generic source installation - libgcrypt:: -* generic source installation - gnutls:: -* generic source installation - libmicrohttpd:: -* generic source installation - libgnurl:: -@end menu - -@node generic source installation - nettle -@subsection generic source installation - nettle - -@example -$ wget http://www.lysator.liu.se/~nisse/archive/nettle-2.7.1.tar.gz -$ tar xf nettle-2.7.1.tar.gz -$ cd nettle-2.7.1 -$ ./configure -$ sudo make install ; cd .. -@end example - -@node generic source installation - ldns -@subsection generic source installation - ldns - -@example -$ wget https://www.nlnetlabs.nl/downloads/ldns/ldns-1.6.16.tar.gz -$ tar xf ldns-1.6.16.tar.gz -$ cd ldns-1.6.16 -$ ./configure -$ sudo make install ; cd .. -@end example - -@node generic source installation - libunbound/unbound -@subsection generic source installation - libunbound/unbound - -@example -$ wget https://unbound.net/downloads/unbound-1.4.21.tar.gz -$ tar xf unbound-1.4.21.tar.gz -$ cd unbound-1.4.21 -$ ./configure -$ sudo make install ; cd .. -@end example - -@node generic source installation - libav -@subsection generic source installation - libav - -@example -$ wget https://libav.org/releases/libav-9.10.tar.xz -$ cd libav-0.9 ; ./configure --enable-shared; -$ make; sudo make install; cd .. -@end example - -@node generic source installation - libextractor -@subsection generic source installation - libextractor - -@example -$ wget https://ftp.gnu.org/gnu/libextractor/libextractor-1.3.tar.gz -$ tar xvf libextractor-1.3.tar.gz -$ cd libextractor-1.3 ; ./configure; -$ make ; sudo make install; cd .. -@end example - -@node generic source installation - libgpg-error -@subsection generic source installation - libgpg-error - -@example -$ wget https://ftp.gnupg.org/gcrypt/libgpg-error/libgpg-error-1.12.tar.bz2 -$ tar xvf libgpg-error-1.12.tar.bz2 -$ cd libgpg-error-1.12; ./configure; -$ make ; sudo make install; cd .. -@end example - -@node generic source installation - libgcrypt -@subsection generic source installation - libgcrypt -@example -$ wget https://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.6.0.tar.bz2 -$ tar xvf libgcrypt-1.6.0.tar.bz2 -$ cd libgcrypt-1.6.0; ./configure --with-gpg-error-prefix=/usr/local; -$ make ; sudo make install ; cd .. -@end example - -@node generic source installation - gnutls -@subsection generic source installation - gnutls - -@example -$ wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.2/gnutls-3.2.7.tar.xz -$ tar xvf gnutls-3.2.7.tar.xz -$ cd gnutls-3.2.7 -@end example - -@noindent -If you want a GnuTLS with DANE functionality (recommended for GNUnet), -you have to compile it against libunbound. Assuming that libunbound -is installed on your system: - -@example -$ ./configure --enable-libdane -@end example - -@noindent -Note that the build system of GnuTLS should pick up libunbound without -the explicit mention of @code{--enable-libdane}. -If you don't want libdane support you should pass @code{--disable-libdane} -instead. - -@example -$ ./configure -$ make ; sudo make install ; cd .. -@end example - -@node generic source installation - libmicrohttpd -@subsection generic source installation - libmicrohttpd - -@example -$ wget https://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-0.9.33.tar.gz -$ tar xvf libmicrohttpd-0.9.33.tar.gz -$ cd libmicrohttpd-0.9.33; ./configure; -$ make ; sudo make install ; cd .. -@end example - -@node generic source installation - libgnurl -@subsection generic source installation - libgnurl - -Example installation of libgnurl version 7.57.0 from source. - -@example -$ wget https://ftp.gnu.org/gnu/gnunet/gnurl-7.57.0.tar.xz -$ wget https://ftp.gnu.org/gnu/gnunet/gnurl-7.57.0.tar.xz.sig -$ gpg --verify gnurl-7.57.0.tar.xz.sig -@end example - -@noindent -If that command fails because you do not have the required public key, -then run this command to import it: - -@example -$ gpg --keyserver pgp.mit.edu --recv-keys A88C8ADD129828D7EAC02E52E22F9BBFEE348588 -@end example - -@noindent -and rerun the gpg --verify command. - -@example -$ tar xvf gnurl-7.57.0.tar.xz -$ cd gnurl-7.57.0 -$ ./configure --disable-ntlm-wb -$ make ; sudo make install; cd .. -@end example - -You have now build and installed libgnurl from source. - -@menu -* Fixing libgnurl build issues:: -@end menu - -@node Fixing libgnurl build issues -@subsubsection Fixing libgnurl build issues - -@c FIXME: Obviously this subsection should be evaluated and -@c if still necessary moved into gnURL itself (README) or -@c into a separate section which deals with gnURL. -If you have to compile libgnurl from source (for example if the version -included in your distribution is too old or it's not included at all) -you perhaps might get an error message while running the -@command{configure} script: - -@example -$ configure -... -checking for 64-bit curl_off_t data type... unknown -checking for 32-bit curl_off_t data type... unknown -checking for 16-bit curl_off_t data type... unknown -configure: error: cannot find data type for curl_off_t. -@end example - -@noindent -Solution: - -Before running the @command{configure} script, set: - -@example -CFLAGS="-I. -I$BUILD_ROOT/include" -@end example - -@node Build Instructions for Microsoft Windows Platforms -@section Build Instructions for Microsoft Windows Platforms - -@menu -* Introduction to building on MS Windows:: -* Requirements:: -* Dependencies & Initial Setup:: -* GNUnet Installation:: -* Adjusting Windows for running and testing GNUnet:: -* Building the GNUnet Installer:: -* Using GNUnet with Netbeans on Windows:: -@end menu - -@node Introduction to building on MS Windows -@subsection Introduction to building on MS Windows - - -This document is a guide to building GNUnet and its dependencies on -Windows platforms. GNUnet development is mostly done under GNU/Linux and -especially git checkouts may not build out of the box. -We regret any inconvenience, and if you have problems, please report -them. - -@node Requirements -@subsection Requirements - -The Howto is based upon a @strong{Windows Server 2008 32bit} -@strong{Installation}, @strong{sbuild} and thus a -@uref{http://www.mingw.org/wiki/MSYS, MSYS+MinGW} -(W32-GCC-Compiler-Suite + Unix-like Userland) installation. sbuild -is a convenient set of scripts which creates a working msys/mingw -installation and installs most dependencies required for GNUnet. - -As of the point of the creation of these instructions, -GNUnet @strong{requires} a Windows @strong{Server} 2003 or -newer for full feature support. -Windows Vista and later will also work, but -@strong{non-server version can not run a VPN-Exit-Node} as the NAT -features have been removed as of Windows Vista. - -@c TODO: We should document Windows 10! -@c It seems like the situation hasn't changed with W10 - -@node Dependencies & Initial Setup -@subsection Dependencies & Initial Setup - - -@itemize @bullet - -@item -Install a fresh version of @strong{Python 2.x}, even if you are using a -x64-OS, install a 32-bit version for use with sbuild. -Python 3.0 is currently incompatible. - -@item -Install your favorite @uref{http://code.google.com/p/tortoisegit/, git} & -@uref{http://tortoisesvn.net/, subversion}-clients. - -@item -You will also need some archive-manager like -@uref{http://www.7-zip.org/, 7zip}. - -@item -Pull a copy of sbuild to a directory of your choice, which will be used -in the remainder of this guide. For now, we will use -@file{c:\gnunet\sbuild\} - -@item -in @file{sbuild\src\mingw\mingw32-buildall.sh}, comment out the packages -@strong{gnunet-svn} and @strong{gnunet-gtk-svn}, as we don't want sbuild -to compile/install those for us. - -@item -Follow LRN's sbuild installation instructions.- -@end itemize - -Please note that sbuild may (or will most likely) fail during -installation, thus you really HAVE to @strong{check the logfiles} created -during the installation process. -Certain packages may fail to build initially due to missing dependencies, -thus you may have to -@strong{substitute those with binary-versions initially}. Later on once -dependencies are satisfied you can re-build the newer package versions. - -@strong{It is normal that you may have to repeat this step multiple times -and there is no uniform way to fix all compile-time issues, as the -build-process of many of the dependencies installed are rather unstable -on win32 and certain releases may not even compile at all.} - -Most dependencies for GNUnet have been set up by sbuild, thus we now -should add the @file{bin/} directories in your new msys and mingw -installations to PATH. You will want to create a backup of your finished -msys-environment by now. - -@node GNUnet Installation -@subsection GNUnet Installation - -First, we need to launch our msys-shell, you can do this via - -@file{C:\gnunet\sbuild\msys\msys.bat} - -You might wish to take a look at this file and adjust some -login-parameters to your msys environment. - -Also, sbuild added two pointpoints to your msys-environment, though those -might remain invisible: - -@itemize @bullet - -@item -/mingw, which will mount your mingw-directory from sbuild/mingw and the -other one is - -@item -/src which contains all the installation sources sbuild just compiled. -@end itemize - -Check out the current GNUnet sources (git HEAD) from the -GNUnet repository "gnunet.git", we will do this in your home directory: - -@code{git clone https://gnunet.org/git/gnunet/ ~/gnunet} - -Now, we will first need to bootstrap the checked out installation and then -configure it accordingly. - -@example -cd ~/gnunet -./bootstrap -STRIP=true CPPFLAGS="-DUSE_IPV6=1 -DW32_VEH" CFLAGS="$CFLAGS -g -O2" \ -./configure --prefix=/ --docdir=/share/doc/gnunet \ ---with-libiconv-prefix=/mingw --with-libintl-prefix=/mingw \ ---with-libcurl=/mingw --with-extractor=/mingw --with-sqlite=/mingw \ ---with-microhttpd=/mingw --with-plibc=/mingw --enable-benchmarks \ ---enable-expensivetests --enable-experimental --with-qrencode=/mingw \ ---enable-silent-rules --enable-experimental 2>&1 | tee -a ./configure.log -@end example - -The parameters above will configure for a reasonable GNUnet installation -to the your msys-root directory. -Depending on which features your would like to build or you may need to -specify additional dependencies. Sbuild installed most libs into -the /mingw subdirectory, so remember to prefix library locations with -this path. - -Like on a unixoid system, you might want to use your home directory as -prefix for your own GNUnet installation for development, without tainting -the buildenvironment. Just change the "prefix" parameter to point towards -~/ in this case. - -Now it's time to compile GNUnet as usual. Though this will take some time, -so you may fetch yourself a coffee or some Mate now... - -@example -make ; make install -@end example - -@node Adjusting Windows for running and testing GNUnet -@subsection Adjusting Windows for running and testing GNUnet - -Assuming the build succeeded and you -@strong{added the bin directory of your GNUnet to PATH}, you can now use -your gnunet-installation as usual. -Remember that UAC or the windows firewall may popup initially, blocking -further execution of gnunet until you acknowledge them. - -You will also have to take the usual steps to get peer-to-peer (p2p) -software running properly (port forwarding, ...), -and GNUnet will require administrative permissions as it may even -install a device-driver (in case you are using gnunet-vpn and/or -gnunet-exit). - -@node Building the GNUnet Installer -@subsection Building the GNUnet Installer - -The GNUnet installer is made with -@uref{http://nsis.sourceforge.net/, NSIS}. -The installer script is located in @file{contrib\win} in the -GNUnet source tree. - -@node Using GNUnet with Netbeans on Windows -@subsection Using GNUnet with Netbeans on Windows - -TODO - -@node Build instructions for Debian 7.5 -@section Build instructions for Debian 7.5 - - -These are the installation instructions for Debian 7.5. They were tested -using a minimal, fresh Debian 7.5 AMD64 installation without non-free -software (no contrib or non-free). -By "minimal", we mean that during installation, we did not select any -desktop environment, servers or system utilities during the "tasksel" -step. Note that the packages and the dependencies that we will install -during this chapter take about 1.5 GB of disk space. -Combined with GNUnet and space for objects during compilation, you should -not even attempt this unless you have about 2.5 GB free after the minimal -Debian installation. -Using these instructions to build a VM image is likely to require a -minimum of 4-5 GB for the VM (as you will likely also want a desktop -manager). - -GNUnet's security model assumes that your @file{/home} directory is -encrypted. Thus, if possible, you should encrypt your home partition -(or per-user home directory). - -Naturally, the exact details of the starting state for your installation -should not matter much. For example, if you selected any of those -installation groups you might simply already have some of the necessary -packages installed. -We did this for testing, as this way we are less likely to forget to -mention a required package. -Note that we will not install a desktop environment, but of course you -will need to install one to use GNUnet's graphical user interfaces. -Thus, it is suggested that you simply install the desktop environment of -your choice before beginning with the instructions. - - - -@menu -* Update:: -* Stable? Hah!:: -* Update again:: -* Installing packages:: -* Installing dependencies from source:: -* Installing GNUnet from source:: -* But wait there is more!:: -@end menu - -@node Update -@subsection Update - -After any installation, you should begin by running - -@example -# apt-get update ; apt-get upgrade -@end example - -to ensure that all of your packages are up-to-date. Note that the "#" is -used to indicate that you need to type i |