GNU Stow¶
Introduction¶
I use GNU Stow to install locally the latest version of a handful of open source projects I care about.
I also use it to manage my dotfiles:
This page is a memo about the usage I make of the tool.
Filesystem layout¶
I install my packages in ~/pkg/stow/<package[-version]>
.
~/pkg/bin
is added to the PATH
,
it precedes the system binaries’ search paths.
~/.profile
excerpt:
# User's Stow packages
if [ -d "$HOME/pkg/bin" ]; then
PATH="$HOME/pkg/bin:$PATH"
fi
General cooking recommendations¶
The official recommendations are available in the manual:
This link also explains why it is necessary sometimes
to make the package believe it is installed to ~/pkg
and not ~/pkg/stow/<package>
.
CMake¶
Generic recipe:
cmake -G Ninja -DCMAKE_INSTALL_PREFIX=$HOME/pkg/stow/<package> <args...>
ninja
ninja install
cd ~/pkg/stow
stow <package>
GNU Build System¶
Generic recipe:
configure --prefix=$HOME/pkg <args...>
make
make install prefix=$HOME/pkg/stow/<package>
cd ~/pkg/stow
stow <package>
Troubleshooting¶
Some packages do not only add new files, but sometimes update some files.
GNU Info for example, has an index file in share/info/dir
.
Emacs and mu4e conflicts on this, example:
$ stow emacs-25.1-rc2
WARNING! stowing emacs-25.1-rc2 would cause conflicts:
* existing target is stowed to a different package: share/info/dir => ../../stow/mu/share/info/dir
All operations aborted.
$
To get rid of the issue:
$ cat <<'EOF' > .stowrc
--ignore=share/info/dir
EOF
Recipes¶
ag¶
Import public key (http://geoff.greer.fm/ag/):
gpg --import ggreer_gpg_key.asc
Debian prerequisites:
sudo apt-get install automake pkg-config libpcre3-dev zlib1g-dev liblzma-dev
Recipe:
gpg --verify the_silver_searcher-0.32.0.tar.gz.asc
tar xaf the_silver_searcher-0.32.0.tar.gz
./configure --prefix=$HOME/pkg
make
make install prefix=$HOME/pkg/stow/ag-0.32.0
cd ~/pkg/stow/
stow ag-0.32.0
emacs¶
Download: https://www.gnu.org/software/emacs/download.html
I don’t think the instructions from the manual are still relevant, it seems they were written for Emacs 19.31, but it might be a good idea to check if that changed:
https://www.gnu.org/software/stow/manual/stow.html#GNU-Emacs
Since the 24.5 release, tarballs are signed with the GPG key from Nicolas Petton
7C207910
, fingerpint28D3 BED8 51FD F3AB 57FE F93C 2335 87A4 7C20 7910
, which can be found in the GNU keyring.
Get GPG key:
gpg --keyserver hkp://keys.gnupg.net --recv-keys 7C207910
Recipe:
gpg --verify emacs-25.1-rc2.tar.xz.sig
unxz emacs-25.1-rc2.tar.xz
tar xaf emacs-25.1-rc2.tar
mkdir emacs-25.1-build
cd emacs-25.1-build
# install necessary dependencies (e.g: apt-get install build-dep emacs24)
# enable module support,
# xwidget (requires libwebkitgtk-3.0-dev ubuntu, webkitgtk arch)
../emacs-25.1/configure --with-modules --with-xwidgets --prefix=$HOME/pkg/
make -j9
make prefix=$HOME/pkg/stow/emacs-25.1-rc2 install
cd ~/pkg/stow
stow emacs-25.1-rc2
git¶
Download: https://www.kernel.org/pub/software/scm/git/
Build instructions: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git#Installing-from-Source
Recipe:
gpg --keyserver hkp://keys.gnupg.net --recv-keys 96AFE6CB
unxz git-2.9.2.tar.xz
gpg --verify git-2.9.2.tar.sign
tar xaf git-2.9.2.tar
cd git-2.9.2
# install necessary dependencies (zlib, ssl, ...), e.g: using apt-get build-dep git
make configure
./configure --prefix=$HOME/pkg/stow/git-2.9.2
make all doc info -j9
make install install-doc install-info
cd ~/pkg/stow
stow git-2.9.2
mu4e¶
Recipe:
git clone git://github.com/djcb/mu.git
env CC=clang CXX=clang++ autoreconf -i
env CC=clang CXX=clang++ ./configure --prefix=$HOME/pkg
make -j9
make install prefix=$HOME/pkg/stow/mu
cd ~/pkg/stow
stow mu
Emacs Configuration:
(add-to-list 'load-path "~/pkg/share/emacs/site-lisp/mu4e")
repo¶
Recipe:
mkdir -p ~/pkg/stow/repo/bin
wget 'https://storage.googleapis.com/git-repo-downloads/repo' -O ~/pkg/stow/repo/bin/repo
chmod a+x ~/pkg/stow/repo/bin/repo
cd ~/pkg/stow
stow repo
sourceweb¶
make install prefix=<path>
is not satisfied like,
however it is not an issue for this program
to be installed in the ~/pkg/stow/<package>
directory.
Recipe:
./configure --prefix=$HOME/pkg/stow/sourceweb
make
make install
cd ~/pkg/stow
stow sourceweb