Skip to content

V0.4 GPhoto2 Installation

FormerLurker edited this page Apr 27, 2021 · 3 revisions

There are a few ways to install GPhoto2, but I recommend using a script I found here, then modified to work with newer versions of OctoPi. It allows you to install the latest development/stable version of the software, and takes care of uninstalling any old versions. It's a great script, and I will outline how to use it below.

Installing With The Updater Script

This is the recommended method. If you just can't bring yourself to install with the script, try the V0.4---GPhoto2-Installation below.

Step 1 - Update your Raspberry Pi

It is extremely important that you have the latest firmware and packages before attempting to use a DSLR. Follow this guide on the raspberrypi.org site for instructions on how to update your packages and distribution.

Step 2 - Create the GPhoto2 Installer Script

Now we need to create the installation script. I put my script in /home/pi/scripts like so:

cd /home/pi/scripts

nano install-gphoto2.sh

This will open the nano editor. Copy the following script and paste it into the nano editor by pressing the right mouse key.

IMPORTANT NOTE: The very first line #!/bin/sh is important, and must be included.

#!/bin/bash

# Gphoto2 compiler and installer script
#
# This script is specifically created for Raspbian http://www.raspbian.org
# and Raspberry Pi http://www.raspberrypi.org but should work over any
# Debian-based distribution

# Created and mantained by Gonzalo Cao Cabeza de Vaca
# Please send any feedback or comments to gonzalo.cao(at)gmail.com
# Updated for gPhoto2 2.5.1.1 by Peter Hinson
# Updated for gPhoto2 2.5.2 by Dmitri Popov
# Updated for gphoto2 2.5.5 by Mihai Doarna
# Updated for gphoto2 2.5.6 by Mathias Peter
# Updated for gphoto2 2.5.7 by Sijawusz Pur Rahnama
# Updated for gphoto2 2.5.8 by scribblemaniac
# Updated for gphoto2 2.5.9 at GitHub by Gonzalo Cao
# Updated for last development release at GitHub by Gonzalo Cao
# Updated for gphoto2 2.5.10 by Gonzalo Cao

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

latest_stable_libgphoto_version=2_5_19
latest_stable_gphoto_version=2_5_17
display_version=$(echo "libgphoto ${latest_stable_libgphoto_version}; gphoto ${latest_stable_gphoto_version}" | tr '_' '.')
branch_libgphoto=''
branch_gphoto=''
cores=$(nproc)

if [ "$(whoami)" != "root" ]; then
	echo "Sorry, this script must be executed with sudo or as root"
	exit 1
fi

usage()
{
cat << EOF
usage: sudo $0 [-h|--help|-s|--stable|-d|--development]
-h|--help: this help message
-s|--stable: select the stable version: ${display_version}
-d|--development: select the latest develoment version
Note: An interactive menu is displayed if no parameter is given.
EOF
exit 1
}

parse_options()
{
if ! all_options=$(getopt -o hds -l help,development,stable -- "$@")
then
    usage
fi
eval set -- "$all_options"

while true
do
    case "$1" in
        -h|--help)          usage;;
        -d|--development)   shift 1;;
        -s|--stable)        branch_libgphoto="--branch libgphoto2-${latest_stable_libgphoto_version}-release"
                            branch_gphoto="--branch gphoto2-${latest_stable_gphoto_version}-release"
                            shift 1;;
        --)                 break ;;
    esac
done
}

menu()
{
PS3='Please enter your choice: '
options=("Install last development version"
         "Install last stable release (${display_version})"
				 "Quit")

select opt in "${options[@]}"
do
    case $opt in
        "Install last development version")
						echo
            echo "\"Install last development version\" selected"
						echo
						break
            ;;
        "Install last stable release (${display_version})")
						echo
            echo "\"Install last stable release (${display_version})\" selected"
						echo
						branch_libgphoto="--branch libgphoto2-${latest_stable_libgphoto_version}-release"
						branch_gphoto="--branch gphoto2-${latest_stable_gphoto_version}-release"
						break
            ;;
        "Quit")
            exit 0
            ;;
        *) echo invalid option;;
    esac
done
}

