Ubuntu 업그레이드 프로세스는 어떻게 작동합니까?


11

운영 체제가 계속 실행되는 동안 Ubuntu는 어떻게 최신 배포판으로 원활하게 업그레이드합니까? 10.10에서 11.04로 업그레이드 중이며 여러 번 업그레이드 한 적이 있으며 update-manager -d를 실행하고 다운로드 및 설치 한 다음 재부팅하는 것만 큼 간단합니다.

그래도 정확히 어떻게 작동합니까? 업그레이드 관리자가 운영 체제를 사용하는 동안 어떻게 운영 체제를 업데이트 할 수 있습니까?


좋아, 현상금 의견에 내 질문을 추가하는 것은 좋은 생각이 아닙니다. 내가 편집 할 수없는 것처럼 보이지 않습니다.
Oxwivi

답변:


3

내 경험상 패키지와 모듈이 실행되는 동안 메모리에 저장되어 있으며 하드 드라이브의 사본을 많이 참조하지 않는다고 가정합니다. 우분투에서 프로그램을 실행 한 다음 관련 패키지가 실행되는 동안 제거하면 이것을 볼 수 있습니다. 계속 실행되지만 닫으면 다시 시작할 수 없습니다.

배포판 업그레이드에서도 마찬가지입니다. 원래 버전의 우분투와 관련된 모든 패키지가 제거되어 새 패키지로 교체 되었어도 여전히 실행 중이므로 시스템을 다시 시작할 때 마지막으로 중지되면 새 패키지가 대신합니다.


업그레이드가 진행되면서 일부 메뉴에 새로운 기능이 추가되는 이유도 설명합니다.
bbosak

15

다음은 프로세스에 대한 자세한 설명입니다. 텍스트가 너무 길어서 죄송합니다.

저의 경험은 데비안에서 비롯되었습니다. 데비안은 우분투에서 사용 된 전체 패키징 및 업그레이드 시스템이 원래 발명되었습니다. 매일 Ubuntu 보안 업그레이드 apt-get upgrade는 일반적으로 소프트웨어를 제거하지 않는 실행에 해당 합니다. 빅 릴리스 업그레이드는 apt-get dist-upgrade소프트웨어 패키지를 완전히 교환 할 수 있는 기간에 해당합니다 .

실제로 매우 낮은 수준의 구성 요소는 일반적으로 릴리스 업그레이드 중에 교환되지 않습니다. 업그레이드 직후 / boot 디렉토리에 두 개의 커널 및 initrd 이미지가 있습니다. 프로그램과 달리 커널 구성 요소는 서로 호환되지 않기 때문입니다. 업그레이드 중에 새 장치 드라이버를로드해야하는 경우에는 실행중인 커널과 호환되어야합니다. 새 커널로 시스템을 부팅 한 후 이전 커널을 제거 할 수 있습니다. 마지막 으로이 작업을 수동으로 확인해야 할 때 현재 업데이트 프로그램이이를 어떻게 처리하는지 알 수 없습니다. 이것은 BTW입니다. 주된 이유는 커널 이미지가 파일 이름에 버전 번호를 가지고 있기 때문에 다른 커널 버전을 동시에 설치할 수 있습니다. 모듈 경로와 동일 (/ lib / modules / ...)

종속성 계층 구조에서 가장 낮은 패키지부터 시작하여 소프트웨어 패키지가 하나씩 업그레이드됩니다. 이들은 일반적으로 libc 및 기타 라이브러리와 같은 프로그램 라이브러리입니다. 그러나 패키지가 업데이트되는 순서는 하드 코딩되지 않지만 패키지 종속성이 해결 될 때 동적으로 계산됩니다. 대부분의 경우 오래된 프로그램은 새 라이브러리와 함께 작동 할 수 있으므로 해당 라이브러리를 먼저 교체해도 문제가되지 않습니다.

여기서 시스템은 수동으로 설치된 패키지 (즉, 직접 설치 한 패키지, 즉 크롬)와 수동으로 설치된 패키지의 종속성 (및 해당 종속성의 종속성을 충족시키기 위해 설치된 패키지)과 자동으로 설치된 패키지를 구분한다는 것을 이해해야합니다. ).

