Làm cách nào để xây dựng gói RPM từ các tệp đã cài đặt?


8

Có hai máy, phiên bản / vòm SLES giống hệt nhau.

Trên máy #A có phần mềm "foo" được cài đặt mà chúng ta có thể thấy bằng cách sử dụng rpm -qa.

Trên máy #B, phần mềm "foo" cần được cài đặt.

Các foo.rpmkhông có sẵn từ bất cứ nguồn nào, từ internet, vv

Câu hỏi

Vì gói foo.rpmđã được cài đặt trên máy #A, chúng tôi có thể tạo foo.rpmtệp trên đó từ các tệp đã được cài đặt không?

Có những kịch bản trước / sau trong vòng / phút, tôi nghĩ vậy. Vì vậy, sau đó foo.rpm( với phụ thuộc? ) Có thể được cài đặt.


Bạn gần như có thể tìm thấy tất cả các gói vòng / phút từ đây. rpmfind.net/linux/RPM
Ramesh

Câu trả lời:


11

Có thể nhưng rất khó để làm điều này để nó được thực hiện chính xác. Nếu bạn tuyệt vọng, bạn có thể tạo .spectệp RPM mới và tạo tệp RPM nguồn "giả" (SRPM) mà sau đó bạn có thể sử dụng để tạo tệp RPM kết quả bằng cách sử dụng rpmbuild --rebuild.

Tôi sẽ tiếp tục tìm kiếm RPM thực tế thay thế. Bạn không nói rõ câu hỏi của bạn nhưng đó là kinh nghiệm của tôi rằng bạn có thể tìm thấy bất cứ điều gì trên internet nếu bạn biết cách tìm kiếm nó. Tôi đã tìm thấy các phiên bản RPM cổ xưa cho các bản phát hành Red Hat đã không được sử dụng trong hơn 10 năm, vì vậy tôi cảm thấy khó tin rằng không có phần còn lại của RPM này ở bất cứ đâu.

Ngoài ra, bạn có thể thường xuyên quay lại nguồn của ứng dụng có trong RPM và sử dụng nó để tái cấu trúc RPM. Thông thường, các ứng dụng nguồn sẽ bao gồm một .spectệp cần thiết được sử dụng để xây dựng lại RPM.

Cuối cùng, bạn có thể lấy nguồn và .spectệp từ một dịch vụ xây dựng, chẳng hạn như các bản phân phối dựa trên Koji cho Red Hat. SuSE cũng duy trì các dịch vụ xây dựng tương tự để bạn có thể tìm kiếm thông qua các dịch vụ xây dựng cũ này.

Lấy nhị phân như là

Bạn có thể sử dụng phương pháp này để nâng các tệp thực thi thực tế từ một hệ thống và đưa chúng lên để triển khai trên một hệ thống khác.

máy A

$ rpm -ql <packageNameHere> | xargs tar -zcvf /tmp/program.tgz

máy B

$ tar -zxvf /path/to/your/program.tgz

Phiên bản RPM của SLES

Theo một trong những bài viết trong chủ đề này: Re: Cách tạo các gói cài đặt RPM fron rpm trên SLES được dự định để có công tắc --repackage. Điều này không tồn tại trên phiên bản Red Hat (trong Fedora hoặc CentOS). Nhưng theo bài đăng bạn có thể sử dụng nó như vậy:

$ rpm -e --repackage <somepackage>

Sau khi hoàn thành, bạn sẽ thấy RPM của mình có thể truy cập tại đây:

/var/spool/repackage

Sử dụng rpmerizor

Rpmerizor là một công cụ / tập lệnh của bên thứ 3 mà bạn có thể cài đặt sẽ đóng gói lại các tệp nguồn thành một RPM tương ứng. Việc sử dụng tập lệnh này có thể truy cập ở đây, có tiêu đề: trang người đàn ông của rpmerizor .

đoạn trích

Rpmerizor là một tập lệnh cho phép bạn tạo gói RPM từ các tệp đã cài đặt. Bạn chỉ cần xác định các tệp trên dòng lệnh và trả lời một số câu hỏi tương tác để điền vào siêu dữ liệu vòng / phút (tên gói, phiên bản ...). Bạn cũng có thể sử dụng nó trong chế độ hàng loạt với các tùy chọn dòng lệnh cho siêu dữ liệu.

Sử dụng rpmrebuild

Đừng nhầm lẫn với công cụ xây dựng rpmbuild, rpmrebuildlà một tập lệnh bên thứ 3 khác mà bạn có thể sử dụng để thực hiện đóng gói lại RPM đã được cài đặt.

đoạn trích

rpmrebuild là một công cụ để xây dựng tệp RPM từ gói đã được cài đặt trong sử dụng cơ bản, sử dụng rpmrebuild không yêu cầu bất kỳ kiến ​​thức xây dựng vòng / phút nào. (Trên debian, sản phẩm tương đương là dpkg-repack).

Thí dụ

Nói rằng chúng tôi muốn đóng gói lại openssh-server.

$ rpm -aq | grep openssh-server
openssh-server-6.2p2-8.fc19.x86_64

Bây giờ gói nó:

$ rpmrebuild openssh-server-6.2p2-8.fc19.x86_64
/usr/lib/rpmrebuild/rpmrebuild.sh: WARNING: some files have been modified:
..?......  c /etc/ssh/sshd_config
..?......  c /etc/sysconfig/sshd
Do you want to continue ? (y/N) y
Do you want to change release number ? (y/N) n
result: /root/rpmbuild/RPMS/x86_64/openssh-server-6.2p2-8.fc19.x86_64.rpm

Người giới thiệu


Dù sao, đó là: jdk-1.6.0_02-fcs.rpm :) Nó không có trên "internet"
evachristine

Bạn có thể nhận RPM chính thức cho bất kỳ phiên bản JDK nào từ đây: oracle.com/technetwork/java/javase/doads/ cảm . Điều đó sẽ đưa bạn đến 1.6u2, phiên bản tương tự.
slm

Làm thế nào bạn có thể biết rằng "jdk-1.6.0_02-fcs.rpm" là "1.6u2"? : O
evachristine

1
Tôi đã tìm thấy nó !! CẢM ƠN! nó được đặt tên: jdk-6u2-linux-i586.rpm CẢM ƠN BẠN!
evachristine

1
@evachristine - yup đó là một, rất vui vì đã giải quyết nó.
slm

0

Như một quy tắc chung không.

Với một chút may mắn rpm -qirpm -q --changelogcung cấp cái nhìn sâu sắc về nơi gói đến từ.

Nếu nó được xây dựng trên hệ thống, nó chạy trên bạn vẫn có thể có tệp spec được sử dụng để tạo vòng tua máy thực tế, nếu không phải cả hai.

Theo nguyên tắc chung, tôi không khuyên bạn nên sao chép tệp / nhị phân nhưng hầu hết thông tin meta đều có trong cơ sở dữ liệu RPM và bạn có các tệp thực tế.

rpm -q --list <pkg_name> hiển thị tất cả các tập tin một gói triển khai.

rpm -q --scripts <pkg_name> để hiển thị bất kỳ tập lệnh nào được thực thi bằng cách cài đặt (hoặc xóa) gói có thể cung cấp ít nhất cái nhìn sâu sắc về mục đích của nó như các tệp được triển khai.

Và bất kỳ phụ thuộc phải được cài đặt có thể được tìm thấy với rpm -q --requires <pkg_name>.

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.