Linux за българи: Форуми

Linux секция за напреднали => Хардуерни и софтуерни проблеми => Темата е започната от: vstoykov в Feb 09, 2004, 19:48



Титла: как се прави Slackware tgz пакет ?
Публикувано от: vstoykov в Feb 09, 2004, 19:48
Знаете ли лесен начин как да си създам tgz пакет?
Трудното е да наслагам файловете в една директория (напр. /tmp/usr/ вместо /usr/). Не става с

Примерен код
./configure --prefix=/tmp/usr


защото програмата после ще си търси файловете не където трябва...

Питам, защото искам да си направя Live-CD на малък диск, а не искам да ми заема място gcc и компания.

В мoента съм си направил Live-CD на голям диск: vslive.hit.bg


Титла: как се прави Slackware tgz пакет ?
Публикувано от: soulcollector в Feb 09, 2004, 19:59
Това е стандартния за Slackware начин, но за съжаление не винаги работи.
 $ configure --prefix=/usr
 $ make
 # make install prefix=/tmp/usr

По-добре използвай checkinstall.
$ configure --prefix=prefix
$ make
# checkinstall

А специално за Live-CD на малък диск виж SLAX
На официалната страница има скрипт за създаване на Live-CD


Титла: как се прави Slackware tgz пакет ?
Публикувано от: vstoykov в Feb 09, 2004, 20:11
Цитат (soulcollector @ Фев. 09 2004,20:59)
Това е стандартния за Slackware начин, но за съжаление не винаги работи.
 $ configure --prefix=/usr
 $ make
 # make install prefix=/tmp/usr

По-добре използвай checkinstall.
$ configure --prefix=prefix
$ make
# checkinstall

А специално за Live-CD на малък диск виж SLAX
На официалната страница има скрипт за създаване на Live-CD

Благодаря, ще пробвам с checkinstall
Само, че не ми стана ясно защо не винаги работи стандартния начин  ???
Знам за SLAX, той ползва скриптовете Linux-Live. Използвам скриптовете на Slackware-Live, SLAX, Knoppix :-)


Титла: как се прави Slackware tgz пакет ?
Публикувано от: vstoykov в Feb 09, 2004, 20:17
Какво значи това:
Цитат
NOTE TO SLACKWARE 8.0 USERS:

 Slackware 8.0 ships with a statically linked "ln", so any symlinks your installation process creates won't be detected and won't be included in your package. The way to fix this is to substitute your static "ln" for a dynamically linked one, like this one from a Slackware 7.1 installation.

 


не ми е ясно най-вече "statically linked "ln"". Това, че
/usr/bin/ln е символна връзка към /bin/ln ли е проблема?
Май не е това....


Титла: как се прави Slackware tgz пакет ?
Публикувано от: mironcho в Feb 09, 2004, 20:21
Checkinstall е най-доброто.
Иначе можеш да ползваш makepkg, обаче при компилацията не задавай:

configure --prefix=prefix

ами после след компилация напиши:

make prefix=/tmp/usr install


Титла: как се прави Slackware tgz пакет ?
Публикувано от: vstoykov в Feb 09, 2004, 21:12
Цитат (mironcho @ Фев. 09 2004,21:21)
Checkinstall е най-доброто.
Иначе можеш да ползваш makepkg, обаче при компилацията не задавай:

configure --prefix=prefix

ами после след компилация напиши:

make prefix=/tmp/usr install

Ако при инсталацията не задам
Примерен код
configure --prefix=/usr

това ще е еквивалентно на
Примерен код
configure --prefix=/usr/local

и след като инсталирам програмата, тя ще си търси файловете не на /usr/share/programdata (където искам), а на /usr/local/share/programdata (където няма да има нищо).

Нали така? Или аз нещо не съм разбрал?


Титла: как се прави Slackware tgz пакет ?
Публикувано от: soulcollector в Feb 10, 2004, 21:41
Правилно си разбрал prefix-a от ./configure трябва да е същия като на make install

Защо make install prefix=some_prefix не става винаги незнам,  но ми се е случвало да не работи.

Виж linuxpackages HOWTOs - Package HOWTO
Package Tools

(макар че може да си ги чел)


Титла: как се прави Slackware tgz пакет ?
Публикувано от: mironcho в Feb 10, 2004, 22:33
Цитат (soulcollector @ Фев. 10 2004,22:41)
Защо make install prefix=some_prefix не става винаги незнам,  но ми се е случвало да не работи.

За приложенията за които не действа, може да се ползва и:

make install DESTDIR=/some_path

срещал съм и ROOT да се използва вместо DESTDIR.


Титла: как се прави Slackware tgz пакет ?
Публикувано от: peio в Feb 10, 2004, 23:31
Всички пакети за Slackware 9.1 са компилирани с
CFLAGS="-O2 -march=i486 -mcpu=i686"
мисля, че когато се създават пакети за дистрибутиране е добра идея да се ползва същото , защото gcc оптимизира за платформата, на която се компилира и е много възможно това да създаде проблеми на други платформи.


Титла: как се прави Slackware tgz пакет ?
Публикувано от: vstoykov в Feb 12, 2004, 20:26
Цитат (peio @ Фев. 11 2004,00:31)
Всички пакети за Slackware 9.1 са компилирани с
CFLAGS="-O2 -march=i486 -mcpu=i686"
мисля, че когато се създават пакети за дистрибутиране е добра идея да се ползва същото , защото gcc оптимизира за платформата, на която се компилира и е много възможно това да създаде проблеми на други платформи.

Това
CFLAGS="-O2 -march=i486 -mcpu=i686"
как да го задам? Може ли без да се редактира Makefile (с параметри на make или ./configure)?

гледах ./configure --help на MPlayer:
Цитат

Advanced options:
  --enable-mmx           build with MMX support [autodetect]
  --enable-mmx2          build with MMX2 support (PIII, Athlon) [autodetect]
  --enable-3dnow         build with 3DNow! support [autodetect]
  --enable-3dnowex       build with extended 3DNow! support [autodetect]
  --enable-sse           build with SSE support [autodetect]
  --enable-sse2          build with SSE2 support [autodetect]
  --enable-altivec       build with Altivec support (PowerPC) [autodetect]
  --disable-fastmemcpy   disable 3DNow!/SSE/MMX optimized memcpy() [enable]
  --enable-big-endian    Force byte order to big endian [autodetect]
  --enable-debug[=1-3]   compile debugging information into mplayer [disable]
  --enable-profile       compile profiling information into mplayer [disable]
  --disable-sighandler   disable sighandler for crashes [enable]
  --enable-i18n          _experimental_ gnu gettext() support [autodetect]
  --enable-dynamic-plugins  Enable support for dynamic a/v plugins [disable]


Ако задам --enable-mmx --enable-mmx2 --enable-3dnow --enable-3dnowex ще работи ли на всички процесори? Или трябва само едно да избера?

Бях пробвал да пусна MPlayer на стара машина (Pentium 166) и ми излезе съобщение за грешка, което не си спомням точно (май беше нещо за MMX).


Титла: как се прави Slackware tgz пакет ?
Публикувано от: peio в Feb 12, 2004, 21:08
Цитат

Това
CFLAGS="-O2 -march=i486 -mcpu=i686"
как да го задам? Може ли без да се редактира Makefile (с параметри на make или ./configure)?

да, точно така :
Примерен код

CFLAGS="-O2 -march=i486 -mcpu=i686" ./configure


всички други опции, които си изброил се отнасят за възможностите на процесора:
Примерен код

cat /proc/cpuinfo | grep ^flags

и затова е стойността им [autodetect] защото компилатора сам може да разбере дали той ги поддържа или не.

проблемът идва в случаи, като твоя, когато компилирания пакет трябва да се използва на друга система и тук се стига до въпроса за най-малкото общо кратно между всички платформи, които си избрал да поддържаш.
примерно П. Волкердинг  е решил да прави пакетите  минимум за тези процесори, а човекът който прави пакетите за Dropline Gnome само за >= 686.

