Установка программ из исходников

Готовые решения для многих вопросов, которые очень часто задаются снова и снова.

Модератор: Модераторы разделов

Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Установка программ из исходников

Сообщение Uncle_Theodore » 25.03.2007 23:06

Форум-version
Created Понедельник 08/10/2007

Установка софта из исходников имеет
некоторые положительные моменты, но и
немало отрицательных.

Положительные:
* Нужного пакета (или нужной версии) может не быть в репозитариях Вашего дистрибутива
* Программа, установленная из исходников, может быть сконфигурирована по Вашему желанию
* Вобщем-то, полезный опыт.

Отрицательные:
* Вам придётся самим отслеживать все зависимости для установки программы
* Если что-то пойдёт не так, рассчитывать придется только на помощь разработчиков софта

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

Убедитесь, что в системе установлены средства разработки – компилятор, библиотеки и заголовки для разных пакетов (многие дистрибутивы выделяют их в отдельные пакеты), для компиляции некоторых программ нужны и исходники ядра. Убедитесь, что символическая ссылка linux в директории /usr/src указывает на исходники того ядра, под которым будет бегать установленная программа.

Получение исходников
Закачиваем исходники. Здесь обычно есть два варианта:
1. Закачать готовый архив в формате tar.gz
2. Взять файлы с CVS репозитория. В CVS обычно находится софт "в процессе разработки", более свежий, но и менее протестированный.
Инструкции по пользованию CVS-репозиториями обычно находятся на сайте разработчика.

Распаковываем тарболы. Это можно сделать при помощи любого графического архиватора (например File Roller в Гноме), или же из консоли:
* для архива '.tar.gz':

Код: Выделить всё

tar xvzf имя.архива.tar.gz

* для архива '.tar.bz2':

Код: Выделить всё

tar xvjf имя.архива.tar.bz2

Затем перемещаемся в распакованный таким образом каталог и внимательно читаем, что написано в файлах README и INSTALL. Этот шаг абсолютно необходим. Без него ничего работать не будет.
Если софт получен из CVS-репозитория, читаем инструкции разработчика на сайте по "бутстрапанию" (см. http://en.wikipedia.org/wiki/Bootstrapping_%28computing%29) пакета, если необходимо.

Конфигурирование и компиляция
Если инструкции требуют запуска скрипта с названием configure в качестве первого шага, сначала прогоняем

Код: Выделить всё

 ./configure --help

и внимательно читаем, какие опции можно послать скрипту configure для правильного конфигурирования программы.
Затем запускаем

Код: Выделить всё

 ./configure

с выбранными опциями. На этом этапе программе могут понадобиться зависимости, которые либо не установлены в нашей системе, либо не найдены скриптом configure. В первом случае, их надо найти и поставить, во втором -- еще раз исследовать опции скрипта configure на предмет указания ему места, где искать нужные зависимости.

Если configure сработал нормально, запускаем make.
Здесь тоже возможны варианты. Если make завершается ошибкой, копируем ошибку в окошка ГУГЛА и смотрим, как наши товарищи по несчастью справились с подобной ошибкой. Иногда решения нет, и надо писать разработчику.

Установка

Если make прошел нормально, мы почти у цели.
Думаете, теперь надо прогонять make install? В сущности, можно и так (не забудьте стать рутом для этого).
Но Правильный Путь™ заключается в том, чтобы сделать теперь из скомпилированного исходника пакет для нашего дистрибутива и поставить его средствами штатного менеджера пакетов.

Создание пакета

checkinstall
Это одна из немалого количества программ для построения пакетов из исходников. Она не дистроспецифична и генерирует пакеты для самых распространённых пакетных менеджеров (в отличие от paco, который тоже всем хорош, кроме того, что держит свою базу пакетов).
В классической схеме сборки приложения из исходников, использующих automake (./configure && make && make install)', эта утилита заменяет собой 'make install. Делая в принципе то же самое, но при этом регистрируя устанавливаемую программу в пакетной базе дистрибутива.

Код: Выделить всё

checkinstall -R

Построит и установит RPM пакет(для Fedora, Mandriva, SuSe, Alt, ASP...)

Код: Выделить всё

checkinstall -D

Создаст и установит DEB-пакет(для Debian, Ubuntu...)

Код: Выделить всё

checkinstall -S

Создаст и установит TGZ-пакет(для Slackware, Zenwalk, DeepStyle, Vektorlinux, Mops; в поставке дистра есть checkinstall, патченный самим Патриком...)

Имя пакета по умолчанию будет myNewUtil.
Версия: 1.2.3. После запуска checkinstall всегда просит ввести описание пакета, а также даёт возможность изменить имя, версию и т.д.

makepkg
Ещё раз просмотрите опции configure на предмет префикса, куда устанавливается программа. Обычно это /usr или /usr/local.

Создаем в домашней директории нашего пользователя директорию foo, а в ней – директории usr и usr/local
Теперь становимся рутом и пишем

Код: Выделить всё

 make install prefix=/home/<userame>/foo/usr/local
 cd foo
 makepkg foo.tgz

В результате получаем Слакварный пакет, который можно теперь установить программой installpkg.

Система портов ABS в ArchLinux
В ArchLinux существует свой механизм сборки программ из исходников - система портов ABS. Каждый порт содержит файл с набором правил для загрузки архива с исходниками и сборки пакета PKGBUILD и дополнительные файлы, если требуется (например, патчи). Все ПО в ABS распределено по репозиториям (current, extra, community, testing, unstable) и категориям (multimedia, office, x11, etc.). Т.е в корне дерева портов ABS располагаются каталоги с репозиториями, внутри которых - каталоги с категориями пакетов (каталоги с категориями репозитория current расположены в самом корне дерева). Для обновления дерева используется простая команда 'abs', без всяких ключей (только для ее работы потребуется пакет cvs, потому
что порты ABS распространяются именно с помощью этого механизма). Чтобы найти порт требующейся программы, достаточно выполнить в консоли:

Код: Выделить всё

find /var/abs -name имя_пакета

Что требуется для сборки пакета?
Ничего мудреного - переходим в каталог с портом нужной программы и в консоли выполняем 'makepkg'. Что делает makepkg:
1. Проверяет, нет ли уже собранного пакета в директории сборки (или в директории, в которую указано складывать собранные пакеты, указывается в файле /etc/makepkg.conf). Если уже есть, то выкинет ошибку, обойти это можно, если запустить makepkg с ключом '-f'
2. Проверяет зависимости программы, указанные в PKGBUILD.
Если чего не хватает - укажет, чего придется поставить.
3. Проверяет наличие архива с исходниками и дополнительных файлов (makepkg складывает их в /var/cache/pacman/src ), если нет, то скачивает его по адресам, указанным в PKGBUILD.
4. Проверяет контрольные суммы скачанных файлов, если они указаны в PKGBUILD
5. Распаковывает архивы с исходниками
6. Выполняет действия, указанные в секции 'build' в PKGBUILD - какие-либо дополнительные действия (например, наложение патчей) и собственно сборку.
7. Если сборка проходит успешно, 'makepkg' устанавливает программу в директорию 'pkg' в корне директории порта и упаковывает эту директорию в стандартный pkg.tar.gz-пакет. Все,
пакет собран. Теперь его можно установить:
pacman -A имя_пакета.pkg.tar.gz
В ArchLinux есть также пользовательский репозиторий пакетов AUR. На AUR лежат те же порты, из которых собираются программы в ABS.
Для установки программы с AUR есть два пути:
Первый:
1. Заходим на http://aur.archlinux.org , находим нужную нам программу.
2. Скачиваем PKGBUILD, создаем каталог с именем, в точности соответствующим названию пакета, указанного в PKGBUILD (желательно в /usr/abs, дабы не замусоривать систему).
3. Выполняем makepkg, устанавливаем pacman'ом ,как было указано выше.
Второй:
1. Устанавливаем программу
2. Ищем программу на AUR, выполнив

Код: Выделить всё

qpkg -a имя_нужной_программы

3. Выполняем

Код: Выделить всё

qpkg -p имя_нужной_программы

(эта команда сама скачает PKGBUILD, исходники, соберет программу в пакет и установит ее).

Создание собственного пакета в ArchLinux
(На случай, если даже в AUR его не нашлось).
Как было сказано, для построения пакета в Арче нужен PKGBUID файл.
Разложим его по полочкам.
Прежде всего стоит отметить, что, чтобы не захламлять дерево ABS собственными пакетами, лучше выделить для этого отдельный каталог (у меня - /var/abs/local), в этом каталоге создаем подкаталог, где, собственно, все и будет происходить. Копируем туда файл ''/var/abs/ PKGBUILD.proto'' (прототип, который есть в дереве ABS) и переименовываем его в "PKGBUILD". Далее нужно подправить файл. Сначала нужно подправить описание пакета:
*'pkgname' - название пакета,
*'pkgver' – версия пакета,
*'pkgrel' – версия сборки,
*'url' – обычно домашняя страница приложения,
*'license' – лицензия, под которой выпускается приложение,
Далее следует указать зависимости, конфликты и источник исходников собираемого пакета:
*'depends' – список зависимостей пакета, названия должны быть заключены в одинарные кавычки и разделены пробелами. Если важна версия зависимости – ее можно указать
(например, kdelibs>=3.5.1),
*'makedepends' – список пакетов, необходимых на этапе сборки (например, если пакет собирается какой-нибуть нестандартной системой сборки типа cmake),
*'conflicts' – список пакетов, с которыми может конфликтовать собираемый
*'replaces' – список пакетов, которые заменяет собираемый,
*'backup' – список файлов, которые необходимо будет сохранить при установке собираемого пакета,
*'install' – имя установочного скрипта (в нем – дополнительные шаги, необходимые для завершения установки пакета),
*'source' – указывает путь, откуда будут забираться исходники пакета.
Если для сборки необходимо несколько файлов (например, дополнительные патчи), их указывают через пробел,
*'md5sums' – md5 суммы скачанных исходников. Если не заполнять эту строчку, ничего страшного не произойдет, makepkg лишь обратит на это внимание. Кстати, makepkg может сгенерировать эти контрольные суммы и добавить их в PKGBUILD. Для этого необходимо выполнить

Код: Выделить всё

makepkg -g >> PKGBUILD

Далее следует скрипт сборки, который представляет собой все те действия, которые пришлось бы выполнить, если пакет собирался бы вручную. Обычно это стандартная последовательность
./configure && make && make install
однако здесь стоит обратить внимание на префикс, куда будет устанавливаться пакет и опции скрипта ./configure.
Теперь о флагах 'makepkg'.
Об '-f' уже говорилось, еще два полезных флага – это '-c', очищающий каталог пакета после сборки и '-i', который позволяет сразу же установить собранный пакет.

rpmbuild
Cтандартная утилита для сборки программ из исходников и упаковки их в пакеты rpm во многих пакетных дистрибутивах, построенных на базе RedHat.
Для сборки бинарного пакета обычно используются пакеты *.src.rpm, содержащие сами архивы с исходниками программ, дополнительные файлы (патчи, desktop-файлы и т.д.) и spec-файл – набор правил для сборки программы.
Итак, если нужно собрать в пакет rpm какую-нибудь программу, выполняем следующее:
*1. Качаем файл *.src.rpm для нашей программы (обычно их можно найти на
ресурсах http://rpmfind.net, http://rpm.pbone.net или в репозиториях дистрибутива (если он ориентирован на rpm-пакеты) ).
*2. Устанавливаем его:

Код: Выделить всё

rpm -ivh имя_пакета.src.rpm

В каталоге /usr/src/rpm/SOURCES должен появиться архив с исходниками нужной нам программы, а в каталоге ''/usr/src/rpm/SPECS - файл 'имя_программы.spec''' (это файл, описывающий правила сборки).
*3. Переходим в директорию /usr/src/rpm/SPECS и там выполняем:

Код: Выделить всё

rpmbuild -bb –target=архитектура_процессора название_программы.spec
(запускаем сборку программы)
Вместо "архитектура_процессора" подставляем архитектуру процессора, под которую собираем пакет(в большинстве случаев подойдет i686 ), 'название_программы.spec' - это ''spec-файл'' для нашей программы. Если не удовлетворены какие-то зависимости, 'rpmbuild' скажет об этом – тогда придется доустановить недостающие пакеты.
*4. Если все пройдет удачно, на выходе получим rpm-пакет нашей программы, он будет лежать в ''/usr/src/rpm/RPMS/архитектура_процессора_под_которую_собирался_пакет''. Переходим в эту директорию и оттуда делаем:

Код: Выделить всё

rpm -ivh имя_программы.rpm

Все, программа установлена.

Иногда бывают случаи, когда файла src.rpm нет или нам нужно внести поправки в процесс сборки/установки программы. В этом случае придется править (или создавать заново) spec-файл. spec-файл состоит из 8 частей:
*1. Заголовок. В заголовке есть несколько стандартных полей:
**'Summary:' - однострочное описание пакета.
**'Name:' - строка имени из имени файла rpm
**'Version:' - номер версии пакета
**'Release:' - номер релиза пакета
**'Icon:' - имя файла иконки, которое будет использоваться другими высокоуровневыми утилитами установки (подобными Glint)
**'Source:' - указывает место расположения файлов исходных текстов, а также различных доп. Файлов (файлов конфигурации, скриптов и т.д.) (таких полей может быть несколько: (Source0, Source1.. ), все эти файлы должны располагаться в /usr/src/rpm/SOURCES (если исходники ставятся из src.rpm-файла, то rpm их сам туда кидает)
**'Patch:' - Это место, где вы можете найти заплатки, если вы захотите загрузить их снова. (Как и в поле 'Source:', эти файлы должны лежать в ''/usr/src/rpm/SOURCES'' ), таких полей может быть тоже несколько: Patch0, Patch1...
**'Copyright:' - авторские права (GPL, BSD, MIT, public domain, distributable, или commercial)
**'BuildRoot:' - задает корневую директорию для построения и установки нового пакета, (обычно ''/usr/src/rpm/BUILD/имя_пакета'' )
**'Group:' - указание высокоуровневым программам установки (таким как Glint) где расположить программу в их иерархических структурах.
**'BuildRequires:' - указываются зависимости пакета, их версии (этих полей может быть несколько )
*2. Описание пакета (не обязательно)
( '%description' )
*3. Здесь указываются разные подготовительные действия (распаковка архивов, наложение патчей и т.д.)
( '%prep' )
*4. В этом разделе указываются все действия, необходимые для сборки программы(например, выполнение скрипта ./configure, make и т.д.)
( '%build' )
*5. Действия, необходимые для установки пакета (на этапе сборки пакета программа устанавливается в BuildRoot )
( '%install' )
*6. Действия для очистки результатов сборки(удаляется каталог BuildRoot), (выполняются, если запустить rpmbuild с ключом '--clean')
( '%clean' )
*7. Здесь располагается список фалов, которые будут включены в бинарный rpm пакет (исполняемые файлы, man-страницы, файлы конфигурации и т.д.
( '%files' )
*8. Changelog программы (не обязательно)
( '%changelog' )

Stow
Stow – это программа управления пакетами, которая держит их на "отдельных полочках" (например /usr/local/stow/emacs но ''/usr/local/stow/perl'' ) и в то же время "делая вид", что они установлены в одном и том же месте (/usr/local).Почитать мануал по Stow можно здесь.
Stow - это скрипт на Перл, который не будет запинаться, если у вас установлен Perl 5.005 и выше. Его надо установить перед установкой самой Stow.
Пример использования Stow.
Предположим, нам нужно установить 'abc-1.4', и у нас есть 'abc-1.4.tar.gz', и его нужно установить в /usr/local/bin. После распаковки

Код: Выделить всё

tar -zxvf abc-1.4.tar.gz

переходим в созданный каталог 'abc-1.4'

Код: Выделить всё

cd abc-1.4

Сначала нам нужно установить приложение в каталог stow. Пусть это будет /usr/local/stow.
Произведём рутинные шаги по установке:

Код: Выделить всё

[root@linuxbox abc-1.4]# ./configure --prefix=/usr/local/stow/abc-1.4
[root@linuxbox abc-1.4]# make
[root@linuxbox abc-1.4]# make install

Далее, нам нужно "положить на полочку" приложение, и создать симв. Ссылки внутри целевого каталога, т.е. ''/usr/local/bin'', с помощью stow. Эти операции можно проводить из-под юзера.

Код: Выделить всё

[userX@linuxbox abc-1.4]$ cd /usr/local/stow/
[userX@linuxbox stow]$ stow -t /usr/local/bin abc-1.4

Приложение 'abc-1.4' теперь расположилось в своём каталоге, abc-1.4, внутри каталога stow, а
соответствующие ему ссылки – в целевом каталоге, /usr/local/bin.Если нам понадобится перекофигурировать или апгрейдить приложение 'abc-1.4', мы можем просто произвести соответствующие изменения в его собственном каталоге, а после этого снова "положить на полочку", обновив соответствующие символические ссылки:

Код: Выделить всё

[userX@linuxbox stow]#$ stow -R abc-1.4

Для удаления приложения, нам нужно будет просто "убрать с полочки" 'abc-1.4':

Код: Выделить всё

[userX@linuxbox stow]#$ stow -D abc-1.4

Stow просто удалит символические ссылки, указывающие на установленное приложение и никогда не удалит самих установочных файлов. Таким образом, остаётся возможность позже снова "поставить на полочку" приложение с помощью stow.


Авторы: группа товарищей (Uncle_Theodore, eduard_pustobaev, Juliette, Aectann, alastor)

Полезные ссылки:
Решение проблем, возникающих при выполнении команд ./configure, make и make install
Спасибо сказали:

shurutov
Сообщения: 11
ОС: Gentoo Linux

Re: Установка программ из исходников

Сообщение shurutov » 27.03.2007 13:45

Juliette писал(а):
27.03.2007 11:26
shurutov писал(а):
27.03.2007 11:15
Но вот есть такая небольшая программулька - empty называется - мне проще оказалось к ней ебилд наваять, нежели рыться, что и куда прописать при ручной установке ;)

Ну так вышеуказанный ebuild - в студию, с коротеньким описанием функции программы. :give_rose: Это как раз вполне относится к устанавливанию прог руками.

Пожалуйста:

Код: Выделить всё

# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

# на самом деле это типа прагма такая: подключать дополнительные
# родительские зависимости, ну и все такое :)
inherit eutils

# Описание программы
DESCRIPTION="run applications under pseudo-terminal (PTY) sessions"
# домашняя страница
HOMEPAGE="http://empty.sourceforge.net/"
# вот так задается адрес софта, который на sf.net обретается
# есть еще хитрости, например, коммерческие пакеты - их надо ручками
# вытащить и положить в дистфилесы. Синтаксис не помню, т.к. не
# занимался такими пакетами.
SRC_URI="mirror://sourceforge/empty/${P}.tgz"

# Лицензия
LICENSE="GPL-2"
# наличие слотов
SLOT="0"
# архитектуры
KEYWORDS="~x86"
# USE-флаги
IUSE=""

# Зависимости
# времени компиляции
DEPEND=""
# времени выполнения
RDEPEND=""

# функция из комплекта - распаковка, накладывание специфических и прочих патчей
src_unpack() {
  unpack ${A} || die "Unpack failed"
  epatch ${FILESDIR}/${P}.patch || die "Patch failed"
}

# инсталляция во временный каталог. Если есть какие-то нюансы
src_install() {
  emake DESTDIR="${D}" install || die "Source install failed"
}

Ебилд простенький, осталось только переменные описать:
P - наименование пакета и версия;
PN - наименование пакета;
A - все;
CATEGORY - категория, в данном случае - net-misc, ибо сетевая приблуда;
FILESDIR - ${PORTDIR}/${CATEGORY}/${PN}/files
D - временный каталог инсталляции, по умолчанию: ${PORTAGE_TMPDIR}/portage/${PF}/image"
Дома у меня к фидошному софту (binkd+husky+msged) ебилды валяются. :) Там ичьшо завсимости есть, а если руки до более новых дойдут, то там зависимости будут от версий :)
Спасибо сказали:

ujinv
Сообщения: 14
ОС: Fedora Linux 9

Re: Установка программ из исходников

Сообщение ujinv » 23.09.2008 17:54

SCons (Software Constructor) - сборщик программ следующего поколения позволяющий не только компилировать программы из исходников, но и поддерживать их (программ) обновление при изменении исходников.
Отличительной чертой SCons является наличие конфигурационных файлов, написанных на языке программирования Python. Что упрощает настройку параметров сборки по сравнению с другими сборщиками.
Удивительно, но использование питона для написания конфигурационных файлов SCons легче осваивается не-программистами, чем языки на которых написаны конфигурационные файлы других сборщиков, которые пишутся программистами для программистов.

Установка.
1. Дистрибутивы, основанные на RPM (RedHat, Fedora, CentOS, SuSe, Mandrake и иже с ними):
www.rpmfind.net :rolleyes:
Но совести ради стоит сказать, что на Fedora 7 и выше достаточно:

Код: Выделить всё

# yum install scons

2. Дистрибутивы, основанные на DEB (Debian, Ubuntu, etc):

Код: Выделить всё

 # apt-get install scons


Для работы SCons необходим Python версии не менее 1.5.2. На питоне написаны все параметры сборки в файле SConstruct. На этом вобщем-то всё) Теперь заходим в папку с исходниками и файлом SConstruct и пишем:

Дождитесь сообщений об ошибках - внимательно прочитайте их и установите недостающие зависимости с помощью apt-get/yum/или-что-вы-там-используете. Затем запустите сборку снова. И так до победного конца!.

Если вам повезло и вы не такой как все (с), а именно являетесь счастливым обладателем многоядерного процессора, то вам доступна фукция -jX, где X - количество ядер процессора. С этим суффиксом компиляция будет производиться параллельно на нескольких ядрах.

Код: Выделить всё

# scons -j2
- для 2-х ядерных процессоров.

На данном этапе SCons не поддерживает создание .rpm пакетов.
По созданию .deb пакетов используя SCons читайте здесь.

Оптимизация.
И последнее, но не в последнюю очередь: обязательно используйте главное преимущество распространения программ в исходных кодах - SCons'труируйте программы оптимизированные под ваш процессор и систему вцелом!
Для этого в начало SConstruct добавьте следующий код:

Код: Выделить всё

env = Environment(CCFLAGS = '-O2 -march=i686')
,
где -O2 - степень оптимизации (затрудняет отладку); -march=i686 - архитектура процессора, под который производится оптимизация, возможные варианты(неполный список): i386, i486, i586, i686, pentium, pentium-mmx, pentiumpro, pentium2, pentium3, pentium-m, pentium4, prescott, k6, k6-2, k6-3, k8, athlon, athlon-tbird, athlon-4, athlon-xp, athlon-mp, athlon64, opteron, winchip-c6, winchip2, c3.
Подробнее о параметрах оптимизации при компиляции программ вы можете прочитать здесь.

Итоги.
При работе за домашним компьютером всегда хорошо иметь под рукой последние версии программ. В современном OpenSource сообществе популярные продукты могут меняться по нескольку раз в день. То есть их исходный код, доступный в интернете находится в постоянном развитии. Добавляются новые функции, убираются баги, добавляются баги ;) .
Чтобы быть всегда в курсе событий совсем не обязательно дожидаться официальных сборок, выходящих как правило нечасто, гораздо веселее пользоваться автоматизированными сборками. Такую автоматику можно запросто организовать и на домашнем компьютере. Для этого нам понадобится совсем небольшой набор программ, а именно:
  • cron - входит в состав всех распространенных дистрибутивов GNU/Linux;
  • svn - Sub Version - эта программа обновляет исходный код, скачивая из интернета только diff'ы - изменения в исходном коде (всегда к вашим услугам на этом сайте;
  • SCons - с ним, я надеюсь, теперь кое-что прояснилось;
  • patch - я не знаю что это :-)

Как это работает?
Сначала сделаем резервную копию исправленного под наши нужды файла SConstruct:

Код: Выделить всё

$ cp SConstruct SConstruct.backup
- зачем будет понятно дальше.
В папке /etc/cron.daily/ создаем файл

Код: Выделить всё

# touch update-my-program
и делаем его исполняемым

Код: Выделить всё

# chmod +x update-my-program
.
В этом файле пишем следующее:
#переходим в папку, в которой находятся исходники программы
cd /home/not_root_user/sources/myprogram
#Обновляем исходный код из репозитория программы.
#Поищите на оф. сайте вашей программы правильный адрес svn репозитория
svn checkout http://svn.myprogramsite.org/repos/svn/trunk/
#Применяете патчи если нужно
patch -p0 < super-patch.txt
#для удаления патча используйте patch -p0 -R < super-patch.txt
#SConstruct мог обновиться вместе со всем кодом, так что скопируем заранее сделанную нами рез. копию
rm SConstruct
cp SConstruct.backup SConstruct

#Собственно запускаем компиляцию
scons
#Если в crontab вы не лазили своими шаловливыми ручками, то в 3 часа ночи запустится этот скрипт и перекомпилирует вам вашу программу. А с утречка вы с новыми силами сядете за компьютер и обнаружите, что программа ваша глючит пуще прежнего! Так что будьте осторожны и держите рабочие резервные копии в труднодоступных местах ;)

#Далее можно сменить собственность папки myprogram или заранее устанавливать этот скрипт через команду crontab с правами пользователя, но это уже совсем другая история
chown not_root_user:not_root_user -R /home/not_root_user/sources/myprogram
Итого получаем файл update-my-program:

Код: Выделить всё

cd /home/not_root_user/sources/myprogram
svn checkout http://svn.myprogramsite.org/repos/svn/trunk/
patch -p0 < super-patch.txt
rm SConstruct
cp SConstruct.backup SConstruct
scons
chown not_root_user:not_root_user -R /home/not_root_user/sources/myprogram


Вот кажется и всё. Надеялся попасть в этот топик: Установка программ из исходников.
Спасибо сказали:

Аватара пользователя
romuil
Сообщения: 2095
Статус: Ромунцель
ОС: ALTLinux Sisyphus

Re: Установка программ из исходников

Сообщение romuil » 24.09.2008 09:26

Все правильно, одно замечание: сборку надо рассматривать в составе штатных средств сборки пакета вашего дистрибутива - иначе это будет помойка.
Спасибо сказали: