"개정판"내에서 앞뒤로 이동할 수 있으므로 Git 과 비슷한 방식으로 Linux 시스템의 업데이트를 관리하고 싶습니다 . 내가 어떻게 할 수 있습니까?
"개정판"내에서 앞뒤로 이동할 수 있으므로 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 기사를 참조하여 가치가 있는지 알아보십시오 (다른 많은 훌륭한 기능도 많이 있습니다).
"업데이트"의 의미에 따라 etckeeper 와 같은 구성 관리 도구에 관심이있을 수 있습니다.이 도구 를 사용하면 시스템 구성에 대한 변경 사항을 자동으로 기록하고 이전 구성으로 되돌릴 수 있습니다.
Git이 친숙한 도구이고 "업데이트"가 "시스템 패키지 업데이트"또는 "서버에 저장된 모든 파일의 업데이트"가 아닌 "시스템 구성 업데이트"를 의미하는 경우 이것이 사용자가 찾는 것일 수 있습니다 에 대한.
Puppet, Ansible, Etckeeper 등과 같은 도구를 사용하든 전체 호그로 이동하지 않는 한 데이터 손실없이 깨끗하게 "롤백"할 수있는 것은 아닙니다 (예 : 다른 답변에서 언급 한 스냅 샷). 올바른 접근 방식은 상황에 따라 다릅니다 (예 : 롤백 할 때 고객 주문이 손실 될 수있는 프로덕션 시스템에는 스냅 샷이 적합하지 않음).
git과 같은 전체 시스템 (커널 버전 포함)을 실제로 관리하려면 NixOS를 찾고 있습니다.
관련이 적은 버전의 경우 거의 모든 유닉스에서 NixOS의 패키지 관리자 인 nix를 사용할 수 있습니다. Nix는 간단한 사용자로 설치할 수 있지만 루트로 설치하는 것이 더 쉽습니다. nix가 설치되면이를 사용하여 권한이없는 사용자로 패키지를 설치할 수 있으며 충돌없이 기존 패키지 관리자와 함께 잘 실행됩니다. 시스템에서 nix를 완전히 제거하는 것도 매우 쉬우므로 시도하지 않을 이유가 없습니다. ;-)
귀하의 질문을 직접 처리하기 위해 Nix는 설치된 시스템 전체를 환경으로 정의합니다. 이는 git commit과 비슷하게 설치된 패키지의 매우 특정한 버전에 대한 포인터 세트에 대한 포인터입니다.
Nix는 패키지를 업그레이드 할 때 새로운 환경을 생성하는데, 이는 패키지에 대한 새로운 포인터 세트 (주로 기존 패키지, 업데이트되지 않은 패키지의 경우)를 가리키며, 이는 새로운 git commit과 매우 유사합니다. 변경되지 않은 이전 파일과 수정 된 파일의 일부 새 버전을 가리 킵니다.
물론 이전 버전의 환경으로 전환하고 포크 (즉, 이전보다 오래된 환경을 기반으로 새 환경을 만드는 것)는 사소한 일입니다. 환경은 특정 쉘 (실제로 쉘에 사용 가능한 환경 변수 세트이므로 이름)에 대해로드 될 수 있으므로 동일한 시스템에서 다른 프로젝트에 대해 서로 다른 환경을 쉽게 가질 수 있습니다. 관련없는 프로젝트에 다른 버전의 라이브러리가 필요하기 때문에 더 이상 종속성 문제가 없습니다!
NixOS는이를 다음 단계로 끌어 올려 커널을 포함한 전체 컴퓨터를 비슷한 방식으로 관리하여 전체 시스템의 위험을 매우 낮게 업그레이드 할 수 있습니다.
나는 그것들을 모두 읽지 못했지만, lethalman의 Nix 약 을 Nix에 대한 소개로 추천 합니다.
실험 유형이라면 전체 파일 시스템을 로컬 git 저장소에 체크인하면됩니다. 이것은 ... 흥미로울 것 같습니다.
git init
루트 디렉토리에 /
git add -A .
git commit -m "Initial Snapshot"
git commit -Am "Snapshot X"
또는 유사한 추가몇 가지 이점은 다음과 같습니다.
gitk
하고git diff
몇 가지 이상한 점은 다음과 같습니다.
git
루트 git
컨테이너에 중첩 된 소스 코드 디렉토리에있을 때 예상대로 작동 합니다.