Compare commits

...

38 Commits

Author SHA1 Message Date
Maksim Ivanov
ed5dd641d8 fix for release sorting 2025-08-29 06:46:57 +03:00
Maksim Ivanov
74b21fee16 jq sort_by for getteng latest ffmpeg release 2025-08-28 14:22:22 +03:00
Maksim Ivanov
c71d341623 Merge pull request #34 from EvilSupahFly/main
Fix Widevine 404 by falling back to older available versions
2025-08-28 11:07:25 +03:00
EvilSupahFly
3648b2851f Merge pull request #1 from EvilSupahFly/EvilSupahFly-patch-1
Update fix-opera.sh: Change Widevine download logic to:
 - Iterate through all versions from newest to oldest.
 - Test each candidate URL with curl --fail.
 - Select the first available version.
 - Exit gracefully if none are found.
2025-08-26 19:15:31 -04:00
EvilSupahFly
7290f690c8 Update fix-opera.sh
Change Widevine download logic to:
- Iterate through all versions from newest to oldest.
- Test each candidate URL with curl --fail.
- Select the first available version.
- Exit gracefully if none are found.
2025-08-26 19:13:10 -04:00
Maksim Ivanov
67c77ad757 Update 99fix-opera
statement fix
2025-01-21 21:20:47 +03:00
Maksim Ivanov
f4bd58a9c5 Update 99fix-opera. Workaround for #28 2024-09-25 10:46:00 +03:00
Maksim Ivanov
91a5ccb80e replaced wget with curl 2024-05-31 21:27:08 +03:00
Maksim Ivanov
f6e3f12c53 Update README.md
added info about jq requirement
2024-05-31 09:17:55 +03:00
Maksim Ivanov
92a3a3f153 Merge pull request #26 from FishyW/main
wget2 related fixes
2024-05-31 09:14:06 +03:00
fishyW
3de916e3ea replace jq with jq -r 2024-05-31 13:49:48 +10:00
fishyW
2d5105a129 'jq check 2024-05-30 22:38:06 +10:00
fishyW
031316d313 gets rid of which: no pacman message in non arch distributions 2024-05-30 22:34:38 +10:00
fishyW
7212c9490f wget compatibility + jq fix 2024-05-30 22:33:17 +10:00
Maksim Ivanov
98a86e2c16 Update README.md 2024-01-26 19:37:35 +03:00
Maksim Ivanov
6fca65a523 Update README.md 2024-01-26 09:40:54 +03:00
Maksim Ivanov
892b090031 Create uninstall.sh 2024-01-26 09:37:22 +03:00
Maksim Ivanov
364c391a66 Update README.md 2023-10-21 23:46:24 +03:00
Maksim Ivanov
60b55b813b Fixed Arch system check 2023-09-15 09:32:25 +03:00
Maksim Ivanov
423c8ea9ec Removed hardcoded path for Arch systems 2023-09-12 11:20:41 +03:00
Maksim Ivanov
e0e13e6cb1 Merge pull request #18 from kyrbrbik/main
Fix for arch based systems
2023-09-12 11:17:31 +03:00
kyrbrbik
0883b15800 this should be true 2023-09-04 22:08:17 +02:00
kyrbrbik
927444aaaa fixed opera path for arch 2023-09-04 22:05:32 +02:00
Maksim Ivanov
5fbd2e216e Merge pull request #15 from arielj/fix-readonly-variables
Download files only once, fix issue setting readonly vars
2023-06-11 19:23:41 +03:00
Ariel Juodziukynas
e06398b956 Download files only once, fix issue setting readonly vars 2023-06-11 13:02:14 -03:00
Maksim Ivanov
4b4541cd59 Merge pull request #14 from arielj/fix-array-push
Push elements into array instead of concatenating strings
2023-06-11 18:55:20 +03:00
Ariel Juodziukynas
a850c9bb5c Push elements into bash array instead of string concat 2023-06-11 12:44:09 -03:00
Maksim Ivanov
40513adc42 Merge pull request #13 from kaptcha0/patch-1
Update fix-opera.sh
2023-06-11 12:07:28 +03:00
kaptcha
8d56cf17dd Update fix-opera.sh
Added support for multiple Opera versions, mainly the stable and beta versions.
2023-06-10 13:48:26 -04:00
Maksim Ivanov
976ea8fb35 ffmpeg source for future releases moved
New source https://github.com/Ld-Hagen/nwjs-ffmpeg-prebuilt/releases
2023-01-01 14:50:43 +03:00
Maksim Ivanov
8dba65eec6 Fixed bad options order for wget 2022-12-30 21:51:57 +03:00
Maksim Ivanov
b77acfb324 Merge pull request #11 from leonmcar1/patch-1
Disable ipv6 for wget
2022-12-26 18:46:42 +03:00
leonmcar1
59dc39dfbc wget issues
Within the network where I work, only enabling in wget the --inet4-only the script works.
2022-12-21 13:50:43 +00:00
Maksim Ivanov
96dcbff82e Fixed message in install.sh 2022-04-22 22:20:37 +03:00
Maksim Ivanov
5f3fa8273a Disabled main ffmpeg source 2022-04-18 15:08:37 +03:00
Ld-Hagen
58be0f5c1c Readme update, dnf hook fix 2021-10-26 21:57:14 +03:00
Ld-Hagen
52954635c8 Hook for RedHat based systems (using dnf package manager). Untested. 2021-10-26 20:59:59 +03:00
Ld-Hagen
8c64261203 No hardcoded Opera directory in apt hook. Some text messages and readme changes 2021-10-14 18:42:27 +03:00
7 changed files with 178 additions and 78 deletions

