CITKIT.ru - свободные мысли о свободном софте
Деловая газета CitCity.ru Библиотека CITForum.ru Форумы Курилка
Каталог софта Движение Open Source Дискуссионный клуб Дистрибутивы Окружение Приложения Заметки Разное
25.09.2016

Последние комментарии

ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)
24 December, 22:53
Kubuntu Feisty (15)
24 December, 18:42
Один на один с Windows XP (3758)
24 December, 11:46

Каталог софта

Статьи

Дискуссионный клуб
Linux в школе
Open Source и деньги
Open Source и жизнь
Windows vs Linux
Копирайт
Кто такие анонимусы
Лицензии
Нетбуки
Нужен ли русский Linux?
Пользователи
Дистрибутивы
Идеология
Выбор дистрибутива
Archlinux & CRUX
Debian
Fedora
Gentoo
LFS
LiveCD
Mandriva
OpenSolaris
Slackware
Zenwalk
Другие линуксы
BSD
MINIX
Движение Open Source
История
Классика жанра
Окружение
shell
Библиотеки UI
Графические среды
Шрифты
Приложения
Безопасность
Управление пакетами
Разное
Linuxformat. Колонки Алексея Федорчука
Заметки
Блогометки
Файловые системы
Заметки о ядре

Дистрибутивы :: Slackware

SlackBuild: пакеты своими руками

http://ratnikov.ev.googlepages.com/slackbuilds.html

Зачем это нужно

Только для того чтобы сделать tgz-пакет. Множество программ можно установить из исходных текстов, а вот корректно удалить уже сложнее. Для управления tgz-пакетом может быть использован менеджер пакетов Slackware. С ним установка/удаление гораздо легче и приятнее.

Что такое SlackBuild

SlackBuild - скрипт для автоматической сборки пакета из исходных текстов. Обычное название такого скрипта имя_программы.SlackBuild.

Почему именно SlackBuild

Действительно, почему именно SlackBuild? Автоматическая сборка пакетов! Автоматическая - главное, для меня по крайней мере.

Долгое время для сборки собственных пакетов я пользовался checkinstall. При всех плюсах у этого подхода были и недостатки. Достаточно сложно автоматизировать его работу. Каждый раз приходилось вспоминать какие опции программы и флаги сборки я использовал в прошлый раз. В результате появилось несколько скриптов для сборки, т.е. несмотря на checkinstall скрипты все-равно оказывались удобнее.

Еще один недостаток checkinstall - проблематично создать пакет для программ без цели сборки install (например курсоры или темы).

К этому стоит добавить и ненадежную работу начиная с 12 версии Slackware.

Наконец именно с помощью SlackBuild-скриптов собирается дистрибутив Slackware. Достаточно взглянуть на директорию source с установочного диска.

Пример скрипта

Рассмотрим написание своего SlackBuild на небольшом примере. Для меня до сих пор загадка почему Патрик включает и ctags и vim в один пакет. Я предпочитаю разделить эти программы на два пакета.

Итак vim.SlackBuild с подробными комментариями

#!/bin/sh
    # SlackBuild-скрипт для vim-gvim

#  Объявляем переменные
    #  Я стараюсь во всех скриптах давать одинаковые имена переменным,
    #  такие же как в большинстве скриптов из дистрибутива, 
    #  так как привыкнув один раз читать скрипты становиться просто
    PRGNAM=vim                  #  название
    VERSION=7.1                 #  версия
    SRCDIR=vim71                #  директория с исходным кодом (далеко не всегда это нужно)
    ARCH=${ARCH:-i486}          #  архитектура
    BUILD=${BUILD:-1}           #  номер сборки
    TAG=${TAG:-_evgeny}         #  автор
    CWD=$(pwd)                  #  текущая директория - отсюда будем брать исходники, патчи и т.п.
    TMP=${TMP:-/tmp/$TAG}       #  сюда распаковываем архив с исходниками
    PKG=$TMP/package-$PRGNAM    #  сюда будем устанавливать собранную программу 
                                #  (предварительная установка во временную директорию нужна для последующей сборки пакета)
    OUTPUT=${OUTPUT:-/tmp}      #  сюда сохраним полученный пакет

#  Выбираем оптимизирующие флаги компиляции
    if [ "$ARCH" = "i486" ]; then
      SLKCFLAGS="-O2 -march=i486 -mtune=i686"
    elif [ "$ARCH" = "i686" ]; then
      SLKCFLAGS="-O2 -march=i686 -mtune=i686"
    elif [ "$ARCH" = "x86_64" ]; then
      SLKCFLAGS="-O2 -fPIC"
    fi