수동으로 설치된 각 프로그램에 대해 업데이터는 최신 버전 만 찾습니다. 이러한 프로그램은 종종 데이터가없고 종속성 만 포함하는 "ubuntu-desktop"과 같은 메타 패키지 일뿐입니다. 직접 업데이트 된 (수동으로 요청 된) 프로그램에 의해 요청 될 때 새 버전의 종속 라이브러리가 사용됩니다. 업데이터는 항상 (업그레이드 업그레이드가 아닌 업그레이드 중) 종속 패키지 의 최신 사용 가능한 버전 을 설치하려고합니다 .

라이브러리를 업그레이드 한 후와 프로그램 자체를 업그레이드하기 전에는 새 라이브러리 버전에서 작동 할 수없는 프로그램을 시작할 수 없습니다. 그러나 라이브러리 업그레이드 전에 해당 프로그램이 이미 실행 중이면 이전 라이브러리 버전은 사용중인 한 메모리에 남아 있기 때문에 계속 실행됩니다. 업그레이드하기 전에 시작된 프로그램도 마찬가지입니다. 이들은 종료되고 다시 시작될 때까지 새로운 기능을 제공하지 않습니다.

업데이트 후 일부 라이브러리 (또는 일반적으로 종속성)가 분리됩니다. 라이브러리는 이전 프로그램 버전에 필요했지만 더 이상 새 버전에 필요하지 않은 라이브러리입니다. 이러한 패키지는 자동으로 설치된 것으로 표시되고 더 이상 수동으로 설치된 prgram과 관련이 없으므로 이러한 패키지를 쉽게 찾고 제거 할 수 있습니다. 업데이트 프로세스의 마지막 단계 (업데이터가 "사용하지 않는 패키지 제거"또는 이와 유사한 것)로이를 확인할 수도 있습니다.

이전에 설치되지 않은 일부 패키지는 자동으로 설치된 것으로 표시되어 향후 요구 사항이 사라지면 제거 할 수있는 새로운 종속성 인 일부 패키지가 설치됩니다.

이 메커니즘을 통해 전체 사용자 프로그램을 교환 할 수도 있습니다. 예를 들어 Gnome2에서 Unity로 전환하는 것과 같습니다. 둘 다 ubuntu-desktop의 자동 종속성이므로 몇 가지 패키지 중 하나이며 실제로 새 버전이 처음으로 요청됩니다.

프로그램은 일반적으로 특정 버전의 OS 커널에 의존하지 않으므로 실행중인 커널에서 정상적으로 작동합니다.

외에도 모든에서 나는 의심 우회하기 상황 곳이 이론 나누기에, 일부 특정 수정을 던져 믹스로 해결 방법 업데이터 우분투를.

업데이트하는 동안 시스템을 제한된 부분에만 사용할 수있는 조건이 있습니다. 해야 뭔가 업데이트 중에 잘못 될 것입니다 가장 가능성이 깨진 시스템에 남아. 업그레이드 프로그램에도 영향을 줄 수 있기 때문에 쉽게 복구 할 수없는 것도 종종 있습니다. 종속성이 손상된 프로그램은 계속 작동 할 수 있지만 종속성이 손상된 경우 업데이터도 마찬가지입니다.

명령 행 프로그램 apt-mark을 사용하여 수동으로 설치된 것으로 표시된 패키지와 자동으로 설치된 패키지를 찾을 수 있습니다 . 동일한 프로그램을 사용하여 해당 마크를 전환 할 수도 있습니다. 업데이트 프로세스에 직접적인 영향을 미칩니다.

