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|--listlists 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…
3 thoughts on “Debian/Ubuntu PHP packages and virtual hosts: introducing adminstance”