Có thể sử dụng etckeeper với một kho git dùng chung không?


9

Tôi nhận thấy rằng một số người đã khuyến nghị sử dụng etckeeper để áp dụng kiểm soát phiên bản cho thư mục / etc của tôi.

Tôi nhận thấy rằng cài đặt mặc định đặt một kho lưu trữ trên cùng một máy như / etc bạn đang cố gắng quản lý. Điều này hoạt động tốt đối với kiểm soát phiên bản, nhưng không mang lại lợi ích bổ sung khi tạo bản sao lưu ngoài máy chủ của các tệp - hoặc cho phép tôi sao chép các phần / etc từ máy nguồn này sang máy khác.

Có thể chia sẻ một kho lưu trữ git duy nhất trên một máy quản trị trung tâm, để trình quản lý trên mỗi máy chủ lưu trữ dữ liệu của nó ở cùng một nơi không?

(Bây giờ tôi đang làm một điều tương tự với svn và một số tập lệnh tùy chỉnh để cam kết và hoàn nguyên các tệp, nhưng tôi phải nhớ cam kết chúng khi tôi thực hiện thay đổi.)

Câu trả lời:


8

Đầu tiên, sử dụng cài đặt etckeeper, được định cấu hình cho git trong /etc/etckeeper/etckeeper.conf. Thực hiện theo phương pháp cài đặt của người quản lý cho bản phân phối của bạn hoặc từ nguồn.

Chẳng mấy chốc, bạn sẽ có /etc/.git

Bây giờ trên máy chủ của bạn, đảm bảo bạn có repo (an toàn) để đẩy tới ...

 # ssh faruser@farhost     
 # mkdir somedir cd somedir && git init && chmod 700 .git    
 # exit

Bây giờ trên máy chủ ban đầu, đẩy repo cục bộ của bạn đến máy chủ thông qua ssh:

# cd /etc && git push faruser@farhost:somedir

Tất nhiên ai đó có thể là người thân trong trường hợp này (theo quy ước ssh)

Thực hiện việc này bất cứ khi nào bạn thực hiện một thay đổi có ảnh hưởng đến / etc (và được đưa vào /etc/.git bởi etckeeper) và bạn sẽ có cả repos cục bộ và ngoài máy cho máy của mình.

Hoặc thiết lập ssh không mật khẩu và tạo một hook trong /etc/etckeeper/commit.d/ để nó tự động xảy ra nếu máy luôn được kết nối.


2
Điều này có vẻ tuyệt vời. Có cách nào để lưu trữ cục bộ được lưu trữ trong thư mục con của điều khiển từ xa không? Tôi muốn làm một cái gì đó tương tự, sử dụng một kho lưu trữ từ xa duy nhất để lưu trữ các cấu hình (riêng biệt) cho một số máy chủ.
Andrew Ferrier

có thể git pushlàm việc đối với repo git của bạn? có lẽ bạn cần tạo repo trần trong somedir hook theo commit.d thực sự là ý tưởng hay, tôi thích nó
larrycai

3

Có thể thêm một cấu hình nhánh từ xa để ánh xạ nhánh chính của kho lưu trữ etckeeper từ mỗi máy chủ sang một nhánh trên kho lưu trữ từ xa. Để làm điều đó, bạn có thể chạy các lệnh sau trên mỗi máy chủ:

cd /etc
git branch -m master $HOSTNAME
git remote add origin git@git.example.com:path/to/single/repo.git
git push -u origin master:$HOSTNAME

Sau khi thiết lập này, tiếp theo git pushsẽ gửi các thay đổi từ mỗi nhánh chính của máy chủ đến nhánh máy chủ chuyên dụng trên kho lưu trữ trung tâm.

Mặc dù các nhánh sẽ không có điểm bắt đầu chung, điều này cho phép dễ dàng so sánh cùng một tệp từ hai nhánh khác nhau, đại diện cho hai máy chủ khác nhau, bằng cách chạy:

git diff origin/server1 origin/server2 -- file

Điều này có thể được kết hợp với thiết lập tự động được đề xuất bởi jojoo .


git push -u master master: $ HOSTNAME không hoạt động ở đây. Repo từ xa là một repo trống rỗng. lỗi: src refspec master không khớp với bất kỳ.
Bertl 7/10/2016

1

Cách thực hiện tự động, toàn bộ câu chuyện:

Tạo tệp /etc/etckeeper/commit.d/60-push (đừng quên chmod + x nó) trên máy khách.

#!/bin/sh
git push central_server:/var/git/client_name.git master

Central_server được định nghĩa trong cấu hình ssh, xem bên dưới. /var/git/client_name.git là thư mục trên máy chủ trung tâm, chứa repo git.

~ / .Ssh / config từ root (!) Nên chứa cái gì đó như thế này:

host central_server
Hostname 192.168.0.1
User etckeeper #a user on the central server 
IdentityFile ~/.ssh/custom_key # key is in authorized_keys in
             #etcpeeper@central_server:~/.ssh/authorized_keys

Sau đó, bạn cần khởi tạo repo git trên máy chủ trung tâm

mkdir /var/git/client_name.git
su etckeeper
cd /var/git/client_name.git
git --bare init

Kiểm tra nó với một chỉnh sửa nhỏ trong / etc và sau đó, một người quản lý cam kết "thử đẩy".


1

Đó không phải là vấn đề. Nếu bạn muốn phân phối cấu hình rộng rãi, bạn sẽ thiết lập một kho lưu trữ khác ngoài kho repo cục bộ của mỗi máy và để mỗi máy được chọn từ đó nếu cần. Điều này không cho phép mỗi máy đi chệch (nhánh, thực sự) và duy trì kiểm soát sửa đổi.


Không chắc chắn làm thế nào để làm điều này (kho thứ hai). Bạn có thể xây dựng?
Brent

Bạn có thể cần sao chép một trong những repos vào "repo trung tâm" của bạn; bạn chỉ cần một. Từ đó, bạn có thể thực hiện các thay đổi và sau đó mỗi máy chủ có thể chọn các bản vá được lưu trữ trong bản sửa đổi. Cách bạn thiết lập ban đầu khác nhau giữa các DSCM. Để biết git, hãy xem kernel.org/pub/software/scm/git-core/docs/gittutorial.html
jldugger

-2

Bạn thực sự không muốn thực hiện chính sách sao lưu của mình. Mặc dù có một bản sao các tệp cấu hình của bạn sẽ rất tốt, nhưng hầu như không đủ điều kiện để trở thành một kế hoạch khắc phục thảm họa.

Thay vào đó hãy tập trung vào việc sao lưu thực sự hệ thống của bạn. Người đơn giản có thể là một cronjob để cho tarball vào băng ... ồ, đúng rồi. Không ai dùng băng đĩa nữa. Được rồi, một cronjob để rsync tất cả các tệp của bạn vào một NAS chuyên dụng . Đối với các giải pháp sao lưu mạnh mẽ hơn, hãy xem AmandaBacula .

Và đối với trường hợp của các học giả, tôi đã có thể đẩy người quản lý của mình repo lên github giống như bất kỳ repo git nào khác.


Không ai nói về việc biến đây thành một chính sách dự phòng. Nhưng theo kinh nghiệm của tôi, thật tiện lợi khi có mọi thứ ở một nơi, trên một máy chủ an toàn hơn.
Brent

1
Rồi tôi hiểu lầm. Nếu những gì bạn thực sự tìm kiếm là một phương tiện để lưu trữ và phân phối cấu hình hệ thống của bạn một cách tập trung, thì có lẽ Puppet ( reducteelsabs.com/products/puppet ) sẽ giúp ích cho bạn.
Shazburg

ví dụ: chúng tôi đang đẩy tất cả các cấu hình của mình lên một máy chủ. có một trac, được sử dụng để trực quan hóa các thay đổi cấu hình (và tất nhiên là viết vé, nếu có gì đó không hoạt động, ...) vì nó siêu tiện lợi, ví dụ tôi có thể so sánh các crontabs từ tất cả các máy chủ của chúng tôi với Một vài cú nhấp chuột.
jojoo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.