From owner-freebsd-rc@FreeBSD.ORG Fri Oct 13 01:26:09 2006 Return-Path: X-Original-To: freebsd-rc@freebsd.org Delivered-To: freebsd-rc@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id BDD3916A403 for ; Fri, 13 Oct 2006 01:26:09 +0000 (UTC) (envelope-from dat1965@yahoo.com) Received: from web55110.mail.re4.yahoo.com (web55110.mail.re4.yahoo.com [206.190.58.159]) by mx1.FreeBSD.org (Postfix) with SMTP id EDDC743D45 for ; Fri, 13 Oct 2006 01:26:08 +0000 (GMT) (envelope-from dat1965@yahoo.com) Received: (qmail 83515 invoked by uid 60001); 13 Oct 2006 01:26:05 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; h=Message-ID:Received:Date:From:Subject:To:Cc:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding; b=3Q+8df2BZWTntlslHn4icnf1xnjmPIKjwypvivolTD9GNfjaXInSpZUjhtTsrYHJoWrdMwX2AlHRDNSjDVQ3MRolDIOMM5MY/ERUoKZ4KupxevWhBYmgWzH5n0R2Qbo9Z6icUKUu+/wAHqNf00vi4fL5xG9AH7/teQ42Am7anqg= ; Message-ID: <20061013012604.83513.qmail@web55110.mail.re4.yahoo.com> Received: from [67.131.247.220] by web55110.mail.re4.yahoo.com via HTTP; Thu, 12 Oct 2006 18:26:03 PDT Date: Thu, 12 Oct 2006 18:26:03 -0700 (PDT) From: David Thompson To: Yar Tikhiy In-Reply-To: <20061012230423.GC72944@comp.chem.msu.su> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Cc: freebsd-rc@freebsd.org Subject: Re: Revised article on rc.d X-BeenThere: freebsd-rc@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Discussion related to /etc/rc.d design and implementation." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 13 Oct 2006 01:26:09 -0000 --- Yar Tikhiy wrote: > On Mon, Oct 09, 2006 at 06:56:19PM -0700, David Thompson wrote: > > --- Yar Tikhiy wrote: > > > After a long delay, I got down to my article on rc.d again. Many > > > thanks to Gary W. Swearingen for his valuable remarks. The new > > > version is available at http://people.freebsd.org/~yar/rcng/ . I > > > think this version can be added to our articles collection after a > > > few corrections that may be suggested by the readers. ;-) > > > > Regarding this paragraph, > > > > Note: An rc.d script must be written in the sh(1) language. It > > cannot be a binary executable because rc.d can opt to feed such > > scripts into a single instance of sh(1) instead of running each > > of them separately. This is controlled by an rc.conf(5) variable > > named rc_fast_and_loose. An rc.d script cannot be written in > > awk(1) or an interpreted language from ports for the same reason; > > in addition, it must be runnable early in the system startup > > sequence, before /usr has been mounted. > > > > This caveat is not really true in the strict technical sense. > > Consider if someone adds this line to their /etc/rc.d script, > > > > # KEYWORD: nostart > > > > then /etc/rc will not execute this script since rcorder is > > invoked with '-s nostart'. Thus the reasoning due to the > > $rc_fast_and_loose variable is not strictly accurate. That > > is, a script could technically be written in any interpreted > > language that happens to use '#' as its comment character; > > as long as the above comment line was added to the script. > > The problem is, of course, such scripts have to provide their > > own scaffolding, since rc.subr is written in sh(1); and the > > script cannot be run directly by /etc/rc due to the use of the > > sh(1) dot '.' operator (thus it needs 'KEYWORD: nostart' so > > that /etc/rc will skip it). > > > > Although not exactly clear in the above paragraph, the reason > > files in /etc/rc.d cannot be binary is because rc.d uses the > > sh(1) dot '.' operator *for all* invocations, like this, > > > > if [ -n "$rc_fast_and_loose" ]; then > > set $_arg; . $_file > > else > > ( trap "echo Script $_file interrupted; kill -QUIT $$" 3 > > trap "echo Script $_file interrupted; exit 1" 2 > > set $_arg; . $_file ) > > fi > > > > But for '.', files in /etc/rc.d *could* be binary, but > > even then rcorder expects to process text files, not binary > > files. rcorder uses fparseln() to read each file, but this > > doesn't really affect reading a binary file. Thus rcorder > > processes binary files benignly, try 'rcorder /bin/*' and > > you'll see consistent output. > > > > Also in that paragraph, when I read this, > > > > ... a binary executable because rc.d can opt to feed ... > > ^^^^ > > IMHO, it should probably say, > > > > ... a binary executable because /etc/rc can opt to feed ... > > ^^^^^^^ > > though I understand you're referring to the rc.d system, > > some clarity is gained in that sentence by using /etc/rc. > > I'd sum all the above up as follows: I went on slippery ground > when trying to give reasons for using sh(1) and only sh(1) :-) > How about the following paragraph as a replacement? > > Note: The language of choice for rc.d scripting is sh(1). > The tight integration between all rc.d components effectively > prevents individual scripts from being written in a different > language. Since not all rc.d scripts *have* to be executed by /etc/rc, a blurb that acknowledges that might satisfy things. With this in mind, I actually prefer the original note, worded something like this, Note: An rc.d script must be written in the sh(1) language, although this is only true for scripts that are designed to be invoked by /etc/rc. The reason is /etc/rc uses the sh(1) '.' command to execute an rc.d script, thus the syntax of the rc.d script must be sh(1). If you want to mention other details, like binary executables, or how 'rcorder -s nostart' allows 'KEYWORD: nostart' comments in an rc.d perl script, then this is good fodder for a follow-on paragraph, A special comment in your rc.d script can prevent /etc/rc from trying to execute it. Add this comment line to your rc.d script, the '#' must be column 1, # KEYWORD: nostart and your perl/python/ruby/sh rc.d script will be safely skipped by /etc/rc. But since almost all rc.d scripts are executed at system bootup, and therefore executed by /etc/rc, using a language other than sh(1) is almost never an option. Best Regards, David __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com