$NetBSD: README.Interix,v 1.18 2016/11/15 11:19:09 jperkin Exp $ Interix is a POSIX-compatible subsystem for the Windows NT kernel, providing a Unix-like environment with a tighter kernel integration than available with Cygwin. It is part of the Windows Services for Unix package, available for free for any licensed copy of Windows 2000, XP (not including XP Home), or 2003. SFU can be downloaded from http://www.microsoft.com/windows/sfu/. Services for Unix 3.5 has been tested. 3.0 or 3.1 may work, but are not officially supported. (The main difference in 3.0/3.1 is lack of pthreads, but other parts of libc may also be lacking.) Services for Unix Applications (aka SUA) is an integrated component of Windows Server 2003 R2 (5.2), Windows Vista and Windows Server 2008 (6.0), Windows 7 and Windows Server 2008 R2 (6.1). As of this writing, the SUA's Interix 6.0 (32bit) and 6.1 (64bit) subsystems have been tested. Other versions may work as well. The Interix 5.x subsystem has not yet been tested with pkgsrc. When installing Interix/SFU --------------------------- At an absolute minimum, the following packages must be installed from the Windows Services for Unix 3.5 distribution in order to use pkgsrc: Utilities -> Base Utilities Interix GNU Components -> (all) Remote Connectivity Interix SDK When using pkgsrc on Interix, DO NOT install the Utilities subcomponent "UNIX Perl". That is Perl 5.6 without shared module support, installed to /usr/local, and will only cause confusion. Instead, install Perl 5.8 from pkgsrc (or from a binary package). The Remote Connectivity subcomponent "Windows Remote Shell Service" does not need to be installed, but Remote Connectivity itself should be installed in order to have a working inetd. During installation you may be asked whether to enable setuid behavior for Interix programs, and whether to make pathnames default to case-sensitive. Setuid should be enabled, and case-sensitivity MUST be enabled. (Without case-sensitivity, a large number of packages including perl will not build.) NOTE: Newer Windows service packs change the way binary execution works (via the Data Execution Prevention feature). In order to use pkgsrc and other gcc-compiled binaries reliably, a hotfix containing POSIX.EXE, PSXDLL.DLL, PSXRUN.EXE, and PSXSS.EXE (899522 or newer) must be installed. Hotfixes are available from Microsoft through a support contract; however, Debian Interix Port has made most Interix hotfixes available for personal use from http://www.debian-interix.net/hotfixes/. In addition to the hotfix noted above, it may be necessary to disable Data Execution Prevention entirely to make Interix functional. This may happen only with certain types of CPUs; the cause is not fully understood at this time. If gcc or other applications still segfault repeatedly after installing one of the hotfixes note above, the following option can be added to the appropriate "boot.ini" line on the Windows boot drive: /NoExecute=AlwaysOff (WARNING, this will disable DEP completely, which may be a security risk if applications are often run as a user in the Administrators group!). What to do if Interix/SFU is already installed ---------------------------------------------- If SFU is already installed and you wish to alter these settings to work with pkgsrc, note the following things. To uninstall UNIX Perl, use Add/Remove Programs, select Microsoft Windows Services for UNIX, then click Change. In the installer, choose Add or Remove, then uncheck Utilities->UNIX Perl. To enable case-sensitivity for the file system, run REGEDIT.EXE, and change the following registry key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel Set the DWORD value "obcaseinsensitive" to 0; then reboot. To enable setuid binaries (optional), run REGEDIT.EXE, and change the following registry key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Services for UNIX Set the DWORD value "EnableSetuidBinaries" to 1; then reboot. Important notes for using pkgsrc -------------------------------- The package manager (either the pkgsrc "su" user, or the user running "pkg_add") must be a member of the local Administrators group. Such a user must also be used to run the bootstrap. This is slightly relaxed from the normal pkgsrc requirement of "root". The package manager should use a umask of 002. "make install" will automatically complain if this is not the case. This ensures that directories written in /usr/pkg/pkgdb are Administrators-group writeable. The popular Interix binary packages from http://www.interopsystems.com/ use an older version of pkgsrc's pkg_* tools. Ideally, these should NOT be used in conjunction with pkgsrc. If you choose to use them at the same time as the pkgsrc packages, ensure that you use the proper pkg_* tools for each type of binary package. The TERM setting used for DOS-type console windows (including those invoked by the csh and ksh startup shortcuts) is "interix". Most systems don't have a termcap/terminfo entry for it, but the following .termcap entry provides adequate emulation in most cases: interix:kP=\E[S:kN=\E[T:kH=\E[U:dc@:DC@:tc=pcansi: Limitations of the Interix platform ----------------------------------- Though Interix suffices as a familiar and flexible substitute for a full Unix-like platform, it has some drawbacks that should be noted for those desiring to make the most of Interix. X11: Interix comes with the standard set of X11R6 client libraries, and can run X11 based applications, but it does not come with an X server. Some options are StarNet X-Win32 http://www.starnet.com/products/xwin32/, Hummingbird Exceed http://connectivity.hummingbird.com/products/nc/exceed/ (available in a trimmed version for Interix from Interop Systems as the Interop X Server http://www.interopsystems.com/InteropXserver.htm), and the free X11 server included with Cygwin http://x.cygwin.com/. X11 acceleration: Because Interix runs in a completely different NT subsystem from Win32 applications, it does not currently support various X11 protocol extensions for acceleration (such as MIT-SHM or DGA). Most interactive applications to a local X server will run reasonably fast, but full motion video and other graphics intensive applications may require a faster-than-expected CPU. Audio: Interix has no native support for audio output. For audio support, pkgsrc uses the esound client/server audio system on Interix. Unlike on most platforms, the audio/esound package does not contain the esd server component. To output audio via an Interix host, the emulators/cygwin_esound package must also be installed. CD/DVDs, USB, and SCSI: Direct device access is not currently supported in Interix, so it is not currently possible to access CD/DVD drives, USB devices, or SCSI devices through non-filesystem means. Among other things, this makes it impossible to use Interix directly for CD/DVD burning. Tape drives: Due to the same limitations as for CD-ROMs and SCSI devices, tape drives are also not directly accessible in Interix. However, support is in work to make tape drive access possible by using Cygwin as a bridge (similarly to audio bridged via Cygwin's esound server). Known issues for pkgsrc on Interix ---------------------------------- It is not necessary, in general, to have a "root" user on the Windows system; any member of the local Administrators group will suffice. However, some packages currently assume that the user named "root" is the privileged user. To accommodate these, you may create such a user; make sure it is in the local group Administrators (or your language equivalent). pkg_add creates directories of mode 0755, not 0775, in $PKG_DBDIR. For the time being, install packages as the local Administrator (or your language equivalent), or run the following command after installing a package to work around the issue: # chmod -R g+w $PKG_DBDIR