Thứ hai, 20/04/2015 | 00:00 GMT+7

Cách quản lý / vv với Kiểm soát phiên bản bằng Etckeeper trên CentOS 7

Trong hệ sinh thái Linux, việc cài đặt, bảo trì và nâng cấp phần mềm định kỳ là điều bắt buộc. Tuy nhiên, theo dõi các thay đổi được thực hiện đối với file cấu hình local vẫn cần thiết. Trái ngược với chế độ chờ cũ là tạo bản sao của các file cấu hình trước khi thực hiện thay đổi, etckeeper cho phép bạn theo dõi các sửa đổi bằng cách sử dụng repository Git, Mercurial, Bazaar hoặc Darcs, giống như cách bạn làm với một dự án phát triển phần mềm.

Ngoài ra, etckeeper tích hợp liền mạch với yum để tự động commit các thay đổi được thực hiện đối với nội dung của folder /etc khi các gói được nâng cấp. Điều này sẽ cho phép bạn hoàn nguyên về các version trước của file cấu hình nếu bạn muốn - hoặc cần - làm như vậy.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần :

  • Một CentOS 7 Server với user không phải root có quyền sudo , bạn có thể cài đặt theo các bước từ 1 đến 4 trong hướng dẫn này .

etckeeper chỉ theo dõi quyền của file , metadata và các thay đổi. Nó không cung cấp các công cụ sẵn có để thực hiện việc khôi phục file , vì vậy cần phải hiểu về các nguyên tắc cơ bản của hệ thống kiểm soát sửa đổi.

Trong bài viết này, ta sẽ sử dụng Git, là VCS mặc định mà etckeeper sử dụng. Nếu bạn muốn làm mới bộ nhớ của bạn về Git và kiểm soát version , bạn có thể xem loạt bài hướng dẫn này . Mặc dù bạn sẽ không sử dụng Git trực tiếp trong hướng dẫn này, bạn có thể chạy các lệnh dành riêng cho Git thông qua etckeeper.

Bước 1 - Cài đặt etckeeper

Trong bước này, ta sẽ cài đặt etckeeper.

Trước tiên, bạn cần kích hoạt EPEL (Gói bổ sung cho Enterprise Linux) trên server CentOS 7 của bạn , vì đó là kho chứa etckeeper.

sudo yum update && sudo yum install epel-release 

Sau đó cài đặt etckeeper.

sudo yum update && sudo yum install etckeeper 

Git đi kèm với CentOS 7 theo mặc định, vì vậy ta không cần cài đặt nó.

Bước 2 - Tùy chỉnh cấu hình của thợ khắc

Khi bạn đã cài đặt etckeeper, bước tiếp theo là cập nhật file cấu hình /etc/etckeeper/etckeeper.conf .

Đầu tiên, mở file cấu hình bằng Nano hoặc editor yêu thích của bạn.

sudo nano /etc/etckeeper/etckeeper.conf 

Sau đây là các biến cần thiết mà bạn cần cấu hình để etckeeper hoạt động bình thường. Vui lòng để phần còn lại của cài đặt được comment .

Đầu tiên, dưới comment # The VCS to use. , hãy đảm bảo VCS="git" được bỏ ghi chú (tức là không có dấu # ở đầu dòng). Theo mặc định, tùy chọn này sẽ được bỏ ghi chú vì git là VCS mặc định được sử dụng bởi cài đặt etckeeper trên CentOS 7.

Nếu bạn muốn ngăn etckeeper tự động áp dụng các thay đổi mỗi ngày một lần, hãy đảm bảo AVOID_DAILY_AUTOCOMMITS=1 được bỏ ghi chú. Để quyết định xem bạn có muốn đặt điều này hay không, bạn nên xem xét liệu các file cấu hình hệ thống của bạn có thay đổi thường xuyên hay không (ví dụ: môi trường thử nghiệm thường thay đổi hàng ngày). Nếu vậy, bạn nên comment dòng đó; nếu không, bạn có thể để lại comment .

Nếu bạn muốn ngừng cài đặt yum khi có những thay đổi chưa được commit trong /etc , hãy đảm bảo bỏ ghi chú AVOID_COMMIT_BEFORE_INSTALL=1 . Điều này sẽ yêu cầu commit thủ công trước khi sử dụng yum để cài đặt các gói. Nếu không, hãy để nó comment và yum sẽ tự động xác nhận các file cập nhật trước khi chạy cài đặt. Sự lựa chọn này hoàn toàn phụ thuộc vào bạn; nó phụ thuộc phần lớn vào môi trường của bạn và số lượng thay đổi. Điều này giống với ví dụ trước, ngoại trừ lần này nó sẽ phụ thuộc vào tần suất mà bạn cài đặt các gói.

Khi bạn cập nhật xong các tùy chọn, hãy lưu file .

Bước 3 - Khởi tạo Kho lưu trữ Git

Trong bước này, ta sẽ khởi tạo repository Git trong /etc

Đầu tiên, thay đổi thành folder /etc

cd /etc 

Tiếp theo, khởi tạo repository bằng cách chạy lệnh sau.

sudo etckeeper init 

Bạn sẽ nhận được thông báo sau:

Initialized empty Git repository in /etc/.git/ 

Đến đây bạn sẽ thấy .git và file .gitignore bên trong /etc Ví dụ: nếu bạn chạy lệnh sau:

ls -la /etc | grep git 

Bạn sẽ thấy những dòng này có trong kết quả :

drwx------.  7 root     root       4096 Apr  2 21:42 .git -rw-r--r--.  1 root     root        874 Apr  2 21:42 .gitignore 

Lưu ý : .git phải được bảo vệ trong hệ thống local (do đó, quyền đọc, ghi và thực thi chỉ dành cho user cấp trên); bởi vì hệ thống kiểm soát version không tự theo dõi các quyền của file , thay vào đó, etckeeper cung cấp tính năng này.

Thư .git chứa một số file cấu hình và mô tả cũng như các folder con khác dành cho việc sử dụng chính Git. Tệp .gitignore , chỉ định các file chưa được theo dõi rõ ràng mà git nên bỏ qua, nhằm được quản lý toàn bộ bởi etckeeper. Nó không được khuyến khích để chỉnh sửa nó bằng tay, với một ngoại lệ.

Nếu có một số file nhất định mà bạn không muốn theo dõi bằng cách sử dụng kiểm soát version , bạn có thể thêm chúng vào file .gitignore theo cách thủ công. Để ngừng theo dõi file , trước tiên hãy mở .gitignore để chỉnh sửa.

sudo nano .gitignore 

Dòng cuối cùng của file sẽ đọc phần # end section managed by etckeeper . Thêm tên file của các file bạn muốn bỏ qua, một tên trên mỗi dòng, phía trên tên file này.

file_to_ignore another_file_to_ignore # end section managed by etckeeper 

Sau đó, lưu file .

Ngoài ra, bạn cần phải xóa các file đó khỏi bộ nhớ cache hiện đang được git quản lý vì bạn đã khởi tạo repository local trước đó.

etckeeper vcs rm --cached file_to_ignore 

Lặp lại lệnh trên cho nhiều file như trước đó bạn đã thêm vào .gitignore .

Bước 4 - Commit /etc với Kho lưu trữ Git

Trong bước này, ta sẽ commit ban đầu /etc .

Thêm commit đầu tiên của bạn rất dễ dàng; chỉ cần nhập lệnh sau. Mặc dù không hoàn toàn cần thiết, bạn nên thêm mô tả cho mỗi commit để có thể dễ dàng xác định chúng sau này.

sudo etckeeper commit "First commit of my /etc directory" 

Sau đó, bạn sẽ thấy danh sách kết quả của các file được commit vào repository của bạn, như bên dưới (bị cắt bớt):

create mode 100644 selinux/targeted/modules/active/modules/dnsmasq.pp create mode 100644 selinux/targeted/modules/active/modules/dnssec.pp create mode 100644 selinux/targeted/modules/active/modules/docker.pp create mode 100644 selinux/targeted/modules/active/modules/dovecot.pp 

Bước 5 - Thực hiện thay đổi

Trong bước này, ta sẽ thực hiện một số thay đổi đối với file trong /etc và commit chúng. Trong bước tiếp theo, ta sẽ hoàn nguyên những thay đổi này.

Đầu tiên, thực hiện thay đổi nội dung của file bạn chọn. Ví dụ: bạn có thể thêm một server mới vào giải pháp tên local của bạn bằng cách thêm một dòng bao gồm địa chỉ IP và tên server được liên kết của nó ở cuối /etc/hosts .

Đầu tiên, hãy mở file .

sudo nano /etc/hosts 

Sau đó, thêm dòng sau vào cuối file .

192.168.0.2    node01 

Lưu và đóng file . Bây giờ, hãy commit thay đổi này.

sudo etckeeper commit "Added a line to the hosts file" 

Cuối cùng, sửa đổi quyền của file .

