Provided by: gnunet_0.10.1-5.1_amd64 bug


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


       gnunet-publish [OPTIONS] FILENAME


       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 the gnunet-auto-share tool).  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.  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. 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.

       -c FILENAME, --config=FILENAME Use alternate config file (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, --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 a brief help page with all the options.

       -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

       -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, RBlocks, SBlocks and IBlocks
              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 ID of a future version of the SBlock.  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

       -P NAME, --pseudonym=NAME
              For the top-level directory or file, create an SBlock that places the file into the
              namespace specified by the pseudonym NAME.

       -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  ID  of  the SBlock.  This option is only valid together with the -s

       -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


       The -a option can be used to specify additional anonymity constraints. 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 (DHT, direct 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 infer data about  your  identity.   You
       can  gain  better  privacy  by specifying a higher level of anonymity, which increases the
       amount of cover traffic your own traffic will get, at the expense  of  performance.   Note
       that regardless of the anonymity level you choose, peers that cache content in the network
       always use anonymity level 1.

       The definition of the ANONYMITY LEVEL is the following.  0 means no anonymity is required.
       Otherwise  a  value  of 'v' means that 1 out of v bytes of "anonymous" traffic can be from
       the local user, leaving 'v-1' bytes of cover traffic per  byte  on  the  wire.   Thus,  if
       GNUnet  routes  n  bytes  of messages from foreign peers (using anonymous routing), it may
       originate n/(v-1) bytes of data in the same time-period.  The  time-period  is  twice  the
       average delay that GNUnet defers forwarded queries.

       The  default  is 1 and this should be fine for most users.  Also notice that if you choose
       very large values, you may end up having no throughput at all, especially if many of  your
       fellow GNUnet-peers all do the same.


       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"

       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

        # 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?)

        # 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


              GNUnet configuration file


       Report  bugs  to   <>   or   by   sending   electronic   mail   to


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