michael@428: .\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.22) michael@428: .\" michael@428: .\" Standard preamble: michael@428: .\" ======================================================================== michael@428: .de Sp \" Vertical space (when we can't use .PP) michael@428: .if t .sp .5v michael@428: .if n .sp michael@428: .. michael@428: .de Vb \" Begin verbatim text michael@428: .ft CW michael@428: .nf michael@428: .ne \\$1 michael@428: .. michael@428: .de Ve \" End verbatim text michael@428: .ft R michael@428: .fi michael@428: .. michael@428: .\" Set up some character translations and predefined strings. \*(-- will michael@428: .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left michael@428: .\" double quote, and \*(R" will give a right double quote. \*(C+ will michael@428: .\" give a nicer C++. Capital omega is used to do unbreakable dashes and michael@428: .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, michael@428: .\" nothing in troff, for use with C<>. michael@428: .tr \(*W- michael@428: .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' michael@428: .ie n \{\ michael@428: . ds -- \(*W- michael@428: . ds PI pi michael@428: . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch michael@428: . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch michael@428: . ds L" "" michael@428: . ds R" "" michael@428: . ds C` michael@428: . ds C' michael@428: 'br\} michael@428: .el\{\ michael@428: . ds -- \|\(em\| michael@428: . ds PI \(*p michael@428: . ds L" `` michael@428: . ds R" '' michael@428: 'br\} michael@428: .\" michael@428: .\" Escape single quotes in literal strings from groff's Unicode transform. michael@428: .ie \n(.g .ds Aq \(aq michael@428: .el .ds Aq ' michael@428: .\" michael@428: .\" If the F register is turned on, we'll generate index entries on stderr for michael@428: .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index michael@428: .\" entries marked with X<> in POD. Of course, you'll have to process the michael@428: .\" output yourself in some meaningful fashion. michael@428: .ie \nF \{\ michael@428: . de IX michael@428: . tm Index:\\$1\t\\n%\t"\\$2" michael@428: .. michael@428: . nr % 0 michael@428: . rr F michael@428: .\} michael@428: .el \{\ michael@428: . de IX michael@428: .. michael@428: .\} michael@428: .\" michael@428: .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). michael@428: .\" Fear. Run. Save yourself. No user-serviceable parts. michael@428: . \" fudge factors for nroff and troff michael@428: .if n \{\ michael@428: . ds #H 0 michael@428: . ds #V .8m michael@428: . ds #F .3m michael@428: . ds #[ \f1 michael@428: . ds #] \fP michael@428: .\} michael@428: .if t \{\ michael@428: . ds #H ((1u-(\\\\n(.fu%2u))*.13m) michael@428: . ds #V .6m michael@428: . ds #F 0 michael@428: . ds #[ \& michael@428: . ds #] \& michael@428: .\} michael@428: . \" simple accents for nroff and troff michael@428: .if n \{\ michael@428: . ds ' \& michael@428: . ds ` \& michael@428: . ds ^ \& michael@428: . ds , \& michael@428: . ds ~ ~ michael@428: . ds / michael@428: .\} michael@428: .if t \{\ michael@428: . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" michael@428: . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' michael@428: . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' michael@428: . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' michael@428: . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' michael@428: . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' michael@428: .\} michael@428: . \" troff and (daisy-wheel) nroff accents michael@428: .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' michael@428: .ds 8 \h'\*(#H'\(*b\h'-\*(#H' michael@428: .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] michael@428: .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' michael@428: .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' michael@428: .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] michael@428: .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] michael@428: .ds ae a\h'-(\w'a'u*4/10)'e michael@428: .ds Ae A\h'-(\w'A'u*4/10)'E michael@428: . \" corrections for vroff michael@428: .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' michael@428: .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' michael@428: . \" for low resolution devices (crt and lpr) michael@428: .if \n(.H>23 .if \n(.V>19 \ michael@428: \{\ michael@428: . ds : e michael@428: . ds 8 ss michael@428: . ds o a michael@428: . ds d- d\h'-1'\(ga michael@428: . ds D- D\h'-1'\(hy michael@428: . ds th \o'bp' michael@428: . ds Th \o'LP' michael@428: . ds ae ae michael@428: . ds Ae AE michael@428: .\} michael@428: .rm #[ #] #H #V #F C michael@428: .\" ======================================================================== michael@428: .\" michael@428: .IX Title "STACK 8" michael@428: .TH STACK 8 "OpenPKG" "STACK(8)" "OpenPKG" michael@428: .\" For nroff, turn off justification. Always turn off hyphenation; it makes michael@428: .\" way too many mistakes in technical documents. michael@428: .if n .ad l michael@428: .nh michael@428: .SH "NAME" michael@428: openpkg stack \- OpenPKG Software Stack Generation michael@428: .SH "SYNOPSIS" michael@428: .IX Header "SYNOPSIS" michael@428: \&\fBopenpkg stack\fR michael@428: [\fB\-h\fR|\fB\-\-help\fR] michael@428: [\fB\-v\fR|\fB\-\-verbose\fR \fIlevel\fR] michael@428: [\fB\-o\fR|\fB\-\-output\fR \fIdir\fR] michael@428: [\fB\-D\fR|\fB\-\-define\fR \fIname\fR=\fIvalue\fR ...] michael@428: [\fB\-u\fR|\fB\-\-unversioned\fR] michael@428: [\fB\-q\fR|\fB\-\-query\fR] michael@428: \&\fI\fIname\fI.stk\fR michael@428: .SH "DESCRIPTION" michael@428: .IX Header "DESCRIPTION" michael@428: The \fBopenpkg stack\fR command reads a OpenPKG software stack definition michael@428: \&\fI\fIname\fI.stk\fR, generates a OpenPKG software stack deployment script michael@428: \&\fI\fIname\fI[\-\fIversion\fI\-\fIrelease\fI].sh\fR, determines, downloads and michael@428: stores all required corresponding OpenPKG source packages under michael@428: \&\fI\fIname\fI[\-\fIversion\fI\-\fIrelease\fI].src.d/*.src.{sh,rpm}\fR. michael@428: .PP michael@428: On executing the generated OpenPKG software stack deployment michael@428: script \fI\fIname\fI[\-\fIversion\fI\-\fIrelease\fI].sh\fR, an OpenPKG michael@428: instance is created (or reused if existing), all packages michael@428: built and installed in topologically correct dependency order michael@428: and the resulting OpenPKG binary packages stored as michael@428: \&\fI\fIname\fI[\-\fIversion\fI\-\fIrelease\fI].\fIplatform\fI\-\fItag\fI.d/*.{sh,rpm}\fR. michael@428: .PP michael@428: The main design decisions and intentions of OpenPKG software stacks are: michael@428: .IP "1." 4 michael@428: OpenPKG software stacks can be centrally defined in a single file michael@428: \&\fI\fIname\fI.stk\fR, similar to the definition of OpenPKG software packages in michael@428: \&\fI\fIname\fI.spec\fR files. This definition includes both OpenPKG framework michael@428: bootstrap parameters, OpenPKG package build parameters and OpenPKG michael@428: software stack specific deployment-time prolog and epilog scripts. michael@428: .IP "2." 4 michael@428: OpenPKG software stacks depend on particular OpenPKG software packages michael@428: (and perhaps even their particular versions) and by downloading and michael@428: locally storing all relevant OpenPKG software packages an OpenPKG michael@428: software stack remains stable and self-contained \*(-- even if new versions michael@428: of OpenPKG software packages are released. michael@428: .IP "3." 4 michael@428: For generating the OpenPKG software stack files, an OpenPKG instance michael@428: and its \fBopenpkg stack\fR command is required, but executing the OpenPKG michael@428: software stack deployment script does \s-1NOT\s0 require any pre-existing michael@428: OpenPKG instances. michael@428: .IP "4." 4 michael@428: By wrapping \fI\fIname\fI[\-\fIversion\fI\-\fIrelease\fI].sh\fR and michael@428: \&\fI\fIname\fI[\-\fIversion\fI\-\fIrelease\fI].src.d/\fR into a \fIShell Execution michael@428: Archive\fR \fI\fIname\fI[\-\fIversion\fI\-\fIrelease\fI].src.sh\fR with the \fBopenpkg michael@428: sea\fR command, you can provide a single self-contained file for building michael@428: and installing an OpenPKG software stack from OpenPKG source packages. michael@428: .IP "5." 4 michael@428: By wrapping \fI\fIname\fI[\-\fIversion\fI\-\fIrelease\fI].sh\fR and michael@428: \&\fI\fIname\fI[\-\fIversion\fI\-\fIrelease\fI].\fIplatform\fI\-\fItag\fI.d/\fR michael@428: into a \fIShell Execution Archive\fR michael@428: \&\fI\fIname\fI[\-\fIversion\fI\-\fIrelease\fI].\fIplatform\fI\-\fItag\fI.sh\fR with the michael@428: \&\fBopenpkg sea\fR command, you can provide a single self-contained file for michael@428: installing an OpenPKG software stack from OpenPKG binary packages. michael@428: .SH "COMMAND-LINE OPTIONS AND ARGUMENTS" michael@428: .IX Header "COMMAND-LINE OPTIONS AND ARGUMENTS" michael@428: .IP "\fB\-h\fR|\fB\-\-help\fR" 4 michael@428: .IX Item "-h|--help" michael@428: Just shows a short usage information for the \fBopenpkg stack\fR command. michael@428: .IP "\fB\-v\fR|\fB\-\-verbose\fR \fIlevel\fR" 4 michael@428: .IX Item "-v|--verbose level" michael@428: Sets the verbosity level for outputs, from \f(CW0\fR (no output at all) to 4 michael@428: (all possible outputs). The default is \f(CW4\fR. michael@428: .IP "\fB\-o\fR|\fB\-\-output\fR \fIdir\fR" 4 michael@428: .IX Item "-o|--output dir" michael@428: The output directory for the OpenPKG software stack files. michael@428: The default is the current directory (\fI.\fR). michael@428: .IP "[\fB\-D\fR|\fB\-\-define\fR \fIname\fR=\fIvalue\fR ...]" 4 michael@428: .IX Item "[-D|--define name=value ...]" michael@428: On-the-fly overrides the value of option macro \f(CW\*(C`%{\f(CIname\f(CW}\*(C'\fR with michael@428: \&\fIvalue\fR. Use this to generate a variant of an OpenPKG software stack michael@428: without modifying the software stack definition file. michael@428: .IP "[\fB\-u\fR|\fB\-\-unversioned\fR]" 4 michael@428: .IX Item "[-u|--unversioned]" michael@428: By default \fBopenpkg stack\fR creates the file michael@428: \&\f(CW\*(C`\f(CIname\f(CW\-\f(CIversion\f(CW\-\f(CIrelease\f(CW.sh\*(C'\fR (deployment script) and the michael@428: directory \f(CW\*(C`\f(CIname\f(CW\-\f(CIversion\f(CW\-\f(CIrelease\f(CW.src.d/\*(C'\fR (source packages). michael@428: With this option the names are \f(CW\*(C`\f(CIname\f(CW.sh\*(C'\fR and \f(CW\*(C`\f(CIname\f(CW.src.d/\*(C'\fR only. michael@428: .IP "[\fB\-q\fR|\fB\-\-query\fR]" 4 michael@428: .IX Item "[-q|--query]" michael@428: Forces a different operation mode where a shell script is output michael@428: on \fIstdout\fR containing variable definitions in the format michael@428: \&\f(CW\*(C`\f(CIname\f(CW="\f(CIvalue\f(CW";\*(C'\fR with information about the software stack michael@428: definition. The provided variable names are \f(CW\*(C`name\*(C'\fR, \f(CW\*(C`summary\*(C'\fR, michael@428: \&\f(CW\*(C`packager\*(C'\fR, \f(CW\*(C`version\*(C'\fR and \f(CW\*(C`release\*(C'\fR for the corresponding headers, michael@428: plus variables for all defined software stack options (see \f(CW%option\fR michael@428: section below). michael@428: .IP "\fIname\fR\fI.stk\fR" 4 michael@428: .IX Item "name.stk" michael@428: The mandatory OpenPKG software stack definition file. michael@428: See below under \fB\s-1SOFTWARE\s0 \s-1STACK\s0 \s-1DEFINITION\s0\fR for details. michael@428: .SH "SOFTWARE STACK DEFINITION" michael@428: .IX Header "SOFTWARE STACK DEFINITION" michael@428: An OpenPKG software stack is defined by a configuration file michael@428: containing headers (\f(CW\*(C`Foo:\*(C'\fR) and sections (<%foo>). michael@428: .SS "Configuration Headers" michael@428: .IX Subsection "Configuration Headers" michael@428: .IP "\fBName\fR" 4 michael@428: .IX Item "Name" michael@428: The name of the OpenPKG software stack. Also used as a prefix for many michael@428: files. Should match the regular expression \f(CW\*(C`^[a\-z][a\-zA\-Z0\-9]+\*(C'\fR, michael@428: although this is not enforced. Example: \f(CW\*(C`Name: example\*(C'\fR. michael@428: .IP "\fBSummary\fR" 4 michael@428: .IX Item "Summary" michael@428: A single line, shortly summarizing the purpose of the OpenPKG software michael@428: stack. Example: \f(CW\*(C`Summary: Example Stack\*(C'\fR. michael@428: .IP "\fBPackager\fR" 4 michael@428: .IX Item "Packager" michael@428: Name of the packager of the OpenPKG software software stack. michael@428: Example: \f(CW\*(C`Packager: OpenPKG GmbH\*(C'\fR. michael@428: .IP "\fBVersion\fR" 4 michael@428: .IX Item "Version" michael@428: Version identifier of the OpenPKG software stack. Describes the michael@428: \&\fIlogical\fR revision of the software stack definition. Should match the michael@428: regular expression \f(CW\*(C`^[0\-9]+\e.[0\-9]\e.[0\-9]+$\*(C'\fR, although this is not michael@428: enforced. Example: \f(CW\*(C`Version: 1.0.0\*(C'\fR. michael@428: .IP "\fBRelease\fR" 4 michael@428: .IX Item "Release" michael@428: Release identifier of the OpenPKG software stack. Describes the michael@428: \&\fIphysical\fR revision of the stack definition. Should be in the format michael@428: \&\f(CW\*(C`YYYYMMDD\*(C'\fR and hence match the regular expression \f(CW\*(C`^[0\-9]{8}$\*(C'\fR, michael@428: although this is not enforced. Example: \f(CW\*(C`Release: 20120101\*(C'\fR. michael@428: .SS "Configuration Sections" michael@428: .IX Subsection "Configuration Sections" michael@428: .ie n .IP "\fB\fB%options\fB\fR" 4 michael@428: .el .IP "\fB\f(CB%options\fB\fR" 4 michael@428: .IX Item "%options" michael@428: Zero or more options for the OpenPKG software stack, one per line, in michael@428: the format "\fIname\fR \fIdefault-value\fR". Options can be overridden on michael@428: the command-line with \fB\-D\fR\fIname\fR=\fIvalue\fR. Example: \f(CW\*(C`with_ssl yes\*(C'\fR. michael@428: Option values can be expanded in all headers and sections through the michael@428: following constructs: michael@428: .RS 4 michael@428: .ie n .IP "\*(C`%{\f(CIname\f(CW}\*(C'" 4 michael@428: .el .IP "\f(CW\*(C`%{\f(CIname\f(CW}\*(C'\fR" 4 michael@428: .IX Item "%{name}" michael@428: Expand to the value of option \fIname\fR. michael@428: .ie n .IP "\*(C`%{?\f(CIname\f(CW:\f(CIvalue\f(CW}\*(C'" 4 michael@428: .el .IP "\f(CW\*(C`%{?\f(CIname\f(CW:\f(CIvalue\f(CW}\*(C'\fR" 4 michael@428: .IX Item "%{?name:value}" michael@428: Expand to \fIvalue\fR if option \fIname\fR is defined. michael@428: .ie n .IP "\*(C`%{!?\f(CIname\f(CW:\f(CIvalue\f(CW}\*(C'" 4 michael@428: .el .IP "\f(CW\*(C`%{!?\f(CIname\f(CW:\f(CIvalue\f(CW}\*(C'\fR" 4 michael@428: .IX Item "%{!?name:value}" michael@428: Expand to \fIvalue\fR if option \fIname\fR is \s-1NOT\s0 defined. michael@428: .RE michael@428: .RS 4 michael@428: .RE michael@428: .ie n .IP "\fB\fB%description\fB\fR" 4 michael@428: .el .IP "\fB\f(CB%description\fB\fR" 4 michael@428: .IX Item "%description" michael@428: A single textual paragraph describing the purpose of the OpenPKG michael@428: software stack in more detail than header \f(CW\*(C`Summary\*(C'\fR. michael@428: .ie n .IP "\fB\fB%framework\fB\fR" 4 michael@428: .el .IP "\fB\f(CB%framework\fB\fR" 4 michael@428: .IX Item "%framework" michael@428: The command-line parameters passed to the OpenPKG framework michael@428: bootstrap source shell package \fIopenpkg\-*.src.sh\fR. Usually at michael@428: least the parameters \fB\-\-prefix=\fR\fIpath\fR, \fB\-\-user=\fR\fIusername\fR, michael@428: \&\fB\-\-group=\fR\fIgroupname\fR and \fB\-\-tag=\fR\fItagname\fR are given here. In order michael@428: to allow an OpenPKG software stack to be easily reused one creates michael@428: the options (see \f(CW%option\fR above) named \f(CW\*(C`prefix\*(C'\fR, \f(CW\*(C`user\*(C'\fR, \f(CW\*(C`group\*(C'\fR michael@428: and \f(CW\*(C`tag\*(C'\fR and then use \f(CW\*(C`\-\-prefix=%{prefix}\*(C'\fR, \f(CW\*(C`\-\-user=%{user}\*(C'\fR, michael@428: \&\f(CW\*(C`\-\-group=%{group}\*(C'\fR and \f(CW\*(C`\-\-tag=%{tag}\*(C'\fR in this \f(CW%framework\fR section. michael@428: .ie n .IP "\fB\fB%packages\fB\fR" 4 michael@428: .el .IP "\fB\f(CB%packages\fB\fR" 4 michael@428: .IX Item "%packages" michael@428: The packages to build and install for the OpenPKG software stack, in michael@428: the format of "\fB\-D\f(BIpackage\fB::\f(BIoption\fB=\f(BIvalue\fB\fR\*(L" and \*(R"\fIpackage\fR" michael@428: specifications as understood by the \f(CW\*(C`openpkg build\*(C'\fR tool. Example: michael@428: \&\f(CW\*(C`\-Dapache::with_mod_ssl=yes \-Dapache\-php::with_json=yes apache michael@428: apache\-php\*(C'\fR. michael@428: .ie n .IP "\fB\fB%prolog\fB\fR" 4 michael@428: .el .IP "\fB\f(CB%prolog\fB\fR" 4 michael@428: .IX Item "%prolog" michael@428: A shell script executed before installation of all packages. michael@428: The variable \f(CW$prefix\fR is available to access the michael@428: OpenPKG software stack without having to hard-code a path. michael@428: .ie n .IP "\fB\fB%epilog\fB\fR" 4 michael@428: .el .IP "\fB\f(CB%epilog\fB\fR" 4 michael@428: .IX Item "%epilog" michael@428: A shell script executed after installation of all packages. This michael@428: is usually used for applying OpenPKG software stack specific michael@428: configurations. The variable \f(CW$prefix\fR is available to access the michael@428: OpenPKG software stack without having to hard-code a path. Example: michael@428: \&\f(CW\*(C`echo "openldap_enable=no" >>$prefix/etc/rc.conf\*(C'\fR. michael@428: .SH "EXAMPLES" michael@428: .IX Header "EXAMPLES" michael@428: .Vb 1 michael@428: \& $ cat xamp.stk michael@428: \& michael@428: \& Name: xamp michael@428: \& Summary: Apache\-MySQL\-PHP Server michael@428: \& Packager: OpenPKG GmbH michael@428: \& Version: 1.0.0 michael@428: \& Release: 20120407 michael@428: \& michael@428: \& %description michael@428: \& This software stack contains a so\-called xAMP web stack, consisting michael@428: \& of the major components Apache, MySQL and PHP. michael@428: \& michael@428: \& %options michael@428: \& repo http://download.openpkg.org/stacks/current/source/ michael@428: \& prefix /xamp michael@428: \& user xamp michael@428: \& group xamp michael@428: \& tag xamp michael@428: \& with_ldap no michael@428: \& with_ssl no michael@428: \& addr 127.0.0.1 michael@428: \& michael@428: \& %repository michael@428: \& %{repo} michael@428: \& michael@428: \& %framework michael@428: \& \-\-prefix=%{prefix} michael@428: \& \-\-user=%{user} michael@428: \& \-\-group=%{group} michael@428: \& \-\-tag=%{tag} michael@428: \& michael@428: \& %packages michael@428: \& \-D apache::with_mod_dav=yes michael@428: \& \-D apache::with_mod_deflate=yes michael@428: \& \-D apache::with_mod_ldap=%{with_ldap} michael@428: \& \-D apache::with_mod_proxy=yes michael@428: \& \-D apache::with_mod_ssl=%{with_ssl} michael@428: \& \-D apache\-php::with_curl=yes michael@428: \& \-D apache\-php::with_freetype=yes michael@428: \& \-D apache\-php::with_gd=yes michael@428: \& \-D apache\-php::with_iconv=yes michael@428: \& \-D apache\-php::with_json=yes michael@428: \& \-D apache\-php::with_mbregex=yes michael@428: \& \-D apache\-php::with_mbstring=yes michael@428: \& \-D apache\-php::with_mysql=yes michael@428: \& \-D apache\-php::with_openldap=%{with_ldap} michael@428: \& \-D apache\-php::with_session=yes michael@428: \& \-D apache\-php::with_simplexml=yes michael@428: \& \-D apache\-php::with_sqlite=yes michael@428: \& \-D apache\-php::with_ssl=%{with_ssl} michael@428: \& \-D apache\-php::with_xml=yes michael@428: \& \-D apache\-php::with_zlib=yes michael@428: \& apache michael@428: \& apache\-php michael@428: \& mysql michael@428: \& michael@428: \& %epilog michael@428: \& shtool subst \e michael@428: \& \-e \*(Aqs;127\e.0\e.0\e.1:%{addr};g\*(Aq \e michael@428: \& %{prefix}/etc/apache/apache.conf michael@428: \& if [ ".%{with_ldap}" = .yes ]; then michael@428: \& echo "openldap_enable=\e"no\e"" >>%{prefix}/etc/rc.conf michael@428: \& fi michael@428: \& michael@428: \& $ openpkg stack \-v4 \e michael@428: \& \-Dprefix=/v/xamp \-Duser=xamp\-sw \-Dgroup=xamp\-sw \e michael@428: \& \-\-unversioned xamp.stk michael@428: \& michael@428: \& $ openpkg sea \-o xamp.src.sh xamp.sh xamp.src.d/ michael@428: \& michael@428: \& $ sh xamp.src.sh \-v4 \-S sudo michael@428: \& michael@428: \& $ openpkg sea \-o xamp.bin.sh xamp.sh xamp.*\-*.d/ michael@428: .Ve michael@428: .SH "HISTORY" michael@428: .IX Header "HISTORY" michael@428: The \fBopenpkg stack\fR command was implemented in April 2012 by \fIRalf S. Engelschall\fR michael@428: for the OpenPKG Framework of the OpenPKG GmbH.