1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
shoelaces(8)
# NAME
shoelaces - automated server bootstrapping
# SYNOPSIS
*shoelaces* [options...]
# OPTIONS
*-config* <config>
Specifies a config file. All the following options can be specified in
the config.
*-data-dir* <directory>
Specifies a directory with mappings, configs, templates, etc.
*-debug*
Enables debug mode.
*-domain* <hostname>
Specifies the address where the server is going to listen.
Defaults to "localhost".
*-env-dir* <directory>
Specifies a directory with environment overrides. Refer to the README of
the project for more information about environment overrides.
*-mappings-file* <file>
Specifies a mappings YAML file. Defaults to "mappings.yaml". Refer to the
README of the project for more information about mappings.
*-port* <port>
Specifies the port where the server is going to listen.
Defaults to 8080.
*-static-dir* <directory>
Specifies a custom web directory with static files. Defaults to "web".
*-template-extension* <extension>
Shoelaces template extension. Defaults to ".slc".
# DESCRIPTION
Shoelaces serves over HTTP iPXE boot scripts, cloud-init configuration, and
any other configuration files to baremetal or virtual machines booting
using iPXE. It also does a few other things to make easier managing server
deployments:
- Has a simple but nice UI to show the current configuration, and history
of servers that booted.
- Uses Go templates to handle complex configurations.
- Allows specifying the boot entry point for a given server based on its IP
address or DNS PTR record.
- Supports the notion of environments for Development and Production
environment configurations, while trying to minimize template
duplication.
- Puts unknown servers into iPXE script boot retry loop, while at the same
time showing them in the UI allowing the user to select a specific boot
configuration.
Shoelaces is better when used along a DHCP server. Refer to the
*CONFIGURATION* section for examples on how to configure a DHCP server for
hooking it with Shoelaces.
# CONFIGURATION
Shoelaces searches for a config file whenever the *-config* flag is
specified.
Here is example config file:
```
port=8081
domain=localhost
data-dir=/etc/shoelaces/data-dir/
template-extension=.slc
mappings-file=mappings.yaml
debug=true
```
*dhcpd*(8) can be hooked with Shoelaces by adding the following snippet in
*dhcpd.conf*(5):
```
# dhcp.conf
next-server <your-tftp-server>;
if exists user-class and option user-class = "iPXE" {
filename "http://<shoelaces-server>/poll/1/${netX/mac:hexhyp}";
} else {
filename "undionly.kpxe";
}
```
Similarly, *dnsmasq*(8) can be configured for working with Shoelaces with
the following snippet:
```
dhcp-match=set:ipxe,175 # iPXE sends a 175 option.
dhcp-boot=tag:!ipxe,undionly.kpxe
dhcp-boot=http://<shoelaces-server>/poll/1/${netX/mac:hexhyp}
```
A TFTP server such as *tftpd*(8) must be configured to serve the IPXE ROM,
*undionly.kpxe*.
# SEE ALSO
*dhcpd*(8) *dhcpd.conf*(5) *dnsmasq*(8) *tftpd*(8)
# AUTHORS
Maintained by ThousandEyes Inc. <opensource@thousandeyes.com>.
Up-to-date sources can be found at https://github.com/thousandeyes/shoelaces.
Bugs reports and patches can be submitted via GitHub's interface or
contacting the maintainers directly via email.
|