From owner-freebsd-rc@FreeBSD.ORG Sat Dec 1 22:33:44 2012 Return-Path: Delivered-To: rc@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 1C896968; Sat, 1 Dec 2012 22:33:44 +0000 (UTC) (envelope-from yanegomi@gmail.com) Received: from mail-ob0-f182.google.com (mail-ob0-f182.google.com [209.85.214.182]) by mx1.freebsd.org (Postfix) with ESMTP id AC8328FC0C; Sat, 1 Dec 2012 22:33:43 +0000 (UTC) Received: by mail-ob0-f182.google.com with SMTP id 16so1850083obc.13 for ; Sat, 01 Dec 2012 14:33:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=BYhZlpAhqXB64AqTiS/QHgU9h5yeXPytc0OX8p5ZUqM=; b=NuBV2poVUXvaKPW9R35OHAHD0eNJjWF7miaafwuWKtld7wqbkS4vhl0F78EKXU3EY5 3VB4mQ4qLl8DJATGtOTzp0+iVZcg/BSH/O4MgH1cbDBi6ZVdb4BTfPhVVkunsvoHWBux RYZ3XdGGD7ozMJpJUEOBPqj4Byl4ytHWrdJ/k+F1y96S97G5zzqha+is94dLFnq8Wc9Z h7e40l+kr6zTNFR/wdvXG3qQAhnbTn8jEcx1qU3rxMViFFeB702/pWRRnfkNENoDk0v7 3GjjpV+vNigWFw3J6Vn/gCJu+/Un2RMfNYQjv4ueZ6Au2KX62X4MPxfEXYGWzwyPJKvz He/w== MIME-Version: 1.0 Received: by 10.182.172.74 with SMTP id ba10mr962946obc.83.1354401223193; Sat, 01 Dec 2012 14:33:43 -0800 (PST) Received: by 10.76.143.33 with HTTP; Sat, 1 Dec 2012 14:33:42 -0800 (PST) In-Reply-To: References: <20121202.015048.1122480556487090170.hrs@allbsd.org> Date: Sat, 1 Dec 2012 14:33:42 -0800 Message-ID: Subject: Re: RFC: sysctl -f filename From: Garrett Cooper To: Hiroki Sato Content-Type: multipart/mixed; boundary=e89a8f839f6fcab2b704cfd21bbb Cc: rc@freebsd.org, current@freebsd.org X-BeenThere: freebsd-rc@freebsd.org X-Mailman-Version: 2.1.14 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: Sat, 01 Dec 2012 22:33:44 -0000 --e89a8f839f6fcab2b704cfd21bbb Content-Type: text/plain; charset=ISO-8859-1 On Sat, Dec 1, 2012 at 2:10 PM, Garrett Cooper wrote: > On Sat, Dec 1, 2012 at 8:50 AM, Hiroki Sato wrote: >> Hi, >> >> I would like comments about the attached patch for sysctl(8) to add a >> new option "-f filename". It supports reading of a file with >> key=value lines. >> >> As you probably know, we already have /etc/sysctl.conf and it is >> processed by rc.d/sysctl shell script in a line-by-line basis. The >> problem I want to fix is a confusing syntax of /etc/sysctl.conf. The >> file supports a typical configuration file syntax but problematic in >> some cases. For example: >> >> kern.coredump=1 >> >> works well in /etc/sysctl.conf, but >> >> kern.coredump="1" >> >> does not work. Similarly, it is difficult to use whitespaces and "#" >> in the value: >> >> OK: kern.domainname=domain\ name\ with\ spaces >> NG: kern.domainname="domain name with spaces" >> NG: kern.domainname=domain\ name\ including\ #\ character >> NG: kern.domainname=domain\ name\ including\ \#\ character >> >> The attached patch solves them, and in addition it displays an error >> message with a line number if there is something wrong in the file >> like this: >> >> % cat -n /etc/sysctl.conf >> ... >> 10 kern.coredump=1 >> 11 kern.coredump2=1 >> ... >> >> % /etc/rc.d/sysctl start >> sysctl: kern.coredump at line 10: Operation not permitted >> sysctl: unknown oid 'kern.coredump2' at line 11 >> >> # /etc/rc.d/sysctl start >> kern.coredump: 1 -> 1 >> sysctl: unknown oid 'kern.coredump2' at line 11 >> >> Any comments are welcome. > > Why change the tool when we can change the rc script to do the > right thing? I have a patch I'm working on to resolve this (you hit an > itch I've been meaning to scratch for a little while). This should work. I also refactored the script to get it down to 80 columns. I've attached the debug output and the diff for the debug version of the script. Cheers, -Garrett # diff -u etc/rc.d/sysctl etc/rc.d/sysctl.debug | sed -e 's,\.debug,,' --- etc/rc.d/sysctl 2012-12-01 14:29:31.948502097 -0800 +++ etc/rc.d/sysctl 2012-12-01 14:29:21.694501765 -0800 @@ -38,6 +38,10 @@ val="${val#\"*}" val="${val%%\"*}" + debug "line -> '$line'" + debug "mib -> '$mib'" + debug "val -> '$val'" + if current_value=`${SYSCTL} -n "${mib}" 2>/dev/null`; then if [ "${current_value}" = "${val}" ]; then continue ./etc/rc.d/sysctl: DEBUG: run_rc_command: doit: sysctl_start ./etc/rc.d/sysctl: DEBUG: line -> 'net.inet.tcp.recvspace=262144' ./etc/rc.d/sysctl: DEBUG: mib -> 'net.inet.tcp.recvspace' ./etc/rc.d/sysctl: DEBUG: val -> '262144' ./etc/rc.d/sysctl: DEBUG: line -> 'net.inet.tcp.sendspace="231072' ./etc/rc.d/sysctl: DEBUG: mib -> 'net.inet.tcp.sendspace' ./etc/rc.d/sysctl: DEBUG: val -> '231072' ./etc/rc.d/sysctl: DEBUG: line -> 'net.inet.tcp.sendspace="131074"' ./etc/rc.d/sysctl: DEBUG: mib -> 'net.inet.tcp.sendspace' ./etc/rc.d/sysctl: DEBUG: val -> '131074' ./etc/rc.d/sysctl: DEBUG: line -> 'net.inet.udp.recvspace=131072' ./etc/rc.d/sysctl: DEBUG: mib -> 'net.inet.udp.recvspace' ./etc/rc.d/sysctl: DEBUG: val -> '131072' ./etc/rc.d/sysctl: DEBUG: line -> 'kern.corefile=' ./etc/rc.d/sysctl: DEBUG: mib -> 'kern.corefile' ./etc/rc.d/sysctl: DEBUG: val -> '' ./etc/rc.d/sysctl: DEBUG: line -> 'kern.corefile="#' ./etc/rc.d/sysctl: DEBUG: mib -> 'kern.corefile' ./etc/rc.d/sysctl: DEBUG: val -> '#' ./etc/rc.d/sysctl: DEBUG: line -> 'kern.corefile="# abcd' ./etc/rc.d/sysctl: DEBUG: mib -> 'kern.corefile' ./etc/rc.d/sysctl: DEBUG: val -> '# abcd' ./etc/rc.d/sysctl: DEBUG: line -> 'kern.corefile="# abcd" #' ./etc/rc.d/sysctl: DEBUG: mib -> 'kern.corefile' ./etc/rc.d/sysctl: DEBUG: val -> '# abcd' ./etc/rc.d/sysctl: DEBUG: line -> 'kern.corefile="# abcd" #' ./etc/rc.d/sysctl: DEBUG: mib -> 'kern.corefile' ./etc/rc.d/sysctl: DEBUG: val -> '# abcd' ./etc/rc.d/sysctl: DEBUG: line -> 'kern.corefile="# abcd " #' ./etc/rc.d/sysctl: DEBUG: mib -> 'kern.corefile' ./etc/rc.d/sysctl: DEBUG: val -> '# abcd ' ./etc/rc.d/sysctl: DEBUG: line -> 'kern.corefile="# abcd " #' ./etc/rc.d/sysctl: DEBUG: mib -> 'kern.corefile' ./etc/rc.d/sysctl: DEBUG: val -> '# abcd ' ./etc/rc.d/sysctl: DEBUG: line -> 'kern.corefile="%N.core"' ./etc/rc.d/sysctl: DEBUG: mib -> 'kern.corefile' ./etc/rc.d/sysctl: DEBUG: val -> '%N.core' --e89a8f839f6fcab2b704cfd21bbb Content-Type: application/octet-stream; name="make-etc-rc.d-sysctl-quote-comment-and-space-aware.patch" Content-Disposition: attachment; filename="make-etc-rc.d-sysctl-quote-comment-and-space-aware.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ha7bej930 SW5kZXg6IGV0Yy9yYy5kL3N5c2N0bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBldGMvcmMuZC9zeXNjdGwJKHJl dmlzaW9uIDI0Mzc0NykKKysrIGV0Yy9yYy5kL3N5c2N0bAkod29ya2luZyBjb3B5KQpAQCAtMTks MzMgKzE5LDM2IEBACiAjCiBwYXJzZV9maWxlKCkKIHsKLQlpZiBbIC1mICQxIF07IHRoZW4KLQkJ d2hpbGUgcmVhZCB2YXIgY29tbWVudHMKLQkJZG8KLQkJCWNhc2UgJHt2YXJ9IGluCi0JCQlcIyp8 JycpCi0JCQkJOzsKLQkJCSopCi0JCQkJbWliPSR7dmFyJT0qfQotCQkJCXZhbD0ke3ZhciMqPX0K KwlpZiBbICEgLWYgIiQxIiBdOyB0aGVuCisJCXJldHVybiAwCisJZmkKKwlsb2NhbCBJRlM9Igor IgorCXdoaWxlIHJlYWQgbGluZQorCWRvCisJCWNhc2UgIiR7bGluZSVcIyp9IiBpbgorCQknJykK KwkJCWNvbnRpbnVlCisJCQk7OworCQllc2FjCisJCWxpbmU9IiR7bGluZSVcICp9IgogCi0JCQkJ aWYgY3VycmVudF92YWx1ZT1gJHtTWVNDVEx9IC1uICR7bWlifSAyPi9kZXYvbnVsbGA7IHRoZW4K LQkJCQkJY2FzZSAke2N1cnJlbnRfdmFsdWV9IGluCi0JCQkJCSR7dmFsfSkKLQkJCQkJCTs7Ci0J CQkJCSopCi0JCQkJCQlpZiAhIHN5c2N0bCAiJHt2YXJ9IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4K LQkJCQkJCQl3YXJuICJ1bmFibGUgdG8gc2V0ICR7dmFyfSIKLQkJCQkJCWZpCi0JCQkJCQk7Owot CQkJCQllc2FjCi0JCQkJZWxpZiBbICIkMiIgPSAibGFzdCIgXTsgdGhlbgotCQkJCQl3YXJuICJz eXNjdGwgJHttaWJ9IGRvZXMgbm90IGV4aXN0LiIKLQkJCQlmaQotCQkJCTs7Ci0JCQllc2FjCi0J CWRvbmUgPCAkMQotCWZpCisJCW1pYj0iJHtsaW5lJT0qfSIKKwkJdmFsPSIke2xpbmUjKj19Igor CQl2YWw9IiR7dmFsI1wiKn0iCisJCXZhbD0iJHt2YWwlJVwiKn0iCisKKwkJaWYgY3VycmVudF92 YWx1ZT1gJHtTWVNDVEx9IC1uICIke21pYn0iIDI+L2Rldi9udWxsYDsgdGhlbgorCQkJaWYgWyAi JHtjdXJyZW50X3ZhbHVlfSIgPSAiJHt2YWx9IiBdOyB0aGVuCisJCQkJY29udGludWUKKwkJCWZp CisJCQlpZiAhIHN5c2N0bCAiJHttaWJ9PSR7dmFsfSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJ CQkJd2FybiAidW5hYmxlIHRvIHNldCAke21pYn09JHt2YWx9IgorCQkJZmkKKwkJZWxpZiBbICIk MiIgPSAibGFzdCIgXTsgdGhlbgorCQkJd2FybiAic3lzY3RsICR7bWlifSBkb2VzIG5vdCBleGlz dC4iCisJCWZpCisJZG9uZSA8ICIkMSIKIH0KIAogc3lzY3RsX3N0YXJ0KCkK --e89a8f839f6fcab2b704cfd21bbb--