mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-06 17:18:32 +00:00
freebsd-update: Add check for kernel modules
People get confused when some software (VirtualBox, etc) does not work as expected (or at all) after a major upgrade. We have a nice way to deal with this when using sources, namely including PORTS_MODULES in /etc/make.conf, but we lack something similar for binary updates. This patch retrieves a list of kernel modules installed from packages and advises the user to recompile from ports to avoid problems. Approved by: zlei@ Differential Revision: https://reviews.freebsd.org/D39695
This commit is contained in:
parent
8b181c2fba
commit
bc0c6c9cf3
|
@ -655,6 +655,63 @@ fetch_setup_verboselevel () {
|
|||
esac
|
||||
}
|
||||
|
||||
# Check if there are any kernel modules installed from ports.
|
||||
# In that case warn the user that a rebuild from ports (i.e. not from
|
||||
# packages) might need necessary for the modules to work in the new release.
|
||||
upgrade_check_kmod_ports() {
|
||||
local mod_name
|
||||
local modules
|
||||
local pattern
|
||||
local pkg_name
|
||||
local port_name
|
||||
local report
|
||||
local w
|
||||
|
||||
if ! command -v pkg >/dev/null; then
|
||||
echo "Skipping kernel modules check. pkg(8) not present."
|
||||
return
|
||||
fi
|
||||
|
||||
# Most modules are in /boot/modules but we should actually look
|
||||
# in every path configured in module_path
|
||||
search_files="/boot/defaults/loader.conf /boot/loader.conf"
|
||||
pattern=$(grep -shE '^module_path=' ${search_files} |
|
||||
tail -1 |
|
||||
cut -f2 -d\" |
|
||||
tr ";" "|")
|
||||
|
||||
if [ -z "${pattern}" ]; then
|
||||
# Not having module_path in loader.conf is probably an error.
|
||||
# Check at least the most common path
|
||||
pattern="/boot/modules"
|
||||
fi
|
||||
|
||||
# Check the pkg database for modules installed in those directories
|
||||
modules=$(pkg query '%Fp' | grep -E "${pattern}")
|
||||
|
||||
if [ -z "${modules}" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
echo -e "\n"
|
||||
echo "The following modules have been installed from packages."
|
||||
echo "As a consequence they might not work when performing a major or minor upgrade."
|
||||
echo -e "It is advised to rebuild these ports:\n"
|
||||
|
||||
|
||||
report="Module Package Port\n------ ------- ----\n"
|
||||
for module in ${modules}; do
|
||||
w=$(pkg which "${module}")
|
||||
mod_name=$(echo "${w}" | awk '{print $1;}')
|
||||
pkg_name=$(echo "${w}" | awk '{print $6;}')
|
||||
port_name=$(pkg info -o "${pkg_name}" | awk '{print $2;}')
|
||||
report="${report}${mod_name} ${pkg_name} ${port_name}\n"
|
||||
done
|
||||
|
||||
echo -e "${report}" | column -t
|
||||
echo -e "\n"
|
||||
}
|
||||
|
||||
# Perform sanity checks and set some final parameters
|
||||
# in preparation for fetching files. Figure out which
|
||||
# set of updates should be downloaded: If the user is
|
||||
|
@ -3466,6 +3523,7 @@ cmd_cron () {
|
|||
cmd_upgrade () {
|
||||
finalize_components_config ${COMPONENTS}
|
||||
upgrade_check_params
|
||||
upgrade_check_kmod_ports
|
||||
upgrade_run || exit 1
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue