GIT –  Có nhiều bạn khi lần đầu tiên đến với  cảm giác sự khó khăn và bất tiện của việc cài đặt các ứng dụng trên, đặc biệt là các ứng dụng phải cài đặt từ mã nguồn. Bài học tiếp theo chúng ta sẽ cùng tìm hiểu về các thức cài đặt phần mềm trên ( , deb, source code … )

Ở bài trước chúng ta đã được tìm hiểu về cách cài hệ điều hành linux http://www.gocit.vn/bai-viet/bai-1-huong-dan-cai-centos-6-5-64bit/bài tiếp theo sẽ hướng dẫn các bạn cài đặt phần mềm trên linux

Lưu ý: bài viết trước chúng ta cài OS với gói Minimal, do đó sẽ thiếu rất nhiều gói cơ bản. Bài học sau sẽ giúp chúng ta cài các gói cơ bản bị thiếu

Trên , bạn chỉ cần tải ứng dụng về, giải nén rồi click vào file là hoàn tất việc cài đặt, nhưng trên Linux đó là một chuyện hoàn toàn khác. Bài viết này sẽ nhằm mục đích hướng dẫn bạn các thao tác cài đặt các phần mềm ứng dụng trên Linux và cung cấp các kiến thức căn bản giúp bạn có thể quản lý hệ thống của riêng mình. Bài viết sẽ giả sử rằng bạn đã biết cách sử dụng một số phần mềm quản lý gói như rpm. Để dễ dàng thì bài viết sẽ gọi các phần mềm trên Linux là các gói (package). Thực tế tên gọi ‘gói’ đúng đắn hơn vì các gói trên Linux có thể không phải là một trình ứng dụng nào đó mà chỉ là các thư viện nền như thư viện đồ họa Gtk+ hoặc OpenGL…

Có nhiều cách khác nhau để cài đặt phần mềm, ứng dụng trên . Một vài trong số đó thì khá  phức tạp (…), một vài cách thì đơn giản như cài đặt từ các file .EXE trên Windows.

Hầu hết các HDH Linux cũng có công cụ quản lý, cài đặt, gỡ bỏ phần mềm như Add or Remove Programs trong Windows. Ví dụ, trong, nếu của có nối mạng thì bạn có thể  và cài đặt ứng dụng tự động thông qua công cụ Synaptic Package Manager (giao diện GUI) hoặc sử dụng dòng lệnh apt-get trong Terminal … File cài đặt cho ứng dụng trên Linux thường có phần mở rộng như .deb, .rpm, .bin, .tar, tar.gz, , .sh …. Mỗi loại file cài đặt này có 1 cách thức thực thi cài đặt riêng.

1. Cài phần mềm từ source trên linux

Giới thiệu 

Bạn có thể sẽ tự hỏi rằng tại sao các phần mềm trên Linux không tự đóng gói sẵn cho chúng ta rồi khi xuất bạn chỉ cần tải về và cài đặt nó. Câu trả lời nằm ở 2 vấn đề, vấn đề thứ 1 là các phần mềm viết trên Linux không hẳn chỉ có thể chạy trên Linux mà có thể chạy trên nhìều hệ thống khác nhau trong họ như Solaris, AIX, HP-UX… thậm chí các phần mềm đó có thể chạy trên rất nhiều vi xử lý khác nhau như Intel, Motorola, PPC… Có được sự đa năng đó là nhờ vào tính đa nền (portable) của ngôn ngữ C/C++ nhưng đòi hỏi chúng ta phải biên dịch lại phần mềm từ mã nguồn cho hệ thống mà chúng vận hành. Bạn sẽ tự hỏi là tại sao các nhà phát triển lại không biên dịch sẵn cho chúng ta trên hệ thống thông dụng nào đó như Linux chẳng hạn.

