Титла: Трябва ли да поискам съгласието на автора?
Публикувано от: mhydra в Sep 29, 2005, 13:53
Аз искам да пакетирам няколко програми за Слак, обаче не знам да ли трябва преди да ги пакетирам да поискам разершение от техните автори. Някой от тях не мога да ги намеря (закрили са си имейлите). Така че какво да правя?
Мога ли да пакетирам програма без знанието на автора й? И изобщо трябва ли да уведомявам автора?
Питах в linuxpackages.net aма там не са много активни, няма много голямо присъствие.Тук има по-вече посещаемост.
Титла: Трябва ли да поискам съгласието на автора?
Публикувано от: Lord Bad в Sep 29, 2005, 15:21
Не разбира се. Можеш да си пакетираш и разпространяваш всичко, което е лицензирано под GPL съвсем свободно. А и дето се вика - каква е разликата да си изтеглиш сорса без да питаш и да си го компилираш или да си го изтеглиш компилиран и пакетиран без да питаш... Дето се вика автора даже ще е доволен че някой прави пакети вместо него 
Титла: Трябва ли да поискам съгласието на автора?
Публикувано от: semionov в Sep 29, 2005, 16:18
Само прочети внимателно разните там лицензи и реадме-та. Май трябва да сложиш файловете AUTHORS, LICENSE и README в директорията, в която се пази документацията на софтуера, примерно /usr/local/share/doc/<package>/
Титла: Трябва ли да поискам съгласието на автора?
Публикувано от: vstoykov в Sep 29, 2005, 17:42
Трябва да сложиш някои важни файлове в пакета. Например: Име на архива с изходен код: 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
Титла: Трябва ли да поискам съгласието на автора?
Публикувано от: vstoykov в Sep 29, 2005, 17:49
Някои особености в и менуването на пакетите:
Пример: име: programa версия: 1.0 архитектура: i486 изграждане номер (buld):1 Име на пакета: programa-1.0-i486-1.tgz
Добре е да има само три тирета в името на пакета. Ако има тирета в името на програмата (programa-wtorachastnaimeto-1.0-i486-1.tgz) това може да доведе до объркване на някои скриптове (но аз моите съм гледал да ги направя така че да броят броя на тиретата и да преценяват по тях до кое тире се простира името на програмата - дали до второто или до първото; за целта от общия брой на тиретата се изважда числото две: 4-2=2 т.е. в този случай името се простира до второто тире; ако има тирета след тирето вдясно от името повече от две даже и моите скриптове няма да работят).
Титла: Трябва ли да поискам съгласието на автора?
Публикувано от: mhydra в Sep 30, 2005, 08:37
@vstoykov Много ти благодаря, аз по принцип знам процедурата за създаване на пакети в Слак.Те имат доста подробна документация в .пдф формат. Обаче имам един въпрос как да съм сигурен и да разбера че пакетът е за i386 или i486. Виж аз какво правя ./configure --prefix=/usr make make install DESTDIR=/target-dir
Обаче по такъв начин откъде да знам че съм го компилирал за i486? Те нали някой програми автоматично си пускат оптимизаци от рода на -o2 -o6?
Благодаря за скрипта, ще го използвам .Аз бях тръгнал да правя такъв скрипт за мен.
Титла: Трябва ли да поискам съгласието на автора?
Публикувано от: CaBA в Sep 30, 2005, 11:52
Много хубави скриптове сте си направили за пакетиране, но защо откривате отново топлата вода? Хората са измислили сума ти пакетни системи, които правят нещата автоматично, че и повече екстри имат - примерно на някои може да се каже да изпълнят команди след инсталирането на пакета (примерно ldconfig, ако се инсталира библиотека). Не ме разбирайте погрешно - не искам да ви разубеждавам да не се занимавате с каквото ви харесва, просто отбелязвам, че има и по-лесен начин.
|