1. Snaps on Ubuntu Desktop
Youngbin Han <sukso96100@gmail.com>
Leader, Ubuntu Korea Community
https://launchpad.net/~sukso96100
2. About me
• 한영빈(Youngbin Han)
• 성공회대학교 소프트웨어공학과 재학(2016.02~)
• 우분투한국커뮤니티 대표(2017.03~)
• 생각보다 많이 힘들더군요. 전 대표님들이 본인이 퇴물임을 강조하는 이
유를 알 거 같음…
• 그냥 이것저것 관심가는거 합니다.
• 요세는 Django, Electron, Docker 를 써보는 중입니다.
3. Index
• 전통적인 리눅스 패키지 사용과 문제점
• Snap 에 대한 소개 및 전통적인 리눅스 패키지와 비교
• Ubuntu Desktop 에서의 Snap 근황
• 데스크탑 앱을 Snap 패키지로 빌드하고 배포하기
5. Linux 에서 패키지를 설치하려면?
• 설치할 소프트웨어가 해당 배포판에서 패키지로 제공되는지 확인
• 저장소에서 패키지 검색
• 사용중인 배포판의 버전을 지원하는지 확인
• 우분투에서 제공하는 데비안 패키지의 경우 릴리즈별로 제공되는 패키지
가 다름(패키지 이름도 다른 경우가 있음.)
• 패키지 관리자로 패키지와 의존성 패키지 설치
• 설치 끝. 사용하면 됨.
6. 문제점
• 사용중인 배포판에서 패키지가 제공되지 않는다면?
• 직접 패키지를 빌드해서 설치?
• 제공이 되어도 사용중이 배포판 버전에 대해 지원하지 않는다면?
• 이걸 언제 다 패키징하냐…
• 개발자 입장에서는 사용자가 많아질수록 다양한 배포판을 지원해야 함
• 배포판별로 패키징 방식도 다르고, 제공되는 것도 조금씩 다르다.
• 배포판 버전별로도 패키징 해야함.
7. 문제점
• 의존성 문제
• 음… 의존성 패키지까지 잘 깔리면 참 좋은데, 꼭 그러란 법은 없다.
• 어떤 패키지는 의존성 패키지의 이전 버전을 요구하고, 또 어떤 패키지는
최신 버전을 요구한다, 그러나 두 버전을 동시에 깔 수가 없다.
• 배포판을 최신 버전으로 업그레이드 했는데, 이 버전의 배포판에는 내가
쓰던 프로그램이 요구하는 의존성 패키지를 제공하지 않는다. (으앜)
11. Click -> Snappy -> Snap
• 처음에는 Ubuntu Touch 를 위한 패키지 포멧인, *.click 으로 등장.
• Ubuntu 터치가 처음 등장한 Ubuntu 14.04 와 함께 등장.
• Click 패키지를 더 발전시켜서 Cloud 와 IoT 로 가져옴
• Click 이 진화하여 Snappy 패키지가 됨
• 범용 리눅스 패키지로 발전.
• 데스크탑, 클라우드, 사물인터넷 등 다양한 분야에서 사용.
• 이제는 Snap 이라고 불림.
12. 범용 리눅스 패키지(Universal Linux Package)
• Snap이 지원되는 모든 리눅스 배포판에서 사용 가능
• 데스크탑, 서버, 클라우드, 디바이스(IoT 등) 용으로 빌드 가능
• 웬만한 용도로는 거의 다 빌드 가능하다고 보면 됩니다.
• 한번 빌드해서 Snap 이 지원되는 모든 배포판으로 한번에 배포
• 배포판 버전별로 패키지를 관리 할 필요도 없음.
14. 컨테이너처럼 격리되어 있음
• 기존 리눅스 패키지 처럼 시스템 디렉터리 (/usr/share, /usr/bin
등) 이 아닌, 별도의 전용 경로 (/var/snap)에 모두 설치됨.
• 패키지에 필요한 의존성까지 모두 패키지에 포함되어 있음.
• 앱에 대한 정보(버전, 의존성 등)을 기술한 snap.yaml과 앱 코드를
포함한 SquashFS 로 구성되어 있음.
• Confinements 와 Interfaces 를 이용해서 패키지의 권한이나 동
작 등을 제한할 수 있음.
16. Transactional Updates
• 패키지가 리비전별로 디렉터리를 만들어 관리하며, 현재 쓰는 버
전을 각 패키지 디렉터리별로 있는 current 에 심볼릭 링크 함.
• 패키지의 파일은 /var/lib/snapd/snaps/(name)_(rev).snap 에 설치되고,
/snap/(name)/(rev) 에 SquashFS 로 마운트 되어, /snap/(name)/current
에 심볼릭 링크 됨.
• 패키지가 사용하는 쓰기 영역은 /var/snap/(name)/(rev) 로 생성되어,
/var/snap/(name)/current 에 심볼릭 링크 됨.
• 새 버전으로 업데이트 하나가 오류가 나면, 자동으로 롤백 됨.
• 심볼릭 링크를 변경해서 이전 버전으로 쉽게 되돌리는 방식.
17. Channels
• 용도에 따라 채널을 지정하여 배포 가능.
• grade 와 confinement 속성 값에 따라 정해짐.
18. grade, confinement 값에 따른 배포 가능 채널
grade / confinement strict classic devmode
stable 모든 채널 모든 채널 Beta, edge 만
devel Beta, edge 만 Beta, edge 만 Beta, edge 만
20. 2016.04 ~
• Ubuntu 16.04 LTS 부터 기본으로 탑제됨.
• 이전 버전은 따로 저장소에서 받아서 설치 가능.
• 우분투 소프트웨어 센터(gnome-software) 에서 snap 패키지를
설치 지원 시작.
• 완벽하지는 않음.
• Unity 연동 제공
• Snap Desktop Launcher
22. 2016.10 ~
• Unity 8 Snap (지금은 망한 Unity 8…)
• 그리고 더 많은 Snap 앱 : HexChat, Telegram, VLC, etc…
• 우분투 소프트웨어 센터에서 Snap 앱 스크린샷 조회 가능
• Ubuntu 14.04 에서도 Snap 사용 가능.(2017.02)
23. 2017.01~
• Ubuntu 14.04 에서도 Snap 사용 가능.
• Classic Confinement 도입
• 전체 시스템에 접근이 필요한 앱들이 Classic Confinement 를 이용해
Snap 으로 패키징 되어 배포됨.
• 예 : Atom, VS Code, PyCharm 같은 개발자 도구
• 우분투 소프트웨어 센터의 Editor’s Picks 부분에 Snap 앱도 표시
• KDE Discover 에서도 Snap 앱 설치 가능.
25. In Ubuntu 17.10?
• 우분투 소프트웨어 센터
• Editor’s Picks 부분에 오직 Snap 앱만 표시.
• Featured 부분에 Snap 앱도 표시.
• 당연하게도(?) 더 많은 앱이 Snap 으로 패키징 되어 배포됨.
26. Snapping your app
Let’s snap simplenote-electron for example.
https://github.com/Automattic/simplenote-electron
27. 미리 빌드된 Tarball 받고, 초기 파일 생성
wget https://github.com/Automattic/simplenote-
electron/releases/download/v1.0.8/Simplenote-linux-
x64.1.0.8.tar.gz
tar xvzf Simplenote-linux-x64.1.0.8.tar.gz
cd Simplenote-linux-x64.1.0.8.tar.gz
snapcraft init # snapcraft.yaml 생성