샘플서버망에서 Ubuntu Server 운영체제의 버전을 20.04에서 22.04로 업그레이드 하는 방법을 정리한다.
업그레이드를 진행하기 위해서는 do-release-upgrade 도구를 사용하면 쉽게 판올림을 할 수 있다.
해당 방법을 간략하게 정리한다.
사전 작업
Ubuntu 서버의 배포판을 업그레이드하기 위해서는 아래와 같은 사전 작업이 필요하다.
-
SSH 터미널로 서버 연결
-
최신 업데이트 적용
-
실행 중인 서비스 중단
-
서버 재부팅
ssh 터미널로 서버 연결
일반적인 서버 배포판 업그레이드는 해당 서버에서 직접 작업하는 것이 가장 안전하다.
하지만 서버실에서 작업하기에는 작업 환경이 녹록하지 않다. (스탠딩 작업 + 서버들의 팬 소음)
서버 업그레이드 작업에 RDP 연결이나 SSH 연결을 권장하지 않는다.
원격으로 작업할 경우 연결이 유실 되면 복구가 어렵기 때문이다.
여러 방법으로 테스트를 진행한 결과 SSH 연결을 통한 업그레이드로 진행이 가능하므로 아래와 같이 SSH로 서버에 연결한다.
$ ssh 계정명@서버IP주소
# 계정명은 sudo 권한이 부여되어 있어야 한다.
RDP로 연결하여 터미널을 실행하여 업그레이드를 진행하면 오류 발생
RDP로 연결하여 터미널을 실행한 상태에서 업그레이드를 진행하면 오류가 발생한다.
- xrdp, xfce4 업그레이드를 진행하면서 RDP 연결이 끊어진다.
- 새로운 세션으로 연결하면 이전 세션에서 실행 중인 프로세스가 존재한다.
- 업그레이드 도중 선택할 부분이 존재하는데 이전 세션의 프로세스에 접근할 방법이 없다.
- 새로 업그레이드를 진행하려고 해도 apt 자체가 이전 세션에서 실행 중이라서 잠겨있다.
SSH로 연결하여 진행하는 경우 1022 포트 추가 개방 등에 대한 메시지는 출력되지만 정상적으로 업그레이드가 진행된다.
중간에 연결이 끊기거나 진행이 중단되는 경우 복구가 어려울 수 있으므로, 업그레이드 설치 완료까지 자리를 지키고 있어야 한다.
최신 업데이트 적용
아래 명령을 통해 최신 업데이트를 적용한다.
$ sudo apt update && sudo apt upgrade
$ sudo apt dist-upgrade # 최신 업데이트 적용하면 설치할 항목이 없다고 나오는게 정상
$ sudo apt autoremove # 사용하지 않는 불필요한 패키지 및 설치 파일 제거
$ sudo apt install update-manager-core # 최신 업데이트 적용하면 이미 설치되었다고 나오면 정상
실행 중인 서비스 중단
서버 업그레이드를 진행하기 전에 서버에서 실행 중인 서비스 들을 중단한다.
-
진행 도중 서비스의 재시작 또는 재부팅이 필요한 경우 존재
-
실행 중인 서비스에 연결된 프로세스 등이 중단되면서 서비스 영향 가능
업무상 서버에서 운영하는 서비스는 아래와 같은 원칙으로 구축했다.
-
모든 서비스는 Docker 기반 운영
-
추가로 필요한 환경은 VirtualBox의 가상 환경으로 구축
따라서 VirtualBox와 Docker 중심으로 진행했다. 각자 환경에 맞춰서 진행하면 된다.
VirtualBox
실행 중인 가상 환경이 있는 경우 Suspend 적용 (종료가 가능한 경우 종료)
Docker
실행 중인 컨테이너가 존재하는 경우 Stop 적용
-
docker-compose로 실행한 경우 docker-compose stop
-
docker run으로 실행한 경우 docker stop
서버 재부팅
최신 업데이트가 완료되면 아래 명령으로 서버 재부팅을 진행한다.
$ sudo reboot now
업그레이드 진행
서버 업그레이드는 아래 방법으로 진행했다.
-
설정 파일 수정 (프록시 환경만 해당)
-
업그레이드 도구 실행
-
설치 전 주의사항 체크
-
설치 중 변경 사항 선택
-
설치 완료 후 재부팅
-
업그레이드 확인
설정 파일 수정 (프록시 환경만 해당)
사내에서 운영하는 서버망의 경우 기본적으로 외부 인터넷 연결이 제한된 경우가 많다.
이러한 환경에서는 do-release-upgrade 도구를 실행하면 연결 오류가 발생한다.
https로 지정 된 해당 서버 주소에 연결이 되지 않는 것이 원인이다.
아래와 같은 메시지가 출력된다.
Checking for a new Ubuntu release Failed to connect to https://changelog.ubuntu.com/meta-release.
Check your Internet connection or proxy settings
There is no development version of an LTS available.
To upgrade to the latest non-LTS development release set Prompt=normal in /etc/update-manager/release-upgrades.
해당 서버의 HTTPS 연결에 필요한 인증서 정보를 받아오지 못해 발생하는 오류로 해결 방법은 간단하다.
https로 연결하는 것을 http로 연결하도록 아래와 같이 설정을 변경하면 된다.
$ sudo vi /etc/update-manager/meta-release
## FROM
https://changelogs.ubuntu.com/meta-release
https://changelogs.ubuntu.com/meta-release-lts
## TO
http://changelogs.ubuntu.com/meta-release
http://changelogs.ubuntu.com/meta-release-lts
업그레이드 도구 실행
아래 명령을 실행하여 업그레이드 도구를 실행한다.
$ sudo do-upgrade-release
설치 전 주의사항 체크
SSH로 설치할 경우 1022 포트를 추가로 개방할 것인지 묻는 화면이다.
오류 발생을 대비한 비상용이므로 y를 입력한다. 실제로 사용하지는 않는다.
y를 입력하면 1022 포트 사용안내 및 터널링에 대한 설명을 제공한다. 엔터를 입력한다.
apt 설치를 위한 mirror 주소 변경 (sources.list)안내이다.
y를 입력하면 /etc/apt/sources.list의 배포판 버전이 focal (20.04)에서 jammy (22.04)로 변경된다.
Nexus3 사설 저장소를 사용하는데 오류가 발생하는 경우
Nexus3 사설 저장소를 사용하는 경우 업그레이드를 위해 APT 패키지를 받아 오면서 Bad Gateway가 발생하는 경우가 있다.
Nexus3의 버전이 낮아서 발생하는 것으로 3.39.0-01 버전에서 수정되었다.
Nexus3를 최신 버전으로 업그레이드하면 해결된다.
https://community.sonatype.com/t/apt-proxy-repo-for-ubuntu-2204-results-in-502-bad-gateway/8670
설치 중 변경 사항 선택
설치 도중 서비스 재시작 여부를 선택하는 화면이 나오면 Yes를 선택한다.
Docker 재시작 여부를 묻는 화면이 나오면 Yes (예)를 선택한다.
ssh server 관련 설정도 Keep the local version currently installed를 선택한다.
설치 완료 후 재부팅
22.04 업그레이드 이후 불필요한 패키지를 삭제한다는 메시지이다. Y를 입력한다.
설치가 완료 되면 재부팅 여부를 확인하는데, y를 입력해서 재부팅한다.
재부팅이 완료되면 ssh 연결을 통해 정상 접속 되는지 확인한다.
업그레이드 확인
아래 명령으로 정상적으로 판올림 되었는지 확인한다.
$ sudo cat /etc/issue
Ubuntu 22.04.1 LTS \n \l
$ uname -a
Linux HOSTNAME 5.15.0-58-generic #64-Ubuntu SMP Thu Jan 5 11:43:13 UTC 2023
x86_64 x86_64 x86_64 GNU/Linux
정상 동작 확인
업그레이드 이후 중단했던 프로그램과 서비스가 정상 동작하는지 확인한다.
공통 프로그램
VirtualBox와 Docker의 정상 동작 여부를 확인한다.
VirtualBox
아래와 같이 VirtualBox가 정상 동작하는지 확인한다.
사용중인 가상 머신이 있는 경우 정상적으로 동작하는지 확인한다.
Docker
아래 명령으로 Docker와 컨테이너가 정상 동작하는지 확인하고, 중단 된 컨테이너는 재시작한다.
$ docker info
$ docker ps
$ docker ps -a
Docker로 구동 중인 서비스
Docker 컨테이너로 실행 중인 서비스들의 정상 동작 여부를 확인한다.
참고문서
아래 문서를 참고하여 진행하였다.
'::: IT인터넷 :::' 카테고리의 다른 글
VirtualBox CentOS 가상머신의 하드디스크 추가와 파티션 설정 (0) | 2023.04.13 |
---|---|
VirtualBox 가상 환경에 2TB 이상의 하드디스크 추가하기 (0) | 2023.04.10 |
파이썬 라이브러리 의존성 확인하기 (0) | 2022.08.25 |
pymongo를 이용한 MongoDB의 CRUD 클래스 구현 (0) | 2022.08.22 |
Python으로 MongoDB 사용하기 (pymongo) (0) | 2022.08.18 |