GIT – Package Management là một trình quản lý gói được sử dụng bởi nhiều Distribution, như Redhat, , Suse, Mandrake, … Khi các phần mềm đã được đóng gói dưới dạng RPM, người sử dụng chỉ việc download về và cài đặt qua tiện ích của rpm.
Tuy nhiên có nhiều phần mềm chỉ cung cấp dưới dạng source code ( tgz, tar.gz, tar.bz2 ). Người dùng có thể sử dụng những source code này hoặc người dùng có thể phát triển riêng phần mềm của mình để đóng gói thành gói tin rpm và phân phối lại cho cộng đồng sử dụng. Bài viết này giới thiệu cấu trúc gói tin rpm và cách đóng gói chúng.

Các gói RPM thực chất chỉ chứa các file đã được biên dịch và một số file khác như file cấu hình, các văn bản của gói phần mềm dạng mã nguồn. File RPM nếu được cài đặt thành công sẽ tạo hệ thống chạy được ngay vì thực chất nó là sự triển khai các file đã được biên dịch và các file cấu hình, các file văn bản vào các vị trí thích hợp để phần mềm có thể chạy ngay lập tức. Một gói được đóng dưới dạng RPM có thể coi như một gói cài đặt dạng setup.exe trong Windows.

Quá trình tạo file RPM chỉ là việc lựa chọn từ hệ thống file đã được biên dịch của các gói mã nguồn để đưa vào gói RPM. Khi đưa gói RPM tới nơi khác cài đặt, gói RPM sẽ tự động thực hiện việc giải bung các file tới các vị trí thích hợp như chính các file đó được bố trí trên máy đã cài bằng gói mã nguồn. Như phần dưới đây sẽ trình bày, bước xây dựng file .spec là quan trọng nhất trong đóng gói RPM vì chính file này hướng dẫn quá trình tạo lập ra file RPM. Nó nói cho trình tạo RPM biết phải copy các file nào, thiết lập các thông số cho gói RPM ra sao. Trong chính file này, người dùng cũng có thể can thiệp vào các file và các thư mục sẽ được cài đặt, thiết lập các thông số cho gói mã nguồn sẽ được được biên dịch và do đó ảnh hưởng tới file RPM.

Quy trình đóng gói một gói tin rpm bao gồm:

· Chuẩn bị mã nguồn (.tar.gz, .tar.bz2)

· Cập nhật các bản vá cho các file mã nguồn nếu có

· Tạo file spec

· Xây dựng gói rpm qua lệnh rpmbuild

Cả quá trình này phức tạp nhất và cũng quan trọng nhất là tạo được file spec hoạt động đúng và phù hợp với hệ thống, để xây dựng được gói rpm hoàn chỉnh.

File spec là một file hướng dẫn cách xây dựng phần mềm và danh sách các file được cài đặt.

Cấu trúc của file Spec:

Summary: A program that ejects removable media using software control.Name: ejectVersion: 2.0.2Release: 3Copyright: GPLGroup: System Environment/BaseSource: http://metalab.unc.edu/pub/Linux/utils/disk-management/eject-2.0.2.tar.gz Patch: eject-2.0.2-buildroot.patchBuildRoot: /var/tmp/%{name}-buildroot%descriptionThe eject program allows the user to eject removable media(typically CD-ROMs, floppy disks or Iomega Jaz or Zip disks)using software control. Eject can also control some multi-disk CD changers and even some devices’ auto-eject features.Install eject if you’d like to eject removable media usingsoftware control.%prep%setup -q%patch -p1 -b .buildroot%buildmake RPM_OPT_FLAGS=”$RPM_OPT_FLAGS”%installrm -rf $RPM_BUILD_ROOTmkdir -p $RPM_BUILD_ROOT/usr/binmkdir -p $RPM_BUILD_ROOT/usr/man/man1install -s -m 755 eject $RPM_BUILD_ROOT/usr/bin/ejectinstall -m 644 eject.1 $RPM_BUILD_ROOT/usr/man/man1/eject.1%cleanrm -rf $RPM_BUILD_ROOT%files%defattr(-,root,root)%doc README TODO COPYING ChangeLog/usr/bin/eject/usr/man/man1/eject.1%changelog* Sun Mar 21 1999 Cristian Gafton <gafton@redhat.com> – auto rebuild in the new build environment (release 3)* Wed Feb 24 1999 Preston Brown <pbrown@redhat.com> – Injected new description and group.[ Some changelog entries trimmed for brevity. -Editor. ]

Phần đầu của file spec bao gồm các trường cơ bản cần phải điền đầy đủ:

§ Summary: Giới thiệu ngắn gọn về gói tin
§ Name: Tên gói rpm sẽ được xây dựng
§ Version: Phiên bản gói rpm sẽ được xây dựng
§ Release: Số phát hành của phiên bản
§ License: Giấy phép
§ Group: Nhóm của gói tin thuộc vào
§ Source: Địa chỉ của mã nguồn (Source0, Source1, Source2, …)
§ Patch: Tên các bản vá (Patch0, Patch1, Patch2, …)
§ BuildRoot: Thư mục “root” được xây dựng và cài đặt gói tin
§ %description: Mô tả chi tiết phần mềm

· Prep
Đây là đoạn thứ 2 trong file spec, chứa 2 thủ tục:

%setup: giải nén mã nguồn và chuyển (cd) đến thư mục sau giải nén.
%patch: áp dụng bản vá cho mã nguồn

· Build : biên dịch mã nguồn
· Install: cài đặt hệ thống
· Clean: xóa thư mục dành cho biên dịch sau khi giải nén mã nguồn.
· Files: liệt kê danh sách các file nhị phân cho gói tin rpm.
· %doc : các tài liệu document
· %config: các file cấu hình
· %dir: đánh dấu thư mục con của gói tin
· %defattr: thiết lập thuộc tính mặc định cho các file.
· Changelog: Thông tin nhật kí về những lần gói tin được cập nhật, chỉnh sửa.

Sau khi đã hoàn chỉnh file spec, đảm bảo file spec được đưa vào /usr/src/redhat/SPECS và file mã nguồn và các bản vá tương ứng được đặt tại /usr/src/redhat/SOURCES.

Tiến hành xây dựng qua tiện ích rpmbuild:

# rpmbuild –ba file_name.spec

Quá trình xây dựng diễn ra bao gồm các bước theo mô tả trong file spec. Nếu thành công, quá trình này sẽ tạo ra 3 file đóng gói

<tên_gói>-<phiên_bản>.i386.rpm ( hoặc <tên_gói>-<phiên_bản>.x86_64.rpm  )
<tên_gói>-debug-info-<phiên_bản>.rpm
<tên_gói>-<phiên_bản>.src.rpm

Hai file .rpm đầu tiên được đưa vào /usr/src/redhat/RPMS/i386 ( hoặc /usr/src/redhat/RPMS/x86_64) , còn file cuối .src.rpm được đưa vào /usr/src/redhat/SRPMS.

Với gói đầu, người sử dụng có thể đem đi cài tại các máy có chương trình rpm đã được cài đặt. Việc cài đặt gói này được thực hiện bằng lệnh rpm -i <tên gói> như đã nói ở trên và cài đặt thành công với điều kiện các gói phụ thuộc của nó đã được cài trên máy. Gói thứ hai dùng để kiểm tra lỗi biên dịch cho gói thứ nhất. Việc cài đặt gói này hay không không quan trọng lắm tới việc sử dụng phần mềm do gói đầu cài đặt. Với gói thứ ba, người dùng có thể cài nó và kết quả của việc cài là file mã nguồn và file SPEC đã được dùng để tạo ra gói .rpm nói trên. Người sử dụng cuối vẫn có thể biên dịch lại mã nguồn này và tạo thành gói .rpm khác.

Việc phân phối gói .rpm dưới dạng gói đầu hay gói thứ ba đều chấp nhận được và người dùng cuối đều có thể sử dụng hai gói này để chạy phần mềm cần cài đặt. Với cách phân phối theo gói thứ 3, người sử dụng cuối có thể chỉnh sửa thêm một số thông số cho phù hợp nhu cầu riêng. Điều này đảm bảo nguyên lý của GPL là mã nguồn có thể được tự do phân phối và chỉnh sửa.

Như vậy RPM là một chuẩn phân phối phần mềm phổ biến và tiện dụng trên nền Linux. Các gói phần mềm có thể đóng gói một cách mềm dẻo thành các gói RPM với các thông số cài đặt và cấu hình khác nhau. Đây cũng là một nhân tố đảm bảo việc tạo sự đa dạng hóa trong các gói mã nguồn cung cấp cho hệ thống đĩa cài chuyên dụng.

Nguồn : sưu tầm từ internet.

Bài viết này nằm trong dự án  website : www.gocit.vn, forum hổ trợ forum.gocit.vn , xem thêm tại link http://www.gocit.vn/du-an-linux-toan-tap/

Thảo luận bài viết tại forum : http://forum.gocit.vn/threads/rpm-build.442/

Print Friendly

Comments

comments

Bài viết liên quan