Adding lines to /etc/rc.conf during sysinstall wihout
being "REMOVED"
Antony Mawer
fbsd-questions at mawer.org
Sun Dec 18 01:18:12 PST 2005
On 17/12/2005 4:22 AM, Josh Endries wrote:
> Does anyone know the correct way to add lines to rc.conf without
> sysinstall commenting them out and prepending "REMOVED" to them,
> during an automated install.cfg routine? Currently I have a pkg I
> made that adds stuff like ntp.conf and rc.conf, but all the lines in
> my custom rc.conf are removed after the script finishes.
>
> I looked through the code for sysinstall but didn't see any way to
> disable this behavior (my C isn't very good). What would be the
> correct way to do this? I'm now having my pkg install a rc.d script
> which cat's >> /etc/rc.conf...
I hit this same problem in building a custom installation disc, and
wound up extending sysinstall to have a shutdownNoRC that would function
the same as the "shutdown" statement in an install.cfg, only without
touching the rc.conf. This was useful for us, as we installed a custom
rc.conf and did not want sysinstall to touch it.
I also added a "poweroff" and "poweroffNoRC" methods that function the
same as the "shutdown" statement, only power off the machine instead.
This can be quite handy in a production line environment, when used in
conjunction with the cdcontrol(1) command to eject the CD, prior to
powering off the completed system.
I've attached the patch if anyone is interested... perhaps if there is
sufficient interest then someone could see about getting this committed.
The attached patch is against 6.0-RELEASE.
Regards
Antony
-------------- next part --------------
Index: usr.sbin/sysinstall/dispatch.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/sysinstall/dispatch.c,v
retrieving revision 1.47
diff -u -r1.47 dispatch.c
--- usr.sbin/sysinstall/dispatch.c 30 Aug 2004 21:03:09 -0000 1.47
+++ usr.sbin/sysinstall/dispatch.c 18 Nov 2005 02:11:20 -0000
@@ -43,6 +43,9 @@
#include "list.h"
static int dispatch_shutdown(dialogMenuItem *unused);
+static int dispatch_shutdown_norc(dialogMenuItem *unused);
+static int dispatch_poweroff(dialogMenuItem *unused);
+static int dispatch_poweroff_norc(dialogMenuItem *unused);
static int dispatch_systemExecute(dialogMenuItem *unused);
static int dispatch_msgConfirm(dialogMenuItem *unused);
static int dispatch_mediaClose(dialogMenuItem *unused);
@@ -111,6 +114,9 @@
{ "addGroup", userAddGroup },
{ "addUser", userAddUser },
{ "shutdown", dispatch_shutdown },
+ { "shutdownNoRC", dispatch_shutdown_norc },
+ { "poweroff", dispatch_poweroff },
+ { "poweroffNoRC", dispatch_poweroff_norc },
{ "system", dispatch_systemExecute },
{ "dumpVariables", dump_variables },
{ "tcpMenuSelect", tcpMenuSelect },
@@ -178,6 +184,27 @@
}
static int
+dispatch_shutdown_norc(dialogMenuItem *unused)
+{
+ systemShutdownNow(0, SHUTDOWN_NO_RC_CONF);
+ return DITEM_FAILURE;
+}
+
+static int
+dispatch_poweroff(dialogMenuItem *unused)
+{
+ systemShutdownNow(0, SHUTDOWN_POWEROFF);
+ return DITEM_FAILURE;
+}
+
+static int
+dispatch_poweroff_norc(dialogMenuItem *unused)
+{
+ systemShutdownNow(0, SHUTDOWN_POWEROFF | SHUTDOWN_NO_RC_CONF);
+ return DITEM_FAILURE;
+}
+
+static int
dispatch_systemExecute(dialogMenuItem *unused)
{
char *cmd = variable_get(VAR_COMMAND);
Index: usr.sbin/sysinstall/sysinstall.8
===================================================================
RCS file: /home/ncvs/src/usr.sbin/sysinstall/sysinstall.8,v
retrieving revision 1.69.2.1
diff -u -r1.69.2.1 sysinstall.8
--- usr.sbin/sysinstall/sysinstall.8 9 Oct 2005 03:48:42 -0000 1.69.2.1
+++ usr.sbin/sysinstall/sysinstall.8 18 Nov 2005 01:55:58 -0000
@@ -813,6 +813,26 @@
.Pp
.Sy Variables :
None
+.It shutdownNoRC
+Stop the script and terminate sysinstall, but do not touch
+.Pa /etc/rc.conf .
+.Pp
+.Sy Variables :
+None
+.It poweroff
+The same as
+.Pa shutdown ,
+only power off the system (if possible) rather than rebooting.
+.Pp
+.Sy Variables :
+None
+.It poweroffNoRC
+The same as
+.Pa shutdownNoRC ,
+only power off the system (if possible) rather than rebooting.
+.Pp
+.Sy Variables :
+None
.It system
Execute an arbitrary command with
.Xr system 3
Index: usr.sbin/sysinstall/sysinstall.h
===================================================================
RCS file: /home/ncvs/src/usr.sbin/sysinstall/sysinstall.h,v
retrieving revision 1.264.2.1
diff -u -r1.264.2.1 sysinstall.h
--- usr.sbin/sysinstall/sysinstall.h 7 Oct 2005 15:56:30 -0000 1.264.2.1
+++ usr.sbin/sysinstall/sysinstall.h 18 Nov 2005 02:09:31 -0000
@@ -395,6 +395,10 @@
char extras[EXTRAS_FIELD_LEN];
} DevInfo;
+/* systemShutdownNow bitfield flags */
+#define SHUTDOWN_POWEROFF 0x1 /* Power off after shutdown */
+#define SHUTDOWN_NO_RC_CONF 0x2 /* Don't attempt to update rc.conf */
+
/*** Externs ***/
extern jmp_buf BailOut; /* Used to get the heck out */
@@ -808,6 +812,7 @@
/* system.c */
extern void systemInitialize(int argc, char **argv);
extern void systemShutdown(int status);
+extern void systemShutdownNow(int status, int shutdown_flags);
extern int execExecute(char *cmd, char *name);
extern int systemExecute(char *cmd);
extern void systemSuspendDialog(void);
Index: usr.sbin/sysinstall/system.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/sysinstall/system.c,v
retrieving revision 1.124.2.1
diff -u -r1.124.2.1 system.c
--- usr.sbin/sysinstall/system.c 17 Aug 2005 13:32:29 -0000 1.124.2.1
+++ usr.sbin/sysinstall/system.c 18 Nov 2005 02:10:32 -0000
@@ -235,12 +235,20 @@
void
systemShutdown(int status)
{
+ systemShutdownNow(status, 0);
+}
+
+void
+systemShutdownNow(int status, int shutdown_flags)
+{
+
/* If some media is open, close it down */
if (status >=0)
mediaClose();
/* write out any changes to rc.conf .. */
- configRC_conf();
+ if (!(shutdown_flags & SHUTDOWN_NO_RC_CONF))
+ configRC_conf();
/* Shut down the dialog library */
if (DialogActive) {
@@ -261,7 +269,10 @@
#if defined(__alpha__) || defined(__sparc64__)
reboot(RB_HALT);
#else
- reboot(0);
+ if (shutdown_flags & SHUTDOWN_POWEROFF)
+ reboot(RB_HALT | RB_POWEROFF);
+ else
+ reboot(0);
#endif
}
else
More information about the freebsd-questions
mailing list