Observation: Exherbo has no packages (by no packages, I mean it's only got a couple hundred)
Crazy motherfucking idea: Gentoo does (by does, I mean it's got thousands)
Possible solution: Use Exherbo's packages whenever possible, otherwise use a Gentoo ebuild
Implementation:
/etc/paludis/repositories:
3des repositories # cat arbor.conf unavailable.conf gentoo.conf
format = exheres
location = ${root}/var/db/paludis/repositories/arbor
profiles = ${location}/profiles/default-linux/x86/2007.0
sync = git://git.exherbo.org/arbor.git
format = unavailable
location = /var/db/paludis/repositories/unavailable
sync = tar+http://git.exherbo.org/exherbo_repositories.tar.bz2
importance = -50
format = ebuild
location = ${root}/var/db/paludis/repositories/gentoo
profiles = ${location}/profiles/default-linux/x86/2007.0
sync = rsync://rsync.gentoo.org/gentoo-portage/
importance = -100
eapi_when_unknown = 0
eapi_when_unspecified = 0
layout = traditional
profile_eapi = 0contents of /root/bin/fakeinstalls.sh
#!/bin/bash
for virt in `echo virtual/python virtual/editor virtual/c++-tr1-functional virtual/c++-tr1-memory virtual/c++-tr1-type-traits virtual/init virtual/libiconv virtual/libintl virtual/man virtual/dev-manager virtual/gzip virtual/libc virtual/modutils virtual/os-headers virtual/portage virtual/ssh virtual/pager` ; do importare --location /var/empty -i $virt;done
importare --location /var/empty -i sys-apps/baselayout 1.12.12
(That second line can be skipped if you actually have exherbo's baselayout installed... I wrote my own upstart scripts instead anticipating that annie will be more similar to upstart than sysvinit.)
contents of /root/bin/syncrepos.sh:
#!/bin/bash
REPOLOC=`paludis --configuration-variable arbor location | sed s/arbor//`
paludis -s
#ciaranm told me to do it right
#cd ${REPOLOC}gentoo
#ls *-* -d > ./metadata/categories.conf
#echo "virtual" >> ./metadata/categories.conf
#ln -s . packages
cd ${REPOLOC}arbor/packages
for pkg in */*; do rm -r ../../gentoo/$pkg; done
cd ${REPOLOC}unavailable
for pkg in `grep -h /$ *`; do if [ -e ../gentoo/$pkg ] ; then cat=$pkg; else rm -r ../gentoo/$cat$pkg; fi; done
paludis --regenerate-installable-cache
(This script makes rampant assumptions about the layout of your repository directories... you must have arbor as arbor, gentoo's repo as gentoo and the unavailable stuff in a directory called unavailable.)
Obviously, there is room for improvement... if anyone were to find that desirable.
Install:
1) Install exherbo
2) Add the unavailable repository to /etc/paludis/repositories as above
3) Add gentoo's repository to /etc/paludis/repositories as above
4) Run /root/bin/syncrepos.sh
5) Run /root/bin/fakeinstalls.sh
6) Call your distribution exhertoo
7) Shield yourself from both the gentoo and exherbo teams, both of whom now dislike you (hi guys!)
Exhertoo in action:
The world still works:
3des ~ # paludis -ip world
Building target list...
Building dependency list...
These packages will be installed:
Total: 0 packages
I can install packages from gentoo that don't exist in exherbo:
3des ~ # paludis -ip cfg-update
Building target list...
Building dependency list...
These packages will be installed:
* app-portage/cfg-update [N 1.8.2-r1]
"Easy to use GUI & CLI alternative for etc-update with safe automatic updating functionality"
-gnome -kde
161.03 kBytes to download
Total: 1 package (1 new), 161.03 kBytes to download
Use flags:
* gnome:
* kde:
* No unread news items found
Paludis lets me know if a dependency can be installed from an exherbo repository I'm not using yet:
3des ~ # paludis -ip blender
Building target list...
Building dependency list...
Query error:
* In program paludis -ip blender:
* When performing install action from command line:
* When executing install task:
* When building dependency list:
* When adding PackageDepSpec 'media-gfx/blender':
* When adding package 'media-gfx/blender-2.46-r1:0::gentoo':
* When adding build dependencies as pre dependencies:
* When adding PackageDepSpec 'x11-libs/libXt':
* All versions of 'x11-libs/libXt' are masked. Candidates are:
* x11-libs/libXt-1.0.4:0::unavailable (in ::x11): Masked by unavailable (In a repository which is unavailable)
* No unread news items found
The full dependency list of a package quite easily transcends distributions. Trac pulls dependencies from gentoo that don't exist in exherbo, yet dependencies that do are pulled from exherbo repositories:
3des ~ # paludis --dl-reinstall always -ip trac
Building target list...
Building dependency list...
These packages will be installed:
* dev-libs/expat::arbor [R 2.0.1]
Reasons: dev-lang/python-2.5.2-r4:2.5::arbor
* sys-libs/zlib::arbor [R 1.2.3]
Reasons: dev-lang/python-2.5.2-r4:2.5::arbor
* dev-libs/openssl::arbor [R 0.9.8f]
Reasons: dev-lang/python-2.5.2-r4:2.5::arbor
* sys-devel/automake-wrapper::arbor [R 0.1]
Reasons: sys-devel/automake-1.10.1:1.10::arbor
* sys-devel/automake::arbor :1.10 [R 1.10.1]
Reasons: dev-lang/python-2.5.2-r4:2.5::arbor
-slowtests
* perl-core/PodParser::arbor [R 1.35]
Reasons: dev-lang/perl-5.8.8-r1:0::arbor
* dev-lang/perl::arbor [R 5.8.8-r1]
Reasons: dev-perl/Locale-gettext-1.05:0::arbor
* dev-perl/Locale-gettext::arbor [R 1.05]
Reasons: sys-apps/help2man-1.36.4:0::arbor
* sys-apps/help2man::arbor [R 1.36.4]
Reasons: sys-devel/autoconf-2.61:2.5::arbor
* sys-devel/autoconf-wrapper::arbor [R 0.1]
Reasons: sys-devel/autoconf-2.61:2.5::arbor
* sys-devel/autoconf::arbor :2.5 [R 2.61]
Reasons: dev-lang/python-2.5.2-r4:2.5::arbor
-slowtests
* sys-devel/libtool::arbor [R 1.5.26]
Reasons: dev-lang/python-2.5.2-r4:2.5::arbor
* dev-lang/python::arbor :2.5 [R 2.5.2-r4]
Reasons: dev-python/docutils-0.4-r3:0::gentoo, dev-python/genshi-0.5.1:0::gentoo, 4 more
-berkdb -examples -gdbm ipv6 -ncurses readline sqlite ssl -tk
* dev-python/setuptools [N 0.6_rc8-r1]
Reasons: *dev-python/docutils-0.4-r3:0::gentoo, *dev-python/genshi-0.5.1:0::gentoo, 2 more
"A collection of enhancements to the Python distutils including easy install"
245.00 kBytes to download
* app-admin/webapp-config [N 1.50.16-r3]
Reasons: *www-apps/trac-0.11_beta2:0::gentoo
"Gentoo's installer for web-based applications"
101.15 kBytes to download
* dev-python/genshi [N 0.5.1]
Reasons: *www-apps/trac-0.11_beta2:0::gentoo
"Python toolkit for stream-based generation of output for the web."
-doc -examples
296.82 kBytes to download
* dev-python/pygments [N 0.10]
Reasons: *www-apps/trac-0.11_beta2:0::gentoo
"Pygments is a syntax highlighting package written in Python."
-doc
816.63 kBytes to download
* dev-python/docutils [N 0.4-r3]
Reasons: *www-apps/trac-0.11_beta2:0::gentoo
"Set of python tools for processing plaintext docs into HTML, XML, etc..."
-emacs -glep
1.18 MBytes to download
* dev-python/pytz [N 2008a]
Reasons: *www-apps/trac-0.11_beta2:0::gentoo
"World Timezone Definitions for Python"
158.98 kBytes to download
* www-apps/trac [N 0.11_beta2]
"Trac is a minimalistic web-based project management, wiki and bug/issue tracking system."
-cgi -fastcgi -mysql -postgres sqlite -subversion -vhosts
628.98 kBytes to download
Total: 20 packages (7 new, 13 rebuilds), 3.38 MBytes to download
Use flags:
* cgi:
* doc:
* emacs:
* examples:
* fastcgi:
* glep:
* mysql:
* postgres:
* sqlite:
* subversion:
* vhosts:
* No unread news items found
The number of packages I can install (or at least attempt to) is greatly increased:
3des ~ # paludis --list-packages | grep arbor | wc -l
247
3des ~ # paludis --list-packages | grep unavailable | wc -l
469
3des ~ # paludis --list-packages | grep gentoo | wc -l
12318
One of the most notable places for improvement:
If the paludis devs don't simply just want to kill me, they could make this considerably easier by allowing a user to declare a repo's packages shouldn't be considered if they're found in a repo of greater importance. Perhaps an exclude variable?
(You'll notice my sync script currently just deletes all the packages out of the gentoo repository that exist in the exherbo ones... we hope these packages happen to be named the same and are in the same categories. This is likely to break in much more noticeable ways in the future.)
And finally... let me conclude by warning you that this setup will eat babies and induce your computer to spontaneously catch fire.