15
|
1
|
{{{header(infra/quickstart, |
|
2
|
Richard Westhaver, |
|
3
|
ellis@rwest.io, |
|
4
|
Infra Quickstart Guide)}}} |
16
|
5
|
#+property: header-args :dir /home/ellis/dev/comp/infra/ |
15
|
6
|
|
20
|
7
|
The CC =infra= project can be thought of as one big Makefile, and |
|
8
|
currently it is one. |
|
9
|
|
|
10
|
- *Host Requirements* |
19
|
11
|
- x86_64 4 core CPU |
|
12
|
- 8G RAM |
|
13
|
- 32G Disk Space |
20
|
14
|
- Linux kernel |
|
15
|
|
|
16
|
- *Minimum Dependencies* |
|
17
|
- mercurial |
|
18
|
- git |
|
19
|
- clang |
|
20
|
- zstd |
|
21
|
|
|
22
|
* TODO check.sh |
|
23
|
Check that the current host is a qualified builder. |
19
|
24
|
|
20
|
25
|
This will interrogate the system, checking for minimum |
|
26
|
requirements. If any requirement isn't met an error is |
|
27
|
signaled. Environment variables are also reported here, but not |
|
28
|
set. On completion, the file =host.sxp= is written to the current |
|
29
|
directory. |
16
|
30
|
|
20
|
31
|
The minimum software dependencies above should be installed via your |
|
32
|
system's package manager. The remaining dependencies are installed via |
|
33
|
the =install.sh= script. |
|
34
|
|
15
|
35
|
#+begin_src shell |
20
|
36
|
./check.sh |
15
|
37
|
#+end_src |
18
|
38
|
|
20
|
39
|
* TODO profile.sh |
|
40
|
Provision a pre-configured profile for this host. |
|
41
|
|
|
42
|
The default profile builds most dependencies from source. Depending on |
|
43
|
your hardware this can take a very long time and may not be |
|
44
|
appropriate anyway. For example a 'guest' builder may want to be |
|
45
|
provisioned some dependencies from the host and install cached |
|
46
|
binaries. |
|
47
|
|
|
48
|
This script |
|
49
|
* TODO install.sh |
|
50
|
Install core dependencies. |
|
51
|
|
|
52
|
This script may install any of the following depending on |
|
53
|
=profile.sxp=: |
18
|
54
|
|
20
|
55
|
- shared libraries and headers |
|
56
|
- rocksdb |
|
57
|
- tree-sitter |
|
58
|
- tree-sitter-langs |
|
59
|
- programs |
|
60
|
- emacs |
|
61
|
- rust |
|
62
|
- sbcl |
|
63
|
- core-progs |
|
64
|
- skel |
|
65
|
- packy |
|
66
|
- system packages |
|
67
|
- imagemagick |
|
68
|
- giflib |
|
69
|
- libgccjit |
|
70
|
- uutils-coreutils |
|
71
|
- wireguard-tools |
|
72
|
- openssl |
|
73
|
- linux-headers |
|
74
|
- liburing |
|
75
|
- libxkbcommon |
|
76
|
- podman |
|
77
|
|
|
78
|
* TODO bootstrap.sh |
|
79
|
Bootstrap the core. |
|
80
|
|
|
81
|
- download the compressed =infra= lisp core from |
|
82
|
https://packy.compiler.company |
|
83
|
- compile and load =bootstrap.lisp= |
|
84
|
|
|
85
|
Upon completion a local =stash= directory is provisioned. At this |
|
86
|
point we no longer need to depend on shell scripting as we have a |
|
87
|
fully interactive Lisp environment to hack on our builds with. |
|
88
|
|
|
89
|
From here, you may run =skel inspect= to inspect the infra =skelfile= |
|
90
|
and select a target to build on your machine or in a container. Use |
|
91
|
=skel --help= for a list of other commands. |
|
92
|
|
|
93
|
* TODO deploy.lisp |
|
94
|
Deploy =infra= builds to a remote. |
|
95
|
|
|
96
|
Deployment involves 'packing' a target found in =stash=, archiving it, |
|
97
|
compressing it, and sending it to a remote location possibly with a |
|
98
|
signature, checksum, or other metadata, and possibly encrypted. A |
|
99
|
'package' may also be a raw directory of plain-text files. It's a very |
|
100
|
loose term. Where the package ends up and how it is packed depends on |
|
101
|
the build-config and skelfile slots. |
|
102
|
|
|
103
|
Production deployments end up at https://packy.compiler.company. |