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
,Zypper
vàpacman-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.