88 lines
2.2 KiB
Bash
Executable File
88 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
set -e
|
|
|
|
# vlc-cache-gen uses readdir() which depends on the order in the filesystem
|
|
|
|
# Don't run if vlc is not installed
|
|
if [ ! -x /usr/lib/x86_64-linux-gnu/vlc/vlc-cache-gen ];
|
|
then
|
|
exit 0
|
|
fi
|
|
|
|
# Don't run if the cache file does not exist
|
|
if [ ! -e /usr/lib/x86_64-linux-gnu/vlc/plugins/plugins.dat ];
|
|
then
|
|
exit 0
|
|
fi
|
|
|
|
# Install disorderfs when needed and mark for removal at the end
|
|
_DISORDERFS_PREINSTALLED=yes
|
|
if [ ! -x /usr/bin/disorderfs ];
|
|
then
|
|
_DISORDERFS_PREINSTALLED=no
|
|
apt-get install --yes disorderfs
|
|
fi
|
|
|
|
# Install the fuse device (needed by disorderfs) and mark for removal at the end
|
|
_FUSE_DEVICE_PRESENT=yes
|
|
if [ ! -e /dev/fuse ];
|
|
then
|
|
_FUSE_DEVICE_PRESENT=no
|
|
mknod /dev/fuse c 10 229
|
|
fi
|
|
|
|
# Check for changes in the cache file, for suppressing the output if no change was made
|
|
_CHECK_FOR_CHANGES=yes
|
|
if [ ! -x /usr/bin/sha256sum ];
|
|
then
|
|
_CHECK_FOR_CHANGES=no
|
|
fi
|
|
|
|
|
|
# Prepare a directory with a stable sorting order
|
|
_ORDERED_DIR=$(mktemp --directory)
|
|
disorderfs /usr/lib/x86_64-linux-gnu/vlc/plugins ${_ORDERED_DIR} --reverse-dirents=no --sort-dirents=yes --quiet
|
|
|
|
# The checksum of the original file
|
|
if [ "${_CHECK_FOR_CHANGES}" = "yes" ];
|
|
then
|
|
sha256sum /usr/lib/x86_64-linux-gnu/vlc/plugins/plugins.dat > ${_ORDERED_DIR}/before.sha256sum
|
|
fi
|
|
|
|
# Regenerate the cache file in a directory which guarantees the sorting order of the files
|
|
/usr/lib/x86_64-linux-gnu/vlc/vlc-cache-gen ${_ORDERED_DIR}
|
|
|
|
# Verify the checksum for changes
|
|
if [ "${_CHECK_FOR_CHANGES}" = "yes" ];
|
|
then
|
|
_HOOK_WAS_NEEDED=no
|
|
sha256sum --check ${_ORDERED_DIR}/before.sha256sum --status || _HOOK_WAS_NEEDED=yes
|
|
rm -f ${_ORDERED_DIR}/before.sha256sum
|
|
fi
|
|
|
|
# Cleanup
|
|
fusermount -u ${_ORDERED_DIR}
|
|
rmdir ${_ORDERED_DIR}
|
|
|
|
if [ "${_DISORDERFS_PREINSTALLED}" = "no" ];
|
|
then
|
|
apt-get remove --yes --purge disorderfs
|
|
apt-get autoremove --yes
|
|
fi
|
|
|
|
if [ "${_FUSE_DEVICE_PRESENT}" = "no" ];
|
|
then
|
|
rm -f /dev/fuse
|
|
fi
|
|
|
|
# Report only when either a change was detected or not detectable (due to missing tools)
|
|
if [ "${_CHECK_FOR_CHANGES}" = "yes" ];
|
|
then
|
|
if [ "${_HOOK_WAS_NEEDED}" = "yes" ];
|
|
then
|
|
echo "P: $(basename $0) Reproducible hook has been applied"
|
|
fi
|
|
else
|
|
echo "P: $(basename $0) Reproducible hook has been applied"
|
|
fi
|