Linux에서 "Git"과 유사한 업데이트 관리를 어떻게 수행 할 수 있습니까?


14

"개정판"내에서 앞뒤로 이동할 수 있으므로 Git 과 비슷한 방식으로 Linux 시스템의 업데이트를 관리하고 싶습니다 . 내가 어떻게 할 수 있습니까?


Linux / Unix 시스템의 작동 방식에 대한보다 심층적 인 측면을 다루는 Linux / Unix 시스템 관리자로서 Git와 같은 수정 시스템을 요구하기 위해 시스템에 어떤 종류의 변경이 필요한지 상상할 수 없습니다. 이러한 시스템에서 변경되는 주요 사항은 소프트웨어 설치 및 구성 파일입니다. 구성 파일은 수동으로 백업하고 추적하기 쉽습니다. 그리고 그것은“설정하고 잊어 버려라”는 사고 방식에 속합니다.
JakeGould

답변:


12

아마도 Nix 패키지 관리자 를 사용하는 NixOS를 보아야 할 것이다 .

NixOS는 시스템 구성 관리에서 최첨단 기술을 향상시키는 GNU / Linux 배포판입니다. 기존 배포에서는 업그레이드와 같은 작업이 위험합니다. 패키지를 업그레이드하면 다른 패키지가 중단 될 수 있으며, 전체 시스템을 업그레이드하는 것이 처음부터 다시 설치하는 것보다 훨씬 덜 안정적입니다. 구성 변경 결과를 안전하게 테스트 할 수 없습니다. 시스템 변경 등을 쉽게 취소 할 수 없습니다.


12

아마도 찾고있는 것을 구성 관리 도구 라고 합니다 . 선택할 수있는 몇 가지가 있지만 어떤 상황에서 가장 적합한 것이 주관적입니다.

나는 개인적으로 Puppet 이 시작하기가 매우 쉽다는 것을 알았지 만 다른 인기있는 선택은 Salt and Ansible 입니다.


이미 인형극을 방랑 한 상태로 사용했지만 OS에서 수행 한 지저분한 작업을 취소 할 수 없었던 기억이 없습니다 ...
Patrick Villela

4
구성 관리 도구는 일반적으로 "롤백"기능을 제공하지 않습니다. "롤백"은 시스템을 제거하고 구성 관리 도구를 사용하여 시스템을 재구성합니다. 예를 들어, Razor와 같은 베어 메탈 프로비저닝 도구를 사용하여 OS를 포맷하고 다시 설치할 수 있습니다. 그런 다음 Chef와 같은 도구로 구성을 적용합니다.
ctc

2
마녀가 의도 한 것입니까? :)
Ruslan

cfengine이 죽었습니까? 내가 sysadmin이었을 때 작은 클러스터에서 사용하기에 만족스러운 것을 얻으려고 노력했던 것을 기억합니다. 그러나 나는 그것을 배포하지 않았다.
Peter Cordes

이러한 도구 중 하나를 사용하면 마스터 구성 파일을 git에 유지하여 버전을 제어 할 수 있습니다. 그들로부터 얻는 것은 전체 시스템의 구성을 몇 개의 텍스트 파일 중 하나로 중앙 집중화하고 줄이는 것입니다.
Peter Cordes

10

이것은 귀하의 질문에 과잉 일 수 있지만 시스템 수준 / 대규모 변경 사항을 되돌릴 수있는 가장 쉬운 방법은 스냅 샷입니다.

https://ko.wikipedia.org/wiki/Snapshot_%28computer_storage%29

리그의 세부 사항은 언급하지 않았지만 git에 익숙한 것처럼 보이면 더 복잡한 파일 시스템을 사용하는 데 관심이 있다고 생각하기에는 무리가 없습니다. 차세대 파일 시스템을 사용하는 경우 (click-bait-y 이름 무시) 터미널에 입력 된 명령만으로 전체 시스템을 완전히 "되감기"할 수 있습니다. 모든 변경 사항은 약간의 지연 / 노력으로 되돌릴 수 있습니다. ZFS가 최선의 방법 일 것입니다.이 놀라운 Ars 기사를 참조하여 가치가 있는지 알아보십시오 (다른 많은 훌륭한 기능도 많이 있습니다).

