Автор Тема: Трябва ли да поискам съгласието на автора?  (Прочетена 1520 пъти)

mhydra

  • Напреднали
  • *****
  • Публикации: 715
  • Distribution: Fedora, Mandriva
  • Window Manager: GNOME
    • Профил
Аз искам да пакетирам няколко програми за Слак, обаче не знам да ли трябва преди да ги пакетирам да поискам разершение от техните автори.
Някой от тях не мога да ги намеря (закрили са си имейлите).
Така че какво да правя?

Мога ли да пакетирам програма без знанието на автора й?
И изобщо трябва ли да уведомявам автора?

Питах в linuxpackages.net aма там не са много активни, няма много голямо присъствие.Тук има по-вече посещаемост.
Активен

Указвам помощ за всичко свързано с Fedora и Мандрива.
Може да ме търсите на ICQ.

Lord Bad

  • Напреднали
  • *****
  • Публикации: 1667
  • Distribution: Fedora 13
  • Window Manager: GNOME
  • Jedi Knight
    • Профил
Не разбира се. Можеш да си пакетираш и разпространяваш всичко, което е лицензирано под GPL съвсем свободно. А и дето се вика - каква е разликата да си изтеглиш сорса без да питаш и да си го компилираш или да си го изтеглиш компилиран и пакетиран без да питаш... Дето се вика автора даже ще е доволен че някой прави пакети вместо него '<img'>
Активен

Fuelled by Fedora 13 "Goddard"
====================================
Rock it!

semionov

  • Напреднали
  • *****
  • Публикации: 110
    • Профил
Само прочети внимателно разните там лицензи и реадме-та.
Май трябва да сложиш файловете AUTHORS, LICENSE и README в директорията, в която се пази документацията на софтуера, примерно /usr/local/share/doc/<package>/
Активен

vstoykov

  • Напреднали
  • *****
  • Публикации: 1286
  • Distribution: Ubuntu
  • Window Manager: Fluxbox
    • Профил
    • WWW
Трябва да сложиш някои важни файлове в пакета. Например:

Име на архива с изходен код: 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

  • Напреднали
  • *****
  • Публикации: 1286
  • Distribution: Ubuntu
  • Window Manager: Fluxbox
    • Профил
    • WWW
Някои особености в и менуването на пакетите:

Пример:
име: programa
версия: 1.0
архитектура: i486
изграждане номер (buld):1
Име на пакета: programa-1.0-i486-1.tgz

Добре е да има само три тирета в името на пакета. Ако има тирета в името на програмата (programa-wtorachastnaimeto-1.0-i486-1.tgz) това може да доведе до объркване на някои скриптове (но аз моите съм гледал да ги направя така че да броят броя на тиретата и да преценяват по тях до кое тире се простира името на програмата - дали до второто или до първото; за целта от общия брой на тиретата се изважда числото две: 4-2=2 т.е. в този случай името се простира до второто тире; ако има тирета след тирето вдясно от името повече от две даже и моите скриптове няма да работят).
Активен

mhydra

  • Напреднали
  • *****
  • Публикации: 715
  • Distribution: Fedora, Mandriva
  • Window Manager: GNOME
    • Профил
@vstoykov
Много ти благодаря, аз по принцип знам процедурата за създаване на пакети в Слак.Те имат доста подробна документация в .пдф формат.
Обаче имам един въпрос как да съм сигурен и да разбера че пакетът е за i386 или i486. Виж аз какво правя ./configure --prefix=/usr make make install DESTDIR=/target-dir

Обаче по такъв начин откъде да знам че съм го компилирал за i486?
Те нали някой програми автоматично си пускат оптимизаци от рода на -o2 -o6?

Благодаря за скрипта, ще го използвам .Аз бях тръгнал да правя такъв скрипт за мен.
Активен

Указвам помощ за всичко свързано с Fedora и Мандрива.
Може да ме търсите на ICQ.

CaBA

  • Напреднали
  • *****
  • Публикации: 303
    • Профил
    • WWW
Много хубави скриптове сте си направили за пакетиране, но защо откривате отново топлата вода? Хората са измислили сума ти пакетни системи, които правят нещата автоматично, че и повече екстри имат - примерно на някои може да се каже да изпълнят команди след инсталирането на пакета (примерно ldconfig, ако се инсталира библиотека). Не ме разбирайте погрешно - не искам да ви разубеждавам да не се занимавате с каквото ви харесва, просто отбелязвам, че има и по-лесен начин.
Активен

10 години ябълкова диета стигат, стигат!