splice
is tool which eases the task of maintaining a built-from-source local repository of software on unix-like systems. The typical use-case would be creating a /usr/local
-style hierarchy of symlinks from an /opt
-style directory tree.
splice
is intended as a replacement for graft.
splice
is open-source software released under the terms of the MIT license.
splice
is written in Python.
splice
consists of three utilities: splice
, unsplice
, and prune
.
Example: installing foo-1.0:
wget -O - http://website.domain.tld/foo-1.0.tar.gz | gunzip | tar x
cd foo-1.0
./configure --prefix=~/opt/foo-1.0
make
make install
splice ~/opt/foo-1.0 ~/local
Example: upgrading to foo-2.0:
wget -O - http://website.domain.tld/foo-2.0.tar.gz | gunzip | tar x
cd foo-2.0
./configure --prefix=~/opt/foo-2.0
make
make install
unsplice ~/opt/foo-1.0 ~/local
splice ~/opt/foo-2.0 ~/local
unsplice
will remove symlinks, but not regular files. prune
is a more powerful / less safe tool for removing files which have been directly installed into ~/local. If you have been in the habit of installing software directly into ~/local
, you will need to use prune
as you transition towards splicing installations from ~/opt
into ~/local
.
wget -O - http://website.domain.tld/foo-2.0.tar.gz | gunzip | tar x
cd foo-2.0
./configure --prefix=~/opt/foo-2.0
make
make install
prune ~/opt/foo-2.0 ~/local
splice ~/opt/foo-2.0 ~/local
This would create a directory ~/local/.pruned/home_<user>_opt_foo-2.0~<datestring>~<uniquestring>
which would contain all of the files which would have conflicted with foo-2.0.
This arrangement makes it easy to "undo" the prune later (just rsync the .pruned
directory back into its original location).
- 0.10 (October 20th, 2015)
cd /tmp
wget -O - https://github.com/pepaslabs/splice/archive/0.10.tar.gz | gunzip | tar x
mkdir -p ~/opt
mv splice-0.10 ~/opt/
cd ~/opt/splice-0.10/bin
./splice ~/opt/splice-0.10/bin ~/local/bin
Make sure ~/local/bin
is in your $PATH
.
Changes:
- Tweaks to conflict warning output formatting.
Changes:
- None (Publishing to github).
Changes:
- Fixed incorrect handling of '/' as the destination directory.
Changes:
- Decided on policy of not touching symlinks to dirs in unsplice.
Changes:
- Fixed another symlink-related bug.
Changes:
- Fixed bug in how symlinks which point to dirs are handled
Changes:
- Explicitly use python2.5
Changes:
unsplice
no longer attempts to remove mountpoints
Changes:
- First public release