Plan 9 from Bell Labs’s /usr/web/sources/wiki/d/383

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


Linux emulation
D1335047570
Asl
#Linuxemu is a program that can execute Linux/i386 ELF binaries on
#Plan9. It was started by Russ Cox and development was continued by
#cinap_lenrek. Please contact cinap_lenrek AT gmx DOT de with bug
#reports or improvements.
#
#SOURCE
#
#[/n/sources/contrib/cinap_lenrek/linuxemu3.tgz |
#http://plan9.bell-labs.com/sources/contrib/cinap_lenrek/linuxemu3.tgz]
#
#[http://9hal.ath.cx/usr/cinap_lenrek/linuxemu3.tgz |
#http://9hal.ath.cx/usr/cinap_lenrek/linuxemu3.tgz]
#
#DOCUMENTATION
#
#Documentation is provided in the doc directory:
#
#! 	doc/linuxemu.txt
#! 	doc/todo.txt
#
#INSTALLATION
#
#! 	tar xzf linuxemu3.tgz
#! 	cd linuxemu3
#! 	mk
#! 	mk install
#
#BOOTSTRAP
#
#You need a Linux rootfilesystem packed in a tarball. Go! Get some
#Linux rootfs:
#
#[http://9hal.ath.cx/usr/cinap_lenrek/mroot-linuxemu.tbz |
#http://9hal.ath.cx/usr/cinap_lenrek/mroot-linuxemu.tbz]
#
#[http://plan9.stanleylieber.com/linuxemu/mroot.tgz |
#http://plan9.stanleylieber.com/linuxemu/mroot.tgz]
#
#The -linuxemu version contains no symlinks and can be extracted with
#plain plan9 tools bunzip/tar.
#
#The mroot.tgz version contains the same Debian Sarge base as
#-linuxemu, but with several additional packages pre-installed:
#
#! 	9base
#! 	dmenu-4.1.1
#! 	dwm-5.8.2
#! 	gcc 3.3.5
#! 	linux-kernel-headers
#! 	mercurial 0.9.4
#! 	opera 10.11
#! 	python 2.3.5
#! 	xlib-dev
#
#and more. View its [setup |
#http://plan9.stanleylieber.com/linuxemu/setup] file for more details.
#
#You can create your own with debootstrap on Debian Linux, or help
#write an installer that unpacks and installs Slackware on Plan 9...
#In any case, linuxemu is not hardwired to any Linux distribution!
#
#RUNNING
#
#Use the provided "linux" script to chroot into your Linux rootfs.
#The "linux" script is neccesary because for Linux programs to run,
#shared libraries from your rootfs have to appear at /lib and
#/usr/lib, while configuration files are expected to be in /etc. The
#script will build a private namespace and bind the Linux rootfs over
#the Plan 9 root. the original Plan 9 namespace is mounted at /9.
#
#! 	linux -r ./mroot /bin/bash -i
#
#If the -r option is omitted, the Linux rootfs defaults to
#/sys/lib/linux. you may put your Linux rootfs there or add a bind to
#your $home/lib/profile.
#
#In the Linux rootfs, /etc/resolv.conf should be changed to match
#your network nameserver. In addition, /etc/apt/sources.list should
#be updated to a working Debian mirror. (Sarge packages can still be
#accessed at deb http://archive.debian.org/debian-archive/debian
#sarge main)
#
#EXAMPLES
#
#Linux X11 programs may be used in conjunction with the Plan 9 [equis
#| http://www.plan9.bell-labs.com/wiki/plan9/X11_installation] X11
#contrib package. For example, to run the Opera web browser under
#your Linux rootfs, start equis in a rio window, chroot into your
#LInux rootfs and:
#
#! 	dwm &
#! 	opera &
#
#Opera should (eventually) appear in the equis window. A window
#manager (this example uses dwm) is recommended so that X11 programs
#work properly.
#
#DEBUGGING
#
#If linuxemu crashes, use acid to figure out whats going on:
#
#! 	mk acid
#! 	acid -l linuxemu.acid <pid>
#
#Then you can issue the following commands:
#
#! 	ustk()				dump a (userspace) stacktrace for the current thread
#! 	umem(Current())			dump the memory mappings
#! 	ufds(Current())			dump the filedescriptor table
#! 	utrace(Current())		dump the internal tracebuffer (enabled by -d option)
#
#Use xasm()/xcasm() for disassembly for Linux code.
#
#You can also enable full trace logging:
#
#! 	linux -r ./mroot -dd /bin/bash -i >[2]/tmp/linuxemu.log
#
#This slows linuxemu down. In case of race conditions, it often
#happens that the bug disapears when doing full trace logging!
#
#NPTL
#
#If you get one of these errors:
#
#! 	cannot set up thread-local storage: cannot set up LDT for thread-local storage
#
#This is glibc/libpthread complaining! The problem is the following:
#glibc on i386 decided at some point to use the extra segment
#registers GS and FS as an indirection pointer for thread local
#storage. The operating system kernel therfore must have a mechanism
#to let userspace change descriptor table entries and swap them
#in/out on context switch.
#
#To make it work here are several options:
#
#1) Recompile and link the program with a pre NPTL version of glibc.
#
#2) On some distributions, a non-tls version of libc/libpthread is
#available. in the -linuxemu fsroot, the NPTL version is in /lib/tls,
#the older version is in /lib. By renaming /lib/tls to
#/lib/_tls_disabled_ the loader will use the non-tls version.
#
#3) Cinap made a kernel patch that adds support for per process
#descriptors to Plan 9:
#
#[http://plan9.bell-labs.com/sources/contrib/cinap_lenrek/segdescpatch | /n/sources/contrib/cinap_lenrek/segdescpatch]
#
#[http://9hal.ath.cx/usr/cinap_lenrek/segdescpatch.tgz |
#http://9hal.ath.cx/usr/cinap_lenrek/segdescpatch.tgz]
#
#The above patch adds the files gdt and ldt to devarch (#P).
#

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to [email protected].