Provided by: gnunet_0.20.0-6_amd64 bug

NAME

     gnunet-publish — a command line interface for publishing new content into GNUnet

SYNOPSIS

     gnunet-publish [-a LEVEL | --anonymity=LEVEL] [-c FILENAME | --config=FILENAME]
                    [-D | --disable-extractor] [-E | --enable-creation-time] [-e | --extract]
                    [-h | --help] [-k KEYWORD | --key=KEYWORD]
                    [-L LOGLEVEL | --loglevel=LOGLEVEL] [-m TYPE:VALUE | --meta=TYPE:VALUE]
                    [-n | --noindex] [-N ID | --next=ID] [-p PRIORITY | --prio=PRIORITY]
                    [-P NAME | --pseudonym=NAME] [-r LEVEL | --replication=LEVEL]
                    [-s | --simulate-only] [-t ID | --this=ID] [-u URI | --uri=URI]
                    [-v | --version] [-V | --verbose] ⟨FILENAME

DESCRIPTION

     In order to share files with other GNUnet users, the files must first be made available to
     GNUnet.  GNUnet does not automatically share all files from a certain directory (however,
     you can do this with gnunet-auto-share(1)). In fact, even files that are downloaded are not
     automatically shared.

     In order to start sharing files, the files must be added either using gnunet-publish or a
     graphical interface such as gnunet-fs-gtk(1).  The command line tool gnunet-publish is more
     useful if many files are supposed to be added.  gnunet-publish can automatically publish
     batches of files, recursively publish directories, create directories that can be browsed
     within GNUnet and publish file lists in a namespace.  When run on a directory, gnunet-
     publish will always recursively publish all of the files in the directory.

     gnunet-publish can automatically extract keywords from the files that are shared.  Users
     that want to download files from GNUnet use keywords to search for the appropriate content.
     You can disable keyword extraction with the -D option.  You can manually add keywords using
     the -k option.  The keywords are case-sensitive.

     In addition to searching for files by keyword, GNUnet allows organizing files into
     directories.  With directories, the user only needs to find the directory in order to be
     able to download any of the files listed in the directory.  Directories can contain pointers
     to other directories.

     With gnunet-publish, it is easy to create new directories simultaneously when adding the
     files.  Simply pass the name of a directory instead of a file.

     Since keywords can be spammed (any user can add any content under any keyword), GNUnet
     supports namespaces.  A namespace is a subset of the searchspace into which only the holder
     of a certain pseudonym can add content.  Any GNUnet user can create any number of pseudonyms
     using gnunet-pseudonym(1).  Pseudonyms are stored in the user's GNUnet directory.  While
     pseudonyms are locally identified with an arbitrary string that the user selects when the
     pseudonym is created, the namespace is globally known only under the hash of the public key
     of the pseudonym.  Since only the owner of the pseudonym can add content to the namespace,
     it is impossible for other users to pollute the namespace.  gnunet-publish automatically
     publishes the top-directory (or the only file if only one file is specified) into the
     namespace if a pseudonym is specified.

     It is possible to update content in GNUnet if that content was placed and obtained from a
     particular namespace.  Updates are only possible for content in namespaces since this is the
     only way to assure that a malicious party can not supply counterfeited updates.  Note that
     an update with GNUnet does not make the old content unavailable, GNUnet merely allows the
     publisher to point users to more recent versions.  You can use the -N option to specify the
     future identifier of an update.  When using this option, a GNUnet client that finds the
     current (-t) identifier will automatically begin a search for the update (-N) identifier.
     If you later publish an update under the (-N) identifier, both results will be given to the
     user.

     You can use automatic meta-data extraction (based on libextractor) or the command-line
     option -m to specify meta-data.  For the -m option you need to use the form keyword-
     type:value.  For example, use "-m os:Linux" to specify that the operating system is Linux.
     Common meta-data types are "author", "title", "mimetype", "filename", "language", "subject"
     and "keywords".  A full list can be obtained from the extract tool using the option --list.
     The meta-data is used to help users in searching for files on the network.  The keywords are
     case-sensitive.

     GNUnet supports two styles of publishing files on the network.  Publishing a file means that
     a copy of the file is made in the local (!) database of the node.  Indexing a file means
     that an index is added to the local (!) database with symbolic links to the file itself.
     The links will use the SHA-512 hash of the entire file as the filename.  Indexing is
     generally significantly more efficient and the default choice.  However, indexing only works
     if the indexed file can be read (using the same absolute path) by gnunet-service-fs.  If
     this is not the case, indexing will fail (and gnunet-publish will automatically revert to
     publishing instead).  Regardless of which method is used to publish the file, the file will
     be slowly (depending on how often it is requested and on how much bandwidth is available)
     dispersed into the network.  If you publish or index a file and then leave the network, it
     will almost always NOT be available anymore.

     The options are as follows:

     -a LEVEL | --anonymity=LEVEL
             This option can be used to specify additional anonymity constraints.  The default is
             1.  If set to 0, GNUnet will publish the file non-anonymously and in fact sign the
             advertisement for the file using your peer's private key.  This will allow other
             users to download the file as fast as possible, including using non-anonymous
             methods (discovery via DHT and CADET transfer).  If you set it to 1 (default), you
             use the standard anonymous routing algorithm (which does not explicitly leak your
             identity).  However, a powerful adversary may still be able to perform traffic
             analysis (statistics) to over time discovery your identity.  You can gain better
             privacy by specifying a higher level of anonymity (using values above 1).  This
             tells FS that it must hide your own requests in equivalent-looking cover traffic.
             This should confound an adversaries traffic analysis, increasing the time and effort
             it would take to discover your identity.  However, it also can significantly reduce
             performance, as your requests will be delayed until sufficient cover traffic is
             available.  The specific numeric value (for anonymity levels above 1) is simple:
             Given an anonymity level L (above 1), each request FS makes on your behalf must be
             hidden in L-1 equivalent requests of cover traffic (traffic your peer routes for
             others) in the same time-period.  The time-period is twice the average delay by
             which GNUnet artificially delays traffic.  Note that regardless of the anonymity
             level you choose, peers that cache content in the network always use anonymity level
             1.

     -c FILENAME | --config=FILENAME
             Use alternate config file FILENAME.  If this option is not specified, the default is
             ~/.config/gnunet.conf.

     -D | --disable-extractor
             Disable use of GNU libextractor for finding additional keywords and metadata.

     -E | --enable-creation-time
             Enable use of creation time timestamp in metadata.  Setting this information will
             leak information about the time at which a file was made available.

     -e | --extract
             Print the list of keywords that will be used for each file given the current
             options.  Do not perform any indexing or publishing.

     -h | --help
             Print the help page.

     -k KEYWORD | --key=KEYWORD
             Additional key to index the content with (to add multiple keys, specify multiple
             times).  Each additional key is case-sensitive.  Can be specified multiple times.
             The keyword is only applied to the top-level file or directory.

     -L LOGLEVEL | --loglevel=LOGLEVEL
             Change the loglevel.  Possible values for LOGLEVEL are ERROR, WARNING, INFO and
             DEBUG.

     -m TYPE:VALUE | --meta=TYPE:VALUE
             For the main file (or directory), set the metadata of the given TYPE to the given
             VALUE.  Note that this will not add the respective VALUE to the set of keywords
             under which the file can be found.

     -n | --noindex
             Executive summary: You probably don't need it.  Do not index, full publishing.  Note
             that directories, information for keyword search, namespace search and indexing data
             are always published (even without this option).  With this option, every block of
             the actual files is stored in encrypted form in the block database of the local
             peer.  While this adds security if the local node is compromised (the adversary
             snags your machine), it is significantly less efficient compared to on-demand
             encryption and is definitely not recommended for large files.

     -N ID | --next=ID
             Specifies the next identifier of a future version of the file to be published under
             the same pseudonym.  This option is only valid together with the -P option.  This
             option can be used to specify what the identifier of an updated version will look
             like.  Note that specifying -i and -N without -t is not allowed.

     -p PRIORITY | --prio=PRIORITY
             Executive summary: You probably don't need it.  Set the priority of the published
             content (default: 365).  If the local database is full, GNUnet will discard the
             content with the lowest ranking.  Note that ranks change over time depending on
             popularity.  The default should be high enough to preserve the locally published
             content in favor of content that migrates from other peers.

     -P NAME | --pseudonym=NAME
             For the top-level directory or file, places the file into the namespace identified
             by the pseudonym NAME.  NAME must be a valid pseudonym managed by
             gnunet-identity(1).

     -r LEVEL | --replication=LEVEL
             Set the desired replication level.  If CONTENT_PUSHING is set to YES, GNUnet will
             push each block (for the file) LEVEL times to other peers before doing normal
             "random" replication of all content.  This option can be used to push some content
             out into the network harder.  Note that pushing content LEVEL times into the network
             does not guarantee that there will actually be LEVEL replicas.

     -s | --simulate-only
             When this option is used, gnunet-publish will not actually publish the file but just
             simulate what would be done.  This can be used to compute the GNUnet URI for a file
             without actually sharing it.

     -t ID | --this=ID
             Specifies the identifier under which the file is to be published under a pseudonym.
             This option is only valid together with the -P option.

     -u URI | --uri=URI
             This option can be used to specify the URI of a file instead of a filename (this is
             the only case where the otherwise mandatory filename argument must be omitted).
             Instead of publishing a file or directory and using the corresponding URI, gnunet-
             publish will use this URI and perform the selected namespace or keyword operations.
             This can be used to add additional keywords to a file that has already been shared
             or to add files to a namespace for which the URI is known but the content is not
             locally available.

     -v | --version
             Print the version number.

     -V | --verbose
             Be verbose.  Using this option causes gnunet-publish to print progress information
             and at the end the file identification that can be used to download the file from
             GNUnet.

