github.com/rootless-containers/rootlesskit/v2@v2.3.4/hack/integration-propagation.sh (about) 1 #!/bin/bash 2 source $(realpath $(dirname $0))/common.inc.sh 3 function test_propagation() { 4 propagation=$1 5 INFO "Testing --propagation=$propagation" 6 d=$(mktemp -d) 7 state=$d/state 8 $ROOTLESSKIT --state-dir=$state --propagation=$propagation -- sleep infinity & 9 job=$! 10 until test -f $state/child_pid; do sleep 0.1; done 11 pid=$(cat $state/child_pid) 12 mkdir -p $d/a 13 touch $d/a/before_mount 14 sudo mount -t tmpfs none $d/a 15 touch $d/a/after_mount 16 case $propagation in 17 private | rprivate) 18 test -f /proc/$pid/root/$d/a/before_mount 19 test ! -f /proc/$pid/root/$d/a/after_mount 20 ;; 21 slave | rslave | shared | rshared) 22 test ! -f /proc/$pid/root/$d/a/before_mount 23 test -f /proc/$pid/root/$d/a/after_mount 24 ;; 25 *) 26 ERROR "Unknown propagation $propagation" 27 exit 1 28 ;; 29 esac 30 sudo umount $d/a 31 kill $job 32 wait 33 rm -rf $d 34 INFO "Testing --propagation=$propagation with copy-up" 35 case $propagation in 36 private | rprivate | slave | rslave) 37 $ROOTLESSKIT --propagation=$propagation --copy-up=/run echo test 38 ;; 39 shared | rshared) 40 INFO "(skipping, because known not to work)" 41 ;; 42 *) 43 ERROR "Unknown propagation $propagation" 44 exit 1 45 ;; 46 esac 47 } 48 49 test_propagation private 50 test_propagation rprivate 51 if findmnt -n -l -o propagation / | grep shared >/dev/null; then 52 test_propagation slave 53 test_propagation rslave 54 test_propagation shared 55 test_propagation rshared 56 else 57 INFO "the propagation of / is not shared; skipping non-private tests" 58 fi