Linux에서 스냅 패키지로 작업하는 방법

Linux 환경에서 소프트웨어 패키지를 설치할 때, 스냅(Snap)을 사용하면 의존성 문제와 기존 응용 프로그램의 충돌을 피할 수 있습니다. 스냅 패키지는 원래 Ubuntu를 위해 설계되었지만, 이제는 다양한 Linux 배포판에서 폭넓게 활용되고 있습니다.

스냅 패키지의 개념

과거에는 Linux에서 응용 프로그램을 설치하는 과정이 꽤 복잡했습니다. 특정 라이브러리를 찾기 위해 설치를 시도하면, 의존성 누락이나 오래된 버전으로 인해 문제가 발생했습니다. 필요한 리소스를 찾아 설치했지만, 이로 인해 다른 응용 프로그램이 작동하지 않는 경우가 있었습니다. 이러한 문제는 개선된 패키지 관리 시스템(예: apt, dnf, pacman)의 등장으로 완화되었지만, 여전히 동일한 응용 프로그램의 여러 버전 설치나 특정 라이브러리 버전에 묶여 충돌하는 응용 프로그램 간의 문제가 있었습니다.

이러한 문제를 해결하기 위해 등장한 것이 스냅과 같은 응용 프로그램 패키징 및 배포 시스템입니다. 스냅은 Snappy라는 이름으로도 알려져 있으며, Ubuntu Touch 프로젝트에서 사용된 Click 패키징 시스템을 기반으로 합니다. 유사한 시스템으로는 AppImageFlatpak이 있습니다.

이러한 시스템은 응용 프로그램과 함께 필요한 의존성 및 기타 요구 사항을 하나의 압축 파일에 묶습니다. 응용 프로그램은 격리된 환경(미니 컨테이너)에서 실행되며, 다른 응용 프로그램과 분리되어 있습니다. 패키지화된 라이브러리 및 리소스는 해당 응용 프로그램 내에서만 사용됩니다.

스냅 패키지는 전통적인 방식으로 설치되는 것이 아니므로, 동일한 리소스의 다른 버전을 요구하는 응용 프로그램 간에 충돌이 발생하지 않습니다. 각 응용 프로그램은 고유한 샌드박스 환경에서 작동하기 때문에, 서로 다른 라이브러리 버전을 요구하는 응용 프로그램을 동시에 실행할 수 있습니다.

그렇다면 스냅 패키지는 어떻게 설치되고 관리될까요? 스냅은 단일 패키지 파일을 다운로드하여 압축을 풀고, SquashFS 가상 파일 시스템으로 마운트합니다. 이 과정은 사용자에게 보이지 않게 처리되며, 사용자는 응용 프로그램이 설치되어 사용할 수 있게 되었다는 사실만 인지합니다.

하지만 스냅 패키지는 응용 프로그램에 필요한 모든 리소스를 포함해야 하므로, 패키지 파일 크기가 커질 수 있습니다. 또한 MySQL이나 Apache와 같이 일반적으로 한 번만 설치하는 리소스가 여러 스냅 패키지에서 중복될 수 있습니다. 서로 다른 스냅 응용 프로그램이 동일한 리소스를 필요로 하는 경우, 각각의 응용 프로그램은 자체 복사본을 갖게 됩니다.

이는 설치의 간편성과 리소스 충돌 문제 해결을 위한 일종의 절충안입니다.

스냅 설치 과정

Snappy는 Ubuntu 16.04 버전부터 도입되었으므로, 해당 버전 이상을 사용하는 경우 바로 사용할 수 있습니다. 본 글의 작성 환경에서는 Manjaro 18.04에 Snappy가 이미 설치되어 있었지만, Fedora 31에서는 별도로 설치해야 했습니다.

스냅(snap)은 패키지 파일의 이름이자, 패키지 파일과 상호 작용하는 데 사용되는 명령입니다. 또한 Snapd 데몬의 이름이기도 합니다. 컴퓨터에 Snapd가 설치되어 있지 않으면, 스냅을 사용하기 위해 먼저 설치해야 합니다.

Fedora에 Snapd를 설치하려면 다음 명령을 입력합니다:

