Linux Foundation Training

[LFS 201] Package Managements (2)

Sara.H 2020. 10. 6. 20:10

리눅스에서 가장 흔히 사용되는 패키지 관리 시스템은

1. RPM (Red Hat Package Manager)

2. APT (Debian Package)

이렇게 두 개가 있다. 

 

이 외에는 portage / emerge 라는, Gentoo 에서 사용되는 것이 있고, Arch 에서 사용되는 pacman, 그리고 임베디드 리눅스 시스템 혹은 안드로이드에서 사용되는 특별한 패키지 매니저들이 있다. 

 

패키징 툴 에는 다음과 같이 두 가지 레벨이 있다. 

1. Low Level Utilities : 단순히 하나의 패키지만 인스톨하거나, package 들의 리스트를 인스톨한다. 디펜던시는 완전히 책임지지 않는다. 만약 다른 패키지에 의존성이 결여되어 있으면 인스톨이 실패한다. 그리고 마찬가지로 해당 패키지를 제거하는 것이 다른 소프트웨어의 의존성을 해치면 제거가 실패한다. rpm 과 dpkg 는 이 역할을 한다. 

2. High Level Utilities : 디펜던시 문제를 해결해준다. 만약 다른 패키지 또는 패키지의 그룹이 특정 소프트웨어 이전에 인스톨이 되어야 하면 인스톨 해준다. 만약 제거하는 것이 다른 인스톨된 패키지와 interfere 하면 관리자는 이 제거 액션을 abort 할지, 또는 모든 관련된 소프트웨어를 같이 삭제할지 워닝을 던져준다. yum, dnf, zypper 그리고 패키지 킷 유틸리들은 rpm 시스템의 의존성 문제를 해결해주고, apt 와 apt-cache 그리고 다른 유틸리티들은 dpkg 시스템의 단점을 보완해준다. 

 

Package Sources 

모든 배포판들은 하나 이상의 패키지 레포지토리를 갖고 있고, 여기서 새로운 버전의 소프트웨어를 가져와 업데이트한다. 배포판은 레포에 있는 패키지들이 서로 잘 상호작용 할 수 있도록 하는 역할을 한다. 

외부 레포지토리에 있는 패키지들도 standard distribution-supported list 에 추가될 수 있다. 가끔 이들은 배포판과 밀접하다. 예를 들어, EPEL(Extra packages for enterprise Linux)은 버전 의존적인 레포지토리들의 셋인데, 이것들은 RHEL 에 잘 들어맞는다. 왜냐면 소스가 페도라를 기반으로 하고 있고 유지보수 하는 사람들이 레드햇과 밀접하기 때문이다. 

하지만 몇몇 외부 레포지트리들은 잘 만들어지지 않았고 유지도 잘 안된다. 예를 들어, 패키지가 업데이트 되면 메인 레포에는 반영이 되지만 외부 레포에 반영이 안되는 경우가 있다. dependency hell 을 맛볼 수 있음. 

 

* Source Revision Control (Version control with git)

 

Linux kernel 과 git 의 탄생

리눅스 커널 개발은 여러 나라의 여러 사람들이 참여하고, GPL 라이선스 밑에 공개된다. 오랜 시간동안 source revision control 이 딱히 없었는데, 어느순간부터 다수의 커널 개발자들이 BitKeeper 를 사용하기 시작했다. 

하지만 2005년 봄에 라이선스 관련 분쟁이 있었고 BitKeeper 는 리눅스 커널 개발에 사용할 수 없게 되었다. 

이로 인해 Git 이 탄생함. 갓갓. 너무 멋있어서 이 글은 복붙해야겠음 ... 

 


 

The Linux Kernel and the Birth of git

The Linux kernel development system has special needs in that it is widely distributed throughout the world, with literally thousands of developers involved. Furthermore it is all done very publicly, under the GPL license.

 

For a long time, there was no real source revision control system. Then, major kernel developers went over to the use of BitKeeper, a commercial project which granted a restricted use license for Linux kernel development.

 

However, in a very public dispute over licensing restrictions in the spring of 2005, the free use of BitKeeper became unavailable for Linux kernel development.

 

The response was the development of git, whose original author was Linus Torvalds. The source code for git can be obtained from the Index of /pub/software/scm/git, and full documentation can be found online as well.

 


 

깃은 어떻게 동작하는가? 

* 일반적인 source control management system 과는 다름. 기초적인 작업 유닛이 파일이 아님. 

* Object Database 와 Directory Cache 라는 두 가지 중요한 자료구조를 사용함. 

 

Object Database 는 세 종류의 객체들을 포함 

1. Blobs : 파일 컨텐트를 갖고 있는 이진 데이터 뭉치 

2. Trees : 파일 이름과 속성을 가진 Blob 들의 Set. 디렉토리 구조를 제공한다. 

3. Commits : 트리 스냅샷을 묘사하는 changesets. 

 

Directory Cache 는 디렉토리 트리의 상태를 캡처한다. 

 

***controls system 이 파일에서 자유로워짐으로 인해 여러 파일들을 더 쉽게 다룰 수 있게 되었다.***

 

 

 

'Linux Foundation Training' 카테고리의 다른 글

[LFS201] Package Management (1) : Introduction  (0) 2020.09.14
[LFS201] Processes  (0) 2020.06.29
[LFS201] Linux Filesystem Tree Layout  (0) 2020.06.25