taffer has asked for the wisdom of the Perl Monks concerning the following question:

I am trying and failing to install Net:SSH:Expect on Strwberry Perl using cpan. This install is on a Windows XP Pro machine(32 bit). It looks like it is failing on installing one the IO::Tty dependency. When I try to do an install on this by itself I get the following:
C:\Documents and Settings\User>cpan cpan shell -- CPAN exploration and modules installation (v1.9301) ReadLine support enabled cpan> get IO::Tty Database was generated on Thu, 15 Jan 2009 21:11:42 GMT Running get for module 'IO::Tty' Checksum for D:\strawberry\cpan\sources\authors\id\R\RG\RGIERSIG\IO-Tt +y-1.07.tar .gz ok Scanning cache D:\strawberry\cpan\build for sizes ...................................................................... +......DONE cpan> make IO::Tty Running make for module 'IO::Tty' Running make for R/RG/RGIERSIG/IO-Tty-1.07.tar.gz CPAN.pm: Going to build R/RG/RGIERSIG/IO-Tty-1.07.tar.gz Now let's see what we can find out about your system (logfiles of failing tests are available in the conf/ dir)... Looking for _getpty()...... not found. Looking for getpt()........ not found. Looking for grantpt()...... not found. Looking for openpty()...... not found. Looking for ptsname()...... not found. Looking for ptsname_r().... not found. Looking for sigaction().... not found. Looking for strlcpy()...... not found. Looking for ttyname()...... not found. Looking for unlockpt()..... not found. Looking for libutil.h...... not found. Looking for pty.h.......... not found. Looking for sys/pty.h...... not found. Looking for sys/ptyio.h.... not found. Looking for sys/stropts.h.. not found. Looking for termio.h....... not found. Looking for termios.h...... not found. Looking for util.h......... not found. Checking which symbols compile OK... (sorry for the tedious check, but some systems have not too clean header files, to say the least; '+' means OK, '-' means not defined and '*' has compile problems...) -B0 -B110 -B115200 -B1200 -B134 -B150 -B153600 -B1800 -B19200 -B200 -B +230400 -B2 400 -B300 -B307200 -B38400 -B460800 -B4800 -B50 -B57600 -B600 -B75 -B7 +6800 -B960 0 -BRKINT -BS0 -BS1 -BSDLY -CBAUD -CBAUDEXT -CBRK -CCTS_OFLOW -CDEL -C +DSUSP -CEO F -CEOL -CEOL2 -CEOT -CERASE -CESC -CFLUSH -CIBAUD -CIBAUDEXT -CINTR - +CKILL -CLN EXT -CLOCAL -CNSWTCH -CNUL -CQUIT -CR0 -CR1 -CR2 -CR3 -CRDLY -CREAD -C +RPRNT -CRT SCTS -CRTSXOFF -CRTS_IFLOW -CS5 -CS6 -CS7 -CS8 -CSIZE -CSTART -CSTOP - +CSTOPB -CS USP -CSWTCH -CWERASE -DEFECHO -DIOC -DIOCGETP -DIOCSETP -DOSMODE -ECHO + -ECHOCTL -ECHOE -ECHOK -ECHOKE -ECHONL -ECHOPRT -EXTA -EXTB -FF0 -FF1 -FFDLY -F +IORDCHK -F LUSHO -HUPCL -ICANON -ICRNL -IEXTEN -IGNBRK -IGNCR -IGNPAR -IMAXBEL -I +NLCR -INPC K -ISIG -ISTRIP -IUCLC -IXANY -IXOFF -IXON -KBENABLED -LDCHG -LDCLOSE +-LDDMAP -L DEMAP -LDGETT -LDGMAP -LDIOC -LDNMAP -LDOPEN -LDSETT -LDSMAP -LOBLK -N +CCS -NL0 - NL1 -NLDLY -NOFLSH -OCRNL -OFDEL -OFILL -OLCUC -ONLCR -ONLRET -ONOCR - +OPOST -PAG EOUT -PARENB -PAREXT -PARMRK -PARODD -PENDIN -RCV1EN -RTS_TOG -TAB0 -T +AB1 -TAB2 -TAB3 -TABDLY -TCDSET -TCFLSH -TCGETA -TCGETS -TCIFLUSH -TCIOFF -TCIOF +LUSH -TCIO N -TCOFLUSH -TCOOFF -TCOON -TCSADRAIN -TCSAFLUSH -TCSANOW -TCSBRK -TCS +ETA -TCSET AF -TCSETAW -TCSETCTTY -TCSETS -TCSETSF -TCSETSW -TCXONC -TERM_D40 -TE +RM_D42 -TE RM_H45 -TERM_NONE -TERM_TEC -TERM_TEX -TERM_V10 -TERM_V61 -TIOCCBRK -T +IOCCDTR -T IOCCONS -TIOCEXCL -TIOCFLUSH -TIOCGETC -TIOCGETD -TIOCGETP -TIOCGLTC - +TIOCGPGRP -TIOCGSID -TIOCGSOFTCAR -TIOCGWINSZ -TIOCHPCL -TIOCKBOF -TIOCKBON -TIO +CLBIC -TIO CLBIS -TIOCLGET -TIOCLSET -TIOCMBIC -TIOCMBIS -TIOCMGET -TIOCMSET -TIO +CM_CAR -TI OCM_CD -TIOCM_CTS -TIOCM_DSR -TIOCM_DTR -TIOCM_LE -TIOCM_RI -TIOCM_RNG + -TIOCM_RT S -TIOCM_SR -TIOCM_ST -TIOCNOTTY -TIOCNXCL -TIOCOUTQ -TIOCREMOTE -TIOC +SBRK -TIOC SCTTY -TIOCSDTR -TIOCSETC -TIOCSETD -TIOCSETN -TIOCSETP -TIOCSIGNAL -T +IOCSLTC -T IOCSPGRP -TIOCSSID -TIOCSSOFTCAR -TIOCSTART -TIOCSTI -TIOCSTOP -TIOCSW +INSZ -TM_A NL -TM_CECHO -TM_CINVIS -TM_LCF -TM_NONE -TM_SET -TM_SNL -TOSTOP -VCEO +F -VCEOL - VDISCARD -VDSUSP -VEOF -VEOL -VEOL2 -VERASE -VINTR -VKILL -VLNEXT -VMI +N -VQUIT - VREPRINT -VSTART -VSTOP -VSUSP -VSWTCH -VT0 -VT1 -VTDLY -VTIME -VWERAS +E -WRAP -X CASE -XCLUDE -XMT1EN -XTABS WARNING! Neither ptsname() nor ptsname_r() could be found, so we cannot use a high-level interface like openpty(). No high-level lib or clone device has been found, we will use BSD-styl +e ptys. Writing IO::Tty::Constant.pm... DEFINE = Checking if your kit is complete... Looks good Writing Makefile for IO::Tty cp Tty.pm blib\lib\IO\Tty.pm cp Tty/Constant.pm blib\lib\IO\Tty\Constant.pm cp Pty.pm blib\lib\IO\Pty.pm D:\strawberry\perl\bin\perl.exe D:\strawberry\perl\lib\ExtUtils\xsubpp + -typemap D:\strawberry\perl\lib\ExtUtils\typemap Tty.xs > Tty.xsc && D:\straw +berry\perl \bin\perl.exe -MExtUtils::Command -e mv Tty.xsc Tty.c gcc -c -s -O2 -DWIN32 -DHAVE_DES_FCRYPT -DPERL_IMPLICIT_CONTE +XT -DPERL_ IMPLICIT_SYS -fno-strict-aliasing -DPERL_MSVCRT_READFIX -s -O2 -DVE +RSION=\"1. 07\" -DXS_VERSION=\"1.07\" "-ID:\strawberry\perl\lib\CORE" Tty.c Tty.xs:54:23: sys/ioctl.h: No such file or directory Tty.xs: In function `make_safe_fd': Tty.xs:225: error: `F_DUPFD' undeclared (first use in this function) Tty.xs:225: error: (Each undeclared identifier is reported only once Tty.xs:225: error: for each function it appears in.) dmake.EXE: Error code 129, while making 'Tty.o' RGIERSIG/IO-Tty-1.07.tar.gz D:\strawberry\c\bin\dmake.EXE -- NOT OK Failed during this command: RGIERSIG/IO-Tty-1.07.tar.gz : make NO cpan>
It appears that it fails because it expects to see sys/ioctl.h but it is not there. This is a fresh install of Strawberry Perl. Has anyone seen anything similar to this, or have any suggestions? Thanks in advance.

Replies are listed 'Best First'.
Re: Having trouble installing Module on Strawberry Perl
by Corion (Patriarch) on Jan 16, 2009 at 20:34 UTC

    IO::Tty doesn't seem to work on Windows, and that's not really surprising as Windows doesn't have much in the sense of TTYs in the first place. So I think it's unlikely that you'll get this to work.

      Thanks, that makes sense. That leads to another question. Does anyone know of another module that would allow me to ssh int a remote Linux PC, be able to su to another user, and be able to run commands as that user?

        Net::SSH::Perl and SSH or OpenSSH, or maybe just log in as the target user directly:

        open my $remote, '| ssh otheruser@remotehost' or die "Couldn't connect: $!"; print {$remote} "echo Test\n";

        But that way, you don't get much interactivity and this only works if you have passwordless keys set up or store the key in pageant or another ssh keyring.