Ex: để cung cấp Public key cho yum từ livna # rpm --import http://rpm.livna.org/RPM-LIVNA-GPG-KEY-i386 Tìm một phần mềm # yum search package-name Liệt kê tất cả các gói phần mềm đã được
Trang 1Cài đặt và Quản lý phần mềm trên Linux
1 Redhat Package Manager
Được phát triển đầu tiên bởi Redhat, sau đó được các phiên bản linux khác sử dụng rộng rãi: Fedora, Mandrake, SuSe
Gói rpm có dạng: Tên package-phiên bản-số hiệu.kiến trúc.rpm
Cài đặt bằng lệnh rpm
Đây là kiểu cài đặt phổ biến nhất của linux
Dễ cài đặt, dễ remove
Cài đặt một package
# rpm -ivh <package_name.rpm>
Một số trường hợp lỗi
Package đã cài rồi : package is already installed
Xung đột tập tin : …package…conflicts with…
Phụ thuộc vào package khác : failed dependecies
# rpm -ivh gcc-4.1.2-51.el5.i386.rpm glibc-devel-2.5-65.i386.rpm
glibc-headers-2.5-65.i386.rpm kernel-headers-2.6.18-274.el5.i386.rpm cpp-4.1.2-51.el5.i386.rpm
Upgrade một package
# rpm -Uvh <package_name.rpm>
Khi upgrade RPM sẽ xóa các phiên bản cũ của package.Có thể dùng lệnh này để cài đặt, khi đó
sẽ không có phiên bản cũ nào bị xóa đi
Gỡ bỏ một package
# rpm -e <package_name>
Một số trường hợp lỗi:
Package được xóa có liên quan đến package khác : “removing these packages would break dependecies”
# rpm -e gcc
Truy vấn một package
# rpm -qa | grep <package_name>
# rpm -qf /etc/passwd
setup-2.5.58-9.el5
# rpm -qf /bin/ls
Trang 2Một số option khác sử dụng trong cài đặt:
nodeps: cho phép cài đặt, bỏ qua các gói phụ thuộc.
force: bắt buộc upgrade, bỏ qua conflicts.
test: không cài đặt, upgrage, chỉ test.
requires: liệt kê các gói phụ thuộc.
Các option truy vấn: kết hợp với option -q
-a: hiển thị danh sách các package đã cài đặt.
-f <file_name>: hiển thị package sở hữu <file_name>
-d <package_name>: hiển thị danh sách tập tin tài liệu
-i <package_name>: hiển thị thông tin của package
-l <package_name>: hiển thị file chứa trong package_name
-c <package_name>: hiển thị danh sách tập tin cấu hình
2 Yum Package Manager
Mặc định, yum (yellowdog updater modified) sẽ chỉ tìm kiếm và tải về các package nằm trong các kho chứa (repository) là các server trên Internet Vì vậy, việc cài đặt phần mềm với yum yêu cầu cần phải có kết nối Internet tốc độ cao để việc tải gói về được nhanh chóng yum cho phép
định nghĩa các reposistory, đây là vị trí chứa các binary software File cấu hình của yum
repository nằm tại vị trí /etc/yum.conf Để thêm vào một reposistory mới, ta phải tạo ra các file
mô tả nằm bên trong folder /etc/yum.repos.d hoặc install rpm package để tạo thêm reposistory mới Ưu điểm nổi bật của yum là tính tự động cao Tuy nhiên, tùy theo nguồn nên các phần mềm
cài đặt dùng lệnh yum thường không phải là phiên bản mới nhất
Thêm một nguồn tài nguyên cho lệnh yum
# vim /etc/yum.repos.d/centalt.repo
[CentALT]
name=CentALT Packages for Enterprise Linux 5 - $basearch
baseurl=http://centos.alt.ru/repository/centos/5/$basearch/
enabled=1
gpgcheck=0
Mô tả các tính năng của repository
[CentALT] là tên repository
Name tên mô tả RPM Repository
baseurl đường link đến vị trí chứa các file rpm
enabled 1 = repository mặc định được sử dụng
0 = repository này mặc định sẽ không được sử dụng
gpgcheck 0 = bỏ qua kiểm tra tính toàn vẹn của gói
1 = tính năng bảo mật sử dụng GPG key để xác thực rằng các package được
download từ đúng nguồn
Trang 3Trong file config /etc/yum.conf , tham số gpgcheck cho biết sẽ kiểm tra Public key hay không
mỗi khi cài đặt phần mềm Public key này để chứng nhận các gói rpm được lấy từ đúng nguồn
tin cậy Nếu để là "0" nó sẽ không kiểm tra, sẽ đỡ rắc rối khi cài đặt nhưng nguy hiểm Nếu để
là "1" thì mỗi khi cài nó sẽ kiểm tra, và muốn cho nó biết có gì để kiểm tra phải import Public key từ các nơi cung cấp rpm Các public key này search trực tiếp trong trang cung cấp rpm
Ex: để cung cấp Public key cho yum từ livna
# rpm import http://rpm.livna.org/RPM-LIVNA-GPG-KEY-i386
Tìm một phần mềm
# yum search package-name
Liệt kê tất cả các gói phần mềm đã được cài đặt
# yum list installed
Hiển thị danh sách các gói phần mềm đã có bản update
# yum list updates
Kiểm tra và nâng cấp tất cả các gói phần mềm
# yum check-update | less
# yum update
Kiểm tra xem một gói phần mềm cụ thể đã có bản update mới chưa
# yum update package-name
Tìm kiếm một gói phần mềm lọc theo tên
# yum list package-name
# yum list rdesktop
Cài đặt gói phần mềm
# yum install package-name -y
# yum install rdesktop -y
Cài đặt phần mềm converrt định dạng tập tin văn bản DOS/Windows sang UNIX/Linux
# yum install dos2unix -y
# dos2unix file_name_convert_to_unix
Để sử dụng repository đang bị disabled trong quá trình cài đặt ta sử dụng thêm từ khóa –
enablerepo=[tên repository]
#yum enablerepo=repo-name install package-name
Gỡ bỏ gói phần mềm
# yum remove package-name
# yum remove rdesktop -y
Xóa cache của yum và xem nội dung của repository mới
# yum clean all && yum list
Hiển thị thông tin cài đặt package
# yum info rdesktop
Update package
Trang 4# yum update rdesktop -y
Kiểm tra file thuộc package nào
# yum provides /etc/passwd
Kiểm tra package có trong repo nào
# yum whatprovides gcc
Hiện thị repositories
# yum repolist
# yum repolist all
Sử dụng với yum shell
# yum shell
Cài đặt phần mềm monitor hệ thống
# yum install htop -y
# htop
Cài đặt phần mềm web console
# yum install lynx -y
Cài đặt phần mềm theo group
# yum grouplist
# yum groupinstall 'Development Tools'
# yum groupinstall 'Development Libraries'
# yum groupinstall 'DNS Name Server'
# yum groupupdate 'Graphical Internet'
# yum groupremove 'DNS Name Server'
Kiểm tra log YUM
# tail -f /var/log/yum.log
Cài đặt giao diện đồ họa GNOME - KDE
# yum grouplist
# yum groupinstall "GNOME Desktop Environment" -y
# yum groupinstall "KDE (K Desktop Environment)" -y
# vim /etc/sysconfig/desktop
DESKTOP="KDE"
DISPLAYMANAGER="KDE"
# yum install switchdesk -y
Chuyển đổi KDE và GNOME
# switchdesk kde
# switchdesk gnome
Tìm kiếm package http://pkgs.org/
3 Cài đặt bằng source
Tương thích với mọi phiên bản Linux
Trang 5Được đóng gói sử dụng kiểu GNU Zip (.gz) hoặc BZip2 (bz2) <filename>.tar.gz hoặc
<filename>.tar.bz2
Giải nén bằng lệnh:
tar xvzf <filename>.tar.gz
tar xvjf <filename>.tar.bz2
Đọc file INSTALL hoặc README để có những chỉ dẫn riêng biệt của gói cài đặt
Sau khi giải nén, chuyển đến thư mục của gói source:
cd <extracted_dir_name>
Chạy script configure, cần đọc file README, INSTALL để có những option cần thiết:
./configure
Build gói source bằng lệnh make:
make
Cài đặt gói source:
make install
Công cụ biên dịch C/C++
- gcc Trình biên dịch ngôn ngữ C
- g++ Trình biên dịch ngôn ngữ C++
- Trình biên dịch gcc thường được đặt trong /usr/bin Khi biên dịch, gcc cần nhiều file hỗ trợ
như các tập tin thư viện liên kết trong /usr/lib, các file C header trong /usr/include
- Chương trình sau khi biên dịch có thể đặt bất kỳ đâu trên hệ thống miễn là HĐH có thể tìm thấy trong biến môi trường PATH hoặc theo đường dẫn tuyệt đối trong dòng lệnh
# which gcc
/usr/bin/gcc
# rpm -qf /usr/bin/gcc
gcc-4.1.2-52.el5
# which g++
/usr/bin/g++
# rpm -qf /usr/bin/g++
gcc-c++-4.1.2-52.el5
Lưu ý khi biên dịch trong Linux
Dùng g++ nếu chương trình có chứa mã C lẫn C++
Dùng gcc nếu chương trình chỉ có mã C
File thực thi tạo ra không có đuôi exe, dll như môi trường Windows
Biên dịch với GNU gcc, g++, make
Ví dụ đơn giản trong ngôn ngữ C
Soạn thảo 2 files: main.c và func.c
# vim func.c
/* func.c */
#include <stdio.h>
Trang 6void hello(){
printf("Hello World\n");
}
# vim main.c
/* main.c */
main(){
hello();
}
# gcc -v
# gcc -c func.c main.c
# gcc -o main main.o func.o
# /main
Hello World
Sử dụng biên dịch gcc [options] sources
các tùy chọn (options)
-c: sinh ra tập tin đối tượng o
-o: sinh ra tập tin output
-I: đặc tả thư mục chứa tập tin include
-l: đặc tả tên thư viện
-L: đặc tả đường dẫn đến thư viện
Dịch với make và Makefile để dịch tự động các bước trên
Soạn thảo Makefile
Makefile là 1 file đặc biệt dùng để quản lý các tập tin trong dự án
Chứa các quy tắc biên dịch
# vim Makefile
# Makefile
CC = gcc
main: main.o func.o
$(CC) -o main main.o func.o
main.o: main.c
$(CC) -c main.c
func.o: func.c
$(CC) -c func.c
# /main
Hello World
Lệnh make sẽ đọc các bước dịch trong Makefile để dịch và sinh ra chương trình main
tương thích với mọi phiên bản Linux
Ví dụ đơn giản trong ngôn ngữ C++
# vim hello.cpp
Trang 7#include <iostream>
using namespace std;
// main() is where program execution begins.
int main()
{
cout << "Hello World \n"; // prints Hello World
return 0;
}
# g++ -c hello.cpp
# g++ -o main hello.o
# /main
Hello World
Phần mềm mã nguồn được đóng gói sử dụng kiểu GNU Zip (.gz) hoặc BZip2 (bz2).:
<filename>.tar.gz or <filename>.tar.bz2
Giải nén bằng lệnh:
# tar xvzf <filename>.tar.gz
# tar xvjf <filename>.tar.bz2
Đọc file INSTALL hoặc README để có những chỉ dẫn riêng biệt của gói cài đặt
Sau khi giải nén, chuyển đến thư mục của gói source:
# cd <extracted_dir_name>
Chạy shell script configure kiểm tra cấu hình hệ thống, thư viện cần thiết và tạo ra Makefile cho
biên dịch, cần đọc file README, INSTALL để có những option cần thiết (Type "./configure
help" for more information Remove config.cache file if you need to run /configure again)
# /configure
# ls -l Makefile
Khi chạy configure xong kết quả sẽ cho biết các gói phụ thuộc nào cần thiết để cài đặt Nếu như
hệ thống 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
Build gói source bằng lệnh make:
# make
Cài đặt binary, library, confige file
# make install
Lệnh 'make install' để chép các file thực thi đó sang đúng vị trí của nó trên hệ thống File thực thi
thường được cài đặt vào thư mục /usr/local/bin
Khi có thay đổi trong source, cần biên dịch, cài đặt lại
Sau khi cài đặt xong, để gỡ bỏ gói source, dùng lệnh sau:
# make uninstall
Trang 8Nếu cần thiết xóa bỏ luôn thư mục source cài đặt:
# rm -rf <extracted_dir_name>
Cài đặt bộ gõ tiếng việt xvnkb/x-unikey cho X-window
Địa chỉ xvnkb: http://xvnkb.sourceforge.net/
Địa chỉ x-unikey: http://www.unikey.org/linux.php
Cài đặt công cụ biên dịch và nhóm thư viện hỗ trợ
# yum groupinstall 'Development Libraries' -y
# yum install gcc gcc++ -y
Tải source xvnkb về
# wget http://ncu.dl.sourceforge.net/project/xvnkb/xvnkb/0.2.11/xvnkb-0.2.11.tar.gz
Giải nén và cài đặt
# tar -xvf xvnkb-0.2.11.tar.gz
# cd xvnkb-0.2.11
# /configure
# make
# make install
Chạy xvnkb trong môi trường đồ họa
# xvnkb
Cài đặt font chữ unicode
Copy các font unicode: arial.ttf, tahoma.ttf, times.ttf, verdana.ttf từ thư mục C:\Windows\Fonts
đến thư mục /usr/share/fonts/default/Type1
# cd /usr/share/fonts/default/Type1
# ls *.ttf
arial.ttf tahoma.ttf times.ttf verdana.ttf
Cập nhật font chữ
# fc-cache -fv
Mở Open Office để kiểm tra font unicode đã được cài đặt
Quản lý thư viện
Thư viện là file chứa các đoạn mã lệnh và dữ liệu được tổ chức thành các hàm (function), các lớp (class) nhằm cung cấp dịch vụ, chức năng nào đó cho các chương trình chạy trên máy tính.
Thư viện gồm 3 loại: Static, Dynamic và Shared Thường thì các thư viện ở dạng mã nhị phân,
không phải dạng văn bản thuần túy (plain text) – là các ký tự mà con người có thể đọc hiểu được.
Khi biên dịch 1 chương trình đang ở dạng các file source code (gồm tập các câu lệnh, khai báo được viết bằng 1 ngôn ngữ lập trình cấp cao như C/C++, Java…) sang dạng executable (hay
binary – tập các mã máy nhị phân mà chỉ CPU mới hiểu được) thì nhiều hàm chức năng của
chương trình được liên kết từ các thư viện Quá trình biên dịch này do bộ biên dịch (Compiler)
đảm nhiệm
Trang 9Các thư viện được liên kết động và được dùng chung bởi nhiều ứng dụng được gọi là shared library Trên Windows các file thư viện có phần mở rộng là dll , còn Linux các file thư viện
thường là “.a”, “.so”, “.sa” và được bắt đầu bằng tiếp đầu ngữ “lib” Ví dụ: libutil.a hoặc libc.so
^ Đây là tên các thư viện trong Linux
Thư viện “.so” được ưu tiên sử dụng so với “.a” Nếu không tìm thấy file thư viện “.so” trên thì
“.a” mới được xem xét đến
Khi biên dịch, thông thường chương trình liên kết (ld) sẽ tìm thư viện trong 2 thư mục chuẩn
/usr/lib và /lib
Các hệ thống Linux có hai kiểu chương trình thi hành được
Các chương trình thi hành được liên kết tĩnh (statically linked) chứa tất cả các hàm thư viện mà chúng cần để thi hành Tất cả các hàm thư viện được liên kết vào chương trình thi hành được này Chúng là những chương trình đầy đủ, chạy không phụ thuộc vào thư viện bên ngoài Một lợi thế của các chương trình liên kết tĩnh là chúng sẽ làm việc mà không cần cài đặt các điều kiện cần có trước
Các chương trình thi hành được liên kết động (dynamically linked) là các chương trình nhỏ hơn nhiều, chưa đầy đủ, theo nghĩa rằng chúng đòi hỏi các hàm từ các thư viện chia
sẻ bên ngoài để chạy Ngoài việc là nhỏ hơn, các chương trình liên kết động cho phép một gói chỉ rõ các thư viện cần có trước mà không cần phải chứa sẵn các thư viện trong gói Việc sử dụng liên kết động cũng cho phép nhiều chương trình đang chạy chia sẻ một bản sao của một thư viện thay vì chiếm bộ nhớ để chứa nhiều bản sao của cùng một mã Với những lý do này, hầu hết các chương trình hiện nay sử dụng liên kết động.
Tổ chức các file trên hệ thống
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 đã cài
đặt trên máy, các file trong thư mục này 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, các 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 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
Một ví dụ trên hệ thống Linux là lệnh ln (/bin/ln), tạo ra các liên kết giữa các tập tin, (liên kết
cứng (hard) hoặc các liên kết mềm (soft)) Lệnh ln sử dụng các thư viện chia sẻ, do đó nếu các
thư viện liên kết động không làm việc, thì lệnh ln có thể không chạy Để tránh khỏi khả năng
Trang 10này, hệ thống Linux có một phiên bản liên kết tĩnh của chương trình ln dưới dạng chương trình sln (/sbin/sln)
Độ lớn của chương trình sln và ln
# ls -lh /sbin/sln /bin/ln
-rwxr-xr-x 1 root root 30K Mar 1 2010 /bin/ln
-rwxr-xr-x 1 root root 548K Jun 28 2011 /sbin/sln
Xác định các shared library của chương trình
Lệnh ldd (List Dynamic Dependencies) hiển thị thông tin về các thư viện cần thiết của một
chương trình thi hành được
# ldd /sbin/sln /bin/ln
/sbin/sln:
not a dynamic executable
/bin/ln:
linux-gate.so.1 => (0x009a0000)
libc.so.6 => /lib/libc.so.6 (0x00b8a000)
/lib/ld-linux.so.2 (0x002be000)
# ls -l /lib/libc.so.6
lrwxrwxrwx 1 root root 11 Oct 17 2011 /lib/libc.so.6 -> libc-2.5.so
# rpm -qf /usr/bin/ldd
glibc-common-2.5-58.el5_6.4
Lệnh ldconfig để xử lý tất cả các thư viện từ ld.so.conf cũng như những thư viện từ các thư mục
/lib và /usr/lib
ldconfig [OPTION ]
Thường dùng 2 option cho lệnh này
-p: chỉ hiển thị nội dung hiện tại của cache, không tạo lại cache.
-v: hiển thị quá trình thực hiện việc tạo lại cache.
Lệnh ldconfig để hiển thị ld.so.cache
# ldconfig -p | less
# ldconfig -p | grep /usr/lib | less
# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
Lỗi không tìm thấy thư viện
error while loading shared libraries: cannot open shared object file: no such file or
directory
Cách giải quyết là sử dụng lệnh ldconfig để thiết lập lại các file config Thêm dòng /usr/local/lib
vào tập tin /etc/ld.so.conf và chạy lệnh ldconfig
# ldconfig -v
Hoặc thêm thư viện vào biến môi trường LD_LIBRARY_PATH
# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib