Sid is unstable for a reason and although most of the time it behaves just fine, when it breaks, breaks big time

on the other hand if you want to play/learn, have a more up-to-date app and can afford the unexpected oops!! this is for you

[to be clear: i'm not saying that using sid app will break your install but it introduces higher risks; it's up to you to evaluate if you want/need to take those risks]
let's start
1- the system must be fully up-to-date, so
Code: Select all
apt update && apt dist-upgrade
Code: Select all
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
2- let's create a sid.list in sources.list.d and add the relevant repo line
Code: Select all
sudo touch /etc/apt/sources.list.d/sid.list
Code: Select all
sudo echo 'deb http://ftp.debian.org/debian unstable main contrib non-free' | sudo tee -a /etc/apt/sources.list.d/sid.list
Code: Select all
zerozero@home /etc/apt/sources.list.d $ ls -lA
total 12
-rw-r--r-- 1 root root 191 Nov 27 11:31 google-talkplugin.list
-rw-r--r-- 1 root root 64 Jan 31 21:28 sid.list
-rw-r--r-- 1 root root 87 Nov 27 11:31 snapper.list
Code: Select all
zerozero@home /etc/apt/sources.list.d $ cat /etc/apt/sources.list.d/sid.list
deb http://ftp.debian.org/debian unstable main contrib non-free
where we are going to tell APT that unstable has lower priority than our standard repos, so that no unwanted updates will filter through from sid
Code: Select all
sudo touch /etc/apt/preferences
Code: Select all
sudo echo 'Package: *' | sudo tee -a /etc/apt/preferences
Code: Select all
sudo echo 'Pin: release a=unstable' | sudo tee -a /etc/apt/preferences
Code: Select all
sudo echo 'Pin-Priority: 50' | sudo tee -a /etc/apt/preferences
Code: Select all
zerozero@home ~ $ cat /etc/apt/preferences
Package: *
Pin: release a=unstable
Pin-Priority: 50
4- now the real test that this setup works
Code: Select all
apt update && apt dist-upgrade
Code: Select all
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
5- what's all this for, in the end of the day, you ask?

let's take one example
Darktable
i'm working now with these repos
Code: Select all
zerozero@home ~ $ inxi -r
Repos: Active apt sources in file: /etc/apt/sources.list
deb http://packages.solydxk.com/testing/ solydxk main upstream import kdenext
deb http://community.solydxk.com/testing/ solydxk main
deb http://debian.solydxk.com/testing/ testing main contrib non-free
deb http://debian.solydxk.com/testing/multimedia/ testing main non-free
deb http://debian.solydxk.com/security/ testing/updates main contrib non-free
deb-src http://packages.solydxk.com/testing/ solydxk main upstream import kdenext
deb-src http://community.solydxk.com/testing/ solydxk main
deb-src http://debian.solydxk.com/testing/ testing main contrib non-free
deb-src http://debian.solydxk.com/testing/multimedia/ testing main non-free
deb-src http://debian.solydxk.com/security/ testing/updates main contrib non-free
deb http://download.virtualbox.org/virtualbox/debian/ wheezy contrib
Active apt sources in file: /etc/apt/sources.list.d/google-talkplugin.list
deb http://dl.google.com/linux/talkplugin/deb/ stable main
Active apt sources in file: /etc/apt/sources.list.d/sid.list
deb http://ftp.debian.org/debian unstable main contrib non-free
Active apt sources in file: /etc/apt/sources.list.d/snapper.list
deb http://download.opensuse.org/repositories/filesystems:snapper/Debian_7.0/ /
zerozero@home ~ $
Code: Select all
zerozero@home ~ $ apt policy darktable
darktable:
Installed: (none)
Candidate: 1.2.3-1
Version table:
1.4-2+b1 0
50 http://ftp.debian.org/debian/ unstable/main amd64 Packages
1.2.3-1 0
500 http://debian.solydxk.com/testing/ testing/main amd64 Packages
this is exactly the behavior we want: have sid packages available but not automatically updated
6- usage (finally

if a package is only available in sid or a newer version of given app is in sid we can:
with the -t unstable syntax we are telling APT to install given package from unstable and also needed dependencies (if any)
because of that i would use first the -s switch just to have a look&see on the impact of my request and only then (removing it) would go for the real deal)
Code: Select all
sudo apt-get -s -t unstable install <package-name>
Code: Select all
zerozero@home ~ $ sudo apt-get -s -t unstable install darktable
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
libevent-2.0-5 libsamplerate0:i386 libspeexdsp1:i386
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
gtk2-engines libflickcurl0 libgphoto2-6 libgphoto2-l10n libgphoto2-port10 libjs-prototype libjs-scriptaculous
Suggested packages:
gphoto2 gtkam
The following NEW packages will be installed:
darktable gtk2-engines libflickcurl0 libgphoto2-6 libgphoto2-port10 libjs-prototype libjs-scriptaculous
The following packages will be upgraded:
libgphoto2-l10n
1 upgraded, 7 newly installed, 0 to remove and 762 not upgraded.
Inst libflickcurl0 (1.25-1 Debian:unstable [amd64])
Inst libgphoto2-port10 (2.5.2-2 Debian:unstable [amd64])
Inst libgphoto2-6 (2.5.2-2 Debian:unstable [amd64])
Inst gtk2-engines (1:2.20.2-3 Debian:testing [amd64])
Inst libjs-prototype (1.7.1-3 Debian:testing [all])
Inst libjs-scriptaculous (1.9.0-2 Debian:testing [all])
Inst darktable (1.4-2+b1 Debian:unstable [amd64])
Inst libgphoto2-l10n [2.4.14-2.4] (2.5.2-2 Debian:unstable [all])
Conf libflickcurl0 (1.25-1 Debian:unstable [amd64])
Conf libgphoto2-port10 (2.5.2-2 Debian:unstable [amd64])
Conf libgphoto2-6 (2.5.2-2 Debian:unstable [amd64])
Conf gtk2-engines (1:2.20.2-3 Debian:testing [amd64])
Conf libjs-prototype (1.7.1-3 Debian:testing [all])
Conf libjs-scriptaculous (1.9.0-2 Debian:testing [all])
Conf darktable (1.4-2+b1 Debian:unstable [amd64])
Conf libgphoto2-l10n (2.5.2-2 Debian:unstable [all])
===
Additional notes
1- the apt-pinning proposed above works as-is meaning that if you have other rules in the preferences file (or if you had a preferences file before at all) you should be careful;
specially the rule
Code: Select all
Package: *
Pin: release o=Debian
Pin-Priority: 500
2- this is an interesting method to update one (a few maximum) needed app; if you realize that you are using this method to update most of the system you should consider run straight sid or give up on this method.