http://arstechnica.com/information-technology/2014/02/ars-walkthrough-using-the-zfs-next-gen-filesystem-on-linux/


2
또 다른 옵션은 btrfs입니다. BTW는 Ubuntu, SUSE> = 11, Oracle의 공식 엔터프라이즈 지원을 제공합니다. 그것은 여전히 개발 및 blahblahblah되고 있지만, 그것은 이다 아주 잘 일상 바탕 화면 사용 및 수행에 대한 신뢰할 수있는.
ignis

1
@ignis : 최근 RAID 5 아래에도 불구하고 일관성이없고 복구 할 수없는 Btrfs가 발생하여 직장에서 두 개 이상의 인스턴스가 들렸습니다. 따라서 프로덕션 환경에서 사용할 수 없다는 경고는 무시하지 않습니다. 나는 그것을 만나기 전에 스스로 그것을 믿고 싶지 않았습니다. RAM이 불량한 것일 수 있습니다. ZFS 사람들 이 ECC 메모리 사용을 강력히 권고 하는 이유 중 하나 일 수 있습니다. Btrfs에도 동일하게 적용될 수 있습니다.
MvG

6

"업데이트"의 의미에 따라 etckeeper 와 같은 구성 관리 도구에 관심이있을 수 있습니다.이 도구 를 사용하면 시스템 구성에 대한 변경 사항을 자동으로 기록하고 이전 구성으로 되돌릴 수 있습니다.

Git이 친숙한 도구이고 "업데이트"가 "시스템 패키지 업데이트"또는 "서버에 저장된 모든 파일의 업데이트"가 아닌 "시스템 구성 업데이트"를 의미하는 경우 이것이 사용자가 찾는 것일 수 있습니다 에 대한.

Puppet, Ansible, Etckeeper 등과 같은 도구를 사용하든 전체 호그로 이동하지 않는 한 데이터 손실없이 깨끗하게 "롤백"할 수있는 것은 아닙니다 (예 : 다른 답변에서 언급 한 스냅 샷). 올바른 접근 방식은 상황에 따라 다릅니다 (예 : 롤백 할 때 고객 주문이 손실 될 수있는 프로덕션 시스템에는 스냅 샷이 적합하지 않음).



1

git과 같은 전체 시스템 (커널 버전 포함)을 실제로 관리하려면 NixOS를 찾고 있습니다.

관련이 적은 버전의 경우 거의 모든 유닉스에서 NixOS의 패키지 관리자 인 nix를 사용할 수 있습니다. Nix는 간단한 사용자로 설치할 수 있지만 루트로 설치하는 것이 더 쉽습니다. nix가 설치되면이를 사용하여 권한이없는 사용자로 패키지를 설치할 수 있으며 충돌없이 기존 패키지 관리자와 함께 잘 실행됩니다. 시스템에서 nix를 완전히 제거하는 것도 매우 쉬우므로 시도하지 않을 이유가 없습니다. ;-)

귀하의 질문을 직접 처리하기 위해 Nix는 설치된 시스템 전체를 환경으로 정의합니다. 이는 git commit과 비슷하게 설치된 패키지의 매우 특정한 버전에 대한 포인터 세트에 대한 포인터입니다.

Nix는 패키지를 업그레이드 할 때 새로운 환경을 생성하는데, 이는 패키지에 대한 새로운 포인터 세트 (주로 기존 패키지, 업데이트되지 않은 패키지의 경우)를 가리키며, 이는 새로운 git commit과 매우 유사합니다. 변경되지 않은 이전 파일과 수정 된 파일의 일부 새 버전을 가리 킵니다.

물론 이전 버전의 환경으로 전환하고 포크 (즉, 이전보다 오래된 환경을 기반으로 새 환경을 만드는 것)는 사소한 일입니다. 환경은 특정 쉘 (실제로 쉘에 사용 가능한 환경 변수 세트이므로 이름)에 대해로드 될 수 있으므로 동일한 시스템에서 다른 프로젝트에 대해 서로 다른 환경을 쉽게 가질 수 있습니다. 관련없는 프로젝트에 다른 버전의 라이브러리가 필요하기 때문에 더 이상 종속성 문제가 없습니다!

