Làm thế nào để cung cấp cho snaps quyền truy cập vào / somedir


19

Tôi chỉ bị ướt chân với snap. Tôi đã cài đặt vlc và muốn thử sử dụng nó. Tất cả phương tiện truyền thông của tôi được cài đặt bên dưới /store, một NFS mount. Và snaps không cho phép truy cập vào thư mục đó.

Sau khi googling tôi đã đến để hiểu rằng tôi có thể truy cập các tập tin dưới /home/petercho :homegiao diện và /mediacho :removable-mediagiao diện.

Nhưng tôi thực sự thích /storevà không muốn thay đổi điều đó là /media/storehay /home/peter/storehay bất cứ điều gì khác hơn /store.

Có cách nào để có được snap để cho phép snaps của tôi (hoặc có lẽ chỉ là vlc) truy cập /store, vì vậy snap phù hợp với quy ước đặt tên của tôi hay tôi buộc phải chuyển đổi sang tùy chọn của snap?

Điều đó có vẻ rất không linh hoạt, và tôi hy vọng có điều gì đó tôi đã bỏ lỡ.


1
Bạn có thể thử xóa snap ( sudo snap remove vlc) sau đó cài đặt lại với tùy chọn cổ điển. Có thể giúp đỡ, có thể không .. ( sudo snap install vlc --classic)
doug

1
Cảm ơn. Tôi đã thử --classic--devmode- không làm việc. Nhưng tôi cũng muốn cung cấp quyền truy cập một cách rõ ràng /storenhưng không phải mọi thứ như/supersecret
Peter V. Mørch

2
Có bất kỳ vé / lỗi / tính năng yêu cầu mở cho snap? Tôi cũng muốn tính năng đó!
kravemir

1
Tôi đang rất ghét những cái búng tay.
Stephen Boston

Câu trả lời:


9

Trước sự ngạc nhiên của tôi, nó thực sự trông giống như /homeđược mã hóa cứng. mount-support.c chứa:

    const struct sc_mount mounts[] = {
        {"/dev"},   // because it contains devices on host OS
        {"/etc"},   // because that's where /etc/resolv.conf lives, perhaps a bad idea
        {"/home"},  // to support /home/*/snap and home interface
    ...

Ồ Điều đó làm tôi ngạc nhiên. Nhưng bạn có nó.

Chỉnh sửa: Xem thêm vấn đề Launchpad 1643706


1
Hey, nhà phát triển snapd ở đây chịu trách nhiệm cho mã đó. Thật ngạc nhiên, đó thực sự là điều đúng đắn. Chúng tôi không thể sao chép hệ thống tập tin máy chủ và bất kỳ thư mục ngẫu nhiên nào nó có thể chứa. Mặc dù bạn có thể sử dụng / lưu trữ người khác có thể sử dụng / stash hoặc / bất cứ điều gì và không có cách nào để làm cho công việc đó nói chung. Đề nghị của tôi là chỉ cần gắn phương tiện của bạn vào vị trí bạn muốn, trong / nhà / ... hoặc trong / phương tiện. Sau đó, nó sẽ thuộc các hệ thống hiện có quản lý dữ liệu đó và mọi thứ sẽ hoạt động chính xác.
Zygmunt Krynicki

@ZygmuntKrynicki hoặc dưới / mnt, nếu giao diện phương tiện di động đã được kết nối cho snap.
jarno

5
@ZygmuntKrynicki Tôi cũng ngạc nhiên. Các điểm gắn kết mặc định phải được cấu hình thông qua tệp cấu hình và không được thi hành.
markhor

3
@ZygmuntKrynicki Cảm ơn bạn đã xuất hiện và giải thích rằng mã thực hiện những gì bạn dự định. Tôi tôn trọng và hoàn toàn không đồng ý với những gì bạn viết. Đường dẫn mã hóa cứng là thực tiễn rất kém và không thể được biện minh một cách có ý nghĩa, ngay cả trong tên của bảo mật. Đó chỉ là sự không linh hoạt cơ bản.
Stéphane Gourmetichon

1

Vì vậy, để mở rộng câu trả lời nhỏ của tôi ở trên, không có cách nào để làm điều đó chung chung, an toàn và âm thanh. Tôi biết tất cả mọi người thích tùy chỉnh hệ thống tập tin của họ nhưng điều đó có một số chi phí và đây là một trong số họ.

Cuối cùng, thông qua công việc trên các cổng XDG, các ứng dụng nhất định (các ứng dụng đặc biệt là đồ họa) có thể truy cập các tập tin ở những nơi tùy ý khi và chỉ khi nói các ứng dụng sử dụng một số GTK API giới thiệu gần đây. Điều này sẽ, khi chạy trong sự giam cầm, tiếp cận với một người trợ giúp đáng tin cậy, bật lên giao diện người dùng đáng tin cậy trông giống như một trình chọn tệp, nói chuyện với một hệ thống tệp FUSE đặc biệt để hiển thị tệp (tại bất kỳ vị trí nào) như một điều đặc biệt trong / run /. .. một nơi nào đó mà ứng dụng nhìn thấy và mọi thứ có thể hoạt động tốt.

Điều này được thiết kế cho những thứ thân thiện với trình chọn tệp như trình phát phương tiện hoặc trình chỉnh sửa từ. Cây linux của bạn được lưu trữ tại /codezsẽ không hoạt động tốt như vậy mặc dù.


2
Xin chào Zygmunt, cảm ơn bạn đã trả lời. Sự ngạc nhiên của tôi đứng. Bạn nói: "Tôi biết mọi người đều thích tùy chỉnh hệ thống tập tin của họ nhưng điều đó có một số chi phí và đây là một trong số họ." Chỉ để tôi hiểu: Bạn nhận ra nhưng chọn bỏ qua rằng đây là điều phổ biến muốn làm? Tôi không biết về bất kỳ chi phí nào khác cho quy ước đặt tên này trong 15 năm qua.
Peter V. Mørch

3
Có bất kỳ lý do tại sao người ta không thể đặt một dòng như extradirs=/store:/other/locationhoặc một cái gì đó trong /etc/snapd.confhoặc /etc/snapd/conf.d/vlc.conf. Cũng giống như hàng tấn các ứng dụng linux khác ngoài kia. Nó dường như hoạt động tốt cho ví dụ Docker. Điều này giống như apache là mã cứng DocumentRoot /var/www.
Peter V. Mørch

1
Tuy nhiên, tôi thực sự đánh giá cao việc bạn dành thời gian để viết ở đây, Zygmunt. Cảm ơn bạn.
Peter V. Mørch

Nó không dễ dàng như vậy. Vấn đề chính không phải là apparmor mà thực tế là trong thời gian chạy, ứng dụng đang chạy trong một hệ thống tập tin gốc khác. Từ quan điểm quá trình đó / cửa hàng không tồn tại - không phải là nó không được gắn kết, nó hoàn toàn không phải là một thư mục. Những gì snap-confine đang làm là đưa một số đường dẫn từ hệ thống máy chủ vào không gian tên gắn kết ứng dụng. Vì hệ thống tập tin gốc trong snaps chỉ được đọc, chúng tôi không thể dễ dàng chèn các điểm gắn kết mới (ví dụ: cho / store).
Zygmunt Krynicki

@ PeterV.Mørch bạn có thể gắn kết hoặc di chuyển các tệp đó trong / mnt, đảm bảo giao diện phương tiện di động đã được kết nối để chụp nhanh và tạo liên kết tượng trưng ở vị trí ban đầu, nếu bạn muốn.
jarno

1

gắn thư mục đích vào/home/*/snap/ được đề cập như một tùy chọn; một liên kết đơn giản không hoạt động đối với tôi, cũng không phải là một liên kết cứng hoặc liên kết tượng trưng của các tệp hoặc thư mục đích vào thư mục snap được đề xuất hoặc bất kỳ thư mục con nào. Hạn chế này có thể là do các tệp mục tiêu tồn tại bên ngoài một /home/*/thư mục, tôi đã không kiểm tra mount / hard / symlink cho các tệp trong /home/*/tiền tố toàn cầu.

Tuy nhiên, A Workaround: một bản sao đầy đủ tập tin /home/<myuser>/snap/<appname>/<somenewdirectory>đã làm việc cho tôi. Việc duy trì các bản sao dữ liệu đầy đủ là không khả thi đối với tôi, nhưng có rất nhiều công cụ để giúp giải quyết một hạn chế như vậy; một bản sao đệ quy thủ công trước khi sử dụng snap và sao chép các tệp đã sửa đổi sau đó là một tùy chọn nếu tập dữ liệu của bạn nhỏ hoặc thậm chí là nguyên tử

Để đặt tên cho một vài tiện ích sao chép tệp có thể giúp bạn:

  • cp --verbose --archive --recursive /somedir ~/snap/somedirvà nguồn / đích ngược lại
  • tar -C / -c somedir | tar -C ~/snap/ -xv là một ví dụ sao chép tập tin dựa trên tar
  • rsync --archive /somedir ~/snap/somedir, rsync là phổ biến và có nhiều trình bao bọc / tiện ích mở rộng

  • mọi tiện ích sao lưu dựa trên tệp (ví dụ đồ họa grsync:) nên có thể sử dụng được vì toàn bộ mục tiêu là sao chép dữ liệu chuyển tiếp và ngược lại khi cần

  • git clone, có thể, tuy nhiên, nhân bản cục bộ theo mặc định sử dụng các liên kết cứng, vì vậy nếu bạn đang sử dụng git để quản lý hệ thống tập tin io thành một snap, hãy thận trọng về khả năng nếu không vô hiệu hóa các liên kết cứng tại thời điểm sao chép, git clone có thể không thể truy cập được.


1
Điều này sẽ không hoạt động trong trường hợp sử dụng chung của ổ NAS nhiều terabyte gắn trên NFS.
Peter V. Mørch

1

Tôi không thể đăng bình luận vì tôi không có đủ danh tiếng, nhưng tôi có thể đăng câu trả lời ..?

Dù sao, đây không phải là vấn đề ban đầu, nhưng nếu bất kỳ ai khác, như tôi, đã đến đây để tìm cách cung cấp quyền truy cập / phương tiện cho một snap (ví dụ như sử dụng Darktable, về cơ bản là vô dụng nếu không có nó), bạn có thể làm điều đó thông qua giao diện snap-store hoặc bằng cách thêm 'phích cắm' phương tiện di động vào ứng dụng snap của bạn trên dòng lệnh. Một số tài liệu ở đây: https://snapcraft.io/docs/interface-man Management


1
Xin chào và chào mừng bạn trên Hỏi Ubuntu! Các câu trả lời chỉ liên kết không được khuyến khích vì chúng có thể trở nên lỗi thời nếu liên kết hết hạn trong tương lai. Tôi có thể đề nghị bạn thêm một số chi tiết vào bài viết của mình không (ví dụ: tóm tắt các bước / khen thưởng để sử dụng)?
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.