| 1 | Downloads and installs an ASDF or a MK:DEFSYSTEM system or anything | 
|---|
| 2 | else that looks convincingly like one. It updates the | 
|---|
| 3 | ASDF:*CENTRAL-REGISTRY* symlinks for all the toplevel .asd files it | 
|---|
| 4 | contains, and it also MK:ADD-REGISTRY-LOCATION for the appropriate | 
|---|
| 5 | directories for MK:DEFSYSTEM. | 
|---|
| 6 |  | 
|---|
| 7 | Please read this file before use: in particular: this is an automatic | 
|---|
| 8 | tool that downloads and compiles stuff it finds on the 'net.  Please | 
|---|
| 9 | look at the SECURITY section and be sure you understand the | 
|---|
| 10 | implications | 
|---|
| 11 |  | 
|---|
| 12 |  | 
|---|
| 13 | = USAGE | 
|---|
| 14 |  | 
|---|
| 15 | This can be used either from within a CL implementation: | 
|---|
| 16 |  | 
|---|
| 17 | cl-prompt> (load "/path/to/load-asdf-install.lisp") | 
|---|
| 18 | cl-prompt> (asdf-install:install 'xlunit) ; for example | 
|---|
| 19 |  | 
|---|
| 20 | With SBCL you can also use the standalone command `sbcl-asdf-install' | 
|---|
| 21 | from the shell: | 
|---|
| 22 |  | 
|---|
| 23 | $ sbcl-asdf-install xlunit | 
|---|
| 24 |  | 
|---|
| 25 |  | 
|---|
| 26 | Each argument may be - | 
|---|
| 27 |  | 
|---|
| 28 | - The name of a cliki page.  asdf-install visits that page and finds | 
|---|
| 29 | the download location from the `:(package)' tag - usually rendered | 
|---|
| 30 | as "Download ASDF package from ..." | 
|---|
| 31 |  | 
|---|
| 32 | - A URL, which is downloaded directly | 
|---|
| 33 |  | 
|---|
| 34 | - A local tar.gz file, which is installed | 
|---|
| 35 |  | 
|---|
| 36 |  | 
|---|
| 37 | = SECURITY CONCERNS: READ THIS CAREFULLY | 
|---|
| 38 |  | 
|---|
| 39 | When you invoke asdf-install, you are asking your CL implementation to | 
|---|
| 40 | download, compile, and install software from some random site on the | 
|---|
| 41 | web.  Given that it's indirected through a page on CLiki, any | 
|---|
| 42 | malicious third party doesn't even need to hack the distribution | 
|---|
| 43 | server to replace the package with something else: he can just edit | 
|---|
| 44 | the link. | 
|---|
| 45 |  | 
|---|
| 46 | For this reason, we encourage package providers to crypto-sign their | 
|---|
| 47 | packages (see details at the URL in the PACKAGE CREATION section) and | 
|---|
| 48 | users to check the signatures.  asdf-install has three levels of | 
|---|
| 49 | automatic signature checking: "on", "off" and "unknown sites", which | 
|---|
| 50 | can be set using the configuration variables described in | 
|---|
| 51 | CUSTOMIZATION below.  The default is "unknown sites", which will | 
|---|
| 52 | expect a GPG signature on all downloads except those from | 
|---|
| 53 | presumed-good sites.  The current default presumed-good sites are | 
|---|
| 54 | CCLAN nodes, and two web sites run by SBCL maintainers: again, see | 
|---|
| 55 | below for customization details | 
|---|
| 56 |  | 
|---|
| 57 |  | 
|---|
| 58 | = CUSTOMIZATION | 
|---|
| 59 |  | 
|---|
| 60 | If the file $HOME/.asdf-install exists, it is loaded.  This can be | 
|---|
| 61 | used to override the default values of exported special variables. | 
|---|
| 62 | Presently these are | 
|---|
| 63 |  | 
|---|
| 64 | *PROXY* | 
|---|
| 65 | defaults to $http_proxy environment variable | 
|---|
| 66 | *CCLAN-MIRROR* | 
|---|
| 67 | preferred/nearest CCLAN node.  See the list at | 
|---|
| 68 | http://ww.telent.net/cclan-choose-mirror | 
|---|
| 69 | *ASDF-INSTALL-DIRS* | 
|---|
| 70 | Set from ASDF_INSTALL_DIR environment variable.  If you are running | 
|---|
| 71 | SBCL, then *ASDF-INSTALL-DIRS* may be set form the environment variable | 
|---|
| 72 | SBCL_HOME, which should already be correct for whatever SBCL is | 
|---|
| 73 | running, if it's been installed correctly.  This is done for | 
|---|
| 74 | backward compatibility with SBCL installations. | 
|---|
| 75 | *SBCL-HOME* | 
|---|
| 76 | This is actually a symbol macro for *ASDF-INSTALL-DIRS* | 
|---|
| 77 | *VERIFY-GPG-SIGNATURES* | 
|---|
| 78 | Verify GPG signatures for the downloaded packages? | 
|---|
| 79 | NIL - no, T - yes, :UNKNOWN-LOCATIONS - only for URLs which aren't in CCLAN | 
|---|
| 80 | and don't begin with one of the prefixes in *SAFE-URL-PREFIXES* | 
|---|
| 81 | *LOCATIONS* | 
|---|
| 82 | Possible places in the filesystem to install packages into.  See default | 
|---|
| 83 | value for format | 
|---|
| 84 | *SAFE-URL-PREFIXES* | 
|---|
| 85 | List of locations for which GPG signature checking /won't/ be done when | 
|---|
| 86 | *verify-gpg-signatures* is :unknown-locations | 
|---|
| 87 |  | 
|---|
| 88 |  | 
|---|
| 89 | = PACKAGE CREATION | 
|---|
| 90 |  | 
|---|
| 91 | If you want to create your own packages that can be installed using this | 
|---|
| 92 | loader, see the "Making your package downloadable..." section at | 
|---|
| 93 | <http://www.cliki.net/asdf-install> | 
|---|
| 94 |  | 
|---|
| 95 |  | 
|---|
| 96 | = HACKERS NOTE | 
|---|
| 97 |  | 
|---|
| 98 | Listen very carefully: I will say this only as often as it appears to | 
|---|
| 99 | be necessary to say it.  asdf-install is not a good example of how to | 
|---|
| 100 | write a URL parser, HTTP client, or anything else, really. | 
|---|
| 101 | Well-written extensible and robust URL parsers, HTTP clients, FTP | 
|---|
| 102 | clients, etc would definitely be nice things to have, but it would be | 
|---|
| 103 | nicer to have them in CCLAN where anyone can use them - after having | 
|---|
| 104 | downloaded them with asdf-install - than in SBCL contrib where they're | 
|---|
| 105 | restricted to SBCL users and can only be updated once a month via SBCL | 
|---|
| 106 | developers.  This is a bootstrap tool, and as such, will tend to | 
|---|
| 107 | resist changes that make it longer or dependent on more other | 
|---|
| 108 | packages, unless they also add to its usefulness for bootstrapping. | 
|---|
| 109 |  | 
|---|
| 110 |  | 
|---|
| 111 | = TODO | 
|---|
| 112 |  | 
|---|
| 113 | a) gpg signature checking would be better if it actually checked against | 
|---|
| 114 | a list of "trusted to write Lisp" keys, instead of just "trusted to be | 
|---|
| 115 | who they say they are" | 
|---|
| 116 |  | 
|---|
| 117 | e) nice to have: resume half-done downloads instead of starting from scratch | 
|---|
| 118 | every time.  but right now we're dealing in fairly small packages, this is not | 
|---|
| 119 | an immediate concern | 
|---|
| 120 |  | 
|---|
| 121 |  | 
|---|