Provided by: gnunet_0.10.1-5build2_amd64 bug

NAME

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

SYNOPSIS

       gnunet-publish [OPTIONS] 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 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 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, 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 peers.

       -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 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.

SETTING ANONYMITY LEVEL

       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.

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

REPORTING BUGS

       Report bugs to <https://gnunet.org/bugs/> or by sending electronic mail to <gnunet-developers@gnu.org>

SEE ALSO

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

GNUnet                                             25 Feb 2012                                 GNUNET-PUBLISH(1)