View File

@@ -1,35 +1,62 @@
# Fix Opera Linux ffmpeg & WidevineCdm # Fix Opera Linux libffmpeg & WidevineCdm
* Fix Opera html5 media content including DRM-protected one. * Fixes Opera html5 media content including DRM-protected one.
* It script must be execute all times opera will fails on showing html5 media content. * This script must be executed all times opera fails on showing html5 media content.
* On Debian-based and Arch-based distros it may be started automatically after Opera update. * On Debian-based, RedHat-based and Arch-based distributions it could be started automatically after Opera each update or reinstall.
* Works only with native versions of Opera. Won't work with flatpak/snap releses.
* May not work with opera-beta and opera-develper.
## Requirements ## Requirements
1. **wget** (Is needed for downloading the ffmpeg lib and widevine) 1. **curl** (Is needed for downloading the ffmpeg lib and widevine)
```sudo apt install wget```
2. **unzip** (Is needed for unpacking the downloaded file) **unzip** (Is needed for unpacking the downloaded file)
```sudo apt install unzip```
**git** (Is needed for fetching this script)
**jq** (Is needed for parsing JSON from github)
For Debian-based systems: `sudo apt install curl unzip git jq`
For Arch-based systems: `sudo pacman -S curl unzip git jq`
For RedHat-based systems: `sudo dnf install curl unzip git jq`
3. (*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 and 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 ## How to uninstall
```cd .. && rm -rf ./fix-opera-linux-ffmpeg-widevine``` 1. Clone this repo
`cd /tmp && git clone https://github.com/Ld-Hagen/fix-opera-linux-ffmpeg-widevine.git`
2. Go to the repo root folder
`cd /tmp/fix-opera-linux-ffmpeg-widevine`
3. Make uninstall.sh executable
`chmod +x uninstall.sh`
5. Run uninstallation script. And if it works well go to next step.
`sudo ./uninstall.sh`

View File

@@ -14,8 +14,13 @@ if ! which unzip > /dev/null; then
exit 1 exit 1
fi fi
if ! which wget > /dev/null; then if ! which curl > /dev/null; then
printf '\033[1mwget\033[0m package must be installed to run this script\n' printf '\033[1mcurl\033[0m package must be installed to run this script\n'
exit 1
fi
if ! which jq > /dev/null; then
printf '\033[1mjq\033[0m package must be installed to run this script\n'
exit 1 exit 1
fi fi
@@ -29,6 +34,7 @@ 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
@@ -38,10 +44,16 @@ 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 /usr/share/libalpm/hooks cp -f $SCRIPT_PATH/scripts/fix-opera.hook $INSTALL_PATH
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;;
@@ -51,7 +63,7 @@ create_hook ()
done done
} }
ptintf 'Installing script to ypur system...\n' printf '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
@@ -98,7 +110,7 @@ while read CREATE_HOOK; do
"n" | "N") "n" | "N")
break;; break;;
* ) * )
printf "Would you like to create an alias for user $USER_NAME? [y/n]" printf "Would you like to run it automatically after each Opera update?? [y/n]"
continue;; continue;;
esac esac
done done

View File

@@ -1,2 +1,2 @@
DPkg::Pre-Invoke {"stat -c %Z /usr/lib/x86_64-linux-gnu/opera/opera > /tmp/opera.timestamp";}; DPkg::Pre-Invoke {"stat -c %Z $(readlink -f $(which opera)) > /tmp/opera.timestamp 2> /dev/null || echo 0 > /tmp/opera.timestamp";};
DPkg::Post-Invoke {"if [ `stat -c %Z /usr/lib/x86_64-linux-gnu/opera/opera` -ne `cat /tmp/opera.timestamp` ]; then /root/.scripts/fix-opera.sh; fi; rm /tmp/opera.timestamp";}; DPkg::Post-Invoke {"set NEW_OPERA=`stat -c %Z $(readlink -f $(which opera))` || exit 0; set OLD_OPERA=`cat /tmp/opera.timestamp` || exit 0; if [ "$NEW_OPERA" != "$OLD_OPERA" ]; then /root/.scripts/fix-opera.sh; fi; rm -f /tmp/opera.timestamp";};

1
scripts/fix-opera.action Normal file
View File

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

View File

@@ -10,6 +10,7 @@ Target = opera
Description = Fix video playback in Opera browser Description = Fix video playback in Opera browser
When = PostTransaction When = PostTransaction
Depends = bash Depends = bash
Depends = wget Depends = curl
Depends = unzip Depends = unzip
Depends = jq
Exec = /root/.scripts/fix-opera.sh Exec = /root/.scripts/fix-opera.sh

View File