sudo dnf install snapd

Manjaro에 설치해야 하는 경우 다음 명령을 사용합니다:

sudo pacman -Sy snapd
sudo systemctl enable --now snapd.socket

snap version 명령을 실행하면 스냅 클라이언트, snapd 데몬, 소프트웨어 시리즈 버전 정보 및 Linux 배포판 이름, 릴리스 버전, 커널 버전을 확인할 수 있습니다.

다음 명령을 입력합니다:

snap version

스냅 패키지 설치 방법

스냅 패키지를 설치하는 과정은 매우 간단합니다. 먼저 snap 명령을 사용하여 원하는 패키지를 검색한 후, 설치 명령을 실행하면 됩니다.

예를 들어 GIMP 이미지 편집기를 찾아서 설치하려면 다음 명령을 입력합니다:

snap find gimp

snap 명령은 “gimp” 검색어와 일치하는 모든 항목을 찾아 결과를 반환합니다. 검색어와 일치하거나 검색어를 언급하는 모든 패키지가 표시됩니다.

표시된 패키지 중 하나를 설치하려면, 이름 열의 값을 사용하여 다음 명령을 실행합니다:

sudo snap install gimp

다운로드가 완료되면 진행률이 표시되고, 터미널 창 왼쪽에 진행률 표시줄이 나타납니다. 설치가 완료되면 패키지가 설치되었음을 알리는 메시지가 표시됩니다(아래 그림 참조).

df 명령을 사용하면 Linux 컴퓨터에 구성된 다른 파일 시스템의 용량 및 사용량을 확인할 수 있습니다. df 명령의 출력 결과를 grep 명령으로 파이프하여 “gimp”를 검색하면, 방금 설치한 패키지 항목을 분리할 수 있습니다.

다음 명령을 입력합니다:

df | grep gimp

이 결과는 스냅 패키지가 마치 파일 시스템처럼 마운트되었음을 보여줍니다. 마운트 지점은 /snap/gimp/252의 스냅 디렉토리에 있습니다. “252”는 이 버전의 GIMP의 릴리스 번호입니다.

파일 시스템은 /dev/loop18로 나열됩니다. 루프 장치 파일은 일반 파일을 블록 장치로 액세스할 수 있도록 하는 데 사용됩니다. 일반적으로 디스크 이미지에 파일 시스템을 마운트하는 데 사용됩니다. 이 경우에는 스냅 패키지 내에 SquashFS 파일 시스템이 마운트됩니다. “18”은 이 Linux 컴퓨터에서 사용 중인 18번째 /dev/loop 장치 파일을 의미합니다.

df 명령을 사용하여 이를 빠르게 확인할 수 있습니다. -t(유형) 옵션을 사용하여 출력을 SquashFS 파일 유형으로만 제한합니다.

다음 명령을 입력합니다:

df -t squashfs

마운트된 SquashFS 파일 시스템 목록이 표시됩니다. /dev/loop 장치 파일이 각각을 처리하며, 이 경우 총 18개가 있습니다.

각 파일 시스템은 /snap 디렉토리 내의 디렉토리에 마운트됩니다. 하지만 이것이 이 컴퓨터에 18개의 다른 스냅 패키지가 설치되어 있다는 의미는 아닙니다. 현재 사용 중인 Ubuntu 배포판은 일부 스냅 패키지가 기본적으로 설치되어 제공되며, GIMP와 같은 다른 패키지는 사용자가 설치한 것입니다.

또한 Snapd를 설치하면 다른 스냅 패키지의 요구 사항을 처리하기 위한 일부 핵심 스냅 패키지가 설치됩니다.

설치된 스냅 패키지 목록은 snap list 명령을 사용하여 확인할 수 있습니다:

snap list

출력 결과가 길어서, 목록의 끝부분은 다음과 같습니다:

전체 목록은 다음과 같습니다:

Name                 Version                    Rev   Tracking  Publisher    Notes
core                 16-2.43.3                  8689  stable    canonical*   core
core18               20200124                   1668  stable    canonical*   base
gimp                 2.10.18                    252   stable    snapcrafters -
gnome-3-26-1604      3.26.0.20191114            98    stable/…  canonical*   -
gnome-3-28-1804      3.28.0-16-g27c9498.27c9498 116   stable    canonical*   -
gnome-calculator     3.34.1+git1.d34dc842       544   stable/…  canonical*   -
gnome-characters     v3.32.1+git3.b9120df       399   stable/…  canonical*   -
gnome-logs           3.34.0                     81    stable/…  canonical*   -
gnome-system-monitor 3.32.1-3-g0ea89b4922       127   stable/…  canonical*   -
gtk-common-themes    0.1-28-g1503258            1440  stable/…  canonical*   -

보시다시피, 설치된 스냅 패키지는 총 10개이지만, 18개의 SquashFS 파일 시스템이 마운트되어 있습니다. 테이블 열은 비교적 자명하지만, 몇 가지 설명을 추가하겠습니다:

이름: 설치된 스냅 패키지의 이름입니다.
버전: 스냅 패키지에 포함된 소프트웨어의 버전 번호입니다.
Rev: 스냅 패키지의 개정 번호입니다.
추적: 스냅 패키지가 업데이트를 모니터링하는 채널입니다. 네 가지 채널이 있습니다:
안정: 기본 채널이며, 가장 안정적인 패키지가 포함되어 있습니다.
후보: 안정적인 채널에 포함되기 전에 최종 테스트를 거치는 소프트웨어(릴리스 후보)를 포함합니다.
베타: 개발 주기 후반의 품질이지만, 안정성은 보장되지 않습니다.
Edge: 초기 빌드 테스터용 채널이며, 중요한 작업이나 프로덕션 환경에서는 사용을 권장하지 않습니다.

게시자: 스냅 패키지를 출시한 개인, 회사 또는 조직입니다. 확인된 게시자는 게시자 이름 옆에 녹색 확인 표시가 나타나며, 확인되지 않은 게시자는 별표(*)로 표시됩니다. (유니코드 유니코드) 참고.

참고 사항: 추가 정보 및 세부 사항

스냅 채널에 대한 정보

info 옵션을 사용하여 스냅 패키지에 대한 설명을 확인할 수 있습니다.

snap info gtk-common-themes

패키지가 추적 중인 채널과 각 채널에 있는 스냅 패키지의 소프트웨어 버전을 확인할 수 있습니다. 대부분의 경우 안정적인 채널을 유지하는 것이 좋습니다.

스냅 패키지는 하루에 네 번 추적 중인 채널에서 사용 가능한 최신 소프트웨어 버전을 확인합니다. 채널을 변경하려면 refresh--channel 옵션을 사용할 수 있습니다.

sudo snap refresh gtk-common-themes --channel=beta

최신 버전의 소프트웨어가 있는 경우 설치가 진행되지만, 이 경우에는 변경 사항이 없었습니다. 하지만 스냅 패키지는 이제 베타 채널을 추적하게 되었으며, 새로운 베타 버전이 출시되면 자동으로 다운로드 및 업그레이드됩니다.

--list 옵션을 사용하여 컴퓨터에 설치된 스냅 패키지에 대한 업데이트가 있는지 확인할 수 있습니다.

sudo snap refresh --list

컴퓨터의 스냅 패키지가 추적하는 채널에 최신 소프트웨어 버전이 있는 경우 알려줍니다.

sudo snap refresh gtk-common-themes

스냅 패키지 제거

스냅 패키지를 제거하려면 remove 옵션을 사용합니다.

sudo snap remove gimp

스냅 관련 명령어 정리

스냅 패키지 사용법은 비교적 간단하지만, 도움이 될 수 있도록 자주 사용되는 명령어 목록을 정리했습니다.
패키지 검색: snap find package_name
패키지 설치: sudo snap install package_name
설치된 모든 패키지 확인: snap list
특정 패키지 정보 확인: snap info package_name
업데이트를 위해 패키지가 추적하는 채널 변경: sudo snap refresh package_name --channel=channel_name
설치된 패키지에 대한 업데이트 확인: sudo snap refresh --list
패키지 수동 업데이트: sudo snap refresh package_name

패키지 제거: sudo snap remove package_name