EXAMPLES

   BASIC EXAMPLES
     Index a file COPYING:

           gnunet-publish COPYING

     Publish a file COPYING:

           gnunet-publish -n COPYING

     Index a file COPYING with the keywords gpl and test:

           gnunet-publish -k gpl -k test COPYING

     Index a file COPYING with description GNU License, mime-type text/plain and keywords gpl and
     test:

           gnunet-publish -m description:GNU License -k gpl -k test -m mimetype:text/plain
           COPYING

   USING DIRECTORIES
     Index the files COPYING and AUTHORS with keyword test and build a directory containing the
     two files.  Make the directory itself available under keyword gnu and disable keyword
     extraction using libextractor:

           mkdir gnu; mv COPYING AUTHORS gnu/; gnunet-publish -k test -k gnu -D gnu/

     Neatly publish an image gallery in kittendir/ and its subdirs with keyword kittens for the
     directory but no keywords for the individual files or subdirs (-n).  Force description for
     all files.

           gnunet-publish -n -m description:Kitten collection -k kittens kittendir/

   SECURE PUBLISHING WITH NAMESPACES
     Publish file COPYING with pseudonym RIAA-2 (-P) and with identifier gpl (-t) and no updates.

           gnunet-publish -P RIAA-2 -t gpl COPYING

     Recursively index /home/ogg and build a matching directory structure.  Publish the top-level
     directory into the namespace under the pseudonym RIAA-2 (-P) under identifier 'MUSIC' (-t)
     and promise to provide an update with identifier 'VIDEOS' (-N):

           gnunet-publish -P RIAA-2 -t MUSIC -N VIDEOS /home/ogg

     Recursively publish (-n) /var/lib/mysql and build a matching directory structure, but
     disable the use of libextractor to extract keywords (-n).  Print the file identifiers (-V)
     that can be used to retrieve the files.  This will store a copy of the MySQL database in
     GNUnet but without adding any keywords to search for it.  Thus only people that have been
     told the secret file identifiers printed with the -V option can retrieve the (secret?)
     files:

           gnunet-publish -nV /var/lib/mysql

     Create a namespace entry 'root' in namespace MPAA-1 and announce that the next update will
     be called 'next':

           gnunet-publish -P MPAA-1 -t root -N next noise.mp3

     Update the previous entry, do not allow any future updates:

           gnunet-publish -P MPAA-1 -t next noise_updated.mp3

FILES

     ~/.config/gnunet.conf GNUnet configuration file

SEE ALSO

     extract(1), gnunet-auto-share(1), gnunet-download(1), gnunet-fs-gtk(1), gnunet-identity(1),
     gnunet-search(1), gnunet.conf(5)

     The full documentation for gnunet is maintained as a Texinfo manual.  If the info(1) and
     gnunet programs are properly installed at your site, the command

           info gnunet

     should give you access to the complete handbook,

           info gnunet-c-tutorial

     will give you access to a tutorial for developers.

     Depending on your installation, this information is also available in gnunet(7) and
     gnunet-c-tutorial(7).

BUGS

     Report bugs by using https://bugs.gnunet.org or by sending electronic mail to
     ⟨gnunet-developers@gnu.org⟩.