Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
357 views
in Technique[技术] by (71.8m points)

installation - Unix Installer can't find path to file even though I'm entering the exact path

I'm trying to modify an existing script that updates Flash but the installer will not work.

I keep getting the following error.

installer: Error the package path specified was invalid: '/Volumes/Flash Player/Install Adobe Flash Player.app/Contents/MacOS/Adobe Flash Player Install Manager'.

It also does not work if I modify it to say include.pkg at the end of the filepath.

Here is the rest of the script:

#!/bin/sh
# Script to download and install Flash Player.
# Only works on Intel systems.
#

dmgfile="flash.dmg"
volname="Flash"
logfile="FlashUpdateScript.log"
echo "Updating Flash player…"
# Are we running on Intel?
if [ '`/usr/bin/uname -p`'="i386" -o '`/usr/bin/uname -p`'="x86_64" ]; then
    # Get the latest version of Flash Player available from Adobe's About Flash page.
    latestver=`/usr/bin/curl -s http://www.adobe.com/software/flash/about/ | sed -n '/Safari/,/</tr/s/[^>]*>([0-9].*)<.*/1/p'`
    # Get the version number of the currently-installed Flash Player, if any.
    if [ -e "/Library/Internet Plug-Ins/Flash Player.plugin" ]; then
    currentinstalledver=`/usr/bin/defaults read /Library/Internet Plug-Ins/Flash Player.plugin/Contents/version CFBundleShortVersionString`
    else
    currentinstalledver="none"
    fi
    echo "Installed version:                 $currentinstalledver"
    echo "Currently last version to install: $latestver"
# Compare the two versions, if they are different of Flash is not present then download and install the new version.
if [ "${currentinstalledver}" != "${latestver}" ]; then
    echo "UPDATING…"
    /bin/echo "`date`: Current Flash version: ${currentinstalledver}" >> ${logfile}
    /bin/echo "`date`: Available Flash version: ${latestver}" >> ${logfile}
    /bin/echo "`date`: Downloading newer version." >> ${logfile}
    /usr/bin/curl http://fpdownload.macromedia.com/pub/flashplayer/latest/help/install_flash_player_osx.dmg -o flash.dmg
    /bin/echo "`date`: Mounting installer disk image." >> ${logfile}
    /usr/bin/hdiutil detach $(/bin/df | /usr/bin/grep Flash | awk '{print $1}') -quiet
    /usr/bin/hdiutil attach flash.dmg -nobrowse -quiet
    /bin/echo "`date`: Installing..." >> ${logfile}
    /usr/sbin/installer -pkg /Volumes/Flash Player/Install Adobe Flash Player.app/Contents/MacOS/Adobe Flash Player Install Manager -target /
    /bin/sleep 10
    /bin/echo "`date`: Unmounting installer disk image." >> ${logfile}
    /usr/bin/hdiutil detach $(/bin/df | /usr/bin/grep ${volname} | awk '{print $1}') -quiet
    /bin/sleep 10
    /bin/echo "`date`: Deleting disk image." >> ${logfile}
    /bin/rm ${dmgfile}
    newlyinstalledver=`/usr/bin/defaults read /Library/Internet Plug-Ins/Flash Player.plugin/Contents/version CFBundleShortVersionString`
        if [ "${latestver}" = "${newlyinstalledver}" ]; then
            /bin/echo "`date`: SUCCESS: Flash has been updated to version ${newlyinstalledver}" >> ${logfile}
            echo "SUCCESS: Flash has been updated to version ${newlyinstalledver}"
        else
            /bin/echo "`date`: ERROR: Flash update unsuccessful, version remains at ${currentinstalledver}." >> ${logfile}
            /bin/echo "--" >> ${logfile}
            echo "ERROR: Flash update unsuccessful, version remains at ${currentinstalledver}."
        fi
    # If Flash is up to date already, just log it and exit.       
    else
        /bin/echo "`date`: Flash is already up to date, running ${currentinstalledver}." >> ${logfile}
        /bin/echo "--" >> ${logfile}
        echo "Flash is already up to date, running ${currentinstalledver}."
    fi
else
/bin/echo "`date`: ERROR: This script is for Intel Macs only." >> ${logfile}
echo "ERROR: This script is for Intel Macs only."
fi
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You need to confirm that each segment of the path has permissions that would allow you to write to that directory and any below it. Save the following script into a directory in your PATH (/usr/local/bin would be appropriate) OR save it into the /tmp dir and use it with a full path.

cat pathChecker.sh    
#!/bin/bash

path2chk="${@?usage:${0##*/} /path/to/check}"
if ! [[ -d "${path2chk}" ]] ; then
   echo "no directory access to ${path2chk}"
   echo "checking all elements anyway"
fi

echo "${path2chk}"
| sed 's///
/g' 
| while read pathElem ; do
    testPath="${testPath+${testPath}/}${pathElem}"
    #dbg echo "ls -ld "$testPath""
    ls -ld "$testPath"
done


chmod +x pathChecker.sh
pathChecker.sh '/Volumes/Flash Player/Install Adobe Flash Player.app/Contents/MacOS/Adobe Flash Player Install Manager'

Should show listings like

drwxr-x-r-x ..... /Volumes
drwxr------ ..... /Volumes/Flash Player   # bzt!
. . . .

Edit Also see a more generic explanation of the problem here:

How to solve Insecure world writable dir /usr in PATH,mode 040777 warning on Ruby?

IHTH


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...