aboutsummaryrefslogtreecommitdiff
path: root/share/man/man8/picobsd.8
blob: b85b71472212452bb6d0ce6b06f24a0a8480b713 (plain) (blame)
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
.\" -*- nroff-fill -*-
.\" $FreeBSD$
.Dd December 23, 1999
.Os FreeBSD
.Dt PicoBSD 8
.Sh NAME
.Nm PicoBSD
.Nd Floppy disk based FreeBSD system
.Sh SYNOPSIS
.Nm
is a minimal implementation of
.Fx
on one or more floppy disks.  The
floppies are required for loading only; the system runs from ramdisk and is thus
not limited to the speed of the floppies.
.Sh DESCRIPTION
The first (and only required)
.Nm
floppy contains a compressed kernel and compressed MFS root file system, as well
as some files in the
.Pa /etc
directory.  The system loads the kernel in the normal way, uncompresses the file
system and mounts it as root.  It then copies the files in the floppy
.Pa /etc
directory to the MFS
.Pa /etc
directory and executes a specialized version
.Pa /etc/rc .
The standard version of
.Pa /etc/rc
prompts for additional floppies and reads them in to the MFS file system.
.Sh ENVIRONMENT
As a result of the extreme size limitations, the
.Nm 
environment differs from the normal
.Fx
in a number of ways:
.Bl -bullet
.It
There are no dynamic libraries, and there is no directory
.Pa /usr/lib .
As a result, only static executables may be executed.
.It
In order to reduce the size of the executables, all executables on a specific
floppy are joined together as a single executable built with
.Xr crunchgen 1 .
.It
Some programs are supplied in minimalistic versions, specifically
.Nm ns ,
a cut-down version of
.Nm netstat ,
and
.Nm vm ,
a cut-down version of
.Nm vmstat .
.El
.Sh BUILDING PicoBSD
The
.Nm
sources reside in the hierarchy
.Pa /usr/src/release/picobsd .
In the following discussion, all relative path names are relative to this
directory.  The
.Nm
build process is designed to be flexible in order to cram as much as possible on
to the floppies.  In particular, the following possibilities exist:
.Bl -bullet
.It
The old style of building uses a script called 
.Pa build/build .
To use it, change directory to
.Pa build/
and run
.Cm build .
.Cm build
is an interactive script which will ask for parameter entries and then build the
appropriate single floppy version.  Five kinds of floppy are envisaged:
.Bl -hang
.It dial
is a configuration suitable for dial-out (ppp) networking.
.It install
is a configuration suitable for software installation.
.It isp
is a configuration suitable for dial-in (ppp) networking.
.It net
is a configuration suitable for general networking.
.It router
is a configuration suitable for use as a router.  This particular configuration
aims to work on minimal hardware.
.El
.It
The new style of building uses
.Cm make .
The file
.Pa Makefile
will build in the directory
.Pa custom .
.El
.Pp
The build process involves the following steps.  In the examples, the
subdirectory
.Pa custom 
is used, but the principle also applies to the subdirectories
.Pa dial ,
.Pa install ,
.Pa isp ,
.Pa net
and 
.Pa router .
.Bl -hang
.It Em Build the kernel.
Each directory contains a configuration file with a name starting with
.Pa PICOBSD .
When building a custom
.Nm ,
it is important to review this file carefully.  The smallest possible kernel
occupies about 600 kB after compression, and it is easy to have a kernel as
large as 900 kB.  It is probably not possible to build a first
.Nm
floppy with a kernel of 900 kB.
.It Em Create the MFS image.
The MFS image for the first floppy is created as a
.Nm vnode
file system which is subsequently mounted as
.Pa /dev/vn0 
on
.Pa custom/mmnt .
.It Em Create the crunched executables.
The executables for the first floppy are built in the directory
.Pa crunch/crunch1/ .
The contents of this executable are determined by the file
.Pa crunch/crunch1/crunch.conf .
.It Em Build the floppy image.
A second file system image, which will later become the first floppy, is built
and mounted as 
.Pa /dev/vn1
on
.Pa custom/fmnt .
It receives the compressed kernel, the compressed MFS file system, the contents
of the tree
.Pa floppy.tree/ 
and
.Pa floppy.tree/custom/
if the latter directory exists.  This dual method allows specific files in
.Pa floppy.tree/custom/ 
to overlay files from 
.Pa floppy.tree/ .
.It Em Create the image for the second floppy.
Finally, the image for the second floppy is built.  There is only one file on
this floppy, which will be copied to the MFS-relative directory 
.Pa /bin
at boot time.  The contents are built in the directory
.Pa crunch/crunch2/ .
The contents of this executable are determined by the file
.Pa crunch/crunch2/crunch.conf .
.It Em Copy the data to the floppies.
The previous steps are performed by the
.Nm make all
step.
.Nm make all
does not copy data to the floppy disks.  Instead, use
.Nm make floppy 
for the first floppy, and
.Nm make floppy2
for the second disk.
.It Em Create additional floppies.
You can theoretically possible to read a large number of floppies into the MFS.
Each additional floppy, including the second, is a gzipped tar file containing
files relative to
.Pa /bin .
You can put any statically linked program on a floppy in this form, and the
startup routines will automatically read it in.  Remember that there are no
dynamic libraries, so the programs must be static.
.El
.\" .Sh FILES
.\" .Sh EXAMPLES
.\" This next request is for sections 1, 6, 7, 8 & 9 only
.\"     (command return values (to shell) and
.\"       fprintf/stderr type diagnostics)
.\" .Sh DIAGNOSTICS
.\" The next request is for sections 2, 3 and 9 error
.\" and signal handling only.
.\" .Sh ERRORS
.Sh BOOTING PicoBSD
To boot
.Nm ,
insert the floppy and reset the machine.  The boot procedure is similar to the
standard
.Fx
boot, but proceeds at a snail's pace.  From the end of the POST
(BIOS Power On Self Test) until the prompt for the second floppy takes about 3
minutes.
.Pp
When the prompt for additional floppies appears, first insert the floppy in the
drive, then answer
.Em y .
When you have no more floppies, enter
.Em n .
This version of
.Nm
does not have a root password.  If you require greater security, you can copy
your own
.Pa /etc/master.passwd
and possibly
.Pa /etc/group
to the first boot floppy.  These are the only files you need: the boot process
generates the files
.Pa /etc/passwd ,
.Pa /etc/spwd 
and
.Pa /etc/pwd.db 
automatically.
.Ss Swap space
After booting,
.Nm
runs entirely from the MFS file system.  The floppies are no longer used, and
even if there are hard disk drivers in the
.Nm
kernel, it does not access the drives.  In particular, there is no swap space,
so if you run out of memory, unpredictable things can happen.
.Pp
If you have a disk driver and a disk with a swap partition on it, and the swap
partition does not contain a dump you want to keep, you can use this swap with
.Nm .
Use the
.Xr swapon 8
command.
.Sh RECOVERING CRASHED SYSTEMS
The
.Em custom
.Nm
configuration contains all the programs that are present on the
.Em fixit 
floppy, so you can use it instead of the fixit floppy.
.Sh SEE ALSO
.Xr crunchgen 1 ,
.Xr swapon 8 ,
.Xr vnconfig 8
.\" .Sh STANDARDS
.\" .Sh HISTORY
.Sh AUTHORS
.An -nosplit
.An Andrzej Bialecki Aq abial@FreeBSD.org .
Man page and Makefiles created by
.An Greg Lehey Aq grog@lemis.com .
.Sh BUGS
In order to build 
.Nm ,
the kernel of the system on which it is built must have the
.Nm vn
driver installed.  
.Pp
The build process must be run as
.Nm root .
.Pp
The build process does not search for unused vnode devices; it uses
.Pa /dev/vn0
and
.Pa /dev/vn1 .
If these files are not in use by other programs, unexpected behaviour may
result.
.Pp
Building
.Nm
is still a black art.  The biggest problem is determining what will fit on the
floppies, and the only practical method is trial and error.
.Pp
The original version of 
.Nm
fits on one floppy.  Since
.Fx 4.0 ,
the kernel is so large that most
configurations will need a second floppy to do any productive work.
Nevertheless, it should be possible to create minimal kernels which will fit
alongside sufficient other programs on a single floppy.
.Pp
The approach of building executables with
.Xr crunchgen 1
means that considerable duplication of libraries occurs between the floppies.
.Pp
At the current time (December 1999), the old-style build is broken in
.Fx Ns -CURRENT .
In view of the significant increase in size of the 4.x kernel
compared to the 3.x kernel, it is not certain that it can be fixed.
.Pp
.Nm
has suffered some bit rot in 1999, and currently most of the old-style
configurations do not build.
.Pp
There appears to be no way to get
.Nm Emacs
to run on
.Nm .