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 | |
---|