Câu trả lời là bởi vì các phần mềm này là phần mềm mã nguồn mở và các nhà phát triển không có cách gì hơn là để lại phần biên dịch cho chúng ta. Tuy nhiên bạn đừng thất vọng vì có một số nhà phát triển rất là tốt bụng có thể biên dịch sẵn cho chúng ta ra các gói có dạng rpm và cùng với sự hỗ trợ của công ty Red Hat chúng ta cũng đã có những chương trình quản lý các phần mềm hiệu quả không kém gì trên Windows như RPM ( Package Manager). Mặc dù là thế nhưng không phải lúc nào các gói mới nhất từ các nhà phát triển gốc đều có phiên bản biên dịch sẵn mà thường là một khỏang thời gian sau các phiên bản đó mới có được dưới dạng biên dịch sẵn. Bên cạnh đó còn có rất nhiều nhà phát triển không hề biên dịch sẵn sản phầm của mình mà đòi hòi người dùng phải biên dịch, điển hình là trình chơi phim và nhạc xine. Các gói biên dịch sẵn các bạn có từ xine đa số là từ các nhà phát triển khác. Do đó nếu bạn không bạn không biết cách cài đặt các gói từ nguồn là một trở ngại rất lớn cho việc hiểu và quản trị hệ thống của riêng mình.

Căn bản của việc cài đặt 

Điều đầu tiên khi bạn tiến hành cài đặt là bạn phải có mã nguồn của gói đó trước. Hãy lên mạng search bất kì gói nào bạn thích như thư viện Gtk+ hoặc Gnome… Sau khi tải về, thông thường có dạng là .gz hoặc .bz2, đây đều là 2 chuẩn nén khác nhau, sau khi giải nén bằng gunzip cho gz hoặc bunzip2 cho bz2 thì các gói sẽ có dạng mới là tar, cũng là một chuẩn nén khác, bạn có thể giải nén bằng lệnh, tar -xvf… Thế nhưng đế dễ dàng và tiết kiệm dung lượng ổ đĩa thì chúng ta có thể gộp các câu lệnh đó thành 1 như sau:

– Đối với gói .gz: # tar -zxvf tengoi.gz
– Đối với gói .bz2: # tar -jxvf tengoi.bz2

Sau khi giải nén xong và tìm tập tin để đọc cụ thể cho phần hướng dẫn cài đặt. Thế nhưng hầu như các gói đều tuân theo các thao tác tuần tự sau:

# ./configure
# make
# make install

Chỉ có vài gói đặc biệt sẽ có riêng cách cài đặt nhưng khi bạn đã nắm vững nguyên tắc chung thì dù là cách thức nào bạn cũng có thể xoay xở được. Chúng ta hãy xét đến câu lệnh đầu tiên, ./configure… Thực chất configure là một shell script sẽ kiểm tra những yêu cầu của hệ thống của bạn có đáp ứng đủ để cài đặt gói lên không, ví dụ như một số gói đòi hỏi bạn phải có sẵn thư viện đồ họa Gtk 2.4 trở lên hoặc là thư viện để giải nén nhạc Mp3…

Rất nhiều gói có sự phụ thuộc như thế chứ các gói khi tải về không hề có sẵn các gói tương ứng cần thiết cho nó. Khi bạn chạy configure xong kết quả sẽ cho bạn biết các gói nào cần thiết để cài đặt. Nhiệm vụ của bạn không gì hơn là phải tìm các gói phụ thuộc đó cài lên máy rồi mới tiếp tục việc cài đặt. Nếu như hệ thống của bạn thỏa mãn đầy đủ các yêu cầu để cài đặt thì các Makefile sẽ được tạo ra. Makefile là một file đặc biệt của tiện ích make nhằm hướng dẫn biên dịch mã nguồn của gói ra dạng thực thi.

Sau khi bạn thực thi lệnh ‘make’ xong thì toàn bộ mã nguồn của gói đã được biên dịch sang dạng thực thi nhưng các file thực thi vẫn còn nằm trên thư mục hiện hành. Do đó bạn cần phải thực hiện thêm lệnh ‘make install’ để chép các file thực thi đó sang đúng vị trí của nó trên hệ thống. Nếu như không có thông báo lỗi gì xảy ra thì bạn đã hòan tất việc cài đặt gói lên hệ thống của mình.

Tổ chức các file trên hệ thống 

