Skip to content

Instantly share code, notes, and snippets.

@bvaudour
Created November 28, 2018 11:03
Show Gist options
  • Save bvaudour/f082c88488e9c948b00f96a15be6e6bd to your computer and use it in GitHub Desktop.
Save bvaudour/f082c88488e9c948b00f96a15be6e6bd to your computer and use it in GitHub Desktop.
#!/bin/sh
# Make sure the user is not runing as superuser
if [ "$UID" = "0" ]; then
echo 'Do not run this script as root or via sudo. Run it as your normal user.' >&2
exit 1
fi
available () {
command -v $1 >/dev/null 2>&1
}
# Make sure we have wget or curl
if available wget; then
SILENT_DL="wget -qO-"
LOUD_DL="wget"
elif available curl; then
SILENT_DL="curl -sL"
LOUD_DL="curl -O"
else
echo "Install Wget or cURL" >&2
exit 1
fi
# Set temp dir
TMP=${TMP:-/tmp}
# Set staging dir
STAGINGDIR=$TMP/chromium-codecs-ffmpeg-extra-staging
# Setup Arch
case $(uname -m) in
x86_64) ARCH=x86_64; DEB_ARCH=amd64; REPO=http://security.ubuntu.com/ubuntu/pool/universe/c/chromium-browser/ ;;
i?86) ARCH=i386; DEB_ARCH=i386; REPO=http://security.ubuntu.com/ubuntu/pool/universe/c/chromium-browser/ ;;
armhf) ARCH=armhf; DEB_ARCH=armhf; REPO=http://ports.ubuntu.com/ubuntu-ports/pool/universe/c/chromium-browser/ ;;
arm64) ARCH=arm64; DEB_ARCH=arm64; REPO=http://ports.ubuntu.com/ubuntu-ports/pool/universe/c/chromium-browser/ ;;
esac
# Work out the VERSION
# Limit the UBUNTU version to 16.04 to avoid the glibc bump in 18.04, so that this works for older distros
UBUNTU_PACKAGE=$(${SILENT_DL} $REPO | sed -rn "s/.*(chromium-codecs-ffmpeg-extra_([0-9]+\.){3}[0-9]+-[0-9]ubuntu[0-9]\.16\.04\.[1-9]_$DEB_ARCH.deb).*/\1/p" | sort | tail -n 1)
## The original match was
## UBUNTU_PACKAGE=$(${SILENT_DL} $REPO | sed -rn "s/.*(chromium-codecs-ffmpeg-extra_([0-9]+\.){3}[0-9]+-[0-9]ubuntu[0-9]\.([0-9]{2}\.){2}[0-9\.]*_$DEB_ARCH.deb).*/\1/p" | sort | tail -n 1)
VERSION=$(echo "${UBUNTU_PACKAGE}" | sed -rn "s/.*_(([0-9]+\.){3}[0-9]+)-.*/\1/p")
# Error out if $VERISON is unset, e.g. because previous command failed
if [ -z "$VERSION" ]; then
echo "Could not work out the latest version; exiting" >&2
exit 1
fi
# Don't start repackaging if the same version is already installed
if [ -r "$HOME/.local/lib/vivaldi/chromium-codecs-ffmpeg-extra-version.txt" ]; then
. "$HOME/.local/lib/vivaldi/chromium-codecs-ffmpeg-extra-version.txt"
if [ "$INSTALLED_VERSION" = "$VERSION" ]; then
echo "The latest chromium-codecs-ffmpeg-extra ($VERSION) is already installed"
exit 0
fi
fi
# Now we could screw things up so exit on first error
set -e
# If the staging directory is already present from the past, clear it down
# and re-create it.
if [ -d "$STAGINGDIR" ]; then
rm -fr "$STAGINGDIR"
fi
mkdir "$STAGINGDIR"
cd "$STAGINGDIR"
# Now get the deb package
$LOUD_DL "$REPO$UBUNTU_PACKAGE"
# Extract the contents of the chromium-codecs-ffmpeg-extra package
if available bsdtar; then
DEB_EXTRACT_COMMAND='bsdtar xOf'
elif available ar; then
DEB_EXTRACT_COMMAND='ar p'
else
echo 'You must install BSD tar or GNU binutils to use this script.' >&2
exit 1
fi
$DEB_EXTRACT_COMMAND ${UBUNTU_PACKAGE} data.tar.xz | tar xJf - ./usr/lib/chromium-browser/libffmpeg.so --strip 4
# Check the libffmpeg.so dependencies are resolved
if LANGUAGE=en ldd libffmpeg.so 2>&1 | grep -qm1 'not \(a dynamic executable\|found\)'; then
cat <<EOF >&2
It is not possible to use this alternative libffmpeg on your system.
Let us know via a post in our forums, mentioning your distro and distro
version:
https://forum.vivaldi.net/category/35/vivaldi-browser-for-linux
EOF
exit 1
fi
# Note the version number for future reference, during upgrades
echo "INSTALLED_VERSION=$VERSION" > chromium-codecs-ffmpeg-extra-version.txt
# Install the files
install -Dm644 libffmpeg.so "$HOME/.local/lib/vivaldi/libffmpeg.so"
install -Dm644 chromium-codecs-ffmpeg-extra-version.txt "$HOME/.local/lib/vivaldi/chromium-codecs-ffmpeg-extra-version.txt"
# Tell the user we are done
cat <<EOF
The following files were installed onto your system:
$HOME/.local/lib/vivaldi/libffmpeg.so
$HOME/.local/lib/vivaldi/chromium-codecs-ffmpeg-extra-version.txt
Restart Vivaldi and test H.264/MP4 support via this page:
http://www.quirksmode.org/html5/tests/video.html
EOF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment