Если у вас много пакетов программ которые нужно собрать из исходников, то для каждого пакета нужно сделать такую последовательность действий:
1. распаковать архив
2. сконфигурировать
3. скомпилировать
4. собрать пакет
Понятно что если пакетов большое количество то собирать руками займет много времени. Для себя я сделал bash скрипт который делает это автоматически:
-----------------------------------------------------------------------
#!/bin/sh
if [ $# -ne 1 ]; then
echo "build package from source"
echo "usage: `basename $0` filename.{tar.gz|tar.bz2|tar.xz}"
exit 1
fi
TMP=/tmp/BS-$$ #TMP=/tmp/BS-`uuidgen | head -c 8`
PKG=`realpath $1 || exit 1`
PREFIX=/usr
case "$( uname -m )" in
x86_64) LIBDIR=$PREFIX/lib64 ;;
i?86) LIBDIR=$PREFIX/lib ;; # $PREFIX/lib32
*) LIBDIR=$PREFIX/lib ;;
esac
mkdir $TMP
cd $TMP
tar -xvf "$PKG" || exit 1
PKGNAME=`ls $TMP`
cd $PKGNAME
[ -f CMakeLists.txt ] && (cmake . -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX -DLIB_SUFFIX:PATH=$LIBDIR || exit 1) #-DCMAKE_C_FLAGS:STRING="" -DCMAKE_CXX_FLAGS:STRING="" -DMAN_INSTALL_DIR=/usr/man -DCMAKE_BUILD_TYPE=Release
[ -f configure ] && (./configure --prefix=$PREFIX --libdir=$LIBDIR || exit 1)
NUMJOBS=${NUMJOBS:--j`nproc`} #NUMJOBS=${NUMJOBS:--j`cat /proc/cpuinfo | grep processor | wc -l`}
make $NUMJOBS || exit 1 # unfortunatly make don't return fail but may be
mkdir $TMP/root
make install DESTDIR=$TMP/root # make install-strip DESTDIR=$TMP/root
cd $TMP/root
# strip binaries:
find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
cd $TMP/root
tar cf - . | gzip > /tmp/$PKGNAME.tgz
echo ----------------------------------------------------------
echo Package /tmp/$PKGNAME.tgz built
rm -rf $TMP
1. распаковать архив
2. сконфигурировать
3. скомпилировать
4. собрать пакет
Понятно что если пакетов большое количество то собирать руками займет много времени. Для себя я сделал bash скрипт который делает это автоматически:
-----------------------------------------------------------------------
#!/bin/sh
if [ $# -ne 1 ]; then
echo "build package from source"
echo "usage: `basename $0` filename.{tar.gz|tar.bz2|tar.xz}"
exit 1
fi
TMP=/tmp/BS-$$ #TMP=/tmp/BS-`uuidgen | head -c 8`
PKG=`realpath $1 || exit 1`
PREFIX=/usr
case "$( uname -m )" in
x86_64) LIBDIR=$PREFIX/lib64 ;;
i?86) LIBDIR=$PREFIX/lib ;; # $PREFIX/lib32
*) LIBDIR=$PREFIX/lib ;;
esac
mkdir $TMP
cd $TMP
tar -xvf "$PKG" || exit 1
PKGNAME=`ls $TMP`
cd $PKGNAME
[ -f CMakeLists.txt ] && (cmake . -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX -DLIB_SUFFIX:PATH=$LIBDIR || exit 1) #-DCMAKE_C_FLAGS:STRING="" -DCMAKE_CXX_FLAGS:STRING="" -DMAN_INSTALL_DIR=/usr/man -DCMAKE_BUILD_TYPE=Release
[ -f configure ] && (./configure --prefix=$PREFIX --libdir=$LIBDIR || exit 1)
NUMJOBS=${NUMJOBS:--j`nproc`} #NUMJOBS=${NUMJOBS:--j`cat /proc/cpuinfo | grep processor | wc -l`}
make $NUMJOBS || exit 1 # unfortunatly make don't return fail but may be
mkdir $TMP/root
make install DESTDIR=$TMP/root # make install-strip DESTDIR=$TMP/root
cd $TMP/root
# strip binaries:
find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
cd $TMP/root
tar cf - . | gzip > /tmp/$PKGNAME.tgz
echo ----------------------------------------------------------
echo Package /tmp/$PKGNAME.tgz built
rm -rf $TMP