As a short term way to deal with my Debian/Ubuntu PHP packages and virtual hosts issue, I have written a pretty crude Python script that I have called « adminstance« .
This script can currently install, update and remove an instance of a web package such as websvn:
vdv@studio:~/Documents/Dyomedea/code/adminstance$ ./adminstance
Usages:
adminstance -h|--help
print this message
adminstance -l|--list
lists the installed instances for this directory
adminstance -i|--install [-f|--force]
installs an instance for a root directory
adminstance -u|--update [-f|--force]
updates an instance for a root directory
adminstance -r|--remove [-f|--force] [-p|--purge]
removes an instance for a root directory
Options:
-i, --install : action = installation
-f, --force : when action = install, update or remove, install
without prompting the user for a confirmation
-h, --help : prints this message
-l, --list : action = list
-p, --purge : when action = remove, remove also files and directories
under /var and /etc (by default, these are preserved)
-r, --remove : action = remove
-u, --update : action = update
To install an instance of websvn named « foo », type:
vdv@studio:~/Documents/Dyomedea/code/adminstance$ sudo ./adminstance -i /usr/share/websvn/ foo
[sudo] password for vdv:
install an instance of /usr/share/websvn/ named foo? (y|N) y
Copying /var/cache/websvn to /var/cache/adminstance/websvn/foo
Copying /usr/share/websvn to /usr/share/adminstance/websvn/foo
Copying /etc/websvn to /etc/adminstance/websvn/foo
Creating a symlink from /etc/adminstance/websvn/foo/config.php to /usr/share/adminstance/websvn/foo/include/config.php
Creating a symlink from /var/cache/adminstance/websvn/foo/tmp to /usr/share/adminstance/websvn/foo/temp
Creating a symlink from /var/cache/adminstance/websvn/foo to /usr/share/adminstance/websvn/foo/cache
Creating a symlink from /etc/adminstance/websvn/foo/wsvn.php to /usr/share/adminstance/websvn/foo/wsvn.php
To update it if you get a new version of websvn:
vdv@studio:~/Documents/Dyomedea/code/adminstance$ sudo ./adminstance -u /usr/share/websvn/ foo
update an instance of /usr/share/websvn/ named foo? (y|N) y
Synchronizing /usr/share/websvn to /usr/share/adminstance/websvn/foo
rsync -a --delete /usr/share/websvn/ /usr/share/adminstance/websvn/foo/
Creating a symlink from /etc/adminstance/websvn/foo/config.php to /usr/share/adminstance/websvn/foo/include/config.php
Creating a symlink from /var/cache/adminstance/websvn/foo/tmp to /usr/share/adminstance/websvn/foo/temp
Creating a symlink from /var/cache/adminstance/websvn/foo to /usr/share/adminstance/websvn/foo/cache
Creating a symlink from /etc/adminstance/websvn/foo/wsvn.php to /usr/share/adminstance/websvn/foo/wsvn.php
To list the instances of websvn:
vdv@studio:~/Documents/Dyomedea/code/adminstance$ sudo ./adminstance -l /usr/share/websvn/
List of instances for the package websvn:
bar
foo
To remove the instance foo:
dv@studio:~/Documents/Dyomedea/code/adminstance$ sudo ./adminstance -r /usr/share/websvn/ foo
remove an instance of /usr/share/websvn/ named foo? (y|N) y
Deleting /usr/share/adminstance/websvn/foo
rm -r /usr/share/adminstance/websvn/foo
To remove it including its directory under /etc and /var:
vdv@studio:~/Documents/Dyomedea/code/adminstance$ sudo ./adminstance -rp /usr/share/websvn/ foo
remove an instance of /usr/share/websvn/ named foo? (y|N) y
Deleting /var/cache/adminstance/websvn/foo
rm -r /var/cache/adminstance/websvn/foo
Deleting /usr/share/adminstance/websvn/foo
rm -r /usr/share/adminstance/websvn/foo
Deleting /etc/adminstance/websvn/foo
rm -r /etc/adminstance/websvn/foo
It’s pretty basic and has a few limitations but that should be enough for me for the moment.
In the longer term, it should be possible to pack it as a .deb that uses dpkg triggers to automate the update of all its instances when a package is updated through apt…