-
Notifications
You must be signed in to change notification settings - Fork 99
V0.4 GPhoto2 Installation
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.
This is the recommended method. If you just can't bring yourself to install with the script, try the V0.4---GPhoto2-Installation below.
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.
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+.
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
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.
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.
Congratulations, GPhoto2 is now installed! You can use the updater script at any time to install new releases or development versions of GPhoto2.
Octolapse is provided without warranties of any kind. By installing Octolapse you agree to accept all liability for any damage caused directly or indirectly by Octolapse.
Use caution and never leave your printer unattended.
If you have a great new guide, see a typo, or have other suggestions for improving the existing documentation, please let me know! You can either submit a feature request or submit a pull request. I would appreciate it greatly!
Consider supporting Octolapse by becoming a Patron, a Github Sponsor, or by sending some coffee/beer money, I would REALLY appreciate it. Almost all of the donations go towards offsetting the cost of development, which are substantial. Plus it always makes my day!
If you cannot afford to leave a tip or just don't want to, that is fine too! Octolapse is free and open source after all. There are other ways you can help ensure that Octolapse continues to be updated and improved:
- Share your Octolapse videos, and be sure to leave a link and explain that the timelapses were captured with Octolapse and OctoPrint (you will be asked how you made the timelapse, so this will also save you some time answering questions). This is not necessary, but it is greatly appreciated.
- Subscribe to my youtube channel.
- Post any bugs you find to the Issues Page. I would like to eliminate as many bugs as possible!
- Participate in the OctoPrint Community Forums, and help all the noobs get OctoPrint and Octolapse working and help expand the hobby. The more people use OctoPrint and Octolapse, the better the software will become!
- If you've created a working and tested printer profile for any printers that aren't in the make/model list, please send it to me! I want to make it as easy as possible for new users to get their printers configured quickly.
- Help me make this documentation better! Octolapse has a LOT of documentation, guides, tips, etc., both here in the Wiki and integrated with the Octolapse plugin. If you find inaccuracies, typos, gaps, or have ideas for improvement, I'd love to hear about them.
- If you have any special talents that could be applied to Octolapse development, like graphic design, video production (think tutorials), programming, etc., maybe you'd like to participate more directly in Octolapse development/documentation?