diff -Nru snapd-2.23+16.10/debian/changelog snapd-2.23.1+16.10/debian/changelog --- snapd-2.23+16.10/debian/changelog 2017-02-17 11:21:42.000000000 +0000 +++ snapd-2.23.1+16.10/debian/changelog 2017-03-08 13:29:56.000000000 +0000 @@ -1,4 +1,17 @@ -snapd (2.23+16.10) yakkety; urgency=medium +snapd (2.23.1+16.10) yakkety; urgency=medium + + * New upstream release, LP: #1665608 + - packaging, tests: use "systemctl list-unit-files --full" + everywhere + - interfaces: fix default content attribute value + - tests: do not nuke the entire snapd.conf.d dir when changing + store settings + - hookstate: run the right "snap" command in the hookmanager + - snapstate: revert PR#2958, run configure hook again everywhere + + -- Michael Vogt Wed, 08 Mar 2017 14:29:56 +0100 + +snapd (2.23) xenial; urgency=medium * New upstream release, LP: #1665608 - overlord: phase 2 with 2nd setup-profiles and hook done after @@ -118,7 +131,7 @@ test - interfaces/builtin/core-support: Allow modifying logind configuration from the core snap - - tests: fix "snap managed" output check and supress output from + - tests: fix "snap managed" output check and suppress output from expect in the authenticated login tests - interfaces: shutdown: also allow shutdown/reboot/suspend via logind diff -Nru snapd-2.23+16.10/debian/snapd.postrm snapd-2.23.1+16.10/debian/snapd.postrm --- snapd-2.23+16.10/debian/snapd.postrm 2017-01-26 10:33:01.000000000 +0000 +++ snapd-2.23.1+16.10/debian/snapd.postrm 2017-03-08 13:28:21.000000000 +0000 @@ -11,8 +11,8 @@ } if [ "$1" = "purge" ]; then - mounts=$(systemctl list-unit-files | grep '^snap[-.].*\.mount' | cut -f1 -d ' ') - services=$(systemctl list-unit-files | grep '^snap[-.].*\.service' | cut -f1 -d ' ') + mounts=$(systemctl list-unit-files --full | grep '^snap[-.].*\.mount' | cut -f1 -d ' ') + services=$(systemctl list-unit-files --full | grep '^snap[-.].*\.service' | cut -f1 -d ' ') for unit in $services $mounts; do # ensure its really a snapp mount unit or systemd unit if ! grep -q 'What=/var/lib/snapd/snaps/' "/etc/systemd/system/$unit" && ! grep -q 'X-Snappy=yes' "/etc/systemd/system/$unit"; then diff -Nru snapd-2.23+16.10/interfaces/builtin/content.go snapd-2.23.1+16.10/interfaces/builtin/content.go --- snapd-2.23+16.10/interfaces/builtin/content.go 2017-02-17 11:21:42.000000000 +0000 +++ snapd-2.23.1+16.10/interfaces/builtin/content.go 2017-03-08 13:28:21.000000000 +0000 @@ -47,7 +47,8 @@ } content, ok := slot.Attrs["content"].(string) if !ok || len(content) == 0 { - return fmt.Errorf("content slot must have a content attribute set") + // content defaults to "slot" name if unspecified + slot.Attrs["content"] = slot.Name } // check that we have either a read or write path @@ -75,7 +76,8 @@ } content, ok := plug.Attrs["content"].(string) if !ok || len(content) == 0 { - return fmt.Errorf("content plug must have a content attribute set") + // content defaults to "plug" name if unspecified + plug.Attrs["content"] = plug.Name } target, ok := plug.Attrs["target"].(string) if !ok || len(target) == 0 { diff -Nru snapd-2.23+16.10/interfaces/builtin/content_test.go snapd-2.23.1+16.10/interfaces/builtin/content_test.go --- snapd-2.23+16.10/interfaces/builtin/content_test.go 2017-02-17 11:21:42.000000000 +0000 +++ snapd-2.23.1+16.10/interfaces/builtin/content_test.go 2017-03-08 13:28:21.000000000 +0000 @@ -57,7 +57,7 @@ c.Assert(err, IsNil) } -func (s *ContentSuite) TestSanitizeSlotNoContentLabel(c *C) { +func (s *ContentSuite) TestSanitizeSlotContentLabelDefault(c *C) { const mockSnapYaml = `name: content-slot-snap version: 1.0 slots: @@ -69,7 +69,8 @@ info := snaptest.MockInfo(c, mockSnapYaml, nil) slot := &interfaces.Slot{SlotInfo: info.Slots["content-slot"]} err := s.iface.SanitizeSlot(slot) - c.Assert(err, ErrorMatches, `content slot must have a content attribute set`) + c.Assert(err, IsNil) + c.Assert(slot.Attrs["content"], Equals, slot.Name) } func (s *ContentSuite) TestSanitizeSlotNoPaths(c *C) { @@ -133,7 +134,7 @@ c.Assert(err, IsNil) } -func (s *ContentSuite) TestSanitizePlugNoContentLabel(c *C) { +func (s *ContentSuite) TestSanitizePlugContentLabelDefault(c *C) { const mockSnapYaml = `name: content-slot-snap version: 1.0 plugs: @@ -144,7 +145,8 @@ info := snaptest.MockInfo(c, mockSnapYaml, nil) plug := &interfaces.Plug{PlugInfo: info.Plugs["content-plug"]} err := s.iface.SanitizePlug(plug) - c.Assert(err, ErrorMatches, `content plug must have a content attribute set`) + c.Assert(err, IsNil) + c.Assert(plug.Attrs["content"], Equals, plug.Name) } func (s *ContentSuite) TestSanitizePlugSimpleNoTarget(c *C) { diff -Nru snapd-2.23+16.10/overlord/hookstate/export_test.go snapd-2.23.1+16.10/overlord/hookstate/export_test.go --- snapd-2.23+16.10/overlord/hookstate/export_test.go 1970-01-01 00:00:00.000000000 +0000 +++ snapd-2.23.1+16.10/overlord/hookstate/export_test.go 2017-03-08 13:28:21.000000000 +0000 @@ -0,0 +1,28 @@ +// -*- Mode: Go; indent-tabs-mode: t -*- + +/* + * Copyright (C) 2016 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 . + * + */ + +package hookstate + +func MockReadlink(f func(string) (string, error)) func() { + oldReadlink := osReadlink + osReadlink = f + return func() { + osReadlink = oldReadlink + } +} diff -Nru snapd-2.23+16.10/overlord/hookstate/hookmgr.go snapd-2.23.1+16.10/overlord/hookstate/hookmgr.go --- snapd-2.23+16.10/overlord/hookstate/hookmgr.go 2017-02-17 11:21:42.000000000 +0000 +++ snapd-2.23.1+16.10/overlord/hookstate/hookmgr.go 2017-03-08 13:28:21.000000000 +0000 @@ -26,11 +26,14 @@ "fmt" "os" "os/exec" + "path/filepath" "regexp" + "strings" "sync" "gopkg.in/tomb.v2" + "github.com/snapcore/snapd/dirs" "github.com/snapcore/snapd/osutil" "github.com/snapcore/snapd/overlord/snapstate" "github.com/snapcore/snapd/overlord/state" @@ -250,8 +253,30 @@ } } +var osReadlink = os.Readlink + +// snapCmd returns the "snap" command to run. If snapd is re-execed +// it will be the snap command from the core snap, otherwise it will +// be the system "snap" command (c.f. LP: #1668738). +func snapCmd() string { + // sensible default, assume PATH is correct + snapCmd := "snap" + + exe, err := osReadlink("/proc/self/exe") + if err != nil { + return snapCmd + } + if !strings.HasPrefix(exe, dirs.SnapMountDir) { + return snapCmd + } + + // snap is running from the core snap, we know the relative + // location of "snap" from "snapd" + return filepath.Join(filepath.Dir(exe), "../../bin/snap") +} + func runHookAndWait(snapName string, revision snap.Revision, hookName, hookContext string, tomb *tomb.Tomb) ([]byte, error) { - command := exec.Command("snap", "run", "--hook", hookName, "-r", revision.String(), snapName) + command := exec.Command(snapCmd(), "run", "--hook", hookName, "-r", revision.String(), snapName) // Make sure the hook has its context defined so it can communicate via the // REST API. diff -Nru snapd-2.23+16.10/overlord/hookstate/hookmgr_test.go snapd-2.23.1+16.10/overlord/hookstate/hookmgr_test.go --- snapd-2.23+16.10/overlord/hookstate/hookmgr_test.go 2016-11-24 09:36:04.000000000 +0000 +++ snapd-2.23.1+16.10/overlord/hookstate/hookmgr_test.go 2017-03-08 13:28:21.000000000 +0000 @@ -21,6 +21,8 @@ import ( "encoding/json" + "os" + "path/filepath" "regexp" "testing" @@ -431,3 +433,28 @@ c.Check(found, Equals, true, Commentf("Expected to find regex %q in task log: %v", pattern, task.Log())) } + +func (s *hookManagerSuite) TestHookTaskRunsRightSnapCmd(c *C) { + coreSnapCmdPath := filepath.Join(dirs.SnapMountDir, "core/12/usr/bin/snap") + err := os.MkdirAll(filepath.Dir(coreSnapCmdPath), 0755) + c.Assert(err, IsNil) + s.command = testutil.MockCommand(c, coreSnapCmdPath, "") + + r := hookstate.MockReadlink(func(p string) (string, error) { + c.Assert(p, Equals, "/proc/self/exe") + return filepath.Join(dirs.SnapMountDir, "core/12/usr/lib/snapd/snapd"), nil + }) + defer r() + + s.manager.Ensure() + s.manager.Wait() + + s.state.Lock() + defer s.state.Unlock() + + c.Assert(s.context, NotNil, Commentf("Expected handler generator to be called with a valid context")) + c.Check(s.command.Calls(), DeepEquals, [][]string{{ + "snap", "run", "--hook", "configure", "-r", "1", "test-snap", + }}) + +} diff -Nru snapd-2.23+16.10/overlord/snapstate/snapmgr_test.go snapd-2.23.1+16.10/overlord/snapstate/snapmgr_test.go --- snapd-2.23+16.10/overlord/snapstate/snapmgr_test.go 2017-02-17 11:21:42.000000000 +0000 +++ snapd-2.23.1+16.10/overlord/snapstate/snapmgr_test.go 2017-03-08 13:28:21.000000000 +0000 @@ -5497,12 +5497,6 @@ SnapType: "os", }) - // FIXME: we do not run the configure hook on classic for core, so - // verifyInstallUpdateTasks() would fail, we mock this here - // until LP: #1668738 is understood - r := release.MockOnClassic(false) - defer r() - tsl, err := snapstate.TransitionCore(s.state, "ubuntu-core", "core") c.Assert(err, IsNil) diff -Nru snapd-2.23+16.10/overlord/snapstate/snapstate.go snapd-2.23.1+16.10/overlord/snapstate/snapstate.go --- snapd-2.23+16.10/overlord/snapstate/snapstate.go 2017-02-17 11:21:42.000000000 +0000 +++ snapd-2.23.1+16.10/overlord/snapstate/snapstate.go 2017-03-08 13:28:21.000000000 +0000 @@ -225,13 +225,9 @@ installSet := state.NewTaskSet(tasks...) - // gross hack, do not run configure hook on classic (LP: #1668738) - // for now until we understand why it is failing for some people - if !(release.OnClassic && snapsup.Name() == "core") { - configSet := Configure(st, snapsup.Name(), defaults) - configSet.WaitAll(installSet) - installSet.AddAll(configSet) - } + configSet := Configure(st, snapsup.Name(), defaults) + configSet.WaitAll(installSet) + installSet.AddAll(configSet) return installSet, nil } diff -Nru snapd-2.23+16.10/packaging/ubuntu-14.04/changelog snapd-2.23.1+16.10/packaging/ubuntu-14.04/changelog --- snapd-2.23+16.10/packaging/ubuntu-14.04/changelog 2017-02-17 11:21:42.000000000 +0000 +++ snapd-2.23.1+16.10/packaging/ubuntu-14.04/changelog 2017-03-08 13:29:56.000000000 +0000 @@ -1,3 +1,16 @@ +snapd (2.23.1~14.04) trusty; urgency=medium + + * New upstream release, LP: #1665608 + - packaging, tests: use "systemctl list-unit-files --full" + everywhere + - interfaces: fix default content attribute value + - tests: do not nuke the entire snapd.conf.d dir when changing + store settings + - hookstate: run the right "snap" command in the hookmanager + - snapstate: revert PR#2958, run configure hook again everywhere + + -- Michael Vogt Wed, 08 Mar 2017 14:29:56 +0100 + snapd (2.23~14.04) trusty; urgency=medium * New upstream release, LP: #1665608 @@ -118,7 +131,7 @@ test - interfaces/builtin/core-support: Allow modifying logind configuration from the core snap - - tests: fix "snap managed" output check and supress output from + - tests: fix "snap managed" output check and suppress output from expect in the authenticated login tests - interfaces: shutdown: also allow shutdown/reboot/suspend via logind diff -Nru snapd-2.23+16.10/packaging/ubuntu-14.04/snapd.postrm snapd-2.23.1+16.10/packaging/ubuntu-14.04/snapd.postrm --- snapd-2.23+16.10/packaging/ubuntu-14.04/snapd.postrm 2017-01-26 10:33:01.000000000 +0000 +++ snapd-2.23.1+16.10/packaging/ubuntu-14.04/snapd.postrm 2017-03-08 13:28:21.000000000 +0000 @@ -11,8 +11,8 @@ } if [ "$1" = "purge" ]; then - mounts=$(systemctl list-unit-files | grep '^snap[-.].*\.mount' | cut -f1 -d ' ') - services=$(systemctl list-unit-files | grep '^snap[-.].*\.service' | cut -f1 -d ' ') + mounts=$(systemctl list-unit-files --full | grep '^snap[-.].*\.mount' | cut -f1 -d ' ') + services=$(systemctl list-unit-files --full | grep '^snap[-.].*\.service' | cut -f1 -d ' ') for unit in $mounts; do # ensure its really a snap mount unit or systemd unit diff -Nru snapd-2.23+16.10/packaging/ubuntu-16.04/changelog snapd-2.23.1+16.10/packaging/ubuntu-16.04/changelog --- snapd-2.23+16.10/packaging/ubuntu-16.04/changelog 2017-02-17 11:21:42.000000000 +0000 +++ snapd-2.23.1+16.10/packaging/ubuntu-16.04/changelog 2017-03-08 13:29:56.000000000 +0000 @@ -1,4 +1,17 @@ -snapd (2.23+16.10) yakkety; urgency=medium +snapd (2.23.1+16.10) yakkety; urgency=medium + + * New upstream release, LP: #1665608 + - packaging, tests: use "systemctl list-unit-files --full" + everywhere + - interfaces: fix default content attribute value + - tests: do not nuke the entire snapd.conf.d dir when changing + store settings + - hookstate: run the right "snap" command in the hookmanager + - snapstate: revert PR#2958, run configure hook again everywhere + + -- Michael Vogt Wed, 08 Mar 2017 14:29:56 +0100 + +snapd (2.23) xenial; urgency=medium * New upstream release, LP: #1665608 - overlord: phase 2 with 2nd setup-profiles and hook done after @@ -118,7 +131,7 @@ test - interfaces/builtin/core-support: Allow modifying logind configuration from the core snap - - tests: fix "snap managed" output check and supress output from + - tests: fix "snap managed" output check and suppress output from expect in the authenticated login tests - interfaces: shutdown: also allow shutdown/reboot/suspend via logind diff -Nru snapd-2.23+16.10/packaging/ubuntu-16.04/snapd.postrm snapd-2.23.1+16.10/packaging/ubuntu-16.04/snapd.postrm --- snapd-2.23+16.10/packaging/ubuntu-16.04/snapd.postrm 2017-01-26 10:33:01.000000000 +0000 +++ snapd-2.23.1+16.10/packaging/ubuntu-16.04/snapd.postrm 2017-03-08 13:28:21.000000000 +0000 @@ -11,8 +11,8 @@ } if [ "$1" = "purge" ]; then - mounts=$(systemctl list-unit-files | grep '^snap[-.].*\.mount' | cut -f1 -d ' ') - services=$(systemctl list-unit-files | grep '^snap[-.].*\.service' | cut -f1 -d ' ') + mounts=$(systemctl list-unit-files --full | grep '^snap[-.].*\.mount' | cut -f1 -d ' ') + services=$(systemctl list-unit-files --full | grep '^snap[-.].*\.service' | cut -f1 -d ' ') for unit in $services $mounts; do # ensure its really a snapp mount unit or systemd unit if ! grep -q 'What=/var/lib/snapd/snaps/' "/etc/systemd/system/$unit" && ! grep -q 'X-Snappy=yes' "/etc/systemd/system/$unit"; then diff -Nru snapd-2.23+16.10/packaging/ubuntu-16.10/changelog snapd-2.23.1+16.10/packaging/ubuntu-16.10/changelog --- snapd-2.23+16.10/packaging/ubuntu-16.10/changelog 2017-02-17 11:21:42.000000000 +0000 +++ snapd-2.23.1+16.10/packaging/ubuntu-16.10/changelog 2017-03-08 13:29:56.000000000 +0000 @@ -1,4 +1,17 @@ -snapd (2.23+16.10) yakkety; urgency=medium +snapd (2.23.1+16.10) yakkety; urgency=medium + + * New upstream release, LP: #1665608 + - packaging, tests: use "systemctl list-unit-files --full" + everywhere + - interfaces: fix default content attribute value + - tests: do not nuke the entire snapd.conf.d dir when changing + store settings + - hookstate: run the right "snap" command in the hookmanager + - snapstate: revert PR#2958, run configure hook again everywhere + + -- Michael Vogt Wed, 08 Mar 2017 14:29:56 +0100 + +snapd (2.23) xenial; urgency=medium * New upstream release, LP: #1665608 - overlord: phase 2 with 2nd setup-profiles and hook done after @@ -118,7 +131,7 @@ test - interfaces/builtin/core-support: Allow modifying logind configuration from the core snap - - tests: fix "snap managed" output check and supress output from + - tests: fix "snap managed" output check and suppress output from expect in the authenticated login tests - interfaces: shutdown: also allow shutdown/reboot/suspend via logind diff -Nru snapd-2.23+16.10/packaging/ubuntu-16.10/snapd.postrm snapd-2.23.1+16.10/packaging/ubuntu-16.10/snapd.postrm --- snapd-2.23+16.10/packaging/ubuntu-16.10/snapd.postrm 2017-01-26 10:33:01.000000000 +0000 +++ snapd-2.23.1+16.10/packaging/ubuntu-16.10/snapd.postrm 2017-03-08 13:28:21.000000000 +0000 @@ -11,8 +11,8 @@ } if [ "$1" = "purge" ]; then - mounts=$(systemctl list-unit-files | grep '^snap[-.].*\.mount' | cut -f1 -d ' ') - services=$(systemctl list-unit-files | grep '^snap[-.].*\.service' | cut -f1 -d ' ') + mounts=$(systemctl list-unit-files --full | grep '^snap[-.].*\.mount' | cut -f1 -d ' ') + services=$(systemctl list-unit-files --full | grep '^snap[-.].*\.service' | cut -f1 -d ' ') for unit in $services $mounts; do # ensure its really a snapp mount unit or systemd unit if ! grep -q 'What=/var/lib/snapd/snaps/' "/etc/systemd/system/$unit" && ! grep -q 'X-Snappy=yes' "/etc/systemd/system/$unit"; then diff -Nru snapd-2.23+16.10/packaging/ubuntu-17.04/changelog snapd-2.23.1+16.10/packaging/ubuntu-17.04/changelog --- snapd-2.23+16.10/packaging/ubuntu-17.04/changelog 2017-02-17 11:21:42.000000000 +0000 +++ snapd-2.23.1+16.10/packaging/ubuntu-17.04/changelog 2017-03-08 13:29:56.000000000 +0000 @@ -1,4 +1,17 @@ -snapd (2.23+16.10) yakkety; urgency=medium +snapd (2.23.1+16.10) yakkety; urgency=medium + + * New upstream release, LP: #1665608 + - packaging, tests: use "systemctl list-unit-files --full" + everywhere + - interfaces: fix default content attribute value + - tests: do not nuke the entire snapd.conf.d dir when changing + store settings + - hookstate: run the right "snap" command in the hookmanager + - snapstate: revert PR#2958, run configure hook again everywhere + + -- Michael Vogt Wed, 08 Mar 2017 14:29:56 +0100 + +snapd (2.23) xenial; urgency=medium * New upstream release, LP: #1665608 - overlord: phase 2 with 2nd setup-profiles and hook done after @@ -118,7 +131,7 @@ test - interfaces/builtin/core-support: Allow modifying logind configuration from the core snap - - tests: fix "snap managed" output check and supress output from + - tests: fix "snap managed" output check and suppress output from expect in the authenticated login tests - interfaces: shutdown: also allow shutdown/reboot/suspend via logind diff -Nru snapd-2.23+16.10/packaging/ubuntu-17.04/snapd.postrm snapd-2.23.1+16.10/packaging/ubuntu-17.04/snapd.postrm --- snapd-2.23+16.10/packaging/ubuntu-17.04/snapd.postrm 2017-01-26 10:33:01.000000000 +0000 +++ snapd-2.23.1+16.10/packaging/ubuntu-17.04/snapd.postrm 2017-03-08 13:28:21.000000000 +0000 @@ -11,8 +11,8 @@ } if [ "$1" = "purge" ]; then - mounts=$(systemctl list-unit-files | grep '^snap[-.].*\.mount' | cut -f1 -d ' ') - services=$(systemctl list-unit-files | grep '^snap[-.].*\.service' | cut -f1 -d ' ') + mounts=$(systemctl list-unit-files --full | grep '^snap[-.].*\.mount' | cut -f1 -d ' ') + services=$(systemctl list-unit-files --full | grep '^snap[-.].*\.service' | cut -f1 -d ' ') for unit in $services $mounts; do # ensure its really a snapp mount unit or systemd unit if ! grep -q 'What=/var/lib/snapd/snaps/' "/etc/systemd/system/$unit" && ! grep -q 'X-Snappy=yes' "/etc/systemd/system/$unit"; then diff -Nru snapd-2.23+16.10/tests/lib/prepare.sh snapd-2.23.1+16.10/tests/lib/prepare.sh --- snapd-2.23+16.10/tests/lib/prepare.sh 2017-02-17 11:21:42.000000000 +0000 +++ snapd-2.23.1+16.10/tests/lib/prepare.sh 2017-03-08 13:28:21.000000000 +0000 @@ -66,7 +66,10 @@ Environment=SNAP_REEXEC=$SNAP_REEXEC EOF fi - + if [ ! -f /etc/systemd/system/snapd.service.d/local.conf ]; then + echo "/etc/systemd/system/snapd.service.d/local.conf vanished!" + exit 1 + fi } prepare_classic() { @@ -129,8 +132,8 @@ update_core_snap_for_classic_reexec systemctl daemon-reload - mounts="$(systemctl list-unit-files | grep '^snap[-.].*\.mount' | cut -f1 -d ' ')" - services="$(systemctl list-unit-files | grep '^snap[-.].*\.service' | cut -f1 -d ' ')" + mounts="$(systemctl list-unit-files --full | grep '^snap[-.].*\.mount' | cut -f1 -d ' ')" + services="$(systemctl list-unit-files --full | grep '^snap[-.].*\.service' | cut -f1 -d ' ')" for unit in $services $mounts; do systemctl stop $unit done diff -Nru snapd-2.23+16.10/tests/lib/reset.sh snapd-2.23.1+16.10/tests/lib/reset.sh --- snapd-2.23+16.10/tests/lib/reset.sh 2017-02-17 11:21:42.000000000 +0000 +++ snapd-2.23.1+16.10/tests/lib/reset.sh 2017-03-08 13:28:21.000000000 +0000 @@ -25,8 +25,8 @@ if [ "$1" = "--reuse-core" ]; then $(cd / && tar xzf $SPREAD_PATH/snapd-state.tar.gz) - mounts="$(systemctl list-unit-files | grep '^snap[-.].*\.mount' | cut -f1 -d ' ')" - services="$(systemctl list-unit-files | grep '^snap[-.].*\.service' | cut -f1 -d ' ')" + mounts="$(systemctl list-unit-files --full | grep '^snap[-.].*\.mount' | cut -f1 -d ' ')" + services="$(systemctl list-unit-files --full | grep '^snap[-.].*\.service' | cut -f1 -d ' ')" systemctl daemon-reload # Workaround for http://paste.ubuntu.com/17735820/ for unit in $mounts $services; do systemctl start $unit diff -Nru snapd-2.23+16.10/tests/lib/snaps/test-snapd-content-plug-empty-content-attr/bin/content-plug snapd-2.23.1+16.10/tests/lib/snaps/test-snapd-content-plug-empty-content-attr/bin/content-plug --- snapd-2.23+16.10/tests/lib/snaps/test-snapd-content-plug-empty-content-attr/bin/content-plug 1970-01-01 00:00:00.000000000 +0000 +++ snapd-2.23.1+16.10/tests/lib/snaps/test-snapd-content-plug-empty-content-attr/bin/content-plug 2017-03-08 13:28:21.000000000 +0000 @@ -0,0 +1,11 @@ +#!/bin/sh + +set -e + +cat < $STORE_CONFIG <