2015-04-07 16 views
6

Tôi đã đưa ra một máy chủ ghi nhật ký tập trung trên Linux. Tại thời điểm này tôi đang cố gắng củng cố để làm cho mọi thứ dễ dàng hơn một chút để tải lên một máy khác. Tôi muốn có một RPM sẽ cài đặt nhiều chương trình trong một lần chụp. Tôi đang làm việc trên một máy chủ CentOS 7. các chương trình mà tôi đang tìm cách đóng gói thành một vòng/phút sẽ là:nhiều tệp tar (tệp nguồn) trong tệp rpm.spec

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

Tôi đã đọc khá nhiều về RPM, khó có thể hiểu được cách lấy nhiều nguồn vào một RPM. Lý do tôi cài đặt nguồn và không chỉ cài đặt chúng là vì cấu hình tôi cần gọi trong "./configure --enable-example". Vì vậy, tôi có nguồn cài đặt tất cả các chương trình trên máy tính của tôi và sau đó tôi tar'ed họ sao lưu và cố gắng sử dụng tập tin đó như là một nguồn. Bất kỳ ý tưởng hoặc bất cứ ai có thể chỉ cho tôi đi đúng hướng sẽ được đánh giá cao.

Trả lời

9

Bạn có thể liệt kê nhiều dòng Source khi cần và có nhiều cuộc gọi macro %setup trong tệp thông số của mình khi cần.

Từ phần Using %setup in a Multi-source Spec File của trong cuốn sách RPM tối đa trực tuyến, chúng tôi tìm thấy:

Theo mục đích của ví dụ này, file spec của chúng tôi sẽ có ba thẻ nguồn sau: [1]

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

Để giải nén nguồn đầu tiên không khó; tất cả những gì cần thiết là sử dụng thiết lập% không có tùy chọn:

%setup 

này tạo ra các thiết lập sau các lệnh:

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 . 

....

Bây giờ chúng ta hãy thêm các tập tin nguồn thứ hai. Mọi thứ trở nên thú vị hơn ở đây. Đầu tiên, chúng ta cần phải xác định thẻ nguồn nào (và do đó, tệp nguồn nào) mà chúng ta đang nói đến. Vì vậy, chúng ta cần sử dụng tùy chọn -a hoặc -b, tùy thuộc vào đặc tính của kho lưu trữ nguồn. Trong ví dụ này, giả sử rằng -a là tùy chọn chúng ta muốn. Thêm tùy chọn đó, cộng với một "1" để trỏ đến file nguồn định trong thẻ source1, ta có:

%setup -a 1 

Vì chúng ta đã thấy rằng việc sử dụng các -a hoặc kết quả lựa chọn -b thành hai bản giải nén , chúng tôi cần phải tắt tính năng giải nén mặc định bằng cách thêm tùy chọn -T:

%setup -T -a 1 

Tiếp theo, chúng tôi cần đảm bảo rằng thư mục cấp cao nhất không bị xóa. Nếu không, tệp nguồn đầu tiên mà chúng tôi vừa giải nén sẽ biến mất. Điều đó có nghĩa là chúng ta cần phải bao gồm tùy chọn -D để ngăn chặn điều đó xảy ra. Thêm tùy chọn cuối cùng này, và bao gồm cả vĩ mô đã hoàn tất trong kịch bản% chuẩn bị của chúng tôi, bây giờ chúng ta có:

%setup 
%setup -T -D -a 1 

này sẽ dẫn đến các lệnh sau:

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 . 

Cho đến nay, như vậy tốt. Hãy bao gồm tệp nguồn cuối cùng, nhưng với tệp này, chúng ta sẽ nói rằng nó cần phải được giải nén trong thư mục con của cơ sở dữ liệu cdplayer-1.0 được gọi là. Chúng ta có thể sử dụng% setup trong trường hợp này không?

Có thể, nếu source-two.tgz đã tạo thư mục con cơ sở dữ liệu. Nếu không, sau đó nó sẽ là cần thiết để làm điều đó bằng tay. Với mục đích ví dụ của chúng ta, giả sử rằng source-two.tgz không được tạo ra để bao gồm thư mục con cơ sở dữ liệu, vì vậy chúng ta sẽ phải tự làm điều đó. Dưới đây là% chuẩn bị kịch bản của chúng tôi bây giờ là:

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

Dưới đây là kịch bản kết quả:

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 - 

Ba lệnh chúng ta thêm vào giải nén tập cuối cùng của các nguồn đã được thêm vào phần cuối của kịch bản% prep.

Các vấn đề liên quan