Linux에서 “Git”과 유사한 업데이트 관리를 어떻게 수행 할 수 있습니까? 과 비슷한 방식으로

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



답변

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

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


답변

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

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


답변

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

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/


답변

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

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

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


답변

내가 사용한 OpenVMS의를 과거에, 그것은 함께 기본적으로 제공 버전 파일 시스템 .

꼭두각시와 같은 도구가 충분하지 않으면 버전 관리 파일 시스템이 원하는 것일 수 있습니다.


답변

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

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

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

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

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

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

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


답변

실험 유형이라면 전체 파일 시스템을 로컬 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에 있음)는 내용, 권한, 사용자의 비밀번호 해시