Files
yoctor-layers/meta-st/meta-st-openstlinux/recipes-support/userfs/userfs-cleanup-package/userfs-cleanup-package.sh
2024-07-11 14:16:35 +02:00

150 lines
4.2 KiB
Bash

#! /bin/sh
### BEGIN INIT INFO
# remove package which are present on the database but not present on userfs
### END INIT INFO
DESC="cleanup apt database"
get_type() {
local __resultvar=$1
ROOT_TYPE="unknown"
if [ -f /usr/bin/findmnt ];
then
ROOT_DEVICE=$(findmnt --noheadings --output=SOURCE / | cut -d'[' -f1)
case $ROOT_DEVICE in
ubi*)
ROOT_TYPE="nand"
;;
/dev/mmcblk0*)
ROOT_TYPE="sdmmc"
;;
/dev/mmcblk1*)
ROOT_TYPE="mmc"
;;
/dev/disk/by-*)
LINK=$(/usr/bin/readlink $ROOT_DEVICE | tr '/' ' ' | tr '.' ' ' | sed "s/ //g")
case $LINK in
ubi*)
ROOT_TYPE="nand"
;;
mmcblk0*)
ROOT_TYPE="sdmmc"
;;
mmcblk1*)
ROOT_TYPE="mmc"
;;
esac
;;
esac
else
if [ `cat /proc/cmdline | sed "s/.*mmcblk0.*/mmcblk0/" ` == "mmcblk0" ]; then
ROOT_TYPE="sdmmc"
elif [ `cat /proc/cmdline | sed "s/.*mmcblk1.*/mmcblk1/" ` == "mmcblk1" ]; then
ROOT_TYPE="mmc"
elif [ `cat /proc/cmdline | sed "s/.*ubi0.*/ubi0/" ` == "ubi0" ]; then
ROOT_TYPE="nand"
elif [ `cat /proc/cmdline | sed "s/.*nfsroot.*/nfs/" ` == "nfs" ]; then
ROOT_TYPE="nfs"
fi
fi
eval $__resultvar="'$ROOT_TYPE'"
}
found_devices() {
local __resultvar=$1
local __resultopt=$2
local _type=$3
local _search=$4
local _device="unknown"
local _option=" "
case $_type in
nand)
local ubi_volumes=$(ls -1 -d /sys/class/ubi/ubi0_*)
for f in $ubi_volumes;
do
if [ -r $f/name ];
then
cat $f/name | grep -sq "^${_search}"
if [ "$?" -eq 0 ];
then
_device="/dev/$(basename $f)"
_option="-t ubifs"
break;
fi
fi
done
;;
sdmmc)
local sdmmc_parts=$(ls -1 -d /sys/block/mmcblk0/mmcblk0p*)
for f in $sdmmc_parts;
do
if [ -r $f/uevent ];
then
cat $f/uevent | grep PARTNAME | sed "s/PARTNAME=//" | grep -sq "^${_search}"
if [ "$?" -eq 0 ];
then
_device="/dev/$(basename $f)"
break;
fi
fi
done
;;
mmc)
local mmc_parts=$(ls -1 -d /sys/block/mmcblk1/mmcblk1p*)
for f in $mmc_parts;
do
if [ -r $f/uevent ];
then
cat $f/uevent | grep PARTNAME | sed "s/PARTNAME=//" | grep -sq "^${_search}"
if [ "$?" -eq 0 ];
then
_device="/dev/$(basename $f)"
break;
fi
fi
done
;;
nfs)
$_device="/dev/nfs"
;;
esac
eval $__resultvar="'$_device'"
eval $__resultopt="'$_option'"
}
case $1 in
start)
echo "Starting $DESC"
get_type TYPE
found_devices DEVICE DEVICE_OPTION $TYPE userfs
if [ "$DEVICE" = "/dev/null" ];
then
# nfs file system, do nothing
exit 0
fi
case $DEVICE in
unknown)
# userfs partition are not present
# we need to cleanup apt database
grep -l "^/usr/local/" /var/lib/dpkg/info/* | sed -e "s|/var/lib/dpkg/info/\(.*\).list|\1|" | xargs apt-get purge -y
echo "USERFS NOT PRESENT: CLEAN DPKG DATABASE" > /dev/kmsg
;;
/dev/nfs)
# nfs file system, do nothing
exit 0
;;
/dev/*)
# userfs are present, do nothing
;;
esac
;;
*)
echo "Usage: @sysconfdir@/init.d/userfs-cleanup-package.sh {start}" >&2
exit 1
;;
esac
exit 0
# vim:noet