Thứ ba, 25/02/2020 | 00:00 GMT+7

Cách đóng gói và xuất bản ứng dụng Snap trên Ubuntu 18.04

Một trong những thách thức lớn nhất trong quá trình phát triển ứng dụng là bước cuối cùng là phân phối thành phẩm cho user hoặc khách hàng của bạn. Nhiều phương pháp triển khai ứng dụng hiện có thiếu thân thiện với user và bảo mật, hoặc không cung cấp các phương pháp tự động cập nhật ứng dụng sau khi ứng dụng đã được cài đặt.

Snap là một định dạng đóng gói ứng dụng hiện đại với các tính năng bảo mật và sandbox mạnh mẽ, bao gồm cách ly hệ thống file , cập nhật tự động và quản lý phụ thuộc tích hợp. Các ứng dụng Snap, được gọi là Snaps, có thể được download và cài đặt bằng chương trình dòng lệnh, giống như apt hoặc yum . Ubuntu được cài đặt sẵn Snap, nghĩa là có rất nhiều đối tượng sử dụng ứng dụng Snap.

Trong hướng dẫn này, bạn sẽ tạo một ứng dụng Snap và xuất bản nó trên Snap Store .

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần :

  • Một server Ubuntu 18.04 được cài đặt theo Cài đặt server ban đầu với Ubuntu 18.04 , bao gồm cả user không phải root có quyền sudo .

  • Một ứng dụng mà bạn muốn đóng gói và phát hành dưới dạng Snap. Đây có thể là một ứng dụng phức tạp mà bạn đã tạo, một dự án nguồn mở thông thường hoặc một câu đơn giản “Xin chào, thế giới!” chương trình. Nếu bạn chưa có ứng dụng, Bước 1 của hướng dẫn này sẽ trình bày cách bạn có thể tạo chương trình Hello World trong Go.

  • Một account trên Trang tổng quan dành cho nhà phát triển Snapcraft .

Khi đã sẵn sàng những thứ này, hãy đăng nhập vào server của bạn với quyền là user không phải root của bạn để bắt đầu.

Bước 1 - Chuẩn bị đơn đăng ký của bạn để đóng gói

Đầu tiên, bạn sẽ chuẩn bị ứng dụng của bạn để đóng gói dưới dạng ứng dụng Snap bằng cách đảm bảo mọi thứ cần thiết đều có trong một folder duy nhất.

Bắt đầu bằng cách tạo một folder mới cho Snap của bạn và chuyển vào đó:

  • mkdir ~/your-snap
  • cd ~/your-snap

Tiếp theo, nếu bạn đã có một ứng dụng, hãy đặt một bản sao hoàn chỉnh của mã nguồn cho ứng dụng của bạn vào folder mà bạn vừa tạo. Quá trình này ở đây sẽ thay đổi đáng kể tùy thuộc vào ứng dụng chính xác mà bạn đang đóng gói, tuy nhiên trong trường hợp mã nguồn được lưu trữ trong một repository Git, bạn có thể git init một repository trong folder và kéo xuống tất cả các mã có liên quan.

Nếu bạn chưa có ứng dụng nào muốn đóng gói, bạn có thể tạo chương trình “Hello World” để sử dụng thay thế. Nếu bạn muốn biết thêm ngữ cảnh về cách viết chương trình này với Go, hãy xem hướng dẫn Cách viết chương trình đầu tiên của bạn trong Go .

Bạn có thể thực hiện việc này trước tiên bằng cách tạo một file Go mới và mở nó bằng editor bạn muốn :

  • nano helloworld.go

Tiếp theo, thêm mã sau vào file :

helloworld.go
package main import "fmt" func main() {   fmt.Println("Hello, world!") } 

Sau đó lưu và thoát khỏi file .

Nếu bạn chưa cài đặt Go, bạn có thể cài đặt nó bằng lệnh sau:

  • sudo apt install golang-go

Sau khi cài đặt Go, bạn có thể chạy chương trình mới của bạn để kiểm tra xem nó có hoạt động không:

  • go run helloworld.go

Bạn sẽ thấy kết quả sau:

Output
Hello, world!

Bạn đã chuẩn bị ứng dụng của bạn để đóng gói dưới dạng Snap. Tiếp theo, bạn sẽ cài đặt phần mềm cần thiết để bắt đầu quá trình đóng gói.

Bước 2 - Cài đặt Snapcraft

