From 70516d0b4500df3e14c8d41d6d8b7ecc62c74618 Mon Sep 17 00:00:00 2001 From: Stuart Cardall Date: Wed, 8 Mar 2017 22:55:10 +0000 Subject: testing/logstash: update to 5.2.2 / use supervise-daemon adds service supervision with OpenRC's builtin supervise-daemon logstash/bin added to $PATH take ownership --- testing/logstash/APKBUILD | 109 +++++++++++++++++++++------------- testing/logstash/logstash.conf | 16 +++++ testing/logstash/logstash.confd | 23 ++++++- testing/logstash/logstash.initd | 52 ++++++++++------ testing/logstash/logstash.pre-install | 4 +- testing/logstash/logstash.profile | 3 + 6 files changed, 144 insertions(+), 63 deletions(-) create mode 100644 testing/logstash/logstash.conf create mode 100644 testing/logstash/logstash.profile diff --git a/testing/logstash/APKBUILD b/testing/logstash/APKBUILD index 69a16c9807..b3dbe18e7e 100644 --- a/testing/logstash/APKBUILD +++ b/testing/logstash/APKBUILD @@ -1,64 +1,91 @@ # Contributor: Steeve Chailloux -# Maintainer: +# Maintainer: Stuart Cardall pkgname=logstash -pkgver=1.4.2 -pkgrel=2 +pkgver=5.2.2 +pkgrel=0 pkgdesc="A flexible, open source, data collection, parsing and enrichment pipeline" url="http://logstash.net" arch="noarch" license="apache" -depends="openjdk7-jre-base" -depends_dev="" +depends="openjdk8-jre-base java-jffi-native libc6-compat bash" makedepends="$depends_dev" install="$pkgname.pre-install" pkgusers="logstash" -subpackages="" -source=" - https://download.elasticsearch.org/${pkgname}/${pkgname}/${pkgname}-${pkgver}.tar.gz - $pkgname.confd - $pkgname.initd - " - -_builddir="${srcdir}/${pkgname}-${pkgver}" -prepare() { - local i - cd "$_builddir" - for i in $source; do - case $i in - *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;; - esac - done -} +subpackages="$pkgname-doc" +options="!strip !check" +source="$pkgname-$pkgver.tar.gz::https://artifacts.elastic.co/downloads/$pkgname/$pkgname-$pkgver.tar.gz + $pkgname.confd + $pkgname.initd + $pkgname.conf + $pkgname.profile + " +builddir="${srcdir}/${pkgname}-${pkgver}" build() { - echo "Nothing to build" + return 0 } package() { - cd "$_builddir" + local datadir=/var/lib/logstash logdir=$datadir/logs confdir=/etc/logstash + local homedir=/usr/share/logstash heapsize=150m + + cd "$builddir" + # create the necessary dirs + install -dm755 "$pkgdir/$homedir" || return 1 + install -dm755 "$pkgdir/$logdir" || return 1 + install -dm755 "$pkgdir/$datadir" || return 1 + install -dm755 "$pkgdir/$confdir" || return 1 + install -dm755 "$pkgdir/$confdir/conf.d" || return 1 + + # install scripts install -m755 -D "$srcdir"/$pkgname.initd \ "$pkgdir"/etc/init.d/$pkgname || return 1 install -m644 -D "$srcdir"/$pkgname.confd \ "$pkgdir"/etc/conf.d/$pkgname || return 1 + install -m644 -D "$srcdir"/$pkgname.conf \ + "$pkgdir/$confdir"/conf.d/ || return 1 + install -m644 -D "$srcdir"/$pkgname.profile \ + "$pkgdir"/etc/profile.d/logstash.sh || return 1 + + # copy files + cp -r * "$pkgdir/$homedir/" || return 1 + cp config/* "$pkgdir/$confdir/" || return 1 + + # move docs + mkdir -p "$pkgdir"/usr/share/doc/logstash && cd "$pkgdir" + find usr/share/logstash -maxdepth 1 -type f ! -name Gemfile* \ + -name "[[:upper:]]*" -exec mv {} usr/share/doc/logstash/ \; + + # remove files for windows + find usr/share/logstash -type f -name *.bat -exec rm -f {} \; + find usr/share/logstash -type f -name *win32* -exec rm -f {} \; + find usr/share/logstash -type f -name *Win32* -exec rm -f {} \; + + # remove bundled libjffi (we use Alpine's java-jffi-native) + rm -rf "$pkgdir"/usr/share/logstash/vendor/jruby/lib/jni || return 1 + + # set default paths + sed -i \ + -e "s|# path.config:|path.config: $confdir/conf.d|" \ + -e "s|# path.logs:|path.logs: $logdir|" \ + -e "s|# path.data:|path.data: $datadir|" \ + "$pkgdir/$confdir"/logstash.yml || return 1 - # created the necessary dirs - install -dm755 -o logstash -g daemon "$pkgdir/usr/share/logstash" || return 1 - install -dm755 -o logstash -g daemon "$pkgdir/var/log/logstash" || return 1 - install -dm755 -o logstash -g daemon "$pkgdir/var/run/logstash" || return 1 - install -dm755 -o logstash -g daemon "$pkgdir/etc/logstash" || return 1 + # symlink so manual commands without -path.settings works + rmdir "$pkgdir/$homedir"/data || return 1 + ln -s "$datadir" "$pkgdir/$homedir"/data + ln -s "$logdir" "$pkgdir/$homedir"/logs - # copy files - cp -r * "$pkgdir/usr/share/logstash/" || return 1 - chown -R logstash:daemon "$pkgdir/usr/share/logstash/" || return 1 + # reduce heap sizes + sed -i \ + -e "s|^-Xms.*|-Xms$heapsize|" \ + -e "s|^-Xmx.*|-Xmx$heapsize|" \ + "$pkgdir/$confdir"/jvm.options || return 1 } -md5sums="6e6be734392e8c7d6d55e23d0bd8d2b3 logstash-1.4.2.tar.gz -27359d9e7e41af5fe4fd77998338ea1c logstash.confd -40465daf3f1bfbb160db982790bf46c9 logstash.initd" -sha256sums="d5be171af8d4ca966a0c731fc34f5deeee9d7631319e3660d1df99e43c5f8069 logstash-1.4.2.tar.gz -c9ecb570f2b33f5aededb590c65c4a9bb9b60321c1e05b9bb7b55cbde89c3cc7 logstash.confd -79bff7a11265489b36db5df9e281691cd06c26b6ec727fd898821823e52c4c4b logstash.initd" -sha512sums="6bf0527446b51582fa996ae03566487f7d3de2262cf2b88c62ba2549b00027c4cd820547afb01678def235f0c49597c2b36daf69b5f3c5eb155933ca6c2b3b7b logstash-1.4.2.tar.gz -8491786f1e8f247a4c284bb5e7c0b0c1f8332a76e61e33053e07d850975f762526a7aa7217b073f0e5c4907c1b0029bcf679c41e0b9713ce12f97b28378590df logstash.confd -49f4785ef3f3389d5d521c4e33b6ffbb29a9192a6dd52af3e62d4e71c6a18b291461e18dce3f03e67856cc4647cf64c625e330353fd1f01f9e983800352b8652 logstash.initd" +sha512sums="847b52d3148dc4dd6da53c3a7e61264f1870a16501a30ac7a86d49384f078bb865103c283d20a3201c67aa10855fd137b105ada41f7d0fb7d40543ff70de2e50 logstash-5.2.2.tar.gz +94b18da3f0ef40f68118b27654563e7aa6dd4a3b90f0d8ad61a8be579d4be62c2bf1b192a32ee6140b81224343eeb442687539f6def1e725787b8cb96c0c70d1 logstash.confd +828684ea0b9faa53ac51f7fb22bf73d862dc058d605f27958db6a8efbd10f5463a0837fa88b62a3964582c72fdd7ece434057a540b0924eae1fae17b9d5887b4 logstash.initd +21609c8f44b31a5f298573be4b5c0fdcdc165e603a95c3626570fb6dd44dad114a74ee3f10fbd518f72b537a3d6bdcdbad09798c4bead0ee16f2a3b8e2b00ed3 logstash.conf +180349d57a6a48be9052649425a945a07cf5e194d0f32f83567b460936729a70244d73c3495f8a318a3b98ac99a2848cadfbee5bd017da803c68c5140b6cd29d logstash.profile" diff --git a/testing/logstash/logstash.conf b/testing/logstash/logstash.conf new file mode 100644 index 0000000000..ddd5ada667 --- /dev/null +++ b/testing/logstash/logstash.conf @@ -0,0 +1,16 @@ +# https://www.elastic.co/guide/en/logstash/current/configuration.html +# https://www.elastic.co/guide/en/logstash/current/input-plugins.html +# https://www.elastic.co/guide/en/logstash/current/filter-plugins.html +# https://www.elastic.co/guide/en/logstash/current/output-plugins.html + +input { + file { + type => "syslog" + path => ["/var/log/**/*.log"] + } +} + +output { + stdout { codec => rubydebug } +} + diff --git a/testing/logstash/logstash.confd b/testing/logstash/logstash.confd index f78c45ed53..67edcd2650 100644 --- a/testing/logstash/logstash.confd +++ b/testing/logstash/logstash.confd @@ -1,3 +1,20 @@ -LS_CONF_DIR="/etc/logstash" -LS_LOG_DIR="/var/log/logstash" -LS_OPTS="-f $LS_CONF_DIR/*.conf -l $LS_LOG_DIR/logstash.log" +# Config file for /etc/init.d/logstash +# +# see also $LS_CONF/jvm.options +# +LS_HOME=/usr/share/logstash +LS_CONF=/etc/logstash +LS_DATA=/var/lib/logstash +LS_LOGS=${LS_DATA}/logs + +# User to run Logstash as. +LS_USER=logstash + +# Group to run Logstash as. Defaults to primary group of $LS_USER. +# LS_GROUP= + +# stdout & stderr fill logs rapidly +#LS_REDIR="1>/dev/null 2>> ${LS_LOGS}/error.log" + +# add pipeline config under conf.d +LS_OPTS="-f $LS_CONF/conf.d/*.conf -l $LS_LOGS $LS_REDIR" diff --git a/testing/logstash/logstash.initd b/testing/logstash/logstash.initd index e7e8ed7a2c..b022fd387b 100644 --- a/testing/logstash/logstash.initd +++ b/testing/logstash/logstash.initd @@ -1,25 +1,43 @@ -#!/sbin/runscript +#!/sbin/openrc-run +supervisor=supervise-daemon + +description="logs, events, or other data transporter" + +: ${LS_USER:="logstash"} +: ${LS_GROUP:="$(id -gn $LS_USER)"} + +nice="19" +pidfile="/run/$RC_SVCNAME.sd.pid" +supervise_daemon_args="-u $LS_USER -g $LS_GROUP -p $pidfile -N $nice" +command=/usr/share/logstash/bin/logstash +command_args="--path.settings ${LS_CONF} ${LS_OPTS}" +max_fd="16384" depends() { - needs network - provide logstash + use net } -description="logstash" -command="/usr/share/logstash/bin/logstash" -pidfile="/var/run/logstash/logstash.pid" -start_stop_daemon_args="--user logstash" -command_args="${LS_OPTS}" +in_contr() { + grep "container=" /proc/1/environ +} start_pre() { - checkpath --owner logstash:daemon --directory ${pidfile%/*} -} + local dir -start() { - ebegin "Starting logstash" - start-stop-daemon $start_stop_daemon_args --background --start --exec \ - $command --make-pidfile --pidfile $pidfile -- $command_args - eend $? -} + # Note: checkpath doesn't create intermediate directories. + for dir in "${LS_HOME}" "${LS_DATA}" "${LS_LOGS}"; do + mkdir -p "$(dirname "$dir")" + done -# uses the openrc templates for start()/stop() + checkpath -d -o $LS_USER:$LS_GROUP -m755 "${LS_HOME}" + checkpath -d -o $LS_USER:$LS_GROUP -m700 "${LS_DATA}" + checkpath -d -o $LS_USER:$LS_GROUP -m755 "${LS_LOGS}" + + if [ -n "$max_fd" ]; then + if [ -z "$(in_contr)" ]; then + ulimit -n "$max_fd" && einfo "Max open filedescriptors: $max_fd" + else + einfo "Run 'ulimit -n $max_fd' on the container host" + fi + fi +} diff --git a/testing/logstash/logstash.pre-install b/testing/logstash/logstash.pre-install index 62c4f2b6d3..bd470b8051 100644 --- a/testing/logstash/logstash.pre-install +++ b/testing/logstash/logstash.pre-install @@ -1,6 +1,6 @@ #!/bin/sh -adduser -S -D -H -h /usr/share/logstash -s /sbin/nologin \ - -G daemon -g "Logstash User" logstash 2>/dev/null +addgroup -S logstash 2>/dev/null +adduser -S -D -H -h /usr/share/logstash -s /sbin/nologin -G logstash -g logstash logstash 2>/dev/null exit 0 diff --git a/testing/logstash/logstash.profile b/testing/logstash/logstash.profile new file mode 100644 index 0000000000..fd6cc07b5a --- /dev/null +++ b/testing/logstash/logstash.profile @@ -0,0 +1,3 @@ +#!/bin/sh + +export PATH=$PATH:/usr/share/logstash/bin -- cgit v1.2.3