Help me triage

Nifty Fedora Mitch niftyfedora at niftyegg.com
Mon Sep 29 04:39:38 UTC 2008


On Tue, Sep 23, 2008 at 04:30:15PM -0700, John Poelstra wrote:
>
> I'm trying to meet a (probably overly aggressive) personal goal .....
......
> # Is there a general policy around using perl in pre/post ?
> https://bugzilla.redhat.com/show_bug.cgi?id=462996

John,

I suspect that there is not but perhaps there should be.

I have see numerous packages fail in their pre/post scripts on inspection
of kickstart logs all for want of perl and various other tools.....

Eliminating unnecessary and redundant tools when possible would be a positive step....
But what tools are the desired core set of tools?

In the context of Linux as it is today I would prefer Python over Perl and while
sh+stuff is traditional I think Python is rich enough and just fine.

As the below shows, Perl is not doing anything very complex and if the
system has enough Python to run rpm and yum it should be possible to
recode the scripts.

With regard to sh in pre/post tools....
With sh the interesting actions are commonly done by tools in the "+stuff"
category for which a partial list looks sort of like:
	[, ar, at, awk, basename, bash, batch, bc, cat, chcon,
	checkpolicy, chgrp, chmod, chown, ci, cksum, clear, cmp, co, col,
	colcrt, colrm, column, cp, cpio, curl, cut, cut, date, dc, dd,
	df, diff, diff3, dig, domainname, du, echo, ed, ed, egrep, env,
	ex, exec, expect, false, fgrep, file, find, find, fmt, ftp, gawk,
	getopt, gettext, grep, gtar, gunzip, gzip, head, HEAD, hexdump,
	host, hostname, install, ipcalc, join, kill, last, ldd, less,
	link, ln, locale, ls, make, mkdir, mknod, mktemp, mv, netstat,
	nisdomainname, od, ping, ping6, ps, pwd, rcp, rcs, rm, rmdir,
	rsync, scp, sed, sleep, sort, stty, sudo, sum, tail, tar,
	tee, test, time, touch, tr, uniq, unlink, unzip, uptime, w,
	wall, wc, wget, which, who, yes, zcat....
The point of the list is that sh and friends can pull in a longish list so shell
scripts are not always the simplifying win one might want.

In the case of nss-mdns when wanted it is so fundamental (name services) 
that the less stuff it depends on the better.

======================================================================================
Description :
nss-mdns is a plugin for the GNU Name Service Switch (NSS) functionality of
the GNU C Library (glibc) providing host name resolution via Multicast DNS
(aka Zeroconf, aka Apple Rendezvous, aka Apple Bonjour), effectively allowing
name resolution by common Unix/Linux programs in the ad-hoc mDNS domain .local.

======================================================================================
$ rpm -q -f  /etc/nsswitch.conf
glibc-2.8-8.x86_64
glibc-2.8-8.i686

======================================================================================
# rpm -q --scripts -p ./fedora/packages/nss-mdns-0.10-4.fc9.x86_64.rpm
postinstall scriptlet (using /bin/sh):
/sbin/ldconfig
# Perl-fu to add mdns4_minimal to the hosts line of /etc/nsswitch.conf
if [ -f /etc/nsswitch.conf ] ; then
	perl -ibak -pe '
		sub insert {
			my @bits = split(" ", shift);
		
			if (grep { $_ eq "mdns4_minimal" || $_ eq "mdns4"
				|| $_ eq "mdns6_minimal" || $_ eq "mdns6"
				|| $_ eq "mdns_minimal" || $_ eq "mdns" } @bits) {
				return join " ", @bits;
			}
			
			return join " ", map {
				$_ eq "dns" ? ("mdns4_minimal", "[NOTFOUND=return]", $_) : $_
			} @bits;
		}

		s/^(hosts:\s+)(.*)$/$1.insert($2)/e;
	' /etc/nsswitch.conf
fi
preuninstall scriptlet (using /bin/sh):
# Perl-fu to remove mdns4_minimal from the hosts line of /etc/nsswitch.conf
if [ "$1" -eq 0 -a -f /etc/nsswitch.conf ] ; then
	perl -ibak -pe '
		my @remove = (
			"mdns4_minimal [NOTFOUND=return]",
			"mdns4_minimal",
			"mdns4",
			"mdns6_minimal [NOTFOUND=return]",
			"mdns6_minimal",
			"mdns6",
			"mdns_minimal [NOTFOUND=return]",
			"mdns_minimal",
			"mdns",
		);
		sub remove {
			my $s = shift;
			foreach my $bit (@remove) {
				$s =~ s/\s+\Q$bit\E//g;
			}
			return $s;
		}
		s/^(hosts:\s+)(.*)$/$1.remove($2)/e;
	' /etc/nsswitch.conf
fi
postuninstall program: /sbin/ldconfig
======================================================================================
 
BTW: Some projects like the OLPC project have very limited resources and perl is
not on the default list but Python is.  I noticed this with ntptrace....  on an XO
recently...  






-- 
	T o m  M i t c h e l l 
	Found me a new hat, now what?




More information about the fedora-test-list mailing list