Trong bước này, bạn sẽ download và cài đặt Snapcraft, đây là tên của công cụ đóng gói ứng dụng Snap chính thức. Snapcraft có sẵn từ Snap Store, được tích hợp sẵn trong Ubuntu theo mặc định. Điều này nghĩa là bạn có thể cài đặt Snapcraft từ dòng lệnh bằng cách sử dụng lệnh snap .

Lệnh snap tương đương với apt , nhưng bạn có thể sử dụng nó để cài đặt phần mềm từ Snap Store, thay vì các gói từ kho Apt.

Để cài đặt Snapcraft, hãy chạy lệnh sau:

  • sudo snap install snapcraft --classic

Bạn sử dụng đối số lệnh --classic để Snapcraft cài đặt mà không có các tính năng sandbox nghiêm ngặt mà Snaps thường sử dụng. Snapcraft yêu cầu đối số này vì nó cần quyền truy cập quyền hơn vào hệ thống của bạn để đóng gói các ứng dụng một cách tin cậy .

Khi bạn đã cài đặt Snapcraft, bạn sẽ thấy những điều sau:

Output
snapcraft 3.9.8 from Canonical✓ installed

Cuối cùng, bạn có thể kiểm tra kỹ cài đặt Snapcraft bằng lệnh:

  • snapcraft --version

Điều này sẽ hiển thị một cái gì đó tương tự như:

Output
snapcraft, version 3.9.8

Đến đây bạn đã cài đặt Snapcraft, bạn có thể bắt đầu xác cấu hình và metadata cho ứng dụng Snap của bạn .

Bước 3 - Xác cấu hình và metadata cho Snap của bạn

Trong bước này, bạn sẽ bắt đầu xác cấu hình , cấu trúc và metadata cho ứng dụng Snap của bạn .

Bắt đầu bằng cách đảm bảo bạn vẫn đang làm việc trong folder ứng dụng Snap của bạn :

  • cd ~/your-snap

Tiếp theo, tạo và chỉnh sửa file snapcraft.yaml bằng editor bạn muốn :

  • nano snapcraft.yaml

Bạn sẽ sử dụng file snapcraft.yaml để lưu trữ tất cả cấu hình cho ứng dụng Snap của bạn , bao gồm tên, mô tả và version , cũng như các cài đặt liên quan đến quản lý phụ thuộc và sandbox .

Bắt đầu bằng cách xác định tên, tóm tắt, mô tả và số version cho ứng dụng của bạn:

snapcraft.yaml
name: your-snap summary: A summary of your application in 78 characters or less. description: |   A detailed description of your application.   The description can have multiple lines. version: '1.0' 

Tên Snap của bạn cần phải là duy nhất nếu bạn muốn xuất bản nó trên Snap Store —tìm kiếm các ứng dụng khác có cùng tên đảm bảo rằng nó chưa được sử dụng.

Tiếp theo, bạn có thể xác định (các) lệnh mà bạn muốn liên kết với ứng dụng của bạn . Điều này sẽ cho phép Snap của bạn được sử dụng trực tiếp từ dòng lệnh Bash như một lệnh bình thường.

Thêm phần sau vào file snapcraft.yaml của bạn:

snapcraft.yaml
. . . apps:   your-snap-command:     command: your-snap 

your-snap-command là tên của lệnh mà bạn muốn xác định. Ví dụ: bạn có thể cần sử dụng lệnh helloworld để chạy chương trình Hello World của bạn .

Bạn sử dụng command: your-snap để cho Snapcraft biết phải làm gì khi lệnh ứng dụng được chạy. Trong trường hợp của chương trình Hello World, bạn sẽ sử dụng giá trị helloworld để tham chiếu đến file helloworld.go , file này sẽ cho phép Snapcraft chạy chương trình của bạn thành công.

Điều này dẫn đến cấu hình ví dụ sau:

snapcraft.yaml
apps:   helloworld:     command: helloworld 

Nếu tên lệnh khớp chính xác với tên Snap, bạn có thể chạy nó trực tiếp từ dòng lệnh. Nếu lệnh không trùng với tên Snap, lệnh sẽ tự động được đặt trước với tên của Snap. Ví dụ: helloworld.command1 .

Cuối cùng, bạn có thể xác định các phần tạo nên ứng dụng Snap của bạn . Ứng dụng Snap được tạo thành từ nhiều phần, là tất cả các thành phần tạo nên ứng dụng của bạn. Trong nhiều trường hợp, chỉ có một phần, đó là bản thân ứng dụng.

