Thomas,

Summary:
    - using an auxiliary conf.d file seems to mostly work
    - 'needrestart' should, however flag 'systemctl restart' notice with
'skipping' in this case?
    - 'needrestart' should not prompt to read <RETURN> on 'consider
rebooting kernel' notification in this case


(hostname)# cat /etc/needrestart/conf.d/debian_frontend_noninteractive.conf
# Switch to list mode if debconf is running noninteractive
# Ref: Bug#803249: needrestart: Restarts services in debconf noninteractive
# Thomas Liske <tho...@fiasko-nw.net>

$nrconf{restart} = ( ($ENV{DEBIAN_FRONTEND} // '') eq 'noninteractive' ?
'l' : 'i');

1;
(changed it a tiny bit)

I ran an update on a system that hasn't been updated for quite some time,
with :

   19  DEBIAN_FRONTEND=noninteractive aptitude upgrade 2>&1 | tee
/tmp/aptup.log
   20  grep -i -e restart -e systemctl /tmp/aptup.log

and nothing appeared in the log.  :-)

(hostname)# DEBIAN_FRONTEND='noninteractive' needrestart
Scanning processes...
Scanning candidates...
Scanning kernel images...
Services to be restarted:
Skipping dbus.service...
Skipping getty@tty1.service...
Skipping kdm.service...
Skipping NetworkManager.service...
Skipping systemd-journald.service...
systemctl restart acpid.service atd.service autofs.service
console-kit-daemon.service cron.service dirmngr.service gpm.service
inetd.service irqbalance.service mcelog.service mdmonitor.service
nfs-common.service nis.service packagekit.service polkitd.service
rpcbind.service sendmail.service smartd.service ssh.service udisks2.service
upower.service user@0.service user@115.service user@3619.service

Looks like it's in list-only mode (still disconcerting to see the
'systemctl restart' line without a "Skipping"/"DEBUG" or other flagging
prefix, but clearly it's not actually issuing restarts:

pomelo2:~# systemctl status acpid.service
* acpid.service - ACPI event daemon
   Loaded: loaded (/lib/systemd/system/acpid.service; disabled)
   Active: active (running) since Sat 2015-11-28 10:30:26 MST; 1 months 24
days ago
...


(hostname)# needrestart
Scanning processes...
Scanning candidates...
Scanning kernel images...

Graphic (curses) UI comes up, queries if i want to restart various services
(i hit CANCEL)

BUT!
(hostname)# DEBIAN_FRONTEND='noninteractive' needrestart -v
...
Restarting the system to load the new kernel will not be handled
automatically, so you should consider rebooting. [Return]
...

So, it still blocks there on a terminal read -- which it should not do if
we're truly noninteractive (but, it obviously "Does The Right Thing(tm)"if
stdin redirected from /dev/null.   Just would be nice if it did NOT prompt
if it's non-interactive (even in verbose mode).

--stephen

On Fri, Jan 22, 2016 at 4:21 PM, Thomas Liske <tho...@fiasko-nw.net> wrote:

> Hi Stephen,
>
> On Fri, Jan 22, 2016 at 11:44:30AM -0700, Stephen Dowdy wrote:
> > I believe the Felix is saying that 'needrestart' appears to be unaware of
> > the common explicit DEBIAN_FRONTEND=noninteractive setting used to
> indicate
> > that package management should be non-interactive (and if not, then *I*
> am)
> >
> > I will often use 'pdsh' to run forced package updates like so:
> >
> > $ cut -d: -f1 vulnerable.log | WCOLL=- pdsh -lroot 'aptitude update -q=2;
> > DEBIAN_FRONTEND=noninteractive aptitude -q=2 safe-upgrade --assume-yes -o
> > Dpkg::Options::="--force-confold" </dev/null'
> >
> > Unfortunately, 'needrestart's 'isatty' style checks are insufficient for
> my
> > needs here, as STDERR/STDOUT are attached to a pty associated with the
> > 'ssh' hitting all the systems i am updating...  I have no way of then
> > telling 'needrestart' to not restart services
> >
> > So, i unexpectedly got a bunch of systemctl restart invocations, and i
> find
> > that often borks things badly.
> >
> > If 'needrestart' could also check ${DEBIAN_FRONTEND}, that would be
> awesome.
> >
> > Otherwise, i suppose i will have to cfengine out a "Default No"
> > needrestart.conf configuration to all my systems.
>
> you could try to put something like
>
> cat <<EOF
> # Switch to list mode if debconf is running noninteractive
> $nrconf{restart} = (exists($ENV{DEBIAN_FRONTEND}) &&
> $ENV{DEBIAN_FRONTEND} eq 'noninteractive' ? 'l' : 'i');
>
> 1;
> EOF
>
> into /etc/needrestart/conf.d/noninteractive.conf. If it works we might
> should add it upstream...
>
>
> > So, indeed 'unattended-upgrades' runs are also triggering needrestart to
> > believe it is running interactively, and thus it restarts things.
> > 'unattended-upgrade' appears to buy into the "DEBIAN_FRONTEND" notion of
> > noninteractivity as well:
> >
> > # grep -i interactive /usr/bin/unattended-upgrade
> >     # set debconf to NON_INTERACTIVE, redirect output
> >     os.putenv("DEBIAN_FRONTEND", "noninteractive")
> >             env["DEBIAN_FRONTEND"] = "noninteractive"
>
> So the fix should work for unattended-upgrades, too.
>
>
> Thx & HTH,
> Thomas
>
> --
>
>     ::  WWW:                        https://fiasko-nw.net/~thomas/  ::
>    :::  Jabber:                   xmpp:tho...@jabber.fiasko-nw.net  :::
>     ::  flickr:             https://www.flickr.com/photos/laugufe/  ::
>



-- 
Stephen Dowdy  -  Systems Administrator  -  NCAR/RAL
303.497.2869   -  sdo...@ucar.edu        -  http://www.ral.ucar.edu/~sdowdy/

Reply via email to