diff --git a/Makefile b/Makefile index ea9c30bcc..8cc369bbd 100644 --- a/Makefile +++ b/Makefile @@ -57,12 +57,7 @@ $(P): @for file in ${TUNABLES}; do \ install -Dm0644 "${BUILD}/apparmor.d/tunables/$${file}" "${DESTDIR}/etc/apparmor.d/tunables/$${file}"; \ done; - @echo "Warning: profile dependencies fallback to unconfined." - @for file in ${@}; do \ - grep 'rPx' "${BUILD}/apparmor.d/$${file}"; \ - sed -i -e "s/rPx/rPUx/g" "${BUILD}/apparmor.d/$${file}"; \ - install -Dvm0644 "${BUILD}/apparmor.d/$${file}" "${DESTDIR}/etc/apparmor.d/$${file}"; \ - done; + @bash dists/partial.sh ${@} @systemctl restart apparmor || systemctl status apparmor dist ?= archlinux diff --git a/dists/partial.sh b/dists/partial.sh new file mode 100644 index 000000000..ec7b7c703 --- /dev/null +++ b/dists/partial.sh @@ -0,0 +1,44 @@ +BUILD=.build +DESTDIR=/ + +for profile in "$@" +do + if [ ! -f "${BUILD}/apparmor.d/${profile}" ]; then + continue + fi + echo "Installing profile $profile" + cp $BUILD/apparmor.d/$profile $DESTDIR/etc/apparmor.d/ + grep "rPx," "${BUILD}/apparmor.d/${profile}" | while read line + do + if [[ -z "$line" ]]; then + continue + fi + dep=$(echo "$line" | awk '{print $1}') + dep=$(echo $dep | awk -F"/" '{print $NF}') + dep=$(eval "ls ${BUILD}/apparmor.d/${dep} 2>/dev/null") + for i in $dep + do + i=$(echo $i | awk -F"/" '{print $NF}') + if [ ! -f "$DESTDIR/etc/apparmor.d/$i" ]; then + bash "$0" "$i" + fi + done + done + grep "rPx -> " "${BUILD}/apparmor.d/${profile}" | while read line + do + if [[ -z "$line" ]]; then + continue + fi + dep=${line%%#*} + dep=$(echo $dep | awk '{print $NF}') + dep=${dep::-1} + dep=$(eval "ls ${BUILD}/apparmor.d/${dep} 2>/dev/null") + for i in $dep + do + i=$(echo $i | awk -F"/" '{print $NF}') + if [ ! -f "$DESTDIR/etc/apparmor.d/$i" ]; then + bash "$0" "$i" + fi + done + done +done