From 65af833340871f835733cc033005db5154927770 Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Tue, 24 Jan 2017 14:20:27 +0000 Subject: [PATCH 1/1] Import bumblebee_3.2.1-14.debian.tar.xz [dgit import tarball bumblebee 3.2.1-14 bumblebee_3.2.1-14.debian.tar.xz] --- README.Debian | 96 ++++ bumblebee-nvidia.lintian-overrides | 2 + bumblebee-nvidia.postinst.Debian | 19 + bumblebee-nvidia.postinst.Ubuntu | 36 ++ bumblebee-nvidia.postrm.Debian | 13 + bumblebee-nvidia.postrm.Ubuntu | 16 + bumblebee.bumblebeed.init | 156 +++++++ bumblebee.bumblebeed.upstart | 44 ++ bumblebee.conf | 89 ++++ bumblebee.install | 3 + bumblebee.maintscript | 2 + bumblebee.postinst | 79 ++++ bumblebee.postrm | 25 + bumblebee.triggers | 2 + changelog | 172 +++++++ compat | 1 + control | 88 ++++ copyright | 32 ++ patches/fix-device-detection.patch | 15 + patches/fix-typos.patch | 72 +++ patches/ignore-error-on-X-shutdown.patch | 15 + .../ignore-failure-to-set-DRM-interface.patch | 22 + patches/ignore-systemd-logind-noise.patch | 33 ++ patches/libkmod.patch | 434 ++++++++++++++++++ patches/modprobe-r-instead-of-rmmod.patch | 17 + patches/series | 8 + patches/xorg-binary-config.patch | 135 ++++++ rules | 63 +++ source/format | 1 + watch | 2 + 30 files changed, 1692 insertions(+) create mode 100644 README.Debian create mode 100644 bumblebee-nvidia.lintian-overrides create mode 100644 bumblebee-nvidia.postinst.Debian create mode 100644 bumblebee-nvidia.postinst.Ubuntu create mode 100644 bumblebee-nvidia.postrm.Debian create mode 100644 bumblebee-nvidia.postrm.Ubuntu create mode 100644 bumblebee.bumblebeed.init create mode 100644 bumblebee.bumblebeed.upstart create mode 100644 bumblebee.conf create mode 100644 bumblebee.install create mode 100644 bumblebee.maintscript create mode 100644 bumblebee.postinst create mode 100644 bumblebee.postrm create mode 100644 bumblebee.triggers create mode 100644 changelog create mode 100644 compat create mode 100644 control create mode 100644 copyright create mode 100644 patches/fix-device-detection.patch create mode 100644 patches/fix-typos.patch create mode 100644 patches/ignore-error-on-X-shutdown.patch create mode 100644 patches/ignore-failure-to-set-DRM-interface.patch create mode 100644 patches/ignore-systemd-logind-noise.patch create mode 100644 patches/libkmod.patch create mode 100644 patches/modprobe-r-instead-of-rmmod.patch create mode 100644 patches/series create mode 100644 patches/xorg-binary-config.patch create mode 100755 rules create mode 100644 source/format create mode 100644 watch diff --git a/README.Debian b/README.Debian new file mode 100644 index 0000000..32bd53b --- /dev/null +++ b/README.Debian @@ -0,0 +1,96 @@ +bumblebee for Debian/Ubuntu +--------------------------- + +Post-installation instructions: +------------------------------- + +You must add your user to the bumblebee group in order to use optirun or +primusrun, i.e. + + $ sudo adduser $USER bumblebee + +where $USER corresponds to your username. Don't forget to log out and log back +in for this to take effect. + +If you have sudo configured for your current user, i.e. your user is a member +of the sudo group, this step is not needed (the bumblebee package postinst +script takes care of adding sudo users to the bumblebee group automatically). +To clarify, sudo is not needed to use bumblebee; it simply makes adding your +user to the bumblebee group unnecessary. + +This step is unnecessary for Ubuntu users since sudo comes pre-configured and +ready to be used by default (for user accounts created during install). + +To test whether bumblebee has been configured correctly, try running the +glxgears demo (you must first install mesa-utils): + + $ optirun glxgears -info + + +Primus vs. VirtualGL: +--------------------- + +Bumblebee in Debian and Ubuntu defaults to using the primus backend, because +virtualgl has not yet been packaged for Debian/Ubuntu proper. For Ubuntu users, +it is however easy to switch to using virtualgl by using upstream's PPAs. +Follow the instructions at: +https://launchpad.net/~bumblebee/+archive/stable + + +Common issues: +-------------- + +- If optirun returns the following error: +[ERROR]Cannot access secondary GPU - error: Could not load GPU driver + +You must edit /etc/bumblebee/bumblebee.conf using your preferred editor as +root, and change "KernelDriver=nvidia" to "KernelDriver=nvidia-current", +then restart the bumblebee daemon, i.e. + + $ sudo service bumblebeed restart + +(Refer to https://bugs.debian.org/717687 for a brief explanation.) + +- If optirun returns the following error: +[ERROR]Cannot access secondary GPU - error: [XORG] (EE) No devices detected + +You may have to set the BusID manually, in /etc/bumblebee/xorg.conf.nvidia. +To get the BusID, run lspci | egrep 'VGA|3D' in a terminal. Refer to the +comments in that file for further instructions. + +- If optirun returns the following error: +[ERROR]Cannot access secondary GPU - error: [XORG] (EE) /dev/dri/card0: +failed to set DRM interface version 1.4: Permission denied + +You have to append the following section to /etc/bumblebee/xorg.conf.nvidia: + +Section "Screen" + Identifier "Default Screen" + Device "DiscreteNvidia" +EndSection + +Also refer to https://bugs.debian.org/756522 for a brief explanation. + +- If optirun errors out and dmesg reports that the GPU has "fallen off the bus" +or "nvidia_frontend_open: minor 0, module->open() failed, error -5" on Linux +>= 3.10 and < 3.19, either stick with an older kernel version (<= 3.9) or +upgrade to > 3.19, or add rcutree.rcu_idle_gp_delay=1 to your grub command line +(in /etc/default/grub, then run update-grub and reboot) as a workaround. + +This is a known problem upstream and suspected to be an issue with the +proprietary nvidia driver. Refer to Bumblebee github issue #455 and #615, +https://github.com/Bumblebee-Project/Bumblebee/issues/455 and +https://github.com/Bumblebee-Project/Bumblebee/issues/615. + +A more up-to-date list of common issues can be found on the Debian/Ubuntu wiki +pages relating to bumblebee, i.e.: + +https://wiki.debian.org/Bumblebee +https://wiki.ubuntu.com/Bumblebee + +A more comprehensive list is available upstream: + +https://github.com/Bumblebee-Project/Bumblebee/wiki/Troubleshooting + + + -- Vincent Cheng Sat, 25 Oct 2014 10:13:42 -0700 diff --git a/bumblebee-nvidia.lintian-overrides b/bumblebee-nvidia.lintian-overrides new file mode 100644 index 0000000..d01c112 --- /dev/null +++ b/bumblebee-nvidia.lintian-overrides @@ -0,0 +1,2 @@ +bumblebee-nvidia: postinst-has-useless-call-to-ldconfig +bumblebee-nvidia: postrm-has-useless-call-to-ldconfig diff --git a/bumblebee-nvidia.postinst.Debian b/bumblebee-nvidia.postinst.Debian new file mode 100644 index 0000000..736fd81 --- /dev/null +++ b/bumblebee-nvidia.postinst.Debian @@ -0,0 +1,19 @@ +#!/bin/sh +set -e + +case "$1" in + configure) + # Repair GL on the intel display + update-alternatives --force --set \ + glx /usr/lib/nvidia/bumblebee || true + dpkg-trigger register-glx-alternative-nvidia + + # this has a chance of crashing the machine with mainline kernels... + grep -q '^nouveau ' /proc/modules && rmmod nouveau || true + if [ -e "/etc/init/bumblebeed.conf" ]; then + invoke-rc.d bumblebeed restart || true + fi + ;; +esac + +#DEBHELPER# diff --git a/bumblebee-nvidia.postinst.Ubuntu b/bumblebee-nvidia.postinst.Ubuntu new file mode 100644 index 0000000..f1279b5 --- /dev/null +++ b/bumblebee-nvidia.postinst.Ubuntu @@ -0,0 +1,36 @@ +#!/bin/sh +set -e + +xconffile=/etc/bumblebee/xorg.conf.nvidia + +case "$1" in + configure) + # Repair GL on the intel display + for arch in x86_64-linux-gnu i386-linux-gnu; do + update-alternatives --force --set \ + ${arch}_gl_conf /usr/lib/$arch/mesa/ld.so.conf 2>/dev/null || true + done + + # assume first device to be discrete in nvidia/nvidia + busid=$(lspci -d10de: -nn | grep '\[030[02]\]' | cut -d' ' -f1 | tr . : | head -1) + + if [ -z "$busid" ]; then + echo "No Nvidia card found. If you really have an Optimus system," + echo "try selecting the Optimus setup in BIOS and run:" + echo "sudo dpkg-reconfigure bumblebee-nvidia" + else + echo "Selecting $busid as discrete nvidia card. If this is incorrect," + echo "edit the BusID line in $xconffile" + sed -i $xconffile -r -e "s/^([\t ]*)#([\t ]*BusID[\t ]*)\"[^\"]*\"$/\\1 \\2\"PCI\:$busid\"/" + fi + + ldconfig + # this has a chance of crashing the machine with mainline kernels... + grep -q '^nouveau ' /proc/modules && rmmod nouveau || true + if [ -e "/etc/init/bumblebeed.conf" ]; then + invoke-rc.d bumblebeed restart || true + fi + ;; +esac + +#DEBHELPER# diff --git a/bumblebee-nvidia.postrm.Debian b/bumblebee-nvidia.postrm.Debian new file mode 100644 index 0000000..ce08c6f --- /dev/null +++ b/bumblebee-nvidia.postrm.Debian @@ -0,0 +1,13 @@ +#!/bin/sh +set -e + +case "$1" in + remove|abort-install) + # Restore the alternatives in case bumblebee is installed on a + # non-Optimus system that requires the nvidia driver + update-alternatives --force --auto glx 2>/dev/null || true + dpkg-trigger register-glx-alternative-nvidia + ;; +esac + +#DEBHELPER# diff --git a/bumblebee-nvidia.postrm.Ubuntu b/bumblebee-nvidia.postrm.Ubuntu new file mode 100644 index 0000000..2a88c43 --- /dev/null +++ b/bumblebee-nvidia.postrm.Ubuntu @@ -0,0 +1,16 @@ +#!/bin/sh +set -e + +case "$1" in + remove|abort-install) + # Restore the alternatives in case bumblebee is installed on a + # non-Optimus system that requires the nvidia driver + for arch in x86_64-linux-gnu i386-linux-gnu; do + update-alternatives --force --auto ${arch}_gl_conf 2>/dev/null || true + done + + ldconfig + ;; +esac + +#DEBHELPER# diff --git a/bumblebee.bumblebeed.init b/bumblebee.bumblebeed.init new file mode 100644 index 0000000..a29ca39 --- /dev/null +++ b/bumblebee.bumblebeed.init @@ -0,0 +1,156 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: bumblebeed +# Required-Start: $local_fs $remote_fs $syslog +# Required-Stop: $local_fs $remote_fs $syslog +# Should-Start: kdm gdm lightdm nvidia-kernel +# Should-Stop: kdm gdm lightdm nvidia-kernel +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Bumblebee supporting NVIDIA Optimus cards +# Description: Daemon responsible for handling power management for +# NVIDIA Optimus cards and handling optirun requests which +# allows the discrete card to be used +### END INIT INFO + +# Author: Aron Xu + +# PATH should only include /usr/* if it runs after the mountnfs.sh script +PATH=/sbin:/usr/sbin:/bin:/usr/bin +DESC=bumblebeed # Introduce a short description here +NAME=bumblebeed # Introduce the short server's name here +DAEMON=/usr/sbin/bumblebeed # Introduce the server's location here +DAEMON_ARGS="--daemon" # Arguments to run the daemon with +PIDFILE=/var/run/$NAME.pid +SCRIPTNAME=/etc/init.d/$NAME + +# Exit if the package is not installed +[ -x $DAEMON ] || exit 0 + +# Read configuration variable file if it is present +[ -r /etc/default/$NAME ] && . /etc/default/$NAME + +# Load the VERBOSE setting and other rcS variables +. /lib/init/vars.sh + +# Define LSB log_* functions. +# Depend on lsb-base (>= 3.0-6) to ensure that this file is present. +. /lib/lsb/init-functions + +# +# Function that starts the daemon/service +# +do_start() +{ + # Return + # 0 if daemon has been started + # 1 if daemon was already running + # 2 if daemon could not be started + start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ + || return 1 + start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ + $DAEMON_ARGS \ + || return 2 + # Add code here, if necessary, that waits for the process to be ready + # to handle requests from services started subsequently which depend + # on this one. As a last resort, sleep for some time. +} + +# +# Function that stops the daemon/service +# +do_stop() +{ + # Return + # 0 if daemon has been stopped + # 1 if daemon was already stopped + # 2 if daemon could not be stopped + # other if a failure occurred + start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME + RETVAL="$?" + [ "$RETVAL" = 2 ] && return 2 + # Wait for children to finish too if this is a daemon that forks + # and if the daemon is only ever run from this initscript. + # If the above conditions are not satisfied then add some other code + # that waits for the process to drop all resources that could be + # needed by services started subsequently. A last resort is to + # sleep for some time. + start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON + [ "$?" = 2 ] && return 2 + # Many daemons don't delete their pidfiles when they exit. + rm -f $PIDFILE + return "$RETVAL" +} + +# +# Function that sends a SIGHUP to the daemon/service +# +do_reload() { + # + # If the daemon can reload its configuration without + # restarting (for example, when it is sent a SIGHUP), + # then implement that here. + # + start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME + return 0 +} + +case "$1" in + start) + [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME" + do_start + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + stop) + [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" + do_stop + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + status) + status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? + ;; + #reload|force-reload) + # + # If do_reload() is not implemented then leave this commented out + # and leave 'force-reload' as an alias for 'restart'. + # + #log_daemon_msg "Reloading $DESC" "$NAME" + #do_reload + #log_end_msg $? + #;; + restart|force-reload) + # + # If the "reload" option is implemented then remove the + # 'force-reload' alias + # + log_daemon_msg "Restarting $DESC" "$NAME" + do_stop + case "$?" in + 0|1) + do_start + case "$?" in + 0) log_end_msg 0 ;; + 1) log_end_msg 1 ;; # Old process is still running + *) log_end_msg 1 ;; # Failed to start + esac + ;; + *) + # Failed to stop + log_end_msg 1 + ;; + esac + ;; + *) + #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 + echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 + exit 3 + ;; +esac + +: diff --git a/bumblebee.bumblebeed.upstart b/bumblebee.bumblebeed.upstart new file mode 100644 index 0000000..3caf1ce --- /dev/null +++ b/bumblebee.bumblebeed.upstart @@ -0,0 +1,44 @@ +# Upstart job for Bumblebee daemon + +description "Bumblebee supporting NVIDIA Optimus cards" +author "Lekensteyn " + +# XXX: do we need to stop before / after a graphical DE like kdm? +start on (login-session-start or desktop-session-start) +stop on (desktop-shutdown) + +# restart in case it crashed for some reason +respawn + +script + libopts= + + # When the user installs a nvidia package that is unknown, + # ignore the paths in bumblebee.conf and use detected ones + if ! driver=$(grep -Po '^Driver=\K.*' /etc/bumblebee/bumblebee.conf) \ + || [ -z "$driver" ] || [ "$driver" = "nvidia" ]; then + # find LibraryPath setting of nvidia section + libpath=$(awk -F[=:] '/^\[driver-nvidia\]/{d=1}/^LibraryPath=/{if(d){print $2;exit}}' \ + /etc/bumblebee/bumblebee.conf) || true + + # pick the first available nvidia installation (not necessary + # the latest, e.g. nvidia-current over nvidia-experimental-310) + pkgname=$(ls -1d /usr/lib/nvidia*/libGL.so | cut -d/ -f4 | head -1) || true + + # When the default library path does not contain nvidia drivers, + # it is possibly not installed. If no driver is installed (no + # /usr/lib/nvidia-*), assume that the auto-detection will use + # nouveau instead and do not override paths. + if [ ! -e "$libpath/libGL.so" -a -n "$pkgname" ] && \ + modprobe -nq "$pkgname"; then + # assume nvidia driver even if nouveau is already loaded + libopts="$libopts --driver nvidia" + libopts="$libopts --driver-module $pkgname" + libopts="$libopts --ldpath /usr/lib/$pkgname:/usr/lib32/$pkgname" + libopts="$libopts --module-path /usr/lib/$pkgname/xorg,/usr/lib/xorg/modules" + fi + fi + + # don't use --daemon as Upstart gets confused by that. + exec '/usr/sbin/bumblebeed' --use-syslog $libopts +end script diff --git a/bumblebee.conf b/bumblebee.conf new file mode 100644 index 0000000..4c2a0b6 --- /dev/null +++ b/bumblebee.conf @@ -0,0 +1,89 @@ +# This file is installed by bumblebee, do NOT edit! +# to be used by kmod / module-init-tools, and installed in /etc/modprobe.d/ +# or equivalent + +# do not automatically load nouveau as it may prevent nvidia from loading +blacklist nouveau +# do not automatically load nvidia as it's unloaded anyway when bumblebeed +# starts and may fail bumblebeed to disable the card in a race condition. +# Debian +blacklist nvidia +blacklist nvidia-current +blacklist nvidia-legacy-304xx +blacklist nvidia-legacy-340xx +# Ubuntu +blacklist nvidia +blacklist nvidia-current +blacklist nvidia-current-updates +# 304 +blacklist nvidia-304 +blacklist nvidia-304-updates +blacklist nvidia-experimental-304 +# 310 +blacklist nvidia-310 +blacklist nvidia-310-updates +blacklist nvidia-experimental-310 +# 313 +blacklist nvidia-313 +blacklist nvidia-313-updates +blacklist nvidia-experimental-313 +# 319 +blacklist nvidia-319 +blacklist nvidia-319-updates +blacklist nvidia-experimental-319 +# 325 +blacklist nvidia-325 +blacklist nvidia-325-updates +blacklist nvidia-experimental-325 +# 331 +blacklist nvidia-331 +blacklist nvidia-331-updates +blacklist nvidia-experimental-331 +# 334 +blacklist nvidia-334 +blacklist nvidia-334-updates +blacklist nvidia-experimental-334 +# 337 +blacklist nvidia-337 +blacklist nvidia-337-updates +blacklist nvidia-experimental-337 +# 340 +blacklist nvidia-340 +blacklist nvidia-340-updates +blacklist nvidia-experimental-340 +# 343 +blacklist nvidia-343 +blacklist nvidia-343-updates +blacklist nvidia-experimental-343 +# 346 +blacklist nvidia-346 +blacklist nvidia-346-updates +blacklist nvidia-experimental-346 +# 349 +blacklist nvidia-349 +blacklist nvidia-349-updates +blacklist nvidia-experimental-349 +# 352 +blacklist nvidia-352 +blacklist nvidia-352-updates +blacklist nvidia-experimental-352 +# 355 +blacklist nvidia-355 +blacklist nvidia-355-updates +blacklist nvidia-experimental-355 +# 358 +blacklist nvidia-358 +blacklist nvidia-358-updates +blacklist nvidia-experimental-358 +# 361 +blacklist nvidia-361 +blacklist nvidia-361-updates +blacklist nvidia-experimental-361 +# 364 +blacklist nvidia-364 +blacklist nvidia-364-updates +blacklist nvidia-experimental-364 +# 367 +blacklist nvidia-367 +blacklist nvidia-367-updates +blacklist nvidia-experimental-367 diff --git a/bumblebee.install b/bumblebee.install new file mode 100644 index 0000000..7b9ba94 --- /dev/null +++ b/bumblebee.install @@ -0,0 +1,3 @@ +debian/bumblebee.conf usr/share/bumblebee/modprobe.d/ +debian/bumblebee/etc/bumblebee/* usr/share/bumblebee/default-conf/ +scripts/systemd/bumblebeed.service lib/systemd/system/ diff --git a/bumblebee.maintscript b/bumblebee.maintscript new file mode 100644 index 0000000..543b41f --- /dev/null +++ b/bumblebee.maintscript @@ -0,0 +1,2 @@ +rm_conffile /etc/modprobe.d/bumblebee.conf 3.2.1-6~ +rm_conffile /etc/bash_completion.d/bumblebee 3.2.1-8~ diff --git a/bumblebee.postinst b/bumblebee.postinst new file mode 100644 index 0000000..2613bc0 --- /dev/null +++ b/bumblebee.postinst @@ -0,0 +1,79 @@ +#!/bin/sh +# postinst script for bumblebee +# +# see: dh_installdeb(1) + +set -e + +xconffile=/etc/bumblebee/xorg.conf.nouveau + +# group that allows users to use Bumblebee +BB_GROUP=bumblebee + +# add members of these groups automatically to group "bumblebee" for new +# installations +USE_GROUPS='adm sudo admin' + +case "$1" in + configure) + # only add a group and members if the configured group does match the + # default group and if the group is missing + if grep -qx ServerGroup=$BB_GROUP /etc/bumblebee/bumblebee.conf && + ! getent group $BB_GROUP > /dev/null; then + groupadd --system $BB_GROUP + users=$(getent group $USE_GROUPS | cut -d: -f4 | tr , '\n' | sort -u) + echo "Adding members from group(s) '$USE_GROUPS' to '$BB_GROUP':" + echo $users + for user in $users; do + gpasswd -a $user $BB_GROUP + done + fi + + + # Raring specific issue + # Also, do not rely solely on dpkg-vendor (see LP: #1061769) + if (which dpkg-vendor >/dev/null && dpkg-vendor --derives-from Ubuntu) || \ + [ -e /etc/dpkg/origins/ubuntu ]; then + # assume first device to be discrete in nvidia/nvidia + busid=$(lspci -d10de: -nn | grep '\[030[02]\]' | cut -d' ' -f1 | tr . : | head -1) + if [ -z "$busid" ]; then + echo "No Nvidia card found. If you really have an Optimus system," + echo "try selecting the Optimus setup in BIOS and run:" + echo "sudo dpkg-reconfigure bumblebee" + else + echo "Selecting $busid as discrete nvidia card. If this is incorrect," + echo "edit the BusID line in $xconffile ." + sed -i $xconffile -r -e "s/^([\t ]*)#([\t ]*BusID[\t ]*)\"[^\"]*\"$/\\1 \\2\"PCI\:$busid\"/" + fi + + # Only for 3.2.1, remove busid.conf if still present. + if [ -e /etc/bumblebee/xorg.conf.d/busid.conf ]; then + echo "Deleting old /etc/bumblebee/xorg.conf.d/busid.conf" + rm /etc/bumblebee/xorg.conf.d/busid.conf + fi + fi + + # Do not treat /etc/modprobe.d/bumblebee-nvidia.conf as a conffile + # LP: #1242785, https://github.com/Bumblebee-Project/Bumblebee/issues/525 + cp -f /usr/share/bumblebee/modprobe.d/bumblebee.conf /etc/modprobe.d/bumblebee.conf + + ;; + triggered) + case "$2" in + restart-bumblebeed) + # Trigger a restart of the bumblebee service, only if it's already running + + if [ -d /run/systemd/system ]; then + if deb-systemd-invoke is-active bumblebeed.service > /dev/null 2>&1; then + deb-systemd-invoke restart bumblebeed.service || exit $? + fi + elif [ -x "/etc/init.d/bumblebeed" ]; then + if invoke-rc.d bumblebeed status > /dev/null 2>&1; then + invoke-rc.d bumblebeed restart || exit $? + fi + fi + ;; + esac +esac + +#DEBHELPER# diff --git a/bumblebee.postrm b/bumblebee.postrm new file mode 100644 index 0000000..b014aaa --- /dev/null +++ b/bumblebee.postrm @@ -0,0 +1,25 @@ +#!/bin/sh +# postrm script for bumblebee +# +# see: dh_installdeb(1) + +set -e + +case "$1" in + purge) + groupdel bumblebee || true + # keep this as old versions did not mark these files as conffiles + for file in bumblebee.conf xorg.conf.nvidia xorg.conf.nouveau; do + rm -f /etc/bumblebee/$file + done + + ;; + remove) + # Do not treat /etc/modprobe.d/bumblebee-nvidia.conf as a conffile + # LP: #1242785, https://github.com/Bumblebee-Project/Bumblebee/issues/525 + rm -f /etc/modprobe.d/bumblebee.conf + + ;; +esac + +#DEBHELPER# diff --git a/bumblebee.triggers b/bumblebee.triggers new file mode 100644 index 0000000..2a9352e --- /dev/null +++ b/bumblebee.triggers @@ -0,0 +1,2 @@ +activate update-initramfs +interest restart-bumblebeed diff --git a/changelog b/changelog new file mode 100644 index 0000000..98209c6 --- /dev/null +++ b/changelog @@ -0,0 +1,172 @@ +bumblebee (3.2.1-14) unstable; urgency=medium + + * Add dependency to lsb-base (>= 3.0-6) to fix Lintian Error + * Add blacklist and dependency for nvidia-367* + + -- Luca Boccassi Tue, 24 Jan 2017 14:20:27 +0000 + +bumblebee (3.2.1-13) unstable; urgency=medium + + * Backport libkmod.patch from upstream develop branch and add build-dep + on libkmod-dev. Definitively fixes all issues with multiple kernel + modules loading/unloading. + * Remove Ubuntu modprobe hack from debian/rules + * Add restart-bumblebeed dpkg-trigger, to be used by update-glx when + changing the provider of libglx.so and the nvidia kernel module. + + -- Luca Boccassi Sat, 11 Jun 2016 12:49:56 +0100 + +bumblebee (3.2.1-12) unstable; urgency=medium + + [ Luca Boccassi ] + * Set nvidia lib directory to /usr/lib/nvidia/nvidia to solve + incompatibility between Bumblebee and concurrent installations of + current plus legacyYYYxx Nvidia driver series on the same system. + * Add ignore-systemd-logind-noise.patch and + ignore-failure-to-set-DRM-interface.patch to ignore red herrings. + (Closes: #822665) + * Set Ubuntu default kernel driver to nvidia, which is provided as a + modprobe alias by the nvidia-XYZ packages. + + [ Vincent Cheng ] + * Use dh_strip --dbgsym-migration to cleanly migrate from old-style dbg + packages to autogenerated dbgsym packages. + + -- Luca Boccassi Wed, 18 May 2016 00:17:59 +0100 + +bumblebee (3.2.1-11) unstable; urgency=medium + + [ Andreas Beckmann ] + * Team upload. + * Drop -dbg package in favor of autogenerated -dbgsym packages. + * Update Vcs-* URLs. + * Update Standards version to 3.9.8, no changes required. + * Drop obsolete Debian NVIDIA package alternatives. + * Add support for the 304xx/340xx legacy driver packages available in + Debian. (Closes: #802479, #717687) + * Use vendor-specific maintainer scripts. + * Add Luca Boccassi to Uploaders. + + [ Luca Boccassi ] + * Mention kernel cmdline workaround for nvidia module load issues on + some hardware, and related upstream tickets, in README.Debian. + (Closes: #822330) + * Run dh --with autoreconf to regenerate configure, Makefile, etc. + * Add xorg-binary-config.patch to allow changing the Xorg binary in + bumblebee.conf. + * Add dependency on xserver-xorg-core >= 1.18 and set default binary + to /usr/lib/xorg/Xorg in order to support xserver-xorg-legacy. + (Closes: #815888) + * Add 358, 361, 364 in alternate dep and blacklist. + * Install modprobe blacklist in /usr/share/bumblebee/modprobe.d/ to avoid + clash with the daemon config file. + * Delete /etc/modprobe.d/bumblebee.conf already when bumblebee is removed, + to not keep the blacklists active until it is purged. (LP: #1242785) + + -- Andreas Beckmann Sat, 07 May 2016 23:42:16 +0200 + +bumblebee (3.2.1-10) unstable; urgency=medium + + * Team upload. + * Blacklist the nvidia legacy kernel modules available in Debian. + * Use the new /usr/lib/nvidia/bumblebee glx alternative. + (Closes: #802310, #802245) + * Add Depends: glx-alternative-nvidia (>= 0.6.92) (only for Debian). + * Trigger the glx-alternative-nvidia package after updating the alternative. + * fix-typos.patch: New, fix some typos noticed by Lintian. + + -- Andreas Beckmann Wed, 21 Oct 2015 02:14:27 +0200 + +bumblebee (3.2.1-9) unstable; urgency=medium + + [ Luca Boccassi ] + * Add modprobe remove in bumblebee.conf on Ubuntu to fix timeout when + unloading nvidia-uvm. + + [ Vincent Cheng ] + * Add nvidia-355 in alternate dep and blacklist. + + -- Vincent Cheng Fri, 14 Aug 2015 23:58:12 -0700 + +bumblebee (3.2.1-8) unstable; urgency=medium + + [ Luca Boccassi ] + * Cherry-pick patch for modprobe -r instead of rmmod (Closes: #793389) + * Add nvidia-346, 349, and 352 in alternate dep and blacklist. + (LP: #1511560) + + [ Vincent Cheng ] + * Move bumblebee bash-completion file from obsolete /etc/bash_completion.d/ + to /usr/share/bash-completion/completions/. + + -- Vincent Cheng Sat, 25 Jul 2015 19:28:48 -0700 + +bumblebee (3.2.1-7) unstable; urgency=medium + + * Move conffile handling introduced in 3.2.1-6 from bumblebee-nvidia + to bumblebee. + + -- Vincent Cheng Sat, 25 Oct 2014 17:04:28 -0700 + +bumblebee (3.2.1-6) unstable; urgency=medium + + * Build with CONF_DRIVER_MODULE_NVIDIA=nvidia-current instead of nvidia. + * Stop treating /etc/modprobe.d/bumblebee.conf as a conffile and remove it + when removing bumblebee, not just when purging it. (LP: #1242785) + - Pre-Depends on dpkg >= 1.15.7.2 for dpkg-maintscript-helper rm_conffile. + * Add patches: fix-device-detection.patch, ignore-error-on-X-shutdown.patch, + cherry-picked from upstream git. (LP: #1230008) + * Allow more nvidia flavours to satisfy bumblebee-nvidia's dependencies + (relevant only for Ubuntu). + * Update debian/README.Debian. + * Update email address. + * Update Standards version to 3.9.6, no changes required. + + -- Vincent Cheng Sat, 25 Oct 2014 10:13:42 -0700 + +bumblebee (3.2.1-5) unstable; urgency=medium + + * Allow more nvidia flavours to satisfy bumblebee-nvidia's dependencies + (relevant only for Ubuntu). (LP: #1261180) + * Update Standards version to 3.9.5, no changes required. + + -- Vincent Cheng Mon, 06 Jan 2014 01:24:33 -0800 + +bumblebee (3.2.1-4) unstable; urgency=low + + * Use dh-systemd (for systemd-specific additions to maintscripts). + (Closes: #715270) + * Add bumblebee group as system group (gid in between 100-999) instead + of a regular group in postinst. (Closes: #718772) + + -- Vincent Cheng Tue, 20 Aug 2013 02:35:34 -0700 + +bumblebee (3.2.1-3) unstable; urgency=low + + * Append /usr/lib/primus to CONF_PRIMUS_LD_PATH in d/rules to ease + pre-multiarch backports. (Closes: #712665) + * Have bumblebee depend on bbswitch-dkms | bbswitch-source, and + bumblebee-nvidia depend on all possible m-a built nvidia modules. + * Add support for nvidia-325 packaged in Ubuntu (not relevant for Debian). + + -- Vincent Cheng Thu, 11 Jul 2013 01:18:07 -0700 + +bumblebee (3.2.1-2) unstable; urgency=low + + * Allow more nvidia flavours to satisfy bumblebee-nvidia's dependencies + (relevant for Ubuntu). + + -- Vincent Cheng Wed, 29 May 2013 01:45:35 -0700 + +bumblebee (3.2.1-1) unstable; urgency=low + + [ Aron Xu ] + * Initial release (Closes: #659440). + * Thanks to Peter Lekensteyn and Bruno Pagani, most stuff taken from the + packaging for Ubuntu PPA. + + [ Vincent Cheng ] + * Thanks to Igor Urazov for lots of the Debian-specific portions of the + packaging. + + -- Vincent Cheng Fri, 03 May 2013 03:04:38 -0700 diff --git a/compat b/compat new file mode 100644 index 0000000..ec63514 --- /dev/null +++ b/compat @@ -0,0 +1 @@ +9 diff --git a/control b/control new file mode 100644 index 0000000..6f291a6 --- /dev/null +++ b/control @@ -0,0 +1,88 @@ +Source: bumblebee +Section: utils +Priority: extra +Maintainer: Debian NVIDIA Maintainers +Uploaders: + Aron Xu , + Vincent Cheng , + Yunqiang Su , + Luca Boccassi , +Build-Depends: + debhelper (>= 9), + dh-autoreconf, + dh-systemd (>= 1.4), + help2man, + libbsd-dev (>= 0.2.0), + libglib2.0-dev, + libx11-dev, + pkg-config, + libkmod-dev, +Standards-Version: 3.9.8 +Homepage: https://launchpad.net/~bumblebee +Vcs-Git: https://anonscm.debian.org/git/pkg-nvidia/bumblebee.git +Vcs-Browser: https://anonscm.debian.org/cgit/pkg-nvidia/bumblebee.git + +Package: bumblebee +Architecture: linux-any +Pre-Depends: + dpkg (>= 1.15.7.2), +Depends: + bbswitch-dkms | bbswitch-source, + lsb-base (>= 3.0-6), + xserver-xorg-core (>= 2:1.18), + ${misc:Depends}, + ${shlibs:Depends}, +Recommends: + virtualgl | primus, +Suggests: + bumblebee-nvidia (= ${binary:Version}), +Description: NVIDIA Optimus support for Linux + Bumblebee is an effort to make NVIDIA Optimus enabled laptops work in + GNU/Linux systems. These laptops are built in such a way that the NVIDIA + graphics card can be used on demand so that battery life is improved and + temperature is kept low. + . + It disables the discrete graphics card if no client is detected, and starts + an X server making use of NVIDIA card if requested then let software GL + implementations (such as VirtualGL) copy frames to the visible display that + runs on the integrated graphics. The ability to use discrete graphics + depends on the driver: open source nouveau and proprietary nvidia. + +Package: bumblebee-nvidia +Architecture: amd64 i386 +Section: contrib/utils +Depends: + bumblebee (= ${binary:Version}), + ${misc:Depends}, + ${nvidia:Depends}, +# proprietary NVIDIA packages in Debian + nvidia-driver | + nvidia-legacy-340xx-driver | + nvidia-legacy-304xx-driver | + nvidia-kernel-dkms | + nvidia-legacy-340xx-kernel-dkms | + nvidia-legacy-304xx-kernel-dkms | +# proprietary NVIDIA packages in Ubuntu + nvidia | nvidia-current | nvidia-current-updates | nvidia-driver-binary | + nvidia-304 | nvidia-304-updates | nvidia-experimental-304 | + nvidia-310 | nvidia-310-updates | nvidia-experimental-310 | + nvidia-313 | nvidia-313-updates | nvidia-experimental-313 | + nvidia-319 | nvidia-319-updates | nvidia-experimental-319 | + nvidia-325 | nvidia-325-updates | nvidia-experimental-325 | + nvidia-331 | nvidia-331-updates | nvidia-experimental-331 | + nvidia-334 | nvidia-334-updates | nvidia-experimental-334 | + nvidia-337 | nvidia-337-updates | nvidia-experimental-337 | + nvidia-340 | nvidia-340-updates | nvidia-experimental-340 | + nvidia-343 | nvidia-343-updates | nvidia-experimental-343 | + nvidia-346 | nvidia-346-updates | nvidia-experimental-346 | + nvidia-349 | nvidia-349-updates | nvidia-experimental-349 | + nvidia-352 | nvidia-352-updates | nvidia-experimental-352 | + nvidia-355 | nvidia-355-updates | nvidia-experimental-355 | + nvidia-358 | nvidia-358-updates | nvidia-experimental-358 | + nvidia-361 | nvidia-361-updates | nvidia-experimental-361 | + nvidia-364 | nvidia-364-updates | nvidia-experimental-364 | + nvidia-367 | nvidia-367-updates | nvidia-experimental-367 +Description: NVIDIA Optimus support using the proprietary NVIDIA driver + This metapackage ensures that the proprietary NVIDIA driver is installed in a + way such that 3D acceleration does not break. It does so by configuring the + OpenGL library path to use the Mesa graphics library. diff --git a/copyright b/copyright new file mode 100644 index 0000000..47a6ce6 --- /dev/null +++ b/copyright @@ -0,0 +1,32 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: bumblebee +Source: https://github.com/Bumblebee-Project/Bumblebee + +Files: * +Copyright: 2011-2013 Bumblebee Project +License: GPL-3.0+ + +Files: debian/* +Copyright: 2011-2013 Peter Lekensteyn + 2011-2013 Bruno Pagani + 2012 Igor Urazov + 2013 Aron Xu + 2013 Vincent Cheng +License: GPL-3.0+ + +License: GPL-3.0+ + 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 package 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 . + . + On Debian systems, the complete text of the GNU General + Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". diff --git a/patches/fix-device-detection.patch b/patches/fix-device-detection.patch new file mode 100644 index 0000000..791ad63 --- /dev/null +++ b/patches/fix-device-detection.patch @@ -0,0 +1,15 @@ +Description: Fix detection of devices on bus numbers larger than 9 +Origin: upstream, https://github.com/Bumblebee-Project/Bumblebee/commit/2073f8537412aa47755eb6f3f22a114403e5285b +Bug: https://github.com/Bumblebee-Project/Bumblebee/issues/573 + +--- a/src/bbsecondary.c ++++ b/src/bbsecondary.c +@@ -138,7 +138,7 @@ + if (!bb_is_running(bb_status.x_pid)) { + char pci_id[12]; + static char *x_conf_file; +- snprintf(pci_id, 12, "PCI:%02x:%02x:%o", pci_bus_id_discrete->bus, ++ snprintf(pci_id, 12, "PCI:%02d:%02d:%o", pci_bus_id_discrete->bus, + pci_bus_id_discrete->slot, pci_bus_id_discrete->func); + if (!x_conf_file) { + x_conf_file = xorg_path_w_driver(bb_config.x_conf_file, bb_config.driver); diff --git a/patches/fix-typos.patch b/patches/fix-typos.patch new file mode 100644 index 0000000..4da4823 --- /dev/null +++ b/patches/fix-typos.patch @@ -0,0 +1,72 @@ +Author: Andreas Beckmann +Description: fix some typos found by Lintian + +--- a/src/bbconfig.c ++++ b/src/bbconfig.c +@@ -201,11 +201,11 @@ void print_usage(int exit_val) { + } + /* common options */ + fputs("\ +- -q, --quiet, --silent supresses all logging messages\n\ ++ -q, --quiet, --silent suppresses all logging messages\n\ + -v, --verbose increase the verbosity level of log messages. It\n\ + can be specified up to two times (or five if\n\ + --quiet is used)\n\ +- --debug show all logging messsages by setting the verbosity\n\ ++ --debug show all logging messages by setting the verbosity\n\ + level to the maximum\n\ + -C, --config FILE retrieve settings for Bumblebee from FILE\n", out); + if (is_optirun) { +--- a/src/module.c ++++ b/src/module.c +@@ -64,7 +64,7 @@ int module_is_loaded(char *driver) { + * + * @param module_name The filename of the module to be loaded + * @param driver The name of the driver to be loaded +- * @return 1 if the driver is succesfully loaded, 0 otherwise ++ * @return 1 if the driver is successfully loaded, 0 otherwise + */ + int module_load(char *module_name, char *driver) { + if (module_is_loaded(driver) == 0) { +@@ -89,7 +89,7 @@ int module_load(char *module_name, char + * giving up + * + * @param driver The name of the driver (not a filename) +- * @return 1 if the driver is succesfully unloaded, 0 otherwise ++ * @return 1 if the driver is successfully unloaded, 0 otherwise + */ + int module_unload(char *driver) { + if (module_is_loaded(driver) == 1) { +--- a/src/optirun.c ++++ b/src/optirun.c +@@ -62,7 +62,7 @@ static void handle_signal(int sig) { + + /** + * Prints the status of the Bumblebee server if available +- * @return EXIT_SUCCESS if the status is succesfully retrieved, ++ * @return EXIT_SUCCESS if the status is successfully retrieved, + * EXIT_FAILURE otherwise + */ + static int report_daemon_status(void) { +--- a/src/switch/sw_bbswitch.c ++++ b/src/switch/sw_bbswitch.c +@@ -98,7 +98,7 @@ int bbswitch_is_available(struct switch_ + * recognized by bbswitch. Assuming that vga_switcheroo was not told to OFF + * the device */ + if (module_load("bbswitch", "bbswitch")) { +- bb_log(LOG_DEBUG, "succesfully loaded bbswitch\n"); ++ bb_log(LOG_DEBUG, "successfully loaded bbswitch\n"); + /* hurrah, bbswitch could be loaded which means that the module is + * available and that the card is supported */ + return 1; +--- a/src/bbrun.c ++++ b/src/bbrun.c +@@ -170,7 +170,7 @@ int bb_run_fork(char **argv, int detache + exitcode = 128 + WTERMSIG(status); + } + } else { +- bb_log(LOG_ERR, "waitpid(%i) faild with %s\n", pid, strerror(errno)); ++ bb_log(LOG_ERR, "waitpid(%i) failed with %s\n", pid, strerror(errno)); + } + pidlist_remove(pid); + } else { diff --git a/patches/ignore-error-on-X-shutdown.patch b/patches/ignore-error-on-X-shutdown.patch new file mode 100644 index 0000000..323a333 --- /dev/null +++ b/patches/ignore-error-on-X-shutdown.patch @@ -0,0 +1,15 @@ +Description: Ignore error on X shutdown +Origin: upstream, https://github.com/Bumblebee-Project/Bumblebee/commit/25387e92822fb1a56fa43f1f9f636b987018d068 + +--- a/src/bblogger.c ++++ b/src/bblogger.c +@@ -144,7 +144,8 @@ + /* Error lines are errors. */ + if (strncmp(string, "(EE)", 4) == 0){ + if (strstr(string, "Failed to load module \"kbd\"") || +- strstr(string, "No input driver matching")) { ++ strstr(string, "No input driver matching") || ++ strstr(string, "Server terminated successfully")) { + /* non-fatal errors */ + prio = LOG_DEBUG; + } else { diff --git a/patches/ignore-failure-to-set-DRM-interface.patch b/patches/ignore-failure-to-set-DRM-interface.patch new file mode 100644 index 0000000..fbf9a77 --- /dev/null +++ b/patches/ignore-failure-to-set-DRM-interface.patch @@ -0,0 +1,22 @@ +From: Luca Boccassi +Date: Sat, 14 May 2016 21:44:00 +0100 +Subject: Ignore failure to set DRM interface + +This always fail due to problems in libdrm, but does not affect +Bumblebee's functionality. See GH-652 for more details. +--- + src/bblogger.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/bblogger.c b/src/bblogger.c +index c882275..ba3787e 100644 +--- a/src/bblogger.c ++++ b/src/bblogger.c +@@ -146,6 +146,7 @@ static void parse_xorg_output(char * string){ + if (strstr(string, "Failed to load module \"kbd\"") || + strstr(string, "No input driver matching") || + strstr(string, "systemd-logind: failed to get session:") || ++ strstr(string, "failed to set DRM interface version 1.4:") || + strstr(string, "Server terminated successfully")) { + /* non-fatal errors */ + prio = LOG_DEBUG; diff --git a/patches/ignore-systemd-logind-noise.patch b/patches/ignore-systemd-logind-noise.patch new file mode 100644 index 0000000..cbe48b4 --- /dev/null +++ b/patches/ignore-systemd-logind-noise.patch @@ -0,0 +1,33 @@ +From: Peter Wu +Date: Thu, 30 Oct 2014 10:22:07 +0100 +Subject: Ignore systemd-logind noise + +This "error" appears when not run under logind. As it is not fatal, +ignore it. (It also appears on my KDE desktop using KDM.) + +Error message reported in bugs GH-600, GH-582. +--- + src/bblogger.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/bblogger.c b/src/bblogger.c +index aaadba9..c882275 100644 +--- a/src/bblogger.c ++++ b/src/bblogger.c +@@ -145,6 +145,7 @@ static void parse_xorg_output(char * string){ + if (strncmp(string, "(EE)", 4) == 0){ + if (strstr(string, "Failed to load module \"kbd\"") || + strstr(string, "No input driver matching") || ++ strstr(string, "systemd-logind: failed to get session:") || + strstr(string, "Server terminated successfully")) { + /* non-fatal errors */ + prio = LOG_DEBUG; +@@ -201,7 +202,7 @@ static void parse_xorg_output(char * string){ + } + } + } +- ++ + /* do the actual logging */ + bb_log(prio, "[XORG] %s\n", string); + } diff --git a/patches/libkmod.patch b/patches/libkmod.patch new file mode 100644 index 0000000..f29068f --- /dev/null +++ b/patches/libkmod.patch @@ -0,0 +1,434 @@ +From: =?utf-8?q?Ond=C5=99ej_Jano=C5=A1=C3=ADk?= +Date: Thu, 5 May 2016 18:48:43 +0200 +Subject: module: use libkmod2 instead of modprobe + +--- + Makefile.am | 8 +-- + README.markdown | 1 + + configure.ac | 1 + + src/bbconfig.c | 12 ++-- + src/bbconfig.h | 2 + + src/bblogger.c | 4 +- + src/bumblebeed.c | 12 ++++ + src/module.c | 185 +++++++++++++++++++++++++++++++++++++------------------ + src/optirun.c | 1 - + 9 files changed, 152 insertions(+), 74 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 0f38a54..25e32d5 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -10,7 +10,7 @@ AM_CPPFLAGS = ${regular_CPPFLAGS} \ + -DCONF_XORG='"$(bumblebeedconfdir)/xorg.conf.DRIVER"' \ + -DCONF_XORG_DIR='"$(bumblebeedconfdir)/xorg.conf.d"' + AM_CFLAGS = ${regular_CFLAGS} \ +- ${x11_CFLAGS} ${libbsd_CFLAGS} ${glib_CFLAGS} \ ++ ${x11_CFLAGS} ${libbsd_CFLAGS} ${glib_CFLAGS} ${kmod_CFLAGS} \ + -Wextra -funsigned-char -DGITVERSION='"${GITVERSION}"' + + noinst_SCRIPTS = scripts/systemd/bumblebeed.service \ +@@ -49,13 +49,13 @@ sbin_PROGRAMS = bin/bumblebeed + bin_PROGRAMS = bin/optirun + + bin_optirun_SOURCES = src/module.c src/bbconfig.c src/bblogger.c src/bbrun.c \ +- src/bbsocket.c src/driver.c src/optirun.c src/bbsocketclient.c +-bin_optirun_LDADD = ${glib_LIBS} -lrt ++ src/bbsocket.c src/optirun.c src/bbsocketclient.c ++bin_optirun_LDADD = ${glib_LIBS} ${kmod_LIBS} -lrt + bin_bumblebeed_SOURCES = src/pci.c src/bbconfig.c src/bblogger.c src/bbrun.c \ + src/bbsocket.c src/module.c src/bbsecondary.c src/switch/switching.c \ + src/switch/sw_bbswitch.c src/switch/sw_switcheroo.c \ + src/driver.c src/bumblebeed.c +-bin_bumblebeed_LDADD = ${x11_LIBS} ${libbsd_LIBS} ${glib_LIBS} -lrt ++bin_bumblebeed_LDADD = ${x11_LIBS} ${libbsd_LIBS} ${glib_LIBS} ${kmod_LIBS} -lrt + + dist_doc_DATA = $(relnotes) README.markdown + bumblebeedconf_DATA = conf/bumblebee.conf conf/xorg.conf.nouveau conf/xorg.conf.nvidia +diff --git a/README.markdown b/README.markdown +index b534a6c..5c2baa5 100644 +--- a/README.markdown ++++ b/README.markdown +@@ -19,6 +19,7 @@ The following packages are dependencies for the build process: + - pkg-config + - glib-2.0 and development headers + - libx11 and development headers ++- libkmod2 and development headers + - libbsd and development headers (if pidfile support is enabled, default yes) + - help2man (optional, it is needed for building manual pages) + +diff --git a/configure.ac b/configure.ac +index 4e22314..d5194b8 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -132,6 +132,7 @@ AC_SUBST([regular_CFLAGS]) + # Checks for header files. + PKG_CHECK_MODULES([x11], [x11]) + PKG_CHECK_MODULES([glib], [glib-2.0]) ++PKG_CHECK_MODULES([kmod], [libkmod]) + AS_IF([test "x$with_pidfile" != xno], [ + PKG_CHECK_MODULES([libbsd], [libbsd >= 0.2.0]) + PKG_CHECK_EXISTS([libbsd = 0.2.0], [AC_DEFINE(HAVE_LIBBSD_020)]) +diff --git a/src/bbconfig.c b/src/bbconfig.c +index 4f5ac7a..62a3306 100644 +--- a/src/bbconfig.c ++++ b/src/bbconfig.c +@@ -251,12 +251,6 @@ Bumblebee homepage: \n", out); + */ + static int bbconfig_parse_common(int opt, char *value) { + switch (opt) { +- case 'q'://quiet mode +- bb_status.verbosity = VERB_NONE; +- break; +- case OPT_DEBUG://debug mode +- bb_status.verbosity = VERB_ALL; +- break; + case 'd'://X display number + set_string_value(&bb_config.x_display, value); + break; +@@ -307,6 +301,12 @@ void bbconfig_parse_opts(int argc, char *argv[], int conf_round) { + bb_status.verbosity++; + } + break; ++ case 'q'://quiet mode ++ bb_status.verbosity = VERB_NONE; ++ break; ++ case OPT_DEBUG://debug mode ++ bb_status.verbosity = VERB_ALL; ++ break; + case 's': /* Unix socket to use for communication */ + set_string_value(&bb_config.socket_path, optarg); + break; +diff --git a/src/bbconfig.h b/src/bbconfig.h +index 656286b..a19f5d3 100644 +--- a/src/bbconfig.h ++++ b/src/bbconfig.h +@@ -26,6 +26,7 @@ + #include //for pid_t + #include //for CHAR_MAX + #include ++#include + + /* Daemon states */ + #define BB_DAEMON 1 +@@ -118,6 +119,7 @@ struct bb_status_struct { + int x_pipe[2];//pipes for reading/writing output from X's stdout/stderr + gboolean use_syslog; + char *program_name; ++ struct kmod_ctx *kmod_ctx; + }; + + /* Structure containing the configuration. */ +diff --git a/src/bblogger.c b/src/bblogger.c +index ba3787e..7c13c93 100644 +--- a/src/bblogger.c ++++ b/src/bblogger.c +@@ -228,7 +228,7 @@ void check_xorg_pipe(void){ + /* line / buffer is full, process the remaining buffer the next round */ + repeat = 1; + } +- }else{ ++ } else { + if (r == 0 || (errno != EAGAIN && r == -1)){ + /* the pipe is closed/invalid. Clean up. */ + if (bb_status.x_pipe[0] != -1){close(bb_status.x_pipe[0]); bb_status.x_pipe[0] = -1;} +@@ -257,5 +257,5 @@ void check_xorg_pipe(void){ + memmove(x_output_buffer, next_part, x_buffer_pos); + } + } +- }while(repeat); ++ }while (repeat); + }/* check_xorg_pipe */ +diff --git a/src/bumblebeed.c b/src/bumblebeed.c +index a911da9..6e0ade5 100644 +--- a/src/bumblebeed.c ++++ b/src/bumblebeed.c +@@ -34,6 +34,7 @@ + #include + #include + #include ++#include + #ifdef WITH_PIDFILE + #ifdef HAVE_LIBBSD_020 + #include +@@ -488,6 +489,14 @@ int main(int argc, char* argv[]) { + + free(pci_id_igd); + ++ // kmod context have to be available for driver detection ++ bb_status.kmod_ctx = kmod_new(NULL, NULL); ++ if (bb_status.kmod_ctx == NULL) { ++ bb_log(LOG_ERR, "kmod_new() failed!\n"); ++ bb_closelog(); ++ exit(EXIT_FAILURE); ++ } ++ + GKeyFile *bbcfg = bbconfig_parse_conf(); + bbconfig_parse_opts(argc, argv, PARSE_STAGE_DRIVER); + driver_detect(); +@@ -500,6 +509,7 @@ int main(int argc, char* argv[]) { + + /* dump the config after detecting the driver */ + config_dump(); ++ + if (config_validate() != 0) { + return (EXIT_FAILURE); + } +@@ -572,5 +582,7 @@ int main(int argc, char* argv[]) { + //close X pipe, if any parts of it are open still + if (bb_status.x_pipe[0] != -1){close(bb_status.x_pipe[0]); bb_status.x_pipe[0] = -1;} + if (bb_status.x_pipe[1] != -1){close(bb_status.x_pipe[1]); bb_status.x_pipe[1] = -1;} ++ //cleanup kmod context ++ kmod_unref(bb_status.kmod_ctx); + return (EXIT_SUCCESS); + } +diff --git a/src/module.c b/src/module.c +index bb32e15..ef3e84c 100644 +--- a/src/module.c ++++ b/src/module.c +@@ -24,91 +24,152 @@ + #include + #include + #include ++#include ++#include + #include "module.h" + #include "bblogger.h" + #include "bbrun.h" ++#include "bbconfig.h" ++ ++int module_unload_recursive(struct kmod_module *mod); + + /** +- * Checks in /proc/modules whether a kernel module is loaded ++ * Checks whether a kernel module is loaded + * + * @param driver The name of the driver (not a filename) + * @return 1 if the module is loaded, 0 otherwise + */ + int module_is_loaded(char *driver) { +- // use the same buffer length as lsmod +- char buffer[4096]; +- FILE * bbs = fopen("/proc/modules", "r"); +- int ret = 0; +- /* assume mod_len <= sizeof(buffer) */ +- int mod_len = strlen(driver); ++ int err, state; ++ struct kmod_module *mod; + +- if (bbs == 0) {//error opening, return -1 +- bb_log(LOG_DEBUG, "Couldn't open /proc/modules"); +- return -1; ++ err = kmod_module_new_from_name(bb_status.kmod_ctx, driver, &mod); ++ if (err < 0) { ++ bb_log(LOG_DEBUG, "kmod_module_new_from_name(%s) failed (err: %d).\n", ++ driver, err); ++ return 0; + } +- while (fgets(buffer, sizeof(buffer), bbs)) { +- /* match "module" with "module " and not "module-blah" */ +- if (!strncmp(buffer, driver, mod_len) && isspace(buffer[mod_len])) { +- /* module is found */ +- ret = 1; +- break; +- } +- } +- fclose(bbs); +- return ret; ++ ++ state = kmod_module_get_initstate(mod); ++ kmod_module_unref(mod); ++ ++ return state == KMOD_MODULE_LIVE; + } + + /** +- * Attempts to load a module. If the module has not been loaded after ten +- * seconds, give up ++ * Attempts to load a module. + * + * @param module_name The filename of the module to be loaded + * @param driver The name of the driver to be loaded + * @return 1 if the driver is successfully loaded, 0 otherwise + */ + int module_load(char *module_name, char *driver) { ++ int err = 0; ++ int flags = KMOD_PROBE_IGNORE_LOADED; ++ struct kmod_list *l, *list = NULL; ++ + if (module_is_loaded(driver) == 0) { + /* the module has not loaded yet, try to load it */ +- bb_log(LOG_INFO, "Loading driver %s (module %s)\n", driver, module_name); +- char *mod_argv[] = { +- "modprobe", +- module_name, +- NULL +- }; +- bb_run_fork_wait(mod_argv, 10); +- if (module_is_loaded(driver) == 0) { +- bb_log(LOG_ERR, "Module %s could not be loaded (timeout?)\n", module_name); ++ ++ bb_log(LOG_INFO, "Loading driver '%s' (module '%s')\n", driver, module_name); ++ err = kmod_module_new_from_lookup(bb_status.kmod_ctx, module_name, &list); ++ ++ if (err < 0) { ++ bb_log(LOG_DEBUG, "kmod_module_new_from_lookup(%s) failed (err: %d).\n", ++ module_name, err); ++ return 0; ++ } ++ ++ if (list == NULL) { ++ bb_log(LOG_ERR, "Module '%s' not found.\n", module_name); + return 0; + } ++ ++ kmod_list_foreach(l, list) { ++ struct kmod_module *mod = kmod_module_get_module(l); ++ ++ bb_log(LOG_DEBUG, "Loading module '%s'.\n", kmod_module_get_name(mod)); ++ err = kmod_module_probe_insert_module(mod, flags, NULL, NULL, NULL, 0); ++ ++ if (err < 0) { ++ bb_log(LOG_DEBUG, "kmod_module_probe_insert_module(%s) failed (err: %d).\n", ++ kmod_module_get_name(mod), err); ++ } ++ ++ kmod_module_unref(mod); ++ ++ if (err < 0) { ++ break; ++ } ++ } ++ ++ kmod_module_unref_list(list); ++ } ++ ++ return err >= 0; ++} ++ ++/** ++ * Unloads module and modules that are depending on this module. ++ * ++ * @param mod Reference to libkmod module ++ * @return 1 if the module is successfully unloaded, 0 otherwise ++ */ ++int module_unload_recursive(struct kmod_module *mod) { ++ int err = 0, flags = 0, refcnt; ++ struct kmod_list *holders; ++ ++ holders = kmod_module_get_holders(mod); ++ if (holders != NULL) { ++ struct kmod_list *itr; ++ ++ kmod_list_foreach(itr, holders) { ++ struct kmod_module *hm = kmod_module_get_module(itr); ++ err = module_unload_recursive(hm); ++ kmod_module_unref(hm); ++ ++ if (err < 0) { ++ break; ++ } ++ } ++ kmod_module_unref_list(holders); + } +- return 1; ++ ++ refcnt = kmod_module_get_refcnt(mod); ++ if (refcnt == 0) { ++ bb_log(LOG_INFO, "Unloading module %s\n", kmod_module_get_name(mod)); ++ err = kmod_module_remove_module(mod, flags); ++ } else { ++ bb_log(LOG_ERR, "Failed to unload module '%s' (ref count: %d).\n", ++ kmod_module_get_name(mod), refcnt); ++ err = 1; ++ } ++ ++ return err == 0; + } + + /** +- * Attempts to unload a module if loaded, for ten seconds before +- * giving up ++ * Attempts to unload a module if loaded. + * + * @param driver The name of the driver (not a filename) + * @return 1 if the driver is successfully unloaded, 0 otherwise + */ + int module_unload(char *driver) { ++ int err; ++ struct kmod_module *mod; + if (module_is_loaded(driver) == 1) { +- int retries = 30; +- bb_log(LOG_INFO, "Unloading %s driver\n", driver); +- char *mod_argv[] = { +- "modprobe", +- "-r", +- driver, +- NULL +- }; +- bb_run_fork_wait(mod_argv, 10); +- while (retries-- > 0 && module_is_loaded(driver) == 1) { +- usleep(100000); +- } +- if (module_is_loaded(driver) == 1) { +- bb_log(LOG_ERR, "Unloading %s driver timed out.\n", driver); ++ err = kmod_module_new_from_name(bb_status.kmod_ctx, driver, &mod); ++ ++ if (err < 0) { ++ bb_log(LOG_DEBUG, "kmod_module_new_from_name(%s) failed (err: %d).\n", ++ driver, err); + return 0; + } ++ ++ err = module_unload_recursive(mod); ++ kmod_module_unref(mod); ++ ++ return err; + } + return 1; + } +@@ -120,18 +181,20 @@ int module_unload(char *driver) { + * @return 1 if the module is available for loading, 0 otherwise + */ + int module_is_available(char *module_name) { +- /* HACK to support call from optirun */ +- char *modprobe_bin = "/sbin/modprobe"; +- if (access(modprobe_bin, X_OK)) { +- /* if /sbin/modprobe is not found, pray that PATH contains it */ +- modprobe_bin = "modprobe"; ++ int err, available; ++ struct kmod_list *list = NULL; ++ ++ err = kmod_module_new_from_lookup(bb_status.kmod_ctx, module_name, &list); ++ ++ if (err < 0) { ++ bb_log(LOG_DEBUG, "kmod_module_new_from_lookup(%s) failed (err: %d).\n", ++ module_name, err); ++ return 0; + } +- char *mod_argv[] = { +- modprobe_bin, +- "--dry-run", +- "--quiet", +- module_name, +- NULL +- }; +- return bb_run_fork(mod_argv, 1) == EXIT_SUCCESS; ++ ++ available = list != NULL; ++ ++ kmod_module_unref_list(list); ++ ++ return available; + } +diff --git a/src/optirun.c b/src/optirun.c +index bcc6c13..f05f05c 100644 +--- a/src/optirun.c ++++ b/src/optirun.c +@@ -37,7 +37,6 @@ + #include "bbsocketclient.h" + #include "bblogger.h" + #include "bbrun.h" +-#include "driver.h" + + + /** diff --git a/patches/modprobe-r-instead-of-rmmod.patch b/patches/modprobe-r-instead-of-rmmod.patch new file mode 100644 index 0000000..5c426d4 --- /dev/null +++ b/patches/modprobe-r-instead-of-rmmod.patch @@ -0,0 +1,17 @@ +Description: With the introduction of nvidia-uvm module, unloading nvidia module will fail unless nvidia-uvm is unloaded. GH-565 suggests using "remove" or "softdep" modprobe.d clauses to teach modprobe to handle that for us; "rmmod" does not have that functionality, so switch to "modprobe -r". +Origin: upstream, https://github.com/Bumblebee-Project/Bumblebee/commit/1ada79fe5916961fc4e4917f8c63bb184908d986 +Bug: https://github.com/Bumblebee-Project/Bumblebee/issues/565 +Bug-Debian: 793389 + +--- a/src/module.c ++++ b/src/module.c +@@ -96,7 +96,8 @@ int module_unload(char *driver) { + int retries = 30; + bb_log(LOG_INFO, "Unloading %s driver\n", driver); + char *mod_argv[] = { +- "rmmod", ++ "modprobe", ++ "-r", + driver, + NULL + }; diff --git a/patches/series b/patches/series new file mode 100644 index 0000000..a575fbb --- /dev/null +++ b/patches/series @@ -0,0 +1,8 @@ +fix-device-detection.patch +ignore-error-on-X-shutdown.patch +modprobe-r-instead-of-rmmod.patch +fix-typos.patch +xorg-binary-config.patch +ignore-systemd-logind-noise.patch +ignore-failure-to-set-DRM-interface.patch +libkmod.patch diff --git a/patches/xorg-binary-config.patch b/patches/xorg-binary-config.patch new file mode 100644 index 0000000..e4c751d --- /dev/null +++ b/patches/xorg-binary-config.patch @@ -0,0 +1,135 @@ +From: Rogier 'DocWilco' Mulhuijzen +Date: Sat, 27 Feb 2016 12:43:41 -0800 +Subject: Add config option to set Xorg binary to run + +Also add Xorg commandline binary to debug output +--- + Makefile.am | 1 + + conf/bumblebee.conf.in | 2 ++ + configure.ac | 6 ++++++ + src/bbconfig.c | 6 ++++++ + src/bbconfig.h | 1 + + src/bbsecondary.c | 8 +++++++- + src/bbsecondary.h | 8 -------- + 7 files changed, 23 insertions(+), 9 deletions(-) + +--- a/Makefile.am ++++ b/Makefile.am +@@ -70,6 +70,7 @@ + + do_subst = sed -e 's|[@]GITVERSION[@]|$(GITVERSION)|g' \ + -e 's|[@]CONF_XDISP[@]|$(CONF_XDISP)|g' \ ++ -e 's|[@]CONF_XORG_BINARY[@]|$(CONF_XORG_BINARY)|g' \ + -e 's|[@]CONF_SOCKPATH[@]|$(CONF_SOCKPATH)|g' \ + -e 's|[@]CONF_GID[@]|$(CONF_GID)|g' \ + -e 's|[@]CONF_PM_METHOD[@]|$(CONF_PM_METHOD)|g' \ +--- a/conf/bumblebee.conf.in ++++ b/conf/bumblebee.conf.in +@@ -22,6 +22,8 @@ + Driver=@CONF_DRIVER@ + # Directory with a dummy config file to pass as a -configdir to secondary X + XorgConfDir=@XCONFDDIR@ ++# Xorg binary to run ++XorgBinary=@CONF_XORG_BINARY@ + + ## Client options. Will take effect on the next optirun executed. + [optirun] +--- a/configure.ac ++++ b/configure.ac +@@ -32,6 +32,16 @@ + AC_DEFINE_SUBST(CONF_VGLCOMPRESS, "proxy", [vglclient transport method]) + AC_DEFINE_SUBST(CONF_TURNOFFATEXIT, "false", [state of card when shutting off daemon]) + ++# OpenSUSE: /usr/bin/X -> /var/lib/X11/X -> /usr/bin/Xorg ++# Fedora, Arch Linux: /usr/bin/X -> /usr/bin/Xorg ++# Ubuntu: /usr/bin/X is a custom binary doing authorization and then executes ++# /etc/X11/X -> /usr/bin/Xorg ++AC_DEFINE_CONF(CONF_XORG_BINARY, [Xorg binary to run], [ ++if test "x" = "x$CONF_XORG_BINARY"; then ++ CONF_XORG_BINARY=Xorg ++fi ++]) ++ + AC_DEFINE_CONF(CONF_BRIDGE, [optirun display/render bridge, valid values are auto (default), primus and virtualgl], [ + case $CONF_BRIDGE in + auto|primus|virtualgl) ;; +--- a/src/bbconfig.c ++++ b/src/bbconfig.c +@@ -425,6 +425,10 @@ + if (g_key_file_has_key(bbcfg, section, key, NULL)) { + free_and_set_value(&bb_config.x_conf_dir, g_key_file_get_string(bbcfg, section, key, NULL)); + } ++ key = "XorgBinary"; ++ if (g_key_file_has_key(bbcfg, section, key, NULL)) { ++ free_and_set_value(&bb_config.xorg_binary, g_key_file_get_string(bbcfg, section, key, NULL)); ++ } + return bbcfg; + } + +@@ -517,6 +521,7 @@ + set_string_value(&bb_config.gid_name, CONF_GID); + set_string_value(&bb_config.x_conf_file, CONF_XORG); + set_string_value(&bb_config.x_conf_dir, CONF_XORG_DIR); ++ set_string_value(&bb_config.xorg_binary, CONF_XORG_BINARY); + set_string_value(&bb_config.optirun_bridge, CONF_BRIDGE); + set_string_value(&bb_config.primus_ld_path, CONF_PRIMUS_LD_PATH); + set_string_value(&bb_config.vgl_compress, CONF_VGLCOMPRESS); +@@ -550,6 +555,7 @@ + #endif + bb_log(LOG_DEBUG, " xorg.conf file: %s\n", bb_config.x_conf_file); + bb_log(LOG_DEBUG, " xorg.conf.d dir: %s\n", bb_config.x_conf_dir); ++ bb_log(LOG_DEBUG, " Xorg binary: %s\n", bb_config.xorg_binary); + bb_log(LOG_DEBUG, " ModulePath: %s\n", bb_config.mod_path); + bb_log(LOG_DEBUG, " GID name: %s\n", bb_config.gid_name); + bb_log(LOG_DEBUG, " Power method: %s\n", +--- a/src/bbconfig.h ++++ b/src/bbconfig.h +@@ -122,6 +122,7 @@ + + /* Structure containing the configuration. */ + struct bb_config_struct { ++ char * xorg_binary; /// Xorg binary to run. + char * x_display; /// X display number to use. + char * x_conf_file; /// Path to the X configuration file. + char * x_conf_dir; /// Path to the dummy X configuration directory. +--- a/src/bbsecondary.c ++++ b/src/bbsecondary.c +@@ -146,7 +146,7 @@ + + bb_log(LOG_INFO, "Starting X server on display %s.\n", bb_config.x_display); + char *x_argv[] = { +- XORG_BINARY, ++ bb_config.xorg_binary, + bb_config.x_display, + "-config", x_conf_file, + "-configdir", bb_config.x_conf_dir, +@@ -158,6 +158,12 @@ + "-modulepath", bb_config.mod_path, // keep last + NULL + }; ++ char **argvp; ++ bb_log(LOG_DEBUG, "X server command line:"); ++ for (argvp = x_argv; argvp && *argvp; argvp++) { ++ bb_log(LOG_DEBUG, " %s", *argvp); ++ } ++ bb_log(LOG_DEBUG, "\n"); + enum {n_x_args = sizeof(x_argv) / sizeof(x_argv[0])}; + if (!*bb_config.mod_path) { + x_argv[n_x_args - 3] = 0; //remove -modulepath if not set +--- a/src/bbsecondary.h ++++ b/src/bbsecondary.h +@@ -20,14 +20,6 @@ + */ + #pragma once + +-/** +- * OpenSUSE: /usr/bin/X -> /var/lib/X11/X -> /usr/bin/Xorg +- * Fedora, Arch Linux: /usr/bin/X -> /usr/bin/Xorg +- * Ubuntu: /usr/bin/X is a custom binary doing authorization and then executes +- * /etc/X11/X -> /usr/bin/Xorg +- */ +-#define XORG_BINARY "Xorg" +- + /* PCI Bus ID of the discrete video card */ + struct pci_bus_id *pci_bus_id_discrete; + diff --git a/rules b/rules new file mode 100755 index 0000000..b5d57c5 --- /dev/null +++ b/rules @@ -0,0 +1,63 @@ +#!/usr/bin/make -f +# -*- makefile -*- + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +VENDOR := $(shell dpkg-vendor --derives-from Ubuntu && echo Ubuntu || echo Debian) + +bbnv_depends_Debian = glx-alternative-nvidia (>= 0.6.92) +bbnv_depends_Ubuntu = + +MAINTSCRIPTS_GENERATED = debian/bumblebee-nvidia.postinst +MAINTSCRIPTS_GENERATED += debian/bumblebee-nvidia.postrm + +%: + dh $@ --with systemd,autoreconf + +configure-for-Ubuntu: + dh_auto_configure -- \ + CONF_DRIVER_MODULE_NVIDIA=nvidia \ + CONF_LDPATH_NVIDIA=/usr/lib/nvidia-current:/usr/lib32/nvidia-current \ + CONF_MODPATH_NVIDIA=/usr/lib/nvidia-current/xorg,/usr/lib/xorg/modules \ + CONF_PRIMUS_LD_PATH=/usr/lib/x86_64-linux-gnu/primus:/usr/lib/i386-linux-gnu/primus \ + CONF_XORG_BINARY=/usr/lib/xorg/Xorg + +configure-for-Debian: + dh_auto_configure -- \ + CONF_DRIVER_MODULE_NVIDIA=nvidia \ + CONF_LDPATH_NVIDIA=/usr/lib/x86_64-linux-gnu/nvidia:/usr/lib/i386-linux-gnu/nvidia:/usr/lib/nvidia \ + CONF_MODPATH_NVIDIA=/usr/lib/nvidia/nvidia,/usr/lib/xorg/modules \ + CONF_PRIMUS_LD_PATH=/usr/lib/x86_64-linux-gnu/primus:/usr/lib/i386-linux-gnu/primus:/usr/lib/primus:/usr/lib32/primus \ + CONF_XORG_BINARY=/usr/lib/xorg/Xorg + +override_dh_auto_configure: $(MAINTSCRIPTS_GENERATED) +override_dh_auto_configure: configure-for-$(VENDOR) + +override_dh_auto_install: + dh_auto_install --destdir=debian/bumblebee/ + +override_dh_clean: + dh_clean + $(RM) $(MAINTSCRIPTS_GENERATED) + +override_dh_install: + dh_install + + # Install bash-completion file to non-obsolete directory + mkdir -p debian/bumblebee/usr/share/bash-completion/completions/ + mv debian/bumblebee/etc/bash_completion.d/bumblebee \ + debian/bumblebee/usr/share/bash-completion/completions/ + rm -rf debian/bumblebee/etc/bash_completion.d/ + +override_dh_installinit: + dh_installinit --name=bumblebeed + +override_dh_strip: + dh_strip --dbgsym-migration='bumblebee-dbg (<< 3.2.1-11)' + +override_dh_gencontrol: + dh_gencontrol -- -V'nvidia:Depends=$(bbnv_depends_$(VENDOR))' + +debian/%: debian/%.$(VENDOR) + cp -a $< $@ diff --git a/source/format b/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/watch b/watch new file mode 100644 index 0000000..721a8b6 --- /dev/null +++ b/watch @@ -0,0 +1,2 @@ +version=3 +https://github.com/Bumblebee-Project/Bumblebee/tags .*/v?(\d.*)\.(?:tgz|tbz2|tar\.(?:gz|bz2|xz)) -- 2.30.2