#!/usr/bin/env bash # ------------------------------------------------------------- # Handle installation, update or removal of updated # gphoto libraries to avoid corrupted DCIM with latest GoPro # # Revision history : # 20/06/2016, V1.0 - Creation by N. Bernaerts # 20/07/2017, V2.0 - Complete rework to become update proof # 16/02/2018, V2.1 - Change to lauchpad Ubuntu repository # ------------------------------------------------------------- # if no argument, display help if [ $# -eq 0 ] then echo "Tool to install libgphoto2 2.5.10 libraries to correct latest GoPro DCIM bug under Xenial." echo "Parameters are :" echo " --install Install and declare the updated library" echo " --remove Back to original library" echo " --update Re-declare updated libraries" exit fi # loop to retrieve arguments while test $# -gt 0 do case "$1" in "--install") MODE="install"; shift; ;; "--remove") MODE="remove"; shift; ;; "--update") MODE="update"; shift; ;; *) shift; ;; esac done # check --update or --cleanup mode [ "${MODE}" = "" ] && { echo "Please use --install, --remove or --update mode"; exit 1; } # generate temporary file TMP_DEB=$(mktemp -t "XXXXXXXX.deb") # select mode case "${MODE}" in # --------------------------- # Installation mode # --------------------------- "install") # create main directory mkdir --parent /opt/libgphoto2 # libgphoto2-port12 : unpack echo "Install libgphoto2-port12" wget --quiet -O ${TMP_DEB} "https://launchpad.net/ubuntu/+archive/primary/+files/libgphoto2-port12_2.5.10-3_amd64.deb" dpkg --fsys-tarfile ${TMP_DEB} | tar xf - -C /opt/libgphoto2 # libgphoto2-port12 : declare rm -f /usr/lib/x86_64-linux-gnu/libgphoto2_port.so.12 ln -s /opt/libgphoto2/usr/lib/x86_64-linux-gnu/libgphoto2_port.so.12.0.0 /usr/lib/x86_64-linux-gnu/libgphoto2_port.so.12 rm -Rf /usr/lib/x86_64-linux-gnu/libgphoto2_port/0.12.0 ln -s /opt/libgphoto2/usr/lib/x86_64-linux-gnu/libgphoto2_port/0.12.0 /usr/lib/x86_64-linux-gnu/libgphoto2_port/0.12.0 # libgphoto2 : unpack echo "Install libgphoto2-6" wget --quiet -O ${TMP_DEB} "https://launchpad.net/ubuntu/+archive/primary/+files/libgphoto2-6_2.5.10-3_amd64.deb" dpkg --fsys-tarfile ${TMP_DEB} | tar xf - -C /opt/libgphoto2 # libgphoto2 : declare rm -f /usr/lib/x86_64-linux-gnu/libgphoto2.so.6 ln -s /opt/libgphoto2/usr/lib/x86_64-linux-gnu/libgphoto2.so.6.0.0 /usr/lib/x86_64-linux-gnu/libgphoto2.so.6 rm -Rf /usr/lib/x86_64-linux-gnu/libgphoto2/2.5.10 ln -s /opt/libgphoto2/usr/lib/x86_64-linux-gnu/libgphoto2/2.5.10 /usr/lib/x86_64-linux-gnu/libgphoto2/2.5.10 rm -f /lib/udev/hwdb.d/20-libgphoto2-6.hwdb ln -s /opt/libgphoto2/lib/udev/hwdb.d/20-libgphoto2-6.hwdb /lib/udev/hwdb.d/20-libgphoto2-6.hwdb # download this script (for post install hook) wget --quiet -O /opt/libgphoto2/nautilus-xenial-gopro https://raw.githubusercontent.com/NicolasBernaerts/ubuntu-scripts/master/nautilus/nautilus-xenial-gopro chmod +x /opt/libgphoto2/nautilus-xenial-gopro # apt post install hook : download and declare echo "Install apt post install hook" wget --quiet -O /etc/apt/apt.conf.d/99nautilus-xenial-gopro https://raw.githubusercontent.com/NicolasBernaerts/ubuntu-scripts/master/nautilus/99nautilus-xenial-gopro ;; # --------------------------- # Removal mode # --------------------------- "remove") # remove targeted files and directories echo "Remove links" rm -f /usr/lib/x86_64-linux-gnu/libgphoto2_port.so.12 rm -Rf /usr/lib/x86_64-linux-gnu/libgphoto2_port/0.12.0 rm -f /usr/lib/x86_64-linux-gnu/libgphoto2.so.6 rm -Rf /usr/lib/x86_64-linux-gnu/libgphoto2/2.5.10 rm -f /lib/udev/hwdb.d/20-libgphoto2-6.hwdb # remove apt post install hook rm /etc/apt/apt.conf.d/99nautilus-xenial-gopro # reinstall original packages echo "Reinstall original libgphoto packages" apt-get install --yes --reinstall libgphoto2-6 libgphoto2-port12 # remove /opt/libgphoto2 directory structure rm -Rf /opt/libgphoto2 ;; # --------------------------- # Update mode # --------------------------- "update") # remove original libgphoto2_port and create links echo "Declare libgphoto2_port12" rm -f /usr/lib/x86_64-linux-gnu/libgphoto2_port.so.12 ln -s /opt/libgphoto2/usr/lib/x86_64-linux-gnu/libgphoto2_port.so.12.0.0 /usr/lib/x86_64-linux-gnu/libgphoto2_port.so.12 rm -Rf /usr/lib/x86_64-linux-gnu/libgphoto2_port/0.12.0 ln -s /opt/libgphoto2/usr/lib/x86_64-linux-gnu/libgphoto2_port/0.12.0 /usr/lib/x86_64-linux-gnu/libgphoto2_port/0.12.0 # remove original libgphoto2 and create links echo "Declare libgphoto2-6" rm -f /usr/lib/x86_64-linux-gnu/libgphoto2.so.6 ln -s /opt/libgphoto2/usr/lib/x86_64-linux-gnu/libgphoto2.so.6.0.0 /usr/lib/x86_64-linux-gnu/libgphoto2.so.6 rm -Rf /usr/lib/x86_64-linux-gnu/libgphoto2/2.5.10 ln -s /opt/libgphoto2/usr/lib/x86_64-linux-gnu/libgphoto2/2.5.10 /usr/lib/x86_64-linux-gnu/libgphoto2/2.5.10 rm -f /lib/udev/hwdb.d/20-libgphoto2-6.hwdb ln -s /opt/libgphoto2/lib/udev/hwdb.d/20-libgphoto2-6.hwdb /lib/udev/hwdb.d/20-libgphoto2-6.hwdb ;; *) ;; esac # cleanup temporary file rm -f ${TMP_DEB} # update hardware database udevadm hwdb --update # restart udev service service udev restart