Трябва да сложиш някои важни файлове в пакета. Например:
Име на архива с изходен код: programa-1.0.tar.gz
Име на пакет: programa-1.0-i486-1.tgz
Стандартното място на важните файлове е
/usr/doc/programa-1.0/
т.е.
/usr/doc/programa-1.0/README
/usr/doc/programa-1.0/COPYING
/usr/doc/programa-1.0/AUTHORS
Аз съм си направил за целта един шаблон за SlackBuild скриптове (скриптове, които служат за компилиране и пакетиране на дадена програма, като това става автоматично - няма нужда да се пише configure ; make ; make install) и го ползвам при създаване на пакетите за VS Live.
Ето го и шаблона:
Примерен код |
#!/bin/sh
# Внимание! Ползвайте този скрипт само, ако знаете какво правите.
# *********************************************************************** # Да не се редактират: TMP="/tmp/packagesbuild/" CWD=`pwd`
# *********************************************************************** # Променливи за редактиране:
# Името на пакета: NAME=knemo # Версия на архива с изходния код: VERSION=0.3.1 # Версия на кръпката, която ще се приложи върху изходния код: VERSION_patch=
# Името на архива с изходния код: NAME_src=${NAME} #NAME_src=${NAME}-src
# Името на поддиректорията, която се получава при разархивиране: NAME_extr_subdir=$NAME_src #NAME_extr_subdir=${NAME}-src #NAME_extr_subdir=някакво_съвсем_различно_име_на_директория
#Разширението на архива с изходния код: EXT="tar.bz2" #EXT="tar.gz"
ARCH=i486 BUILD=vs0
# Къде ще се инсталира: #vslive_PREFIX="/usr" # програмата не е от КДЕ vslive_PREFIX=`/opt/kde/bin/kde-config --prefix` # програмата е от КДЕ
# Пътят на директорията, която се получава при разархивиране: TMP_extr_dir=$TMP/$NAME_extr_subdir-$VERSION
# Пътят на файла с изходния код (в някои случаи името съдържа .orig след версията) FILE_src=$CWD/${NAME_src}-${VERSION}.${EXT} #FILE_src=$CWD/${NAME_src}-${VERSION}.orig.${EXT}
# Временната директория, където ще се инсталира програмата: PKG=$TMP/package-$NAME
if [ "$VERSION_patch" = "" ]; then PKG_filename=$NAME-$VERSION-$ARCH-$BUILD.tgz docs_dir=$PKG/usr/doc/$NAME-$VERSION else PKG_filename=$NAME-${VERSION}.${VERSION_patch}-$ARCH-$BUILD.tgz docs_dir=$PKG/usr/doc/$NAME-$VERSION.${VERSION_patch} fi
# *********************************************************************** # Подпрограми:
print_msg(){ echo "|*****************************************************************" echo "| $1" echo "|*****************************************************************" }
# *********************************************************************** if [ ! -d $TMP ]; then mkdir -p $TMP fi if [ ! -d $PKG ]; then mkdir -p $PKG fi
print_msg "Започна създаването на пакета $NAME-$VERSION-$ARCH-$BUILD.tgz"
cd $TMP
if [ ! "$?" = "0" ]; then print_msg "Грешка при влизане в директорията $TMP." exit 1 fi
#tar xzvf $CWD/$NAME-$VERSION.tar.gz #tar xzvf $CWD/$NAME-src-$VERSION.tar.gz #tar xjvf $CWD/$NAME-$VERSION.tar.bz2
print_msg "Разархивиране..."
if [ "$EXT" = "tar.bz2" ]; then tar xjvf $FILE_src if [ ! "$?" = "0" ]; then print_msg "Грешка при разархивиране на архива $FILE_src." exit 1 fi elif [ "$EXT" = "tar.gz" ]; then tar xzvf $FILE_src if [ ! "$?" = "0" ]; then print_msg "Грешка при разархивиране на архива $FILE_src." exit 1 fi else print_msg "Грешка: Неизвестен архив." exit 1 fi
cd $TMP_extr_dir
if [ "$VERSION_patch" != "" ]; then print_msg "Закърпване..." gzip -cd $CWD/${NAME}_${VERSION}-${VERSION_patch}.diff.gz | patch -p1 if [ ! "$?" = "0" ]; then print_msg "Грешка при прилагане на кръпката." exit 1 fi fi
print_msg "Изпълнение на ./configure..."
CFLAGS="-O2 -march=i486 -mcpu=i686" ./configure --prefix="$vslive_PREFIX"
#CFLAGS="-O2 -march=i486 -mcpu=i686" ./configure --prefix=/usr \ # --localstatedir=/var/lib \ # $ARCH-slackware-linux
if [ ! "$?" = "0" ]; then print_msg "Грешка." exit 1 fi
print_msg "Изпълнение на make..."
make
if [ ! "$?" = "0" ]; then print_msg "Грешка." exit 1 fi
print_msg "Изпълнение на make install"
# Внимание: ЗА ВСЕКИ ПАКЕТ ТРЯБВА ДА СЕ ПРОВЕРЯВА КОЙ ОТ ДОЛУПОСОЧЕНИТЕ # МЕТОДИ РАБОТИ!!! Обикновено първият метод дава резултат, когато # вторият не действа.
#make install prefix=$PKG/usr make install DESTDIR=$PKG #make install PREFIX=$PKG/usr #make install ROOT=$PKG #make install install_root=$PKG #make install INSTALL_ROOT=$PKG #make install DSTROOT=$PKG #make install buildroot=$PKG
# Внимание: Понякога инсталирането във временна директория чрез `make install` # е невъзможно! В такъв случай може да се ползва програмата # checkinstall. Тази програма следи кои файлове се инсталират от # `make install` и прави пакет от тях.
# checkinstall
if [ ! "$?" = "0" ]; then print_msg "Грешка." exit 1 fi
print_msg "Допълнителни неща..."
# Ако се инсталира ненужно голяма документация понякога е добра идея да се # изтрият някои неща: #rm -rf $PKG/usr/share/doc/ #rmdir $PKG/usr/share
# включване на кратка документация (лиценза, README-то и др.) mkdir -p $docs_dir cp Cop* ANNOUNCE* HACKING* *MAINTAINERS* DEV* FAQ* THANKS* ABOUT-NLS* AUTHORS* VERS* UPGRADE* \ KNOWNBUGS* PERMISSIONS* \ BUGS* USING* ChangeLog* CHANGELOG* COPYING* INSTALL* README* TODO* LICENSE* CREDIT* \ $docs_dir
mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc
( 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 )
#gzip `find $PKG/usr/man/ -type f 2>/dev/null | grep -v ".gz$"` # Горния ред, но написан по-красиво: find $PKG/usr/man/ -type f ! -name '*.gz' -exec gzip {} \;
mv $PKG/usr/info/dir $PKG/usr/info/dir-$NAME
cd $PKG
# Примерно включване на икона в /usr/share/pixmaps: #mkdir -p $PKG/usr/share/pixmaps #cp $CWD/*.png $PKG/usr/share/pixmaps/
# Примерно включване на елемент от менюто на КДЕ: #mkdir -p $PKG/opt/kde/share/applnk/Multimedia/ #cp $CWD/*.desktop $PKG/opt/kde/share/applnk/Multimedia/
# Примерно включване на елемент от меню: #mkdir -p $PKG/usr/share/applications #cp $CWD/*.desktop $PKG/usr/share/applications/
# Примерно копиране на превод (КДЕ): #mkdir -p $PKG/opt/kde/share/locale/bg/LC_MESSAGES/ #cp $CWD/*.mo $PKG/opt/kde/share/locale/bg/LC_MESSAGES/
# Примерно копиране на превод (QT): #mkdir -p $PKG/usr/share/$NAME/locale/ #cp $CWD/*.ts $PKG/usr/share/$NAME/locale/
# Примерно копиране на превод: #mkdir -p $PKG/usr/share/locale/bg/LC_MESSAGES/ #cp $CWD/*.mo $PKG/usr/share/locale/bg/LC_MESSAGES/
mkdir -p $PKG/install cp $CWD/doinst.sh $PKG/install chmod 644 $PKG/install/doinst.sh
chown -R root.root $PKG/usr chown -R root.root $PKG/opt #chown -R root.root $PKG/usr/man #chown -R root.root $PKG/usr/share
chown root.bin $PKG/bin/* chown root.bin $PKG/sbin/* chown root.bin $PKG/usr/bin/* chown root.bin $PKG/usr/sbin/*
chmod 755 $PKG/bin chmod 755 $PKG/sbin chmod 755 $PKG/lib #chmod 755 `find $PKG/usr -type d 2>/dev/null` # Горния ред, но написан по-красиво: find $PKG/usr -type d -exec chmod 755 {} \;
chmod -R 644 $docs_dir/* #chown -R root.root $docs_dir chmod 755 `find $PKG/usr/doc/ -type d 2>/dev/null`
makepkg -l y -c n $TMP/$PKG_filename
if [ ! "$?" = "0" ]; then print_msg "Грешка при изпълнение на програмата makepkg." exit 1 fi
if [ "$1" = "--cleanup" ]; then rm -rf $TMP_extr_dir rm -rf $PKG fi
|
Този скрипт търси в текущата директория архив с изходен код (в примера knemo-0.3.1.tar.bz2 и създава пакет /tmp/packagesbuild/knemo-0.3.1-i486-vs0.tgz). Ползвай този скрипт само ако разбираш какво прави всеки ред от него.
Нова версия може да намериш в архва със скриптове за създаване на живи дистрибуции VS-Live-CD.
Търси го на адреси:
http://d.linux-bg.org/download/distros/VS_Live/scripts/index.htm
или
http://d.linux-bg.org/download/distros/VS_Live/scripts/index.html