system/prelink: Added (ELF prelinking utility)

Signed-off-by: Robby Workman <rworkman@slackbuilds.org>
This commit is contained in:
Ozan Türkyılmaz 2010-10-18 22:34:15 -05:00 committed by Erik Hanson
parent b760f054f3
commit c6fd0d7eea
7 changed files with 206 additions and 0 deletions

13
system/prelink/README Normal file
View file

@ -0,0 +1,13 @@
Prelink is a program that modifies ELF shared libraries and ELF dynamically
linked binaries in such a way that the time needed for the dynamic linker to
perform relocations at startup significantly decreases. Due to fewer
relocations, the run-time memory consumption decreases as well (especially
the number of unshareable pages). The prelinking information is only used
at startup time if none of the dependent libraries have changed since
prelinking; otherwise, programs are relocated normally.
There is a script in the prelink documentation directory that is suitable
for a cron job. Before setting up a cron job, first run prelink on the
system and then read the script and modify it as needed.
This requires libelf.

14
system/prelink/doinst.sh Normal file
View file

@ -0,0 +1,14 @@
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/prelink.conf.new

View file

@ -0,0 +1,107 @@
#!/bin/sh
# Slackware build package for prelink
# Copyright 2010 Ozan Türkyılmaz İstanbul, TUR
# 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.
PRGNAM=prelink
VERSION=${VERSION:-20100106}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i486 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi
CWD=$(pwd)
TPM=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i486" ]; then
SLKCFLAGS="-O2 -march=i486 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM
tar xvf $CWD/$PRGNAM-$VERSION.tar.bz2
cd $PRGNAM
chown -R root:root .
find . \
\( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
-exec chmod 755 {} \; -o \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \;
CFLAGS="$SLKFLAGS" \
CXXFLAGS="$SLKFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--sysconfdir=/etc \
--localstatedir=/var \
--mandir=/usr/man \
--build=$ARCH-slackware-linux
make
make -C doc
make install DESTDIR=$PKG
find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
find $PKG/usr/man -type f -exec gzip -9 {} \;
for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlint $i ).gz $i.gz ; rm $i ; done
mkdir -p $PKG/etc
cat $CWD/prelink.conf > $PKG/etc/prelink.conf.new
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a \
AUTHORS COPYING ChangeLog INSTALL NEWS README THANKS TODO doc/*.pdf \
$PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
cat $CWD/prelink.cron > $PKG/usr/doc/$PRGNAM-$VERSION/prelink.cron
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cat $CWD/doinst.sh > $PKG/install/doinst.sh
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}

View file

@ -0,0 +1,33 @@
# This config file contains a list of directories both with binaries
# and libraries prelink should consider by default.
# If a directory name is prefixed with `-l ', the directory hierarchy
# will be walked as long as filesystem boundaries are not crossed.
# If a directory name is prefixed with `-h ', symbolic links in a
# directory hierarchy are followed.
# Directories or files with `-b ' prefix will be blacklisted.
# For more details check man prelink
# This config file is from Debian package of prelink.
-b *.la
-b *.png
-b *.py
-b *.pl
-b *.pm
-b *.sh
-b *.xml
-b *.xslt
-b *.a
-b *.js
-b /lib/modules
-b /usr/lib/locale
-l /usr/local/sbin
-l /sbin
-l /usr/sbin
-l /usr/local/bin
-l /bin
-l /usr/bin
-l /usr/X11R6/bin
-l /usr/games
-l /usr/local/lib
-l /lib
-l /usr/lib
-l /usr/X11R6/lib

View file

@ -0,0 +1,10 @@
#!/bin/sh
renice +19 -p $$ > /dev/null 2>&1
#By default, we'll do quick cron runs of prelink
PRELINK_OPTS="-amRq"
#If you don't want to do this, then use this opts.
#PRELINK_OPT="-amR"
/usr/sbin/prelink $PRELINK_OPTS

View file

@ -0,0 +1,10 @@
PRGNAM="prelink"
VERSION="20100106"
HOMEPAGE="http://people.redhat.com/jakub/prelink/"
DOWNLOAD="http://people.redhat.com/jakub/prelink/prelink-20100106.tar.bz2"
MD5SUM="56e2a1b5a478795352bf6e4d2bc6e0ab"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
MAINTAINER="Ozan Türkyılmaz"
EMAIL="ozan.turkyilmaz@gmail.com"
APPROVED="rworkman"

19
system/prelink/slack-desc Normal file
View file

@ -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 ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
prelink: prelink (ELF prelinking utility)
prelink:
prelink: prelink is a program which modifies shared ELF libraries and
prelink: dynamically linked ELF binaries so that the time the dynamic
prelink: linker needs for their relocation at startup is significantly
prelink: decreased. Also, due to fewer relocations, the run-time
prelink: memory consumption of libraries/binaries is decreased.
prelink:
prelink: Homepage: http://people.redhat.com/jakub/prelink/
prelink:
prelink: