Tối thiểu tôi phải làm để tạo một tệp RPM là gì?


148

Tôi chỉ muốn tạo một tệp RPM để phân phối "foobar" nhị phân Linux của mình, chỉ với một vài phụ thuộc. Nó có một tệp cấu hình, /etc/foobar.conf và nên được cài đặt trong / usr / bin / foobar.

Thật không may, tài liệu về RPM dài 27 chương và tôi thực sự không có thời gian để đọc và đọc nó, bởi vì tôi cũng bận rộn với việc cài đặt .deb và EXE cho các nền tảng khác.

Mức tối thiểu tuyệt đối tôi phải làm để tạo RPM là bao nhiêu? Giả sử nhị phân foobar và foobar.conf nằm trong thư mục làm việc hiện tại.


1
" Cách tạo gói RPM " là cách viết tốt trên RPM (tài liệu Fedora)
webwesen

6
Gọi nó là 'viết lên' là một cách nói chưa đúng
kernelK

Câu trả lời:


177

Tôi thường làm vòng / phút nhị phân trên mỗi ứng dụng độc quyền đóng gói - cũng nhiều nhất là websphere - trên linux. Vì vậy, kinh nghiệm của tôi cũng có thể hữu ích với bạn, bên cạnh đó tốt hơn là thực hiện RPM TRUE nếu bạn có thể. Nhưng tôi lạc đề.

Vì vậy, bước cơ bản để đóng gói chương trình (nhị phân) của bạn là như sau - trong đó tôi cho rằng chương trình là toybinprog với phiên bản 1.0, có một conf được cài đặt trong /etc/toybinprog/toybinprog.conf và có một thùng được cài đặt trong / usr / bin được gọi là tobinprog:

1. tạo env xây dựng vòng / phút của bạn cho RPM <4.6,4.7

mkdir -p ~/rpmbuild/{RPMS,SRPMS,BUILD,SOURCES,SPECS,tmp}

cat <<EOF >~/.rpmmacros
%_topdir   %(echo $HOME)/rpmbuild
%_tmppath  %{_topdir}/tmp
EOF

cd ~/rpmbuild

2. tạo tarball của dự án của bạn

mkdir toybinprog-1.0
mkdir -p toybinprog-1.0/usr/bin
mkdir -p toybinprog-1.0/etc/toybinprog
install -m 755 toybinprog toybinprog-1.0/usr/bin
install -m 644 toybinprog.conf toybinprog-1.0/etc/toybinprog/

tar -zcvf toybinprog-1.0.tar.gz toybinprog-1.0/

3. Sao chép vào thư mục nguồn

cp toybinprog-1.0.tar.gz SOURCES/

cat <<EOF > SPECS/toybinprog.spec
# Don't try fancy stuff like debuginfo, which is useless on binary-only
# packages. Don't strip binary too
# Be sure buildpolicy set to do nothing
%define        __spec_install_post %{nil}
%define          debug_package %{nil}
%define        __os_install_post %{_dbpath}/brp-compress

Summary: A very simple toy bin rpm package
Name: toybinprog
Version: 1.0
Release: 1
License: GPL+
Group: Development/Tools
SOURCE0 : %{name}-%{version}.tar.gz
URL: http://toybinprog.company.com/

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root

%description
%{summary}

%prep
%setup -q

%build
# Empty section.

%install
rm -rf %{buildroot}
mkdir -p  %{buildroot}

# in builddir
cp -a * %{buildroot}


%clean
rm -rf %{buildroot}


%files
%defattr(-,root,root,-)
%config(noreplace) %{_sysconfdir}/%{name}/%{name}.conf
%{_bindir}/*

%changelog
* Thu Apr 24 2009  Elia Pinto <devzero2000@rpm5.org> 1.0-1
- First Build

EOF

4. xây dựng nguồn và vòng / phút nhị phân

rpmbuild -ba SPECS/toybinprog.spec

Và đó là tất cả.

Hy vọng điều này giúp đỡ


6
Chỉ trong trường hợp bạn gặp phải "rpmbuild: lệnh không tìm thấy", hãy xem wiki.centos.org/HowTos/setupRpmBuildEn Môi trường . Nhưng hướng dẫn này là một khởi đầu tốt cho tôi trong việc học các hoạt động bên trong của vòng / phút
icasimpan

4
Trong ví dụ của bạn, cái gì đặt _bindir? Tôi đang cố gắng làm theo giải pháp của bạn, nhưng tôi muốn đặt nhị phân của mình vào / opt. Tôi đã tạo tập tin targz theo đó. Và rpmbuild không thành công trên "tập tin không tìm thấy" trong buildroot / usr / bin.
Hôn Viktoria

sudo dnf install rpm-build- Lệnh Fedora 23 để cài đặt rpmbuild v4.13 +
Ray Foss

1
@ devzero2000 Ý của TRUE RPM là gì?
RubenLaguna

@ devzero2000 thư mục rpmbuild nên ở thư mục / root hoặc tôi có thể đặt nó ở nơi nào khác không?
Diogo Calazans

20

Là một nhà phân phối ứng dụng, fpm âm thanh hoàn hảo cho nhu cầu của bạn . Có một ví dụ ở đây chỉ ra cách đóng gói một ứng dụng từ nguồn. FPM có thể tạo cả tệp deb và tệp RPM.


2
FPM là một công cụ tuyệt vời.
Takashi

Chúng tôi sử dụng công cụ này tất cả các thời gian tại nơi làm việc. Cho đến nay các công cụ thiết thực nhất để phù hợp với nhu cầu.
djhaskin987

2
FPM có nguyên tắc cơ bản tốt nhất mà người ta có thể có trong phần mềm: nếu không giúp được thì có lỗi. Đó là loại cam kết tôi trân trọng.
ribamar

16

Để xây dựng RPM nhanh chóng, hãy xem Togo:

https://github.com/genereese/togo-rpm

Dự án có hướng dẫn bắt đầu nhanh và tôi đã có thể tạo RPM cơ bản trong vòng chưa đầy 3 phút.

Ví dụ sử dụng dữ liệu được cung cấp trong câu hỏi ban đầu:

1) Tạo thư mục dự án bằng cách sử dụng tập lệnh:

$ togo project create foobar; cd foobar

2) Tạo cấu trúc thư mục mong muốn của bạn trong ./root và sao chép các tệp của bạn vào đó:

$ mkdir -p root/etc; cp /path/to/foobar.conf root/etc/
$ mkdir -p root/usr/bin; cp /path/to/foobar root/usr/bin/

3) Loại trừ các thư mục thuộc sở hữu hệ thống khỏi quyền sở hữu RPM của bạn:

$ togo file exclude root/etc root/usr/bin

4) (TÙY CHỌN) Sửa đổi thông số kỹ thuật được tạo để thay đổi mô tả / phụ thuộc / phiên bản / gói của bạn, v.v .:

$ vi spec/header

5) Xây dựng RPM:

$ togo build package

-Và RPM của bạn được nhổ vào thư mục ./rpms.


Cập nhật ví dụ để phù hợp với kịch bản được cung cấp trong câu hỏi ban đầu.
Dadealeus

15

Tương tự, tôi cần tạo một vòng / phút chỉ với một vài tệp. Vì các tệp này được kiểm soát nguồn và vì nó có vẻ ngớ ngẩn, tôi không muốn lướt qua chúng chỉ để có vòng quay cho chúng. Tôi đã đưa ra những điều sau đây:

  1. Thiết lập môi trường của bạn:

    mkdir -p ~/rpm/{BUILD,RPMS}

    echo '%_topdir %(echo "$HOME")/rpm' > ~/.rpmmacros

  2. Tạo tệp spec của bạn, foobar.spec, với các nội dung sau:

    Summary: Foo to the Bar
    Name: foobar
    Version: 0.1
    Release: 1
    Group: Foo/Bar
    License: FooBarPL
    Source: %{expand:%%(pwd)}
    BuildRoot: %{_topdir}/BUILD/%{name}-%{version}-%{release}
    
    %description
    %{summary}
    
    %prep
    rm -rf $RPM_BUILD_ROOT
    mkdir -p $RPM_BUILD_ROOT/usr/bin
    mkdir -p $RPM_BUILD_ROOT/etc
    cd $RPM_BUILD_ROOT
    cp %{SOURCEURL0}/foobar ./usr/bin/
    cp %{SOURCEURL0}/foobar.conf ./etc/
    
    %clean
    rm -r -f "$RPM_BUILD_ROOT"
    
    %files
    %defattr(644,root,root)
    %config(noreplace) %{_sysconfdir}/foobar.conf
    %defattr(755,root,root)
    %{_bindir}/foobar
    
  3. Xây dựng vòng quay của bạn: rpmbuild -bb foobar.spec

Có một chút tin tặc ở đó chỉ định 'nguồn' là thư mục hiện tại của bạn, nhưng nó có vẻ thanh lịch hơn nhiều so với giải pháp thay thế, trong trường hợp của tôi, viết một tập lệnh riêng để tạo tarball, v.v.

Lưu ý: Trong tình huống cụ thể của tôi, các tệp của tôi được sắp xếp trong các thư mục theo nơi cần đến, như thế này:

./etc/foobar.conf
./usr/bin/foobar

và vì vậy phần chuẩn bị đã trở thành:

%prep
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT
cd $RPM_BUILD_ROOT
tar -cC %{SOURCEURL0} --exclude 'foobar.spec' -f - ./ | tar xf -

Mà sạch sẽ hơn một chút.

Ngoài ra, tôi tình cờ có mặt trên một chiếc RHEL5.6 với các phiên bản vòng / phút 4.4.2.3, vì vậy số dặm của bạn có thể thay đổi.


Tôi đã phải chuyển tất cả $RPM_BUILD_ROOTđể làm %{buildroot}cho nó hoạt động trên "Red Hat Enterprise Linux Server phiên bản 6,9" của tôi. Ngoài ra, hai tập tin đã được cài đặt phải nằm trong thư mục hiện tại khi tôi chạy rpmbuild. Tôi đã cài đặt nó trên máy khác của mình với: sudo rpm -Uvh --nodeps foobar-0.1a-1.x86_64.rpm
user1683793

4

Nếu make confighoạt động cho chương trình của bạn hoặc bạn có tập lệnh shell sao chép hai tệp của bạn đến nơi thích hợp, bạn có thể sử dụng checkinstall . Chỉ cần vào thư mục chứa tệp Makefile của bạn và gọi nó với tham số -R(cho RPM ) và tùy chọn với tập lệnh cài đặt.


4

Cách dễ dàng để xây dựng gói vòng / phút từ nhị phân (các bước này đã được thử nghiệm với Fedora 18):

1) Trước tiên, bạn phải cài đặt rpmdevtools, vì vậy hãy chạy các lệnh này (chú ý: chạy như người dùng bình thường)

$ sudo yum install rpmdevtools rpmlint
$ rpmdev-setuptree

2) Trong thư mục ~ / rpmbuild / SPECS tạo tệp mới: pack_name.spec

3) Mở nó bằng một trình soạn thảo (như gedit) và viết cái này:

Name:           package_name
Version:        1.0
Release:        1
Summary:        Short description (first char has to be uppercase)

License:        GPL
URL:            www. your_website/

BuildRequires:  package_required >= (or ==, or <=) 1.0.3 (for example)

%description
Description with almost 79 characters (first char has to be uppercase)

#This is a comment (just as example)

%files
/usr/bin/binary_file.bin
/usr/share/applications/package_name.desktop
/usr/share/pixmaps/package_name.png

%changelog
* date Packager's Name <packager's_email> version-revision
- Summary of changes

#For more details see: docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/Packagers_Guide/sect-Packagers_Guide-Creating_a_Basic_Spec_File.html

4) Tạo ~ / rpmbuild / BUILDROOT / pack_name-version-release.i386 và tái tạo các đường dẫn nơi các tệp sẽ được đặt Vì vậy, trong trường hợp này, ví dụ: tạo:

  • ~ / rpmbuild / BUILDROOT / pack_name-version-release.i386 / usr / bin /
  • ~ / rpmbuild / BUILDROOT / pack_name-version-release.i386 / usr / share / application /
  • ~ / rpmbuild / BUILDROOT / pack_name-version-release.i386 / usr / share / pixmaps /

5) Đặt trong các thư mục này các tệp mà bạn muốn chèn vào gói:

  • ~ / rpmbuild / BUILDROOT / pack_name-version-release.i386 / usr / bin / binary_file.bin
  • ~ / rpmbuild / BUILDROOT / pack_name-version-release.i386 / usr / share / application / pack_name.desktop
  • ~ / rpmbuild / BUILDROOT / pack_name-version-release.i386 / usr / share / pixmaps / pack_name.png

usr / share / pixmaps / pack_name.png là biểu tượng của nhị phân usr / share / ứng dụng / pack_name.desktop là các quy tắc để chèn chương trình vào các mục trong menu

6) pack_name.desktop phải như thế này:

[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=example
GenericName=Short description
Comment=Comment of the application
Exec=package_name
Icon=package_name
Terminal=false
Categories=System;

Các danh mục này là: tests.freedesktop.org/menu-spec/latest/apa.html

7) Chạy $ rpmbuild -bb ~/rpmbuild/SPECS/package_name.spec

8) Gói của bạn đã được tích hợp vào thư mục ~ / rpmbuild / RPMS

Nếu bạn cài đặt gói này, nó sẽ cài đặt:

  • /usr/bin/binary_file.bin
  • /usr/share/appluggest/package_name.desktop
  • /usr/share/pixmaps/package_name.png

Cảm ơn: losurs.org/docs/tips/redhat/binary-rpms

Để biết thêm chi tiết để xây dựng vòng / phút, hãy xem liên kết này .

Phần mềm GUI java để xây dựng vòng / phút: https://sourceforge.net/projects/javarpmbuilder/


-1

Nếu bạn đã quen thuộc với Maven thì cũng rpm-maven-pluginđơn giản hóa việc tạo RPM: bạn phải viết chỉ pom.xmlsau đó sẽ được sử dụng để xây dựng RPM. Môi trường xây dựng RPM được tạo ra hoàn toàn bởi plugin.


-3

Quá trình tạo RPM từ tệp nguồn:

  1. tải tập tin nguồn với phần mở rộng.
  2. cài đặt rpm-build và rpmdevtools từ cài đặt yum. (thư mục rpmbuild sẽ được tạo ... Các thư mục ĐẶC BIỆT, NGUỒN, RPMS .. sẽ được tạo trong thư mục rpmbuild).
  3. sao chép mã nguồn.gz vào thư mục SOURCES. (rpmbuild / SOURCES)
  4. Tháo bóng tar bằng cách sử dụng lệnh sau. đi tới thư mục SOURCES: rpmbuild / SOURCES nơi có tệp tar. lệnh: ví dụ: tar -xvzf httpd-2.22.tar.gz httpd-2.22 thư mục sẽ được tạo trong cùng một đường dẫn.
  5. đi tới thư mục được giải nén và sau đó gõ lệnh dưới đây: ./configure --prefix = / usr / local / apache2 --with-gộp-apr --enable-proxy --enable-proxy-balancer --with-mpm = worker - -enable-mods-static = all (.có thể thay đổi tùy theo nguồn mà RPM phải xây dựng-- tôi đã thực hiện cho HTTPD apache cần gói phụ thuộc apr và apr-produc).
  6. chạy bên dưới lệnh sau khi cấu hình thành công: make
  7. Sau khi thực hiện thành công od make lệnh run: checkinstall trong cùng một thư mục. . Đồng thời kiểm tra gói loại trừ: EXCLUDE = "/ selinux"
  8. checkinstall sẽ yêu cầu tùy chọn (gõ R nếu bạn muốn tp build rpm cho tệp nguồn)
  9. Tập tin .rpm đã hoàn thành sẽ được xây dựng trong thư mục RPMS bên trong tập tin rpmbuild / RPMS ... TẤT CẢ TỐT NHẤT ....

-4

RPM thường được xây dựng từ nguồn, không phải nhị phân.

Bạn cần viết tệp spec bao gồm cách cấu hình và biên dịch ứng dụng của bạn; Ngoài ra, những tập tin để bao gồm trong RPM của bạn.

Nhìn lướt qua hướng dẫn sử dụng cho thấy hầu hết những gì bạn cần được trình bày trong Chương 8 - cũng như hầu hết các bản phân phối dựa trên RPM đều có sẵn nguồn, có hàng trăm ví dụ về các cách tiếp cận khác nhau mà bạn có thể xem xét.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.