Compare commits

..

1 Commits

Author SHA1 Message Date
Ld-Hagen
329b429005 No hardcoded Opera directory in apt hook. Some text messages and readme changes 2021-10-13 21:33:28 +03:00
4 changed files with 58 additions and 94 deletions

View File

@@ -2,43 +2,37 @@
* Fixes Opera html5 media content including DRM-protected one. * Fixes Opera html5 media content including DRM-protected one.
* This script must be executed all times opera fails on showing html5 media content. * This script must be executed all times opera fails on showing html5 media content.
* On Debian-based, RedHat-based and Arch-based distributions it could be started automatically after Opera each update or reinstall. * On Debian-based and Arch-based distributions it could be started automatically after Opera each update or reinstall.
## Requirements ## Requirements
1. **wget** (Is needed for downloading the ffmpeg lib and widevine) 1. **wget** (Is needed for downloading the ffmpeg lib and widevine)
```sudo apt install wget```
**unzip** (Is needed for unpacking the downloaded file) 2. **unzip** (Is needed for unpacking the downloaded file)
```sudo apt install unzip```
**git** (Is needed for fetching this script) 2. **git** (Is needed for fetching this script)
```sudo apt install git```
For Debian-based systems: `sudo apt install wget unzip git`
For Arch-based systems: `sudo pacman -S wget unzip git`
For RedHat-based systems: `sudo dnf install wget unzip git`
2. (*Optional*) **python3-dnf-plugin-post-transaction-actions** (Is needed for autoupdate in RedHat-based systems)
`dnf install python3-dnf-plugin-post-transaction-actions`
## Usage ## Usage
1. Clone this repo 1. Clone this repo
`git clone https://github.com/Ld-Hagen/fix-opera-linux-ffmpeg-widevine.git` ```git clone https://github.com/Ld-Hagen/fix-opera-linux-ffmpeg-widevine.git```
2. Go to the repo root folder 2. Go to the repo root folder
`cd ./fix-opera-linux-ffmpeg-widevine` ```cd ./fix-opera-linux-ffmpeg-widevine```
3. (*Optional*) Run script. And if it works well go to next step. 3. (*Optional*) Run script. And if it works well go to next step.
`sudo ./scripts/fix-opera.sh` ```sudo ./scripts/fix-opera.sh```
4. Run install script and answer few questions. 4. Run install script and answer few questions.
`sudo ./install.sh` ```sudo ./install.sh```
5. Delete the repo 5. Delete the repo
`cd .. && rm -rf ./fix-opera-linux-ffmpeg-widevine` ```cd .. && rm -rf ./fix-opera-linux-ffmpeg-widevine```

View File

