summaryrefslogtreecommitdiff
path: root/bootstrap/README.Interix
blob: fa116dd37a012adea65f5a9affadc022de44e4a2 (plain)
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
$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