Bạn hoàn toàn biết thư mục trên Linux thì thư mục /usr là thư mục quan trọng nhất vì nó sẽ chứa các chương trình và hàm thư viện trên đó. Trong thư mục /usr/bin là sẽ chứa các file thực thi cho các gói bạn đã cài đặt trên máy, các file trong thư mục này bạn sẽ thấy các file rất quen thuộc như mozilla, gedit .v.v… Thư mục /usr/lib sẽ chứa các hàm thư viện, bạn sẽ thấy rất nhiều files có phần mở rộng là .so (shared object) là các hàm thư viện liên kết động hoặc .a (archive) hoặc .la đều là các hàm thư viện liên kết tĩnh. Đặc tính căn bản của 2 dạng thư viện này là hàm thư viện liên kết tĩnh sẽ được liên kết thẳng với files thực thi luôn trong quá trình liên kết, còn hàm thư viện liên kết động thì sẽ được liên kết trong quá trình thực thi, cho nên sau khi chương trình đã được biên dịch và liền kết rồi các thư viên tĩnh chúng ta có thể bỏ đi nhưng thư viện liên kết động thì bắt buộc phải đi kèm với chương trình. Thư mục /usr/share sẽ chứa các icon, manual hoặc info của gói.

Loại bỏ một gói 

Nếu bạn mong muốn lọai bỏ một gói đã cài đặt trên hệthống thì cách duy nhất là bạn phải vào lại thư mục mã nguồn của gói và gõ lệnh

make uninstall

Thông thường bạn sẽ có các câu lệnh sau:

make clean

make distclean

Các câu lệnh có ý nghĩa rất tương đối và được định nghĩa trong tập tin Makefile, nên đầu tiên bạn cứ thử với ‘make uninstall’ rồi ‘make clean’ cái cuối cùng ‘make distclean’ là giúp bạn xóa hết các tập tin đã biên dịch ở thư mục nguồn và đồng thời xóa Makefile, bạn phải chạy lại ./configure để tạo lại Makefile.

Quản lý các gói 

Do việc xóa bỏ một gói như trên rất là phiền phức đôi lúc bạn chẳng thể xóa bỏđược nếu như mất đi mã nguồn, cho nên bạn có thể thay vì cài nó vào thư mục mặc định là /usr thì bạn có thể cài vào các thư mục của riêng bạn, ví dụ như bạn có thể tạo thư mục ‘/soft’… Sau đó để cài gói gedit thì bạn tạo thêm thư mục /soft/gedit và dùng lệnh ./configure… bạn thêm tùy chọn sau:

./configure –prefix=/soft/gedit

Thì khi bạn gõ make install sẽ copy toàn bộ sang thư mục /soft/gedit. Khi bạn muốn xóa toàn bộ gói thì chỉ đơn giản xóa đi thư mục đó thôi. Lưu ý là khi bạn cài vào thư mục riêng của mình rồi bạn phải tạo 2 đường dẫn cho 2 biến môi trường (environment variable) LD_LIBRARY_PATH và PKG_CONFIG_PATH.

LD_LIBRARY_PATH sẽ có đường dẫn đến thư mục lib của gói vừa tạo (ví dụ như /soft/gedit/lib) còn PKG_CONFIG_PATH sẽ có đường dẫn đến thư mục pkg_config trong thư mục lib (ví dụ như /soft/gedit/lib/pkg_config). Bên cạnh đó nếu bạn muốn chương trình gọi tự động thì bạn cũng nên thêm vào biến PATH cho gói của mình.

Lời kết 

Đối với cách cài trên thì bạn dể dàng quản lý các gói của mình nhưng đối với các dạng thư viện thì bạn nên cài nó vào thư mục /usr hơn là thư mục riêng của mình vì một số gói sẽ tìm các thư việc trên thư mục mặc định /usr và /usr/local hơn là các thư mục riêng người dùng nên nếu bạn cài lên thư mục riêng thì đôi lúc các thư viện đó sẽ không được tìm ra. Thông thường lệnh ./configure đi đôi với rất nhiều tùy chọn cho phép bạn lựa chọn nhiều tính năng khác nhau, bạn hãy gõ

./configure –help

để mà biết đầy đủ các tùy chọn của gói

2. Cài đặt phần mềm trên Redhat – Centos

Bản thân các gói RPM không chứa chương trình cài đặt, nó chỉ chứa các thông tin về các file sẽ được cài đặt, thông tin mô tả về phần mềm chứa trong gói và các file nằm trong gói RPM sẽ được cài đặt vào thư mục nào trong hệ thống. Các gói phần mềm dạng RPM được cài đặt vào hệ thống nhờ vào chương trình RPM có trong hệ thống.

