Diff for /wikisrc/guide/linux.mdwn between versions 1.4 and 1.5

version 1.4, 2015/06/19 19:18:31 version 1.5, 2021/04/12 13:15:03
Line 1 Line 1
 **Contents**  This page was moved to:
   [The NetBSD Guide - Linux emulation](//www.NetBSD.org/docs/guide/en/chap-linux.html)
 [[!toc levels=3]]  
   
 # Linux emulation  
   
 The NetBSD port for i386, amd64, mac68k, macppc, and many others can execute a  
 great number of native Linux programs, using the Linux emulation layer.  
 Generally, when you think about emulation you imagine something slow and  
 inefficient because, often, emulations must reproduce hardware instructions and  
 even architectures (usually from old machines) in software. In the case of the  
 Linux emulation, this is radically different: it is only a thin software layer,  
 mostly for system calls which are already very similar between the two systems.  
 The application code itself is processed at the full speed of your CPU, so you  
 don't get a degraded performance with the Linux emulation and the feeling is  
 exactly the same as for native NetBSD applications.  
   
 This chapter explains how to configure the Linux emulation with an example: the  
 installation of the well known Acrobat Reader version 7 program.  
   
 ## Emulation setup  
   
 The installation of the Linux emulation is described in the  
 [[!template id=man name="compat\_linux" section="8"]]  
 man page; using the package system, only two steps are needed.  
   
  1. Configuring the kernel.  
  2. Installing the Linux libraries.  
  3. Installing Linux applications like Acrobat Reader  
   
 ### Configuring the kernel  
   
 If you use a GENERIC kernel you don't need to do anything because Linux  
 compatibility is already enabled.  
   
 If you use a customized kernel, check that the following options are enabled:  
   
     option COMPAT_LINUX  
     option EXEC_ELF32  
   
 or the following options if you are going to use 64-bit ELF binaries:  
   
     option COMPAT_LINUX  
     option EXEC_ELF64  
   
 When you have compiled a kernel with the previous options, you can start  
 installing the necessary software.  
   
 ### Installing the Linux libraries  
   
 Usually, applications are linked against shared libraries, and for Linux  
 applications, Linux shared libraries are needed. You can get the shared  
 libraries from any Linux distribution, provided it's not too old, but the  
 suggested method is to use the package system and install the libraries  
 automatically (which uses SUSE libraries). When you install the libraries, the  
 following happens:  
   
  * A *secondary root directory* is created which will be used for Linux  
    programs. This directory is `/emul/linux`. The Linux programs in emulation  
    mode will use this directory as their root directory and use files there. If  
    a required file is not found, it will be searched with `/` as root directory.  
   
    For example, if a Linux application opens `/etc/ld.so.conf`, it will first be  
    searched in `/emul/linux/etc/ld.so.conf`, and if not found there, in  
    `/etc/ld.so.conf`.  
   
  * The shared libraries for Linux are installed. Most applications are linked  
    dynamically and expect to find the necessary libraries on the system. For  
    example, for Acrobat Reader, if you go to the `/usr/pkgsrc/print/acroread7`  
    and give the `make depends` command, pkgsrc will fetch and install all  
    dependencies for Acrobat Reader.  
   
 Both operations will be handled automatically by the package system, without the  
 need of manual intervention from the user (we suppose that, by now, you have  
 already begun to love the package system...). Note that this section describes  
 manual installation of the Linux libraries.  
   
 To install the libraries, a program must be installed that handles the RPM  
 format: it is `rpm`, which will be used to extract the SUSE libraries. Execute  
 `make` and `make install` in the `/usr/pkgsrc/misc/rpm/` directory to build  
 and install `rpm`.  
   
 Next the `suse121_base` package must be installed. The SUSE RPM files can be  
 downloaded by the package system or, if you have a SUSE CD, you can copy them in  
 the `/usr/pkgsrc/distfiles/suse121` directory and then run `make` and  
 `make install` after going to the `/usr/pkgsrc/emulators/suse121_base`  
 directory.  
   
 With the same method install `suse121_compat` and `suse121_x11`. The final  
 configuration is:  
   
     # pkg_info -a | grep suse  
         suse_base-12.1nb3   Linux compatibility package  
         suse_compat-12.1    Linux compatibility package with old shared libraries  
         suse_x11-12.1       Linux compatibility package for X11  
   
 *Note*: Of course you can also install the packages binary. To do this, you  
 would either set the proper `PKG_PATH` and then  
   
     # pkg_add rpm  
     # pkg_add suse_base  
     # pkg_add suse_compat  
     # pkg_add suse_x11  
   
 Or, using `pkgin`:  
   
     # pkgin install rpm suse_base suse_compat suse_x11  
   
 *Note*: You can also skip this step when you are installing a package from  
 pkgsrc which requires Linux emulation! A good example for this is the package  
 `www/opera`, which will automatically install the packages needed for emulating  
 the Linux version of the Opera browser.  
   
 ### Installing Acrobat Reader  
   
 Now everything is ready for the installation of the Acrobat Reader program (or  
 other Linux programs). Change to `/usr/pkgsrc/print/acroread7` and give the  
 usual commands.  
   
     # make  
     # make install  
   
 ### Note  
   
 To download and install Acrobat Reader you need to add the line  
 `ACCEPTABLE_LICENSES+=adobe-acrobat-license` to `/etc/mk.conf` to accept the  
 Acrobat Reader license, simply follow the instructions given after `make`.  
   
 ## Directory structure  
   
 If we examine the outcome of the installation of the Linux libraries and  
 programs we find that `/emul/linux` is a symbolic link pointing to  
 `/usr/pkg/emul/linux`, where the following directories have been created:  
   
  * `bin/`  
  * `dev/`  
  * `etc/`  
  * `lib/`  
  * `opt/`  
  * `proc/`  
  * `root/`  
  * `sbin/`  
  * `usr/`  
  * `var/`  
   
 *Note*: Please always refer to `/emul/linux` and not to `/usr/pkg/emul/linux`.  
 The latter is an implementation detail and may change in the future.  
   
 How much space is required for the Linux emulation software? On one system we  
 got the following figure:  
   
     # cd /usr/pkg/emul  
     # du -k /emul/linux/  
     ...  
     127804  /emul/linux/  
   
 Acrobat Reader, the program, has been installed in the usual directory for  
 package binaries: `/usr/pkg/bin`. It can be run just as any other program:  
   
     $ acroread netbsd.pdf  
   
 ## Emulating /proc  
   
 Some Linux programs rely on a Linux-like `/proc` filesystem. The NetBSD procfs  
 filesystem can emulate a `/proc` filesystem that contains Linux-specific  
 pseudo-files. To accomplish this you can mount the procfs with the  
 `linux`-option:  
   
     # mount_procfs -o linux procfs /emul/linux/proc  
   
 In this example a Linux-like proc filesystem will be mounted to the  
 `/emul/linux/proc` directory. You can also let NetBSD mount it automatically  
 during the booting process of NetBSD, by adding the following line to  
 `/etc/fstab`:  
   
     procfs /emul/linux/proc procfs ro,linux  
   
 ## Using Linux browser plugins  
   
 Linux plugins for Mozilla-based browsers can be used on native NetBSD Firefox  
 builds through nspluginwrapper, a wrapper that translates between the native  
 browser and a foreign plugin. At the moment, nspluginwrapper only works reliably  
 on Mozilla-based browsers that link against GTK2+ (GTK1+ is not supported).  
 nspluginwrapper can be installed through pkgsrc:  
   
     # cd /usr/pkgsrc/www/nspluginwrapper  
     # make install  
   
 Plugins can then be installed in two steps: first, the plugin has to be  
 installed on the system (e.g. through pkgsrc). After that the plugin should be  
 registered with the `nspluginwrapper` by the users who want to use that  
 plugin.  
   
 In this short example we will have a look at installing the Macromedia Flash  
 plugin. We can fullfill the first step by installing the Flash plugin through  
 pkgsrc:  
   
     # cd /usr/pkgsrc/multimedia/ns-flash  
     # make install  
   
 After that an unprivileged user can register the Flash plugin:  
   
     $ nspluginwrapper -i /usr/pkg/lib/netscape/plugins/libflashplayer.so  
   
 The plugin should then be registered correctly. You can check this by using the  
 `-l` option of `nspluginwrapper` (`nspluginwrapper -l`). If the plugin is  
 listed, you can restart Firefox, and verify that the plugin was installed by  
 entering `about:plugins` in the location bar.  
   
 ## Further reading  
   
 The following articles may be of interest for further understanding Linux (and other) emulation:  
   
  * *[Implementing Linux emulation on NetBSD](http://www.linux.com/articles/35998)*. Peter Seebach. May 2004.  
  * *[Linux compatibility on BSD for the PPC platform, part 1](http://www.onlamp.com/pub/a/onlamp/2001/05/10/linux_bsd.html)*. Emmanuel Dreyfus. May 2001.  
  * *[Linux compatibility on BSD for the PPC platform, part 2](http://www.onlamp.com/pub/a/onlamp/2001/05/17/linux_bsd.html)*. Emmanuel Dreyfus. May 2001.  
  * *[Linux compatibility on BSD for the PPC platform, part 3](http://www.onlamp.com/pub/a/onlamp/2001/06/07/linux_bsd.html)*. Emmanuel Dreyfus. Jun 2001.  
  * *[Linux compatibility on BSD for the PPC platform, part 4](http://www.onlamp.com/pub/a/onlamp/2001/06/21/linux_bsd.html)*. Emmanuel Dreyfus. Jun 2001.  
  * *[Linux compatibility on BSD for the PPC platform, part 5](http://www.onlamp.com/pub/a/onlamp/2001/08/09/linux_bsd.html)*. Emmanuel Dreyfus. Aug 2002.  
  * *[Irix binary compatibility, part 1](http://www.onlamp.com/pub/a/bsd/2002/08/08/irix.html)*. Emmanuel Dreyfus. Aug 2002.  
  * *[Irix binary compatibility, part 2](http://www.onlamp.com/pub/a/bsd/2002/08/29/irix.html)*. Emmanuel Dreyfus. Aug 2002.  
  * *[Irix binary compatibility, part 3](http://www.onlamp.com/pub/a/bsd/2002/09/12/irix.html)*. Emmanuel Dreyfus. Sep 2002.  
  * *[Irix binary compatibility, part 4](http://www.onlamp.com/pub/a/bsd/2002/10/10/irix.html)*. Emmanuel Dreyfus. Oct 2002.  
  * *[Irix binary compatibility, part 5](http://www.onlamp.com/pub/a/bsd/2002/12/19/irix.html)*. Emmanuel Dreyfus. Dec 2002.  
  * *[Irix binary compatibility, part 6](http://www.onlamp.com/pub/a/bsd/2003/04/03/irix.html)*. Emmanuel Dreyfus. Apr 2003.  
   

Removed from v.1.4  
changed lines
  Added in v.1.5


CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb