하나의 디스크에 여러가지 버전의 Ubuntu 설치하기

ROS를 사용하여 개발을 하다보니, ROS의 버전에 따라 Ubuntu의 배포판이 달라져야 하는 경우가 생긴다. 예를 들자면, ROS2의 현재 최신 LTS버전은 Humble로 Ubuntu 22.04에서 설치가 되어야 하고, ROS1의 최종 LTS버전은 Noetic으로 Ubuntu 20.04에서 지원이 멈춰있다 (이제 더이상 배포판 업데이트 지원 불가).

따라서 이 두가지 경우를 모두 사용하기 위해선, 각각 따로 개발용 PC를 구비하던가 아니면 외장 SSD를 이용하는 방법이 있긴 하지만, 번거로운건 어쩔수 없다.

하나의 SSD에 GRUB 부트로더를 하나만 사용하고, 스왑 파티션도 공용으로 사용하고, 루트 파티션만 분리하여 설치하면 위와 같은 문제가 깔끔이 해결된다. 여전히 재부팅이 필요한 건 어쩔수 없지만..^^

기록 차원에서 설치 순서를 간단히 정리해본다. 윈도우와 듀얼부팅으로 사용할 때도 적용 가능. 물론 배포판의 버전이 달라도 상관없음.

먼저, 가장 최신 버전의 배포판을 설치한다. 이건 여느때와 마찬가지로 그냥 설치하면 됨.

설치할 때, 디스크의 파티션을 설정하는 부분이 있는데, 이때 다음과 같은 구조로 만들어준다.

/dev/sda1    /boot    EFI     2000MB
/dev/sda2    /        ext4    200000MB
/dev/sda3    None     ext4    200000MB
/dev/sda4    swap     swap    32768MB

앞쪽 디스크 이름은 각자의 개발 환경에 따라 다를테니, 유념하시면 되고, 기존과 다른 점은 /boot 파티션을 따로 분리한 것과 루트 (/) 파티션을 만들고 또 동일한 크기 혹은 원하는 크기로 또 하나의 파티션을 만들어 놓은 것이다.

이제 설치를 완료 (루트 파티션을 /dev/sda2로 선택)하고.. 부팅이 제대로 되는 것을 확인한 다음…

다음으로 추가로 설치할 배포판 설치를 진행한다. 이때는 바로 설치를 진행하지 말고, Try Ubuntu 등 일단 임시로 사용할 수 있는 모드로 진입.

여기에선 부트로더 설치를 하지 않고, 배포판 설치를 진행하야 하므로, 터미널을 열고

$ ubiquity -b

와 같이 실행하여 설치를 진행한다. 디스크 설정 시, 설치할 파티션을 위에서 만든 /dev/sda3로 선택한다. 설치가 완료되면, 그냥 재부팅.

재부팅하면, 기존에 설치한 최신 배포판으로 부팅이 될텐데, 완료되면 터미널을 열고,

$ sudo update-grub2

를 하면, 자동으로 방금 전에 설치한 추가 배포판의 커널을 인식하여 GRUB의 부트 엔트리에 등록해준다. 또 기본값으로는 GRUB가 후다닥 지나가버리게 설정되어 있으므로, /etc/default/grub 파일을 열어서 다음과 같이 수정해준다.

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

이제 끝!