Cách đơn giản nhất để cài một gói RPM, chẳng hạn gói foobar-1.0-1.i386.rpm là dùng lệnh:

rpm -i foobar-1.0-1.i386.rpm

Để theo dõi quá trình install, bạn có thể thêm tham số:

rpm –ivh foobar-1.0-1.i386.rpm

Để uninstall package đã được cài:

rpm -e foobar

Nếu có một file RPM mà không biết nó là phần mềm nào, bạn có thể lấy thông tin bằng lệnh:

rpm -qpi koules-1.4-1.i386.rpm

Nếu đã lỡ xóa một vài file nào đó và không chắc chắn rằng file đó đang còn cần thiết cho chương trình nào đó, bạn có thể xem thử hệ thống đang thiếu file cần thiết nào:

rpm –Va

Thường khi cài một gói RPM nào đó, đòi hỏi phải cài thêm các gói phụ thuộc, bạn phải đi tìm và cài đặt các gói phụ thuộc trước khi cài được gói phần mềm trên. Hoặc cũng có thể gộp chung lại trên một dòng lệnh với lệnh RPM một danh sách các file RPM, được cách nhau bởi dấu khoảng trắng.

Trong Redhat hoặc Mandrake ở các phiên bản mới, Software Package Installation cũng tương tự như trình Add/Removed Software trong Windows vậy. Các tiện ích đi kèm trong bộ cài đặt được liệt kê đầy đủ theo từng nhóm để tiện theo dõi. Khi cài đặt một phần mềm, chương trình sẽ tự động kiểm tra các gói phụ thuộc và sẽ yêu cầu bạn đưa các CD cần thiết vào trong quá trình cài đặt.

Một kiểu cài đặt phần mềm phổ biến khác là bạn cài đặt từ các gói mã nguồn, thường được viết bằng ngôn ngữ C. Các gói này có dạng file nén *.TAR.GZ, *.BZ hoặc *.SRC.RPM. Trong trường hợp này, máy tính của bạn phải có sẵn các bộ công cụ biên dịch và các thư viện lập trình.

Sở dĩ phải có dạng TAR vì các file phải được gói lại thành một file trước khi nén thành GZ hoặc BZ, chứ không thể nén trực tiếp từ nhiều file thành một file nén được. Bản thân file *.TAR không phải là một file nén mà chỉ là một file chứa một tập các file khác gom lại mà thôi.

Với các gói nén bằng TAR.GZ, bạn bung nén như sau:

#tar xvzf file.tar.gz

Sau khi giải nén, một thư mục chứa các file trong file nén được tạo ra. Bạn vào thư mục này và thực hiện quá trình biên dịch theo như file INSTALL hướng dẫn. Các bước thông thường (chứ không phải tất cả) là như sau:

#./configure

# make

#make install

Bước chạy lệnh configure là để chương trình script xác lập cấu hình hệ thống cho việc biên dịch chương trình. Tùy vào cấu hình máy mà có chế độ biên dịch phù hợp và tối ưu cho chính hệ thống đó.

Lệnh make dùng để biên dịch mã nguồn thành file thực thi. Sau đó lệnh install để cài đặt file đã biên dịch lên hệ thống.

Bạn cũng có thể dùng lệnh yum để cài đặt phần mềm, vd bạn muốn cái webserver gõ lệnh sau

# yum install httpd

Sau đó nhấn -y để xác nhận, hoặc có thể tìm một gói cài đặt bằng cách dùng lệnh yum search, sẽ liệt kê các gói cần cài đặt

# yum search httpd

3. Cài đặt phần mềm trên – Debian

Cài đặt các file .deb

File này rất dễ cài, bạn chỉ cần click đúp vào file và trình cài đặt phần mềm trên hệ thống tự mở, click “Install Package” và chờ quá trình cài đặt hoàn tất.

Chú ý: một số phần mềm yêu cầu máy phải cài sẵn một số Dependency, nếu không đủ các Dependency lúc cài đặt sẽ báo lỗi. Để giải quyết vấn đề Dependency với file .deb nhanh gọn có thể sử dụng gói Gdebi

 Đây là một ứng dụng có giao diện người dùng, nó cho phép bạn cài đặt các gói .deb đã dowload sẵn và nằm trên HDD, còn các Dependency phải kết nối Internet đề Gdebi tự tìm và giúp bạn. Gdebi cũng có thể chạy trong chế độ non-GUI bằng cách chuyển tới folder chứa file .deb và gõ sudo gdebi package_name.deb tại nhắc lệnh và vẫn có khả năng giải quyết các dependency.

Cài đặt các file .rpm

Bạn nên sử dụng gói Alien để chuyển từ .rpm sang .deb cho dễ cài đặt

– Mở Terminal lên, gõ vào sudo apt-get install alien đề download và cài đặt gói Alien thông qua tiện ích quản lý gói APT

 Gõ vào  ứng với User bạn đang Logon. Gõ ‘y’ để đồng ý cài đặt gói Alien

 – Sau khi cài xong Alien, bạn move file .rpm tới Desktop rồi mở Terminal, gõ cd Desktop

 – Bây giờ, gõ sudo alien -k filename.rpm để convert từ file .rpm -> .deb. Sau đó bạn cài file .deb như trên

Cài đặt file .bin

 Download và save file .bin tới Desktop. Mở Terminal và gõ cd Desktop

– Gõ tiếp sudo chmod +x filename.bin

– Gõ ./filename.bin

sau đó chương trình sẽ cài trong Terminal!

CÀI ĐẶT PHẦN MỀM TỪ TARBALL

Một tarball (thường là các file .tar , .tar.gz , .tgz , .tar.bz2 , .tbz2 ) gồm có mã nguồn cho chương trình mà bạn phải tự biên dịch, trình biên dịch (compile) như GCC… thì thường có sẵn trong Linux . Các bước cài đặt Tarball về cơ bản như sau

Giải nén tarball

Với những người còn mới với Linux thì tarball là một thuật ngữ được sử dụng chung nhằm ám chỉ một file có chứa các file khác. Nó gần giống như một file nén ZIP hoặc RAR trong Windows, ngoại trừ chương trình tar không nén các file

. Tar làm việc với một chương trình nén như gzip để nén các file, đây là lý do tại sao bạn thấy hai đuôi mở rộng (.tar và .gz). Các đuôi mở rộng này đôi khi còn được viết tắt là .tgz

 Tuy nhiên không cần phải chạy hai chương trình riêng biệt để bung các file mà chúng ta chỉ cần lệnh cho tar chạy các file thông qua gzip để giải nén. Bạn có thể sử dụng tiện ích đồ họa để bung các file này bằng cách kích đúp vào tarball từ bộ quản lý file của mình, hoặc có thể thực hiện điều đó bằng dòng lệnh:

$ tar zxvf file.tar.gz hoặc

$ tar zxf file.tar.gz

$ tar zxf file.tgz

$ tar jxf file.tar.bz2

$ tar jxf file.tbz2

Các tùy chọn chúng ta cung cấp cho tar được mô tả bên dưới:

 • -z để lệnh cho tar chạy file này thông qua gzip để giải nén (sử dụng –j cho các file bzip)

 • -x để bung các file

 • -v cho “verbose”, để chúng ta có thể thấy danh sách các file đang bung

 • -f để lệnh cho tar rằng chúng ta đang làm việc với một file

Configure

Khi các file được bung ra, mở một  terminal và vào thư mục nơi các file được giải nén trong đó. Trước khi biên dịch, chúng ta cần chạy kịch bản cấu hình. Công việc của kịch bản cấu hình là kiểm tra hệ thống của bạn về tất cả những gì phần mềm cần thiết để biên dịch chương trình từ mã nguồn thành chương trình nhị phân có thể sử dụng được. Nó sẽ những thứ như phiên bản GCC và các công cụ cần thiết khác để xây dựng phần mềm. Khi bạn nằm trong thư mục với tất cả các file đã được bung từ tarball (sử dụng lệnh cd để change directory), hãy đánh vào ./configure

Nếu tất cả đều diễn ra tốt đẹp, lệnh trên sẽ kiểm tra một loạt các phần khác nhau của hệ thống bạn, sau đó đưa bạn trở lại dòng lệnh như bên dưới:

 Vấn đề gây ra lỗi chung nhất trong bước này là mất dependency. Hãy quan sát bất cứ lỗi nào mà bạn gặp phải để xác định xem gói phần mềm nào bị thiếu.

Make

Đây là phần cốt lõi của quá trình – nơi chúng ta biên dịch mã nguồn thành một chương trình có khả năng chạy. Đây là bước đơn giản nhất, chỉ yêu cầu một lệnh đơn giản. Nếu bước cấu hình hoàn tất mà không có lỗi, bạn chỉ cần đánh vào  make

Đối với các chương trình lớn, bước này có thể mất đến vài phút. Khi quá trình kết thúc, bạn sẽ được đưa quay trở lại shell nhắc lệnh

Chương trình của bạn lúc này đã hoàn toàn sẵn sàng cho sử dụng. Mặc dù vậy bạn vẫn nên chạy thêm một bước nữa để chương trình có thể được cài đặt hoàn toàn vào đúng location và có thể chạy từ bất cứ đâu.

Make install

Tất cả những gì cần thiết lúc này là copy chương trình vừa được biên dịch vào các thư mục hệ thống như /usr/bin để có thể chạy từ bất cứ thư mục nào mà không cần chỉ định đường dẫn đến các file. Do nó sẽ copy đến một thư mục bên ngoài thư mục chủ nên bạn có thể cần đến các đặc quyền root. Nếu bước này được hoàn tất mà không có lỗi, bạn hãy chạy sudo make install để copy các file. Đến đây, bạn đã hoàn thành xong phần việc của mình. Chương trình mới của bạn có thể được sử dụng giống như bất cứ chương trình nào đang chạy khác.

* CÁC MẸO

– Bạn có thể biên dịch từ mã nguồn nhiều lần (nhất là với những người muốn sử dụng các chương trình mới nhất) nên để làm cho quá trình biên dịch đó dễ dàng hơn, bạn hãy mở file .bashrc của mình từ thư mục chủ và bổ sung thêm các alias dưới đây vào phần cuối của nó:

alias ungz=”tar -zxvf” alias unbz=”tar -jxvf” alias cmi=”./configure && make && sudo make install”

– Xem thêm phần Read INSTALL / README file đi kèm tarball nếu gói phải được build và install theo cách riêng

 $ vi INSTALL (hoặc Readme)

(Vim là Text Editor, trên Ubuntu thay bằng gedit, nano,… )

 – Để gỡ bỏ phần mềm khỏi hệ thống bạn chuyển tới folder chứa source của phần mềm bạn download về và gõ $ make uninstall

5. RPM Build

  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.

6. Câu hỏi:

– Trên Ubuntu – Debian có thể cài gói .rpm và ngược lại trên Redhat – Centos có thể cài gói .deb không ?

– Gói cài đặt nào có thể cài cho Redhat – Centos & Ubuntu – Debian ?

– Tìm hiểu về các gói cài đặt trên unix ( BSD )

7. Bài tập

– Mức độ dễ : 

  • Bằng lệnh yum, cài các gói cơ bản: telnet, wget, man …
  • Thực hiện cài webserver apache, php, mysql bằng lệnh yum.

– Mức độ trung bình :

  • Thực hiện cài webserver nginx, php-fpm, mysql bằng lệnh yum trên Centos.

– Mức độ khó:

  • Thực hiện cài webserver nginx, php-fpm, mysql bằng source code, sau đó cho cài đặt blog WordPress.

Gợi ý: tìm hiểu về EPEL & Remi.

8. Lưu ý:

– Redhat Package Manager (RPM): là công cụ dùng để Installing, Uninstalling và Upgrading software cho hệ thống Linux.

– DEB là phần mở rộng của định dạng đóng gói phần mềm Debian và cũng là tên thường gọi cho các gói nhị phân tương tự. Giống như phần “Deb” của thuật ngữ Debian, nó bắt nguồn từ tên gọi của Debra, là bạn gái và bây giờ vợ cũ của người sáng lập của Debian Ian Murdock.

– Các bạn có thể dùng lệnh man { tên gó } để đọc hướng dẫn sử dụng.

9. Tải bài viết về máy:  [Bài 2] Cài đặt phần mềm trên linux

Print Friendly

Comments

comments

Bài viết liên quan