리눅스/Debian or Ubuntu

우분투(Ubuntu) 20.04 Focal Fossa로 업그레이드 방법

씨실과 날실 2020. 4. 27. 11:00


안내

예전에도 우분투 업그레이드 방법을 연재했던 적이 있어 이번에는 건너뛸까도 생각했습니다만 그래도 이번 버전은 LTS 버전이므로 다시 한번 짚고 넘어가는 것도 나쁘지는 않겠다 싶어 다시 한번 업그레이드 방법을 적게 되었습니다.

단 이번에는 모든 작업을 터미널에서 수행하도록 하겠습니다.익숙해지면 CLI 에서의 작업이 편리합니다. 특히 GUI 방식으로는 새 배포판 출시 후 약간의 안정 기간이 지난 다음에야 업그레이드가 가능한데 그전에 빠르게 업그레이드하려고 한다거나 중간 배포판을 건너뛰고 업그레이드하려면 터미널에서의 명령행 입력 방식이 필수입니다.

GUI 방식을 이용한 업그레이드 방법은 예전 연재를 참고하시기 바랍니다.


우분투 백업 절차 요약

01. 시스템 백업

02. 우분투 버전 확인

03. 보류(고정) 패키지 해제

04. 저장소 패키지 목록 업데이트

05. 업그레이드 가능한 패키지 목록 확인

06. 일반 패키지 업그레이드

07. 의존성 고려 패키지 업그레이드

08. 불필요한 패키지 자동제거

09. 시스템 재부팅

10. 업데이트 관리자 코어 설치

11. 우분투 배포판 업그레이드 수준 확인

12. 우분투 배포판 업그레이드 수준 설정 변경

13. 중간 배포판 건너뛰어 업그레이드 하기 위한 작업

14. 우분투 배포판 업그레이드

15. 우분투 배포판 업그레이드 진행과정

16. 우분투 배포판  업그레이드 후 버전 확인

17. 우분투 배포판  업그레이드 후 할일


사실 OS의 판올림(버전 업그레이드)는 권장하지 않습니다. 업그레이드 과정 중에 어떤 문제가 발생할지 모르기 때문입니다. 특히 새 버전이 출시된 지 얼마 되지 않은 경우는 더더욱 그러합니다. 따라서 가능하면 새로 클린 설치하는 것을 권장합니다. 우분투(Ubuntu) 20.04 Focal Fossa의 클린 설치 방법은 아래 링크를 참고하시기 바랍니다.

그러나 내외부의 제한으로 인해 새로 설치하는 것이 쉽지 않은 경우가 있을 것입니다. 그렇다면 최대한 안전하게 업그레이드하는 것이 시스템 관리자의 목표가 됩니다.

업그레이드하기 전에 OS가 출시된 직후 나타날 여러 버그들이 보고되고 개발진이 그것들을 수정할 떄까지 충분한 시간을 두는 것이 좋습니다.

이후 다음의 절차를 거쳐 업그레이드를 진행하는 것을 권장합니다.


우분투 업그레이드(판올림) 절차

01. 시스템 백업

사실 업그레이드 과정 중에서 가장 중요한 과정이라 할 수 있습니다. 아무리 조심스레 업그레이드한다하더라도 오류의 위험은 상존하고 있기 때문입니다.

백업이 있다면, 문제가 발생한면 이전으로 복원하면 그만입니다. 백업이 있다는 것만으로도 업그레이드로 마주칠 미지의 버그를 대할 용기가 생깁니다.

백업의 중요성은 아무리 강조해도 지나침이 없습니다. 백업이 없다면 업그레이드할 생각은 하지 않는 것이 좋습니다. 백업이 중요하지 않는 경우는 운영하는 시스템이 그다지 중요하지 않아 훼손되더라도 무방할 때 뿐입니다.

백업 방법은 위 링크의 글을 참고하시기 바랍니다.


02. 우분투 버전 확인

$ lsb_release -a

우분투의 버전을 확인하는 방법은 여러가지가 있습니다. 위 방법은 그중 가장 간편하고 널리 알려진 방법입니다.

study@study-VirtualBox:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 18.04.4 LTS
Release:	18.04
Codename:	bionic
study@study-VirtualBox:~$ 

위 예시는 지금까지 제 블로그의 주 연재 바탕이 된 우분투 18.04의 버전 확인 출력  내용입니다. 만약 더 나중에 출시된 배포판을 사용 주이라면 거기에 맞춰 내용이 나올 것입니다.


03 고정 패키지 해제

고정(hold)된 것으로 표시된 패키지는 자동으로 설치, 업그레이드 또는 제거할 수 없습니다. 업그레이드 과정에서 문제가 발생할 수 있으므로 고정 패키지를 확인하고 해제해주어야 합니다.

고정 패키지 확인

study@study-VirtualBox:~$ sudo apt-mark showhold
mc
study@study-VirtualBox:~$

패키지 고정 해제

study@study-VirtualBox:~$ sudo apt-mark unhold mc
mc 패키지 고정 취소함.
study@study-VirtualBox:~$ 


04. 저장소 패키지 목록 업데이트

$ sudo apt update

CentOS와는 달리 우분투는 패키지를 업그레이드하거나 설치할 때 그전에 반드시 위 명령을 실행하여 저장소의 패키지 목록을 업데이트해주어야 합니다.

study@study-VirtualBox:~$ sudo apt update
[sudo] study의 암호: 
기존:1 http://mirror.kakao.com/ubuntu bionic InRelease
받기:2 http://mirror.kakao.com/ubuntu bionic-updates InRelease [88.7 kB]
받기:3 http://mirror.kakao.com/ubuntu bionic-backports InRelease [74.6 kB]     
받기:4 http://mirror.kakao.com/ubuntu bionic-security InRelease [88.7 kB]      
... 중략 ...
내려받기 4,819 k바이트, 소요시간 2초 (2,009 k바이트/초)                        
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
4 packages can be upgraded. Run 'apt list --upgradable' to see them.
study@study-VirtualBox:~$ 

위 예시에 표시된 http://mirror.kakao.com/ubuntu는 기본 저장소 주소를 카카오 미러로 설정하여 나타난 것입니다.

우분투 지역 설정을 서울(한국)로 하면 패키지 저장소의 주 서버가 카이스트 미러로 자동 설정되어 설치됩니다만 패키지의 안정적이고 빠른 업데이트를 위해 많은 우분투 사용자들이 카카오 미러로 바꾸곤 합니다.

바꾸는 방법은 위 링크를 참고하시기 바랍니다.


05. 업그레이드 가능한 패키지 목록 확인

$ apt list --upgradable

업그레이드가 가능한 패키지 목록을 나열하는 명령입니다.

우분투 배포판 자체의 업그레이드의 경우는 큰 의미를 지니지 않습니다만 한 번쯤 훑어보시는 것도 나쁘지는 않을 것입니다.

study@study-VirtualBox:~$ apt list --upgradable
리스팅... 완료
distro-info-data/bionic-updates,bionic-updates 0.37ubuntu0.7 all [upgradable from: 0.37ubuntu0.6]
python3-update-manager/bionic-updates,bionic-updates 1:18.04.11.12 all [upgradable from: 1:18.04.11.10]
update-manager/bionic-updates,bionic-updates 1:18.04.11.12 all [upgradable from: 1:18.04.11.10]
update-manager-core/bionic-updates,bionic-updates 1:18.04.11.12 all [upgradable from: 1:18.04.11.10]
study@study-VirtualBox:~$ 

06. 일반 패키지 업그레이드

$ sudo apt upgrade

우분투의 일반적인 패키지 업그레이드 명령입니다. 이 명령은 의존성(또는 종속성)을 이유로 설치되어 있는 패키지를 제거하지 않습니다.

study@study-VirtualBox:~$ sudo apt upgrade
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
업그레이드를 계산하는 중입니다... 완료
다음 패키지가 자동으로 설치되었지만 더 이상 필요하지 않습니다:
  dbconfig-common dbconfig-mysql javascript-common libclamav7 libjs-jquery
  libjs-sphinxdoc libjs-underscore libllvm7 libllvm8 php-bz2 php-mysql
  php-php-gettext php-phpseclib php-tcpdf php7.2-bz2 php7.2-mysql
Use 'sudo apt autoremove' to remove them.
다음 패키지를 업그레이드할 것입니다:
  distro-info-data python3-update-manager update-manager update-manager-core
4개 업그레이드, 0개 새로 설치, 0개 제거 및 0개 업그레이드 안 함.
599 k바이트 아카이브를 받아야 합니다.
이 작업 후 2,048 바이트의 디스크 공간을 더 사용하게 됩니다.
계속 하시겠습니까? [Y/n] y
받기:1 http://mirror.kakao.com/ubuntu bionic-updates/main amd64 distro-info-data all 0.37ubuntu0.7 [4,676 B]
받기:2 http://mirror.kakao.com/ubuntu bionic-updates/main amd64 python3-update-manager all 1:18.04.11.12 [35.0 kB]
받기:3 http://mirror.kakao.com/ubuntu bionic-updates/main amd64 update-manager-core all 1:18.04.11.12 [8,508 B]
받기:4 http://mirror.kakao.com/ubuntu bionic-updates/main amd64 update-manager all 1:18.04.11.12 [551 kB]
내려받기 599 k바이트, 소요시간 0초 (2,983 k바이트/초)
(데이터베이스 읽는중 ...현재 184591개의 파일과 디렉터리가 설치되어 있습니다.)
Preparing to unpack .../distro-info-data_0.37ubuntu0.7_all.deb ...
Unpacking distro-info-data (0.37ubuntu0.7) over (0.37ubuntu0.6) ...
Preparing to unpack .../python3-update-manager_1%3a18.04.11.12_all.deb ...
Unpacking python3-update-manager (1:18.04.11.12) over (1:18.04.11.10) ...
Preparing to unpack .../update-manager-core_1%3a18.04.11.12_all.deb ...
Unpacking update-manager-core (1:18.04.11.12) over (1:18.04.11.10) ...
Preparing to unpack .../update-manager_1%3a18.04.11.12_all.deb ...
Unpacking update-manager (1:18.04.11.12) over (1:18.04.11.10) ...
python3-update-manager (1:18.04.11.12) 설정하는 중입니다 ...
distro-info-data (0.37ubuntu0.7) 설정하는 중입니다 ...
update-manager-core (1:18.04.11.12) 설정하는 중입니다 ...
update-manager (1:18.04.11.12) 설정하는 중입니다 ...
Processing triggers for gnome-menus (3.13.3-11ubuntu1.1) ...
Processing triggers for mime-support (3.60ubuntu1) ...
Processing triggers for desktop-file-utils (0.23-1ubuntu3.18.04.2) ...
Processing triggers for libglib2.0-0:amd64 (2.56.4-0ubuntu0.18.04.6) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
study@study-VirtualBox:~$ 

커널이 업데이;트된 경우 다음을 실행하여 시스템을 재부팅해줍니다.

study@study-VirtualBox:~$ sudo systemctl reboot


07. 의존성 고려 패키지 업그레이드

sudo apt full-upgrade

이 업그레이드는 앞서 다룬 apt upgrade과는 달리 필요하다면 업그레이드할 패키지에 맞춰 의존성을 고려하여 제거할 패키지는 제거하고 추가 설치할 패키지는 새로 설치하는 방식입니다.

study@study-VirtualBox:~$ sudo apt full-upgrade
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
업그레이드를 계산하는 중입니다... 완료
다음 패키지가 자동으로 설치되었지만 더 이상 필요하지 않습니다:
  dbconfig-common dbconfig-mysql javascript-common libclamav7 libjs-jquery
  libjs-sphinxdoc libjs-underscore libllvm7 libllvm8 php-bz2 php-mysql
  php-php-gettext php-phpseclib php-tcpdf php7.2-bz2 php7.2-mysql
Use 'sudo apt autoremove' to remove them.
0개 업그레이드, 0개 새로 설치, 0개 제거 및 0개 업그레이드 안 함.
study@study-VirtualBox:~$ 

08. 불필요한 패키지 자동제거

sudo apt --purge autoremove

이 명령은 사용자가 명시적으로 설치하지 않고 종속성의 이유로 자동으로 같이 설치된 것들 중 더이상 쓰이지 않는 패키지를 자동으로 제거하는 명령입니다.

--purge 옵션을 붙이지 않아도 되지만 붙이면 설정값 등도 같이 제거합니다.

study@study-VirtualBox:~$ sudo apt autoremove
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
다음 패키지를 지울 것입니다:
  dbconfig-common dbconfig-mysql javascript-common libclamav7 libjs-jquery
  libjs-sphinxdoc libjs-underscore libllvm7 libllvm8 php-bz2 php-mysql
  php-php-gettext php-phpseclib php-tcpdf php7.2-bz2 php7.2-mysql
0개 업그레이드, 0개 새로 설치, 16개 제거 및 0개 업그레이드 안 함.
이 작업 후 155 M바이트의 디스크 공간이 비워집니다.
계속 하시겠습니까? [Y/n] y
(데이터베이스 읽는중 ...현재 184590개의 파일과 디렉터리가 설치되어 있습니다.)
Removing dbconfig-mysql (2.0.9) ...
Removing dbconfig-common (2.0.9) ...
Removing javascript-common (11) ...
Conf javascript-common disabled.
apache2_invoke prerm: Disable configuration javascript-common
Removing libclamav7:amd64 (0.100.3+dfsg-0ubuntu0.18.04.1) ...
Removing libjs-sphinxdoc (1.6.7-1ubuntu1) ...
Removing libjs-jquery (3.2.1-1) ...
Removing libjs-underscore (1.8.3~dfsg-1) ...
Removing libllvm7:amd64 (1:7-3~ubuntu0.18.04.1) ...
Removing libllvm8:amd64 (1:8-3~ubuntu18.04.2) ...
Removing php-bz2 (1:7.2+60ubuntu1) ...
Removing php-mysql (1:7.2+60ubuntu1) ...
Removing php-php-gettext (1.0.12-0.1) ...
Removing php-phpseclib (2.0.9-1) ...
Removing php-tcpdf (6.2.13+dfsg-1ubuntu1) ...
Removing php7.2-bz2 (7.2.24-0ubuntu0.18.04.4) ...
Removing php7.2-mysql (7.2.24-0ubuntu0.18.04.4) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for libapache2-mod-php7.2 (7.2.24-0ubuntu0.18.04.4) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
study@study-VirtualBox:~$ 


study@study-VirtualBox:~$ sudo apt --purge autoremove
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
다음 패키지를 지울 것입니다:
  dbconfig-common* dbconfig-mysql* javascript-common* libclamav7*
  libjs-jquery* libjs-sphinxdoc* libjs-underscore* libllvm7* libllvm8*
  php-bz2* php-mysql* php-php-gettext* php-phpseclib* php-tcpdf* php7.2-bz2*
  php7.2-mysql*
0개 업그레이드, 0개 새로 설치, 16개 제거 및 0개 업그레이드 안 함.
이 작업 후 155 M바이트의 디스크 공간이 비워집니다.
계속 하시겠습니까? [Y/n] y
(데이터베이스 읽는중 ...현재 184590개의 파일과 디렉터리가 설치되어 있습니다.)
Removing dbconfig-mysql (2.0.9) ...
Removing dbconfig-common (2.0.9) ...
Removing javascript-common (11) ...
Conf javascript-common disabled.
apache2_invoke prerm: Disable configuration javascript-common
Removing libclamav7:amd64 (0.100.3+dfsg-0ubuntu0.18.04.1) ...
Removing libjs-sphinxdoc (1.6.7-1ubuntu1) ...
Removing libjs-jquery (3.2.1-1) ...
Removing libjs-underscore (1.8.3~dfsg-1) ...
Removing libllvm7:amd64 (1:7-3~ubuntu0.18.04.1) ...
Removing libllvm8:amd64 (1:8-3~ubuntu18.04.2) ...
Removing php-bz2 (1:7.2+60ubuntu1) ...
Removing php-mysql (1:7.2+60ubuntu1) ...
Removing php-php-gettext (1.0.12-0.1) ...
Removing php-phpseclib (2.0.9-1) ...
Removing php-tcpdf (6.2.13+dfsg-1ubuntu1) ...
Removing php7.2-bz2 (7.2.24-0ubuntu0.18.04.4) ...
Removing php7.2-mysql (7.2.24-0ubuntu0.18.04.4) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for libapache2-mod-php7.2 (7.2.24-0ubuntu0.18.04.4) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
(데이터베이스 읽는중 ...현재 183830개의 파일과 디렉터리가 설치되어 있습니다.)
Purging configuration files for php7.2-mysql (7.2.24-0ubuntu0.18.04.4) ...
Purging configuration files for php7.2-bz2 (7.2.24-0ubuntu0.18.04.4) ...
Purging configuration files for javascript-common (11) ...
apache2_invoke postrm: Purging state for javascript-common
Purging configuration files for dbconfig-common (2.0.9) ...
dpkg: 경고: while removing dbconfig-common, directory '/var/log/dbconfig-common' not empty so not removed
study@study-VirtualBox:~$ 


09. 시스템 재부팅

$ sudo reboot


10. 업데이트 관리자 코어 설치

$ sudo apt install update-manager-core

사실 이 명령은 대부분 이미 설치되어 있을 것이므로 일반 사용자들은 신경쓰지 않아도 되는 명령입니다. 그러나 혹시 이 패키지가 없는 겨ㅓㅇ우 따로 설치해주시면 됩니다.

study@study-VirtualBox:~$ sudo apt install update-manager-core
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
패키지 update-manager-core는 이미 최신 버전입니다 (1:18.04.11.12).
0개 업그레이드, 0개 새로 설치, 0개 제거 및 0개 업그레이드 안 함.
study@study-VirtualBox:~$ 

11. 우분투 배포판 업그레이드 수준 확인

우분투 배포판 업그레이드 수준은 아래의 세단계로 설정 가능합니다.

never / normal / lts

never는 새 배포판의 출시 여부를 확인하지 않고 업그레이드하지 않습니다.

normal은 새 배포판이 출시되었는지 확인하고 현재 배포판의 바로 다음 정기 배포판으로 업그레이드합니다.

lts는 짝수년도 4월에 출시되는 장기 지원 배포판이 출시된 경우 업그레이드를 합니다.

현재 우분투의 배포판 업그레이드 수준 설정은 다음의 명령어로 확인할 수 있습니다.

cat /etc/update-manager/release-upgrades

위 명령을 실행하면 아래와 같이 나오게 됩니다.

study@study-VirtualBox:~$ cat /etc/update-manager/release-upgrades
# Default behavior for the release upgrader.

[DEFAULT]
# Default prompting behavior, valid options:
#
#  never  - Never check for, or allow upgrading to, a new release.
#  normal - Check to see if a new release is available.  If more than one new
#           release is found, the release upgrader will attempt to upgrade to
#           the supported release that immediately succeeds the
#           currently-running release.
#  lts    - Check to see if a new LTS release is available.  The upgrader
#           will attempt to upgrade to the first LTS release available after
#           the currently-running one.  Note that if this option is used and
#           the currently-running release is not itself an LTS release the
#           upgrader will assume prompt was meant to be normal.
Prompt=lts
study@study-VirtualBox:~$ 

맨 하단에 필요한 정보가 나옵니다. 필요한 부분만 확인하고 싶다면 아래와 같이 실행하면 됩니다.

cat /etc/update-manager/release-upgrades | grep Prompt


study@study-VirtualBox:~$ cat /etc/update-manager/release-upgrades | grep Prompt
Prompt=lts
study@study-VirtualBox:~$ 

12. 우분투 배포판 업그레이드 수준 설정 변경

sudo sed -i 's/Prompt=기존 설정값/Prompt=바꿀 설정값/g' /etc/update-manager/release-upgrades

LTS 버전의 경우 이 설정이 큰 의미가 없지만 만약 never(업그레이드 안함)으로 설정되어 있다면 원하는 배포판 업그레이드 수준으로 설정해주시면 됩니다.

study@study-VirtualBox:~$ sudo sed -i 's/Prompt=never/Prompt=lts/g' /etc/update-manager/release-upgrades
study@study-VirtualBox:~$ 

제대로 변경되었는지 확인해봅시다.

study@study-VirtualBox:~$ cat /etc/update-manager/release-upgrades | grep Prompt
Prompt=lts
study@study-VirtualBox:~$ 

13. 중간 배포판 건너뛰어 업그레이드 하기 위한 작업

현재 사용 중인 우분투의 버전과 이번에 업그레이드할 우분투 20.04  사이에 중간 배포판이 있는 경우가 있을 수 있습니다.

이런 경우 일반적인 업그레이드 방법으로는 중간 배포판들의 업그레이드를 모두 거쳐야 최신 버전의 우분투로 업그레이드할 수 있습니다.

그러나 이렇게 업그레이드를 거치게 되면 시간도 오래 걸릴 뿐만 아니라 업그레이드를 두번 이상 거치게 되므로 업그레이드 과정 중이나 후에 패키지가 오류를 일으킬 수 있습니다.

따라서 업그레이드 과정을 단순화시킬 필요가 있는데 우분투가 그것을 사용자 친화적인 방식으로 지원하지는 않습니다.

이럴 땐 전통적인 데비안 방식으로 업그레이드를 할 수 있는데 그것은 /etc/apt/sources.list 파일을 수정하는 것입니다.

$ cat /etc/apt/sources.list

위 명령을 실행하면 아래와 같이 해당 파일의 내용을 터미널에서 확인할 수 있습니다.


study@study-VirtualBox:~$ cat /etc/apt/sources.list
# deb cdrom:[Ubuntu 18.04.1 LTS _Bionic Beaver_ - Release amd64 (20180725)]/ bionic main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://mirror.kakao.com/ubuntu/ bionic main restricted
# deb-src http://mirror.kakao.com/ubuntu/ bionic main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://mirror.kakao.com/ubuntu/ bionic-updates main restricted
# deb-src http://mirror.kakao.com/ubuntu/ bionic-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://mirror.kakao.com/ubuntu/ bionic universe
# deb-src http://mirror.kakao.com/ubuntu/ bionic universe
deb http://mirror.kakao.com/ubuntu/ bionic-updates universe
# deb-src http://mirror.kakao.com/ubuntu/ bionic-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu 
## team, and may not be under a free licence. Please satisfy yourself as to 
## your rights to use the software. Also, please note that software in 
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://mirror.kakao.com/ubuntu/ bionic multiverse
# deb-src http://mirror.kakao.com/ubuntu/ bionic multiverse
deb http://mirror.kakao.com/ubuntu/ bionic-updates multiverse
# deb-src http://mirror.kakao.com/ubuntu/ bionic-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://mirror.kakao.com/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src http://mirror.kakao.com/ubuntu/ bionic-backports main restricted universe multiverse

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu bionic partner
# deb-src http://archive.canonical.com/ubuntu bionic partner

deb http://mirror.kakao.com/ubuntu bionic-security main restricted
# deb-src http://mirror.kakao.com/ubuntu bionic-security main restricted
deb http://mirror.kakao.com/ubuntu bionic-security universe
# deb-src http://mirror.kakao.com/ubuntu bionic-security universe
deb http://mirror.kakao.com/ubuntu bionic-security multiverse
# deb-src http://mirror.kakao.com/ubuntu bionic-security multiverse
# deb [arch=arm64,amd64,ppc64el] https://ftp.harukasan.org/mariadb/repo/10.3/ubuntu bionic main
# deb-src [arch=arm64,amd64,ppc64el] https://ftp.harukasan.org/mariadb/repo/10.3/ubuntu bionic main
deb [arch=arm64,ppc64el,amd64] https://ftp.harukasan.org/mariadb/repo/10.4/ubuntu bionic main
# deb-src [arch=arm64,ppc64el,amd64] https://ftp.harukasan.org/mariadb/repo/10.4/ubuntu bionic main
study@study-VirtualBox:~$ 

이 내용에서 현재 사용 중인 우분투의 코드네임을 업그레이드할 코드네임으로 수정해주시면 됩니다.

우분투의 코드넴임은 일반적으로 '형용사 + 명사'로 이루지는데 버전별 코드네임은 다음과 같습니다.

우분투의 버전별 코드넴임

18.04 LTS     Bionic Beaver

18.10          Cosmic Cuttlefish

19.04          Disco Dingo

19.10          Eoan Ermine

20.04 LTS    Focal Fossa

위 파일에 사용되는 코드네임 부분은 형용사입니다. 위 파일에서 사용되는 우분투의 코드네임은 형용사 부분입니다. 따라서 이 형용사 부분을 수정해주시면 됩니다.

예를들어 19.04를 20.04로 업그레이드한다고 가정하면 disco를 focal로 수정해주시면 됩니다.

$ sudo sed -i 's/현재 사용 중인 우분투 버전의 코드네임 형용사 부분/업그레이드할 우분투 버전의 코드네임 형용사 부분/g' /etc/apt/sources.list


18.04에서 20.04로

$ sudo sed -i 's/bionic/focal/g' /etc/apt/sources.list


18.10에서 20.04로

$ sudo sed -i 's/cosmic/focal/g' /etc/apt/sources.list


19.04에서 20.04로
$ sudo sed -i 's/disco/focal/g' /etc/apt/sources.list

19.10에서 20.04로
$ sudo sed -i 's/eoan/focal/g' /etc/apt/sources.list


자세한 방법은 위 링크를 참고하시기 바랍니다.


14. 우분투 배포판 업그레이드

$ sudo do-release-upgrade

13번 과정까지가 우분투 배포판 업그레이드를 수행하기 전의 준비작업이었다면 이 14번의 명령울 실행함으로써 비로소 우분투 배포판 업그레이드가 진행됩니다.

그러나 위 명령을 실행하면 아래와 같이 출력되는 경우가 있습니다.

study@study-VirtualBox:~$ sudo do-release-upgrade
새 우분투 배포판 확인
There is no development version of an LTS available.
To upgrade to the latest non-LTS develoment release 
set Prompt=normal in /etc/update-manager/release-upgrades.
study@study-VirtualBox:~$

이 글을 게시한 2020년 4월 27일 기준에서 do-release-upgrade 명령을 실행하면 위와 같이 출력되는데요. 이유는 다음과 같습니다.

직전 버전(19.10)에서 새 배포판(20.04)으로 업그레이드하려면 새 배포판이 공개된 후 며칠이 지나야 가능합니다.

18.04 LTS에서 20.04 LTS로 업그레이드하려면  2020 년 7 월 말 20.04.1이 공개된 이후 며칠이 지나야 합니다.

그러나 강제로 업그레이드할 수 있는 방법이 있는데요. 아래 명령이 그것입니다.

$ sudo do-release-upgrade -d

do-release-upgrade 명령에 -d 옵션을 붙이면 강제 업그레이드가 가능합니다.


15. 우분투 배포판 업그레이드 진행과정

우분투 배포판 업그레이드 실행

study@study-VirtualBox:~$ sudo do-release-upgrade -d
새 우분투 배포판 확인
0% [작업중]
0% [헤더를 기다리는 중입니다]
받기:1 업그레이드 도구 서명 [1,554 B]

99% [헤더를 기다리는 중입니다]
받기:2 업그레이드 도구 [1,344 kB]

100% [작업중]
내려받기 1,346 k바이트, 소요시간 0초 (0 바이트/초)
                                             
'focal.tar.gz.gpg'(으)로 'focal.tar.gz' 파일 인증 
'focal.tar.gz' 압축 해제 중

캐시 읽는 중

패키지 관리자 확인 중
패키지 목록을 읽는 중입니다... 완료  
의존성 트리를 만드는 중입니다        
상태 정보를 읽는 중입니다... 완료   
0% [작업중]
0% [작업중]
히트 http://mirror.kakao.com/ubuntu bionic InRelease                             
0% [헤더를 기다리는 중입니다] [Connected to ftp.harukasan.org (14.49.99.238)]   0% [헤더를 기다리는 중입니다] [Connected to ftp.harukasan.org (14.49.99.238)]   히트 http://mirror.kakao.com/ubuntu bionic-updates InRelease                     
히트 http://mirror.kakao.com/ubuntu bionic-backports InRelease                   
히트 http://mirror.kakao.com/ubuntu bionic-security InRelease                    
88% [헤더를 기다리는 중입니다]


저장소 정보 업데이트

저장소 정보 업데이트 중

서드 파티 소스는 사용할 수 없습니다 

souces.list에서 서드 파티 목록의 일부를 이용할 수 없습니다. 업그레이드를 마친 후 '소프트웨어 소스' 도구나 
패키지 관리자를 이용해 다시 사용 할 수 있습니다. 

계속 하시려면 [엔터] 키를 눌러 주십시오
우분투 배포판 업데이트할 때는 위 안내처럼 서드 파티(Third Party) 패키지 저장소를 사용할 수 없습니다.

업그레이드 완료 후 따로 재활성화해주어야 합니다.


업그레이드 여부 확인

패키지 관리자 확인 중
패키지 목록을 읽는 중입니다... 완료  
의존성 트리를 만드는 중입니다        
상태 정보를 읽는 중입니다... 완료   

바뀐 내용을 계산하는 중

바뀐 내용을 계산하는 중

업그레이드를 시작하시겠습니까? 


설치한 패키지 중 56개는 더 이상 캐노니컬이 지원하지 않습니다. 하지만 공동체는 계속 지원합니다. 

패키지 31개를 제거할 것입니다. 새 패키지 340개를 설치할 것입니다. 패키지 1571개를 업그레이드 할 것입니다. 

모두 1,273 M개의 패키지를 다운로드해야 합니다.. 현재 연결 상태로는 다운로드 과정에 약 3 분 정도가 필요합니다. 

업그레이드를 다운로드하고 설치하는 것은 긴 시간이 필요할 수도 있으며, 한번 다운로드가 끝나면 취소할 수 없습니다. 

 계속 [yN]  자세한 내용 [d]

여기서 캐노니컬이 더 이상 지원되지 않는 패키지, 제거되는 패키지, 새로 설치될 패키지, 업그레이드될 패키지의 수와 다운로드되는 패키지의 총 용량이 표시됩니다.

d를  누르고 엔터를 치면 아래처럼 각 작업별 패키지 목록이 표시됩니다.

더 이상 지원하지 않음: adium-theme-ubuntu cpp-7 enchant example-content 
  gcc-7-base gcc-8-base geoip-database gir1.2-gtksource-3.0 gsfonts 
  guile-2.0-libs ifupdown imagemagick imagemagick-6-common 
  imagemagick-6.q16 libargon2-0 libart-2.0-2 libaudio2 
  libdbusmenu-gtk4 libegl1-mesa libenchant1c2a 

지우기: fwupdate-signed gnome-settings-daemon-schemas libapt-inst2.0 
  libapt-pkg5.0 libcupscgi1 libcupsmime1 libcupsppdc1 libebook-1.2-19 
  libedata-book-1.2-25 libedata-cal-1.2-28 libfwup1 libldb1 
  libpolkit-backend-1-0 libsensors4 libsnmp30 system-config-samba 
  uno-libs3 

제거 (자동으로 설치함) libapache2-mod-php7.2 libept1.5.0 libpython-stdlib 
  php7.2 python python-glade2 python-gtk2 python-ldb python-libuser 
  python-minimal python-nautilus python-samba python-scour python-tdb 

설치: alsa-topology-conf alsa-ucm-conf bind9-dnsutils bind9-libs 
  build-essential cpp-9 dpkg-dev duplicity enchant-2 fakeroot 
  fonts-smc-gayathri fonts-urw-base35 fonts-yrsa-rasa fprintd g++ 
  g++-9 gamemode gcc-10-base gcc-9 gcc-9-base gir1.2-graphene-1.0 
  gir1.2-gtksource-4 gir1.2-handy-0.0 gir1.2-mutter-6 

업그레이드: accountsservice acl acpi-support acpid adduser 
  adwaita-icon-theme aisleriot alsa-utils amd64-microcode anacron 
  apache2 apache2-bin apache2-data apache2-utils 
  app-install-data-partner apparmor apport apport-gtk apport-symptoms 
  appstream apt apt-config-icons apt-utils aptdaemon aptdaemon-data 
nums-3.0 gir1.2-gdkpixbuf-2.0 gir1.2-gdm-1.0 




 계속 [yN]  자세한 내용 [d]d
계속 [yN]  자세한 내용 [d]y

Lock screen disabled 

Your lock screen has been disabled and will remain disabled until you 
reboot. 

계속 하시려면 [엔터] 키를 눌러 주십시오
Inhibiting until Ctrl+C is pressed...

작업별 패키지 목록을 확인하고 q를 눌러 빠져나온 다음 y를 입력하고 엔터를 누르면 잠김화면(Lock screen)이 시스템이 재부팅되기 전까지 유지된다고 알려주고 계속하려면 엔터 키를 누르라고 나옵니다. 엔터를 눌러줍니다.


패키지의 구성 파일 재설정

업그레이드 과정에 패키지별로 구성파일을 재설정하게 됩니다.


위 그림처럼 TUI에서 커보드 화살표 키 등을 움직여 설정하기도 하고,


Configuration file '/etc/gdm3/custom.conf'
 ==> Modified (by you or by a script) since installation.
 ==> 패키지 배포자가 업데이트한 버전을 넣었습니다.
   어떻게 하시겠습니까? 다음 중에 하나를 선택할 수 있습니다:
    Y 또는 I : 패키지 관리자의 버전을 설치합니다
    N 또는 O : 현재 설치된 버전을 유지합니다
       D     : 버전 간의 차이점을 표시합니다
       Z     : 프로세스를 백그라운드로 하고 상황을 알아봅니다
기본값으로 현재 버전을 그대로 유지합니다.
*** custom.conf (Y/I/N/O/D/Z) [기본값=N] ? 

위 예시처럼 CLI 환경과 유사하되 문자키를 눌러 설정하는 방식도 있습니다.


사용하지 못하게 된 패키지 제거

사용하지 못하게 된 패키지를 제거하시겠습니까? 


패키지 99개를 제거할 것입니다. 

 계속 [yN]  자세한 내용 [d]

우분투 배포판을 업그레이드하면서 더이상 사용하지 못하게 된 패키지를 제거합니다.


시스템 업그레이드 완료 후 시스템 재부팅

시스템 업그레이드를 완료했습니다.

다시 시작해야 합니다. 

업그레이드를 완료하시려면 다시 시작해야 합니다. 
'y'를 선택하시면 시스템이 다시 시작합니다. 

계속 [yN] 

y를 입력하고 엔터 키를 눌러 재부팅해줍니다.


시스템 업그레이드 완료

무사히 시스템 재부팅이 이루어지면 새로운 그놈 환경의 우분투 모습을 마주하게 됩니다.


주의

제가 가상머신에서 우분투 20.04로 업그레이드를 해보니 업그레이드 작업 자체는 문제 없이 완료된 것으로 보였지만 시스템 재부팅을 해보니 부팅 직후의 검은 바탕에 하단의 우분투 로고 화면에서 넘어가지 않습니다.

아직 업그레이드할 시기는 아닌 것 같습니다. 따라서 지금 이 시점(4월 27일)에서 업그레이드는 권장하지 않으며 적어도 20.04.1 이후에나 업그레이드하는 것을 권장합니다.

물론 새로 클린 설치하는 것을 가장 권장합니다.


16. 우분투 배포판  업그레이드 후 버전 확인

$ lsb_release -a

무사히 업그레이드 되었는지 확인해봅시다.

study@study-VirtualBox:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04 LTS
Release:        18.04
Codename:	focal
study@study-VirtualBox:~$

이렇게 출력되면 무사히 업그레이드된 것입니다.


17. 우분투 배포판  업그레이드 후 할일

서드 파티 저장소 재활성화

우분투 배포판 업그레이드하면서 자동으로 비활성화되었던 서드 파티 저장소를 재활성화해주어야 합니다.

study@study-VirtualBox:~$ cd /etc/apt/sources.list.d
study@study-VirtualBox:/etc/apt/sources.list.d$ ls -l
합계 8
-rw-r--r-- 1 root root 189  4월 27 13:00 google-chrome.list
-rw-r--r-- 1 root root 189  6월 25  2019 google-chrome.list.save
study@study-VirtualBox:/etc/apt/sources.list.d$ cat google-chrome.list
### THIS FILE IS AUTOMATICALLY CONFIGURED ###
# You may comment out this entry, but any other modifications may be lost.
# deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main
study@study-VirtualBox:/etc/apt/sources.list.d$ sudo sed -i 's/^# deb/deb/g' google-chrome.list
study@study-VirtualBox:/etc/apt/sources.list.d$ cat google-chrome.list
### THIS FILE IS AUTOMATICALLY CONFIGURED ###
# You may comment out this entry, but any other modifications may be lost.
deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main
study@study-VirtualBox:/etc/apt/sources.list.d$ 

이것으로 우분투 배포판 업그레이드 완료입니다.

그러나 몇 번을 강조하지만 업그레이드는 그다지 권장하지 않으며 해야 한다면 백업을 철저히 하고 업그레이드 시기도 적어도 마이너 업그레이드(예시 : 20.04.1)가 출시된 이후에 하시는 것을 권장합니다.