@@ -15,32 +15,46 @@ if ! which unzip > /dev/null; then
exit 1 exit 1
fi fi
if ! which wget > /dev/null; then if ! which curl > /dev/null; then
printf '\033[1mwget\033[0m package must be installed to run this script\n' printf '\033[1mcurl\033[0m package must be installed to run this script\n'
exit 1 exit 1
fi fi
if ! which jq > /dev/null; then
printf '\033[1mjq\033[0m package must be installed to run this script\n'
exit 1
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 FIX_DIR='/tmp/opera-fix'
readonly FFMPEG_SRC_MAIN='https://api.github.com/repos/iteufel/nwjs-ffmpeg-prebuilt/releases' readonly FFMPEG_SRC_MAIN='https://api.github.com/repos/Ld-Hagen/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'
readonly OPERA_DIR=$(dirname $(readlink -f $(which opera))) OPERA_VERSIONS=()
readonly OPERA_LIB_DIR="$OPERA_DIR/lib_extra"
readonly OPERA_WIDEVINE_DIR="$OPERA_LIB_DIR/WidevineCdm" if [ -x "$(command -v opera)" ]; then
readonly OPERA_WIDEVINE_SO_DIR="$OPERA_WIDEVINE_DIR/_platform_specific/linux_x64" OPERA_VERSIONS+=("opera")
readonly OPERA_WIDEVINE_CONFIG="$OPERA_DIR/resources/widevine_config.json" fi
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 -qO - $FFMPEG_SRC_MAIN | grep browser_download_url | cut -d '"' -f 4 | grep linux-x64 | head -n 1) readonly FFMPEG_URL_MAIN=$(curl -sL4 $FFMPEG_SRC_MAIN | jq -rS 'sort_by(.published_at).[-1].assets[0].browser_download_url')
readonly FFMPEG_URL_ALT=$(wget -qO - $FFMPEG_SRC_ALT | grep browser_download_url | cut -d '"' -f 4 | grep linux-x64 | head -n 1) readonly FFMPEG_URL_ALT=$(curl -sL4 $FFMPEG_SRC_ALT | jq -rS 'sort_by(.published_at).[-1].assets[0].browser_download_url')
[[ $(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'
@@ -48,38 +62,71 @@ if [[ -z $FFMPEG_URL ]]; then
fi fi
##Widevine ##Widevine
if $FIX_WIDEVINE; then #if $FIX_WIDEVINE; then
readonly WIDEVINE_LATEST=`wget -qO - $WIDEVINE_VERSIONS | tail -n1` # readonly WIDEVINE_LATEST=`curl -sL4 $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
#Downloading files #Downloading files
printf 'Downloading files...\n' printf 'Downloading files...\n'
mkdir -p "$TEMP_DIR/opera-fix" mkdir -p "$FIX_DIR"
##ffmpeg ##ffmpeg
wget -q --show-progress $FFMPEG_URL -O "$TEMP_DIR/opera-fix/ffmpeg.zip"
curl -L4 --progress-bar $FFMPEG_URL -o "$FIX_DIR/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 -q --show-progress "$WIDEVINE_URL" -O "$TEMP_DIR/opera-fix/widevine.zip" echo "Finding a working Widevine version..."
if [ $? -ne 0 ]; then # Get all versions, newest last
printf 'Failed to download Widevine CDM. Check your internet connection or try later\n' versions=$(curl -sL4 "$WIDEVINE_VERSIONS")
# Loop through in reverse order (newest first)
for ver in $(echo "$versions" | tac); do
test_url="https://dl.google.com/widevine-cdm/${ver}-linux-x64.zip"
# Check if the URL exists (no 404)
if curl --progress-bar --fail "$test_url" -o "$FIX_DIR/widevine.zip"; then
WIDEVINE_LATEST="$ver"
WIDEVINE_URL="$test_url"
echo -e "Trying Widevine version $WIDEVINE_LATEST from $WIDEVINE_URL\n"
break
else
echo "Widevine version $ver not available, trying older..."
fi
done
if [[ -z "$WIDEVINE_URL" ]]; then
echo "Failed to find a working Widevine version. Exiting..."
exit 1 exit 1
fi fi
#readonly WIDEVINE_LATEST
#readonly WIDEVINE_URL
fi fi
#Extracting files #Extracting files
printf 'Extracting files...\n' printf 'Extracting files...\n'
##ffmpeg ##ffmpeg
unzip -o "$TEMP_DIR/opera-fix/ffmpeg.zip" -d $TEMP_DIR/opera-fix > /dev/null unzip -o "$FIX_DIR/ffmpeg.zip" -d $FIX_DIR > /dev/null
##Widevine ##Widevine
if $FIX_WIDEVINE; then if $FIX_WIDEVINE; then
unzip -o "$TEMP_DIR/opera-fix/widevine.zip" -d $TEMP_DIR/opera-fix > /dev/null echo "unzip -o \"$FIX_DIR/widevine.zip\" -d $FIX_DIR"
unzip -o "$FIX_DIR/widevine.zip" -d $FIX_DIR > /dev/null
fi fi
for opera in ${OPERA_VERSIONS[@]}; do
echo "Doing $opera"
EXECUTABLE=$(command -v "$opera")
if [[ "$ARCH_SYSTEM" == true ]]; then
OPERA_DIR=$(dirname $(cat $EXECUTABLE | grep exec | cut -d ' ' -f 2))
else
OPERA_DIR=$(dirname $(readlink -f $EXECUTABLE))
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 #Removing old libraries and preparing directories
printf 'Removing old libraries & making directories...\n' printf 'Removing old libraries & making directories...\n'
##ffmpeg ##ffmpeg
@@ -92,19 +139,20 @@ if $FIX_WIDEVINE; then
fi fi
#Moving libraries to its place #Moving libraries to its place
printf 'Moving libraries to its place...\n' printf 'Moving libraries to their places...\n'
##ffmpeg ##ffmpeg
mv -f "$TEMP_DIR/opera-fix/$FFMPEG_SO_NAME" "$OPERA_LIB_DIR" cp -f "$FIX_DIR/$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
mv -f "$TEMP_DIR/opera-fix/$WIDEVINE_SO_NAME" "$OPERA_WIDEVINE_SO_DIR" cp -f "$FIX_DIR/$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"
mv -f "$TEMP_DIR/opera-fix/$WIDEVINE_MANIFEST_NAME" "$OPERA_WIDEVINE_DIR" cp -f "$FIX_DIR/$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 temprary files #Removing temporary files
printf 'Removing temprary files...\n' printf 'Removing temporary files...\n'
rm -rf "$TEMP_DIR/opera-fix" rm -rf "$FIX_DIR"

11
uninstall.sh Normal file
View File

@@ -0,0 +1,11 @@
#!/bin/bash
readonly INSTALL_PATH="/root/.scripts"
readonly USER_NAME="$(logname)"
readonly USER_HOME=$(sudo -u $USER_NAME sh -c 'echo $HOME')
rm /etc/apt/apt.conf.d/99fix-opera
rm /usr/share/libalpm/hooks/fix-opera.hook
rm /etc/dnf/plugins/post-transaction-actions.d/fix-opera.action
sed -i '/alias fix-opera/d' $USER_HOME/.bashrc
rm -rf $INSTALL_PATH