From ambrisko@whistle.com  Mon Jul 10 14:45:06 2000
Return-Path: <ambrisko@whistle.com>
Received: from alpo.whistle.com (alpo.whistle.com [207.76.204.38])
	by hub.freebsd.org (Postfix) with ESMTP id 9E73937B568
	for <FreeBSD-gnats-submit@freebsd.org>; Mon, 10 Jul 2000 14:45:05 -0700 (PDT)
	(envelope-from ambrisko@whistle.com)
Received: from whistle.com (crab.whistle.com [207.76.205.112])
	by alpo.whistle.com (8.9.1a/8.9.1) with ESMTP id OAA42241
	for <FreeBSD-gnats-submit@freebsd.org>; Mon, 10 Jul 2000 14:36:57 -0700 (PDT)
Received: (from ambrisko@localhost)
	by whistle.com (8.9.3/8.9.1) id OAA16146;
	Mon, 10 Jul 2000 14:36:51 -0700 (PDT)
	(envelope-from ambrisko)
Message-Id: <200007102136.OAA16146@whistle.com>
Date: Mon, 10 Jul 2000 14:36:51 -0700 (PDT)
From: ambrisko@whistle.com
Reply-To: ambrisko@whistle.com
To: FreeBSD-gnats-submit@freebsd.org
Subject: Run Fit it floppy from serial port
X-Send-Pr-Version: 3.2

>Number:         19837
>Category:       bin
>Synopsis:       sysinstall(8): [patch] run Fix It floppy from serial port
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    ambrisko
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Mon Jul 10 14:50:00 PDT 2000
>Closed-Date:    Fri Feb 25 12:13:06 EST 2011
>Last-Modified:  Fri Feb 25 12:13:06 EST 2011
>Originator:     Doug Ambrisko
>Release:        FreeBSD 5.0-CURRENT i386
>Organization:
Whistle/IBM
>Environment:
The FixIt floppy doesn't work with a serial console since you can't
switch vty's.  So we have to do something else.

>Description:

>How-To-Repeat:
Try to use FixIt floppy from a serial port.  It will say switch to vtyx
which it can't do.

>Fix:

This patch comes from Joerg Wunsch (joerg_wunsch@uriah.heep.sax.de)
with some fixes/enhancements and testing by myself.  It exits
libdialog, spawns the shell as needed.  When the shell is exited
it then re-starts libdialog and continues.  It gets tricky due to the
forked shell.

Index: install.c
===================================================================
RCS file: /cvs/freebsd/src/release/sysinstall/install.c,v
retrieving revision 1.274
diff -c -r1.274 install.c
*** install.c	2000/05/31 00:57:48	1.274
--- install.c	2000/07/10 21:25:20
***************
*** 56,61 ****
--- 56,62 ----
   * Used by package.c
   */
  int _interactiveHack;
+ int FixItMode = 0;
  
  static void	create_termcap(void);
  static void	fixit_common(void);
***************
*** 248,255 ****
--- 249,258 ----
  int
  installFixitHoloShell(dialogMenuItem *self)
  {
+     FixItMode = 1;
      systemCreateHoloshell();
      return DITEM_SUCCESS;
+     FixItMode = 0;
  }
  
  int
***************
*** 397,402 ****
--- 400,407 ----
  	msgConfirm("Couldn't symlink the /etc/ files!  I'm not sure I like this..");
      if (!file_readable(TERMCAP_FILE))
  	create_termcap();
+     if (!OnVTY)
+ 	systemSuspendDialog();	/* must be before the fork() */
      if (!(child = fork())) {
  	int i, fd, fdstop;
  	struct termios foo;
Index: sysinstall.h
===================================================================
RCS file: /cvs/freebsd/src/release/sysinstall/sysinstall.h,v
retrieving revision 1.190
diff -c -r1.190 sysinstall.h
*** sysinstall.h	2000/06/05 13:17:23	1.190
--- sysinstall.h	2000/07/10 21:25:20
***************
*** 398,403 ****
--- 398,404 ----
  extern DMenu		MenuUsermgmt;		/* User management menu				*/
  extern DMenu		MenuFixit;		/* Fixit floppy/CDROM/shell menu		*/
  extern DMenu		MenuXF86Config;		/* Select XFree86 configuration type		*/
+ extern int              FixItMode;              /* FixItMode starts shell onc urrent device (ie Serial port) */
  
  /* Stuff from libdialog which isn't properly declared outside */
  extern void display_helpfile(void);
***************
*** 707,712 ****
--- 708,715 ----
  extern void	systemShutdown(int status);
  extern int	execExecute(char *cmd, char *name);
  extern int	systemExecute(char *cmd);
+ extern void	systemSuspendDialog(void);
+ extern void	systemResumeDialog(void);
  extern int	systemDisplayHelp(char *file);
  extern char	*systemHelpFile(char *file, char *buf);
  extern void	systemChangeFont(const u_char font[]);
Index: system.c
===================================================================
RCS file: /cvs/freebsd/src/release/sysinstall/system.c,v
retrieving revision 1.104
diff -c -r1.104 system.c
*** system.c	2000/03/25 04:23:08	1.104
--- system.c	2000/07/10 21:25:20
***************
*** 217,222 ****
--- 217,244 ----
      return status;
  }
  
+ /* suspend/resume libdialog/curses screen */
+ static    WINDOW *oldW;
+ 
+ void
+ systemSuspendDialog(void)
+ {
+ 
+     oldW  = savescr();
+     dialog_clear();
+     dialog_update();
+     end_dialog();
+     DialogActive = FALSE;
+ }
+ 
+ void
+ systemResumeDialog(void)
+ {
+ 
+     DialogActive = TRUE;
+     restorescr(oldW);
+ }
+ 
  /* Display a help file in a filebox */
  int
  systemDisplayHelp(char *file)
***************
*** 355,361 ****
  void
  systemCreateHoloshell(void)
  {
!     if (OnVTY && RunningAsInit) {
  
  	if (ehs_pid != 0) {
  	    int pstat;
--- 377,385 ----
  void
  systemCreateHoloshell(void)
  {
!     int waitstatus;
! 
!     if ((FixItMode || OnVTY) && RunningAsInit) {
  
  	if (ehs_pid != 0) {
  	    int pstat;
***************
*** 377,382 ****
--- 401,408 ----
  	    (void) waitpid(ehs_pid, &pstat, WNOHANG);
  	}
  
+ 	if (!OnVTY)
+ 	    systemSuspendDialog();	/* must be before the fork() */
  	if ((ehs_pid = fork()) == 0) {
  	    int i, fd;
  	    struct termios foo;
***************
*** 385,391 ****
  	    ioctl(0, TIOCNOTTY, NULL);
  	    for (i = getdtablesize(); i >= 0; --i)
  		close(i);
! 	    fd = open("/dev/ttyv3", O_RDWR);
  	    ioctl(0, TIOCSCTTY, &fd);
  	    dup2(0, 1);
  	    dup2(0, 2);
--- 411,420 ----
  	    ioctl(0, TIOCNOTTY, NULL);
  	    for (i = getdtablesize(); i >= 0; --i)
  		close(i);
! 	    if (OnVTY)
! 	        fd = open("/dev/ttyv3", O_RDWR);
! 	    else
! 	        fd = open("/dev/console", O_RDWR);
  	    ioctl(0, TIOCSCTTY, &fd);
  	    dup2(0, 1);
  	    dup2(0, 2);
***************
*** 400,415 ****
  	    }
  	    else
  		msgDebug("Doctor: I'm unable to get the terminal attributes!\n");
  	    execlp("sh", "-sh", 0);
  	    msgDebug("Was unable to execute sh for Holographic shell!\n");
  	    exit(1);
  	}
  	else {
! 	    WINDOW *w = savescr();
  
! 	    msgNotify("Starting an emergency holographic shell on VTY4");
! 	    sleep(2);
! 	    restorescr(w);
  	}
      }
  }
--- 429,454 ----
  	    }
  	    else
  		msgDebug("Doctor: I'm unable to get the terminal attributes!\n");
+ 	    if (!OnVTY){
+ 	        printf("Type ``exit'' in this fixit shell to resume sysinstall.\n\n");
+ 		fflush(stdout);
+ 	    }
  	    execlp("sh", "-sh", 0);
  	    msgDebug("Was unable to execute sh for Holographic shell!\n");
  	    exit(1);
  	}
  	else {
! 	    if (OnVTY) {
! 	        WINDOW *w = savescr();
  
! 	        msgNotify("Starting an emergency holographic shell on VTY4");
! 	        sleep(2);
! 	        restorescr(w);
! 	    }
! 	    if (!OnVTY){
! 	        (void)waitpid(ehs_pid, &waitstatus, 0);
! 	        systemResumeDialog();
! 	    }
  	}
      }
  }

>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->murray 
Responsible-Changed-By: sheldonh 
Responsible-Changed-When: Tue Jul 11 01:43:26 PDT 2000 
Responsible-Changed-Why:  
Mr Stokely is being groomed as the next Mr Sysinstall. :-) 

http://www.freebsd.org/cgi/query-pr.cgi?pr=19837 
Responsible-Changed-From-To: murray->ambrisko 
Responsible-Changed-By: murray 
Responsible-Changed-When: Thu Dec 20 03:36:16 PST 2001 
Responsible-Changed-Why:  
Doug is a committer now! 

http://www.FreeBSD.org/cgi/query-pr.cgi?pr=19837 
State-Changed-From-To: open->closed 
State-Changed-By: eadler 
State-Changed-When: Fri Feb 25 12:12:43 EST 2011 
State-Changed-Why:  
Floppy installs are not supported 

http://www.freebsd.org/cgi/query-pr.cgi?pr=19837 
>Unformatted:
