1/* 2 * The new sysinstall program. 3 * 4 * This is probably the last attempt in the `sysinstall' line, the next 5 * generation being slated to essentially a complete rewrite. 6 * 7 * $FreeBSD$ 8 * 9 * Copyright (c) 1995 10 * Jordan Hubbard. All rights reserved. 11 * 12 * Redistribution and use in source and binary forms, with or without 13 * modification, are permitted provided that the following conditions 14 * are met: 15 * 1. Redistributions of source code must retain the above copyright 16 * notice, this list of conditions and the following disclaimer, 17 * verbatim and that no modifications are made prior to this 18 * point in the file. 19 * 2. Redistributions in binary form must reproduce the above copyright 20 * notice, this list of conditions and the following disclaimer in the 21 * documentation and/or other materials provided with the distribution. 22 * 23 * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26 * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * 35 */ 36 37#include "sysinstall.h" 38#include <sys/errno.h> 39#include <sys/fcntl.h> 40#include <sys/param.h> 41#include <sys/mount.h> 42 43#include <limits.h> 44 45Boolean NFSMounted; 46static char mountpoint[] = "/dist"; 47 48Boolean 49mediaInitNFS(Device *dev) 50{ 51 Device *netDevice = (Device *)dev->private; 52 WINDOW *w = savescr(); 53 54 if (NFSMounted) 55 return TRUE; 56 57 if (!DEVICE_INIT(netDevice)) 58 return FALSE; 59 60 if (Mkdir(mountpoint)) 61 return FALSE; 62 63 msgNotify("Mounting %s over NFS on %s", dev->name, mountpoint); 64 if (vsystem("mount_nfs %s %s %s %s %s %s", 65 !variable_cmp(VAR_NFS_TCP, "YES") ? "-T" : "", 66 !variable_cmp(VAR_NFS_V3, "YES") ? "-3" : "", 67 !variable_cmp(VAR_SLOW_ETHER, "YES") ? 68 "-r 1024 -w 1024" : "-r 4096 -w 4096", 69 !variable_cmp(VAR_NFS_SECURE, "YES") ? "-P" : "", 70 dev->name, mountpoint)) { 71 msgConfirm("Error mounting %s on %s: %s.", dev->name, mountpoint, strerror(errno)); 72 if (netDevice) 73 DEVICE_SHUTDOWN(netDevice); 74 restorescr(w); 75 return FALSE; 76 } 77 NFSMounted = TRUE; 78 if (isDebug()) 79 msgDebug("Mounted NFS device %s onto %s\n", dev->name, mountpoint); 80 restorescr(w); 81 return TRUE; 82} 83 84FILE * 85mediaGetNFS(Device *dev, char *file, Boolean probe) 86{ 87 return mediaGenericGet(mountpoint, file); 88} 89 90void 91mediaShutdownNFS(Device *dev) 92{ 93 if (!NFSMounted) 94 return; 95 96 msgDebug("Unmounting NFS partition on %s\n", mountpoint); 97 if (unmount(mountpoint, MNT_FORCE) != 0) 98 msgConfirm("Could not unmount the NFS partition: %s", strerror(errno)); 99 NFSMounted = FALSE; 100 return; 101} 102