NixOS는이를 다음 단계로 끌어 올려 커널을 포함한 전체 컴퓨터를 비슷한 방식으로 관리하여 전체 시스템의 위험을 매우 낮게 업그레이드 할 수 있습니다.

나는 그것들을 모두 읽지 못했지만, lethalman의 Nix 약 을 Nix에 대한 소개로 추천 합니다.


0

실험 유형이라면 전체 파일 시스템을 로컬 git 저장소에 체크인하면됩니다. 이것은 ... 흥미로울 것 같습니다.

  1. git init 루트 디렉토리에 /
  2. 내용이 자주 변경되거나 체크인되지 않아야하는 디렉토리를 무시하는 루트에 대해 .gitignore를 구성하십시오.
    • / dev
    • /운영
    • / tmp
    • / proc
    • / lost + found
    • ...
  3. 제외하려는 .gitignore 특정 파일 유형에 추가하십시오.
    • * .tmp
    • *.로그
    • ...
  4. 초기 내용을 추가하십시오 git add -A .
  5. 스냅 샷을 커밋 git commit -m "Initial Snapshot"
  6. 컴퓨터를 사용하십시오
  7. 주기적으로 스냅 샷 git commit -Am "Snapshot X"또는 유사한 추가

몇 가지 이점은 다음과 같습니다.

  • 개정 역사 친숙한 도구를 좋아 gitk하고git diff
  • git가있는 livecd 또는 다른 운영 체제는 백업을 복원 할 수 있습니다
  • 전체 시스템을 github로 밀어 넣고 다른 시스템으로 복원하거나 사람들과 공유 할 수 있습니다 ...?
  • 빠르고 직관적 인 분기
  • 루트 디렉토리에있는 /, git 디렉토리는 소스 코드와 비슷하게 시스템을 남용하고 더 모험적이라는 자신감을 갖게한다
  • 이후의 각 스냅 샷은 다른 백업 솔루션에 비해 상대적으로 작습니다
  • / etc의 구성 변경 사항을 검토하고 추적하는 데 좋습니다.
  • 이것을 개척하고 linit이라고 부를 수 있습니다-git의 리눅스.
  • 불명예

몇 가지 이상한 점은 다음과 같습니다.

  • 이와 달리 중대한 변경 사항이 있거나 시스템을 실행하는 동안 사용중인 파일의 변경 사항으로 분기 또는 개정판을 복원 / 체크 아웃 할 수는 없습니다. 아마도이 목적을 위해 git가있는 최소 부팅 USB가있을 수 있습니다.
  • 오히려 큰 초기 커밋
  • 후속 .git 디렉토리에서 확인-?
  • git루트 git컨테이너에 중첩 된 소스 코드 디렉토리에있을 때 예상대로 작동 합니다.
  • / etc / passwd 및 / etc / shadow는 사용자를 유지 관리하고 추적하고 다른 시스템으로 복원하기 위해 저장소에 포함되어야하지만 이제는보기 액세스 권한이있는 사용자 (github에 있음)는 내용, 권한, 사용자의 비밀번호 해시

3
git이 권한을 올바르게 처리하지 않기 때문에이 접근법은 끔찍하게 실패 할 것입니다. 루트로 모든 작업을 수행한다고 가정하면 기본적으로 전체 파일 시스템을 루트로 꽉 차게되어 쓰기 작업이 중단됩니다. 예를 들어, 스냅 샷을 작성하여 복원하면 아파치 로그 디렉토리 소유자가 http가 아닌 루트가되고 아파치가 디렉토리에 쓸 수없고 시작되지 않습니다. 나는 비슷한 것을 시도했지만 훨씬 더 작은 규모로, 심지어는 문제가 있었다는 것을 알고 있습니다.
Tuncay Göncüoğlu

다른 답변에서 제안한 것처럼 Nix를 살펴보십시오.)
Michael Pankov

알아 둘만 한! 나는 핸들 권한, 적어도 옥텟 내 스크립트 복제에 X 플래그를 유지, 않았다으로 생각하지만 난 파일 및 그룹 소유권에 대해 생각하지 않았다
Ehryk

필요한 경우 전체 권한 및 소유권을 유지하는 추가 도구가있는 것으로 보입니다. 그러한 도구 중 하나는 git-cache-meta 이며 여기에 목록이 있습니다
Ehryk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.