Problem with Slackbuilds - child process / file not found
SlackwareThis Forum is for the discussion of Slackware Linux.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
Problem with Slackbuilds - child process / file not found
I am on my way to building and installing all the many many deps for tomboy at the moment. Everything was going well with my downloading many different slackbuild scripts, tarred files etc and all good.
Until suddenly I keep getting the same nonsensical error, saying that a file isn't present when it clearly is. This happened with three different builds, and I really dont' get it.
Code:
root@poppy:~/tomboy# ls
tomboy-1.2.1.tar.bz2 tomboy.Slackbuild*
root@poppy:~/tomboy# ./tomboy.Slackbuild
tar (child): /root/tomboy/tomboy.Slackbuild-1.2.1.tar.bz2: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
Seems like the slackbuild scripts are trying to add the name of the tarred package onto the script name or something? But why happen three times on the trot? surely it's not the same problem with three differnet scripts?
I'm sure this is something simple but it's late and i can't figure it out and if I don't ask now i'll forget tomorrow.
I think we'd need to see the slackbuild to diagnose this...
Is this a GSB Slackbuild by some chance?
I would say that it is.
Code:
#!/bin/bash
# Version: 1.7 GSB Package SlackBuild.
# Copyright (c) 2007,2008,2009 Darren 'Tadgy' Austin <darren (at) gnomeslackbuild.org>
# Copyright (c) 2007,2008,2009 Steve Kennedy <steve (at) gnomeslackbuild.org>
# All rights reserved.
#
# Licenced under the terms of the GNU General Public Licence version 3.
#
# 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.
# Package variables.
BUILD=1
VERSION=1.2.1
# List any packages here that are required to build this package.
# The list is space seperated and case sensitive.
REQUIRED_PACKAGES="gnome-sharp mono gtk-sharp ndesk-dbus-glib mono-addins gnome-desktop-sharp"
# Build variables.
TAG=${TAG:-gsb}
ARCH=${ARCH:-i486}
TUNE=${TUNE:-i486}
DISTRO=${DISTRO:-slackware}
TMP=${TMP:-/tmp}
PKGDEST=${PKGDEST:-$TMP}
# Script variables.
PKGNAME=$(basename $0 .SlackBuild)
PKG=$TMP/package-$PKGNAME
CWD=$(pwd)
NOCLEANUP=0
FORCEBUILD=0
# Usage.
function usage() {
cat << EOF
Usage: ${0##*/} [options]
Options: --force The package will not be built if a package of the same
name is already installed, or any of the packages
required to build are missing. This option over-rides
these checks and attempts a build anyway.
--no-cleanup By default any temporary source, build and package
directories will be deleted once the package is built.
This option prevents those files from being removed.
--help Show this help screen.
EOF
}
# Parse command line arguments.
while [ $# -gt 0 ]; do
if [ "$1" = "-force" ] || [ "$1" = "--force" ]; then
FORCEBUILD=1
shift
elif [ "$1" = "-no-cleanup" ] || [ "$1" = "--no-cleanup" ]; then
NOCLEANUP=1
shift
elif [ "$1" = "-help" ] || [ "$1" = "--help" ]; then
usage
exit 0
else
echo "${0##*/}: Unknown option: $1"
exit 1
fi
done
# Package requirements and installation checks.
[ "$FORCEBUILD" = "0" ] && {
function check_installed() {
ls -1 /var/log/packages | grep "^${1}-[^-]*-[^-]*-[^-]*$" >/dev/null 2>&1
return $?
}
check_installed "$PKGNAME" && {
echo "${0##*/}: Remove installed '$PKGNAME' package before build."
exit 1
}
for REQ in $REQUIRED_PACKAGES; do
check_installed "$REQ" || {
echo "${0##*/}: Required package '$REQ' not installed."
exit 1
}
done
}
# Temporary space and package storage.
mkdir -p $TMP
rm -rf $PKG
mkdir -p $PKG
mkdir -p $PKG/install
mkdir -p $PKGDEST
# Decompress archive.
cd $TMP &&
tar xjf $CWD/$PKGNAME-$VERSION.tar.bz2 &&
cd $PKGNAME-$VERSION || exit 1
# Apply ARCH specific patches.
if [ "$ARCH" = "i486" -o "$ARCH" = "i586" -o "$ARCH" = "i686" ]; then
echo "${0##*/}: Applying any patches for $ARCH"
#cat $CWD/patches/foo.patch | patch -p0 --verbose
elif [ "$ARCH" = "x86_64" ]; then
echo "${0##*/}: Applying any patches for $ARCH"
#cat $CWD/patches/foo.patch | patch -p0 --verbose
elif [ "$ARCH" = "powerpc" ]; then
echo "${0##*/}: Applying any patches for $ARCH"
#cat $CWD/patches/foo.patch | patch -p0 --verbose
fi
# Fix permissions for building.
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 {} \;
# Configure, Tuning, GCC and Make options.
CONFIGURE_FLAGS=${GSB_CONFIGURE_FLAGS:-""}
if [ "$ARCH" = "i486" -o "$ARCH" = "i586" ]; then
TUNE_CFLAGS=${GSB_TUNE_CFLAGS:-"-O2 -march=$ARCH -mtune=$TUNE"}
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
TUNE_CFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "s390" ]; then
TUNE_CFLAGS="-O2"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
TUNE_CFLAGS=${GSB_TUNE_CFLAGS:-"-O2 -fPIC"}
LIBDIRSUFFIX="64"
elif [ "$ARCH" = "powerpc" ]; then
TUNE_CFLAGS=${GSB_TUNE_CFLAGS:-"-O2 -march=$ARCH"}
fi
EXTRA_CFLAGS=${GSB_EXTRA_CFLAGS:-""}
MAKE_FLAGS=${GSB_MAKE_FLAGS:-""}
# Configure.
CFLAGS="$TUNE_CFLAGS $EXTRA_CFLAGS" CXXFLAGS="$TUNE_CFLAGS $EXTRA_CFLAGS" \
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib \
--mandir=/usr/man $CONFIGURE_FLAGS \
--libdir=/usr/lib \
--build=$ARCH-$DISTRO-linux \
--target=$ARCH-$DISTRO-linux \
--disable-schemas-install \
--disable-update-mimedb \
--enable-gnome \
--disable-evolution \
|| exit 1
# Build and install.
make $MAKE_FLAGS &&
make $MAKE_FLAGS DESTDIR=$PKG install || exit 1
# Fix for pkgconfig files on x86_64 platforms
if [ "$ARCH" = "x86_64" -a -d $PKG/usr/lib/pkgconfig ]; then
mkdir -p $PKG/usr/lib64 ;
mv $PKG/usr/lib/pkgconfig $PKG/usr/lib64 ;
fi ;
# Strip debugging symbols.
{ find $PKG | xargs file | egrep "executable|shared object" | grep "ELF" | \
cut -d: -f1 | xargs strip --strip-unneeded ; } 2>/dev/null
# Compress and fix manpage links.
[ -e $PKG/usr/man ] && {
find $PKG/usr/man -type f -name \*.? -exec gzip -9f {} \;
find $PKG/usr/man -type l -name \*.? -printf \
"( cd '%h'; [ -e '%l.gz' ] &&
{ rm -f '%f'; ln -sf '%l.gz' '%f.gz'; } );\n" | bash
}
# Copy extra documentation into package.
mkdir -p $PKG/usr/doc/$PKGNAME-$VERSION
cp -a AUTHORS COPYING* NEWS README \
$PKG/usr/doc/$PKGNAME-$VERSION
find $PKG/usr/doc/$PKGNAME-$VERSION/ -type f -exec chmod 644 {} \;
chown -R root:root $PKG/usr/doc/$PKGNAME-$VERSION
# Add schemas install to the doinst.sh if schemas are found.
[ -d $PKG/etc/gconf/schemas ] && {
# Make sure we have gconftool installed
echo "if [ -x usr/bin/gconftool-2 ]; then" >>$PKG/install/doinst.sh
( cd $PKG/etc/gconf/schemas
for schema in *; do
if [ -z "$(grep gconfentry ${schema})" ]; then
# Install schemas
echo "GCONF_CONFIG_SOURCE=\"xml::etc/gconf/gconf.xml.defaults\" \
usr/bin/gconftool-2 --makefile-install-rule etc/gconf/schemas/${schema} >/dev/null 2>&1" \
>>$PKG/install/doinst.sh
else
# Load default schema if an entry file
echo "GCONF_CONFIG_SOURCE=\"xml::etc/gconf/gconf.xml.defaults\" \
usr/bin/gconftool-2 --direct --load etc/gconf/schemas/${schema} >/dev/null 2>&1" \
>>$PKG/install/doinst.sh
fi
done
)
# Finish off gconf block
echo "fi" >>$PKG/install/doinst.sh
}
# Package meta files
for FILE in doinst.sh slack-desc slack-required slack-conflicts slack-suggests
do
[ -e $CWD/$FILE ] && {
cat $CWD/$FILE >>$PKG/install/$FILE
}
done
# Create the package
cd $PKG
makepkg -p -l y -c n $PKGDEST/$PKGNAME-${VERSION//-/_}-$ARCH-${BUILD}${TAG}.txz
# Cleanup
if [ "$NOCLEANUP" = "0" ]; then
rm -rf $PKG $TMP/$PKGNAME-$VERSION
fi;
PKGNAME=$(basename $0 .SlackBuild) So tar xjf $CWD/$PKGNAME-$VERSION.tar.bz2 looks for tomboy.Slackbuild-1.2.1.tar.bz2 which does not exist in the current directory, but tomboy-1.2.1.tar.bz2 does. You need to alter the build.
I believe the problem is, the file is named .Slackbuild but $(basename $0 .SlackBuild) tries to remove the suffix .SlackBuild (and it is case sensitive). Renaming the file tomboy.SlackBuild should solve the problem, unless I'm mistaken.
... might have been better, and doesn't rely on calling an external process.
Though I think that if this had been one of mine I'd have been inclined to just hard code the pkgname in case I ever wanted to version the build script for some reason.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.