보다 복잡한 소프트웨어 설정에서 업데이터는 때때로 종속성을 수동으로 해결하도록 요청합니다. 즉, 하나의 수동으로 설치된 프로그램이 업데이트되어 새 버전의 라이브러리를 요청하는 반면 다른 수동으로 설치된 프로그램은 동일한 라이브러리의 이전 버전에 의존하여 새 프로그램과 함께 작동 할 수 없습니다. 그런 다음 해당 프로그램 중 하나를 포기하거나 두 가지 모두 업그레이드하지 않도록 선택해야합니다. 종속성은 종종 복잡하기 때문에 매우 지저분해질 수 있습니다 ( "종속성 지옥"이라는 용어를 들어 보셨을 것입니다).

이제 구체적인 질문에 :

  1. 하위 수준 인프라가 변경되면 (커널, 드라이버, 라이브러리 등 사용자가 직접 상호 작용하지 않는 수준의 하위 수준) 더 이상 사용되지 않는 바이너리는 어떻게됩니까?
    • 알았어 ... 벌써 이걸 다 덮었 어
  2. 더 이상 사용되지 않는 앱은 어떻게 되나요? 예를 들어, Unity 2D (또는 패키지가 새로운 저장소에없는 유지 관리자가없는 다른 소프트웨어).
    • 앱을 한 번 수동으로 설치 한 경우 시스템에 남아있어 종종 설명 된 종속성 문제가 발생합니다.
  3. ubuntu-desktop은 기본 Ubuntu 응용 프로그램을 종속성으로 가져 오는 메타 패키지입니다. Firefox를 제거하고 Chrome을 설치 한 경우 업그레이드의 일부로 Firefox가 계속 사용됩니까?
    • 새 릴리스의 표준 브라우저라면 가능합니다. 크롬도 업그레이드됩니다. ubuntu-desktop을 제거하지 않고 Firefox를 제거 할 수 있는지 잘 모르겠습니다. 패키지 시스템은 엄격한 종속성과는 별도로 소프트웨어가 일반적으로 종속성과 같이 설치되지만 자체 종속성 외에는 영향을 미치지 않고 나중에 제거 할 수있는 권장 사항 개념을 알고 있습니다.
  4. 또한 단일 앱이 package-x에 의존하고 새로운 릴리스에서 더 이상 사용하지 않으면 어떻게됩니까? 패키지 x가 고아 임에도 불구하고 나머지 패키지와 함께 업그레이드됩니까?
    • 아니.

더 궁금한 점이 있으면 언제든지 문의하십시오.


의존성 지옥과 관련된 더 많은 문서에 연결할 수 있습니까 (DLL 지옥이라는 용어를 상기시킵니다)? 최소한의 Ubuntu 설치를 사용하고 있으며 업그레이드가 어떻게 작동하는지 알고 싶습니다.
Oxwivi

나는 당신이 인터넷에서 의존성 지옥에 대해 찾을 수있는 것은 불만이라고 생각합니다. 와 같은 apt 맨 페이지를 읽으십시오 man apt-get. apt-get -t intrepid install foo/jaunty bar/oneiric예제 와 같은 명령 구문 등을 지정하는 것이 종종 유용하다는 것을 알았습니다 . 실제로 이것은 릴리스를 혼합하는 데비안에서는 더 의미가 있습니다. 우분투에서는 관례가 적습니다. 흥미로운 주제는 적절하게 고정하고 패키지를 보류 상태로 만들 수도 있습니다.
Paul Hänsch

3
Stack Exchange 네트워크에서 본 가장 긴 비 코드 응답으로 상을 수상했습니다.
Patrick

3

파일 시스템 수준에서 Windows와 달리 Unix 시스템에서는 열려있는 파일을 삭제할 수 있습니다. 삭제는 파일의 내용이 아니라 파일 이름 만 제거하므로 파일을 열어 둔 모든 프로그램은 파일을 닫을 때까지 파일에 계속 액세스 할 수 있으며 데이터가 해제됩니다.

따라서 업그레이드 프로세스는 단순히 이전 파일을 제거하고 새 파일로 대체하며 특정 시스템 서비스의 경우 새 버전이 실행되도록 다시 시작합니다.

전체 컴퓨터를 재부팅하지 않고 다시 시작할 수없는 구성 요소가 하나 또는 두 개 있으므로 업그레이드 후 새 버전을 사용하기 위해 재부팅하라는 메시지가 나타납니다.


