xref: /freebsd/usr.sbin/binmiscctl/binmiscctl.8 (revision fd45b686f9d92f583366c75b22c04c7ee49709c0)
1.\"-
2.\" Copyright (c) 2013 Stacey D. Son
3.\" All rights reserved.
4.\"
5.\" Redistribution and use in source and binary forms, with or without
6.\" modification, are permitted provided that the following conditions
7.\" are met:
8.\" 1. Redistributions of source code must retain the above copyright
9.\"    notice, this list of conditions and the following disclaimer.
10.\" 2. Redistributions in binary form must reproduce the above copyright
11.\"    notice, this list of conditions and the following disclaimer in the
12.\"    documentation and/or other materials provided with the distribution.
13.\"
14.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24.\" SUCH DAMAGE.
25.\"
26.\" Support for miscellaneous binary image activators
27.\"
28.Dd April 30, 2020
29.Dt BINMISCCTL 8
30.Os
31.Sh NAME
32.Nm binmiscctl
33.Nd manage binary image activators
34.Sh SYNOPSIS
35.Nm
36.Cm add
37.Ar name
38.Fl -interpreter
39.Ar path
40.Fl -magic
41.Ar magic
42.Fl -size
43.Ar size
44.Op Fl -mask Ar mask
45.Op Fl -offset Ar offset
46.Op Fl -set-enabled
47.Op Fl -pre-open
48.Nm
49.Cm disable
50.Ar name
51.Nm
52.Cm enable
53.Ar name
54.Nm
55.Cm list
56.Nm
57.Cm lookup
58.Ar name
59.Nm
60.Cm remove
61.Ar name
62.Sh DESCRIPTION
63The
64.Nm
65utility
66is the management utility for configuring miscellaneous binaries image
67activators in the kernel.
68It allows adding, deleting, disabling,
69enabling, and looking up interpreters.
70Also, all the interpreters can
71be listed.
72.Pp
73The first argument on the command line indicates the operation to be
74performed.
75Operation must be one of the following:
76.Bl -tag -width indent
77.It Xo
78.Cm add
79.Ar name
80.Fl -interpreter
81.Ar path
82.Fl -magic
83.Ar magic
84.Fl -size
85.Ar size
86.Op Fl -mask Ar mask
87.Op Fl -offset Ar offset
88.Op Fl -set-enabled
89.Op Fl -pre-open
90.Xc
91Add a new activator entry in the kernel.
92You must specify a
93unique
94.Ar name ,
95a
96.Ar path
97to the interpreter,
98header
99.Ar magic
100bytes that uniquely identify a suitable binary for the activator,
101and the
102.Ar size
103of the
104.Ar magic
105in bytes.
106.Pp
107Optionally, you may specify a
108.Ar mask
109to do a bitwise AND with the header bytes.
110This effectively allows you to ignore fields in the binary header that
111do not uniquely indentify the binary file's type.
112.Pp
113An
114.Ar offset
115may be specified for the magic bytes using the
116.Fl -offset
117option.
118By default the
119.Ar offset
120is zero.
121.Pp
122To enable the activator entry the
123.Fl -set-enabled
124option is used.
125The activator default state is disabled.
126.Pp
127To make the interpreter automatically available in jails and chroots,
128use the
129.Fl -pre-open
130option to allow the kernel to open the binary at configuration time
131rather then lazily when the the interpreted program is started.
132.Pp
133The interpreter
134.Ar path
135may also contain arguments for the interpreter including
136.Ar #a
137which gets replaced by the old
138.Dv argv0
139value in the interpreter string.
140.It Cm disable Ar name
141Disable the activator entry identified with
142.Ar name .
143.It Cm enable Ar name
144Enable the activator entry identified with
145.Ar name .
146.It Cm list
147Take a snapshot and print all the activator entries currently configured.
148.It Cm lookup Ar name
149Look up and print out the activator entry identified with
150.Ar name .
151.It Cm remove Ar name
152Remove the activator entry identified with
153.Ar name .
154.El
155.Sh EXAMPLES
156Add an image activator to run the LLVM interpreter
157.Po
158.Xr lli 1
159.Pc
160on bitcode
161compiled files and set its state to enabled.
162In this example
163.Ar #a
164is replaced with the old
165.Dv argv0
166value so that
167.Xr lli 1
168can fake its
169.Dv argv0 :
170.Bd -literal -offset indent
171# binmiscctl add llvmbc --interpreter ''/usr/bin/lli \e
172  --fake-argv0=#a'' --magic ''BC\\xc0\\xde'' --size 4 \e
173  --set-enabled
174.Ed
175.Pp
176Set the state of the
177.Ar llvmbc
178image activator to disabled:
179.Bd -literal -offset indent
180# binmiscctl disable llvmbc
181.Ed
182.Pp
183Set the state of the
184.Ar llvmbc
185image activator to enabled:
186.Bd -literal -offset indent
187# binmiscctl enable llvmbc
188.Ed
189.Pp
190Delete the
191.Ar llvmbc
192image activator:
193.Bd -literal -offset indent
194# binmiscctl remove llvmbc
195.Ed
196.Pp
197Look up and list the record for the
198.Ar llvmbc
199image activator:
200.Bd -literal -offset indent
201# binmiscctl lookup llvmbc
202.Ed
203.Pp
204Add QEMU bsd-user program as an image activator for ARM AARCH64 binaries:
205.Bd -literal -offset indent
206# binmiscctl add arm64 \e
207  --interpreter "/usr/local/bin/qemu-aarch64-static" \e
208  --magic "\ex7f\ex45\ex4c\ex46\ex02\ex01\ex01\ex00\ex00\ex00\e
209           \ex00\ex00\ex00\ex00\ex00\ex00\ex02\ex00\exb7\ex00" \e
210  --mask  "\exff\exff\exff\exff\exff\exff\exff\ex00\exff\exff\e
211           \exff\exff\exff\exff\exff\exff\exfe\exff\exff\exff" \e
212  --size 20 --set-enabled
213.Ed
214.Pp
215Add QEMU bsd-user program as an image activator for ARM little-endian binaries:
216.Bd -literal -offset indent
217# binmiscctl add armelf \e
218  --interpreter "/usr/local/bin/qemu-arm-static" \e
219  --magic "\ex7f\ex45\ex4c\ex46\ex01\ex01\ex01\ex00\ex00\ex00\e
220           \ex00\ex00\ex00\ex00\ex00\ex00\ex02\ex00\ex28\ex00" \e
221  --mask  "\exff\exff\exff\exff\exff\exff\exff\ex00\exff\exff\e
222           \exff\exff\exff\exff\exff\exff\exfe\exff\exff\exff" \e
223  --size 20 --set-enabled
224.Ed
225.Pp
226Add QEMU bsd-user program as an image activator for ARM big-endian binaries:
227.Bd -literal -offset indent
228# binmiscctl add armebelf \e
229  --interpreter "/usr/local/bin/qemu-arm-static" \e
230  --magic "\ex7f\ex45\ex4c\ex46\ex01\ex02\ex01\ex00\ex00\ex00\e
231           \ex00\ex00\ex00\ex00\ex00\ex00\ex00\ex02\ex00\ex28" \e
232  --mask  "\exff\exff\exff\exff\exff\exff\exff\ex00\exff\exff\e
233           \exff\exff\exff\exff\exff\exff\exff\exfe\exff\exff" \e
234  --size 20 --set-enabled
235.Ed
236.Pp
237Add QEMU bsd-user program as an image activator for MIPS32 binaries:
238.Bd -literal -offset indent
239# binmiscctl add mips32 \e
240  --interpreter "/usr/local/bin/qemu-mips-static" \e
241  --magic "\ex7f\ex45\ex4c\ex46\ex01\ex02\ex01\ex00\ex00\ex00\e
242           \ex00\ex00\ex00\ex00\ex00\ex00\ex00\ex02\ex00\ex08" \e
243  --mask  "\exff\exff\exff\exff\exff\exff\exff\ex00\exff\exff\e
244           \exff\exff\exff\exff\exff\exff\exff\exfe\exff\exff" \e
245  --size 20 --set-enabled
246.Ed
247.Pp
248Add QEMU bsd-user program as an image activator for MIPS64 binaries:
249.Bd -literal -offset indent
250# binmiscctl add mips64 \e
251  --interpreter "/usr/local/bin/qemu-mips64-static" \e
252  --magic "\ex7f\ex45\ex4c\ex46\ex02\ex02\ex01\ex00\ex00\ex00\e
253           \ex00\ex00\ex00\ex00\ex00\ex00\ex00\ex02\ex00\ex08" \e
254  --mask "\exff\exff\exff\exff\exff\exff\exff\ex00\exff\exff\e
255          \exff\exff\exff\exff\exff\exff\exff\exfe\exff\exff" \e
256  --size 20 --set-enabled
257.Ed
258.Pp
259Add QEMU bsd-user program as an image activator for PowerPC binaries:
260.Bd -literal -offset indent
261# binmiscctl add powerpc \e
262  --interpreter "/usr/local/bin/qemu-ppc-static" \e
263  --magic "\ex7f\ex45\ex4c\ex46\ex01\ex02\ex01\ex00\ex00\ex00\e
264           \ex00\ex00\ex00\ex00\ex00\ex00\ex00\ex02\ex00\ex14" \e
265  --mask  "\exff\exff\exff\exff\exff\exff\exff\ex00\exff\exff\e
266           \exff\exff\exff\exff\exff\exff\exff\exfe\exff\exff" \e
267  --size 20 --set-enabled
268.Ed
269.Pp
270Add QEMU bsd-user program as an image activator for PowerPC64 binaries:
271.Bd -literal -offset indent
272# binmiscctl add powerpc64 \e
273  --interpreter "/usr/local/bin/qemu-ppc64-static" \e
274  --magic "\ex7f\ex45\ex4c\ex46\ex02\ex02\ex01\ex00\ex00\ex00\e
275           \ex00\ex00\ex00\ex00\ex00\ex00\ex00\ex02\ex00\ex15" \e
276  --mask  "\exff\exff\exff\exff\exff\exff\exff\ex00\exff\exff\e
277           \exff\exff\exff\exff\exff\exff\exff\exfe\exff\exff" \e
278  --size 20 --set-enabled
279.Ed
280.Pp
281Add QEMU bsd-user program as an image activator for 64-bit RISC-V binaries:
282.Bd -literal -offset indent
283# binmiscctl add riscv64 \e
284  --interpreter "/usr/local/bin/qemu-riscv64-static" \e
285  --magic "\ex7f\ex45\ex4c\ex46\ex02\ex01\ex01\ex00\ex00\ex00\e
286           \ex00\ex00\ex00\ex00\ex00\ex00\ex02\ex00\exf3\ex00" \e
287  --mask  "\exff\exff\exff\exff\exff\exff\exff\ex00\exff\exff\e
288           \exff\exff\exff\exff\exff\exff\exfe\exff\exff\exff" \e
289  --size 20 --set-enabled
290.Ed
291.Ss "Create and use an ARMv6 chroot on an AMD64 host"
292Use an existing source tree to build a chroot host with architecture
293overrides:
294.Bd -literal -offset ident
295D=/path/to/chroot
296cd /usr/src
297mkdir -p $D
298make world TARGET=arm TARGET_ARCH=armv6 DESTDIR=$D
299make distribution TARGET=arm TARGET_ARCH=armv6 DESTDIR=$D
300.Ed
301.Pp
302With
303.Pa emulators/qemu-user-static
304from the
305.Fx
306Ports Collection, the emulator must be copied into the jail path
307specified in the
308.Nm
309command.
310Using the example above:
311.Bd -literal -offset -ident
312mkdir $D/usr/local/bin
313cp /usr/local/bin/qemu-arm-static $D/usr/local/bin
314.Ed
315.Pp
316Now the user can chroot into the environment normally, as root:
317.Bd -literal -offset -ident
318chroot $D
319.Ed
320.Sh SEE ALSO
321.Xr lli 1 ,
322.Xr execve 2 ,
323.Xr jail 8
324.Sh HISTORY
325The
326.Nm
327command was added in
328.Fx 10.1 .
329It was developed to support the imgact_binmisc kernel module.
330.Sh AUTHORS
331.An Stacey D Son Aq Mt sson@FreeBSD.org
332