#  принудительный выход если какая либо из следующих команд вернула значение, отличное от 0
    set -e

rm -rf $PKG                                 
#  очищаем директорию от предыдущей установки
    mkdir -p $TMP $PKG $OUTPUT                  
#  создаем директории для установки, сборки и сохранения пакета
    cd $TMP
    rm -rf $PRGNAM-$VERSION                     
#  очищаем директорию от предыдущей сборки

#  распаковываем архивы с исходными текстами
    tar xvf $CWD/$PRGNAM-$VERSION.tar.bz2 
    tar xvf $CWD/$PRGNAM-$VERSION-extra.tar.gz
    tar xvf $CWD/$PRGNAM-$VERSION-lang.tar.gz

# зачастую архивы распаковываются в $PRGNAM-$VERSION, однако vim распаковывается в vim71 - $SRCDIR # переходим к исходникам и исправляем права доступа cd $SRCDIR find . \ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ -exec chmod 755 {} \; -o \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \;

# конфигурация сборки CFLAGS="$SLKCFLAGS" \ ./configure \ --prefix=/usr \ --mandir=/usr/man \ --build=$ARCH-slackware-linux \ --host=$ARCH-slackware-linux \ --with-x \ --enable-multibyte \ --enable-fontset \ --enable-gui=gtk2 \ --enable-pythoninterp \ --enable-tclinterp \ --disable-netbeans # сборка make # установка # DESTDIR - переменная среды, добавляется перед префиксом - # таким образом можно "установить" программу в локальную директорию для последующей сборки пакета # Аналогичная переменная есть для многих систем сборки, например для qmake это INSTALL_ROOT, # для cmake - тоже DESTDIR, для python setuptools надо указывать --root и т.п. make install DESTDIR=$PKG # сжимаем man-страницы ( cd $PKG/usr/man rm -rf cat* find . -type f -exec gzip -9 {} \; for i in $(find . -type l) ; do ln -s $(readlink $i).gz $i.gz ; rm $i ; done ) # добавляем документацию, а вместе с ней и пару SlackBuild, slack-desc mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION cp -a README* $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild cat $CWD/$PRGNAM.slack-desc > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.slack-desc # install - служебная директория, из файла slack-desc берется описание пакета mkdir -p $PKG/install cat $CWD/$PRGNAM.slack-desc > $PKG/install/slack-desc # Иногда бывает нужно выполнить некоторые действия после установки. # В этом случае в директорию install добавляется файл doinst.sh # Нам это не требуется # до этого места можно было работать под обычным пользователем # меняем владельца всех устанавливаемых файлов на root chown -R root:root $PKG # создаем пакет cd $PKG /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.tgz

Вот что получилось:

vim-7.1-i486-1_evgeny.tgz

Название - vim, версия - 7.1, архитектура - i486, сборка - 1, автор сборки - evgeny (указывать необязательно, но я указываю, т.к. в таком случае всегда видно какие именно пакеты собрал я сам).

vim.SlackBuild и vim.slack-desc можно взять здесь.

Ссылки

Slackware Package Management (перевод)

SlackBuilds.org

Building a Slackware Package

The perfect package




Комментарии

Не аноним, Wed Nov 11 09:57:43 2009:
чет не понятно
аноним, Thu Aug 21 18:43:59 2008:
круто,большое спс
аноним, Sat Jun 7 14:49:31 2008:
Долго же ждать! :) 12.1 только-только вышел, и потом, разве следующая будет 13 а не 14? (например в F1 так, нет 13 номера)
аноним, Thu Jun 5 03:20:46 2008:
Отличная замена Арчевским пкгбилдам при переходе на Слаку.

Как 13 выйдет перейду! Слакварь тоже может быть настраиваемой.
аноним, Thu Jun 5 00:25:37 2008:
Спасибо, нужная вещь

Комментарии заморожены.

Новости:

Все новости на CitCity.ru

Компании месяца

 
Последние комментарии
Почему школам следует использовать только свободные программы (101)
20 Декабрь, 14:51
ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)

24 Декабрь, 22:53
Linux в школе: мифы про школу и информатику (334)
24 Декабрь, 22:43
Kubuntu Feisty (15)
24 Декабрь, 18:42
Software is like sex: it's better when it's free.
©Linus Torvalds