424 lines
11 KiB
Groff
424 lines
11 KiB
Groff
.\" $NetBSD: compat_freebsd.8,v 1.19 2018/02/10 08:54:22 maxv Exp $
|
|
.\" from: compat_linux.8,v 1.1 1995/03/05 23:30:36 fvdl Exp
|
|
.\"
|
|
.\" Copyright (c) 1995 Frank van der Linden
|
|
.\" All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\" 3. All advertising materials mentioning features or use of this software
|
|
.\" must display the following acknowledgement:
|
|
.\" This product includes software developed for the NetBSD Project
|
|
.\" by Frank van der Linden
|
|
.\" 4. The name of the author may not be used to endorse or promote products
|
|
.\" derived from this software without specific prior written permission
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
.\"
|
|
.Dd February 10, 2018
|
|
.Dt COMPAT_FREEBSD 8
|
|
.Os
|
|
.Sh NAME
|
|
.Nm compat_freebsd
|
|
.Nd setup procedure for running FreeBSD binaries
|
|
.Sh DESCRIPTION
|
|
.Bf -symbolic
|
|
compat_freebsd is not maintained anymore, and new FreeBSD binaries cannot
|
|
be expected to work.
|
|
The compat_freebsd feature is available in NetBSD only to support the
|
|
FreeBSD tw_cli driver.
|
|
.Ef
|
|
.Pp
|
|
.Nx
|
|
supports running
|
|
.Fx
|
|
binaries.
|
|
Most binaries should work, except programs that use
|
|
.Fx Ns -specific
|
|
features.
|
|
These include i386-specific calls, such as syscons utilities.
|
|
The
|
|
.Fx
|
|
compatibility feature is active for kernels compiled
|
|
with the
|
|
.Dv COMPAT_FREEBSD
|
|
option enabled.
|
|
.Pp
|
|
A lot of programs are dynamically linked.
|
|
This means, that you will also need the
|
|
.Fx
|
|
shared libraries that the program depends on, and the runtime
|
|
linker.
|
|
Also, you will need to create a
|
|
.Dq shadow root
|
|
directory for
|
|
.Fx
|
|
binaries on your
|
|
.Nx
|
|
system.
|
|
This directory is named
|
|
.Pa /emul/freebsd .
|
|
Any file operations done by
|
|
.Fx
|
|
programs run under
|
|
.Nx
|
|
will look in this directory first.
|
|
So, if a
|
|
.Fx
|
|
program opens, for example,
|
|
.Pa /etc/passwd ,
|
|
.Nx
|
|
will
|
|
first try to open
|
|
.Pa /emul/freebsd/etc/passwd ,
|
|
and if that does not exist open the
|
|
.Sq real
|
|
.Pa /etc/passwd
|
|
file.
|
|
It is recommended that you install
|
|
.Fx
|
|
packages that include configuration files, etc under
|
|
.Pa /emul/freebsd ,
|
|
to avoid naming conflicts with possible
|
|
.Nx
|
|
counterparts.
|
|
Shared libraries should also be installed in the shadow tree.
|
|
.Pp
|
|
Generally, you will need to look for the shared libraries that
|
|
.Fx
|
|
binaries depend on only the first few times that you install a
|
|
.Fx
|
|
program on your
|
|
.Nx
|
|
system.
|
|
After a while, you will have a sufficient set of
|
|
.Fx
|
|
shared libraries on your system to be able to run newly imported
|
|
.Fx
|
|
binaries without any extra work.
|
|
.Ss Setting up shared libraries
|
|
How to get to know which shared libraries
|
|
.Fx
|
|
binaries need, and where
|
|
to get them? Basically, there are 2 possibilities (when following
|
|
these instructions: you will need to be root on your
|
|
.Nx
|
|
system to do the necessary installation steps).
|
|
.Pp
|
|
.Bl -enum -compact
|
|
.It
|
|
You have access to a
|
|
.Fx
|
|
system.
|
|
In this case you can temporarily install the binary there, see what
|
|
shared libraries it needs, and copy them to your
|
|
.Nx
|
|
system.
|
|
Example: you have just ftp-ed the
|
|
.Fx
|
|
binary of SimCity.
|
|
Put it on the
|
|
.Fx
|
|
system you have access to, and check which shared libraries it
|
|
needs by running
|
|
.Sq ldd sim :
|
|
.Bd -literal -offset indent
|
|
me@freebsd% ldd /usr/local/lib/SimCity/res/sim
|
|
/usr/local/lib/SimCity/res/sim:
|
|
-lXext.6 => /usr/X11R6/lib/libXext.so.6.0 (0x100c1000)
|
|
-lX11.6 => /usr/X11R6/lib/libX11.so.6.0 (0x100c9000)
|
|
-lc.2 => /usr/lib/libc.so.2.1 (0x10144000)
|
|
-lm.2 => /usr/lib/libm.so.2.0 (0x101a7000)
|
|
-lgcc.261 => /usr/lib/libgcc.so.261.0 (0x101bf000)
|
|
.Ed
|
|
.Pp
|
|
You would need go get all the files from the last column, and
|
|
put them under
|
|
.Pa /emul/freebsd .
|
|
This means you eventually have these files on your
|
|
.Nx
|
|
system:
|
|
.Bl -item -compact
|
|
.It
|
|
.Pa /emul/freebsd/usr/X11R6/lib/libXext.so.6.0
|
|
.It
|
|
.Pa /emul/freebsd/usr/X11R6/lib/libX11.so.6.0
|
|
.It
|
|
.Pa /emul/freebsd/usr/lib/libc.so.2.1
|
|
.It
|
|
.Pa /emul/freebsd/usr/lib/libm.so.2.0
|
|
.It
|
|
.Pa /emul/freebsd/usr/lib/libgcc.so.261.0
|
|
.El
|
|
.Pp
|
|
Note that if you already have a
|
|
.Fx
|
|
shared library with a matching major revision number to the first
|
|
column of the
|
|
.Ic ldd
|
|
output, you won't need to copy the file named
|
|
in the last column to your system, the one you already have should
|
|
work.
|
|
It is advisable to copy the shared library anyway if it is a newer version,
|
|
though.
|
|
You can remove the old one.
|
|
So, if you have these libraries on your system:
|
|
.Bl -item -compact
|
|
.It
|
|
.Pa /emul/freebsd/usr/lib/libc.so.2.0
|
|
.El
|
|
.Pp
|
|
and you find that the ldd output for a new binary you want to
|
|
install is:
|
|
.Bd -literal
|
|
\-lc.2 => /usr/lib/libc.so.2.1 (0x10144000)
|
|
.Ed
|
|
.Pp
|
|
You won't need to worry about copying
|
|
.Pa /usr/lib/libc.so.2.1
|
|
too, because the program should work fine with the slightly older version.
|
|
You can decide to replace the libc.so anyway, and that should leave
|
|
you with:
|
|
.Bl -item -compact
|
|
.It
|
|
.Pa /emul/freebsd/usr/lib/libc.so.2.1
|
|
.El
|
|
.Pp
|
|
Finally, you must make sure that you have the
|
|
.Fx
|
|
runtime linker and its config files on your system.
|
|
You should copy these files from the
|
|
.Fx
|
|
system to their appropriate place on your
|
|
.Nx
|
|
system (in the
|
|
.Pa /emul/freebsd
|
|
tree):
|
|
.Bl -item -compact
|
|
.It
|
|
.Pa usr/libexec/ld.so
|
|
.It
|
|
.Pa var/run/ld.so.hints
|
|
.El
|
|
.It
|
|
You don't have access to a
|
|
.Fx
|
|
system.
|
|
In that case, you should get the extra files you need from various ftp sites.
|
|
Information on where to look for the various files is appended
|
|
below.
|
|
For now, let's assume you know where to get the files.
|
|
.Pp
|
|
Retrieve the following files (from _one_ ftp site to avoid
|
|
any version mismatches), and install them under
|
|
.Pa /emul/freebsd
|
|
(i.e.
|
|
.Pa foo/bar
|
|
is installed as
|
|
.Pa /emul/freebsd/foo/bar ) :
|
|
.Bl -item -compact
|
|
.It
|
|
.Pa sbin/ldconfig
|
|
.It
|
|
.Pa usr/bin/ldd
|
|
.It
|
|
.Pa usr/lib/libc.so.x.y.z
|
|
.It
|
|
.Pa usr/libexec/ld.so
|
|
.El
|
|
.Pp
|
|
.Ic ldconfig
|
|
and
|
|
.Ic ldd
|
|
don't necessarily need to be under
|
|
.Pa /emul/freebsd ,
|
|
you can install them elsewhere in the system too.
|
|
Just make sure they don't conflict with their
|
|
.Nx
|
|
counterparts.
|
|
A good idea would be to install them in
|
|
.Pa /usr/local/bin
|
|
as
|
|
.Ic ldconfig-freebsd
|
|
and
|
|
.Ic ldd-freebsd .
|
|
.Pp
|
|
Run the
|
|
.Fx
|
|
ldconfig program with directory arguments in which the
|
|
.Fx
|
|
runtime linker should look for shared libs.
|
|
.Pa /usr/lib
|
|
are standard, you could run like the following:
|
|
.Bd -literal -offset indent
|
|
me@netbsd% mkdir -p /emul/freebsd/var/run
|
|
me@netbsd% touch /emul/freebsd/var/run/ld.so.hints
|
|
me@netbsd% ldconfig-freebsd /usr/X11R6/lib /usr/local/lib
|
|
.Ed
|
|
.Pp
|
|
Note that argument directories of ldconfig are
|
|
mapped to
|
|
.Pa /emul/freebsd/XXXX
|
|
by
|
|
.Nx Ns 's
|
|
compat code, and should exist as such on your system.
|
|
Make sure
|
|
.Pa /emul/freebsd/var/run/ld.so.hints
|
|
is existing when you run
|
|
.Fx Ns 's
|
|
ldconfig, if not, you may lose
|
|
.Nx Ns 's
|
|
.Pa /var/run/ld.so.hints .
|
|
.Fx
|
|
.Ic ldconfig
|
|
should be statically
|
|
linked, so it doesn't need any shared libraries by itself.
|
|
It will create the file
|
|
.Pa /emul/freebsd/var/run/ld.so.hints .
|
|
You should rerun the
|
|
.Fx
|
|
version of the ldconfig program each time you add a new shared library.
|
|
.Pp
|
|
You should now be set up for
|
|
.Fx
|
|
binaries which only need a shared libc.
|
|
You can test this by running the
|
|
.Fx
|
|
.Ic ldd
|
|
on itself.
|
|
Suppose that you have it installed as
|
|
.Ic ldd-freebsd ,
|
|
it should produce something like:
|
|
.Bd -literal -offset indent
|
|
me@netbsd% ldd-freebsd `which ldd-freebsd`
|
|
/usr/local/bin/ldd-freebsd:
|
|
-lc.2 => /usr/lib/libc.so.2.1 (0x1001a000)
|
|
.Ed
|
|
.Pp
|
|
This being done, you are ready to install new
|
|
.Fx
|
|
binaries.
|
|
Whenever you install a new
|
|
.Fx
|
|
program, you should check if it needs shared libraries, and if so,
|
|
whether you have them installed in the
|
|
.Pa /emul/freebsd
|
|
tree.
|
|
To do this, you run the
|
|
.Fx
|
|
version
|
|
.Ic ldd
|
|
on the new program, and watch its output.
|
|
.Ic ldd
|
|
(see also the manual page for
|
|
.Xr ldd 1 )
|
|
will print a list
|
|
of shared libraries that the program depends on, in the
|
|
form -l<majorname> => <fullname>.
|
|
.Pp
|
|
If it prints
|
|
.Dq not found
|
|
instead of <fullname> it means that you need an extra library.
|
|
Which library this is, is shown
|
|
in <majorname>, which will be of the form XXXX.<N>
|
|
You will need to find a libXXXX.so.<N>.<mm> on a
|
|
.Fx
|
|
ftp site, and install it on your system.
|
|
The XXXX (name) and <N> (major
|
|
revision number) should match; the minor number(s) <mm> are
|
|
less important, though it is advised to take the most
|
|
recent version.
|
|
.Pp
|
|
.It
|
|
In some cases,
|
|
.Fx
|
|
binary needs access to certain device file.
|
|
For example,
|
|
.Fx
|
|
X server software needs
|
|
.Fx
|
|
.Pa /dev/ttyv0
|
|
for ioctls.
|
|
In this case, create a symbolic link from
|
|
.Pa /emul/freebsd/dev/ttyv0
|
|
to a
|
|
.Xr wscons 4
|
|
device file like
|
|
.Pa /dev/ttyE0 .
|
|
You will need to have at least
|
|
.Cd options WSDISPLAY_COMPAT_SYSCONS
|
|
and probably also
|
|
.Cd options WSDISPLAY_COMPAT_USL
|
|
in your kernel (see
|
|
.Xr options 4
|
|
and
|
|
.Xr wscons 4 ) .
|
|
.El
|
|
.Ss Finding the necessary files
|
|
.Em Note :
|
|
the information below is valid as of the time this
|
|
document was written (June, 1995), but certain details
|
|
such as names of ftp sites, directories and distribution names
|
|
may have changed by the time you read this.
|
|
.Pp
|
|
The
|
|
.Fx
|
|
distribution is available on a lot of ftp sites.
|
|
Sometimes the files are unpacked, and you can get the individual
|
|
files you need, but mostly they are stored in distribution sets,
|
|
usually consisting of subdirectories with gzipped tar files in them.
|
|
The ftp site for the distributions is:
|
|
.Lk ftp://ftp.FreeBSD.org/pub/FreeBSD
|
|
.Pp
|
|
This distribution consists of a number of tar-ed and gzipped files,
|
|
Normally, they're controlled by an install program, but you can
|
|
retrieve files
|
|
.Dq by hand
|
|
too.
|
|
The way to look something up is to retrieve all the files in the
|
|
distribution, and ``tar ztvf'' through them for the file you need.
|
|
Here is an example of a list of files that you might need.
|
|
.Bd -literal -offset indent
|
|
Needed Files
|
|
|
|
ld.so 2.0-RELEASE/bindist/bindist.??
|
|
ldconfig 2.0-RELEASE/bindist/bindist.??
|
|
ldd 2.0-RELEASE/bindist/bindist.??
|
|
libc.so.2 2.0-RELEASE/bindist/bindist.??
|
|
libX11.so.6.0 2.0-RELEASE/XFree86-3.1/XFree86-3.1-bin.tar.gz
|
|
libX11.so.6.0 XFree86-3.1.1/X311bin.tgz
|
|
libXt.so.6.0 2.0-RELEASE/XFree86-3.1/XFree86-3.1-bin.tar.gz
|
|
libXt.so.6.0 XFree86-3.1.1/X311bin.tgz
|
|
.\" libX11.so.3 oldlibs
|
|
.\" libXt.so.3 oldlibs
|
|
.Ed
|
|
.Pp
|
|
The files called
|
|
.Dq bindist.??
|
|
are tar-ed, gzipped and split, so you can extract contents by
|
|
.Dq cat bindist.?? | tar zpxf - .
|
|
.Pp
|
|
Extract the files from these gzipped tarfiles in your
|
|
.Pa /emul/freebsd
|
|
directory (possibly omitting or afterwards removing files you don't
|
|
need), and you are done.
|
|
.Sh BUGS
|
|
The information about
|
|
.Fx
|
|
distributions may become outdated.
|