относно mplayer: тяхна политика е да разпростряняват сорс само и заради това, че като се компилира на дадената машина може да се изстиска максимума от нея. предполагам, че в кода се ползват множество инструкции специфични за отделните ахитектури и процесори. затова, ако би приел съвета ми е да направиш пакет, който съдържа сорса и инсталационен скрипт, който ще компилира и инсталира mplayer за системата.


Титла: как се прави Slackware tgz пакет ?
Публикувано от: vstoykov в Feb 12, 2004, 22:36
В същност очаквах CFLAGS="-O2 -march=i486 -mcpu=i686" да е след ./configure а не преди...

Каква е разликата между -march и -mcpu?

Аз ще правя този пакет за да го ползвам по-късно за направа на Live-CD и не е много уместно да се компилира всеки път, когато се стартира Live-CD-то.
Не може ли по някакъв начин компилираната програма да е оптимизирана за всички възможни процесори? Или ще се наложи да инсталирам няколко пъти mplayer и да пиша скрипт, който проверява първо какъв е процесора и после пуска съответната версия   :(


Титла: как се прави Slackware tgz пакет ?
Публикувано от: peio в Feb 12, 2004, 23:15
Цитат
Каква е разликата между -march и -mcpu?

виж man страницата на gcc , трябва да преписвам от там иначе

Цитат
Не може ли по някакъв начин компилираната програма да е оптимизирана за всички възможни процесори?

Точно това е въпроса за най-малкото общо кратно на подържаните процесори. За Дебиан примерно този отговор е i386 , за Слак i486, за други i586 и i686. Въпрос на преценка на целева група от страна на този, който прави дистрибуцията.


Титла: как се прави Slackware tgz пакет ?
Публикувано от: vstoykov в Feb 13, 2004, 14:51
Като написах
Примерен код

checkinstall make install

ми се получи това в директорията install на пакета:

Примерен код

#
# doinst.sh, auto-generated by checkinstall-1.5.3
#

echo
cat /install/description

sed '/PACKAGE LOCATION/r /install/description' < "/var/log/packages/MPlayer-1.0pre3-i386-1" > description.tmp
mv description.tmp "/var/log/packages/MPlayer-1.0pre3-i386-1"
rm /install/description

( cd .; rm -rf 38 )
( cd .; ln -sf -> 38 )
( cd .; rm -rf 38 )
( cd .; ln -sf -> 38 )
( cd .; rm -rf 38 )
( cd .; ln -sf -> 38 )



Когато пробвах така:

Примерен код

make install DESTDIR=/pack
cd /pack/
makepak /mplayer.tgz


се получи пак нещо подобно:

Примерен код

( cd .; rm -rf 23 )
( cd .; ln -sf -> 23 )
( cd .; rm -rf 23 )
( cd .; ln -sf -> 23 )
( cd .; rm -rf 23 )
( cd .; ln -sf -> 23 )


В това не виждам никакъв смисъл... прави ми някакъв линк /- и празен файл /23


Титла: как се прави Slackware tgz пакет ?
Публикувано от: soulcollector в Feb 13, 2004, 23:16
1. make install след checkinstall излишно. Само ако програмата се инсалира с друга команда е необходимо да използваш
# checkinstall command

2. По - добре използвай новата система на Slackware за описание на пакетите, т.е.
# checkinstall --newslack


Титла: как се прави Slackware tgz пакет ?
Публикувано от: vstoykov в Jan 24, 2006, 00:57
Цитат (mironcho @ Фев. 10 2004,23:33)


За приложенията за които не действа, може да се ползва и:

make install DESTDIR=/some_path

срещал съм и ROOT да се използва вместо DESTDIR.

До момента съм срещал следните варианти на задаване на директория, където да се запишат данните:

Примерен код


 make install DESTDIR=/tmp/package
 make install prefix=/tmp/pacakge/usr
 make install PREFIX=/tmp/pacakge/usr
 make install ROOT=/tmp/pacakge
 make install install_root=/tmp/package
 make install INSTALL_ROOT=/tmp/package
 make install DSTROOT=/tmp/package
 make install buildroot=/tmp/package



А когато нито една от тези команди не работи... използвам checkinstall (после си правя пакета наново (на база съдържанието на пакета, създаден от checkinstall), но поне мога да почистя каквото се е получило при инсталацията).

Изпозвам следния примерен SlackBuild за създаване на пакети:
Примерен код

#!/bin/sh

# Внимание! Ползвайте този скрипт само, ако знаете какво правите.

# ***********************************************************************
# Да не се редактират:
TMP="/tmp/packagesbuild/"
CWD=`pwd`

# ***********************************************************************
# Променливи за редактиране:

# Името на пакета:
NAME=knemo
# Версия на архива с изходния код:
VERSION=0.3.1
VERSION_PKG=$VERSION
# Версия на кръпката, която ще се приложи върху изходния код:
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
#TMP_extr_dir=$TMP/$NAME_extr_subdir-$VERSION.orig

# Пътят на файла с изходния код (в някои случаи името съдържа .orig след версията)
FILE_src=$CWD/${NAME_src}-${VERSION}.${EXT}
#FILE_src=$CWD/${NAME_src}-${VERSION}.orig.${EXT}
#FILE_src=$CWD/${NAME_src}_${VERSION}.orig.${EXT}

# Временната директория, където ще се инсталира програмата:
PKG=$TMP/package-$NAME

if [ "$VERSION_patch" = "" ]; then
PKG_filename=$NAME-$VERSION_PKG-$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}
PKG_filename=$NAME-${VERSION_PKG}.${VERSION_patch}-$ARCH-$BUILD.tgz
docs_dir=$PKG/usr/doc/$NAME-$VERSION_PKG.${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_src}_${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 -R 644 $docs_dir/*

#chmod 755 `find $PKG/usr -type d 2>/dev/null`
# Горния ред, но написан по-красиво:
find $PKG/usr -type d -exec chmod 755 {} \;

#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


Титла: как се прави Slackware tgz пакет ?
Публикувано от: KoIoSoS в Jan 24, 2006, 20:38
Нещо, което в някои отношения е по добро
Примерен код

#!/bin/sh

#ТОЗИ СКРИПТ НЯМА ДА РАБОТИ С СОРС КАТО, pgcalc2-2.1-3.tar.gz или pgcalc2-2.1-3.tar.bz2      10%
#
#РЕШЕНИЕ
#tar -xjvpf pgcalc2-2.1-3.tar.bz2
#mv pgcalc2-2.1-3 pgcalc2-2.1.3
#tar -cjvpf pgcalc2-2.1.3.tar.bz2 pgcalc2-2.1.3
#rm -rf pgcalc2-2.1-3.tar.bz2
####################################################################
#ТОЗИ СКРИПТ ЩЕ РАБОТИ С СОРС КАТО, pgcalc2-2.1.3.tar.gz или pgcalc2-2.1.3.tar.bz2                 90%
####################################################################
#проверка за INSTALL
CWD=`pwd`
BUILD=1
if [ -d $CWD/INSTALL ]
 then
 cd $CWD/INSTALL
if [ -e *.tgz ]
then
      PREDHODNA_VERSIA=`ls *.tgz | cut -f 5 -d "-" | cut -f 1 -d"."`;
      let BUILD=$PREDHODNA_VERSIA+1;
else
BUILD=1
fi
fi
cd $CWD
#край на проверка за INSTALL
####################################################################
#проверка за COMPILE_FLAGS
 if [ -e /COMPILE_FLAGS ]
then
   echo "Пакетът ще се компилира със следните флагове за GCC";cat /COMPILE_FLAGS;
   ARCH=`cat /COMPILE_FLAGS | cut -f3 -d "=" | cut -f 1 -d ":"`
####################################################################
#проверка се налага заради тирето
####################################################################
if [  "$ARCH" = "athlon-xp" ]
then
  ARCH="athlonxp"
fi
####################################################################
#край на проверка  заради тирето
####################################################################
else
    echo "Нямаме флагове за оптимизация на  компилацията!!!Вижте редове 95 96 97 на този скрипт. ";
    echo "Да продължим ли? y = да";
    read PRODULVENIE;
if [  "$PRODULVENIE" = "y" ]
 then echo "Добре ";
 else echo  "Не е Добре! Не натиснахте  y ."; exit;
fi
   ARCH="neoptimiziran"
fi
#край на проверка за COMPILE_FLAGS
####################################################################
#проверка за DISTCC
 if [ -e /usr/bin/distcc ]
then
   CC_COMPILATOR="distcc";CXX_COMPILATOR="distcc"; NUMARABOTI=6
else
 CC_COMPILATOR="gcc";CXX_COMPILATOR="g++"; NUMARABOTI=1
fi
echo $CC_COMPILATOR $CXX_COMPILATOR

#край  на проверка за DISTCC
####################################################################
#мързеливо откриваме sorce файла и как да се разкомпресира

SOURCE_FILE=`ls *tar*`
case $SOURCE_FILE  in
          *[2])
          tarcom="xjvf";razsh="bz2";PROGRAM_VERSION=`echo $SOURCE_FILE | sed 's/.tar.bz2//g' `
          ;;
          *[z])
            tarcom="xzvf";razsh="gz";PROGRAM_VERSION=`echo $SOURCE_FILE | sed 's/.tar.gz//g' `
          ;;
esac
#карй на мързела

BROI_ZNACI_IMETO_PYRVA_CIFRA_NA_VERSIQTA=`echo $SOURCE_FILE | cut -f1 -d"." | wc -m`
####################################################################
#версията на пакета  $VERSION и $PROGRAM
PROGRAM=`echo $SOURCE_FILE | cut -c 1-$(($BROI_ZNACI_IMETO_PYRVA_CIFRA_NA_VERSIQTA-3))`
VERSION=`echo $PROGRAM_VERSION | sed 's/'$PROGRAM'//g' |cut -f2 -d "-"`
#карй на  версията на пакета  $VERSION  и $PROGRAM
####################################################################

TMP=$CWD/tmp
PKG=$TMP/package-$PROGRAM
#директория в която получаваме пакета
INSTALL=$CWD/INSTALL
rm -rf $TMP $PKG $INSTALL
mkdir -p $TMP $PKG $INSTALL
####################################################################
#найсе солушън да имаме CONFIGURE_OPTIONS за всеки случай
 if [ ! -e $CWD/CONFIGURE_OPTIONS ]
then
tar $tarcom $CWD/$PROGRAM-$VERSION.tar.$razsh
cd $PROGRAM-$VERSION
./configure --help  >> ../CONFIGURE_OPTIONS
cd $CWD
rm -rf $CWD/$PROGRAM-$VERSION
fi
#край на найсе солушън да имаме CONFIGURE_OPTIONS за всеки случай
####################################################################
#в / създаваме файл COMPILE_FLAGS със съдържание.
# -O2 -march=?  -mtune=?: za    GCC-3.4.         или         -O2 -march=? -mcpu=?: za   GCC-3.3.*
#?=i486 ,i386 ,i286,i186,i86,85.84..................;)

SLKCFLAGS=`cat /COMPILE_FLAGS | cut -f1 -d ":"`

cd $TMP
tar $tarcom $CWD/$PROGRAM-$VERSION.tar.$razsh
cd $PROGRAM-$VERSION
chown -R root.root .

CFLAGS="$SLKCFLAGS" CXXFLAGS="$SLKCFLAGS" \
 ./configure \
  --prefix=/usr \
  --sysconfdir=/etc \
  --mandir=/usr/man \
  --infodir=/usr/info \
  --localstatedir=/var/lib

make CC=$CC_COMPILATOR  CXX=$CXX_COMPILATOR  -j$NUMARABOTI
#make install PREFIX=$PKG
#make install ROOT=$PKG
#make install INSTALL_ROOT=$PKG
#make install DSTROOT=$PKG
make install DESTDIR=$PKG

chown -R root.bin $PKG/usr/bin
gzip -9 $PKG/usr/man/man?/*.?
( 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
)
cd $PKG
makepkg -l y -c n $INSTALL/$PROGRAM-$VERSION-$ARCH-$BUILD.tgz
#почистваме
rm -rf $TMP

 :ok:


Титла: как се прави Slackware tgz пакет ?
Публикувано от: FuckMyFucker в Jan 25, 2006, 14:09
А как мога да сложа инфо на пакета?


Титла: как се прави Slackware tgz пакет ?
Публикувано от: KoIoSoS в Jan 25, 2006, 20:36
Така е по-добре.С инфо ,ако съм разбрал.
Примерен код

#!/bin/sh

#ТОЗИ СКРИПТ НЯМА ДА РАБОТИ С СОРС КАТО, pgcalc2-2.1-3.tar.gz или pgcalc2-2.1-3.tar.bz2      10%
#
#РЕШЕНИЕ
#tar -xjvpf pgcalc2-2.1-3.tar.bz2
#mv pgcalc2-2.1-3 pgcalc2-2.1.3
#tar -cjvpf pgcalc2-2.1.3.tar.bz2 pgcalc2-2.1.3
#rm -rf pgcalc2-2.1-3.tar.bz2
####################################################################
#ТОЗИ СКРИПТ ЩЕ РАБОТИ С СОРС КАТО, pgcalc2-2.1.3.tar.gz или pgcalc2-2.1.3.tar.bz2                 90%
####################################################################

#проверка за INSTALL
CWD=`pwd`
BUILD=1
if [ -d $CWD/INSTALL ]
then
cd $CWD/INSTALL
if [ -e *.tgz ]
then
     PREDHODNA_VERSIA=`ls *.tgz | cut -f 5 -d "-" | cut -f 1 -d"."`;
     let BUILD=$PREDHODNA_VERSIA+1;
else
BUILD=1
fi
fi
cd $CWD
#край на проверка за INSTALL
####################################################################
#проверка за COMPILE_FLAGS
if [ -e /COMPILE_FLAGS ]
then
  echo "Пакетът ще се компилира със следните флагове за GCC";cat /COMPILE_FLAGS;
  ARCH=`cat /COMPILE_FLAGS | cut -f3 -d "=" | cut -f 1 -d ":"`
####################################################################
#проверка се налага заради тирето
####################################################################
if [  "$ARCH" = "athlon-xp" ]
then
 ARCH="athlonxp"
fi
####################################################################
#край на проверка  заради тирето
####################################################################
else
   echo "Нямаме флагове за оптимизация на  компилацията!!!Вижте редове 139 140 141 на този скрипт. ";
   echo "Да продължим ли? y = да";
   read PRODULVENIE;
if [  "$PRODULVENIE" = "y" ]
then echo "Добре ";
else echo  "Не е Добре! Не натиснахте  y ."; exit;
fi
  ARCH="neoptimiziran"
fi
#край на проверка за COMPILE_FLAGS
####################################################################
#проверка за DISTCC
if [ -e /usr/bin/distcc ]
then
  CC_COMPILATOR="distcc";CXX_COMPILATOR="distcc"; NUMARABOTI=6
else
CC_COMPILATOR="gcc";CXX_COMPILATOR="g++"; NUMARABOTI=1
fi
echo $CC_COMPILATOR $CXX_COMPILATOR

#край  на проверка за DISTCC
####################################################################
#мързеливо откриваме sorce файла и как да се разкомпресира

SOURCE_FILE=`ls *tar*`
case $SOURCE_FILE  in
         *[2])
         tarcom="xjvf";razsh="bz2";PROGRAM_VERSION=`echo $SOURCE_FILE | sed 's/.tar.bz2//g' `
        ;;
         *[z])
           tarcom="xzvf";razsh="gz";PROGRAM_VERSION=`echo $SOURCE_FILE | sed 's/.tar.gz//g' `
        ;;
esac
#карй на мързела
####################################################################
BROI_ZNACI_IMETO_PYRVA_CIFRA_NA_VERSIQTA=`echo $SOURCE_FILE | cut -f1 -d"." | wc -m`
KOLKO_SA_CIFRITE_SLED=`echo $SOURCE_FILE | cut -f1 -d"."|cut  -f2 -d"-" | wc -m`
####################################################################
#версията на пакета  $VERSION и $PROGRAM
PROGRAM=`echo $SOURCE_FILE | cut -c 1-$(($BROI_ZNACI_IMETO_PYRVA_CIFRA_NA_VERSIQTA-$KOLKO_SA_CIFRITE_SLED-1))`
VERSION=`echo $PROGRAM_VERSION | sed 's/'$PROGRAM'//g' |cut -f2 -d "-"`
#карй на  версията на пакета  $VERSION  и $PROGRAM
####################################################################

TMP=$CWD/tmp
PKG=$TMP/package-$PROGRAM
#директория в която получаваме пакета
INSTALL=$CWD/INSTALL
rm -rf $TMP $PKG $INSTALL slack-desc
mkdir -p $TMP $PKG $INSTALL
####################################################################
#Добавяне на инфо
#mumboto е от уважение!
#файл pkginfo в curent dir.ОПИСАНИЕ на ПАКЕТА.Четем info до 11 ред.
####################################################################
if [  -e $CWD/pkginfo ]
then
echo "# 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 ':'.
   |-----handy-ruler------------------------------------------------------|" >$CWD/slack-desc

i=1;
BROI_LINE_pkginfo=`wc -l $CWD/pkginfo | cut -f1 -d" "`;
while [ $i -le 11 ]
do
LINIQ=`head -n $i $CWD/pkginfo| tail -n 1`;
if [ $i -le $BROI_LINE_pkginfo ]
then
echo "$PROGRAM: " $LINIQ >>$CWD/slack-desc
else
echo "$PROGRAM: " >>$CWD/slack-desc
fi
 i=$(( $i+1));
done;
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
else echo "NO PACKAGE DESCRIPTION!!!Вижте ред 100  на този скрипт."
   echo "Да продължим ли? y = да";
   read PRODULVENIE;
if [  "$PRODULVENIE" = "y" ]
then echo "Добре ";
else echo  " РЕД 118"; exit;
fi
fi
####################################################################
#край на Добавяне на инфо
####################################################################
#в / създаваме файл COMPILE_FLAGS със съдържание.
# -O2 -march=?  -mtune=?: za    GCC-3.4.         или         -O2 -march=? -mcpu=?: za   GCC-3.3.*
#?=i486 ,i386 ,i286,i186,i86,85.84..................;)

SLKCFLAGS=`cat /COMPILE_FLAGS | cut -f1 -d ":"`

cd $TMP
tar $tarcom $CWD/$PROGRAM-$VERSION.tar.$razsh
cd $PROGRAM-$VERSION
#####################################
#найсе солушън да имаме CONFIGURE_OPTIONS за всеки случай
#####################################
if [ ! -e $CWD/CONFIGURE_OPTIONS ]
then
./configure --help  >> ../CONFIGURE_OPTIONS
fi
#####################################
#край на найсе солушън да имаме CONFIGURE_OPTIONS за всеки случай
#####################################
chown -R root.root .

CFLAGS="$SLKCFLAGS" CXXFLAGS="$SLKCFLAGS" \
./configure \
 --prefix=/usr \
 --sysconfdir=/etc \
 --mandir=/usr/man \
 --infodir=/usr/info \
 --localstatedir=/var/lib

make CC=$CC_COMPILATOR  CXX=$CXX_COMPILATOR  -j$NUMARABOTI
#make install PREFIX=$PKG
#make install ROOT=$PKG
#make install INSTALL_ROOT=$PKG
#make install DSTROOT=$PKG
make install DESTDIR=$PKG

chown -R root.bin $PKG/usr/bin
gzip -9 $PKG/usr/man/man?/*.?
( 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
)
cd $PKG
makepkg -l y -c n $INSTALL/$PROGRAM-$VERSION-$ARCH-$BUILD.tgz
#почистваме
rm -rf $TMP

 :ok:


Титла: как се прави Slackware tgz пакет ?
Публикувано от: KoIoSoS в Jan 26, 2006, 11:46
грешка в скрипта Публикуван на Ян. 25 2006,21:36
ред 152
подмени с
Примерен код

./configure --help  >> ../../CONFIGURE_OPTIONS

 :ok:


Титла: как се прави Slackware tgz пакет ?
Публикувано от: vstoykov в May 07, 2006, 15:34
Новата версия на GCC започна да се оплаква:

Примерен код

`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead


Използвам CFLAGS="-O2 -march=i486 -mcpu=i686" (както е в Slackware).


Титла: как се прави Slackware tgz пакет ?
Публикувано от: karaman в May 07, 2006, 16:17
-mtune == -mcpu


Титла: как се прави Slackware tgz пакет ?
Публикувано от: vstoykov в May 09, 2006, 00:09
Намерих тази информация в man:gcc (загрях лентата за превъртане докато намеря тази информация...):

Цитат

-mtune=cpu-type
 Tune to cpu-type everything applicable about the generated code, except for the ABI and the set of available instructions. The choices for cpu-type are:
i386
 Original Intel's i386 CPU.
i486
 Intel's i486 CPU. (No scheduling is implemented for this chip.)
i586, pentium
 Intel Pentium CPU with no MMX support.
pentium-mmx
 Intel PentiumMMX CPU based on Pentium core with MMX instruction set support.
i686, pentiumpro
 Intel PentiumPro CPU.
pentium2
 Intel Pentium2 CPU based on PentiumPro core with MMX instruction set support.
pentium3, pentium3m
 Intel Pentium3 CPU based on PentiumPro core with MMX and SSE instruction set support.
pentium-m
 Low power version of Intel Pentium3 CPU with MMX, SSE and SSE2 instruction set support. Used by Centrino notebooks.
pentium4, pentium4m
 Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set support.
prescott
 Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and SSE3 instruction set support.
nocona
 Improved version of Intel Pentium4 CPU with 64-bit extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
k6
AMD K6 CPU with MMX instruction set support.
k6-2, k6-3
 Improved versions of AMD K6 CPU with MMX and 3dNOW! instruction set support.
athlon, athlon-tbird
AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE prefetch instructions support.
athlon-4, athlon-xp, athlon-mp
 Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and full SSE instruction set support.
k8, opteron, athlon64, athlon-fx
AMD K8 core based CPUs with x86-64 instruction set support. (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 64-bit instruction set extensions.)
winchip-c6
IDT Winchip C6 CPU, dealt in same way as i486 with additional MMX instruction set support.
winchip2
IDT Winchip2 CPU, dealt in same way as i486 with additional MMX and 3dNOW! instruction set support.
c3
 Via C3 CPU with MMX and 3dNOW! instruction set support. (No scheduling is implemented for this chip.)
c3-2
 Via C3-2 CPU with MMX and SSE instruction set support. (No scheduling is implemented for this chip.)


 While picking a specific cpu-type will schedule things appropriately for that particular chip, the compiler will not generate any code that does not run on the i386 without the -march=cpu-type option being used.
-march=cpu-type
 Generate instructions for the machine type cpu-type. The choices for cpu-type are the same as for -mtune. Moreover, specifying -march=cpu-type implies -mtune=cpu-type.
-mcpu=cpu-type
 A deprecated synonym for -mtune.