.\" $HeadURL$ $LastChangedRevision$ .\" vim: filetype=nroff .\" .TH PAA 1 "ADE_APP_TOKEN_RELEASE_DATE_MAN" .SH NAME paa - package archive administrator .br .ne 5 .SH SYNOPSIS .B paa \*[ade_standard_synopsis_component] [ .B --rcdir=\fIdir\fR ] [ .B --force ] .I function .I function-specific-arguments .br .ne 5 .SH DESCRIPTION .B Paa is a tool for performing many administrative functions on package repositories and related resources. .PP For a description of the resources see \[oq]RESOURCES\[cq] below. For a description of the functions see \[oq]FUNCTIONS\[cq] below. For a description of the configuration directives used with the .B editrepo function see \[oq]CONFIGURATION DIRECTIVES\[cq] below. .br .ne 5 .SH RESOURCES .TP .B repository An authoritative archive of software packages. Generally, repositories are public (e.g. Debian's repository at \%http://ftp.debian.org/debian/, Fedora's EPEL repository at \%https://fedoraproject.org/wiki/EPEL) but can also be private (e.g. your own package archive at \%file:///my-debian-packages/). Repositories are updated when developers insert packages into them. .TP .B mirror A copy of a repository (e.g. Debian's official UK mirror at \%http://ftp.uk.debian.org/debian/, your own mirror of Debian). Generally, mirrors are updated nightly using a suitable .B crontab\fR(5) entry. .TP .B freeze A copy of a mirror (e.g. debian.201112201042 might contain a copy of a Debian mirror as it was at 22 December 2011 at 10:42 a.m.). Freezes are deliberately not updated after they have been created. Generally, they are implemented as directories with timestamp suffixes. .IP The purpose of freezes is to ensure that, in the future, it will not become necessary to upgrade or downgrade already installed software in order to satisfy the dependencies of software that is about to be installed. .TP .B indirect A copy of a freeze for the exclusive use of one specific host (e.g. debian.coconut might be a copy of a Debian freeze for use by the host coconut). .B Paa implements indirects using symbolic links. .TP .B share The sharing of a indirect via http, as represented by an Apache config stanza (see .B apache2\fR(8)). .TP .B access The accessing of a share by a client, as represented by a file in /etc/apt/sources.list.d or /etc/yum.repos.d (depending on the OS). .br .ne 5 .SH CONFIGURATION See the \[oq]CONFIGURATION DIRECTIVES\[cq] section below and the .B editrepo function in \[oq]FUNCTIONS\[cq] section below. .br .ne 5 .SH OPTIONS \*[ade_standard_options_component] .TP .B --force Used in conjunction with one of .B unrepo\fR, .B unmirror\fR, .B unfreeze\fR, .B unindirect\fR, .B unshare\fR or .B unaccess\fR, this option forces the deletion of multiple resources. .TP .B --rcdir=\fIdir\fR Sets the location of configuration and repository information to .I dir\fR; the default is .B ~/.paa\fR. .br .ne 5 .SH FUNCTIONS .TP .B repo \fIrepo-name pkg-type repo-type is-distro Registers a repository with .B paa\fR. .I repo-name is the name of the repository (e.g. \[oq]debian\[cq] would be a good name for registering Debian's repository, \[oq]epel\[cq] would be a good name for registering Fedora's EPEL repository, \[oq]localpublic\[cq] would be a good name for registering a repository for your own packages. .I pkg-type is either .B deb or .B rpm. .I repo-type is one of .B owned\fR, \fBmirrored\fR or \fBaccessed; .B owned means that you will be inserting packages into it and maybe mirroring it; .B mirrored means that someone else will be inserting packages into it and that you will only be mirroring it; .B accessed means that someone else will be mirroring it and that you only be accessing it, or that the repository is not mirrored at all and you will be accessing the repository directly. .I is-distro is either .B true or .B false depending whether the repository is a distribution (like \[oq]debian\[cq] or \[oq]centos\[cq]) or other software (like \[oq]virtualbox\[cq] or \[oq]epel\[cq]). .TP .B listrepos \fR[ \fIpattern\fR ... ] Lists previously registered repositories with any parameters matching .I pattern\fR. If .I pattern is not provided then all repositories will be listed. .TP .B editrepo \fIrepo-name The .B repo function specifies only limited information about a repository but more is required. This information is provided in a configuration file that this function edits. (Actually, these files are exported on-the-fly from an .B sqlite\fR(1) database and after editing the files are re-imported and deleted.) The configuration file is a POSIX shell script (see .B bash\fR(1)) calling directives to register different properties of the repository. .B Paa pre-populates the configuration file with directives that are appropriate for the type of repository that was registered, so editing the configuration is not hard. For a description of the these directives see \[oq]CONFIGURATION DIRECTIVES\[cq] below. A repository will be marked \[oq]pending\[cq] until all required directives have been specified, at which point it will be marked \[oq]available\[cq]. .TP .B unrepo \fIrepo-name Deregisters a repository. .I repo-name is the name of the repository to deregister. Repositories that have been mirrored may not be deregistered until the mirrors have been deleted (see .B unmirror below). .TP .B host \fIhost \fR[ \fIpkg-type distro release port \fR] Registers the specified host as having the specified distribution, release and port (CPU architecture). If .I host is .B THIS-HOST then the system where the command is run will be interrogated to get the values of .I pkg-type\fR, \fIdistro\fR, \fIrelease\fR and \fIport\fR and they should not be specified on the command line, otherwise they must be specified on the command line. .TP .B listhosts \fR[ \fIpattern\fR ... ] Lists previously registered hosts with any parameters matching .I pattern\fR. If .I pattern is not provided then all hosts will be listed. .TP .B unhost \fIhost Deregisters the specified host. If .I host is .B ALL-HOSTS then all hosts will be deleted. Hosts that have been indirected or accessed may not be deleted until the indirects and accesses have been deleted (see .B unindirect and .B unaccess below). .TP .B mirror \fIrepo-name\fR Mirrors the specified repository. .I repo-name is the name of the repository to mirror. If .I repo-name is .B ALL-REPOS then all repositories are mirrored. .TP .B listmirrors \fR[ \fIpattern\fR ... ] Lists previously created mirrors with any parameters matching .I pattern\fR. If .I pattern is not provided then all mirrors will be listed. .TP .B unmirror \fIrepo-name\fB Deletes the specified mirror. .I repo-name is the name of the repository to delete. If .I repo-name is .B ALL-REPOS then all mirrors will be deleted. Mirrors that have been frozen may not be deleted until the freezes have been deleted (see .B unfreeze below). .TP .B freeze \fIrepo-name Freezes the mirror of the specified repository. Freezes are assigned a freeze ID, which other functions will need to use to identify the freeze. .I repo-name is the name of the repository whose mirror should be frozen. If .I repo-name is .B ALL-REPOS then all mirrors will be frozen. .TP .B listfreezes \fR[ \fIpattern\fR ... ] Lists previously created freezes with any parameters matching .I pattern\fR. If .I pattern is not provided then all freezes will be listed. .TP .B unfreeze \fIrepo-name freeze-id Deletes the specified freeze. .I repo-name and .I freeze-id identify the freeze to be deleted. If .I repo-name is .B ALL-REPOS then all freezes of mirrors whose freeze ID matches .I freeze-id will be deleted. If .I freeze-id is .B ALL-FREEZES then all freezes of mirrors whose repository name matches .I repo-name will be deleted. Freezes that have been indirected may not be deleted until the indirects have been deleted (see .B unindirect below). .TP .B indirect \fIrepo-name host freeze-id Direct a client's request to access a repository to the specified freeze. .I repo-name is the name for the repository whose freeze should be made available to the host; .I host is the client's hostname; .I freeze-id is the freeze id of the freeze to make available to the host. If .I repo-name is .B ALL-REPOS then all repositories will be indirected. If .I freeze-id is .B NEWEST-FREEZE then only the newest freeze of each matching repository will be indirected. .TP .B listindirects \fR[ \fIpattern\fR ... ] Lists previously created indirects with any parameters matching .I pattern\fR. If .I pattern is not provided then all indirects will be listed. .TP .B unindirect \fIrepo-name host-name Deletes the specified indirect. .I repo-name and .I host-name identify the indirect to be deleted. If .I repo-name is .B ALL-REPOS then all indirects whose repository name matches .I repo-name will be deleted. If .I host-name is .B ALL-HOSTS then all indirects whose hostname matches .I host-name will be deleted. Indirects that have been shared may not be deleted until the shares have been deleted (see .B unshare below). .TP .B share \fIrepo-name host\fR Generate an .B apache2\fR(8) configuration stanza in order to make an indirect accessible. .I repo-name is the name for the repository whose indirect should be shared; .I host is the host to which it should be shared. .TP .B listshares \fR[ \fIpattern\fR ... ] Lists previously created shares with any parameters matching .I pattern\fR. If .I pattern is not provided then all shares will be listed. .TP .B unshare \fIrepo-name host\fR Deletes an .B apache2\fR(8) configuration stanza in order to make an indirect inaccessible. .TP .B access \fIrepo-name\fR On Debian-based hosts, generate .B /etc/apt/sources.list.d/\fIrepo-name\fB.list so that a host may retrieve packages from its indirect. On Redhat-based hosts, generate .B /etc/yum.repos.d/\fIrepo-name\fR.repo so that a host may retrieve packages from its indirect. .I repo-name is the name for the repository whose indirect should be accessed. .TP .B listaccesses \fR[ \fIpattern\fR ... ] Lists previously created accesses with any parameters matching .I pattern\fR. If .I pattern is not provided then all accesses will be listed. .TP .B unaccess \fIrepo-name Deletes repository access configuration files. .I repo-name is the name for the repository whose indirect should be deleted. .TP .B insert \fIrepo-name release\fR [ \fIsection\fR ] \fIfile\fR ... Inserts the specified packages into the specified section of the specified release of the specified repository. This does not add entries to any control files, so the repository is considered to be in an incomplete state between using this function and using the .B control function. If .I release is .B ALL-RELEASES then the package is inserted into all releases that the repository .I repo-name contains. .TP .B control \fIrepo-name Generates control files for the specified repository. .TP .B upgrade The database schema (i.e. the database layout) used by .B paa may change when there is a new release of .B paa\fR. For safely reasons, .B paa will refuse to start if there is a mismatch between the database schema version it is using and the database schema version it finds in the state information files (see .B FILES below). In this case, the state information files need to be upgraded in order that they can support the newer version of .B paa\fR. This function understands old and new database schemas and can upgrade the state information files accordingly. .TP .B listobsolete Lists obsolete resources (e.g. mirrors without freezes, freezes without indirects). .br .ne 5 .SH CONFIGURATION DIRECTIVES Configuration files are POSIX shell scripts. This eases repeated calls to the same directive (e.g. to register that a repository is compatible with several distributions). .TP .B compat \fIrelease pkg-type distro-name distro-release (only required for repositories that are not distributions) This specifies with which distributions the repository is compatible. .TP .B distro \fIdistro-name (only required for repositories that are distributions) This specifies the name of the distribution. .TP .B label \fIrepo-label (only required for owned deb repositories) When required, this is passed to .B apt-ftparchive\fR(1). .TP .B layout \fIrelease layout (only required for rpm repositories) This describes the internal layout of the specified release of the specified repository; specifically the path from the last release- and architecture-\fIindependent\fR directory to the directory above the repoview directory .I layout is therefore .B /Everything//os\fR. .IP .I layout may contains .B \fR, .B \fR, .B \fR, .B \fR, or .B \fR, which will respectively be replaced with the repository name, hostname, release, freeze ID and architecture when required. .TP .B mirror_cmd \[dq]\fImirror-cmd\fB\[dq] (only required for repositories that are mirrored) This specifies the command to mirror a repository. Generally, this will be a call to either .B debmirror(1) or .B rpmmirror(1)\fR. .I mirror-cmd may contain various placeholders; see the paragraph above dealing with the .B layout directive above for details. .TP .B mirror_dir \fIdirectory (only required for repositories that are mirrored) This specifies the directory into which a repository will be mirrored. .I directory may contain various placeholders; see the paragraph above dealing with the .B layout directive above for details. .TP .B freeze_dir \fIdirectory (only required for repositories that are mirrored) This specifies the directory into which a mirror will be frozen. .I directory may contain various placeholders; see the paragraph above dealing with the .B layout directive above for details. .TP .B indirect_dir \fIdirectory (only required for repositories that are mirrored) This specifies the directory into which a freeze will be indirected. .I directory may contain various placeholders; see the paragraph above dealing with the .B layout directive above for details. .TP .B origin \fIorigin (only required for owned deb repositories) When required, this is passed to .B apt-ftparchive\fR(1). .TP .B path \fIdirectory (only required for repositories that are owned) .I directory may contain various placeholders; see the paragraph above dealing with the .B layout directive above for details. .TP .B port \fIrelease port Specifies the ports (CPU architectures) that the release contains; how these are written is OS-specific (e.g. Debian call 64-bit x86 \[oq]amd64\[cq], whereas Fedora calls the same thing \[oq]x86_64\[cq]). .TP .B release \fIrelease Specifies a release that the repository contains; if the repository contains multiple releases then call this directive multiple times. .TP .B section \fIrelease section (only required for deb repositories) Specifies the sections that the release contains. .TP .B signer \fIsigner (only required for owned deb repositories) When required, this is passed to .B apt-ftparchive\fR(1). .TP .B url \fIurl (only required for repositories that are mirrored or accessed) Specifies the URL of a repository being shared or of a repository being accessed. .br .ne 5 .SH EXIT STATUS On success .B paa returns zero. On failure it returns non-zero and displays a diagnostic message. .br .ne 5 .SH FILES .TP 25 .B ~/.paa Default directory for configuration and state information. .br .ne 5 .SH ENVIRONMENT VARIABLES .TP 25 .B PAA_RCDIR Equivalent to use of the .B --rcdir option .br .ne 5 .SH EXAMPLES Several human roles are involved in making packages, mirroring them, serving them to clients and installing them on those clients. For this example we assume the following roles: .IP \[bu] a developer develops packages on the development host \[oq]apple\[cq] and inserts them into a repository on the same machine (or an NFS server he has mounted on his development host) .IP \[bu] a repositories administrator manages the mirrors, freezes and indirects on the host \[oq]banana\[cq] .IP \[bu] a system administrator installs packages on a host \[oq]coconut\[cq] .PP So, to start this example session, on apple, the package developer registers a new repository: .IP .nf .fam C developer@apple$ \fBpaa repo localpublic deb owned false\fR .fam T .fi .br .PP The package developer then needs to provide more information about the repository (e.g. what it contains and which it is compatible with), which he does by running: .IP .nf .fam C developer@apple$ \fBpaa editrepo localpublic\fR .fam T .fi .br .PP This launches his favourite editor, provides an example configuration file that he must tune. Let us suppose that the configuration he provides is the following: .IP .nf .fam C .B ##################################################################### .B # .B #\ \ Internal variables (defined for convenience and referenced only .B #\ \ from within this file) .B # .B ##################################################################### .B \ .B _RELEASES=\[dq]lenny squeeze wheezy\[dq] .B _PORTS=\[dq]i386 amd64\[dq] .B _SECTIONS=\[dq]main\[dq] .B \ .B ##################################################################### .B # .B #\ \ Repository contents (defines what is in or may be inserted into .B #\ \ this repo) .B # .B ##################################################################### .B \ .B for _RELEASE in $_RELEASES; do .B \ \ \ \ release $_RELEASE .B \ \ \ \ for _PORT in $_PORTS; do .B \ \ \ \ \ \ \ \ port $_RELEASE $_PORT .B \ \ \ \ done .B \ \ \ \ for _SECTION in $_SECTIONS; do .B \ \ \ \ \ \ \ \ section $_RELEASE $_SECTION .B \ \ \ \ done .B done .B \ .B ##################################################################### .B # .B #\ \ Compatibility (defines on which distros each release in this .B #\ \ non-distro repo may be installed) .B # .B ##################################################################### .B \ .B for _RELEASE in $_RELEASES; do .B \ \ \ \ compat $_RELEASE deb debian $_RELEASE .B done .B compat squeeze deb ubuntu \[rs]* .B \ .B ##################################################################### .B # .B #\ \ Miscellaneous settings .B # .B ##################################################################### .B \ .B #\ \ Path to the repository (not the mirror of the repository) .B path /pub/computing/software/local/debian/localpublic-deb .B #\ \ Debian repositories need to know a few other things. .B origin \[dq]Joe Bloggs\[dq] .B label \[dq]Joe Bloggs\[dq] .B signer \[dq]jbloggs\[dq] .fam T .fi .br .PP At this point the developer may insert packages in to the repository and generate the necessary control files: .IP .nf .fam C developer@apple$ \fBpaa insert localpublic lenny,squeeze,wheezy main \[rs] .B \ \ \ \ mjpg-streamer_r94-1_i386.deb\fR developer@apple$ \fBpaa insert localpublic lenny,squeeze,wheezy main \[rs] .B \ \ \ \ googleearth_5.0.11733.9347+0.5.4-1_i386.deb\fR developer@apple$ \fBpaa control localpublic\fR .fam T .fi .br .PP Let us suppose that the system administrators wish to install hosts, configuring them to access the local mirrors of the Debian repository and the \[oq]localpublic\[cq] repository. On host \[oq]banana\[cq], the .I repository administrator first registers the repositories: .IP .nf .fam C repoadmin@banana$ \fBpaa repo debian deb mirrored true\fR repoadmin@banana$ \fBpaa repo localpublic deb mirrored false\fR .fam T .fi .br .PP (The .B true and .B false refer to the fact that Debian is a distribution, whereas localpublic is not.) .PP Just as the developer did, he needs to provide more information about the repositories, which he does by running: .IP .nf .fam C repoadmin@banana$ \fBpaa editrepo ALL-REPOS\fR .fam T .fi .br .PP For the \[oq]debian\[cq] repository he provides the following configuration: .IP .nf .fam C .B ##################################################################### .B # .B #\ \ Internal variables (defined for convenience and referenced only .B #\ \ from within this file) .B # .B ##################################################################### .B \ .B _RELEASES=\[dq]squeeze\[dq] .B _PORTS=\[dq]i386 amd64\[dq] .B _SECTIONS=\[dq]main contrib non-free main/debian-installer\[dq] .B \ .B ##################################################################### .B # .B #\ \ Repository contents (defines what is in or may be inserted into .B #\ \ this repo) .B # .B ##################################################################### .B \ .B for _RELEASE in $_RELEASES; do .B \ \ \ \ release $_RELEASE .B \ \ \ \ for _PORT in $_PORTS; do .B \ \ \ \ \ \ \ \ port $_RELEASE $_PORT .B \ \ \ \ done .B \ \ \ \ for _SECTION in $_SECTIONS; do .B \ \ \ \ \ \ \ \ section $_RELEASE $_SECTION .B \ \ \ \ done .B done .B \ .B ##################################################################### .B # .B #\ \ Miscellaneous settings .B # .B ##################################################################### .B \ .B #\ \ URL for the repo .B url \[dq]http://install.pasta.net/./\[dq] .B #\ \ The path to your mirror .B mirror_dir \[dq]/pub/mirrors/\[dq] .B #\ \ The path to your freezes .B freeze_dir \[dq]/pub/freezes/.\[dq] .B #\ \ The path to your indirects .B indirect_dir \[dq]/pub/indirects/.\[dq] .B #\ \ The command to update the mirror in the current directory. .B mirror_cmd \[dq]debmirror \[rs] .B \ \ \ \ --rsync-options=\[rs]\[dq]-aIL --partial --no-motd\[rs]\[dq] \[rs] .B \ \ \ \ --ignore-release-gpg --getcontents --nosource \[rs] .B \ \ \ \ --method=rsync --host=ftp2.de.debian.org --root=:debian \[rs] .B \ \ \ \ --arch=${_PORTS// /,} --dist=${_RELEASES// /,} \[rs] .B \ \ \ \ --section=${_SECTIONS// /,} --di-dist=dists --di-arch=arches .\[dq] .B #\ \ Which distribution is this repo for? .B distro debian .fam T .fi .br .PP For the \[oq]localpublic\[cq] repository he provides the following configuration, which is similar to the configuration that the developer used, but omits .B signer\fR, .B label\fR, .B origin and .B path\fR, and includes .B url\fR, .B mirror_dir\fR, .B freeze_dir\fR, .B indirect_dir and .B mirror_cmd\fR: .IP .nf .fam C .B ##################################################################### .B # .B #\ \ Internal variables (defined for convenience and referenced only .B #\ \ from within this file) .B # .B ##################################################################### .B \ .B _RELEASES=\[dq]lenny squeeze wheezy\[dq] .B _PORTS=\[dq]i386 amd64\[dq] .B _SECTIONS=\[dq]main\[dq] .B \ .B ##################################################################### .B # .B #\ \ Repository contents (defines what is in or may be inserted into .B #\ \ this repo) .B # .B ##################################################################### .B \ .B for _RELEASE in $_RELEASES; do .B \ \ \ \ release $_RELEASE .B \ \ \ \ for _PORT in $_PORTS; do .B \ \ \ \ \ \ \ \ port $_RELEASE $_PORT .B \ \ \ \ done .B \ \ \ \ for _SECTION in $_SECTIONS; do .B \ \ \ \ \ \ \ \ section $_RELEASE $_SECTION .B \ \ \ \ done .B done .B \ .B ##################################################################### .B # .B #\ \ Compatibility (defines on which distros each release in this .B #\ \ non-distro repo may be installed) .B # .B ##################################################################### .B \ .B for _RELEASE in $_RELEASES; do .B \ \ \ \ compat $_RELEASE deb debian $_RELEASE .B done .B compat squeeze deb ubuntu \[rs]* .B \ .B ##################################################################### .B # .B #\ \ Miscellaneous settings .B # .B ##################################################################### .B \ .B #\ \ URL for the repo .B url \[dq]http://install.pasta.net/./\[dq] .B #\ \ The path to your mirror .B mirror_dir \[dq]/pub/mirrors/\[dq] .B #\ \ The path to your freezes .B freeze_dir \[dq]/pub/freezes/.\[dq] .B #\ \ The path to your indirects .B indirect_dir \[dq]/pub/indirects/.\[dq] .fam T .fi .br .PP Then he mirrors these repositories and immediately freezes the mirrors: .IP .nf .fam C repoadmin@banana$ \fBpaa mirror ALL-REPOS\fR repoadmin@banana$ \fBpaa freeze ALL-REPOS\fR .fam T .fi .br .PP .PP .B Paa is intelligent enough to share with a client only those repositories that are appropriate, providing it is told a little about the client. To do this the repository administrator runs: .IP .nf .fam C repoadmin@banana$ \fBpaa host coconut deb debian squeeze amd64\fR .fam T .fi .br .PP meaning that coconut is declared as have a deb-based OS, specifically Debian, it is running the squeeze release of Debian and more specifically the amd64 port. .PP Directing incoming requests for packages to the appropriate freezes is done by running: .IP .nf .fam C repoadmin@banana$ \fBpaa indirect ALL-REPOS coconut NEWEST-FREEZE\fR repoadmin@banana$ \fBpaa share\ \ \ \ ALL-REPOS coconut\fR .fam T .fi .br .PP .PP The system administrator on coconut tells .B paa about his host; he can do this using the same .B paa host command that the repository administrator just used, or can ask .B paa to work it out for itself by running: .IP .nf .fam C root@coconut# \fBpaa host THIS-HOST\fR .fam T .fi .br .PP .PP He then registers the two repositories he wants to access by running: .IP .nf .fam C root@coconut# \fBpaa repo debian deb accessed true\fR root@coconut# \fBpaa repo localpublic deb accessed false\fR .fam T .fi .br .PP and, just as the developer and repositories administrator did, he needs to provide more information about the repositories, which he does by running: .IP .nf .fam C root@coconut# \fBpaa editrepo ALL-REPOS\fR .fam T .fi .br .PP The configurations he provides are the same as above, except that some directives need to be deleted (because he intends to do less with the repositories than the developer or repositories administrator did), but .B paa will warn him which directives need to be deleted, and will not mark the repository as \[oq]available\[cq] until all errors have been resolved. .PP Then he can configure coconut's package management system .B \fR(\fBapt\fR(8) in this example, because coconut is a Debian system) by running: .IP .nf .fam C root@coconut# \fBpaa access ALL-REPOS\fR .fam T .fi .br .PP And finally he can install software: .IP .nf .fam C root@coconut# \fBapt-get update\fR root@coconut# \fBapt-get install mjpg-streamer_r94-1_i386.deb\fR .fam T .fi .br .ne 5 .SH CAVEATS Currently, .B paa\fR's .B share and .B unshare functions only support .B apache2\fR(8). .br .ne 5 .SH STANDARDS This manual page documents version ADE_APP_TOKEN_RELEASE_ID of .B paa\fR. .br .ne 5 .SH SEE ALSO apache2(8), apt-ftparchive(1), apt-get(8), bash(1), crontab(5), deb(5), debmirror(1), rpmmirror(1), sqlite(1), rpm(8), yum(8) .br .ne 5 .SH AUTHOR ADE_APP_TOKEN_AUTHOR_NAME .br .ne 5 .SH COPYRIGHT & DISTRIBUTION POLICY Copyright (C) 1995-ADE_APP_TOKEN_RELEASE_YEAR ADE_APP_TOKEN_AUTHOR_NAME \*[ade_standard_copyright_component]