Для эффективного управления системой следует исходники собирать в пакеты, чтобы их можно было удобно удалять. Существует много статей на эту тему, использующих checkinstall, опции make, а я же использую скрипт SlackBuild.
Например, на установочном DVD диске можно найти очень много подобных скриптов, из которых и почерпнуть что-то полезное для себя. Я приведу пример скрипта, которым я пользуюсь для установки пакетов, использование довольно просто: ./SlackBuild
Конечно, он далеко не идеален, да и пользоваться им не очень удобно (–prefix выставляется руками (хотя, конечно, можно ещё одним параметром его сделать), для накладывания патчей тоже надо исправлять скрипт), но все собранные мною пакеты я собирал не изменяя его.
#!/bin/sh
function usage() {
echo
echo "$0 "
echo "script for making packages for Slackware."
echo "Put in catalogue with script source files, slack-desc and doinst.sh, then simply run this script"
echo "and find package in /tmp :)"
echo "architecture is i686, if you use another one, change "ARCH" variable in script."
echo
echo
}
NAME=$1
VERSION=$2
if [ "$1" = "" ] ; then
echo "Package name required";
usage
exit
fi
if [ "$2" = "" ] ; then
echo "Package version required";
usage
exit
fi
CWD=`pwd`
TMP=${TMP:-/tmp}
if [ ! -d $TMP ]; then
mkdir -p $TMP
fi
PKG=$TMP/package-$NAME
ARCH=${ARCH:-i686}
BUILD=${BUILD:-1}
if [ "$ARCH" = "i386" ]; then
SLKCFLAGS="-O2 -march=i386 -mcpu=i686"
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
elif [ "$ARCH" = "s390" ]; then
SLKCFLAGS="-O2"
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2"
fi
if [ -e $NAME-$VERSION.tar.gz ]; then
GZIP=true
else
GZIP=false
fi
rm -rf $PKG
mkdir -p $PKG/usr
cd $TMP
rm -rf $NAME-$VERSION
if [ GZIP ] ; then
tar xzvf $CWD/$NAME-$VERSION.tar.gz
else
tar xjvf $CWD/$NAME-$VERSION.tar.bz2
fi
cd $NAME-$VERSION
#bzcat $CWD/mc-4.6.1-utf8-r1.patch.bz2 | patch -p1 --verbose || exit 1
chown -R root:root .
find . -perm 664 -exec chmod 644 {} \;
find . -perm 600 -exec chmod 644 {} \;
find . -perm 444 -exec chmod 644 {} \;
find . -perm 400 -exec chmod 644 {} \;
find . -perm 440 -exec chmod 644 {} \;
find . -perm 777 -exec chmod 755 {} \;
find . -perm 775 -exec chmod 755 {} \;
find . -perm 511 -exec chmod 755 {} \;
find . -perm 711 -exec chmod 755 {} \;
find . -perm 555 -exec chmod 755 {} \;
CFLAGS="$SLKCFLAGS" \
./configure \
--prefix=/usr \
--sysconfdir=/etc
make -j3 || exit 1
make DESTDIR=$PKG install || exit 1
( cd $PKG
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
)
# Compress and if needed symlink the man pages:
if [ -d $PKG/usr/man ]; then
( cd $PKG/usr/man
for manpagedir in $(find . -type d -name "man*") ; do
( cd $manpagedir
for eachpage in $( find . -type l -maxdepth 1) ; do
ln -s $( readlink $eachpage ).gz $eachpage.gz
rm $eachpage
done
gzip -9 *.?
)
done
)
fi
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cat $CWD/doinst.sh > $PKG/install/doinst.sh
# Build package:
cd $PKG
makepkg -l y -c n ../$NAME-$VERSION-$ARCH-$BUILD.tgz
# Remove source files
rm -r $TMP/package-$NAME
rm -r $TMP/$NAME-$VERSION
Пишите о различных возможных добавлениях и исправлениях. Это важно! :)
Ноябрь 26, 2006 в 5:56 пп
@Igor:
Какой-то однобокий взгляд на пакеты.
Я-то думал, что пакеты создают для того, что бы их устанавливать, и обновлять в случае необходимости.
Ну и для того, что бы автоматически ставились пакеты, нужные для нормальной работоспособности данного пакеты.
И я думаю, что не только исходники собирают в пакеты, а так же программы, которые из этих исходников собирают.
Хотя я Slackware никогда не видел, может я чего-то недопонял.
Ноябрь 26, 2006 в 6:16 пп
установить можно и просто исходники. Проблема одна – это удаление исходных файлов (ну или бинарных, если речь идёт про проприетарную программу, например, Skype).
В Slackware нет разрешения зависимостей, это проблема пользователя. Поэтому если пакет скомпилировался, но не работает должным образом, то можно искать требуемый пакет. Есть решения (slapt-get, swaret, ещё какие-то, кажется, даже pacman прикрутили), но они противоречат духу Slackware. По крайней мере для меня.
Наверное, я неправильно выразился – исходники собирают (configure, make, make install) и собирают в пакет :)
Ноябрь 26, 2006 в 6:56 пп
@Igor:
Ага, понял немного идеологию Slackware в вопросах пакетов.
То есть, старая проблема удаления чего-нибудь, установленного с помощью make install. Но я так ничего не устанавливаю.
Есть у меня идея, если руки дойдут, написать по этому поводу статью.
Да, так наверное будет понятнее :)
Ноябрь 26, 2006 в 7:12 пп
Ну а как делать так, чтобы не устанавливать с помощью make install? Только создавая свой пакет. А пути его создания здесь в частности и отражены.
Ноябрь 26, 2006 в 7:18 пп
@Igor:
Ну, что бы не делать пакет, есть же программы типа checkinstall и др. Или в makefile писать uninstall.
Хотя я обеими руками за пакеты.
Ноябрь 26, 2006 в 7:29 пп
В относительно пакетном дистрибутиве не делать пакеты…
Декабрь 15, 2006 в 5:57 пп
IMHO не стоит торопиться с написанием своих SlackBuild-ов. Высока вероятность, что их уже написали :-) (http://scxd.info/pub/, http://www.slacky.it, http://slackpack.tripleg.net.au) Да и поиск по $(ИМЯ_ПАКЕТА).SlackBuild или build-$(ИМЯ_ПАКЕТА) (Zenwalk рулит) в Гугле чаще всего дает положительный результат.
Декабрь 15, 2006 в 6:22 пп
О, за ссылки – гран мерси :). Проще делать со своим (особенно когда он одинаков для многих пакетов, сделал один раз и готово). Но зато в сети лежат более качественные :), потому что узкоспециализированные, этот же общий.
Январь 2, 2007 в 2:24 пп
Вот очень полезная ссылка: http://www.linuxquestions.org/questions/showthread.php?t=365655
Там господин тоже написал generic SlackBuild, но намного более элитнее и продуманнее, чем я. Комментарии в той теме очень полезны ;)