sudo chmod 640 /etc/hosts 

Và sửa đổi quyền sở hữu của nó (đảm bảo thay thế sammy bằng tên user của bạn ).

sudo chown sammy:sammy /etc/hosts 

Bạn có thể kiểm tra các quyền hiện tại và quyền sở hữu của /etc/hosts .

ls -l /etc/hosts 

Đầu ra sẽ như thế này:

-rw-r----- 1 sammy sammy 675 Apr 17 15:01 /etc/hosts 

Bước 6 - Hoàn tác thay đổi

Bây giờ ta hãy kiểm tra khả năng khôi phục của etckeeper - không chỉ của file và nội dung của nó mà còn cả quyền và quyền sở hữu của nó.

Đầu tiên, hãy liệt kê những commit mà bạn đã thực hiện cho đến nay.

sudo git log --pretty=oneline 

Cột đầu tiên của kết quả là hàm băm SHA-1 xác định duy nhất commit ; thứ hai là mô tả mà bạn đã sử dụng khi gửi các thay đổi trước đó.

Đầu ra của bạn sẽ giống như thế này, với các hàm băm khác nhau.

d0958fbe4d947a6a3ad98141f9fe89d1fd1a95c4 Added a line to the hosts file 76c193da740a3e137fa000773a79de8bb5c898b7 First commit of my /etc directory 

Ghi lại hàm băm của mỗi lần commit . Bạn sẽ sử dụng chúng để quay trở lại trạng thái trước đó.

Hãy quay lại /etc/hosts về cách nó trông như thế nào trước khi ta bắt đầu hướng dẫn này. Thay thế các ký tự màu đỏ bằng hàm băm SHA-1 tương ứng với lần commit đầu tiên của bạn. Lưu ý bạn không cần chỉ định toàn bộ chuỗi băm SHA-1; một vài ký tự xác định duy nhất nó sẽ làm được.

sudo etckeeper vcs checkout 76c19 /etc/hosts 

Bây giờ ta có thể kiểm tra nội dung, quyền và quyền sở hữu của /etc/hosts để biết rằng chúng đã được thay đổi trở lại.

Nhìn vào vài dòng cuối cùng của file .

tail /etc/hosts 

Sẽ cung cấp cho bạn một kết quả như thế này, thiếu dòng 192.168.0.2 node01 mà ta đã thêm, như mong đợi.

...  # The following lines are desirable for IPv6 capable hosts ::1 test-etckeeper test-etckeeper ::1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 

Kiểm tra lại các quyền hiện tại và quyền sở hữu của /etc/hosts .

ls -l /etc/hosts 

Bạn sẽ thấy một kết quả giống như thế này.

-rw-r--r-- 1 root root 704 Apr 17 15:01 /etc/hosts 

Nội dung của file đã được khôi phục chính xác, cũng như các quyền và quyền sở hữu.

Kết luận

Trong hướng dẫn này, ta đã giải thích cách sử dụng etckeeper, một công cụ tuyệt vời để lưu trữ folder /etc của bạn trong repository lưu trữ Git. Bạn cũng có thể sử dụng kho Bazaar, Mercurial hoặc Darcs.

Dù VCS bạn chọn là gì, etckeeper sẽ giúp bạn cập nhật các file cấu hình của bạn và đảm bảo bạn luôn có thể quay trở lại trạng thái trước đó nếu bạn cần hoàn tác các thay đổi hoặc sửa đổi chức năng.


Tags:

Các tin liên quan

Cách cài đặt WordPress với OpenLiteSpeed trên CentOS 7
2015-04-16
Cách backup server CentOS 7 bằng Bacula
2015-04-13
Cách sử dụng MariaDB với Ứng dụng Django của bạn trên CentOS 7
2015-03-25
Cách thiết lập LEPP hai node trên CentOS 7
2015-03-19
Cách cài đặt Ruby on Rails với rbenv trên CentOS 7
2015-03-16
Cách cài đặt MediaWiki trên CentOS 7
2015-03-12
Cách cài đặt Elasticsearch, Logstash và Kibana (ELK Stack) trên CentOS 7
2015-03-10
Cách cài đặt Elasticsearch, Logstash và Kibana (ELK Stack) trên CentOS 7
2015-03-10
Cách chạy một mạng xã hội phân tán nguồn mở với Diaspora trên CentOS 7
2015-03-04
Cách lưu giữ log lịch sử hiệu quả với Graphite, carbon và sưu tập trên CentOS 7
2015-02-23