diff options
-rw-r--r-- | network/lighttpd/README | 36 | ||||
-rw-r--r-- | network/lighttpd/doinst.sh | 21 | ||||
-rw-r--r-- | network/lighttpd/lighttpd.SlackBuild | 120 | ||||
-rw-r--r-- | network/lighttpd/lighttpd.conf | 322 | ||||
-rw-r--r-- | network/lighttpd/lighttpd.info | 8 | ||||
-rw-r--r-- | network/lighttpd/lighttpd.logrotate | 14 | ||||
-rw-r--r-- | network/lighttpd/rc.lighttpd | 71 | ||||
-rw-r--r-- | network/lighttpd/slack-desc | 19 |
8 files changed, 611 insertions, 0 deletions
diff --git a/network/lighttpd/README b/network/lighttpd/README new file mode 100644 index 000000000000..5622d52f8044 --- /dev/null +++ b/network/lighttpd/README @@ -0,0 +1,36 @@ +lighttpd is a fast, secure, and flexible webserver. It is optimized +for high-performance environments, and provides an extensive feature +set, including FastCGI, CGI, Auth, output compression, and URL +rewriting support. + +By default, this package uses the "lighttpd" user and group to run +lighttpd as a unpriviliged process. The script will exit if these +do not exist on this machine. We recommend using the following +UID and GID as they do not conflict with any stock Slackware users +and groups, nor with any added by other slackbuilds.org scripts. + + lighttpd + ======== + User: lighttpd UID: 208 GID: 208 + Group: lighttpd GID: 208 + +After that, lighttpd can be started and stopped through the +initialization script that is provided: + +/etc/rc.d/rc.lighttpd start +/etc/rc.d/rc.lighttpd stop + +If you would like to start lighttpd automatically when the system +is booted, add the following lines to /etc/rc.d/rc.local: + + if [ -x /etc/rc.d/rc.lighttpd ]; then + /etc/rc.d/rc.lighttpd start + fi + +Conversely, add the following lines to /etc/rc.d/rc.local_shutdown +to stop lighttpd on system shutdown. + + if [ -x /etc/rc.d/rc.lighttpd ]; then + /etc/rc.d/rc.lighttpd stop + fi + diff --git a/network/lighttpd/doinst.sh b/network/lighttpd/doinst.sh new file mode 100644 index 000000000000..8ead0ded15a6 --- /dev/null +++ b/network/lighttpd/doinst.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +LIGHTTPD_USER=lighttpd +LIGHTTPD_GROUP=lighttpd +LIGHTTPD_HOME=/var/www + +config() { + NEW="$1" + OLD="`dirname $NEW`/`basename $NEW .new`" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "`cat $OLD | md5sum`" = "`cat $NEW | md5sum`" ]; then # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +config etc/lighttpd/lighttpd.conf.new +config etc/logrotate.d/lighttpd.new +config etc/rc.d/rc.lighttpd.new diff --git a/network/lighttpd/lighttpd.SlackBuild b/network/lighttpd/lighttpd.SlackBuild new file mode 100644 index 000000000000..b60186d95adb --- /dev/null +++ b/network/lighttpd/lighttpd.SlackBuild @@ -0,0 +1,120 @@ +#!/bin/sh + +# Slackware build script for lighttpd + +# Copyright (c) 2007 Daniel de Kok <moc.mikciat@leinad> +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Modified by the SlackBuilds.org team. + +# Exit on most errors +set -e + +PRGNAM=lighttpd +VERSION=1.4.15 +ARCH=${ARCH:-i486} +BUILD=${BUILD:-1} +TAG=${TAG:-_SBo} +CWD=`pwd` +TMP=${TMP:-/tmp/SBo} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +## lighttpd user & group. *MUST* exist before package creation +# See http://slackbuilds.org/uid_gid.txt for current recomendations. +# If you change this, please update httpd.conf.diff in patches directory. +LIGHTTPD_USER=lighttpd +LIGHTTPD_GROUP=lighttpd + +if ! grep ^$LIGHTTPD_GROUP: /etc/group > /dev/null 2>&1; then + echo "$0: Error: LIGHTTP group ($LIGHTTPD_GROUP) doesn't exist." + echo "$0: Try creating one with: groupadd -g 208 $LIGHTTPD_GROUP" + exit 1 +fi + +if ! grep ^$LIGHTTPD_USER: /etc/passwd > /dev/null 2>&1; then + echo "$0: Error: LIGHTTP user ($LIGHTTPD_USER) doesn't exist." + echo "$0: Try creating one with: useradd -u 208 -g $LIGHTTPD_GROUP -d /var/www $LIGHTTPD_USER" + exit 1 +fi + + + + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" +fi + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xzvf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +chmod -R u+w,go+r-w,a-s . + +CFLAGS="$SLKCFLAGS" \ +CXXFLAGS="$SLKCFLAGS" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib/$PRGNAM \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --with-pcre \ + --with-attr \ + --with-openssl + +make +make install-strip DESTDIR=$PKG + +mkdir -p $PKG/var/{cache,log}/$PRGNAM +chmod 0700 $PKG/var/cache/lighttpd +mkdir -p $PKG/var/www/htdocs-lighttpd +touch $PKG/var/log/lighttpd/{access,error}.log +mv $PKG/usr/share/man $PKG/usr/ +rmdir $PKG/usr/share + +install -D -m 0755 $CWD/rc.$PRGNAM $PKG/etc/rc.d/rc.$PRGNAM.new +install -D -m 0644 $CWD/$PRGNAM.conf $PKG/etc/$PRGNAM/$PRGNAM.conf.new +install -D -m 0644 $CWD/$PRGNAM.logrotate $PKG/etc/logrotate.d/lighttpd.new + +( cd $PKG/usr/man + find . -type f -exec gzip -9 {} \; + for i in `find . -type l` ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done +) + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a AUTHORS COPYING ChangeLog INSTALL NEWS README doc/* \ + $PKG/usr/doc/$PRGNAM-$VERSION +rm -f $PKG/usr/doc/$PRGNAM-$VERSION/Makefile* +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +chown $LIGHTTPD_USER:$LIGHTTPD_GROUP $PKG/var/log/lighttpd/{access,error}.log +chown -R $LIGHTTPD_USER:$LIGHTTPD_GROUP $PKG/var/cache/lighttpd + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.tgz diff --git a/network/lighttpd/lighttpd.conf b/network/lighttpd/lighttpd.conf new file mode 100644 index 000000000000..05aa41914232 --- /dev/null +++ b/network/lighttpd/lighttpd.conf @@ -0,0 +1,322 @@ +# lighttpd configuration file +# +# use it as a base for lighttpd 1.0.0 and above +# +# $Id: lighttpd.conf,v 1.7 2004/11/03 22:26:05 weigon Exp $ + +############ Options you really have to take care of #################### + +## modules to load +# at least mod_access and mod_accesslog should be loaded +# all other module should only be loaded if really neccesary +# - saves some time +# - saves memory +server.modules = ( +# "mod_rewrite", +# "mod_redirect", +# "mod_alias", + "mod_access", +# "mod_cml", +# "mod_trigger_b4_dl", +# "mod_auth", +# "mod_status", +# "mod_setenv", +# "mod_fastcgi", +# "mod_proxy", +# "mod_simple_vhost", +# "mod_evhost", +# "mod_userdir", +# "mod_cgi", +# "mod_compress", +# "mod_ssi", +# "mod_usertrack", +# "mod_expire", +# "mod_secdownload", +# "mod_rrdtool", + "mod_accesslog" ) + +## a static document-root, for virtual-hosting take look at the +## server.virtual-* options +server.document-root = "/var/www/htdocs-lighttpd" + +## where to send error-messages to +server.errorlog = "/var/log/lighttpd/error.log" + +# files to check for if .../ is requested +index-file.names = ( "index.php", "index.html", + "index.htm", "default.htm" ) + +## set the event-handler (read the performance section in the manual) +# server.event-handler = "freebsd-kqueue" # needed on OS X + +# mimetype mapping +mimetype.assign = ( + ".pdf" => "application/pdf", + ".sig" => "application/pgp-signature", + ".spl" => "application/futuresplash", + ".class" => "application/octet-stream", + ".ps" => "application/postscript", + ".torrent" => "application/x-bittorrent", + ".dvi" => "application/x-dvi", + ".gz" => "application/x-gzip", + ".pac" => "application/x-ns-proxy-autoconfig", + ".swf" => "application/x-shockwave-flash", + ".tar.gz" => "application/x-tgz", + ".tgz" => "application/x-tgz", + ".tar" => "application/x-tar", + ".zip" => "application/zip", + ".mp3" => "audio/mpeg", + ".m3u" => "audio/x-mpegurl", + ".wma" => "audio/x-ms-wma", + ".wax" => "audio/x-ms-wax", + ".ogg" => "application/ogg", + ".wav" => "audio/x-wav", + ".gif" => "image/gif", + ".jpg" => "image/jpeg", + ".jpeg" => "image/jpeg", + ".png" => "image/png", + ".xbm" => "image/x-xbitmap", + ".xpm" => "image/x-xpixmap", + ".xwd" => "image/x-xwindowdump", + ".css" => "text/css", + ".html" => "text/html", + ".htm" => "text/html", + ".js" => "text/javascript", + ".asc" => "text/plain", + ".c" => "text/plain", + ".cpp" => "text/plain", + ".log" => "text/plain", + ".conf" => "text/plain", + ".text" => "text/plain", + ".txt" => "text/plain", + ".dtd" => "text/xml", + ".xml" => "text/xml", + ".mpeg" => "video/mpeg", + ".mpg" => "video/mpeg", + ".mov" => "video/quicktime", + ".qt" => "video/quicktime", + ".avi" => "video/x-msvideo", + ".asf" => "video/x-ms-asf", + ".asx" => "video/x-ms-asf", + ".wmv" => "video/x-ms-wmv", + ".bz2" => "application/x-bzip", + ".tbz" => "application/x-bzip-compressed-tar", + ".tar.bz2" => "application/x-bzip-compressed-tar" + ) + +# Use the "Content-Type" extended attribute to obtain mime type if possible +#mimetype.use-xattr = "enable" + + +## send a different Server: header +## be nice and keep it at lighttpd +# server.tag = "lighttpd" + +#### accesslog module +accesslog.filename = "/var/log/lighttpd/access.log" + +## deny access the file-extensions +# +# ~ is for backupfiles from vi, emacs, joe, ... +# .inc is often used for code includes which should in general not be part +# of the document-root +url.access-deny = ( "~", ".inc" ) + +$HTTP["url"] =~ "\.pdf$" { + server.range-requests = "disable" +} + +## +# which extensions should not be handle via static-file transfer +# +# .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi +static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" ) + +######### Options that are good to be but not neccesary to be changed ####### + +## bind to port (default: 80) +#server.port = 81 + +## bind to localhost (default: all interfaces) +#server.bind = "grisu.home.kneschke.de" + +## error-handler for status 404 +#server.error-handler-404 = "/error-handler.html" +#server.error-handler-404 = "/error-handler.php" + +## to help the rc.scripts +server.pid-file = "/var/run/lighttpd.pid" + + +###### virtual hosts +## +## If you want name-based virtual hosting add the next three settings and load +## mod_simple_vhost +## +## document-root = +## virtual-server-root + virtual-server-default-host + virtual-server-docroot +## or +## virtual-server-root + http-host + virtual-server-docroot +## +#simple-vhost.server-root = "/home/weigon/wwwroot/servers/" +#simple-vhost.default-host = "grisu.home.kneschke.de" +#simple-vhost.document-root = "/pages/" + + +## +## Format: <errorfile-prefix><status-code>.html +## -> ..../status-404.html for 'File not found' +#server.errorfile-prefix = "/home/weigon/projects/lighttpd/doc/status-" + +## virtual directory listings +#dir-listing.activate = "enable" + +## enable debugging +#debug.log-request-header = "enable" +#debug.log-response-header = "enable" +#debug.log-request-handling = "enable" +#debug.log-file-not-found = "enable" + +### only root can use these options +# +# chroot() to directory (default: no chroot() ) +#server.chroot = "/" + +## change uid to <uid> (default: don't care) +server.username = "lighttpd" + +## change uid to <uid> (default: don't care) +server.groupname = "lighttpd" + +#### compress module +#compress.cache-dir = "/tmp/lighttpd/cache/compress/" +#compress.filetype = ("text/plain", "text/html") + +#### proxy module +## read proxy.txt for more info +#proxy.server = ( ".php" => +# ( "localhost" => +# ( +# "host" => "192.168.0.101", +# "port" => 80 +# ) +# ) +# ) + +#### fastcgi module +## read fastcgi.txt for more info +## for PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini +#fastcgi.server = ( ".php" => +# ( "localhost" => +# ( +# "socket" => "/tmp/php-fastcgi.socket", +# "bin-path" => "/usr/local/bin/php" +# ) +# ) +# ) + +#### CGI module +#cgi.assign = ( ".pl" => "/usr/bin/perl", +# ".cgi" => "/usr/bin/perl" ) +# + +#### SSL engine +#ssl.engine = "enable" +#ssl.pemfile = "server.pem" + +#### status module +#status.status-url = "/server-status" +#status.config-url = "/server-config" + +#### auth module +## read authentication.txt for more info +#auth.backend = "plain" +#auth.backend.plain.userfile = "lighttpd.user" +#auth.backend.plain.groupfile = "lighttpd.group" + +#auth.backend.ldap.hostname = "localhost" +#auth.backend.ldap.base-dn = "dc=my-domain,dc=com" +#auth.backend.ldap.filter = "(uid=$)" + +#auth.require = ( "/server-status" => +# ( +# "method" => "digest", +# "realm" => "download archiv", +# "require" => "user=jan" +# ), +# "/server-config" => +# ( +# "method" => "digest", +# "realm" => "download archiv", +# "require" => "valid-user" +# ) +# ) + +#### url handling modules (rewrite, redirect, access) +#url.rewrite = ( "^/$" => "/server-status" ) +#url.redirect = ( "^/wishlist/(.+)" => "http://www.123.org/$1" ) +#### both rewrite/redirect support back reference to regex conditional using %n +#$HTTP["host"] =~ "^www\.(.*)" { +# url.redirect = ( "^/(.*)" => "http://%1/$1" ) +#} + +# +# define a pattern for the host url finding +# %% => % sign +# %0 => domain name + tld +# %1 => tld +# %2 => domain name without tld +# %3 => subdomain 1 name +# %4 => subdomain 2 name +# +#evhost.path-pattern = "/home/storage/dev/www/%3/htdocs/" + +#### expire module +#expire.url = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes") + +#### ssi +#ssi.extension = ( ".shtml" ) + +#### rrdtool +#rrdtool.binary = "/usr/bin/rrdtool" +#rrdtool.db-name = "/var/www/lighttpd.rrd" + +#### setenv +#setenv.add-request-header = ( "TRAV_ENV" => "mysql://user@host/db" ) +#setenv.add-response-header = ( "X-Secret-Message" => "42" ) + +## for mod_trigger_b4_dl +# trigger-before-download.gdbm-filename = "/home/weigon/testbase/trigger.db" +# trigger-before-download.memcache-hosts = ( "127.0.0.1:11211" ) +# trigger-before-download.trigger-url = "^/trigger/" +# trigger-before-download.download-url = "^/download/" +# trigger-before-download.deny-url = "http://127.0.0.1/index.html" +# trigger-before-download.trigger-timeout = 10 + +## for mod_cml +## don't forget to add index.cml to server.indexfiles +# cml.extension = ".cml" +# cml.memcache-hosts = ( "127.0.0.1:11211" ) + +#### variable usage: +## variable name without "." is auto prefixed by "var." and becomes "var.bar" +#bar = 1 +#var.mystring = "foo" + +## integer add +#bar += 1 +## string concat, with integer cast as string, result: "www.foo1.com" +#server.name = "www." + mystring + var.bar + ".com" +## array merge +#index-file.names = (foo + ".php") + index-file.names +#index-file.names += (foo + ".php") + +#### include +#include /etc/lighttpd/lighttpd-inc.conf +## same as above if you run: "lighttpd -f /etc/lighttpd/lighttpd.conf" +#include "lighttpd-inc.conf" + +#### include_shell +#include_shell "echo var.a=1" +## the above is same as: +#var.a=1 diff --git a/network/lighttpd/lighttpd.info b/network/lighttpd/lighttpd.info new file mode 100644 index 000000000000..3a8ac62a3dd4 --- /dev/null +++ b/network/lighttpd/lighttpd.info @@ -0,0 +1,8 @@ +PRGNAM="lighttpd" +VERSION="1.4.15" +HOMEPAGE="http://www.lighttpd.net/" +DOWNLOAD="http://www.lighttpd.net/download/lighttpd-1.4.15.tar.gz" +MD5SUM="d2ceaaf242b2b3593ff4d8222d543649" +MAINTAINER="Daniel de Kok" +EMAIL="danieldk@pobox.com" +APPROVED="BP{k}" diff --git a/network/lighttpd/lighttpd.logrotate b/network/lighttpd/lighttpd.logrotate new file mode 100644 index 000000000000..598650a1f22d --- /dev/null +++ b/network/lighttpd/lighttpd.logrotate @@ -0,0 +1,14 @@ +/var/log/lighttpd/*.log { + daily + missingok + copytruncate + rotate 7 + compress + notifempty + sharedscripts + postrotate + if [ -x /etc/rc.d/rc.lighttpd -a -f /var/run/lighttpd.pid ]; then + /etc/rc.d/rc.lighttpd reload + fi + endscript +} diff --git a/network/lighttpd/rc.lighttpd b/network/lighttpd/rc.lighttpd new file mode 100644 index 000000000000..cb180c3e88ee --- /dev/null +++ b/network/lighttpd/rc.lighttpd @@ -0,0 +1,71 @@ +#!/bin/sh +# Copyright (c) 2007, Daniel de Kok <moc.mikciat@leinad> +# Modified by Martin Lefebvre <dadexter@sekurity.com> +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +LIGHTTPD=/usr/sbin/lighttpd +PIDFILE=/var/run/lighttpd.pid +LIGHTTPD_OPTIONS="-f /etc/lighttpd/lighttpd.conf" + +lighttpd_start() { + echo "Starting lighttpd: $LIGHTTPD" + if [ -r $PIDFILE ]; then + echo "Already running or stale PID file" + echo "If it's not running, remove $PIDFILE" + return + fi + $LIGHTTPD $LIGHTTPD_OPTIONS +} + +lighttpd_stop() { + echo "Stopping lighttpd: $LIGHTTPD" + if [ -r $PIDFILE ]; then + kill -3 `cat $PIDFILE` + rm -f $PIDFILE + fi +} + +lighttpd_restart() { + lighttpd_stop + sleep 1 + lighttpd_start +} + +lighttpd_reload() { + kill -s HUP $(cat $PIDFILE) +} + +case "$1" in +'start') + lighttpd_start + ;; +'stop') + lighttpd_stop + ;; +restart) + lighttpd_restart + ;; +reload) + lighttpd_reload + ;; +*) + echo "usage $0 start|stop|restart" +esac diff --git a/network/lighttpd/slack-desc b/network/lighttpd/slack-desc new file mode 100644 index 000000000000..b105c7ff60dc --- /dev/null +++ b/network/lighttpd/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. Line +# up the first '|' above the ':' following the base package name, and the '|' on +# the right side marks the last column you can put a character in. You must make +# exactly 11 lines for the formatting to be correct. It's also customary to +# leave one space after the ':'. + + |-----handy-ruler------------------------------------------------------| +lighttpd: lighttpd (Light, fast, and secure webserver) +lighttpd: +lighttpd: lighttpd is a fast, secure, and flexible webserver. It is optimized +lighttpd: for high-performance environments, and provides an extensive feature +lighttpd: set, including FastCGI, CGI, Auth, output compression, and URL +lighttpd: rewriting support. +lighttpd: +lighttpd: The lighttpd webpage can be found at: +lighttpd: http://www.lighttpd.net/ +lighttpd: +lighttpd: |