2

Linux가 여전히 사용 중일 때 어떻게 자체 업데이트 할 수 있습니까?

주로 Linux (그리고 대부분의 배포판)는 단순히 그런 식으로 설계 되었기 때문입니다. 실행중인 시스템에서 패키지를 업그레이드 할 수있는 것은 대부분의 Linux 기반 배포판의 목표입니다.

Linux의 경우, 파일이 현재 응용 프로그램에 의해 열려 있거나 파일 이 현재 실행중인 실행 가능 코드 또는 공유 라이브러리 인 경우에도 패키지 관리자 프로세스가 디스크의 파일에 쓰지 못하게하는 것은 없습니다 . 매우 낮은 수준에서는 단일 쓰기 / 읽기 작업 중에 파일에 대한 액세스를 보호하는 잠금이 있지만 밀리 초 이상 동안 동일한 파일에 쓰려고하는 다른 응용 프로그램에 대해 유지되도록 설계되지 않았습니다. 단순히 밀리 초를 기다립니다.

실행중인 파일을 실행하는 동안 대체 할 수 있으며 프로세스는 더 이상 디스크에 파일이 필요하지 않기 때문에 실행중인 프로세스와 아무런 관련이 없습니다. 모든 코드가 이미 메모리에로드되었습니다.

그렇기 때문에 Linux에서는 응용 프로그램이 실행되는 동안 응용 프로그램을 업그레이드 할 수 있지만 업그레이드 한 응용 프로그램이 다시 시작될 때까지 실제로 업그레이드가 적용되지 않습니다. 시스템 서비스와 같은 백그라운드 프로세스를 업그레이드하는 경우 해당 서비스를 다시 시작해야합니다. 커널을 업그레이드 한 경우 재부팅을 의미합니다.

프로그램이 실행되는 동안 프로그램의 파일을 교체하지 않습니까?

Linux 배포판의 일부 패키지에는 패키지 관리자가 패키지를 업데이트하는 동안 특정 시스템 서비스를 중지하고 업데이트가 완료된 후 해당 서비스를 다시 시작하도록 지시하는 설치 지침이 포함되어 있습니다. 예를 들어 특정 서비스의 구성 파일이 업데이트되고 실행중인 버전의 서비스가 최신 버전의 구성 파일을 처리하지 못하는 상황을 방지합니다.

일반적으로 일반 사용자 응용 프로그램은 자체 생성 파일과 사용자의 홈 디렉토리와 같은 위치에 배치하는 파일을 제외하고 실행할 구성 파일이 필요하지 않습니다. 따라서 업데이트 할 때 패키지 관리자가이를 만지지 않습니다.


나는 이미 모든 세부 사항을 알고 있습니다. 현상금과 함께 한 의견을 읽으십시오. apt업그레이드 프로세스 중에 Ubuntu, 즉 특정 패키지 및 종속성을 얼마나 정확하게 처리 하는지 알고 싶습니다 .
Oxwivi

-2

이것은 다른 기능과 유사합니다. 이것이 기본 프로세스를 이해하는 데 도움이되기를 바랍니다.

운영 체제가 부팅 될 때 "루트 전환"기능을 말합니다.

운영 체제가 부팅 될 때 루트 파일 시스템 (읽기 : "/")은 처음에는 RAM에서만 사용할 수 있습니다. 이 부팅 프로세스가 실행되는 동안 RAM에서 하드 디스크의 / 파일 시스템으로 전환됩니다.


1
아니요, 시스템 업그레이드 중에 chroot 메커니즘이 사용되지 않습니다. 업그레이드는 라이브 파일 시스템에서 수행됩니다. 프로그램 메뉴가 재 구축되고 프로그램 아이콘이 바뀌면서 바뀌는 것을 볼 수도 있습니다. 그러나 chroot 메커니즘은 새로운 시스템이 새로 작성된 디스크 파티션의 변경 루트 환경으로 "부트 스트랩"될 때 원래 시스템 설치에 사용됩니다.
Paul Hänsch
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.