@@ -29,7 +29,6 @@ create_hook ()
printf 'Choose your Linux distro:\n' printf 'Choose your Linux distro:\n'
printf ' 1. Debian-based (Debian/Ubuntu/Mint/etc.)\n' printf ' 1. Debian-based (Debian/Ubuntu/Mint/etc.)\n'
printf ' 2. Arch-based (Arch/Manjaro/etc.)\n' printf ' 2. Arch-based (Arch/Manjaro/etc.)\n'
printf ' 3. RedHat-based (RedHat/Fedora/etc.)\n'
printf ' 0. Other\n' printf ' 0. Other\n'
while read -p "Your choice: " DISTRIB; do while read -p "Your choice: " DISTRIB; do
case $DISTRIB in case $DISTRIB in
@@ -39,16 +38,10 @@ create_hook ()
printf 'Now the script will run automatically every time apt installs or updates Opera.\n' printf 'Now the script will run automatically every time apt installs or updates Opera.\n'
break;; break;;
"2" ) "2" )
cp -f $SCRIPT_PATH/scripts/fix-opera.hook $INSTALL_PATH cp -f $SCRIPT_PATH/scripts/fix-opera.hook $INSTALL_PATH /usr/share/libalpm/hooks
ln -sf $INSTALL_PATH/fix-opera.hook /usr/share/libalpm/hooks/ ln -sf $INSTALL_PATH/fix-opera.hook /usr/share/libalpm/hooks/
printf 'Now the script will run automatically every time pacman installs or updates Opera.\n' printf 'Now the script will run automatically every time pacman installs or updates Opera.\n'
break;; break;;
"3" )
dnf install python3-dnf-plugin-post-transaction-actions -y
cp -f $SCRIPT_PATH/scripts/fix-opera.action $INSTALL_PATH
ln -sf $INSTALL_PATH/fix-opera.action /etc/dnf/plugins/post-transaction-actions.d/
printf 'Now the script will run automatically every time dnf installs or updates Opera.\n'
break;;
"0" ) "0" )
printf "Autostart for your Linux distro is currently unsupported\n" printf "Autostart for your Linux distro is currently unsupported\n"
break;; break;;
@@ -58,7 +51,7 @@ create_hook ()
done done
} }
printf 'Installing script to your system...\n' ptintf 'Installing script to your system...\n'
printf 'Would you like to apply Widevine CDM fix? [y/n]' printf 'Would you like to apply Widevine CDM fix? [y/n]'
while read FIX_WIDEVINE; do while read FIX_WIDEVINE; do
@@ -105,7 +98,7 @@ while read CREATE_HOOK; do
"n" | "N") "n" | "N")
break;; break;;
* ) * )
printf "Would you like to run it automatically after each Opera update?? [y/n]" printf "Would you like to create an alias for user $USER_NAME? [y/n]"
continue;; continue;;
esac esac
done done

View File

@@ -1 +0,0 @@
opera-stable:in:/root/.scripts/fix-opera.sh

View File

@@ -20,35 +20,27 @@ if ! which wget > /dev/null; then
exit 1 exit 1
fi fi
if which pacman > /dev/null; then
ARCH_SYSTEM=true
fi
#Config section #Config section
readonly FIX_WIDEVINE=true readonly FIX_WIDEVINE=true
readonly TEMP_DIR='/tmp' readonly TEMP_DIR='/tmp'
readonly FFMPEG_SRC_MAIN='https://api.github.com/repos/Ld-Hagen/nwjs-ffmpeg-prebuilt/releases' readonly FFMPEG_SRC_MAIN='https://api.github.com/repos/iteufel/nwjs-ffmpeg-prebuilt/releases'
readonly FFMPEG_SRC_ALT='https://api.github.com/repos/Ld-Hagen/fix-opera-linux-ffmpeg-widevine/releases' readonly FFMPEG_SRC_ALT='https://api.github.com/repos/Ld-Hagen/fix-opera-linux-ffmpeg-widevine/releases'
readonly WIDEVINE_VERSIONS='https://dl.google.com/widevine-cdm/versions.txt' readonly WIDEVINE_VERSIONS='https://dl.google.com/widevine-cdm/versions.txt'
readonly FFMPEG_SO_NAME='libffmpeg.so' readonly FFMPEG_SO_NAME='libffmpeg.so'
readonly WIDEVINE_SO_NAME='libwidevinecdm.so' readonly WIDEVINE_SO_NAME='libwidevinecdm.so'
readonly WIDEVINE_MANIFEST_NAME='manifest.json' readonly WIDEVINE_MANIFEST_NAME='manifest.json'
OPERA_VERSIONS=() readonly OPERA_DIR=$(dirname $(readlink -f $(which opera)))
readonly OPERA_LIB_DIR="$OPERA_DIR/lib_extra"
if [ -x "$(command -v opera)" ]; then readonly OPERA_WIDEVINE_DIR="$OPERA_LIB_DIR/WidevineCdm"
OPERA_VERSIONS+=("opera") readonly OPERA_WIDEVINE_SO_DIR="$OPERA_WIDEVINE_DIR/_platform_specific/linux_x64"
fi readonly OPERA_WIDEVINE_CONFIG="$OPERA_DIR/resources/widevine_config.json"
if [ -x "$(command -v opera-beta)" ]; then
OPERA_VERSIONS+=("opera-beta")
fi
#Getting download links #Getting download links
printf 'Getting download links...\n' printf 'Getting download links...\n'
##ffmpeg ##ffmpeg
readonly FFMPEG_URL_MAIN=$(wget -q4O - $FFMPEG_SRC_MAIN | grep browser_download_url | cut -d '"' -f 4 | grep linux-x64 | head -n 1) readonly FFMPEG_URL_MAIN=$(wget -qO - $FFMPEG_SRC_MAIN | grep browser_download_url | cut -d '"' -f 4 | grep linux-x64 | head -n 1)
readonly FFMPEG_URL_ALT=$(wget -q4O - $FFMPEG_SRC_ALT | grep browser_download_url | cut -d '"' -f 4 | grep linux-x64 | head -n 1) readonly FFMPEG_URL_ALT=$(wget -qO - $FFMPEG_SRC_ALT | grep browser_download_url | cut -d '"' -f 4 | grep linux-x64 | head -n 1)
[[ $(basename $FFMPEG_URL_ALT) < $(basename $FFMPEG_URL_MAIN) ]] && readonly FFMPEG_URL=$FFMPEG_URL_MAIN || readonly FFMPEG_URL=$FFMPEG_URL_ALT [[ $(basename $FFMPEG_URL_ALT) < $(basename $FFMPEG_URL_MAIN) ]] && readonly FFMPEG_URL=$FFMPEG_URL_MAIN || readonly FFMPEG_URL=$FFMPEG_URL_ALT
if [[ -z $FFMPEG_URL ]]; then if [[ -z $FFMPEG_URL ]]; then
printf 'Failed to get ffmpeg download URL. Exiting...\n' printf 'Failed to get ffmpeg download URL. Exiting...\n'
@@ -57,7 +49,7 @@ fi
##Widevine ##Widevine
if $FIX_WIDEVINE; then if $FIX_WIDEVINE; then
readonly WIDEVINE_LATEST=`wget -q4O - $WIDEVINE_VERSIONS | tail -n1` readonly WIDEVINE_LATEST=`wget -qO - $WIDEVINE_VERSIONS | tail -n1`
readonly WIDEVINE_URL="https://dl.google.com/widevine-cdm/$WIDEVINE_LATEST-linux-x64.zip" readonly WIDEVINE_URL="https://dl.google.com/widevine-cdm/$WIDEVINE_LATEST-linux-x64.zip"
fi fi
@@ -65,14 +57,14 @@ fi
printf 'Downloading files...\n' printf 'Downloading files...\n'
mkdir -p "$TEMP_DIR/opera-fix" mkdir -p "$TEMP_DIR/opera-fix"
##ffmpeg ##ffmpeg
wget -q4 --show-progress $FFMPEG_URL -O "$TEMP_DIR/opera-fix/ffmpeg.zip" wget -q --show-progress $FFMPEG_URL -O "$TEMP_DIR/opera-fix/ffmpeg.zip"
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
printf 'Failed to download ffmpeg. Check your internet connection or try later\n' printf 'Failed to download ffmpeg. Check your internet connection or try later\n'
exit 1 exit 1
fi fi
##Widevine ##Widevine
if $FIX_WIDEVINE; then if $FIX_WIDEVINE; then
wget -q4 --show-progress "$WIDEVINE_URL" -O "$TEMP_DIR/opera-fix/widevine.zip" wget -q --show-progress "$WIDEVINE_URL" -O "$TEMP_DIR/opera-fix/widevine.zip"
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
printf 'Failed to download Widevine CDM. Check your internet connection or try later\n' printf 'Failed to download Widevine CDM. Check your internet connection or try later\n'
exit 1 exit 1
@@ -88,44 +80,30 @@ if $FIX_WIDEVINE; then
unzip -o "$TEMP_DIR/opera-fix/widevine.zip" -d $TEMP_DIR/opera-fix > /dev/null unzip -o "$TEMP_DIR/opera-fix/widevine.zip" -d $TEMP_DIR/opera-fix > /dev/null
fi fi
for opera in ${OPERA_VERSIONS[@]}; do #Removing old libraries and preparing directories
echo "Doing $opera" printf 'Removing old libraries & making directories...\n'
EXECUTABLE=$(command -v "$opera") ##ffmpeg
if [[ $ARCH_SYSTEM -eq true ]]; then rm -f "$OPERA_LIB_DIR/$FFMPEG_SO_NAME"
OPERA_DIR=$(dirname $(cat $EXECUTABLE | grep exec | cut -d ' ' -f 2)) mkdir -p "$OPERA_LIB_DIR"
else ##Widevine
OPERA_DIR=$(dirname $(readlink -f $EXECUTABLE)) if $FIX_WIDEVINE; then
fi
OPERA_LIB_DIR="$OPERA_DIR/lib_extra"
OPERA_WIDEVINE_DIR="$OPERA_LIB_DIR/WidevineCdm"
OPERA_WIDEVINE_SO_DIR="$OPERA_WIDEVINE_DIR/_platform_specific/linux_x64"
OPERA_WIDEVINE_CONFIG="$OPERA_DIR/resources/widevine_config.json"
#Removing old libraries and preparing directories
printf 'Removing old libraries & making directories...\n'
##ffmpeg
rm -f "$OPERA_LIB_DIR/$FFMPEG_SO_NAME"
mkdir -p "$OPERA_LIB_DIR"
##Widevine
if $FIX_WIDEVINE; then
rm -rf "$OPERA_WIDEVINE_DIR" rm -rf "$OPERA_WIDEVINE_DIR"
mkdir -p "$OPERA_WIDEVINE_SO_DIR" mkdir -p "$OPERA_WIDEVINE_SO_DIR"
fi fi
#Moving libraries to its place #Moving libraries to its place
printf 'Moving libraries to their places...\n' printf 'Moving libraries to their places...\n'
##ffmpeg ##ffmpeg
cp -f "$TEMP_DIR/opera-fix/$FFMPEG_SO_NAME" "$OPERA_LIB_DIR" mv -f "$TEMP_DIR/opera-fix/$FFMPEG_SO_NAME" "$OPERA_LIB_DIR"
chmod 0644 "$OPERA_LIB_DIR/$FFMPEG_SO_NAME" chmod 0644 "$OPERA_LIB_DIR/$FFMPEG_SO_NAME"
##Widevine ##Widevine
if $FIX_WIDEVINE; then if $FIX_WIDEVINE; then
cp -f "$TEMP_DIR/opera-fix/$WIDEVINE_SO_NAME" "$OPERA_WIDEVINE_SO_DIR" mv -f "$TEMP_DIR/opera-fix/$WIDEVINE_SO_NAME" "$OPERA_WIDEVINE_SO_DIR"
chmod 0644 "$OPERA_WIDEVINE_SO_DIR/$WIDEVINE_SO_NAME" chmod 0644 "$OPERA_WIDEVINE_SO_DIR/$WIDEVINE_SO_NAME"
cp -f "$TEMP_DIR/opera-fix/$WIDEVINE_MANIFEST_NAME" "$OPERA_WIDEVINE_DIR" mv -f "$TEMP_DIR/opera-fix/$WIDEVINE_MANIFEST_NAME" "$OPERA_WIDEVINE_DIR"
chmod 0644 "$OPERA_WIDEVINE_DIR/$WIDEVINE_MANIFEST_NAME" chmod 0644 "$OPERA_WIDEVINE_DIR/$WIDEVINE_MANIFEST_NAME"
printf "[\n {\n \"preload\": \"$OPERA_WIDEVINE_DIR\"\n }\n]\n" > "$OPERA_WIDEVINE_CONFIG" printf "[\n {\n \"preload\": \"$OPERA_WIDEVINE_DIR\"\n }\n]\n" > "$OPERA_WIDEVINE_CONFIG"
fi fi
done
#Removing temporary files #Removing temporary files
printf 'Removing temporary files...\n' printf 'Removing temporary files...\n'