1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226
|
summary: Verify snap debug execution command
details: |
This test checks that the command `snap debug execution` shows right
outputs, but also verifies their correctness on the target systems
skip:
- reason: Snapd is from the archive and `debug execution`command could not be supported
if: |
# TODO: remove this check once snapd 2.65 is released (debian-12 missing)
tests.info is-snapd-from-archive
debug: |
grep -n '' snap-*.out || true
execute: |
snap debug execution snap > snap-default.out
SNAP_REEXEC=0 snap debug execution snap > snap-no-reexec.out
SNAP_REEXEC=1 snap debug execution snap > snap-yes-reexec.out
SNAP_REEXEC=force snap debug execution snap > snap-force-reexec.out
# this may fail when apparmor isn't found at all
(snap debug execution apparmor || true) > snap-apparmor-default.out
(SNAP_REEXEC=0 snap debug execution apparmor || true) > snap-apparmor-no-reexec.out
(SNAP_REEXEC=force snap debug execution apparmor || true) > snap-apparmor-force-reexec.out
snap debug execution internal-tool snap-update-ns > snap-uns-default.out
case "$SPREAD_SYSTEM" in
ubuntu-core-*)
echo "Checking Ubuntu Core default scenario"
MATCH 'distro-supports-reexec: false' < snap-default.out
MATCH 'is-reexec-enabled: true' < snap-default.out
MATCH 'is-reexec-explicitly-enabled: false' < snap-default.out
MATCH 'is-reexec-forced: false' < snap-default.out
if os.query is-core16; then
# snap is part of the core snap
MATCH 'is-reexecd: false' < snap-default.out
MATCH 'self-exe: /usr/bin/snap' < snap-default.out
else
# UC18+ with snapd snap
MATCH 'is-reexecd: true' < snap-default.out
MATCH 'self-exe: /snap/snapd/.*/usr/bin/snap' < snap-default.out
fi
echo "Checking Ubuntu Core with reexec scenario"
MATCH 'distro-supports-reexec: false' < snap-yes-reexec.out
MATCH 'is-reexec-enabled: true' < snap-yes-reexec.out
MATCH 'is-reexec-explicitly-enabled: true' < snap-yes-reexec.out
MATCH 'is-reexec-forced: false' < snap-yes-reexec.out
MATCH 'is-reexecd: true' < snap-yes-reexec.out
if os.query is-core16; then
MATCH 'self-exe: /snap/core/.*/usr/bin/snap' < snap-yes-reexec.out
else
MATCH 'self-exe: /snap/snapd/.*/usr/bin/snap' < snap-yes-reexec.out
fi
echo "Checking Ubuntu Core without reexec scenario"
MATCH 'distro-supports-reexec: false' < snap-no-reexec.out
MATCH 'is-reexec-explicitly-enabled: false' < snap-no-reexec.out
if os.query is-core16; then
MATCH 'is-reexec-enabled: false' < snap-no-reexec.out
MATCH 'is-reexecd: false' < snap-no-reexec.out
MATCH 'self-exe: /usr/bin/snap' < snap-no-reexec.out
else
MATCH 'is-reexec-enabled: true' < snap-no-reexec.out
MATCH 'is-reexecd: true' < snap-no-reexec.out
MATCH 'self-exe: /snap/snapd/.*/usr/bin/snap' < snap-no-reexec.out
fi
echo "Checking Ubuntu Core AppArmor"
if os.query is-core16; then
MATCH 'apparmor-parser: /sbin/apparmor_parser' < snap-apparmor-default.out
MATCH 'internal: false' < snap-apparmor-default.out
else
MATCH 'apparmor-parser: /snap/snapd/.*/usr/lib/snapd/apparmor_parser' < snap-apparmor-default.out
MATCH 'apparmor-parser-command: /snap/snapd/.*/apparmor_parser --config-file /snap/snapd/.*/usr/lib/snapd/apparmor/parser.conf --base /snap/snapd/.*/usr/lib/snapd/apparmor\.d --policy-features /snap/snapd/.*/usr/lib/snapd/apparmor\.d/abi/4\.0' < snap-apparmor-default.out
MATCH 'internal: true' < snap-apparmor-default.out
fi
;;
ubuntu-*|debian-*)
echo "Checking default scenario"
MATCH 'distro-supports-reexec: true' < snap-default.out
MATCH 'is-reexec-explicitly-enabled: false' < snap-default.out
if [ "$SNAP_REEXEC" = 0 ]; then
MATCH 'is-reexec-enabled: false' < snap-default.out
MATCH 'is-reexecd: false' < snap-default.out
MATCH 'self-exe: /usr/bin/snap' < snap-default.out
else
MATCH 'is-reexec-enabled: true' < snap-default.out
MATCH 'is-reexecd: true' < snap-default.out
MATCH 'self-exe: /snap/snapd/.*/usr/bin/snap' < snap-default.out
fi
echo "Checking without reeexec scenario"
MATCH 'distro-supports-reexec: true' < snap-no-reexec.out
MATCH 'is-reexec-enabled: false' < snap-no-reexec.out
MATCH 'is-reexec-explicitly-enabled: false' < snap-no-reexec.out
MATCH 'is-reexecd: false' < snap-no-reexec.out
MATCH 'self-exe: /usr/bin/snap' < snap-no-reexec.out
echo "Checking forced reexec"
# when using native package it reexecs as instructed, when using the
# snapd snap we already reexec by default as our mock test version is always higher
MATCH 'is-reexec-enabled: true' < snap-force-reexec.out
MATCH 'is-reexec-forced: true' < snap-force-reexec.out
echo "Checking AppArmor"
if [ "$SNAP_REEXEC" = 0 ]; then
MATCH 'apparmor-parser: (/usr)?/sbin/apparmor_parser' < snap-apparmor-default.out
MATCH 'internal: false' < snap-apparmor-default.out
# when forced to reexec, we're using vendored apparmor
MATCH 'internal: true' < snap-apparmor-force-reexec.out
MATCH 'apparmor-parser: /snap/snapd/.*/usr/lib/snapd/apparmor_parser' < snap-apparmor-force-reexec.out
else
MATCH 'apparmor-parser: /snap/snapd/.*/usr/lib/snapd/apparmor_parser' < snap-apparmor-default.out
MATCH 'apparmor-parser-command: /snap/snapd/.*/apparmor_parser --config-file /snap/snapd/.*/usr/lib/snapd/apparmor/parser.conf --base /snap/snapd/.*/usr/lib/snapd/apparmor\.d --policy-features /snap/snapd/.*/usr/lib/snapd/apparmor\.d/abi/4\.0' < snap-apparmor-default.out
MATCH 'internal: true' < snap-apparmor-default.out
fi
if os.query is-xenial || os.query is-bionic; then
# Ubuntu < 20.04 does not have usr-merge
MATCH 'apparmor-parser: /sbin/apparmor_parser' < snap-apparmor-no-reexec.out
MATCH 'internal: false' < snap-apparmor-no-reexec.out
else
MATCH 'apparmor-parser: /usr/sbin/apparmor_parser' < snap-apparmor-no-reexec.out
MATCH 'internal: false' < snap-apparmor-no-reexec.out
fi
echo "Checking AppArmor (forced reexec)"
if [ "$SNAP_REEXEC" = 0 ]; then
# with native package and when forced to reexec, we're using vendored apparmor
MATCH 'internal: true' < snap-apparmor-force-reexec.out
MATCH 'apparmor-parser: /snap/snapd/.*/usr/lib/snapd/apparmor_parser' < snap-apparmor-force-reexec.out
else
# but when using the snapd snap there's no difference
MATCH 'internal: true' < snap-apparmor-force-reexec.out
fi
if [ "$SNAP_REEXEC" = 0 ]; then
MATCH 'snap-update-ns: /usr/lib/snapd/snap-update-ns' < snap-uns-default.out
else
MATCH 'snap-update-ns: /snap/snapd/.*/usr/lib/snapd/snap-update-ns' < snap-uns-default.out
fi
;;
*)
echo "Checking default scenario"
MATCH 'distro-supports-reexec: false' < snap-default.out
MATCH 'is-reexec-enabled: true' < snap-default.out
MATCH 'is-reexec-explicitly-enabled: false' < snap-default.out
MATCH 'is-reexecd: false' < snap-default.out
MATCH 'self-exe: /usr/bin/snap' < snap-default.out
echo "Checking with reexec scenario"
MATCH 'distro-supports-reexec: false' < snap-yes-reexec.out
MATCH 'is-reexec-enabled: true' < snap-yes-reexec.out
MATCH 'is-reexec-explicitly-enabled: true' < snap-yes-reexec.out
# actual outcome depends on whether there is a /snap ->
# /var/lib/snapd/snap symlink on systems where snaps are not mounted
# under /snap
# TODO: once snapd snap lands the output wlll be different:
# MATCH 'is-reexecd: false' < snap-yes-reexec.out
# MATCH 'self-exe: /snap/snapd/.*/usr/bin/snap' < snap-yes-reexec.out
case "$SPREAD_SYSTEM" in
arch-linux-*|fedora-*|centos-*)
# no /snap -> /var/lib/snapd/snap symlink by default
MATCH 'is-reexecd: false' < snap-yes-reexec.out
MATCH 'self-exe: /usr/bin/snap' < snap-yes-reexec.out
MATCH 'is-reexecd: false' < snap-force-reexec.out
;;
opensuse-*)
# snap mount dir is /snap
MATCH 'is-reexecd: true' < snap-yes-reexec.out
MATCH 'self-exe: /snap/snapd/.*/usr/bin/snap' < snap-yes-reexec.out
MATCH 'is-reexecd: true' < snap-force-reexec.out
;;
amazon-linux-*)
# has /snap -> /var/lib/snapd symlink
MATCH 'is-reexecd: true' < snap-yes-reexec.out
MATCH 'self-exe: /var/lib/snapd/snap/snapd/.*/usr/bin/snap' < snap-yes-reexec.out
MATCH 'is-reexecd: true' < snap-force-reexec.out
;;
*)
echo "unexpected distro $SPREAD_SYSTEM"
exit 1
;;
esac
echo "Checking AppArmor"
case "$SPREAD_SYSTEM" in
fedora-*|centos-*)
MATCH 'apparmor-parser: error:file does not exist' < snap-apparmor-default.out
MATCH 'apparmor-parser: error:file does not exist' < snap-apparmor-force-reexec.out
;;
amazon-linux-*)
# there's no AppArmor installed in the system
MATCH 'apparmor-parser: error:file does not exist' < snap-apparmor-default.out
# but there is /snap -> /var/lib/snapd/snap symlink, so
# internal apparmor utilities are available, when reexec is
# forced
MATCH 'internal: true' < snap-apparmor-force-reexec.out
;;
*)
# arch and opensuse have AppArmor installed
MATCH 'apparmor-parser: (/usr)?/sbin/apparmor_parser' < snap-apparmor-default.out
case "$SPREAD_SYSTEM" in
opensuse-*)
MATCH 'internal: true' < snap-apparmor-force-reexec.out
;;
*)
# arch has no /snap -> /var/lib/snapd/snap symlink
MATCH 'internal: false' < snap-apparmor-force-reexec.out
;;
esac
esac
MATCH 'internal: false' < snap-apparmor-default.out
MATCH 'snap-update-ns: /usr/lib(exec)?/snapd/snap-update-ns' < snap-uns-default.out
;;
esac
|