# Display the menu if the script was called without any parameters
# else try to parse the options
if [ $# -eq 0 ]
then
    menu
else
    parse_options "$@"
fi

echo
echo "----------------"
echo "Updating sources"
echo "----------------"
echo

apt-get update -qq

echo
echo "-----------------------------------------"
echo "Removing gphoto2 and libgphoto2 if exists"
echo "-----------------------------------------"
echo

apt-get remove -y gphoto2 libgphoto2*

echo
echo "-----------------------"
echo "Installing dependencies"
echo "-----------------------"
echo

apt-get install -y build-essential libltdl-dev libusb-1-dev libexif-dev libpopt-dev libudev-dev pkg-config git automake autoconf autopoint gettext libtool wget

echo
echo "-------------------------"
echo "Creating temporary folder"
echo "-------------------------"
echo

mkdir gphoto2-temp-folder
cd gphoto2-temp-folder

echo "gphoto2-temp-folder created"


echo
echo "----------------------"
echo "Downloading libgphoto2"
echo "----------------------"
echo

if (/usr/bin/git clone $branch_libgphoto https://github.com/gphoto/libgphoto2.git)
    then
        cd libgphoto2/
	else
		echo "Unable to get libgphoto2"
		echo "Exiting..."
		exit 1
fi


echo
echo "-----------------------------------"
echo "Compiling and installing libgphoto2"
echo "-----------------------------------"
echo

autoreconf --install --symlink
./configure
make -j "$cores"
make install
cd ..

echo
echo "-------------------"
echo "Downloading gphoto2"
echo "-------------------"
echo

if (/usr/bin/git clone  $branch_gphoto https://github.com/gphoto/gphoto2.git)
  then
        cd gphoto2
	else
		echo "Unable to get gphoto2"
		echo "Exiting..."
		exit 1
fi


echo
echo "--------------------------------"
echo "Compiling and installing gphoto2"
echo "--------------------------------"
echo

autoreconf --install --symlink
./configure
make -j "$cores"
make install
cd ..

echo
echo "-----------------"
echo "Linking libraries"
echo "-----------------"
echo

ldconfig

echo
echo "---------------------------------------------------------------------------------"
echo "Generating udev rules, see http://www.gphoto.org/doc/manual/permissions-usb.html"
echo "---------------------------------------------------------------------------------"
echo

udev_version=$(udevadm --version)

if   [ "$udev_version" -ge "201" ]
then
  udev_rules=201
elif [ "$udev_version" -ge "175" ]
then
  udev_rules=175
elif [ "$udev_version" -ge "136" ]
then
  udev_rules=136
else
  udev_rules=0.98
fi

/usr/local/lib/libgphoto2/print-camera-list udev-rules version $udev_rules group plugdev mode 0660 > /etc/udev/rules.d/90-libgphoto2.rules

if   [ "$udev_rules" = "201" ]
then
  echo
  echo "------------------------------------------------------------------------"
  echo "Generating hwdb file in /etc/udev/hwdb.d/20-gphoto.hwdb. Ignore the NOTE"
  echo "------------------------------------------------------------------------"
  echo
  /usr/local/lib/libgphoto2/print-camera-list hwdb > /etc/udev/hwdb.d/20-gphoto.hwdb
fi


echo
echo "-------------------"
echo "Removing temp files"
echo "-------------------"
echo

cd ..
rm -r gphoto2-temp-folder



echo
echo "--------------------"
echo "Finished!! Enjoy it!"
echo "--------------------"
echo

gphoto2 --version

That's a long script, but it does a lot of heavy lifing. Now we need to save the script. Press ctrl + o and then Enter to save. Then press ctrl + x to exit.

Next, we need to add execute permission to the script with the following command

chmod +x install-gphoto2.sh

Finally, we can install gphoto2 with the following command:

sudo ./install-gphoto2.sh

You may be prompted to enter your username and password. Do that now.

Next, you will be asked what version you want to install, either the latest development version, or the latest stable version. I recommend starting with the stable version, and if you have issues with gphoto2, try the development version to see if that helps.

Enter 1 to install the latest development version, or 2 to install the latest stable version and press enter to start the installation process.

Installation will take a while, so find something relaxing to do while you wait. It took about 7 minutes to install on my Pi3B+.

Alternative Installation Method

You can also install via apt-get like so:

Use SSH or some other method to open a shell and execute the following command:

sudo apt-get install gphoto2

Note: If you have problems with the above install command you might need to install libgphoto2. Please let me know if you need to install it by running this command and then retrying the gphoto2 install:

sudo apt-get install libgphoto2-dev

Step 3 - Configure /etc/sudoers file

The next step is to add gphoto2 to the list of programs that can run without sudo. Otherwise you'll need to use sudo and enter your password to acquire an image. Type the following command to edit the sudoers file:

sudo visudo

That will open an editor that should look something like this if you are using octopi:

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

add the following lines to the VERY END of the file:

# allow 'sudo gphoto2' to run without supplying a password
pi ALL = (root) NOPASSWD: /usr/bin/gphoto2

Remember that you can copy and paste into nano by moving the cursor to the position you want to insert the rule (the very bottom in this case) and right clicking once to paste.

Now press ctrl+O (o as in output) to save your changes, and then press ctrl+x to exit.


Important Note: If you've installed gphoto2 a different way than described above, for example with the gphoto2 updater script, gphoto2 may not be in the /usr/bin/ directory. Use the following command to find out where gphoto2 was installed:

whereis gphoto2

For example if whereis returns the following

gphoto2: /usr/local/bin/gphoto2

the last line of your sudoers file should look like this:

pi ALL = (root) NOPASSWD: /usr/local/bin/gphoto2

Next, we need to reboot the pi so that the sudoers file change takes effect. You can do that by entering the following command:

sudo reboot

You'll now need to wait for your pi to reboot, then re-connect via ssh.

Notes about running gphoto2 with sudo

If for some reason you absolutely cannot add gphoto2 to the /etc/sudoers file, you can replace calls to gphoto2 with calls that include the password. For example, you could replace this line of the take-snapshot.sh script:

sudo gphoto2 --auto-detect --capture-image-and-download --filename "${SNAPSHOT_FULL_PATH}"

with this one:

echo "PUT_YOUR_PASSWORD_HERE" | sudo -S gphoto2 --auto-detect --capture-image-and-download --filename "${SNAPSHOT_FULL_PATH}"

to avoid updating your sudoers file. Enter your password where it says PUT_YOUR_PASSWORD_HERE, but make sure you leave both quotation marks!

This procedure is absolutely not recommended, ESPECIALLY if your pi (or pc) is accessible via the internet! I may even remove these instructions at some point, but for now I'm leaving them here because several users have requested this.

All Done!

Congratulations, GPhoto2 is now installed! You can use the updater script at any time to install new releases or development versions of GPhoto2.

Clone this wiki locally