2015-04-07 4 views
6

Я придумал централизованный сервер регистрации на linux. На этом этапе я пытаюсь консолидироваться, чтобы упростить загрузку на другую машину. Я хочу иметь один RPM, который будет устанавливать несколько программ одним выстрелом. Я работаю на сервере CentOS 7. программы, которые я ищу, чтобы упаковать в оборотах в минуту будет:несколько файлов tar (исходных файлов) в файле rpm.spec

eventlog 2.12 
libdbi 0.9.0 
freetds 0.91 
libdbi-drivers 0.9.0 
json-c 
syslog-ng 3.5.6 

Я делал совсем немного чтения в оборотах, просто имея трудно понять, как получить несколько источников в один RPM. Причина, по которой я являюсь источником установки этих, а не только yum, устанавливая их, - это из-за настроек, которые мне нужно вызвать в «./configure --enable-example». Поэтому у меня есть источник, который установил все эти программы на моем компьютере, а затем я tar'ed их резервного копирования и пытается использовать этот файл в качестве источника. Любые идеи или любой, кто мог бы указать мне в правильном направлении, были бы весьма признательны.

ответ

9

Вы можете перечислить столько строк Source, сколько вам нужно, и иметь столько вызовов %setup в вашем файле spec, сколько вам нужно.

Из Using %setup in a Multi-source Spec File секции в онлайн-Maximum RPM забронировании мы находим:

Для целей этого примера, наш файл спецификации будет иметь следующие три источника тегов: [1]

source: source-zero.tar.gz 
source1: source-one.tar.gz 
source2: source-two.tar.gz 

Для распаковки первого источника не сложно; Все, что требуется, чтобы использовать настройки% без каких-либо опций:

%setup 

Это приводит следующий набор команд:

cd /usr/src/redhat/BUILD 
rm -rf cdplayer-1.0 
gzip -dc /usr/src/redhat/SOURCES/source-zero.tar.gz | tar -xvvf - 
if [ $? -ne 0 ]; then 
    exit $? 
fi 
cd cdplayer-1.0 
cd /usr/src/redhat/BUILD/cdplayer-1.0 
chown -R root.root . 
chmod -R a+rX,g-w,o-w . 

....

Теперь давайте добавим второй исходный файл. Здесь интереснее. Во-первых, нам нужно определить, какой исходный тег (и, следовательно, какой исходный файл) мы говорим. Поэтому нам нужно использовать опцию -a или -b, в зависимости от характеристик исходного архива. Для этого примера предположим, что -a - это тот вариант, который мы хотим. Добавление этой опции, плюс «1», чтобы указать исходный файл, указанный в теге source1, мы имеем:

%setup -a 1 

Так как мы уже видели, что с помощью -a или -b результатов варианта в двух экземплярах распаковки , нам нужно отключить по умолчанию распаковка, добавив -T опции:

%setup -T -a 1 

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

%setup 
%setup -T -D -a 1 

Это приведет к следующим командам:

cd /usr/src/redhat/BUILD 
rm -rf cdplayer-1.0 
gzip -dc /usr/src/redhat/SOURCES/source-zero.tar.gz | tar -xvvf - 
if [ $? -ne 0 ]; then 
    exit $? 
fi 
cd cdplayer-1.0 
cd /usr/src/redhat/BUILD/cdplayer-1.0 
chown -R root.root . 
chmod -R a+rX,g-w,o-w . 
cd /usr/src/redhat/BUILD 
cd cdplayer-1.0 
gzip -dc /usr/src/redhat/SOURCES/source-one.tar.gz | tar -xvvf - 
if [ $? -ne 0 ]; then 
    exit $? 
fi 
cd /usr/src/redhat/BUILD/cdplayer-1.0 
chown -R root.root . 
chmod -R a+rX,g-w,o-w . 

До сих пор, так хорошо. Давайте укажем последний исходный файл, но с этим, мы скажем, что его нужно распаковать в подкаталоге cdplayer-1.0, называемой базой данных. Можем ли мы использовать% setup в этом случае?

Мы могли бы, если source-two.tgz создал подкаталог базы данных. Если нет, тогда это необходимо будет сделать вручную. Для целей нашего примера предположим, что source-two.tgz не был создан для включения подкаталога базы данных, поэтому мы должны будем сделать это сами. Вот наш% скрипт приготовительный Сейчас:

%setup 
%setup -T -D -a 1 
mkdir database 
cd database 
gzip -dc /usr/src/redhat/SOURCES/source-two.tar.gz | tar -xvvf - 

Вот результирующий скрипт:

cd /usr/src/redhat/BUILD 
rm -rf cdplayer-1.0 
gzip -dc /usr/src/redhat/SOURCES/source-zero.tar.gz | tar -xvvf - 
if [ $? -ne 0 ]; then 
    exit $? 
fi 
cd cdplayer-1.0 
cd /usr/src/redhat/BUILD/cdplayer-1.0 
chown -R root.root . 
chmod -R a+rX,g-w,o-w . 
cd /usr/src/redhat/BUILD 
cd cdplayer-1.0 
gzip -dc /usr/src/redhat/SOURCES/source-one.tar.gz | tar -xvvf - 
if [ $? -ne 0 ]; then 
    exit $? 
fi 
mkdir database 
cd database 
gzip -dc /usr/src/redhat/SOURCES/source-two.tar.gz | tar -xvvf - 

три команды, которые мы добавили распаковывать последний набор источников были добавлены к концу сценария% преп.

Смежные вопросы