summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaciek Borzecki2020-05-18 15:54:13 +0200
committerMaciek Borzecki2020-05-18 15:54:13 +0200
commit5695be9662efa6cb87c3315e048e429ee14d1023 (patch)
treec9d15e6dc2507fe33be793439046969bcf7b7608
parent39fd5272cad805a4e0961cd02b596fc14fbd99fe (diff)
downloadaur-5695be9662efa6cb87c3315e048e429ee14d1023.tar.gz
upgpkg: snapd 2.45-1
New upstream release. Cherry pick patches for: - fontconfig cache incompatibility - zsh completion Signed-off-by: Maciek Borzecki <maciek.borzecki@gmail.com>
-rw-r--r--.SRCINFO12
-rw-r--r--0001-fontconfig-compat.patch209
-rw-r--r--0002-zsh-completion.patch409
-rw-r--r--PKGBUILD25
4 files changed, 643 insertions, 12 deletions
diff --git a/.SRCINFO b/.SRCINFO
index c69e182bdf5c..99ca95bb5eca 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,7 +1,7 @@
pkgbase = snapd
pkgdesc = Service and tools for management of snap packages.
- pkgver = 2.44.3
- pkgrel = 2
+ pkgver = 2.45
+ pkgrel = 1
url = https://github.com/snapcore/snapd
install = snapd.install
arch = x86_64
@@ -27,8 +27,12 @@ pkgbase = snapd
conflicts = snap-confine
options = !strip
options = emptydirs
- source = snapd-2.44.3.tar.xz::https://github.com/snapcore/snapd/releases/download/2.44.3/snapd_2.44.3.vendor.tar.xz
- sha256sums = fbe7299bd09e91b7e5610f3c44a0d546856901f383dff2b57d11bb591ae8a22f
+ source = snapd-2.45.tar.xz::https://github.com/snapcore/snapd/releases/download/2.45/snapd_2.45.vendor.tar.xz
+ source = 0001-fontconfig-compat.patch
+ source = 0002-zsh-completion.patch
+ sha256sums = 54399873d874d3797784ff685e2b21840751d77ccfada6292b34060d58ee4256
+ sha256sums = ceb4592363a5b56a1fa118b96764fc24e477f8e2bf727331ce7d726bf36ab9e3
+ sha256sums = c9f40bb1e1b9aa7f3cbf3431a910e0da38cdf467de160870f75ad03e4a3ebb17
pkgname = snapd
diff --git a/0001-fontconfig-compat.patch b/0001-fontconfig-compat.patch
new file mode 100644
index 000000000000..1ca34af046bd
--- /dev/null
+++ b/0001-fontconfig-compat.patch
@@ -0,0 +1,209 @@
+From 0f8dfa23744150b2aa91f6bd169b871308ecb43f Mon Sep 17 00:00:00 2001
+Message-Id: <0f8dfa23744150b2aa91f6bd169b871308ecb43f.1589805773.git.maciej.zenon.borzecki@canonical.com>
+In-Reply-To: <cover.1589805773.git.maciej.zenon.borzecki@canonical.com>
+References: <cover.1589805773.git.maciej.zenon.borzecki@canonical.com>
+From: Maciej Borzecki <maciej.zenon.borzecki@canonical.com>
+Date: Wed, 6 May 2020 10:45:38 +0200
+Subject: [PATCH 1/3] interfaces/builtin/desktop: do not mount fonts cache on
+ distros with quirks
+
+There is a problem with compatibility of fontconfig cache files generated across
+different versions of the fontconfig library. The cache files appear to be using
+the same format, but when loaded by an older version of the library, they cause
+instability, bad font rendering or plain segfaults.
+
+The following versions of packages present on specific distros are known to
+generate incompatible cache files:
+
+- Arch: fontconfig 2:2.13.91+24+g75eadca-2
+- Fedora 32: fontconfig-2.13.92-9.fc32.x86_64
+
+More information is provided in the following post:
+https://forum.snapcraft.io/t/snapped-app-not-loading-fonts-on-fedora-and-arch/12484/32
+A bisect identified this commit where the problem first occurred:
+https://gitlab.freedesktop.org/fontconfig/fontconfig/commit/0f9bbbcf8f6f8264efb0a2ded4d8d05f3b10f7a4
+
+Until we work out a better solution, disable the fonts cache on distros that are
+known to cause issues. This comes at the potential cost of slightly longer
+application startup times, but a working app is better than a segfaulting one.
+
+Signed-off-by: Maciej Borzecki <maciej.zenon.borzecki@canonical.com>
+---
+ interfaces/builtin/desktop.go | 13 ++++++++
+ interfaces/builtin/desktop_test.go | 52 +++++++++++++++++-------------
+ 2 files changed, 42 insertions(+), 23 deletions(-)
+
+diff --git a/interfaces/builtin/desktop.go b/interfaces/builtin/desktop.go
+index 05a97251f7fcad66a356ea7d77690dcb02f724d1..8e18a4fc4409e957b51f0763dc791c8e54eec09e 100644
+--- a/interfaces/builtin/desktop.go
++++ b/interfaces/builtin/desktop.go
+@@ -26,6 +26,7 @@ import (
+ "github.com/snapcore/snapd/interfaces/mount"
+ "github.com/snapcore/snapd/osutil"
+ "github.com/snapcore/snapd/release"
++ "github.com/snapcore/snapd/strutil"
+ )
+
+ const desktopSummary = `allows access to basic graphical desktop resources`
+@@ -288,6 +289,18 @@ func (iface *desktopInterface) MountConnectedPlug(spec *mount.Specification, plu
+ if !osutil.IsDirectory(dir) {
+ continue
+ }
++ if release.DistroLike("arch", "fedora") {
++ // XXX: on Arch and Fedora 32+ there is a known
++ // incompatibility between the binary fonts cache files
++ // and ones expected by desktop snaps; even though the
++ // cache format level is same for both, the host
++ // generated cache files cause instability, segfaults or
++ // incorrect rendering of fonts, for this reason do not
++ // mount the cache directories on those distributions
++ if strutil.ListContains(dirs.SystemFontconfigCacheDirs, dir) {
++ continue
++ }
++ }
+ // Since /etc/fonts/fonts.conf in the snap mount ns is the same
+ // as on the host, we need to preserve the original directory
+ // paths for the fontconfig runtime to poke the correct
+diff --git a/interfaces/builtin/desktop_test.go b/interfaces/builtin/desktop_test.go
+index d30af78ddea39f874eb2f4d8b765c82adab6872b..e0f995fd7633b06f81d4439c700fab34a59264d5 100644
+--- a/interfaces/builtin/desktop_test.go
++++ b/interfaces/builtin/desktop_test.go
+@@ -154,6 +154,8 @@ func (s *DesktopInterfaceSuite) TestMountSpec(c *C) {
+ // are bind mounted from the host system if they exist.
+ restore = release.MockOnClassic(true)
+ defer restore()
++ restore = release.MockReleaseInfo(&release.OS{ID: "ubuntu"})
++ defer restore()
+ spec = &mount.Specification{}
+ c.Assert(spec.AddConnectedPlug(s.iface, s.plug, s.coreSlot), IsNil)
+
+@@ -177,29 +179,33 @@ func (s *DesktopInterfaceSuite) TestMountSpec(c *C) {
+ c.Assert(entries, HasLen, 1)
+ c.Check(entries[0].Dir, Equals, "$XDG_RUNTIME_DIR/doc")
+
+- // Fedora is a little special with their fontconfig cache location(s)
+- restore = release.MockReleaseInfo(&release.OS{ID: "fedora"})
+- defer restore()
+-
+- tmpdir = c.MkDir()
+- dirs.SetRootDir(tmpdir)
+- c.Assert(dirs.SystemFontconfigCacheDirs, DeepEquals, []string{filepath.Join(tmpdir, "/var/cache/fontconfig"), filepath.Join(tmpdir, "/usr/lib/fontconfig/cache")})
+- c.Assert(os.MkdirAll(filepath.Join(tmpdir, "/usr/share/fonts"), 0777), IsNil)
+- c.Assert(os.MkdirAll(filepath.Join(tmpdir, "/usr/local/share/fonts"), 0777), IsNil)
+- c.Assert(os.MkdirAll(filepath.Join(tmpdir, "/usr/lib/fontconfig/cache"), 0777), IsNil)
+- c.Assert(os.MkdirAll(filepath.Join(tmpdir, "/var/cache/fontconfig"), 0777), IsNil)
+- spec = &mount.Specification{}
+- c.Assert(spec.AddConnectedPlug(s.iface, s.plug, s.coreSlot), IsNil)
+- entries = spec.MountEntries()
+- c.Assert(entries, HasLen, 4)
+-
+- c.Check(entries[2].Name, Equals, hostfs+dirs.SystemFontconfigCacheDirs[0])
+- c.Check(entries[2].Dir, Equals, "/var/cache/fontconfig")
+- c.Check(entries[2].Options, DeepEquals, []string{"bind", "ro"})
+-
+- c.Check(entries[3].Name, Equals, hostfs+dirs.SystemFontconfigCacheDirs[1])
+- c.Check(entries[3].Dir, Equals, "/usr/lib/fontconfig/cache")
+- c.Check(entries[3].Options, DeepEquals, []string{"bind", "ro"})
++ for _, distroWithQuirks := range []string{"fedora", "arch"} {
++ restore = release.MockReleaseInfo(&release.OS{ID: distroWithQuirks})
++ defer restore()
++
++ tmpdir = c.MkDir()
++ dirs.SetRootDir(tmpdir)
++ if distroWithQuirks == "fedora" {
++ // Fedora is a little special with their fontconfig cache location(s) and how we handle them
++ c.Assert(dirs.SystemFontconfigCacheDirs, DeepEquals, []string{filepath.Join(tmpdir, "/var/cache/fontconfig"), filepath.Join(tmpdir, "/usr/lib/fontconfig/cache")})
++ } else {
++ c.Assert(dirs.SystemFontconfigCacheDirs, DeepEquals, []string{filepath.Join(tmpdir, "/var/cache/fontconfig")})
++ }
++ c.Assert(os.MkdirAll(filepath.Join(tmpdir, "/usr/share/fonts"), 0777), IsNil)
++ c.Assert(os.MkdirAll(filepath.Join(tmpdir, "/usr/local/share/fonts"), 0777), IsNil)
++ c.Assert(os.MkdirAll(filepath.Join(tmpdir, "/usr/lib/fontconfig/cache"), 0777), IsNil)
++ c.Assert(os.MkdirAll(filepath.Join(tmpdir, "/var/cache/fontconfig"), 0777), IsNil)
++ spec = &mount.Specification{}
++ c.Assert(spec.AddConnectedPlug(s.iface, s.plug, s.coreSlot), IsNil)
++ entries = spec.MountEntries()
++ c.Assert(entries, HasLen, 2)
++
++ for _, en := range entries {
++ if en.Dir == "/var/cache/fontconfig" || en.Dir == "/usr/lib/fontconfig/cache" {
++ c.Fatalf("unpexected cache mount entry: %q", en.Dir)
++ }
++ }
++ }
+ }
+
+ func (s *DesktopInterfaceSuite) TestStaticInfo(c *C) {
+--
+2.26.2
+
+From b1183c5ed448e61f7da7ec518682a00ca4cb9161 Mon Sep 17 00:00:00 2001
+Message-Id: <b1183c5ed448e61f7da7ec518682a00ca4cb9161.1589805773.git.maciej.zenon.borzecki@canonical.com>
+In-Reply-To: <cover.1589805773.git.maciej.zenon.borzecki@canonical.com>
+References: <cover.1589805773.git.maciej.zenon.borzecki@canonical.com>
+From: Maciej Borzecki <maciej.zenon.borzecki@canonical.com>
+Date: Wed, 6 May 2020 15:39:48 +0200
+Subject: [PATCH 2/3] interfaces/builtin/desktop: mention the fonts bug report
+ in comments
+
+Signed-off-by: Maciej Borzecki <maciej.zenon.borzecki@canonical.com>
+---
+ interfaces/builtin/desktop.go | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/interfaces/builtin/desktop.go b/interfaces/builtin/desktop.go
+index 8e18a4fc4409e957b51f0763dc791c8e54eec09e..950c02c2463879bd997ddd5ff95f35051912b26a 100644
+--- a/interfaces/builtin/desktop.go
++++ b/interfaces/builtin/desktop.go
+@@ -296,7 +296,8 @@ func (iface *desktopInterface) MountConnectedPlug(spec *mount.Specification, plu
+ // cache format level is same for both, the host
+ // generated cache files cause instability, segfaults or
+ // incorrect rendering of fonts, for this reason do not
+- // mount the cache directories on those distributions
++ // mount the cache directories on those distributions,
++ // see https://bugs.launchpad.net/snapd/+bug/1877109
+ if strutil.ListContains(dirs.SystemFontconfigCacheDirs, dir) {
+ continue
+ }
+--
+2.26.2
+
+From c73b5879d78f10b16f7b3168948299dacd6da40c Mon Sep 17 00:00:00 2001
+Message-Id: <c73b5879d78f10b16f7b3168948299dacd6da40c.1589805773.git.maciej.zenon.borzecki@canonical.com>
+In-Reply-To: <cover.1589805773.git.maciej.zenon.borzecki@canonical.com>
+References: <cover.1589805773.git.maciej.zenon.borzecki@canonical.com>
+From: Maciej Borzecki <maciej.zenon.borzecki@canonical.com>
+Date: Wed, 6 May 2020 15:40:58 +0200
+Subject: [PATCH 3/3] tests/main/interfaces-desktop-host-fonts: update fonts
+ cache test
+
+Signed-off-by: Maciej Borzecki <maciej.zenon.borzecki@canonical.com>
+---
+ tests/main/interfaces-desktop-host-fonts/task.yaml | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/tests/main/interfaces-desktop-host-fonts/task.yaml b/tests/main/interfaces-desktop-host-fonts/task.yaml
+index c61dbf83b37331537a8d2c36cff2c844330540f0..02f2aa120b80c71c80ed20c4ceb772e8df63cb9a 100644
+--- a/tests/main/interfaces-desktop-host-fonts/task.yaml
++++ b/tests/main/interfaces-desktop-host-fonts/task.yaml
+@@ -49,7 +49,16 @@ execute: |
+ test-snapd-desktop.check-files /usr/local/share/fonts/local-font.txt | MATCH "Local font"
+
+ echo "Checking access to host $cache_dir"
+- test-snapd-desktop.check-files "$cache_dir"/cache.txt | MATCH "Cache file"
++ case "$SPREAD_SYSTEM" in
++ fedora-*|centos-*|amazon-linux-*|arch-linux-*)
++ # system fonts cache is inaccessible due to
++ # https://bugs.launchpad.net/snapd/+bug/1877109
++ test-snapd-desktop.sh -c "test ! -e $cache_dir/cache.txt"
++ ;;
++ *)
++ test-snapd-desktop.check-files "$cache_dir"/cache.txt | MATCH "Cache file"
++ ;;
++ esac
+
+ echo "Checking access to host ~/.fonts"
+ test-snapd-desktop.check-files "$HOME"/.fonts/user-font1.txt | MATCH "User font 1"
+--
+2.26.2
+
diff --git a/0002-zsh-completion.patch b/0002-zsh-completion.patch
new file mode 100644
index 000000000000..035784e5870c
--- /dev/null
+++ b/0002-zsh-completion.patch
@@ -0,0 +1,409 @@
+From 2eee3a3a05dc9246bc9ade54ef853ab1428c5f90 Mon Sep 17 00:00:00 2001
+Message-Id: <2eee3a3a05dc9246bc9ade54ef853ab1428c5f90.1589807334.git.maciej.zenon.borzecki@canonical.com>
+In-Reply-To: <cover.1589807334.git.maciej.zenon.borzecki@canonical.com>
+References: <cover.1589807334.git.maciej.zenon.borzecki@canonical.com>
+From: Maciej Borzecki <maciej.zenon.borzecki@canonical.com>
+Date: Wed, 29 Apr 2020 21:04:40 +0200
+Subject: [PATCH 1/4] data/completion: add completion for zsh
+
+Add completion function for snap command for zsh. Most of heavy lifting is done
+by go-flags and our completion helpers, this just glues everything together.
+
+Signed-off-by: Maciej Borzecki <maciej.zenon.borzecki@canonical.com>
+---
+ data/completion/_snap | 59 +++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 59 insertions(+)
+ create mode 100644 data/completion/_snap
+
+diff --git a/data/completion/_snap b/data/completion/_snap
+new file mode 100644
+index 0000000000000000000000000000000000000000..682ee0f089e0c0e2df02843029a6bcb1f5353946
+--- /dev/null
++++ b/data/completion/_snap
+@@ -0,0 +1,59 @@
++#compdef snap
++#
++# Copyright (C) 2020 Canonical Ltd
++#
++# This program is free software: you can redistribute it and/or modify
++# it under the terms of the GNU General Public License version 3 as
++# published by the Free Software Foundation.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program. If not, see <http://www.gnu.org/licenses/>.
++
++# group --style options and arguments separately, so that users can customize
++# the presentation of available completion matches
++_description options optexpl option
++_description arguments argexpl argument
++
++if [[ ${#words[@]} -ge 2 ]]; then
++ # keep track of the command for later reference
++ local command="${words[2]}"
++fi
++
++# get completion options with what we have so far
++local matches=($(GO_FLAGS_COMPLETION=1 "${words[@]}"))
++
++local match
++# we don't have a command yet, try to complete one first
++if [[ "$command" == "" ]]; then
++ for match in $matches; do compadd $optexpl[@] "$match"; done
++ return 0
++fi
++
++for match in $matches; do
++ case "$match" in
++ -*) compadd $optexpl[@] -- $match ;;
++ *) compadd $argexpl[@] $match ;;
++ esac
++done
++
++# some commands take files/directories too
++case "$command" in
++ install)
++ # include *.snap files
++ _path_files -g "*.snap"
++ ;;
++ try)
++ # limit matches to directories
++ # TODO: only match directories with meta/snap.yaml inside
++ _path_files -/
++ ;;
++ ack)
++ # there are no rules about assertion file names
++ _files
++ ;;
++esac
+--
+2.26.2
+
+From 0b47c2d040ac99ddd8e2912090a63ad57e9a1658 Mon Sep 17 00:00:00 2001
+Message-Id: <0b47c2d040ac99ddd8e2912090a63ad57e9a1658.1589807334.git.maciej.zenon.borzecki@canonical.com>
+In-Reply-To: <cover.1589807334.git.maciej.zenon.borzecki@canonical.com>
+References: <cover.1589807334.git.maciej.zenon.borzecki@canonical.com>
+From: Maciej Borzecki <maciej.zenon.borzecki@canonical.com>
+Date: Wed, 29 Apr 2020 21:06:04 +0200
+Subject: [PATCH 2/4] packaging: install zsh completion files
+
+Signed-off-by: Maciej Borzecki <maciej.zenon.borzecki@canonical.com>
+---
+ packaging/arch/PKGBUILD | 3 +++
+ packaging/debian-sid/snapd.install | 2 ++
+ packaging/fedora/snapd.spec | 7 +++++++
+ packaging/opensuse/snapd.spec | 7 +++++++
+ packaging/ubuntu-14.04/snapd.install | 2 ++
+ packaging/ubuntu-16.04/snapd.install | 2 ++
+ 6 files changed, 23 insertions(+)
+
+diff --git a/packaging/arch/PKGBUILD b/packaging/arch/PKGBUILD
+index e37ec70eb2b00b618219eb1efadd63b0e12ea322..4e2de2b33870412233bfa997f234cdf29e95ff79 100644
+--- a/packaging/arch/PKGBUILD
++++ b/packaging/arch/PKGBUILD
+@@ -125,6 +125,9 @@ package() {
+ "$pkgdir/usr/lib/snapd/complete.sh"
+ install -Dm644 data/completion/etelpmoc.sh \
+ "$pkgdir/usr/lib/snapd/etelpmoc.sh"
++ # Install zsh completion
++ install -Dm644 data/completion/_snap \
++ "$pkgdir/usr/share/zsh/site-functions/_snap"
+
+ # Install systemd units, dbus services and a script for environment variables
+ make -C data/ install \
+diff --git a/packaging/debian-sid/snapd.install b/packaging/debian-sid/snapd.install
+index 2ec10a240424cded2606dbafb474d3adceda1cd7..1d79725212498dbf38a46a7fc9bc01d7c237d4d7 100644
+--- a/packaging/debian-sid/snapd.install
++++ b/packaging/debian-sid/snapd.install
+@@ -10,6 +10,8 @@ usr/bin/snap-seccomp /usr/lib/snapd/
+ data/completion/snap /usr/share/bash-completion/completions
+ data/completion/complete.sh /usr/lib/snapd/
+ data/completion/etelpmoc.sh /usr/lib/snapd/
++# zsh completion
++data/completion/_snap /usr/share/zsh/vendor-completions
+ # snap/snapd version information
+ data/info /usr/lib/snapd/
+ # polkit actions
+diff --git a/packaging/fedora/snapd.spec b/packaging/fedora/snapd.spec
+index afbfaf9d36c2e187f780fecca9351ff8f61bd90a..5fe6dd0ff5b373e89200b9a76a018ae7a4e533bd 100644
+--- a/packaging/fedora/snapd.spec
++++ b/packaging/fedora/snapd.spec
+@@ -605,6 +605,9 @@ install -m 644 -D data/info %{buildroot}%{_libexecdir}/snapd/info
+ install -m 644 -D data/completion/snap %{buildroot}%{_datadir}/bash-completion/completions/snap
+ install -m 644 -D data/completion/complete.sh %{buildroot}%{_libexecdir}/snapd
+ install -m 644 -D data/completion/etelpmoc.sh %{buildroot}%{_libexecdir}/snapd
++# Install zsh completion for "snap"
++install -d -p %{buildroot}%{_datadir}/zsh/site-functions
++install -m 644 -D data/completion/_snap %{buildroot}%{_datadir}/zsh/site-functions/_snap
+
+ # Install snap-confine
+ pushd ./cmd
+@@ -740,6 +743,7 @@ popd
+ %{_datadir}/bash-completion/completions/snap
+ %{_libexecdir}/snapd/complete.sh
+ %{_libexecdir}/snapd/etelpmoc.sh
++%{_datadir}/zsh/site-functions/_snap
+ %{_libexecdir}/snapd/snapd.run-from-snap
+ %{_sysconfdir}/profile.d/snapd.sh
+ %{_sysconfdir}/sudoers.d/99-snapd.conf
+@@ -782,6 +786,9 @@ popd
+ %if %{with snap_symlink}
+ /snap
+ %endif
++# this is typically owned by zsh, but we do not want to explicitly require zsh
++%dir %{_datadir}/zsh
++%dir %{_datadir}/zsh/site-functions
+
+ %files -n snap-confine
+ %doc cmd/snap-confine/PORTING
+diff --git a/packaging/opensuse/snapd.spec b/packaging/opensuse/snapd.spec
+index b4b87e72f4798c660003d5727bdd4d3ab5a7a364..30e4db867e10817f5e89ac4938340038985fcd88 100644
+--- a/packaging/opensuse/snapd.spec
++++ b/packaging/opensuse/snapd.spec
+@@ -297,6 +297,9 @@ install -m 644 -D %{indigo_srcdir}/data/info %{buildroot}%{_libexecdir}/snapd/in
+ install -m 644 -D %{indigo_srcdir}/data/completion/snap %{buildroot}%{_datadir}/bash-completion/completions/snap
+ install -m 644 -D %{indigo_srcdir}/data/completion/complete.sh %{buildroot}%{_libexecdir}/snapd
+ install -m 644 -D %{indigo_srcdir}/data/completion/etelpmoc.sh %{buildroot}%{_libexecdir}/snapd
++# Install zsh completion for "snap"
++install -d -p %{buildroot}%{_datadir}/zsh/site-functions
++install -m 644 -D %{indigo_srcdir}/data/completion/_snap %{buildroot}%{_datadir}/zsh/site-functions/_snap
+
+ %verifyscript
+ %verify_permissions -e %{_libexecdir}/snapd/snap-confine
+@@ -374,6 +377,9 @@ fi
+ %dir %{_userunitdir}
+ %dir %{snap_mount_dir}
+ %dir %{snap_mount_dir}/bin
++# this is typically owned by zsh, but we do not want to explicitly require zsh
++%dir %{_datadir}/zsh
++%dir %{_datadir}/zsh/site-functions
+
+ # Ghost entries for things created at runtime
+ %ghost %dir %{_localstatedir}/snap
+@@ -389,6 +395,7 @@ fi
+ %{_bindir}/snapctl
+ %{_datadir}/applications/snap-handle-link.desktop
+ %{_datadir}/bash-completion/completions/snap
++%{_datadir}/zsh/site-functions/_snap
+ %{_datadir}/dbus-1/services/io.snapcraft.Launcher.service
+ %{_datadir}/dbus-1/services/io.snapcraft.Settings.service
+ %{_datadir}/polkit-1/actions/io.snapcraft.snapd.policy
+diff --git a/packaging/ubuntu-14.04/snapd.install b/packaging/ubuntu-14.04/snapd.install
+index a8e78dd8945411858e074327f692f9113f547562..dafd61b3478bad48da266fd88ab3f942f401aaee 100644
+--- a/packaging/ubuntu-14.04/snapd.install
++++ b/packaging/ubuntu-14.04/snapd.install
+@@ -13,6 +13,8 @@ usr/bin/snap-preseed /usr/lib/snapd/
+ data/completion/snap /usr/share/bash-completion/completions
+ data/completion/complete.sh /usr/lib/snapd/
+ data/completion/etelpmoc.sh /usr/lib/snapd/
++# zsh completion
++data/completion/_snap /usr/share/zsh/vendor-completions
+ # udev, must be installed before 80-udisks
+ data/udev/rules.d/66-snapd-autoimport.rules /lib/udev/rules.d
+ # snap/snapd version information
+diff --git a/packaging/ubuntu-16.04/snapd.install b/packaging/ubuntu-16.04/snapd.install
+index 98f9343f089a4a0865de7087d95e2cb1af792f91..20815f31b20f1c8e811bccbd9dfc99d3f7ad0d2f 100644
+--- a/packaging/ubuntu-16.04/snapd.install
++++ b/packaging/ubuntu-16.04/snapd.install
+@@ -15,6 +15,8 @@ usr/bin/snap-recovery-chooser /usr/lib/snapd/
+ data/completion/snap /usr/share/bash-completion/completions
+ data/completion/complete.sh /usr/lib/snapd/
+ data/completion/etelpmoc.sh /usr/lib/snapd/
++# zsh completion
++data/completion/_snap /usr/share/zsh/vendor-completions
+ # udev, must be installed before 80-udisks
+ data/udev/rules.d/66-snapd-autoimport.rules /lib/udev/rules.d
+ # snap/snapd version information
+--
+2.26.2
+
+From 204b3ecc6d2c040c236399a222b393641572ce44 Mon Sep 17 00:00:00 2001
+Message-Id: <204b3ecc6d2c040c236399a222b393641572ce44.1589807334.git.maciej.zenon.borzecki@canonical.com>
+In-Reply-To: <cover.1589807334.git.maciej.zenon.borzecki@canonical.com>
+References: <cover.1589807334.git.maciej.zenon.borzecki@canonical.com>
+From: Maciej Borzecki <maciej.zenon.borzecki@canonical.com>
+Date: Tue, 5 May 2020 09:45:46 +0200
+Subject: [PATCH 3/4] data: move bash/zsh completion support to separate
+ directories
+
+Signed-off-by: Maciej Borzecki <maciej.zenon.borzecki@canonical.com>
+---
+ data/completion/{ => bash}/complete.sh | 0
+ data/completion/{ => bash}/etelpmoc.sh | 0
+ data/completion/{ => bash}/snap | 0
+ data/completion/{ => zsh}/_snap | 0
+ 4 files changed, 0 insertions(+), 0 deletions(-)
+ rename data/completion/{ => bash}/complete.sh (100%)
+ rename data/completion/{ => bash}/etelpmoc.sh (100%)
+ rename data/completion/{ => bash}/snap (100%)
+ rename data/completion/{ => zsh}/_snap (100%)
+
+diff --git a/data/completion/complete.sh b/data/completion/bash/complete.sh
+similarity index 100%
+rename from data/completion/complete.sh
+rename to data/completion/bash/complete.sh
+diff --git a/data/completion/etelpmoc.sh b/data/completion/bash/etelpmoc.sh
+similarity index 100%
+rename from data/completion/etelpmoc.sh
+rename to data/completion/bash/etelpmoc.sh
+diff --git a/data/completion/snap b/data/completion/bash/snap
+similarity index 100%
+rename from data/completion/snap
+rename to data/completion/bash/snap
+diff --git a/data/completion/_snap b/data/completion/zsh/_snap
+similarity index 100%
+rename from data/completion/_snap
+rename to data/completion/zsh/_snap
+--
+2.26.2
+
+From 5545181ef2b0aa0cce1bfeeb6c8d327a01cd83f1 Mon Sep 17 00:00:00 2001
+Message-Id: <5545181ef2b0aa0cce1bfeeb6c8d327a01cd83f1.1589807334.git.maciej.zenon.borzecki@canonical.com>
+In-Reply-To: <cover.1589807334.git.maciej.zenon.borzecki@canonical.com>
+References: <cover.1589807334.git.maciej.zenon.borzecki@canonical.com>
+From: Maciej Borzecki <maciej.zenon.borzecki@canonical.com>
+Date: Tue, 5 May 2020 09:46:08 +0200
+Subject: [PATCH 4/4] packaging: update completion support locations
+
+Signed-off-by: Maciej Borzecki <maciej.zenon.borzecki@canonical.com>
+---
+ packaging/arch/PKGBUILD | 8 ++++----
+ packaging/debian-sid/snapd.install | 8 ++++----
+ packaging/fedora/snapd.spec | 8 ++++----
+ packaging/opensuse/snapd.spec | 8 ++++----
+ packaging/ubuntu-14.04/snapd.install | 8 ++++----
+ packaging/ubuntu-16.04/snapd.install | 8 ++++----
+ 6 files changed, 24 insertions(+), 24 deletions(-)
+
+diff --git a/packaging/arch/PKGBUILD b/packaging/arch/PKGBUILD
+index 4e2de2b33870412233bfa997f234cdf29e95ff79..91c7067942c4259be498996b99d9a7b77e568a12 100644
+--- a/packaging/arch/PKGBUILD
++++ b/packaging/arch/PKGBUILD
+@@ -119,14 +119,14 @@ package() {
+ export GOPATH="$srcdir/go"
+
+ # Install bash completion
+- install -Dm644 data/completion/snap \
++ install -Dm644 data/completion/bash/snap \
+ "$pkgdir/usr/share/bash-completion/completions/snap"
+- install -Dm644 data/completion/complete.sh \
++ install -Dm644 data/completion/bash/complete.sh \
+ "$pkgdir/usr/lib/snapd/complete.sh"
+- install -Dm644 data/completion/etelpmoc.sh \
++ install -Dm644 data/completion/bash/etelpmoc.sh \
+ "$pkgdir/usr/lib/snapd/etelpmoc.sh"
+ # Install zsh completion
+- install -Dm644 data/completion/_snap \
++ install -Dm644 data/completion/zsh/_snap \
+ "$pkgdir/usr/share/zsh/site-functions/_snap"
+
+ # Install systemd units, dbus services and a script for environment variables
+diff --git a/packaging/debian-sid/snapd.install b/packaging/debian-sid/snapd.install
+index 1d79725212498dbf38a46a7fc9bc01d7c237d4d7..3afdd39fec57ebc9cc7ba8616e4fa2e2e3c3cf35 100644
+--- a/packaging/debian-sid/snapd.install
++++ b/packaging/debian-sid/snapd.install
+@@ -7,11 +7,11 @@ usr/bin/snapd /usr/lib/snapd/
+ usr/bin/snap-seccomp /usr/lib/snapd/
+
+ # bash completion
+-data/completion/snap /usr/share/bash-completion/completions
+-data/completion/complete.sh /usr/lib/snapd/
+-data/completion/etelpmoc.sh /usr/lib/snapd/
++data/completion/bash/snap /usr/share/bash-completion/completions
++data/completion/bash/complete.sh /usr/lib/snapd/
++data/completion/bash/etelpmoc.sh /usr/lib/snapd/
+ # zsh completion
+-data/completion/_snap /usr/share/zsh/vendor-completions
++data/completion/zsh/_snap /usr/share/zsh/vendor-completions
+ # snap/snapd version information
+ data/info /usr/lib/snapd/
+ # polkit actions
+diff --git a/packaging/fedora/snapd.spec b/packaging/fedora/snapd.spec
+index 5fe6dd0ff5b373e89200b9a76a018ae7a4e533bd..190c8da62bf8786b147c0c48617c259c97c72845 100644
+--- a/packaging/fedora/snapd.spec
++++ b/packaging/fedora/snapd.spec
+@@ -602,12 +602,12 @@ bin/snap help --man > %{buildroot}%{_mandir}/man8/snap.8
+ install -m 644 -D data/info %{buildroot}%{_libexecdir}/snapd/info
+
+ # Install bash completion for "snap"
+-install -m 644 -D data/completion/snap %{buildroot}%{_datadir}/bash-completion/completions/snap
+-install -m 644 -D data/completion/complete.sh %{buildroot}%{_libexecdir}/snapd
+-install -m 644 -D data/completion/etelpmoc.sh %{buildroot}%{_libexecdir}/snapd
++install -m 644 -D data/completion/bash/snap %{buildroot}%{_datadir}/bash-completion/completions/snap
++install -m 644 -D data/completion/bash/complete.sh %{buildroot}%{_libexecdir}/snapd
++install -m 644 -D data/completion/bash/etelpmoc.sh %{buildroot}%{_libexecdir}/snapd
+ # Install zsh completion for "snap"
+ install -d -p %{buildroot}%{_datadir}/zsh/site-functions
+-install -m 644 -D data/completion/_snap %{buildroot}%{_datadir}/zsh/site-functions/_snap
++install -m 644 -D data/completion/zsh/_snap %{buildroot}%{_datadir}/zsh/site-functions/_snap
+
+ # Install snap-confine
+ pushd ./cmd
+diff --git a/packaging/opensuse/snapd.spec b/packaging/opensuse/snapd.spec
+index 30e4db867e10817f5e89ac4938340038985fcd88..7cf2ea76b43e3755349fbc74a75aa461d9f94c96 100644
+--- a/packaging/opensuse/snapd.spec
++++ b/packaging/opensuse/snapd.spec
+@@ -294,12 +294,12 @@ install -m 644 -D %{indigo_srcdir}/data/info %{buildroot}%{_libexecdir}/snapd/in
+
+ # Install bash completion for "snap"
+ # TODO: This should be handled by data makefile.
+-install -m 644 -D %{indigo_srcdir}/data/completion/snap %{buildroot}%{_datadir}/bash-completion/completions/snap
+-install -m 644 -D %{indigo_srcdir}/data/completion/complete.sh %{buildroot}%{_libexecdir}/snapd
+-install -m 644 -D %{indigo_srcdir}/data/completion/etelpmoc.sh %{buildroot}%{_libexecdir}/snapd
++install -m 644 -D %{indigo_srcdir}/data/completion/bash/snap %{buildroot}%{_datadir}/bash-completion/completions/snap
++install -m 644 -D %{indigo_srcdir}/data/completion/bash/complete.sh %{buildroot}%{_libexecdir}/snapd
++install -m 644 -D %{indigo_srcdir}/data/completion/bash/etelpmoc.sh %{buildroot}%{_libexecdir}/snapd
+ # Install zsh completion for "snap"
+ install -d -p %{buildroot}%{_datadir}/zsh/site-functions
+-install -m 644 -D %{indigo_srcdir}/data/completion/_snap %{buildroot}%{_datadir}/zsh/site-functions/_snap
++install -m 644 -D %{indigo_srcdir}/data/completion/zsh/_snap %{buildroot}%{_datadir}/zsh/site-functions/_snap
+
+ %verifyscript
+ %verify_permissions -e %{_libexecdir}/snapd/snap-confine
+diff --git a/packaging/ubuntu-14.04/snapd.install b/packaging/ubuntu-14.04/snapd.install
+index dafd61b3478bad48da266fd88ab3f942f401aaee..855650c06354675a7253253010c4ced366eb51cb 100644
+--- a/packaging/ubuntu-14.04/snapd.install
++++ b/packaging/ubuntu-14.04/snapd.install
+@@ -10,11 +10,11 @@ usr/bin/snap-seccomp /usr/lib/snapd/
+ usr/bin/snap-preseed /usr/lib/snapd/
+
+ # bash completion
+-data/completion/snap /usr/share/bash-completion/completions
+-data/completion/complete.sh /usr/lib/snapd/
+-data/completion/etelpmoc.sh /usr/lib/snapd/
++data/completion/bash/snap /usr/share/bash-completion/completions
++data/completion/bash/complete.sh /usr/lib/snapd/
++data/completion/bash/etelpmoc.sh /usr/lib/snapd/
+ # zsh completion
+-data/completion/_snap /usr/share/zsh/vendor-completions
++data/completion/zsh/_snap /usr/share/zsh/vendor-completions
+ # udev, must be installed before 80-udisks
+ data/udev/rules.d/66-snapd-autoimport.rules /lib/udev/rules.d
+ # snap/snapd version information
+diff --git a/packaging/ubuntu-16.04/snapd.install b/packaging/ubuntu-16.04/snapd.install
+index 20815f31b20f1c8e811bccbd9dfc99d3f7ad0d2f..9c80c2da4d8af451514ad43b4112018f40662371 100644
+--- a/packaging/ubuntu-16.04/snapd.install
++++ b/packaging/ubuntu-16.04/snapd.install
+@@ -12,11 +12,11 @@ usr/bin/snap-preseed /usr/lib/snapd/
+ usr/bin/snap-recovery-chooser /usr/lib/snapd/
+
+ # bash completion
+-data/completion/snap /usr/share/bash-completion/completions
+-data/completion/complete.sh /usr/lib/snapd/
+-data/completion/etelpmoc.sh /usr/lib/snapd/
++data/completion/bash/snap /usr/share/bash-completion/completions
++data/completion/bash/complete.sh /usr/lib/snapd/
++data/completion/bash/etelpmoc.sh /usr/lib/snapd/
+ # zsh completion
+-data/completion/_snap /usr/share/zsh/vendor-completions
++data/completion/zsh/_snap /usr/share/zsh/vendor-completions
+ # udev, must be installed before 80-udisks
+ data/udev/rules.d/66-snapd-autoimport.rules /lib/udev/rules.d
+ # snap/snapd version information
+--
+2.26.2
+
diff --git a/PKGBUILD b/PKGBUILD
index 8e13a8766949..99fb8b375fd7 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -8,8 +8,8 @@ pkgdesc="Service and tools for management of snap packages."
depends=('squashfs-tools' 'libseccomp' 'libsystemd' 'apparmor')
optdepends=('bash-completion: bash completion support'
'xdg-desktop-portal: desktop integration')
-pkgver=2.44.3
-pkgrel=2
+pkgver=2.45
+pkgrel=1
arch=('x86_64' 'i686' 'armv7h' 'aarch64')
url="https://github.com/snapcore/snapd"
license=('GPL3')
@@ -17,8 +17,14 @@ makedepends=('git' 'go' 'go-tools' 'libseccomp' 'libcap' 'systemd' 'xfsprogs' 'p
conflicts=('snap-confine')
options=('!strip' 'emptydirs')
install=snapd.install
-source=("$pkgname-$pkgver.tar.xz::https://github.com/snapcore/${pkgname}/releases/download/${pkgver}/${pkgname}_${pkgver}.vendor.tar.xz")
-sha256sums=('fbe7299bd09e91b7e5610f3c44a0d546856901f383dff2b57d11bb591ae8a22f')
+# 0001-fontconfig-compat.patch: proposed upstream https://github.com/snapcore/snapd/pull/8604
+# 0002-zsh-completion.patch: cherry-pick from upstream master
+source=("$pkgname-$pkgver.tar.xz::https://github.com/snapcore/${pkgname}/releases/download/${pkgver}/${pkgname}_${pkgver}.vendor.tar.xz"
+ "0001-fontconfig-compat.patch"
+ "0002-zsh-completion.patch")
+sha256sums=('54399873d874d3797784ff685e2b21840751d77ccfada6292b34060d58ee4256'
+ 'ceb4592363a5b56a1fa118b96764fc24e477f8e2bf727331ce7d726bf36ab9e3'
+ 'c9f40bb1e1b9aa7f3cbf3431a910e0da38cdf467de160870f75ad03e4a3ebb17')
_gourl=github.com/snapcore/snapd
@@ -104,12 +110,15 @@ package() {
unset GO111MODULE
# Install bash completion
- install -Dm644 data/completion/snap \
+ install -Dm644 data/completion/bash/snap \
"$pkgdir/usr/share/bash-completion/completions/snap"
- install -Dm644 data/completion/complete.sh \
+ install -Dm644 data/completion/bash/complete.sh \
"$pkgdir/usr/lib/snapd/complete.sh"
- install -Dm644 data/completion/etelpmoc.sh \
+ install -Dm644 data/completion/bash/etelpmoc.sh \
"$pkgdir/usr/lib/snapd/etelpmoc.sh"
+ # Install zsh completion
+ install -Dm644 data/completion/zsh/_snap \
+ "$pkgdir/usr/share/zsh/site-functions/_snap"
# Install systemd units, dbus services and a script for environment variables
make -C data/ install \
@@ -154,7 +163,7 @@ package() {
install -dm755 "$pkgdir/var/lib/snapd/lib/vulkan"
install -dm755 "$pkgdir/var/lib/snapd/lib/glvnd"
# these dirs have special permissions
- install -dm000 "$pkgdir/var/lib/snapd/void"
+ install -dm111 "$pkgdir/var/lib/snapd/void"
install -dm700 "$pkgdir/var/lib/snapd/cookie"
install -dm700 "$pkgdir/var/lib/snapd/cache"