From 85bb872e3df6b6f54764d90996bc52904ccd4385 Mon Sep 17 00:00:00 2001 From: chas williams - CONTRACTOR Date: Sat, 13 Aug 2011 10:18:45 -0400 Subject: [PATCH] doc: generate admin ref from the pod documentation a bit convoluted but this generates docbook from the pod documentation and from that pdf, epub and mobi versions. we are using variablelist.as.block since that looks prettier on smaller devices/screen. Change-Id: I5cd51ef10448373960a0aeed15212bbcf6f44039 Change-Id: Ib222dbfa30e3af644b1dbc6738df1d39cc33c92f Reviewed-on: http://gerrit.openafs.org/5255 Tested-by: BuildBot Reviewed-by: Derrick Brashear --- configure.ac | 6 + doc/xml/AdminRef/Makefile.in | 43 +++ doc/xml/AdminRef/auarf000.png | Bin 0 -> 58458 bytes doc/xml/AdminRef/auarf000.xml | 74 ++++ doc/xml/AdminRef/generate-xml.pl | 37 ++ doc/xml/AdminRef/pod2refentry | 558 +++++++++++++++++++++++++++++++ doc/xml/AdminRef/preface.xml | 171 ++++++++++ 7 files changed, 889 insertions(+) create mode 100644 doc/xml/AdminRef/Makefile.in create mode 100644 doc/xml/AdminRef/auarf000.png create mode 100644 doc/xml/AdminRef/auarf000.xml create mode 100755 doc/xml/AdminRef/generate-xml.pl create mode 100755 doc/xml/AdminRef/pod2refentry create mode 100644 doc/xml/AdminRef/preface.xml diff --git a/configure.ac b/configure.ac index 97ef4173d..56ee4c22d 100644 --- a/configure.ac +++ b/configure.ac @@ -102,6 +102,11 @@ if test -f 'doc/xml/UserGuide/Makefile.in' ; then else USERGUIDE_MAKEFILE= fi +if test -f 'doc/xml/AdminRef/Makefile.in' ; then + ADMINREF_MAKEFILE="doc/xml/AdminRef/Makefile" +else + ADMINREF_MAKEFILE= +fi if test -f 'doc/xml/mobi-fixup.xsl.in' ; then MOBI_FIXUP_XSL="doc/xml/mobi-fixup.xsl" else @@ -114,6 +119,7 @@ ${MAN_MAKEFILE} \ ${ADMINGUIDE_MAKEFILE} \ ${QSUNIX_MAKEFILE} \ ${USERGUIDE_MAKEFILE} \ +${ADMINREF_MAKEFILE} \ ${MOBI_FIXUP_XSL} \ src/afs/Makefile \ src/afsd/Makefile \ diff --git a/doc/xml/AdminRef/Makefile.in b/doc/xml/AdminRef/Makefile.in new file mode 100644 index 000000000..50facc623 --- /dev/null +++ b/doc/xml/AdminRef/Makefile.in @@ -0,0 +1,43 @@ +# Makefile to build the AFS Reference Guide for Unix. + +BOOK = auarf000 + +all: $(BOOK).pdf $(BOOK).epub $(BOOK).mobi + +include @TOP_OBJDIR@/src/config/Makefile.config +VERSION=version +include @TOP_OBJDIR@/src/config/Makefile.version + +SRCS = $(BOOK).xml preface.xml $(VERSION).xml \ + entities.dtd sect1.xml sect5.xml sect8.xml +DOCBOOK_STYLESHEETS = @DOCBOOK_STYLESHEETS@ +XSLTPROC = @XSLTPROC@ --stringparam variablelist.as.blocks 1 +DOCBOOK2PDF = @DOCBOOK2PDF@ +DBTOEPUB = $(DOCBOOK_STYLESHEETS)/epub/bin/dbtoepub + +entities.dtd sect1.xml sect5.xml sect8.xml: + ./generate-xml.pl $(TOP_SRCDIR) + +$(BOOK).pdf: $(SRCS) + if test "x$(DOCBOOK2PDF)" = "xfop"; then \ + $(XSLTPROC) $(DOCBOOK_STYLESHEETS)/fo/docbook.xsl $(BOOK).xml > $(BOOK).fo; \ + $(DOCBOOK2PDF) $(BOOK).fo $(BOOK).pdf; \ + else \ + $(DOCBOOK2PDF) $(BOOK).xml; \ + fi + +$(BOOK).epub: $(SRCS) + if test -x "$(DBTOEPUB)" ; then \ + $(DBTOEPUB) -s $(TOP_SRCDIR)/../doc/xml/mobi-fixup.xsl $(BOOK).xml; \ + fi + +$(BOOK).mobi: $(BOOK).epub + kindlegen $(BOOK).epub -o $(BOOK).mobi + +check: + xmllint --noout --valid $(BOOK).xml + +clean: + rm -f $(BOOK).pdf $(BOOK).mobi $(BOOK).epub $(BOOK).fo \ + entities.dtd sect1.xml sect5.xml sect8.xml $(VERSION).xml + rm -rf sect1 sect5 sect8 diff --git a/doc/xml/AdminRef/auarf000.png b/doc/xml/AdminRef/auarf000.png new file mode 100644 index 0000000000000000000000000000000000000000..263dba0b607188feb8d7e44d383d793d649065fb GIT binary patch literal 58458 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 + + + + + + + %entities; +]> + + + + OpenAFS Administration Reference + + + + + + + + + 2000 + + IBM Corporation. All Rights Reserved + + + + &version; + + + 3.6 + + April 2000 + + First IBM Edition, Document Number GC09-4563-00 + + + + + + This reference manual details the syntax of each OpenAFS command + and is intended for the experienced AFS administrator, programmer, + or user. + + + + In general, this document does not explain when to use a command + or its place in the sequence of commands that make up a + complete procedure. For that type of information, refer to the + OpenAFS Administration Guide. + + + + + &preface; + + + AFS Commands + §1; + + + + AFS System Files + §5; + + + + AFS System Commands + §8; + + + diff --git a/doc/xml/AdminRef/generate-xml.pl b/doc/xml/AdminRef/generate-xml.pl new file mode 100755 index 000000000..f414bc699 --- /dev/null +++ b/doc/xml/AdminRef/generate-xml.pl @@ -0,0 +1,37 @@ +#!/usr/bin/perl + eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' + if $running_under_some_shell; + +@sections = ('1', '5', '8'); + +$TOP_SRCDIR = shift @ARGV; +$doc_man_pages = sprintf "%s/../doc/man-pages", $TOP_SRCDIR; + +open(ENTITIES, ">entities.dtd") || die; + +foreach $section (@sections) { + printf "generating section %s...\n", $section; + + mkdir(sprintf "sect%d", $section); + opendir($DIR, sprintf "%s/pod%d", $doc_man_pages, $section) || die; + open(SECT, sprintf ">sect%d.xml", $section) || die; + while ($podfile = readdir($DIR)) { + next unless $podfile =~ /\.pod$/; + + ($xmlfile = $podfile) =~ s/\.pod$/.xml/; + ($entity = $xmlfile) =~ s/\.xml$//; + + printf "pod2refentry < %s > %s\n", $podfile, $xmlfile; + + system(sprintf "./pod2refentry --section=%d < %s/pod%d/%s > sect%d/%s", + $section, $doc_man_pages, $section, $podfile, $section, $xmlfile); + + printf ENTITIES "\n", + $entity, $section, $section, $xmlfile; + printf SECT "&%s%s;\n", $entity, $section; + } + closedir($DIR); + close(SECT); +} + +close(ENTITIES); diff --git a/doc/xml/AdminRef/pod2refentry b/doc/xml/AdminRef/pod2refentry new file mode 100755 index 000000000..371c21eac --- /dev/null +++ b/doc/xml/AdminRef/pod2refentry @@ -0,0 +1,558 @@ +#!/usr/bin/perl + eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' + if $running_under_some_shell; + +# Pod::RefEntry -- Convert POD data to DocBook RefEntry +# +# Copyright 2005, 2006 by Chas Williams +# +# This program is free software; you can redistribute it and/or modify it +# under the same terms as Perl itself. +# +# based on: +# +# Pod::PlainText -- Convert POD data to formatted ASCII text. +# $Id: Text.pm,v 2.1 1999/09/20 11:53:33 eagle Exp $ +# +# Copyright 1999-2000 by Russ Allbery +# +# This program is free software; you can redistribute it and/or modify it +# under the same terms as Perl itself. + +package Pod::RefEntry; + +require 5.005; + +use Carp qw(carp); +use Pod::Select (); + +use strict; +use vars qw(@ISA %ESCAPES $VERSION); + +# We inherit from Pod::Select instead of Pod::Parser so that we can be used +# by Pod::Usage. +@ISA = qw(Pod::Select); + +$VERSION = '0.06'; + +# This table is taken near verbatim from Pod::PlainText in Pod::Parser, +# which got it near verbatim from the original Pod::Text. It is therefore +# credited to Tom Christiansen, and I'm glad I didn't have to write it. :) +%ESCAPES = ( + 'amp' => '&', # ampersand + 'lt' => '<', # left chevron, less-than + 'gt' => '>', # right chevron, greater-than + 'quot' => '"', # double quote +); + +# Initialize the object. Must be sure to call our parent initializer. +sub initialize { + my $self = shift; + + $$self{hlevel} = 0 unless defined $$self{hlevel}; + $$self{ltype} = 0 unless defined $$self{ltype}; + $$self{lopen} = 0 unless defined $$self{lopen}; + $$self{indent} = 2 unless defined $$self{indent}; + $$self{width} = 76 unless defined $$self{width}; + $$self{refnamediv} = 0; + + $$self{LSTATE} = []; + $$self{MARGIN} = 0; # Current left margin in spaces. + + $self->SUPER::initialize; +} + +sub begin_pod { + my $self = shift; + + $self->output ("\n"); +} + +sub end_pod { + my $self = shift; + my $i; + + for($i = 4; $i > 0; --$i) { + if ($$self{hlevel} >= $i) { + $self->{MARGIN} -= 2; + #$self->output ("\n"); + $self->output (sprintf "\n", $i); + }; + }; + + $self->{MARGIN} -= 2; + $self->output ("\n"); +} + +# Called for each command paragraph. Gets the command, the associated +# paragraph, the line number, and a Pod::Paragraph object. Just dispatches +# the command to a method named the same as the command. =cut is handled +# internally by Pod::Parser. +sub command { + my $self = shift; + my $command = shift; + return if $command eq 'pod'; + return if ($$self{EXCLUDE} && $command ne 'end'); + $self->item ("\n") if defined $$self{ITEM}; + $command = 'cmd_' . $command; + $self->$command (@_); +} + +# Called for a verbatim paragraph. Gets the paragraph, the line number, and +# a Pod::Paragraph object. Just output it verbatim, but with tabs converted +# to spaces. +sub verbatim { + my $self = shift; + return if $$self{EXCLUDE}; + $self->item if defined $$self{ITEM}; + local $_ = shift; + return if /^\s*$/; + $$self{MARGIN} += 2; + s/&/&/g; # do & first to avoid "fixing" the & in < + s//>/g; + my $saved = $$self{MARGIN}; + $$self{MARGIN} = 0; + $self->output ("\n"); + $self->output ($_); + $self->output ("\n"); + $$self{MARGIN} = $saved; +} + +sub escapes { + (undef, local $_) = @_; + s/(&)/\&/g; + s/(<)/\</g; + s/(>)/\>/g; + $_; +} + +# Called for interior sequences. Gets a Pod::InteriorSequence object +# and is expected to return the resulting text. +sub sequence { + my ($self, $seq) = @_; + + my $cmd_name = $seq->cmd_name; + + $seq->left_delimiter( '' ); + $seq->right_delimiter( '' ); + $seq->cmd_name( '' ); + $_ = $seq->raw_text; + + if ($cmd_name eq 'B') { + $_ = sprintf "%s", $_; + } elsif ($cmd_name eq 'C') { + $_ = sprintf "%s", $_; + } elsif ($cmd_name eq 'F') { + $_ = sprintf "%s", $_; + } elsif ($cmd_name eq 'I') { + $_ = sprintf "%s", $_; + } elsif ($cmd_name eq 'S') { + # perhaps translate ' ' to   + $_ = sprintf "%s", $_; + } elsif ($cmd_name eq 'L') { + $_ = $self->seq_l ($seq); + } elsif ($cmd_name eq 'E') { + if (defined $ESCAPES{$_}) { + $_ = $ESCAPES{$_} if defined $ESCAPES{$_}; + } else { + carp "Unknown escape: E<$_>"; + } + } else { + carp "\nUnknown sequence $cmd_name<$_>\n"; + } + + my $parent = $seq->nested; + if (defined $parent) { + + if ($parent->cmd_name eq 'B') { + $_ = sprintf "%s", $_; + } elsif ($parent->cmd_name eq 'C') { + $_ = sprintf "%s", $_; + } elsif ($parent->cmd_name eq 'F') { + $_ = sprintf "%s", $_; + } elsif ($parent->cmd_name eq 'I') { + $_ = sprintf "%s", $_; + } + } + + return $_; +} + +# Called for a regular text block. Gets the paragraph, the line number, and +# a Pod::Paragraph object. Perform parse_text and output the results. +sub textblock { + my $self = shift; + return if $$self{EXCLUDE}; + $self->output ($_[0]), return if $$self{VERBATIM}; + local $_ = shift; + my $line = shift; + my $name; + my $purpose; + +# // && do { +# s/]+)\>/http:\1<\/ulink>/; +# }; +# +# /<.*@.*>/ && do { +# s/<([^>]+@[^>]+)>/\1<\/email>/g; +# }; + + $_ = $self->parse_text( + { -expand_text => q(escapes), + -expand_seq => q(sequence) }, + $_, $line ) -> raw_text(); + + if (defined $$self{ITEM}) { + $self->item ($_ . "\n"); + } elsif ($self->{refnamediv}) { + ($name, $purpose) = /(.+)\s+\-\s+(.+)/; + my $id = $name; + $id =~ s/,.*$//; # only reference by first entry? + $id =~ s/[ \.,\(\)]/_/g; + if (defined $$self{section}) { + $id = sprintf "%s%d", $id, $$self{section}; + } + $self->output ("\n"); + $self->{MARGIN} += 2; + if (defined $$self{section}) { + $self->output ("\n"); + $self->{MARGIN} += 2; + $self->output (sprintf "%s\n", $name); + $self->output (sprintf "%d\n", $$self{section}); + $self->{MARGIN} -= 2; + $self->output ("\n"); + } + $self->output ("\n"); + $self->{MARGIN} += 2; + $self->output ("$name\n"); + $self->output ("$purpose\n"); + $self->{MARGIN} -= 2; + $self->output ("\n"); + $self->{refnamediv} = 0; + } else { + s/\n+$//; + $self->output ("" . $_ . "<\/para>" . "\n\n"); + } +} + +# Level headings. +sub cmd_head { + my $self = shift; + local $_ = shift; + my $line = shift; + my $level = $self->{level}; + my $i; + + for($i = 4; $i > 0; --$i) { + if ($level <= $i) { + if ($$self{hlevel} >= $i) { + $$self{MARGIN} -= 2; + #$self->output (sprintf "\n", $i); + $self->output (sprintf "\n", $i); + } + } + } + + # special, output next as + if ($level == 1 && $_ =~ /NAME/) { + $self->{refnamediv} = 1; + return; + } + + #$self->output (sprintf "\n", $level); + $self->output (sprintf "\n", $level); + $$self{MARGIN} += 2; + s/\s+$//; + $_ = $self->parse_text( + { -expand_text => q(escapes), + -expand_seq => q(sequence) }, + $_, $line ) -> raw_text(); + if (/^[A-Z ]+$/) { + s/(\w+)/\u\L$1/g if $level == 1; # kill capitalization + } + $self->output ("" . $_ . "<\/title>" . "\n"); + $$self{hlevel} = $level; +} + +# First level heading. +sub cmd_head1 { + my $self = shift; + $self->{level} = 1; + $self->cmd_head (@_); +} + +# Second level heading. +sub cmd_head2 { + my $self = shift; + $self->{level} = 2; + $self->cmd_head (@_); +} + +# Third level heading. +sub cmd_head3 { + my $self = shift; + $self->{level} = 3; + $self->cmd_head (@_); +} + +sub cmd_head4 { + my $self = shift; + # <refsect4> doesnt exist -- we would use <refsection> + # when it becomes available in 4.4 + printf STDERR "=head4 being rendered as <refsect3>\n"; + $self->{level} = 3; + $self->cmd_head (@_); +} + +# Start a list. +sub cmd_over { + my $self = shift; + local $_ = shift; + unless (/^[-+]?\d+\s+$/) { $_ = $$self{indent} } + push (@{ $$self{LSTATE} }, $$self{lopen}); + push (@{ $$self{LSTATE} }, $$self{ltype}); + undef $self->{ltype}; + $$self{lopen} = 0; +} + +# End a list. +sub cmd_back { + my $self = shift; + if ($self->{ltype} == 2) { + $self->{MARGIN} -= 2; + $self->output ("</listitem>\n"); + $self->{MARGIN} -= 2; + $self->output ("</orderedlist>\n"); + } elsif ($self->{ltype} == 1) { + $self->{MARGIN} -= 2; + $self->output ("</listitem>\n"); + $self->{MARGIN} -= 2; + $self->output ("</itemizedlist>\n"); + } else { + $self->{MARGIN} -= 2; + $self->output ("</listitem>\n"); + $self->{MARGIN} -= 2; + $self->output ("</varlistentry>\n"); + $self->{MARGIN} -= 2; + $self->output ("</variablelist>\n"); + } + $$self{ltype} = pop @{ $$self{LSTATE} }; + $$self{lopen} = pop @{ $$self{LSTATE} }; + unless (defined $$self{LSTATE}) { + carp "Unmatched =back"; + $$self{MARGIN} = $$self{indent}; + } +} + +# An individual list item. +sub cmd_item { + my $self = shift; + if (defined $$self{ITEM}) { $self->item } + local $_ = shift; + my $line = shift; + s/\s+$//; + $$self{ITEM} = $self->parse_text( + { -expand_text => q(escapes), + -expand_seq => q(sequence) }, + $_, $line ) -> raw_text(); +} + +# Begin a block for a particular translator. Setting VERBATIM triggers +# special handling in textblock(). +sub cmd_begin { + my $self = shift; + local $_ = shift; + my ($kind) = /^(\S+)/ or return; + if ($kind eq 'text') { + $$self{VERBATIM} = 1; + } else { + $$self{EXCLUDE} = 1; + } +} + +# End a block for a particular translator. We assume that all =begin/=end +# pairs are properly closed. +sub cmd_end { + my $self = shift; + $$self{EXCLUDE} = 0; + $$self{VERBATIM} = 0; +} + +# One paragraph for a particular translator. Ignore it unless it's intended +# for text, in which case we treat it as a verbatim text block. +sub cmd_for { + my $self = shift; + local $_ = shift; + my $line = shift; + return unless s/^text\b[ \t]*\n?//; + $self->verbatim ($_, $line); +} + +# The complicated one. Handle links. Since this is plain text, we can't +# actually make any real links, so this is all to figure out what text we +# print out. +sub seq_l { + my ($self, $seq) = @_; + + s/>$//; # remove trailing > + + # Smash whitespace in case we were split across multiple lines. + s/\s+/ /g; + + # If we were given any explicit text, just output it. + if (/^([^|]+)\|/) { return $1 } + + # Okay, leading and trailing whitespace isn't important; get rid of it. + s/^\s+//; + s/\s+$//; + + # Default to using the whole content of the link entry as a section + # name. Note that L<manpage/> forces a manpage interpretation, as does + # something looking like L<manpage(section)>. The latter is an + # enhancement over the original Pod::Text. + my ($manpage, $section) = ('', $_); + if (/^(?:https?|ftp|news):/) { + # a URL + return $_; + } elsif (/^"\s*(.*?)\s*"$/) { + $section = '"' . $1 . '"'; + } elsif (m/^[-:.\w]+(?:\(\S+\))?$/) { + ($manpage, $section) = ($_, ''); + } elsif (m%/%) { + ($manpage, $section) = split (/\s*\/\s*/, $_, 2); + } + + $seq->cmd_name(""); + + # Now build the actual output text. + if (length $section) { + $section =~ s/^\"\s*//; + $section =~ s/\s*\"$//; + $_ = $section; + $_ .= " in $manpage" if length $manpage; + } + if (length $manpage) { + my $linkend = $manpage; + $linkend =~ s/[\(\)]//g; + $linkend =~ s/[ ,\.]/_/g; # this needs to match <refentry id= + $seq->prepend("<link linkend=\"$linkend\">"); + $seq->append("</link>"); + return $seq; + } else { + return $_; + } +} + +# This method is called whenever an =item command is complete (in other +# words, we've seen its associated paragraph or know for certain that it +# doesn't have one). It gets the paragraph associated with the item as an +# argument. If that argument is empty, just output the item tag; if it +# contains a newline, output the item tag followed by the newline. +# Otherwise, see if there's enough room for us to output the item tag in the +# margin of the text or if we have to put it on a separate line. +sub item { + my $self = shift; + local $_ = shift; + my $tag = $$self{ITEM}; + unless (defined $tag) { + carp "item called without tag"; + return; + } + undef $$self{ITEM}; + if ($$self{lopen}) { + if ($self->{ltype} == 1 || $self->{ltype} == 2) { + $self->{MARGIN} -= 2; + $self->output ("</listitem>\n"); + } else { + $self->{MARGIN} -= 2; + $self->output ("</listitem>\n"); + $self->{MARGIN} -= 2; + $self->output ("</varlistentry>\n"); + } + } + my $output = $_; + $output =~ s/\n*$/\n/; + if (!defined $self->{ltype}) { + if ($tag =~ /[0-9]+\./) { + $self->{ltype} = 2; + $self->output ("<orderedlist>\n"); + } elsif ($tag =~ /^\*$/) { + $self->{ltype} = 1; + $self->output ("<itemizedlist>\n"); + } else { + $self->{ltype} = 0; + $self->output ("<variablelist>\n"); + } + $self->{MARGIN} += 2; + } + if ($self->{ltype} == 1 || $self->{ltype} == 2) { + $self->output ("<listitem>\n"); + $self->{MARGIN} += 2; + s/\n+$//; + $self->output ("<para>" . $_ . "<\/para>" . "\n\n"); + } else { + $self->output ("<varlistentry>\n"); + $self->{MARGIN} += 2; + $self->output ("<term>" . $tag . "</term>" . "\n"); + $self->output ("<listitem>\n"); + $self->{MARGIN} += 2; + s/\n+$//; + $self->output ("<para>" . $_ . "<\/para>" . "\n\n"); + } + $$self{lopen} = 1; +} + +# Output text to the output device. +sub output { + my $self = shift; + local $_ = shift; + s/^(\s*\S+)/(' ' x $$self{MARGIN}) . $1/gme; + print { $self->output_handle } $_; +} + +1; + + +# pod2refentry -- Convert POD data to DocBook RefEntry +# +# Copyright 2005, 2006 by Chas Williams <chas@cmf.nrl.navy.mil> +# +# This program is free software; you may redistribute it and/or modify it +# under the same terms as Perl itself. +# +# based on: +# +# pod2text -- Convert POD data to formatted ASCII text. +# +# Copyright 1999, 2000, 2001 by Russ Allbery <rra@stanford.edu> +# +# This program is free software; you may redistribute it and/or modify it +# under the same terms as Perl itself. + +package main; + +require 5.004; + +use Getopt::Long qw(GetOptions); +use Pod::Usage qw(pod2usage); + +use strict; + +# Silence -w warnings. +use vars qw($running_under_some_shell); + +# Insert -- into @ARGV before any single dash argument to hide it from +# Getopt::Long; we want to interpret it as meaning stdin (which Pod::Parser +# does correctly). +my $stdin; +@ARGV = map { $_ eq '-' && !$stdin++ ? ('--', $_) : $_ } @ARGV; + +# Parse our options. +my %options; +GetOptions (\%options, 'help|h', 'indent|i=i', 'section|s=i' ) or exit 1; +pod2usage (1) if $options{help}; + +# Initialize and run the formatter. +my $parser = Pod::RefEntry->new (%options); +$parser->parse_from_file (@ARGV); diff --git a/doc/xml/AdminRef/preface.xml b/doc/xml/AdminRef/preface.xml new file mode 100644 index 000000000..36aea8067 --- /dev/null +++ b/doc/xml/AdminRef/preface.xml @@ -0,0 +1,171 @@ +<?xml version="1.0" encoding="UTF-8"?> +<preface id="Header_2"> + <title>About This Manual + + This chapter describes the purpose, organization, and conventions of this document. + + + Audience and Purpose + + This reference manual details the syntax of each OpenAFS command and + is intended for the experienced AFS administrator, programmer, or user. + + In general, this document does not explain when to use a command or its place in the sequence of commands that make up a + complete procedure. For that type of information, refer to the OpenAFS Administration Guide. + + + + Organization + + This document presents OpenAFS files and commands in separate sections, with the files or commands in alphabetical + order. + + The following sections of each reference page provide the indicated type of information: + + + + Purpose briefly describes the command's function. + + + + Synopsis displays the complete syntax statement for a command, which specifies the + required order for all options, using the same notation as the OpenAFS online help. If abbreviating the command name a nd option + names is acceptable, as it is for most commands, a second statement specifies the shortest acceptable abbreviation of each + name. If the command has an alias, it also appears in this section. + + + + Description describes the file or command's function in detail. + + + + Cautions describes restrictions, requirements, and potential complications in use of + the command. It appears only when necessary. + + + + Options describes the function and required form of each argument and flag. + + + + Output describes any output the command writes to the standard output stream. This + section does not appear if the command does not produce output or if the only output is a message confirming the command's + success. + + + + Examples provides one or more sample commands and resulting output. + + + + Privilege Required lists each privilege required to perform the command. + + + + Related Information lists related commands and files, if any. + + + + + + How to Use This Document + + Refer to this document when you need detailed information about a specific command. For a description of all the steps in + a procedure, refer to the OpenAFS Administration Guide. + + + + Related Documents + + The following documents are included in the OpenAFS documentation set. + + OpenAFS Administration Guide + + This guide describes the concepts and procedures that a system administrator must know to manage an AFS cell. It assumes + familiarity with UNIX, but requires no previous knowledge of AFS. + + The first chapters of the OpenAFS Administration Guide present basic concepts and guidelines. + Understanding them is crucial to successful administration of an AFS cell. The remaining chapters in the guide provide + step-by-step instructions for specific administrative tasks, along with discussions of the concepts important to that particular + task. + + OpenAFS Quick Beginnings + + This guide provides instructions for installing OpenAFS server and client machines. It is assumed that the installer is an + experienced UNIX(R) system administrator. + + For predictable performance, machines must be installed and configured in accordance with the instructions in this + guide. + + OpenAFS Release Notes + + This document provides information specific to each release of OpenAFS, such as a list of new features and commands, a list of + requirements and limitations, and instructions for upgrading server and client machines. + + OpenAFS User Guide + + This guide presents the basic concepts and procedures necessary for using AFS effectively. It assumes that the reader has + some experience with UNIX, but does not require familiarity with networking or AFS. + + The guide explains how to perform basic functions, including authenticating, changing a password, protecting AFS data, + creating groups, and troubleshooting. It provides illustrative examples for each function and describes some of the differences + between the UNIX file system and AFS. + + + + Typographical Conventions + + This document uses the following typographical conventions: + + + + Command and option names appear in bold type in syntax definitions, examples, and + running text. Names of directories, files, machines, partitions, volumes, and users also appear in bold type. + + + + Variable information appears in italic type. This includes user-supplied information on command + lines and the parts of prompts that differ depending on who issues the command. New terms also appear in italic + type. + + + + Examples of screen output and file contents appear in monospace type. + + + + In addition, the following symbols appear in command syntax definitions, both in the documentation and in OpenAFS online help + statements. When issuing a command, do not type these symbols. + + + + Square brackets [ ] surround optional items. + + + + Angle brackets < > surround user-supplied values in OpenAFS commands. + + + + A superscripted plus sign + follows an argument that accepts more than one + value. + + + + The percent sign % represents the regular command shell prompt. Some operating + systems possibly use a different character for this prompt. + + + + The number sign # represents the command shell prompt for the local superuser + root. Some operating systems possibly use a different character for this prompt. + + + + The pipe symbol | in a command syntax statement separates mutually exclusive values + for an argument. + + + + -- 2.39.5