#!/bin/sh # Discourage Ubuntu users from using this script, since they can (and should) install chromium-codecs-ffmpeg-extra directly if [ -r /etc/os-release ] && grep -qx 'ID=ubuntu' /etc/os-release; then echo "You should not use this script on Ubuntu, install chromium-codecs-ffmpeg-extra via apt instead." >&2 read -p "Do you wish to continue anyway? [y/N]: " YN case "$YN" in [Yy]*) : ;; [Nn]*) echo "Exiting." ; exit ;; *) echo 'Answer not recognised, assuming "No". Exiting.'; exit ;; esac fi # 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) DEB_ARCH=amd64; REPO=http://security.ubuntu.com/ubuntu/pool/universe/c/chromium-browser/ ;; i?86) DEB_ARCH=i386; REPO=http://security.ubuntu.com/ubuntu/pool/universe/c/chromium-browser/ ;; arm*) DEB_ARCH=armhf; REPO=http://ports.ubuntu.com/ubuntu-ports/pool/universe/c/chromium-browser/ ;; aarch64) 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 fallback_data_extract () { dd status=none iflag=skip_bytes if="$1" skip=`grep -Fabom1 "\`printf \"\\\\\3757zXZ\"\`" "$1" | cut -d: -f1` } DEB_EXTRACT_COMMAND=fallback_data_extract 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 <&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 <