리눅스/Debian or Ubuntu

우분투(Ubuntu) 데스크톱 배포판 업그레이드 (18.04 → 19.04) - CLI 방식

씨실과 날실 2019. 5. 3. 09:00

전에 우리는 GUI 방식과 CLI 방식으로 우분투를 18.04에서 19.04로 업그레이드하는 방법에 대해 알아보았습니다. 그러나 이전의 방식은 중간 배포판인 18.10을 거치는 방식이었습니다. 이렇게 18.10을 거치는 이유는 아직 우분투 18.10 지원수명이 다하지 않았기 때문입니다.

우분투 18.04 사용자는 이전 게시물에서 설명한 것처럼 표준 업그레이드 절차에 따라 직접 19.04로 업그레이드할 수 있습니다만 그런 경우 업그레이드를 두 번 해야 하기 떄문에 번거롭고 시간을 낭비하게 됩니다.

따라서 이번에는 18.10을 건너뛰고 18.04에서 19.04로 바로 업그레이드하는 방업에 대해 알아보도록 하겠습니다.

18.10을 건너뛰고 18.04에서 19.04로 바로 우분투 배포판 업그레이드를 하려면 터미널에서 명령을 실행해주어야 합니다. GUI로는 불가능합니다.

아래의 터미널 명령을 잘 따라오시기 바랍니다.

기존 배포판 저장소 패키지 목록 업데이트

study@study-VirtualBox:~$ sudo apt update && sudo apt full-upgrade 

업데이트 매니저 코어 패키지 설치

study@study-VirtualBox:~$ sudo apt install update-manager-core
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
패키지 update-manager-core는 이미 최신 버전입니다 (1:18.04.11.10). 

배포판 업그레이드 설정 수정

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

source list 파일 내 문자열 bionic을 disco로 모두 변경

study@study-VirtualBox:~$ sudo sed -i 's/bionic/disco/g' /etc/apt/sources.list

서드 파티 저장소(리포지터리) 비활성화

/etc/apt/sources.list.d/*.list

구글 크롬과 같은 패키지들은 PPA 정보를 담은  .list 파일을 /etc/apt/sources.list.d 디렉토리 안에 생성합니다.

아래는 /etc/apt/sources.list.d 디렉토리에 생성된 저장소 파일 내의 모든 행을 한꺼번에 주석처리하여 저장소가 비활성화하도록 하는 명령입니다.

study@study-VirtualBox:~$ sudo sed -i 's/^/#/' /etc/apt/sources.list.d/*.list

위 명령을 실행하면 PPA 정보를 담은 .list 파일 내용이 아래와 같이 바뀌게 되는데요. 아래는 구글 크롬의 PPA 파일의 변경 내용입니다.

### 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

원문이 위와 같은데 아래와 같이 바뀌게 됩니다.

#### 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:~$ sudo sed -i 's/^.//' /etc/apt/sources.list.d/*.list

위 명령에서 우리가 눈여겨 볼 부분은 's/^.//'입니다.

정규식

s    :    s는 치환하라는 의미입니다.

^    :    ^는 행의 첫부분을 뜻합니다

.     :    .은 임의 문자 하나를 뜻합니다.

//    :    //는 /(슬래시)와 /(슬래시) 사이에 아무 문자도 없으므로 기존 문자를 제거하는 것과 같은 의미입니다.


터미널 명령 해석

sudo sed -i 's/^.//' /etc/apt/sources.list.d/*.list

sudo -  관리자 권한을 임시적으로 부여하여 다음 명령을 실행하라

sed -  파일 내용을 편집하라

-i - 결과를 화면에 출력하는 대신 해당 파일을 변경하여 저장하라

' 정규식 ' - '   ' 사이의 정규식대로 편집하라

s - 문자열을 치환하라

/기존 내용/바꿀 내용/ - 특정 기존 내용을 지정한 내용으로 바꿔라

^. - 행의 첫 임의의 문자 하나(...은 점이 3개이므로 임의의 문자 세개)

문자 없음 - 기존 문자열 제거와 같은 의미

'  '이후의 파일 경로 - 편집할 파일 지정

* - 모든(all)의 의미

/etc/apt/sources.list

일부 패키지들은 sources.list 파일에 직접 추가되는 경우가 있습니다. MariaDB의 경우가 이런 예에 해당합니다.(MariaDB 공식 안내에 따라 PPA를 추가한 경우)

이런 경우는 해당 부분을 직접 주석 처리 해주거나 아니면 GUI를 이용해 소프트웨어 & 업데이트 앱의 기타 소프트웨어 탭에서 해당 패키지를 체크 해제주어야 합니다.

컴파일된 패키지와 소스코드 모두 비활성해주셔야 합니다. 직접 주석처리할 경우도 컴파일된 패키지와 소스코드 모두 주석 처리해주어야 합니다.

참고로 소프트웨어 & 업데이트 앱의 기타 소프트웨어 탭에서 해당 패키지를 체크 해주면 sources.list 등 PPA 정보 파일을 열어 보면 해당 패키지 부분이 주석처리가 되어 있음을 확인할 수 있습니다.

만약 위 서드파티 PPA 비활성화를 하지 않으면 아래와 같은 문구가 나오면서 업그레이드가 진행되지 않을 수 있습니다.

E: The repository 'https://ftp.harukasan.org/mariadb/repo/10.3/ubuntu disco Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

소프트웨어 최소 업그레이드

study@study-VirtualBox:~$ sudo apt update && sudo apt upgrade

참고로 &&은 순차 실행을 의미하며 만약 전행 명령이 실패한 경우 후행 명령은 실행되지 않습니다.

패키지 설정

업그레이드를 하다보면 특정 패키지의 경우 환경설정을 재설정해주어야 할 필요가 있습니다. 자신의 시스템 환경에 맞춰 설정을 해주시면 됩니다.

 libc6은 GNU C 라이브러리 패키지입니다.

 libpam0g는 플러그형 인증 모듈 라이브러리 패키지입니다.

grub-pc는 GRand Unified 부트로더 패키지입니다.

어느 곳에 설치해야될 지 잘 모르겠다면 모든 곳에 설치하는 것도 괜찮습니다. 자세한 내용은 기존의  우분투 배포판 업그레이드 관련 글들을 참고하시기 바랍니다.

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

 release-upgrades는 우분투 배포판 업그레이드 기준을 설정하는 것입니다.

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] ?

위의 gdm3은 디스플레이 관리자입니다.

소프트웨어 전체 업그레이드

study@study-VirtualBox:~$ sudo apt full-upgrade 
이때 최소 설치 때 설치되지 않았던 패키지들이 설치되며, yaru 테마 등도 같이 설치, 설정됩니다.

패키지 설정

이때도 최소 업그레이드 때처럼 특정 패키지들이 설정을 요구합니다.

불필요한 패키지 제거

study@study-VirtualBox:~$ sudo apt autoremove
study@study-VirtualBox:~$ sudo apt clean
apt autoremove는 더이상 쓰이지 않는 패키지들을 자동으로 삭제합니다.

apt clean은 /var/cache/apt/archives 디렉토리에 다운로드된 파일을 삭제합니다.

시스템 재부팅

study@study-VirtualBox:~$ sudo shutdown -r now 
옵션 -r은 재부팅(reboot)를 의미합니다. now 대신 자연수를 적으면 해당 자연수 분 후 셧다운됩니다.

배포판 버전 확인

study@study-VirtualBox:~$ lsb_release  -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 19.04
Release:	19.04
Codename:	disco
study@study-VirtualBox:~$

이것으로 우분투 18.04에서 19.04로 바로 업그레이드가 완료되었습니다.

후기

18.04에서 18.10을 거쳐 19.04로 업그레이드하는 것은 리눅스 커널에 치명적인 버그가 있어 시스템 오류를 야기합니다. 그러나 18.04에서 19.04로 바로 업그레이드하면 해당 오류가 발생하지 않습니다.

또한 버추얼박스 게스트 확장은 어떻게 업그레이드하든 오류가 발생합니다. 그러나 그러나 클립보드 공유와 드래그 앤 드롭, 공유 폴더 기능은 쓰는데 큰 문제가 없는 것으로 보입니다.

그렇다 하더라도 가능하면 19.04 클린 설치하시기를 추천합니다.