Bug 712782 - LCDd service Failed to start
Summary: LCDd service Failed to start
Keywords:
Status: CLOSED RAWHIDE
Alias: None
Product: Fedora
Classification: Fedora
Component: lcdproc
Version: 16
Hardware: x86_64
OS: Linux
unspecified
unspecified
Target Milestone: ---
Assignee: Nicolas Chauvet (kwizart)
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2011-06-13 06:11 UTC by Michael
Modified: 2012-06-17 06:19 UTC (History)
8 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2012-03-26 22:23:49 UTC
Type: ---
Embargoed:


Attachments (Terms of Use)
Working systemd service file (194 bytes, text/plain)
2012-01-12 08:23 UTC, mlg9000@yahoo.com
no flags Details

Description Michael 2011-06-13 06:11:34 UTC
Description of problem:


Version-Release number of selected component (if applicable):
Lcdproc 0.5.4 .fc15

How reproducible:

I have a Fedora 14 with Lcdproc installed working with a LCD 4x20 display (lcd2usb) without problem, after upgrade to Fedora 15 the LCDd service failed to start.

I unistall and reinstall the lcdproc for fc15 with the same result.

If i run LCDd & lcdproc from a terminal they start without problem but 
when i try to start LCDd service i saw the following at the Log:

systemd[1]: LCDd.service: control process exited, code=exited status=1
systemd[1]: Unit LCDd.service entered failed state.


[systemctl status LCDd.service
LCDd.service - LSB: LCDproc Server Daemon
	  Loaded: loaded (/etc/rc.d/init.d/LCDd)
	  Active: failed since Mon, 13 Jun 2011 09:23:20 +0300; 19s ago
	 Process: 4675 ExecStart=/etc/rc.d/init.d/LCDd start (code=exited, status=1/FAILURE)
	  CGroup: name=systemd:/system/LCDd.service]


Steps to Reproduce:
1. 
2.
3.
  
Actual results:


Expected results:


Additional info:

Comment 1 Nicolas Chauvet (kwizart) 2011-07-07 12:23:12 UTC
Can you do the following (when the process isn't running):
bash -x /etc/init.d/lcdproc start


Thx

Comment 2 Michael 2011-07-07 13:07:41 UTC
# bash -x /etc/init.d/lcdproc start
+ prog=lcdproc
+ lockfile=/var/lock/subsys/lcdproc
+ configfile=/etc/sysconfig/lcdproc/lcdproc.conf
+ RETVAL=0
+ '[' -e /lib/lsb/init-functions ']'
+ . /lib/lsb/init-functions
+ '[' -e /etc/rc.d/init.d/functions ']'
+ . /etc/rc.d/init.d/functions
++ TEXTDOMAIN=initscripts
++ umask 022
++ PATH=/sbin:/usr/sbin:/bin:/usr/bin
++ export PATH
++ '[' 9143 -ne 1 -a -z '' ']'
++ /bin/mountpoint -q /cgroup/systemd
++ /bin/mountpoint -q /sys/fs/cgroup/systemd
++ case "$0" in
++ _use_systemctl=1
++ '[' -z '' ']'
++ COLUMNS=80
++ '[' -z '' ']'
++ '[' -r /dev/stderr ']'
+++ /sbin/consoletype
++ CONSOLETYPE=pty
++ '[' -z '' ']'
++ '[' -z '' ']'
++ '[' -f /etc/sysconfig/i18n ']'
++ . /etc/profile.d/lang.sh
++ unset LANGSH_SOURCED
++ '[' -z '' ']'
++ '[' -f /etc/sysconfig/init ']'
++ . /etc/sysconfig/init
+++ BOOTUP=color
+++ RES_COL=60
+++ MOVE_TO_COL='echo -en \033[60G'
+++ SETCOLOR_SUCCESS='echo -en \033[0;32m'
+++ SETCOLOR_FAILURE='echo -en \033[0;31m'
+++ SETCOLOR_WARNING='echo -en \033[0;33m'
+++ SETCOLOR_NORMAL='echo -en \033[0;39m'
+++ AUTOSWAP=no
+++ ACTIVE_CONSOLES='/dev/tty[1-6]'
+++ SINGLE=/sbin/sushell
++ '[' pty = serial ']'
++ __sed_discard_ignored_files='/\(~\|\.bak\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpmsave\)$/d'
++ '[' 1 = 1 ']'
++ '[' xstart = xstart -o xstart = xstop -o xstart = xrestart -o xstart = xreload -o xstart = xtry-restart -o xstart = xforce-reload -o xstart = xcondrestart ']'
++ systemctl_redirect /etc/init.d/lcdproc start
++ local s
++ local prog=lcdproc
++ local command=start
++ local options=
++ case "$command" in
++ s='Starting lcdproc (via systemctl): '
++ '[' -n '' ']'
++ action 'Starting lcdproc (via systemctl): ' /bin/systemctl start lcdproc.service
++ local STRING rc
++ STRING='Starting lcdproc (via systemctl): '
++ echo -n 'Starting lcdproc (via systemctl):  '
Starting lcdproc (via systemctl):  ++ shift
++ /bin/systemctl start lcdproc.service
Job failed. See system logs and 'systemctl status' for details.
++ failure 'Starting lcdproc (via systemctl): '
++ local rc=1
++ '[' color '!=' verbose -a -z '' ']'
++ echo_failure
++ '[' color = color ']'
++ echo -en '\033[60G'
                                                           ++ echo -n '['
[++ '[' color = color ']'
++ echo -en '\033[0;31m'
++ echo -n FAILED
FAILED++ '[' color = color ']'
++ echo -en '\033[0;39m'
++ echo -n ']'
]++ echo -ne '\r'
++ return 1
++ '[' -x /usr/bin/plymouth ']'
++ /usr/bin/plymouth --details
++ return 1
++ rc=1
++ echo

++ return 1
++ exit 1

Comment 3 Michael 2011-07-23 15:34:06 UTC
Any news on this ?

Comment 4 mrmag 2011-08-17 18:45:31 UTC
I have the exact same problem, would love to see a fix.

Comment 5 Nicolas Chauvet (kwizart) 2011-08-19 14:00:10 UTC
It could be related to a unappropriate error code of the LCDd init-script or something else. But it was working before F15.
I think that would help to have a native systemd units there.

Is it possible for someone affected by the bug to have a look?
http://fedoraproject.org/wiki/Packaging:Guidelines:Systemd

Thx

Comment 6 Michael 2011-09-04 10:45:51 UTC
At the script /etc/rc.d/init.d/LCDd
the error occurred at this section :

# Source function library.
if [ -e /etc/rc.d/init.d/functions ]; then
  . /etc/rc.d/init.d/functions
fi

i don't know if this help you.

Comment 7 jason.prokopowich 2011-11-10 02:27:29 UTC
I can start the LCDd binary via the command,

/usr/sbin/LCDd

and even with,

. /etc/rc.d/init.d/functions; daemon /usr/sbin/LCDd


but with,
systemctl start LCDd.service

I get this,
Job failed. See system logs and 'systemctl status' for details.

And in the logs,
Nov  9 20:20:34 mythfrt LCDd: lis: cannot initialise delay timing
Nov  9 20:20:34 mythfrt LCDd: Driver [lis] init failed, return code -1
Nov  9 20:20:34 mythfrt LCDd: Could not load driver lis
Nov  9 20:20:34 mythfrt LCDd: There is no output driver
Nov  9 20:20:34 mythfrt LCDd: Critical error while initializing, abort.


And all o these are satisfied,
        "LCDd.service"->"basic.target" [color="black"];
        "LCDd.service"->"shutdown.target" [color="red"];
        "LCDd.service"->"syslog.target" [color="green"];
        "LCDd.service"->"local-fs.target" [color="green"];
        "LCDd.service"->"network.target" [color="green"];
        "LCDd.service"->"remote-fs.target" [color="green"];
        "LCDd.service"->"udev.service" [color="green"];
        "LCDd.service"->"speech-dispatcherd.service" [color="green"];
        "LCDd.service"->"rpcbind.service" [color="green"];
        "LCDd.service"->"auditd.service" [color="green"];
        "LCDd.service"->"dnsmasq.service" [color="green"];
        "LCDd.service"->"basic.target" [color="green"];
        "LCDd.service"->"bttrack.service" [color="green"];
        "LCDd.service"->"btseed.service" [color="green"];
        "LCDd.service"->"sandbox.service" [color="green"];
        "LCDd.service"->"irda.service" [color="green"];
        "LCDd.service"->"restorecond.service" [color="green"];
        "LCDd.service"->"netconsole.service" [color="green"];

Comment 8 Michael 2011-11-19 07:53:01 UTC
The problem exist in Fedora 16 also !

Comment 9 Michael 2011-11-24 10:01:25 UTC
I spend some time yesterday investigating this bug.

Without the LCDd.conf in /etc/sysconfig/ the service started without problem, giving [OK].

With dummy or properly setup LCDd.conf failed to start as service.
At the same time if i run in the terminal the LCDd, starts without problem with the settings from LCDd.conf !


I also tried to create a systemd service for LCDd with the some result, failed to start as service
[http://fedoraproject.org/wiki/Packaging:Guidelines:Systemd] 
 


I don't understand where the problem is, as it works until Fedora 14.




I found that there is a new version of Lcdproc (http://sourceforge.net/projects/lcdproc/files/lcdproc/0.5.5/) with release note:

Known bugs:
===========
 - If vBars are used together with ICON_BLOCK_FILLED on the same screen
   and that icon is implemented as a custom char, it sometimes is replaced
   with a non full block from the vBar.
 - On Solaris the mtc_s16209x driver fails to compile. Configure LCDproc
   to exclude this driver.
 - The server config file LCDd.conf is not installed if 'make
   install-server' is used to install only the server without the clients.


Changes:
========
Key:
 - Something removed
 + Something added
 * Something changed / fixed

Updated drivers
---------------
 + New common 5x8 font for t6963, sed1520, mdm166a and i2500vfd drivers
 * CFontz: Fix display of bars
 + sed1330: Add support for HG25504
 * sed1520: Make it work with 68-family style interface
 * picolcd: Add OffBrightness, more icons and fix bignum
 * SureElec: Change port initialization (SF 3212891)
 * imonlcd: Fix spinning of disc icon
 + imon: Add bignum support
 * hd44780:
   * New (possibly faster) screen update algorithm
   * hd44780-imon: Add charmap for NEC uPD16314 and make it configurable
   * hd44780-ethlcd: fix LCDd hang up on network error (it exits now)
 * pyramid: Fix several problems making it more reliable
 * CFontzPacket: Use cellwidth = 5 on CFA-631 and CFA-635
 * t6963: Rewrite this driver fixing several problems

Build system
------------
 * Fix xosd detection
 * enable-extra-charmaps adds language specific charmaps (currently
   russian)

lcdproc client
--------------
 * Fix a single dot appearing on line 5 of the D screen
 * Make the iface screen more readable on 2x16 displays

Server core (LCDd)
------------------
 + Add an option to start LCDd with screen rotation disabled
 * Update LCDd.conf to be better understood by Config::Model

Comment 10 mlg9000@yahoo.com 2011-12-18 00:42:29 UTC
Any update on this?

Comment 11 Fedora Update System 2011-12-22 23:23:41 UTC
lcdproc-0.5.5-1.fc16 has been submitted as an update for Fedora 16.
https://admin.fedoraproject.org/updates/lcdproc-0.5.5-1.fc16

Comment 12 Fedora Update System 2011-12-22 23:27:16 UTC
lcdproc-0.5.5-1.fc15 has been submitted as an update for Fedora 15.
https://admin.fedoraproject.org/updates/lcdproc-0.5.5-1.fc15

Comment 13 mlg9000@yahoo.com 2011-12-22 23:51:37 UTC
The update for Fedora 16 (x86_64) does not make a difference for me.  The service fails with the same errors as above.  Starting manually does work as before as well.  Using the lis driver.

Comment 14 Fedora Update System 2011-12-23 03:28:23 UTC
Package lcdproc-0.5.5-1.fc15:
* should fix your issue,
* was pushed to the Fedora 15 testing repository,
* should be available at your local mirror within two days.
Update it with:
# su -c 'yum update --enablerepo=updates-testing lcdproc-0.5.5-1.fc15'
as soon as you are able to.
Please go to the following url:
https://admin.fedoraproject.org/updates/FEDORA-2011-17374/lcdproc-0.5.5-1.fc15
then log in and leave karma (feedback).

Comment 15 Michael 2011-12-23 06:54:33 UTC
The problem exist with this update in my Fedora 16 (x86_64).
The service fails but i can started manually (HD4480 driver).

Comment 16 Nicolas Chauvet (kwizart) 2011-12-23 21:46:54 UTC
From the bash -x output, systemd seems to catch the start call starting from sourcing the functions script. But maybe it miss some elements to start LCDd from the emulated init script (such as configuration or something else)...

I will try to investigate more next Wednesday, but help welcomed.

Comment 17 Ben Biron 2012-01-01 21:39:56 UTC
There seem to be a few problems with lcdproc-0.5.4-1.fc16.x86_64 on Fedora 16 x86_64.

1) It's looking for drivers in /usr/lib instead of /usr/lib64:

Jan  1 16:24:51 cihi LCDd: Could not open driver module /usr/lib/lcdproc/lis.so: /usr/lib/lcdproc/lis.so: cannot open shared object file: No such file or directory
Jan  1 16:24:51 cihi LCDd: Driver [lis] binding failed
Jan  1 16:24:51 cihi LCDd: Could not load driver lis
Jan  1 16:24:51 cihi LCDd: There is no output driver
Jan  1 16:24:51 cihi LCDd: Critical error while initializing, abort.
Jan  1 16:24:51 cihi LCDd[2853]: Starting LCDd service: [FAILED]
Jan  1 16:24:51 cihi systemd[1]: LCDd.service: control process exited, code=exited status=1
Jan  1 16:24:51 cihi systemd[1]: Unit LCDd.service entered failed state.

I worked around this on my system by doing:

$ cd /usr/lib
$ ln -s ../lib64/lcdproc

2) I can confirm what umproko5 has reported:

Jan  1 16:26:19 cihi LCDd: lis: cannot initialise delay timing
Jan  1 16:26:19 cihi LCDd: Driver [lis] init failed, return code -1
Jan  1 16:26:19 cihi LCDd: Could not load driver lis
Jan  1 16:26:19 cihi LCDd: There is no output driver
Jan  1 16:26:19 cihi LCDd: Critical error while initializing, abort.
Jan  1 16:26:19 cihi LCDd[2948]: Starting LCDd service: [FAILED]

And sure enough, with my workaround for #1 I can run /usr/sbin/LCDd as root from the command line and it works just fine.

Comment 18 Nicolas Chauvet (kwizart) 2012-01-03 22:04:08 UTC
(In reply to comment #17)
..
> Jan  1 16:24:51 cihi LCDd: Could not open driver module
> /usr/lib/lcdproc/lis.so: /usr/lib/lcdproc/lis.so: cannot open shared object
...
> $ cd /usr/lib
> $ ln -s ../lib64/lcdproc


Can you verify the setting in LCDd.conf about DriverPath ? (pointing to /usr/lib64/lcdproc ?)

 
> 2) I can confirm what umproko5 has reported:
.
> And sure enough, with my workaround for #1 I can run /usr/sbin/LCDd as root
> from the command line and it works just fine.

How this behave since your workaround #1 with service LCDd start ?

Comment 19 Ben Biron 2012-01-03 22:48:59 UTC
(In reply to comment #18)
> (In reply to comment #17)
> ..
> > Jan  1 16:24:51 cihi LCDd: Could not open driver module
> > /usr/lib/lcdproc/lis.so: /usr/lib/lcdproc/lis.so: cannot open shared object
> ...
> > $ cd /usr/lib
> > $ ln -s ../lib64/lcdproc
> 
> 
> Can you verify the setting in LCDd.conf about DriverPath ? (pointing to
> /usr/lib64/lcdproc ?)
> 

Ugh. My bad, I had copied an LCDd.conf from a previous, non 64bit install. Sure enough, the LCDd.conf.example included properly points to /usr/lib64/lcdproc.

> 
> > 2) I can confirm what umproko5 has reported:
> .
> > And sure enough, with my workaround for #1 I can run /usr/sbin/LCDd as root
> > from the command line and it works just fine.
> 
> How this behave since your workaround #1 with service LCDd start ?

This yields the same result as systemctl start LCD.service:

Jan  3 17:39:47 cihi LCDd: lis: cannot initialise delay timing
Jan  3 17:39:47 cihi LCDd: Driver [lis] init failed, return code -1
Jan  3 17:39:47 cihi LCDd: Could not load driver lis
Jan  3 17:39:47 cihi LCDd: There is no output driver
Jan  3 17:39:47 cihi LCDd: Critical error while initializing, abort.
Jan  3 17:39:47 cihi LCDd[4555]: Starting LCDd service: [FAILED]
Jan  3 17:39:47 cihi systemd[1]: LCDd.service: control process exited, code=exited status=1
Jan  3 17:39:47 cihi systemd[1]: Unit LCDd.service entered failed state.

Comment 20 Mamoru TASAKA 2012-01-12 04:43:55 UTC
I happened to see comments in bodhi, so I just tried to look
at this (Note that I don't use LCD).
Then:

(In reply to comment #7)
> but with,
> systemctl start LCDd.service
> 
> I get this,
> Job failed. See system logs and 'systemctl status' for details.
> 
> And in the logs,
> Nov  9 20:20:34 mythfrt LCDd: lis: cannot initialise delay timing <=======
> Nov  9 20:20:34 mythfrt LCDd: Driver [lis] init failed, return code -1
> Nov  9 20:20:34 mythfrt LCDd: Could not load driver lis
> Nov  9 20:20:34 mythfrt LCDd: There is no output driver
> Nov  9 20:20:34 mythfrt LCDd: Critical error while initializing, abort.
> 

This means that the following is failing:
server/drivers/lis.c:
   367  MODULE_EXPORT int
   368  lis_init(Driver *drvthis)
   369  {
   425          // initialise delay timing
   426          if (timing_init()) {
   427                  report(RPT_ERR, "%s: cannot initialise delay timing", drvthis->name);
   428                  return -1;
   429          }

Then server/drivers/timing.h:
   126  /**
   127   * Do necessary initialization for the selected waiting method.
   128   * \return  0 if successful, -1 on error.
   129   */
   130  static inline int
   131  timing_init()
   132  {
   133  #if defined DELAY_NANOSLEEP
   134          /* Change to Round-Robin scheduling for nanosleep */
   135          {
   136                  /* Set priority to 1 */
   137                  struct sched_param param;
   138                  param.sched_priority=1;
   139                  if (( sched_setscheduler(0, SCHED_RR, &param)) == -1) { <===============================
   140                          return -1;
   141                  }
   142          }
   143  #elif defined DELAY_IOCALLS
   144          if (port_access(0x3BD) == -1) {
   145                  return -1;
   146          }
   147  #endif
   148          return 0;
   149  }

And strace shows:
Jan 12 13:09:34 localhost LCDd[32018]: [pid 32025] sched_setscheduler(0, SCHED_RR, { 1 }) = -1 EPERM (Operation not permitted)
Jan 12 13:09:34 localhost LCDd[32018]: [pid 32025] write(2, "lis: cannot initialise delay tim"..., 35lis: cannot initialise delay timing) = 35

With this bug report:
https://www.libreoffice.org/bugzilla/show_bug.cgi?id=38383
it seems there is no way to use sched_setscheduler() under systemd (cgroup).
Perhaps timing_init() has to be patched to just return 0 without do
anything.

Comment 21 Mamoru TASAKA 2012-01-12 04:46:52 UTC
(In reply to comment #20)
> Perhaps timing_init() has to be patched to just return 0 without do
> anything.

Or lcdproc has to really provide native unit file for LCDd.service
(but this method can be applied only for F-17)

Comment 22 mlg9000@yahoo.com 2012-01-12 08:23:02 UTC
Created attachment 552337 [details]
Working systemd service file

Drop this in /lib/systemd/system and it will override the SystemV init script.

Comment 23 mlg9000@yahoo.com 2012-01-12 08:31:04 UTC
What's the rational for *not* wanting to provide a native unit file in F15/16?  We're still months away from F17 and this service is completely broken without it!

Comment 24 Mamoru TASAKA 2012-01-12 09:03:40 UTC
(In reply to comment #23)
> What's the rational for *not* wanting to provide a native unit file in F15/16? 

Because of this (Fedora's policy)
http://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Packages_migrating_to_a_systemd_unit_file_from_a_SysV_initscript

If some Fedora authority (perhaps FESCo, not me) gives special permission
to provide native unit file in F16/15, we can ship it.

> We're still months away from F17 and this service is completely broken without
> it!

Comment 25 Michael 2012-01-13 09:45:26 UTC
(In reply to comment #22)
> Created attachment 552337 [details]
> Working systemd service file
> 
> Drop this in /lib/systemd/system and it will override the SystemV init script.

This works for me ! 

Enable to load at startup with systemd and works without problem !

I will try to create a working systemd service file for lcdproc also ...
(based on this file)

Comment 26 Mamoru TASAKA 2012-01-14 15:08:20 UTC
(In reply to comment #24)
> (In reply to comment #23)
> > What's the rational for *not* wanting to provide a native unit file in F15/16? 
> 
> Because of this (Fedora's policy)
> http://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Packages_migrating_to_a_systemd_unit_file_from_a_SysV_initscript
> 
> If some Fedora authority (perhaps FESCo, not me) gives special permission
> to provide native unit file in F16/15, we can ship it.
> 
> > We're still months away from F17 and this service is completely broken without
> > it!

An alternative idea would be to provide systemd native unit file
on F-16/15, with its file name slightly altered (e.g. LCDd-systemd.service),
and with not changing file name on F-17 (i.e. LCDd.service).
This way does not conflict with Fedora's policy.

Comment 27 Nicolas Chauvet (kwizart) 2012-02-13 21:45:05 UTC
(In reply to comment #22)
> Created attachment 552337 [details]
> Working systemd service file
> 
> Drop this in /lib/systemd/system and it will override the SystemV init script.

I've imported it in F-17 but wondered if ControlGroup=cpu:/ is really needed ?

Comment 28 mlg9000@yahoo.com 2012-02-13 22:42:18 UTC
(In reply to comment #27)
> (In reply to comment #22)
> > Created attachment 552337 [details]
> > Working systemd service file
> > 
> > Drop this in /lib/systemd/system and it will override the SystemV init script.
> 
> I've imported it in F-17 but wondered if ControlGroup=cpu:/ is really needed ?

If you read through this bug report provided by Mamoru above it explains why this is required currently.  It's how I figured out this line was needed:

https://www.libreoffice.org/bugzilla/show_bug.cgi?id=38383

So for it to not be required it appears the either lcdproc needs to be patched to not call the sched_setscheduler kernel function or that function needs to be patched in the kernel.  At least that is how I understand it, someone else that knows a whole lot more about it then me may be able to elaborate further.

I don't think it hurts to leave that line in there, at least until someone has a chance to test this on a F17 build to be sure one way or another.

Comment 29 Nicolas Chauvet (kwizart) 2012-03-10 19:41:08 UTC
Please test with lcdproc-0.5.5-3.fc17 ? (on fedora 17).

Comment 30 Michael 2012-06-17 06:19:43 UTC
After upgrading to Fedora 17 i have the following problem :

When Fedora starts i saw in the LCD display the message " Welcome to lcdproc!"
but the service dont start with the following message from the log :


systemd[1]: PID file /run/LCDd.pid not readable (yet?) after start.
systemd[1]: LCDd.service operation timed out. Terminating.
systemd[1]: Unit LCDd.service entered failed state.

If i try :

 systemctl start LCDd.service
Job failed. See system journal and 'systemctl status' for details.

When i run :

systemctl status LCDd.service
LCDd.service - LCDd Service
	  Loaded: loaded (/usr/lib/systemd/system/LCDd.service; enabled)
	  Active: failed (Result: timeout) since Sun, 17 Jun 2012 08:38:52 +0300; 1min 1s ago
	 Process: 2774 ExecStart=/usr/sbin/LCDd -c /etc/lcdproc/LCDd.conf (code=exited, status=0/SUCCESS)
	  CGroup: name=systemd:/system/LCDd.service

Also when i try : /usr/sbin/LCDd -c /etc/lcdproc/LCDd.conf 
# systemctl start lcdproc.service

The Lcdproc start without problem !


Note You need to log in before you can comment on or make changes to this bug.