Quản lý thư mục /etc với Etckeeper trên Linux Image Quản lý thư mục /etc với Etckeeper trên Linux

Bài viết này giới thiệu với các bạn về cách quản lý thư mục /etc với Etckeeper trên hệ điều hành Linux. Giới thiệu sơ lược về công cụ etckeeper cùng với các ví dụ cách quản lý thư mục /etc từ đó giúp cho chúng ta có thể tự tìm hiểu và tự học Linux cơ bản dễ dàng hơn.

1. Giới thiệu về Etckeeper

Đối với hệ điều hành Linux thì thư mục /etc là nơi chứa các tệp và thư mục cấu hình trên toàn hệ thống của máy chủ. Đây là một vị trí trung tâm của máy chủ lưu trữ tất cả các tệp cấu hình trên toàn hệ thống. Để có thể theo dõi các thay đổi đối với các tệp cấu hình hệ thống chúng ta thường tạo các bản sao của các tệp cấu hình trước khi sửa đổi chúng. Như thế giúp cho chúng ta dể dàng phục hồi lại tệp gốc khi chúng ta sửa đổi tệp bị lỗi.

Để có thể quản lý thư mục etc một cách dể dàng chúng ta sử dụng công cụ Etckeeper. Nó cho phép chúng ra lưu trữ các thay đổi trong thư mục etc trên một hệ thống kiểm soát phiên bả n(VCS) như git, mercurial, bazaar hoặc darcs repository. Do đó, nó cho phép chúng ta sử dụng git để xem xét hoặc quai lại trước khi đã thay đổi.

Một số chức năng của etckeeper:

  • Hỗ trợ với các trình quản lý gói bao gồm APT, YUM, DNF, Zypperpacman-g2 để tự động cam kết thay đổi được thực hiện trên thư mục /etc trong quá trình nâng cấp gói.
  • Nó giúp chúng ta theo dõi dữ liệu tệp (như quyền truy cập tệp) mà git thường không hỗ trợ điều này rất quan trọng đối với thư mục /etc
  • Ngoài ra còn bao gồm cả cron job và bộ đếm thời gian systemd, mỗi công việc có thể commit các thay đổi đến /etc tự động một lần mỗi ngày.

2. Cài đặt Etckeeper

Nếu gói Etckeeper không có trên hệ thống của chúng ta, chúng ta có thể dễ dàng cài đặt gói như sau:

  • Đối với hệ thống sử dụng bản phân phối RedHat(RHEL), CentOS chúng ta cần thêm kho EPEL trước khi cài đặt bằng cách thực hiện lệnh sau:

    [root@blogd-net-lab01 ~]# yum install epel-release
    [root@blogd-net-lab01 ~]# yum install etckeeper
    
  • Đối với hệ thống sử dụng bản phân phối Debian, Ubuntu chúng ta thực thi lệnh bên dưới:

    apt-get install etckeeper
    
  • Đối với hệ thống sử dụng bản phân phối Fedora 22+ chúng ta thực thi lệnh bên dưới:

    dnf install etckeeper
    
  • Đối với hệ thống sử dụng bản phân phối penSUSE 15 chúng ta thực thi lệnh bên dưới:

    zypper install etckeeper
    

Sau khi chúng ta đã cài đặt thành công gói etckeeper chúng ta có thể định cấu hình và kiểm tra tệp cấu hình của nó /etc/etckeeper/etckeeper.conf. Nếu chúng ta muốn chỉnh sửa tệp cấu hình mặc định của chúng thì có thể sử dụng trình soạn thảo văn bản để chúng sửa, như trình soạn thảo văn bản vi:

[root@blogd-net-lab01 ~]# vim /etc/etckeeper/etckeeper.conf

Tệp cấu hình /etc/etckeeper/etckeeper.conf chứa một số tùy chọn các tùy chọn có mô tả sử dụng cho phép chúng ta đặt version control system(VCS), chuyển các tùy chọn cho VSC, để bật hoặc tắt bộ hẹn giờ, bật hoặc tắt cảnh báo file đặc biệt,... Ngoài ra, chúng ta có thể đặt trình quản lý gói như apt, yum, dnf, dpkg, rpm,... để làm việc với etckeeper.

3. Sử dụng etckeeper

3.1. Khởi tạo Git Repository và thực hiện commit đầu tiên

Chúng ta đã cấu hình etckeeper chúng ta cần khởi tạo Git Repository để bắt đầu theo dõi các thay đổi trong thư mục etc bằng cách thực thi lệnh sau:

[root@blogd-net-lab01 ~]# etckeeper init
Initialized empty Git repository in /etc/.git/

Sau khi khởi tạo Git Repository chúng ta thực hiện bước tiếp theo cho etckeeper để có thể làm việc tự động, chúng ta cần phải chạy commit đầu tiên bắt đầu theo dõi những thay đổi trong thư mục /etc như bên dưới:

[root@blogd-net-lab01 ~]# etckeeper commit "first commit file etc"
[master (root-commit) dbe966e] first commit file etc
 639 files changed, 56040 insertions(+)
 create mode 100755 .etckeeper
 create mode 100644 .gitignore
 create mode 100644 .updated
 create mode 100644 DIR_COLORS
 create mode 100644 DIR_COLORS.256color
 create mode 100644 DIR_COLORS.lightbgcolor
 create mode 100644 GREP_COLORS
 create mode 100644 NetworkManager/NetworkManager.conf
 create mode 100755 NetworkManager/dispatcher.d/04-iscsi
 create mode 100755 NetworkManager/dispatcher.d/11-dhclient
 create mode 100755 NetworkManager/dispatcher.d/20-chrony
 create mode 100644 PackageKit/PackageKit.conf
 create mode 100644 PackageKit/Vendor.conf
 create mode 100755 X11/xinit/xinitrc.d/50-systemd-user.sh
 create mode 100644 X11/xorg.conf.d/00-keyboard.conf
 create mode 100644 aliases
...

3.2. Thay đổi và thực hiện commit mới

Sau khi chúng ta thực hiện commit đầu tiên thì etckeeper sẽ theo dõi tất cả các thay đổi trong thư mục /etc. Ví dụ chúng ta thực hiện thay đổi một tập tin trong thư mục /etc sau đó lưu lại thay đổi. Sau đó chúng ta thực thi lệnh sau để hiển thị các tệp đã thay đổi kể từ lần lưu cuối cùng. Lệnh này giúp chúng ta thấy những thay đổi trong thư mục /etc chưa thực hiện commit:

[root@blogd-net-lab01 ~]# etckeeper vcs status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   sysconfig/network-scripts/ifcfg-ens33

no changes added to commit (use "git add" and/or "git commit -a")

Sau đó chúng ta thực hiện commit những thay đổi gần đây bằng cách thực thi lệnh bên dưới:

[root@blogd-net-lab01 ~]# etckeeper commit "change file /etc/sysconfig/network-scripts/ifcfg-ens33"
[master 42d6ed4] change file /etc/sysconfig/network-scripts/ifcfg-ens33
 1 file changed, 1 insertion(+), 2 deletions(-)

3.2. Xem lại nhật ký các commit

Khi chúng ta muốn xem lại nhật ký của tất cả các commit. Kết quả hiển thị gồm ID của commit và nội dung của commit bằng cách chạy lệnh bên dưới:

[root@blogd-net-lab01 ~]# etckeeper vcs log
commit 42d6ed428efebd618a0fbbf3397075a2d3e09c80 (HEAD -> master)
Author: root <root@blogd-net-lab01>
Date:   Fri Jan 31 00:21:31 2020 +0700

    change file /etc/sysconfig/network-scripts/ifcfg-ens33

commit dbe966ec4e6928de42b5f69fc19478de4c2007c4
Author: root <root@blogd-net-lab01>
Date:   Sun Jan 26 23:27:03 2020 +0700

    first commit file etc

Chúng ta cũng có thể hiển thị chi tiết của một commit, chỉ cần chỉ định ID của commit hoặc một vài ký tự đầu tiên cảu commit như sau:

[root@blogd-net-lab01 ~]# etckeeper vcs show 42d6ed428efebd618a0fbbf3397075a2d3e09c80
commit 42d6ed428efebd618a0fbbf3397075a2d3e09c80 (HEAD -> master)
Author: root <root@blogd-net-lab01>
Date:   Fri Jan 31 00:21:31 2020 +0700

    change file /etc/sysconfig/network-scripts/ifcfg-ens33

diff --git a/sysconfig/network-scripts/ifcfg-ens33 b/sysconfig/network-scripts/ifcfg-ens33
index 6bc43eb..67da63d 100644
--- a/sysconfig/network-scripts/ifcfg-ens33
+++ b/sysconfig/network-scripts/ifcfg-ens33
@@ -1,6 +1,5 @@
 TYPE="Ethernet"
-PROXY_METHOD="none"
-BROWSER_ONLY="no"
+PROXY_METHOD="none""
 BOOTPROTO="dhcp"
 DEFROUTE="yes"
 IPV4_FAILURE_FATAL="no"

Hoặc

[root@blogd-net-lab01 ~]# etckeeper vcs show 42d6ed42
commit 42d6ed428efebd618a0fbbf3397075a2d3e09c80 (HEAD -> master)
Author: root <root@blogd-net-lab01>
Date:   Fri Jan 31 00:21:31 2020 +0700

    change file /etc/sysconfig/network-scripts/ifcfg-ens33

diff --git a/sysconfig/network-scripts/ifcfg-ens33 b/sysconfig/network-scripts/ifcfg-ens33
index 6bc43eb..67da63d 100644
--- a/sysconfig/network-scripts/ifcfg-ens33
+++ b/sysconfig/network-scripts/ifcfg-ens33
@@ -1,6 +1,5 @@
 TYPE="Ethernet"
-PROXY_METHOD="none"
-BROWSER_ONLY="no"
+PROXY_METHOD="none""
 BOOTPROTO="dhcp"
 DEFROUTE="yes"
 IPV4_FAILURE_FATAL="no"

3.3. Cách thu hồi các thay đổi

Công cụ etckeeper giúp chúng ta theo dõi các thay đổi trong thư mục /etc của mình và thu hồi các thay đổi khi cần thiết. Ví dụ chúng ta có thể hủy các thay đổi và quay về trạng thái trước khi thay đổi của thư mục /etc được lưu trữ ở một commit cụ thể:

[root@blogd-net-lab01 ~]# etckeeper vcs log
commit 42d6ed428efebd618a0fbbf3397075a2d3e09c80 (HEAD -> master)
Author: root <root@blogd-net-lab01>
Date:   Fri Jan 31 00:21:31 2020 +0700

    change file /etc/sysconfig/network-scripts/ifcfg-ens33

commit dbe966ec4e6928de42b5f69fc19478de4c2007c4
Author: root <root@blogd-net-lab01>
Date:   Sun Jan 26 23:27:03 2020 +0700

    first commit file etc
[root@blogd-net-lab01 ~]# etckeeper vcs checkout dbe966ec
Note: checking out 'dbe966ec'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at dbe966e first commit file etc

3.4. Cách bật các thay đổi để commit tự động

Công cụ etckeeper đã kết hợp với dịch vụ và hẹn giờ cho systemd. Để khởi chạy Autocommit khi có các thay đổi trong thư mục /etc, chỉ cần khởi động etckeeper.timer như sau:

[root@blogd-net-lab01 ~]# systemctl start etckeeper.timer
[root@blogd-net-lab01 ~]# systemctl status etckeeper.timer
● etckeeper.timer - Daily autocommit of changes in /etc directory
   Loaded: loaded (/usr/lib/systemd/system/etckeeper.timer; disabled; vendor preset: disabled)
   Active: active (waiting) since Fri 2020-01-31 00:25:06 +07; 10s ago
  Trigger: Fri 2020-01-31 00:29:20 +07; 4min 3s left
     Docs: man:etckeeper(8)

Jan 31 00:25:06 blogd-net-lab01 systemd[1]: Started Daily autocommit of changes in /etc directory.

4. Lời kết

Qua bài trên, giúp cho chúng ta biết cách quản lý thư mục /etc với Etckeeper trên hệ điều hànhLinux. Từ đây giúp cho chúng ta có thể thay dõi những thay dõi trên thư mục etc từ đây giúp cho chúng ta có thể quản lý máy chủ của chúng ta cách tốt nhất.