Đồng bộ và quản lí các file cấu hình

1. Giới thiệu

Mỗi chúng ta luôn có những cài đặt, cấu hình riêng của mình cho hệ thống hoặc các phần mềm mà mình sử dụng. Các cài đặt này càng ngày sẽ càng nhiều hơn theo thời gian, thậm chí không ít người có cả nghìn dòng config riêng. Và rồi một ngày, khi mà bạn bắt đầu dùng thêm một máy tính mới ở cty hoặc cài lại chiếc máy tình mình đang sử dụng, công việc đầu tiên của bạn sẽ là cấu hình mọi thứ cho giống với hệ thống cũ, giống như những gì vẫn quen thuộc với mình. Tuy nhiên, nếu bạn chưa có sự chuẩn bị nào thì rất có thể đây sẽ là một công việc không hề đơn giản và mất nhiều thời gian. Vì vậy hôm nay mình sẽ giới thiệu với mọi người một vài cách để có thể back up các file cấu hình hoặc đồng bộ chúng giữa nhiều máy tính khác nhau. Bài viết sẽ tập trung vào các hệ thống chạy trên nền tảng Linux.

Đối với hệ thống Linux, các cấu hình thường được lưu trong các file ẩn hoặc forder ẩn ngay tại thư mục HOME. Và một số các config mà bạn có thể cần backup như bash, vim, emac, tmux...

2. Backup sử dụng Dropbox

Dropbox.jpg

Hiện nay trong số các các dịch vụ cloud stogare phổ biến có hỗ trợ Linux thì Dropbox chính là cái tên nổi bật nhất. Việc sử dụng Dropbox để đồng bộ các file config là khá dễ dàng.

Do Dropbox không cho phép bạn đồng bộ các file nằm ngoài thư mục some_path/Dropbox/. Do đó để đồng bộ các file cấu hình bạn cần sử dụng đến symlinks.

  • Tất nhiên đầu tiên bạn sẽ cần cài đặt Dropbox trên hệ thống của mình.
  • Chuyển các file cài đặt của mình vào thư mục dropbox (giả sử thư mục mặc định của dropbox bạn đặt tại ~/Dropbox/ và file config của bạn là ~/.bashrc
cd ~/
mv .bashrc ~/Dropbox
  • Tạo 1 soft symlink từ thư mục gốc tới file ~/Dropbox/.bashrc
ln -s ~/Dropbox/.bashrc ~/ -f

Mặc định lệnh ln sẽ không check xem đường dẫn bạn điền vào có đúng không nên để chắc chắn bạn có thể phải check lại xem symlink của mình đã hoạt động chưa.

cat ~/.bashrc
  • Khi muốn đồng bộ các file config sang một máy tính khác, bạn cũng cần cài đặt dropbox trên máy đó. Sau khi các file config đã được đồng bộ từ hệ thống máy của dropbox xuống máy đó, bạn cũng cần tạo tiếp một soft symlink tương tự như trên
ln -s ~/Dropbox/.bashrc ~/ -f

Tùy chọn -f sẽ ghi đè file config có sẵn trên hệ thống mới. Nếu cần bạn có thể phải backup lại file này ra một nơi khác. Đến đây bạn đã có thể yên tâm về các file config của mình do chúng đã an toàn trên server của dropbox và các config sẽ tự động đồng bộ giữa các máy tính khác nhau. Tuy nhiên việc sử dụng dropbox theo mình chưa phải là giải pháp tối ưu nhất trong việc này bởi một số vấn đề sau

  • Bạn sẽ không thể quản lí các file config của mình theo các phiên bản
  • Không thuận tiệc khi xử lí các conflict

3. Sử dụng Git để đồng bộ và quản lí các file config

Đây là cách rất thuận tiện với những ai đã có kinh nghiệm sử dụng Git. Bằng cách này bạn sẽ hoàn toàn chủ động trong việc đồng bộ các file config của mình và đôi khi có những config sai gây ảnh hưởng đến hệ thống thì bạn cũng có thể dễ dàng quay trở lại các phiên bản trước đó của file config.

Đầu tiên bạn cần cài đặt Git trên hệ thống của mình (Đối với Ubuntu hoặc Debian)

sudo apt-get udpate && sudo apt-get install git

Đăng nhập vào Git

git config --global user.name "your name"
git config --global user.email "[email protected]"

Tiếp đến bạn cần 1 nơi lưu trữ online các các Git repo của mình. Hai lựa chọn hàng đầu cho việc này là GitHub và BitBucket. Ở đây mình sẽ sử dụng BitBucket bởi đối với các tài khoản miễn phí thì BitBucket cho phép bạn để các repo ở trạng thái private còn đối với GitHub nếu bạn muốn đặt các repo của mình ở dạng private thì sẽ cần trả phí. Và do các file config đôi khi sẽ có những thông tin cần được private nên BitBucket là lựa chọn của mình. github_vs_bitbucket.png

Để bắt đầu với BitBucket, bạn cần tạo một tài khoản tại đây

Coppy và add publish SSH key của bạn vào tài khoản BitBucket (tham khảo thêm hướng dẫn tại đây)

Screenshot from 2016-01-26 16:38:49.png

Tạo một repo mới trên BitBucket

Screenshot from 2016-01-26 16:48:19.png

Đến đây bạn có thể tạo Git repo cho cả thư mục Home của mình trong đó có những file config hoặc tạo riêng một thư mục chứa các file config và tạo repo git cho thư mục đó.

3.1 Sử dụng thư mục Home làm Git Repo

Để Git chỉ quản lí các file config thay vì tất các các file trong thư mục home, bạn cần thêm thêm tất cả các file ở tại thư mục home vào file .gitignore

cd ~/
echo "*" > .gitignore

Thêm remote origin cho repo Git của bạn

git remote add origin [email protected]:user_name/config-files.git

Sau đó bạn cần thêm lần lượt những file cần được Git quản lí bằng lệnh

git add -f .bashrc
git add -f .vimrc
...

Với cách này bạn sẽ coi cả thư mục gốc của mình là một Repo của Git tuy nhiên sẽ chỉ push lên những file config cần thiết.

Commit đầu tiên cho repo config

git commit -m "Initial configuration files"

Push các file config lên origin

git push origin master

3.2 Sử dụng thư mục riêng để lưu các file config

Tạo thư mục chứa các file config và move tất các các file bạn muốn đồng bộ vào đây.

cd ~
mkdir config_files
mv ~/.vimrc .
mv ~/.bashrc .
...

Thêm remote origin cho repo Git của bạn

git remote add origin [email protected]:user_name/config-files.git

Tương tự với cách sử dụng Dropbox, bạn sẽ cần tạo các symlink cho các file này từ thư mục config_file link tới vị trí đúng của nó.

ln -s ~/config_file/.vimrc ~/ -f
ln -s ~/config_file/.bashrc ~/ -f
...

Ở đây mình dùng đường dẫn tuyệt đối thay vì đường dẫn tương đối vì dùng đường dẫn tương đối có thể bị lỗi khi tạo các symlink. Add các file này và tạo commit

git add .
git commit -m "Initial configuration files"

Push lên origin

git push origin master

4. Pull các file config về một máy mới

Khi các file config của bạn đã được đồng bộ lên BitBucket, bạn muốn pull các file này về một máy tính mới, công việc cũng khá giống với phần 3. Bạn sẽ cần cài đặt và cấu hình Git

sudo apt-get udpate && sudo apt-get install git
git config --global user.name "your name"
git config --global user.email "[email protected]"

4.1 Dùng thư mục Home làm git repo

Tạo git repo cho thư mục Home và add remote là repo BitBucket của bạn

cd ~
git init
git remote add origin [email protected]:user_name/config-files.git

Sau đó bạn cần fetch các các file và reset các commit

git fetch --all
git reset --hard origin/master

Khi bạn có một thay đổi nào đó trên 1 file config ví dụ .bashrc thì sẽ cần push những thay đổi đó lên repo BitBucket

git add .bashrc
git commit -m "edit .bashrc"
git push origin master

4.2 Sử dụng thư mục chứa các file config riêng

Clone các file config từ repo trên BitBucket, một thư mục chứa các file config sẽ được tạo ra

git clone https://bitbucket.org/user_name/config-files.git
cd ~/config-files

Sau đó bạn chỉ cần tạo link cho các file config trong thư mục config-files tới vị trí đúng của nó trong hệ thống.

ln -s ~/config_file/.vimrc ~/ -f
ln -s ~/config_file/.bashrc ~/ -f
...

Tham khảo

https://www.linux.com/learn/tutorials/431119:weekend-project-using-git-to-manage-config-files http://www.nixtutor.com/linux/sync-config-files-across-multiple-computers-with-dropbox/ https://en.wikipedia.org/wiki/Symbolic_link