openpkg/stack.pod

Thu, 04 Oct 2012 20:30:05 +0200

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 04 Oct 2012 20:30:05 +0200
changeset 715
c10fb90893b9
permissions
-rw-r--r--

Correct out of date build configuration, porting to Solaris 11 network
link infrastructure and new libpcap logic. This additionally allows for
device drivers in subdirectories of /dev. Correct packaged nmap
personalities and signatures to work out of the box. Finally, hack
arpd logic to properly close sockets and quit on TERM by repeating
signaling in the run command script. Sadly, all this fails to correct
the run time behaviour of honeyd which fails to bind to the IP layer.

michael@428 1 ##
michael@428 2 ## OpenPKG Software Stack Generation Utility
michael@428 3 ## Copyright (c) 2012 OpenPKG GmbH <http://openpkg.com/>
michael@428 4 ##
michael@428 5 ## This software is property of the OpenPKG GmbH, DE MUC HRB 160208.
michael@428 6 ## All rights reserved. Licenses which grant limited permission to use,
michael@428 7 ## copy, modify and distribute this software are available from the
michael@428 8 ## OpenPKG GmbH.
michael@428 9 ##
michael@428 10 ## THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
michael@428 11 ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
michael@428 12 ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
michael@428 13 ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
michael@428 14 ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
michael@428 15 ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
michael@428 16 ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
michael@428 17 ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
michael@428 18 ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
michael@428 19 ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
michael@428 20 ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
michael@428 21 ## SUCH DAMAGE.
michael@428 22 ##
michael@428 23
michael@428 24 =pod
michael@428 25
michael@428 26 =head1 NAME
michael@428 27
michael@428 28 B<openpkg stack> - B<OpenPKG Software Stack Generation>
michael@428 29
michael@428 30 =head1 SYNOPSIS
michael@428 31
michael@428 32 B<openpkg stack>
michael@428 33 [B<-h>|B<--help>]
michael@428 34 [B<-v>|B<--verbose> I<level>]
michael@428 35 [B<-o>|B<--output> I<dir>]
michael@428 36 [B<-D>|B<--define> I<name>=I<value> ...]
michael@428 37 [B<-u>|B<--unversioned>]
michael@428 38 [B<-q>|B<--query>]
michael@428 39 F<I<name>.stk>
michael@428 40
michael@428 41 =head1 DESCRIPTION
michael@428 42
michael@428 43 The B<openpkg stack> command reads a OpenPKG software stack definition
michael@428 44 F<I<name>.stk>, generates a OpenPKG software stack deployment script
michael@428 45 F<I<name>[-I<version>-I<release>].sh>, determines, downloads and
michael@428 46 stores all required corresponding OpenPKG source packages under
michael@428 47 F<I<name>[-I<version>-I<release>].src.d/*.src.{sh,rpm}>.
michael@428 48
michael@428 49 On executing the generated OpenPKG software stack deployment
michael@428 50 script F<I<name>[-I<version>-I<release>].sh>, an OpenPKG
michael@428 51 instance is created (or reused if existing), all packages
michael@428 52 built and installed in topologically correct dependency order
michael@428 53 and the resulting OpenPKG binary packages stored as
michael@428 54 F<I<name>[-I<version>-I<release>].I<platform>-I<tag>.d/*.{sh,rpm}>.
michael@428 55
michael@428 56 The main design decisions and intentions of OpenPKG software stacks are:
michael@428 57
michael@428 58 =over 4
michael@428 59
michael@428 60 =item 1.
michael@428 61
michael@428 62 OpenPKG software stacks can be centrally defined in a single file
michael@428 63 F<I<name>.stk>, similar to the definition of OpenPKG software packages in
michael@428 64 F<I<name>.spec> files. This definition includes both OpenPKG framework
michael@428 65 bootstrap parameters, OpenPKG package build parameters and OpenPKG
michael@428 66 software stack specific deployment-time prolog and epilog scripts.
michael@428 67
michael@428 68 =item 2.
michael@428 69
michael@428 70 OpenPKG software stacks depend on particular OpenPKG software packages
michael@428 71 (and perhaps even their particular versions) and by downloading and
michael@428 72 locally storing all relevant OpenPKG software packages an OpenPKG
michael@428 73 software stack remains stable and self-contained -- even if new versions
michael@428 74 of OpenPKG software packages are released.
michael@428 75
michael@428 76 =item 3.
michael@428 77
michael@428 78 For generating the OpenPKG software stack files, an OpenPKG instance
michael@428 79 and its B<openpkg stack> command is required, but executing the OpenPKG
michael@428 80 software stack deployment script does NOT require any pre-existing
michael@428 81 OpenPKG instances.
michael@428 82
michael@428 83 =item 4.
michael@428 84
michael@428 85 By wrapping F<I<name>[-I<version>-I<release>].sh> and
michael@428 86 F<I<name>[-I<version>-I<release>].src.d/> into a I<Shell Execution
michael@428 87 Archive> F<I<name>[-I<version>-I<release>].src.sh> with the B<openpkg
michael@428 88 sea> command, you can provide a single self-contained file for building
michael@428 89 and installing an OpenPKG software stack from OpenPKG source packages.
michael@428 90
michael@428 91 =item 5.
michael@428 92
michael@428 93 By wrapping F<I<name>[-I<version>-I<release>].sh> and
michael@428 94 F<I<name>[-I<version>-I<release>].I<platform>-I<tag>.d/>
michael@428 95 into a I<Shell Execution Archive>
michael@428 96 F<I<name>[-I<version>-I<release>].I<platform>-I<tag>.sh> with the
michael@428 97 B<openpkg sea> command, you can provide a single self-contained file for
michael@428 98 installing an OpenPKG software stack from OpenPKG binary packages.
michael@428 99
michael@428 100 =back
michael@428 101
michael@428 102 =head1 COMMAND-LINE OPTIONS AND ARGUMENTS
michael@428 103
michael@428 104 =over 4
michael@428 105
michael@428 106 =item B<-h>|B<--help>
michael@428 107
michael@428 108 Just shows a short usage information for the B<openpkg stack> command.
michael@428 109
michael@428 110 =item B<-v>|B<--verbose> I<level>
michael@428 111
michael@428 112 Sets the verbosity level for outputs, from C<0> (no output at all) to 4
michael@428 113 (all possible outputs). The default is C<4>.
michael@428 114
michael@428 115 =item B<-o>|B<--output> I<dir>
michael@428 116
michael@428 117 The output directory for the OpenPKG software stack files.
michael@428 118 The default is the current directory (F<.>).
michael@428 119
michael@428 120 =item [B<-D>|B<--define> I<name>=I<value> ...]
michael@428 121
michael@428 122 On-the-fly overrides the value of option macro C<%{I<name>}> with
michael@428 123 I<value>. Use this to generate a variant of an OpenPKG software stack
michael@428 124 without modifying the software stack definition file.
michael@428 125
michael@428 126 =item [B<-u>|B<--unversioned>]
michael@428 127
michael@428 128 By default B<openpkg stack> creates the file
michael@428 129 C<I<name>-I<version>-I<release>.sh> (deployment script) and the
michael@428 130 directory C<I<name>-I<version>-I<release>.src.d/> (source packages).
michael@428 131 With this option the names are C<I<name>.sh> and C<I<name>.src.d/> only.
michael@428 132
michael@428 133 =item [B<-q>|B<--query>]
michael@428 134
michael@428 135 Forces a different operation mode where a shell script is output
michael@428 136 on F<stdout> containing variable definitions in the format
michael@428 137 C<I<name>="I<value>";> with information about the software stack
michael@428 138 definition. The provided variable names are C<name>, C<summary>,
michael@428 139 C<packager>, C<version> and C<release> for the corresponding headers,
michael@428 140 plus variables for all defined software stack options (see C<%option>
michael@428 141 section below).
michael@428 142
michael@428 143 =item I<name>F<.stk>
michael@428 144
michael@428 145 The mandatory OpenPKG software stack definition file.
michael@428 146 See below under B<SOFTWARE STACK DEFINITION> for details.
michael@428 147
michael@428 148 =back
michael@428 149
michael@428 150 =head1 SOFTWARE STACK DEFINITION
michael@428 151
michael@428 152 An OpenPKG software stack is defined by a configuration file
michael@428 153 containing headers (C<Foo:>) and sections (<%foo>).
michael@428 154
michael@428 155 =head2 Configuration Headers
michael@428 156
michael@428 157 =over 4
michael@428 158
michael@428 159 =item B<Name>
michael@428 160
michael@428 161 The name of the OpenPKG software stack. Also used as a prefix for many
michael@428 162 files. Should match the regular expression C<^[a-z][a-zA-Z0-9]+>,
michael@428 163 although this is not enforced. Example: C<Name: example>.
michael@428 164
michael@428 165 =item B<Summary>
michael@428 166
michael@428 167 A single line, shortly summarizing the purpose of the OpenPKG software
michael@428 168 stack. Example: C<Summary: Example Stack>.
michael@428 169
michael@428 170 =item B<Packager>
michael@428 171
michael@428 172 Name of the packager of the OpenPKG software software stack.
michael@428 173 Example: C<Packager: OpenPKG GmbH>.
michael@428 174
michael@428 175 =item B<Version>
michael@428 176
michael@428 177 Version identifier of the OpenPKG software stack. Describes the
michael@428 178 I<logical> revision of the software stack definition. Should match the
michael@428 179 regular expression C<^[0-9]+\.[0-9]\.[0-9]+$>, although this is not
michael@428 180 enforced. Example: C<Version: 1.0.0>.
michael@428 181
michael@428 182 =item B<Release>
michael@428 183
michael@428 184 Release identifier of the OpenPKG software stack. Describes the
michael@428 185 I<physical> revision of the stack definition. Should be in the format
michael@428 186 C<YYYYMMDD> and hence match the regular expression C<^[0-9]{8}$>,
michael@428 187 although this is not enforced. Example: C<Release: 20120101>.
michael@428 188
michael@428 189 =back
michael@428 190
michael@428 191 =head2 Configuration Sections
michael@428 192
michael@428 193 =over 4
michael@428 194
michael@428 195 =item B<%options>
michael@428 196
michael@428 197 Zero or more options for the OpenPKG software stack, one per line, in
michael@428 198 the format "I<name> I<default-value>". Options can be overridden on
michael@428 199 the command-line with B<-D>I<name>=I<value>. Example: C<with_ssl yes>.
michael@428 200 Option values can be expanded in all headers and sections through the
michael@428 201 following constructs:
michael@428 202
michael@428 203 =over 4
michael@428 204
michael@428 205 =item C<%{I<name>}>
michael@428 206
michael@428 207 Expand to the value of option I<name>.
michael@428 208
michael@428 209 =item C<%{?I<name>:I<value>}>
michael@428 210
michael@428 211 Expand to I<value> if option I<name> is defined.
michael@428 212
michael@428 213 =item C<%{!?I<name>:I<value>}>
michael@428 214
michael@428 215 Expand to I<value> if option I<name> is NOT defined.
michael@428 216
michael@428 217 =back
michael@428 218
michael@428 219 =item B<%description>
michael@428 220
michael@428 221 A single textual paragraph describing the purpose of the OpenPKG
michael@428 222 software stack in more detail than header C<Summary>.
michael@428 223
michael@428 224 =item B<%framework>
michael@428 225
michael@428 226 The command-line parameters passed to the OpenPKG framework
michael@428 227 bootstrap source shell package F<openpkg-*.src.sh>. Usually at
michael@428 228 least the parameters B<--prefix=>I<path>, B<--user=>I<username>,
michael@428 229 B<--group=>I<groupname> and B<--tag=>I<tagname> are given here. In order
michael@428 230 to allow an OpenPKG software stack to be easily reused one creates
michael@428 231 the options (see C<%option> above) named C<prefix>, C<user>, C<group>
michael@428 232 and C<tag> and then use C<--prefix=%{prefix}>, C<--user=%{user}>,
michael@428 233 C<--group=%{group}> and C<--tag=%{tag}> in this C<%framework> section.
michael@428 234
michael@428 235 =item B<%packages>
michael@428 236
michael@428 237 The packages to build and install for the OpenPKG software stack, in
michael@428 238 the format of "B<-DI<package>::I<option>=I<value>>" and "I<package>"
michael@428 239 specifications as understood by the C<openpkg build> tool. Example:
michael@428 240 C<-Dapache::with_mod_ssl=yes -Dapache-php::with_json=yes apache
michael@428 241 apache-php>.
michael@428 242
michael@428 243 =item B<%prolog>
michael@428 244
michael@428 245 A shell script executed before installation of all packages.
michael@428 246 The variable C<$prefix> is available to access the
michael@428 247 OpenPKG software stack without having to hard-code a path.
michael@428 248
michael@428 249 =item B<%epilog>
michael@428 250
michael@428 251 A shell script executed after installation of all packages. This
michael@428 252 is usually used for applying OpenPKG software stack specific
michael@428 253 configurations. The variable C<$prefix> is available to access the
michael@428 254 OpenPKG software stack without having to hard-code a path. Example:
michael@428 255 C<echo "openldap_enable=no" E<gt>E<gt>$prefix/etc/rc.conf>.
michael@428 256
michael@428 257 =back
michael@428 258
michael@428 259 =head1 EXAMPLES
michael@428 260
michael@428 261 $ cat xamp.stk
michael@428 262
michael@428 263 Name: xamp
michael@428 264 Summary: Apache-MySQL-PHP Server
michael@428 265 Packager: OpenPKG GmbH
michael@428 266 Version: 1.0.0
michael@428 267 Release: 20120407
michael@428 268
michael@428 269 %description
michael@428 270 This software stack contains a so-called xAMP web stack, consisting
michael@428 271 of the major components Apache, MySQL and PHP.
michael@428 272
michael@428 273 %options
michael@428 274 repo http://download.openpkg.org/stacks/current/source/
michael@428 275 prefix /xamp
michael@428 276 user xamp
michael@428 277 group xamp
michael@428 278 tag xamp
michael@428 279 with_ldap no
michael@428 280 with_ssl no
michael@428 281 addr 127.0.0.1
michael@428 282
michael@428 283 %repository
michael@428 284 %{repo}
michael@428 285
michael@428 286 %framework
michael@428 287 --prefix=%{prefix}
michael@428 288 --user=%{user}
michael@428 289 --group=%{group}
michael@428 290 --tag=%{tag}
michael@428 291
michael@428 292 %packages
michael@428 293 -D apache::with_mod_dav=yes
michael@428 294 -D apache::with_mod_deflate=yes
michael@428 295 -D apache::with_mod_ldap=%{with_ldap}
michael@428 296 -D apache::with_mod_proxy=yes
michael@428 297 -D apache::with_mod_ssl=%{with_ssl}
michael@428 298 -D apache-php::with_curl=yes
michael@428 299 -D apache-php::with_freetype=yes
michael@428 300 -D apache-php::with_gd=yes
michael@428 301 -D apache-php::with_iconv=yes
michael@428 302 -D apache-php::with_json=yes
michael@428 303 -D apache-php::with_mbregex=yes
michael@428 304 -D apache-php::with_mbstring=yes
michael@428 305 -D apache-php::with_mysql=yes
michael@428 306 -D apache-php::with_openldap=%{with_ldap}
michael@428 307 -D apache-php::with_session=yes
michael@428 308 -D apache-php::with_simplexml=yes
michael@428 309 -D apache-php::with_sqlite=yes
michael@428 310 -D apache-php::with_ssl=%{with_ssl}
michael@428 311 -D apache-php::with_xml=yes
michael@428 312 -D apache-php::with_zlib=yes
michael@428 313 apache
michael@428 314 apache-php
michael@428 315 mysql
michael@428 316
michael@428 317 %epilog
michael@428 318 shtool subst \
michael@428 319 -e 's;127\.0\.0\.1:%{addr};g' \
michael@428 320 %{prefix}/etc/apache/apache.conf
michael@428 321 if [ ".%{with_ldap}" = .yes ]; then
michael@428 322 echo "openldap_enable=\"no\"" >>%{prefix}/etc/rc.conf
michael@428 323 fi
michael@428 324
michael@428 325 $ openpkg stack -v4 \
michael@428 326 -Dprefix=/v/xamp -Duser=xamp-sw -Dgroup=xamp-sw \
michael@428 327 --unversioned xamp.stk
michael@428 328
michael@428 329 $ openpkg sea -o xamp.src.sh xamp.sh xamp.src.d/
michael@428 330
michael@428 331 $ sh xamp.src.sh -v4 -S sudo
michael@428 332
michael@428 333 $ openpkg sea -o xamp.bin.sh xamp.sh xamp.*-*.d/
michael@428 334
michael@428 335 =head1 HISTORY
michael@428 336
michael@428 337 The B<openpkg stack> command was implemented in April 2012 by I<Ralf S. Engelschall>
michael@428 338 E<lt>rse@engelschall.comE<gt> for the OpenPKG Framework of the OpenPKG GmbH.
michael@428 339
michael@428 340 =cut
michael@428 341

mercurial