Mỗi phần có một plugin liên kết. Ví dụ: đối với các thành phần của ứng dụng của bạn được viết bằng Ruby, plugin ruby được sử dụng và đối với các thành phần được viết bằng Go, plugin go được sử dụng.

Bạn có thể sử dụng lệnh list-plugins Snapcraft để xác định (các) plugin chính xác cho ứng dụng của bạn :

  • snapcraft list-plugins

Thao tác này sẽ xuất ra một danh sách tương tự như sau:

Output
ant catkin-tools conda dump gradle make nil python rust autotools cmake crystal go kbuild maven nodejs qmake scons catkin colcon dotnet godeps kernel meson plainbox-provider ruby waf

Các plugin phổ biến nhất là những plugin dành cho các ngôn ngữ lập trình phổ biến, chẳng hạn như Go, Rust, Ruby hoặc Python.

Khi bạn đã xác định đúng các plugin cho ứng dụng của bạn , bạn có thể bắt đầu thêm cấu hình parts vào file snapcraft.yaml của bạn :

snapcraft.yaml
. . . parts:   your-snap:     plugin: plugin-name     source: . 

Bạn sử dụng tham số cấu hình source để chỉ định đường dẫn tương đối đến mã nguồn cho ứng dụng của bạn. Thông thường, đây sẽ là cùng một folder với chính file snapcraft.yaml , vì vậy giá trị source là một dấu chấm ( . ).

Lưu ý: Nếu thành phần ứng dụng của bạn có bất kỳ phụ thuộc nào được yêu cầu cho việc xây dựng hoặc chạy nó, bạn có thể chỉ định các thành phần này bằng cách sử dụng thuộc tính stage-packages bản build-packages stage-packages . Sau đó, các tên phụ thuộc được chỉ định sẽ được tự động tìm nạp từ trình quản lý gói mặc định cho hệ thống của bạn.

Ví dụ:

snapcraft.yaml
parts:   your-snap:   plugin: plugin-name   source: .   build-packages:   - gcc   - make   stage-packages:   - libcurl4 

Một số plugin Snapcraft có các tùy chọn cụ thể của riêng chúng có thể được yêu cầu cho ứng dụng của bạn, vì vậy bạn nên xem lại các trang hướng dẫn có liên quan cho plugin của bạn :

  • snapcraft help plugin-name

Trong trường hợp ứng dụng Go, bạn cũng sẽ chỉ định go-importpath . Đối với cấu hình Hello World, điều này dẫn đến cấu hình ví dụ sau:

snapcraft.yaml
parts:   helloworld:     plugin: go     source: .     go-importpath: helloworld 

Bạn có thể mở file snapcraft.yaml để thêm cấu hình trong bước tiếp theo.

Bạn đã xác cấu hình cơ sở cho ứng dụng Snap của bạn . Tiếp theo, bạn sẽ cấu hình các khía cạnh bảo mật và sandbox của ứng dụng của bạn .

Bước 4 - Bảo mật ứng dụng Snap của bạn

Các ứng dụng Snap được thiết kế để chạy trong môi trường sandbox , vì vậy trong bước này, bạn sẽ cấu hình sandbox cho Snap của bạn . Đầu tiên, bạn cần kích hoạt tính năng sandbox cho ứng dụng của bạn , được biết đến trong Snapcraft là tính năng confinement .

Thêm phần sau vào file snapcraft.yaml của bạn:

snapcraft.yaml
. . . confinement: strict 

Điều này sẽ kích hoạt sandbox cho ứng dụng của bạn, ngăn ứng dụng đó truy cập internet, các Snaps đang chạy khác hoặc chính hệ thống server lưu trữ. Tuy nhiên, trong hầu hết các trường hợp, các ứng dụng cần có khả năng giao tiếp bên ngoài sandbox của chúng như khi chúng cần truy cập internet hoặc đọc / ghi vào hệ thống file .

Các quyền này, được gọi là giao diện trong Snapcraft, có thể được cấp cho ứng dụng Snap của bạn bằng Plugin. Sử dụng Plugin, bạn có thể có quyền kiểm soát chi tiết đối với sandbox cho ứng dụng của bạn , để cấp cho ứng dụng quyền truy cập mà nó yêu cầu và không có gì khác ( nguyên tắc ít quyền nhất ).

Các giao diện chính xác được yêu cầu sẽ khác nhau tùy thuộc vào ứng dụng của bạn. Một số giao diện phổ biến nhất là:

  • audio-playback - Cho phép phát / phát âm thanh.
  • audio-record - Cho phép nhập / ghi âm thanh.
  • camera - Cho phép truy cập vào các webcam được kết nối.
  • home - Cho phép truy cập vào các file không ẩn trong folder chính của bạn.
  • network - Cho phép truy cập vào mạng / internet.
  • network-bind - Cho phép liên kết với các cổng để hoạt động như một dịch vụ mạng.
  • system-files - Cho phép truy cập vào toàn bộ hệ thống file của server .

Danh sách đầy đủ các giao diện có sẵn có thể được tìm thấy trong tài liệu Snapcraft trong Giao diện được hỗ trợ .

Một khi bạn đã xác định tất cả các giao diện cần thiết cho ứng dụng của bạn, bạn có thể bắt đầu gán này để plugs trong của bạn snapcraft.yaml file .

Cấu hình ví dụ sau sẽ cho phép ứng dụng truy cập mạng và khu vực nhà của user :

snapcraft.yaml
. . . plugs:   your-snap-home:     interface: home   your-snap-network:     interface: network 

Lưu và thoát khỏi file của bạn.

Tên của Phích cắm phải là tên mô tả để giúp user xác định mục đích của Phích cắm.

Bạn đã bật sandbox cho Snap của bạn và cấu hình một số Plugin để cấp quyền truy cập hạn chế vào tài nguyên hệ thống. Tiếp theo, bạn sẽ hoàn thành việc xây dựng ứng dụng Snap của bạn .

Bước 5 - Xây dựng và kiểm tra ứng dụng Snap của bạn

Đến đây bạn đã viết tất cả cấu hình cần thiết cho Snap của bạn , bạn có thể tiến hành xây dựng nó và thử nghiệm gói Snap local .

Nếu bạn đang theo dõi bằng cách sử dụng chương trình Hello World làm ứng dụng của bạn , thì file snapcraft.yaml hoàn chỉnh của bạn bây giờ sẽ trông giống như sau:

snapcraft.yaml
name: helloworld summary: A simple Hello World program. description: |   A simple Hello World program written in Go.   Packaged as a Snap application using Snapcraft. version: '1.0' confinement: strict  apps:   helloworld:     command: helloworld  parts:   helloworld:     plugin: go     source: .     go-importpath: helloworld  plugs:   helloworld-home:     interface: home   helloworld-network:     interface: network 

Để xây dựng ứng dụng Snap của bạn, hãy chạy lệnh snapcraft từ trong folder dành cho Snap của bạn:

  • snapcraft

Sau đó Snapcraft sẽ tự động chạy một máy ảo (VM) và bắt đầu xây dựng Snap của bạn. Sau khi hoàn tất, Snapcraft sẽ thoát ra và bạn sẽ thấy một cái gì đó tương tự như sau:

Output
Snapped your-snap_1.0_amd64.snap

Đến đây bạn có thể cài đặt Snap local của bạn để kiểm tra xem nó có đang hoạt động hay không:

  • sudo snap install your-snap.snap --dangerous

Đối số lệnh --dangerous là bắt buộc khi bạn đang cài đặt Snap local chưa được ký.

Output
your-snap 1.0 installed

Khi quá trình cài đặt hoàn tất, bạn có thể chạy Snap của bạn bằng lệnh liên quan. Ví dụ:

  • helloworld

Trong trường hợp của chương trình Hello World ví dụ, kết quả sau sẽ là:

Output
Hello, world!

Bạn cũng có thể xem policy sandbox cho Snap của bạn đảm bảo rằng các quyền được chỉ định đã được cấp đúng cách:

  • snap connections your-snap

Thao tác này sẽ xuất ra danh sách các Plugin và giao diện, tương tự như sau:

Output
snap connections your-snap Interface Plug Slot Notes home your-snap:your-snap-home :home - network your-snap:your-snap-network :network -

Trong bước này, bạn đã xây dựng Snap của bạn và cài đặt nó local để kiểm tra xem nó có đang hoạt động hay không. Tiếp theo, bạn sẽ xuất bản Snap của bạn trên Snap Store.

Bước 6 - Xuất bản Snap của bạn

Đến đây bạn đã xây dựng và thử nghiệm ứng dụng Snap của bạn , đã đến lúc phát hành nó trên Snap Store.

Bắt đầu bằng cách đăng nhập vào account Nhà phát triển Snap của bạn bằng ứng dụng dòng lệnh Snapcraft:

  • snapcraft login

Làm theo dấu nhắc để nhập địa chỉ email và password của bạn.

Tiếp theo, bạn cần đăng ký tên của ứng dụng trên Snap Store:

  • snapcraft register your-snap

Khi bạn đã đăng ký tên Snap, bạn có thể đẩy gói Snap đã tích hợp sẵn vào cửa hàng:

  • snapcraft push your-snap.snap

Bạn sẽ thấy kết quả tương tự như sau:

Output
Preparing to push 'your-snap_1.0_amd64.snap'. Install the review-tools from the Snap Store for enhanced checks before uploading this snap. Pushing 'your-snap_1.0_amd64.snap' [===================================================================================================] 100% Processing...| Ready to release! Revision 1 of 'your-snap' created.

Mỗi lần bạn đẩy đến cửa hàng Snap, số bản sửa đổi sẽ tăng lên, bắt đầu từ một. Điều này hữu ích để giúp xác định các bản dựng khác nhau của Snap của bạn.

Cuối cùng, bạn có thể phát hành Snap của bạn ra công chúng:

  • snapcraft release your-snap revision-number channel

Nếu đây là lần đầu tiên bạn đẩy lên Cửa hàng Snap, số bản sửa đổi sẽ là 1 . Bạn cũng có thể lựa chọn giữa phát hành vào stable , candidate , beta , và edge các kênh truyền hình , nếu bạn có nhiều version của ứng dụng của bạn ở các giai đoạn phát triển khác nhau.

Ví dụ: lệnh sau sẽ phát hành bản sửa đổi 1 của Hello World Snap cho kênh stable :

  • snapcraft release helloworld 1 stable

Bạn sẽ thấy kết quả tương tự như sau:

Output
Track Arch Channel Version Revision latest amd64 stable 1.0 1 candidate ^ ^ beta ^ ^ edge ^ ^ The 'stable' channel is now open.

Như vậy, bạn có thể tìm kiếm ứng dụng của bạn trên Snap Store và cài đặt ứng dụng đó trên bất kỳ thiết bị nào của bạn.

Cửa hàng Snapcraft với Ứng dụng HelloWorld được hiển thị từ kết quả tìm kiếm

Trong bước cuối cùng này, bạn đã tải gói Snap đã xây dựng của bạn lên Snap Store và phát hành nó ra công chúng.

Kết luận

Trong bài viết này, bạn đã cấu hình và xây dựng một ứng dụng Snap, sau đó phát hành nó ra công chúng thông qua Snap Store. Như vậy, bạn có kiến thức nền tảng cần thiết để duy trì ứng dụng của bạn và xây dựng ứng dụng mới.

Nếu bạn muốn khám phá thêm về Snaps, bạn có thể duyệt qua Cửa hàng Snap đầy đủ. Bạn cũng có thể cần xem lại Tham chiếu YAML của Snapcraft để hiểu thêm về nó và xác định các thuộc tính bổ sung cho cấu hình Snap của bạn.

Cuối cùng, nếu bạn muốn điều tra thêm về sự phát triển của Snap, bạn có thể thích đọc về và triển khai Snap Hooks , cho phép Snaps phản ứng động với các thay đổi hệ thống như nâng cấp hoặc điều chỉnh policy bảo mật.


Tags:

Các tin liên quan

Cách thiết lập Nền tảng Eclipse Theia Cloud IDE trên Ubuntu 18.04 [Khởi động nhanh]
2020-02-10
Cách sử dụng Cron để tự động hóa công việc trên Ubuntu 18.04
2020-01-31
Cách cài đặt và sử dụng Radamsa để Fuzz kiểm tra các chương trình và dịch vụ mạng trên Ubuntu 18.04
2020-01-30
Cách cài đặt Tinc và thiết lập VPN cơ bản trên Ubuntu 18.04
2020-01-21
Cách thiết lập Nền tảng Eclipse Theia Cloud IDE trên Ubuntu 18.04
2020-01-06
Cách sử dụng Ansible để cài đặt và thiết lập WordPress với LAMP trên Ubuntu 18.04
2019-12-31
Cách cài đặt WordPress với OpenLiteSpeed trên Ubuntu 18.04
2019-12-18
Cách sử dụng Ansible để cài đặt và thiết lập LAMP trên Ubuntu 18.04
2019-12-17
Cách sử dụng Ansible để cài đặt và thiết lập LEMP trên Ubuntu 18.04
2019-12-05
Cách cài đặt và sử dụng TimescaleDB trên Ubuntu 18.04
2019-12-04