From owner-freebsd-bugs Mon Jul 10 14:50: 9 2000 Delivered-To: freebsd-bugs@freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.ORG [204.216.27.21]) by hub.freebsd.org (Postfix) with ESMTP id 8F9A337B595 for ; Mon, 10 Jul 2000 14:50:01 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.9.3/8.9.2) id OAA11207; Mon, 10 Jul 2000 14:50:01 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: from alpo.whistle.com (alpo.whistle.com [207.76.204.38]) by hub.freebsd.org (Postfix) with ESMTP id 9E73937B568 for ; 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 ; 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 X-Send-Pr-Version: 3.2 Subject: misc/19837: Run Fit it floppy from serial port Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org >Number: 19837 >Category: misc >Synopsis: Run Fit it floppy from serial port >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Mon Jul 10 14:50:00 PDT 2000 >Closed-Date: >Last-Modified: >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: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message