Provided by: gnunet-client_0.9.3-7build1_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.  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.

       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 name",
       "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.

       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
       ~/.gnunet/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

       ~/.gnunet/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-fs-gtk(1), gnunet-pseudonym(1), gnunet-search(1), gnunet-download(1), gnunet.conf(5), extract(1)

GNUnet                                             25 Feb 2012                                 GNUNET-PUBLISH(1)