The officially official Devuan Forum!

You are not logged in.

#376 Re: Installation » [SOLVED] startx fails since upgrade to 4.9 kernel » 2018-01-05 15:55:23

There have been a number of graphics problems reported with 4.9. I hit one with Intel graphics, but there were others.

https://dev1galaxy.org/viewtopic.php?id=1794

There were suggestions that it was fixed by installing 4.13 from backports. This installs ok and I have not had any problems yet, but have not given it a good thrashing.

Geoff

#377 Re: Installation » [CLOSED] <Ascii> Minimal Install - OB - Issues » 2018-01-03 14:34:07

fungus wrote:

Someone is working on runit it seems.

https://dev1galaxy.org/viewtopic.php?id=1748

I didn't have to do anything to make runit work as a processor supervisor, it just works in both jessie and ascii. The fun bit is configuring it to run stuff ;-)
You can run it alongside SysV init and I think I saw that you can use it with OpenRC in a similar fashion, if you want your daemons supervised, i.e. restarted if they fail.

Geoff

#378 Re: DIY » runit as a process supervisor » 2018-01-03 14:23:20

Apache2

Another interesting example is Apache. It seems that the way to start it is with "apache2ctl start" as that is the way to get the environment set-up correctly. This results in the daemon(s) running in the background. The "run" file should wait for the daemon(s) to stop. As apache produces a pid file, it is easy to find the top daemon. What we would like to do is "wait $PID". Unfortunately this does not work as $PID is not a child of mine! It is, however, possible to look at /proc/$PID :-
https://stackoverflow.com/questions/105 … -to-finish

while [[ ( -d /proc/$PID ) && ( -z `grep zombie /proc/$PID/status` ) ]]; do
    sleep 1
done

Although I got a syntactical error with this, so I ended up with this "run" file :-

#!/bin/sh -eu
exec 2>&1
echo "executing /etc/sv/apache2/run"

/usr/sbin/apache2ctl configtest
/usr/sbin/apache2ctl start

# allow time for the PID file to be written

n=0
until [ -s /var/run/apache2/apache2.pid ]
do
   if [ $n -gt 5 ]
   then
      echo "/var/run/apache2/apache2.pid not found after ${n}s.
      exit 1
   fi
   n=$(( $n + 1 ))
   sleep 1
done

read PID < /var/run/apache2/apache2.pid
echo "apache2 running as pid ${PID}."

# wait for the $PID to stop

while [ -d /proc/$PID ] && [ -z `grep zombie /proc/$PID/status` ]
do
    sleep 60
done

I also set up a "finish" file as stopping the "run" script would not stop apache.

#!/bin/sh
# exec 2&>1
echo "calling /etc/sv/apache2/finish"
/usr/sbin/apache2ctl stop

I had wondered whether I could use chpst to put a lock on /proc/$PID or one of the files in that directory and then have a second copy of chpst to wait to get a lock on that file, to avoid the looping, but I though that it was best to avoid playing with the procfs!

I wonder whether one should take a different course of action if the $PID becomes a zombie?

Geoff

#379 Re: DIY » runit as a process supervisor » 2017-12-30 16:15:19

Postfix again

I was reviewing the setup for Postfix, and having a fiddle, when I discovered that I had misunderstood the flags to the "master" program. Under SysV init, master runs with "-w", which launches it as a daemon, but does not return until the daemon is running correctly. If you omit the "-w" flag then master runs in the foreground, which is what we want! The set up then becomes very simple. All that is needed is a simple run file and you may setup logging if you wish. The "echo" in the run file is reported through the logging mechanism.

cat << EOF > run
#!/bin/sh -eu
echo "executing /etc/sv/postfix/run"
/usr/sbin/postfix check
exec /usr/lib/postfix/master
EOF

The "-eu" flags cause the script to fail on any unchecked errors. There is no need for a finish script. "ps uaxf" then reports :-

root      2658  0.0  0.0   4100   688 ?        Ss   14:31   0:00  \_ runsv postfix
log       2662  0.0  0.0   4244  1240 ?        S    14:31   0:00      \_ svlogd -tt /var/svlogd/postfix
root      3697  0.0  0.0  36168  3820 ?        Ss   15:54   0:00      \_ /usr/lib/postfix/master
postfix   3810  0.0  0.0  38232  3724 ?        S    15:54   0:00          \_ pickup -l -t unix -u -c
postfix   3811  0.0  0.0  38280  3924 ?        S    15:54   0:00          \_ qmgr -l -t unix -u

Geoff

#380 Re: Off-topic » The Joke Thread » 2017-12-28 09:38:11

What's the difference between a buffalo and a bison?

You can't wash your hands in a buffalo.

#381 Re: Desktop and Multimedia » Screen goes mad - ascii » 2017-12-24 17:27:09

Running "apt-cache search linux-image" shows the range of kernels available, which includes linux-image-4.13.0-0.bpo.1-amd64.
I was able to select this in Synaptic and it did not want to pull in anything else. It installed with no problem and it leaves a couple of older kernels (4.9.0-3 and 4.9.0-4) which can also be booted up. The new kernel boots up with no problem. It is too early to tell if it fixes the graphics problem, but it is no worse!

Geoff

#382 Re: Desktop and Multimedia » Screen goes mad - ascii » 2017-12-24 16:40:46

I have had a look at Debian bugs and there seem to be several reports of problems with the graphics.
People seem to find that the problem is the result of upgrading from kernel 4.9.0-3 to 4.9.0-4.

A few of the bug reports are :-
837451
859639
878221
884001
884061
884116
884638

Some of the later reports suggest that the problem may be fixed in kernel 4.13 from backports.

https://bugs.debian.org/cgi-bin/bugrepo … bug=884638

I'm currently on the wrong machine, so will have to go to my ascii machine to investigate.

Geoff

#383 Re: Desktop and Multimedia » Screen goes mad - ascii » 2017-12-22 15:39:00

The problem with trying to change the acceleration method is really that it is a work-around that doesn't actually work, in that it stops X from starting normally. The fix for that is to not do it ;-)

The real problem is with an instability with the graphics.

On both occasions when I have triggered it, I typed a <return> which led to a chunk of text moving vertically, which triggered the instability. In one case in emacs the chunk of text was moved down and in the other typing <return> to man, caused the chunk of text to move up.

I can imagine that the graphics driver does an optimisation and tells the graphics card to move an area of the display, rather than re-drawing it. The Arch forum article mentioned changing the acceleration method. I was looking at Xorg.0.log, to see what acceleration was being used and saw that it mentions

glamor: OpenGL accelerated X.org driver based

This problem has ony occured in the last few days, so it may have been
introduced in a recent upgrade. The kernel was updated on 17 Dec 2017

Preparing to unpack .../26-linux-image-4.9.0-4-amd64_4.9.65-3_amd64.deb ...
Unpacking linux-image-4.9.0-4-amd64 (4.9.65-3) over (4.9.51-1) ...

Grub is also offering 4.9.0-3-amd64, so I could boot that. It seems to date back to 19th Sept. What is the most helpful thing to do to track down this odd behaviour?

Geoff

#384 Re: Desktop and Multimedia » Screen goes mad - ascii » 2017-12-21 16:57:11

I have been running ascii since 2015 on my Zenbook, as far as I can tell! and I have only had the screen problem once and that was a couple of days ago.

The advice on the Arch wiki is from 2015, so a bit old. When I put the above file in place, to set the AccelMethod to "uxa" and reboot, at the expected time it switches to tty7, but a couple of system messages flash up, but no X. If I typed <ctl><alt><f1> it switches to tty1 with the login prompt, but after a few seconds a couple of system messages flash up, making it difficult to log in. Typing <ctl><alt><f1> again would get me to the login prompt, but it proved too hard for me to actually log in. The other ttys, from tty1 to tty6 all behaved similarly. I had to break in with the power switch and log in in recovery mode and move the config file out of the way and then it would boot up ok.

Xorg.0.log mentions :-

[    11.770] xorg-server 2:1.19.2-1+deb9u2 (https://www.debian.org/support) 
...
[    11.799] (II) Loading sub module "glamoregl"
[    11.799] (II) LoadModule: "glamoregl"
[    11.800] (II) Loading /usr/lib/xorg/modules/libglamoregl.so
[    11.811] (II) Module glamoregl: vendor="X.Org Foundation"
[    11.811] 	compiled for 1.19.2, module version = 1.0.0
[    11.811] 	ABI class: X.Org ANSI C Emulation, version 0.4
[    11.811] (II) glamor: OpenGL accelerated X.org driver based.
[    11.847] (II) glamor: EGL version 1.4 (DRI2):
[    11.859] (II) modeset(0): glamor initialized

Then as I was editing in emacs, I pressed <enter>, which moved about 10 lines down and the screen started to flicker again, but then recovered. dmesg again reports, at about the right time :-

[ 3238.966087] [drm:gen8_irq_handler [i915]] *ERROR* CPU pipe A FIFO underrun

I am not able to reproduce this reliably.

Geoff

#385 Re: Desktop and Multimedia » Screen goes mad - ascii » 2017-12-20 19:03:46

Thank you for that. I can confirm that it does find the file in either /usr/share/X11/xorg.conf.d/ or /etc/X11/xorg.conf.d/. The advice about overwrites on upgrades is well made.

The bad news, however, is that the file stops X from coming up, so I had to move it out of the way. I have not yet had a chance to track down the problem yet.

Geoff

#386 Desktop and Multimedia » Screen goes mad - ascii » 2017-12-20 15:07:45

Geoff 42
Replies: 8

I was using my ascii laptop when the screen suddenly went mad!

I think I had open :- rxvt, palemoon, emacs & claws. I was looking at a man page in the rxvt window and had pressed the space bar a few times to get to the right place and then pressed return and the whole screen went mad. The windows appeared to be moving rapidly, possibly sideways. If I left it, it would eventually stop, but when I moved the mouse it started again. However, I was able to close a couple of windows, which I think may have been emacs and palemoon. After that the screen went back to normal and I was able to carry on.

I found the following information in syslog and dmesg :-

Dec 19 16:37:34 gold kernel: [ 5678.028125] [drm:gen8_irq_handler [i915]] *ERROR* CPU pipe A FIFO underrun

My laptop is an Asus Zenbook UX305 running ascii & lxde.

I duck-duck-went and found the following on the Arch forum :-

https://bbs.archlinux.org/viewtopic.php?id=198157

where they suggest changing the acceleration method back to UXA instead of SNA, with a file called 20-intel.conf

Section "Device"
    Identifier  "Intel Graphics"
    Driver      "intel"
    Option      "AccelMethod"  "uxa"
    #Option      "AccelMethod"  "sna"
EndSection

and putting it in /etc/X11/xorg.conf.d/. I do not have this directory but have found /usr/share/X11/xorg.conf.d
and have therefore put it there. Is this the right location?

Geoff

#387 Re: DIY » runit as a process supervisor » 2017-12-17 15:34:17

Package upgrades

I was wondering about package upgrades as it appears that many services are automatically stopped before an upgrade and restarted afterwards, or possibly simply restarted after the upgrade. To have a look at how this worked I had a look through a ".deb" file. I copied one over to somewhere safe :-

cp /var/cache/apt/archives/apache2_2.4.10-10+deb8u11_amd64.deb .

and then had a look with spacefm/Xarchiver, extracting the control.tar file into my safe area. In the "postinst" file near the end is the code fragment :-

# Automatically added by dh_installinit
if [ -x "/etc/init.d/apache2" ]; then
	update-rc.d apache2 defaults 91 09 >/dev/null
	if [ -n "$2" ]; then
		_dh_action=restart
	else
		_dh_action=start
	fi
	invoke-rc.d apache2 $_dh_action || true
fi

Indeed, prerm and postrm also use invoke-rc.d and update-rc.d to stop apache and then remove the init.d links.
Interestingly, only postrm makes reference to systemd.

I suspect that the quick workaround is to do an apt-get upgrade and stop it when it asks. You would then inspect the packages to be upgraded and if you spot any of the services you have under runit, you would stop them manually. Then you would actually do the upgrade and then you could restart the services! I'm not sure that is the best answer! Runit's "sv" program does understand init.d and can be linked to from /etc/init.d

http://smarden.org/runit/faq.html#lsb

So that might be a way to have your services handled safely, although I wonder whether any upgrades might want to overwrite the service's init.d script, which could lead to sv be overwritten!

Geoff

#388 Re: DIY » runit as a process supervisor » 2017-12-16 16:04:30

Postgresql

The next service to try was postgresql. This proved to be a bit more complex, in that there was more to set up.
The command line according to the ps command was :-

/usr/lib/postgresql/9.4/bin/postgres -D /var/lib/postgresql/9.4/main -c config_file=/etc/postgresql/9.4/main/postgresql.conf

Logging was set up and then on putting this command into the run file it failed to run. The log file reported that postgres must not be run as root. "chpst" was then used to set the user and group to postgres:postgres. This then failed as it could not read the ssl certificate. "chpst" allows for a number of groups to be set so using postgres:postgres:ssl-cert seems to work, although postgres is already in the ssl-group in /etc/group! The next problem was that it needed the socket directory to be created in /var/run, which, as it is a tmpfs, disappears on a re-boot. It was also clear that the stats sub-directory also needed to be recreated. This can be done with install, to set up permissions and ownership in one command.

This then seems to work, but there are a number of directories involved and these may change with versions, indeed the version number is included in several of the directories. It therefore seemed reasonable to make these easy to configure. There is some documentation on clusters of databases, but I am only running one. It may be that the one database is called "main" by default and that that part of the path names should also be easy to configure.

The currently working set up is like this :-

mkdir /etc/sv/postgresql
cd /etc/sv/postgresql

cat << EOF > run
#!/bin/sh -eu
exec 2>&1

VERSION="9.4"

PGBINROOT="/usr/lib/postgresql"
RUNROOT="/var/run/postgresql"
DATAROOT="/var/lib/postgresql"
CONFROOT="/etc/postgresql"

BINFILE="${PGBINROOT}/${VERSION}/bin/postgres"
STATDIR="${RUNROOT}/${VERSION}-main.pg_stat_tmp"
DATAFILE="${DATAROOT}/${VERSION}/main"
CONFFILE="${CONFROOT}/${VERSION}/main/postgresql.conf"

# create socket and stats directories

install -d -m 2775 -o postgres -g postgres ${RUNROOT} ${STATDIR}

exec chpst -u postgres:postgres:ssl-cert ${BINFILE} -D ${DATAFILE} -c config_file=${CONFFILE}
EOF

mkdir log
cat << EOF > log/run
exec chpst -ulog svlogd -tt /var/svlogd/postgresql
EOF

chmod a+x run log/run
mkdir /var/svlogd/postgresql
chown log /var/svlogd/postgresql

cd /etc/service
/etc/init.d/postgresql stop
update-rc.d postgresql disable
ln -s /etc/sv/postgresql .

tail -f /var/svlogd/postgresql/current

Once you are happy that the log file is not producing lots of errors you can ^C out of it!

Geoff

#389 Re: DIY » runit as a process supervisor » 2017-12-11 10:46:12

Current state

across 2 machines, the following are running under runit :-

slim
lxdm
autofs
bluetoothd
wicd
postfix

For most of them it is simply the case of setting up a run file containing the command along with the flag to stop it from running as a daemon, but remain attached to stdin/stdout. With a few (lxdm) it is rather the case that you leave out the flag that causes it to become a daemon. It is probably a good idea to set up logging for most of them. It is only slightly more complex when the program really does want to run as a daemon, such as postfix.

There is the question of why the SysV init scripts are so complex. I think that these have evolved this way as they check that everything has been set up correctly and where possible put things in place that should be there. It is understandable that a general purpose distribution will want everything to just work out of the box. The price of this is perhaps that the mechanism becomes more complex. One of the complexities seems to be the setting up of a PID file. I think that this is necessary so that init is able to control the service, whereas this is probably not necessary under runit.

The services which I have set up do seem to be simpler, but it may be that they do actually work because they were originally set up under SysV init, which sorted out any problems!

If you are developing a new service or have one which is not set up for SysV init, then it may be easier to get it running under runit.

Geoff

#390 Re: News & Announcements » eudev is now in ascii » 2017-12-08 16:16:19

Yes, thank you. The net.ifnames=0 does work. It took me a little while as I had to work out how to separate entries in that line. It appears that a space is used. I therefore have :-

GRUB_CMDLINE_LINUX_DEFAULT="earlyprintk=vga,keep net.ifnames=0"

Geoff

#391 Re: News & Announcements » eudev is now in ascii » 2017-12-08 15:04:46

With eudev installed I am getting my wifi appearing as wlan0, but my ethernet is coming up as enx followed by the mac address. I am not sure where this is set. dmesg reports (with the mac address obscured)

[    2.372782] r8152 2-2:1.0 eth0: v1.08.8
[    2.375118] r8152 2-2:1.0 enx2a2a2a2a2a2a: renamed from eth0

Geoff

#392 Re: News & Announcements » eudev is now in ascii » 2017-12-08 14:35:16

I think that you need both eudev and libeudev1, this should then work.

# apt-get install eudev=3.2.2-9 libeudev1=3.2.2-9
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be DOWNGRADED:
  eudev libeudev1
0 upgraded, 0 newly installed, 2 downgraded, 0 to remove and 0 not upgraded.
Need to get 1,068 kB of archives.
After this operation, 15.4 kB of additional disk space will be used.
Do you want to continue? [Y/n] 
Get:1 https://pkgmaster.devuan.org/merged ascii/main amd64 eudev amd64 3.2.2-9 [976 kB]
Get:2 https://pkgmaster.devuan.org/merged ascii/main amd64 libeudev1 amd64 3.2.2-9 [92.3 kB]
Fetched 1,068 kB in 0s (1,730 kB/s)  
dpkg: warning: downgrading eudev from 3.2.2-devuan2.7 to 3.2.2-9
(Reading database ... 136018 files and directories currently installed.)
Preparing to unpack .../eudev_3.2.2-9_amd64.deb ...
Unpacking eudev (3.2.2-9) over (3.2.2-devuan2.7) ...
dpkg: warning: downgrading libeudev1:amd64 from 3.2.2-devuan2.7 to 3.2.2-9
Preparing to unpack .../libeudev1_3.2.2-9_amd64.deb ...
Unpacking libeudev1:amd64 (3.2.2-9) over (3.2.2-devuan2.7) ...
Setting up libeudev1:amd64 (3.2.2-9) ...
Setting up eudev (3.2.2-9) ...
Installing new version of config file /etc/init.d/eudev ...

*******************************************************
  Warning: eudev will default to the older network
  interface names, such as eth0 or wlan0. If you use
  the new names, such as enp0s3, you will need to add
  the following to the boot command:
                net.ifnames=1
********************************************************

update-initramfs: deferring update (trigger activated)
Processing triggers for libc-bin (2.24-11+deb9u1) ...
Processing triggers for man-db (2.7.6.1-2) ...
Processing triggers for initramfs-tools (0.130) ...
update-initramfs: Generating /boot/initrd.img-4.9.0-4-amd64

Geoff

#393 Re: DIY » runit as a process supervisor » 2017-12-07 09:57:39

I spotted another method of hanging for a daemon (rpc.nfsd) that detaches (in the Gentoo info).
The README file for the rpc.nfsd "run" says :-
   

"rpc.nfsd is a "fake" service implemented using lock-wedging. Doing it this way allows sv stop rpc.nfsd to work, by stopping it in the finish script."

After it has started the daemon, which detaches, the run file then does this :-

exec chpst -L supervise/runlock chpst -l supervise/runlock true

The change process state program (chpst) uses the -L switch to open the file supervise/runlock for writing, and obtain an exclusive lock on it. It then runs another copy of chpst which similarly gets a lock on the same file and then runs and returns "true".
The difference is that -L will fail immediately if it cannot get the lock, while -l will wait until it can get the lock. This line will therefore hang until it gets "sv stop postfix", when it will terminate true so that "finish" will be executed, which is set up to actually stop postfix. This does work as described, once the control/t file was moved out of the way, which was by-passing killing off the "run" process. The normal shutdown proceedure continues as before.

The set up is now fairly simple as it is only necessary to set up "run" & "finish" along with the logging.

cd /etc/sv/postfix
cat << EOF > run
#!/bin/sh
exec 2>&1
echo "executing /etc/sv/postfix/run"
/usr/sbin/postfix start
exec chpst -L supervise/runlock chpst -l supervise/runlock true
EOF

cat << EOF > finish
#!/bin/sh
exec 2>&1
echo "calling /etc/sv/postfix/finish"
/usr/sbin/postfix stop
EOF

mkdir log
cat << EOF > log/run
exec chpst -ulog svlogd -tt /var/svlogd/postfix
EOF

chmod a+x run finish log/run

the part of the output of ps uaxf relating to the postfix daemon looks like this :-

root      2767  0.0  0.0   4100   696 ?        Ss   09:02   0:00  \_ runsv postfix
log       2768  0.0  0.0   4244   708 ?        S    09:02   0:00      \_ svlogd -tt /var/svlogd/postfix
root      2771  0.0  0.0   4104   652 ?        S    09:02   0:00      \_ chpst -l supervise/runlock true
root      2903  0.0  0.0  36168  3152 ?        Ss   09:02   0:00 /usr/lib/postfix/master -w
postfix   2904  0.0  0.0  38232  3884 ?        S    09:02   0:00  \_ pickup -l -t unix -u -c
postfix   2905  0.0  0.0  38280  3936 ?        S    09:02   0:00  \_ qmgr -l -t unix -u

Geoff

#394 Re: DIY » runit as a process supervisor » 2017-12-04 15:13:32

The actual file set up in /etc/sv/postfix looks like this :-

# find /etc/sv/postfix/ -name '*' -ls
651625    4 drwxr-xr-x   5 root     root         4096 Dec  3 17:41 /etc/sv/postfix/
652292    4 -rwxr-xr-x   1 root     root           71 Nov 24 14:31 /etc/sv/postfix/finish
652288    4 -rwxr-xr-x   1 root     root          121 Dec  3 17:41 /etc/sv/postfix/run
656409    4 drwxr-xr-x   2 root     root         4096 Dec  3 17:04 /etc/sv/postfix/control
661485    4 -rwxr-xr-x   1 root     root           66 Dec  3 17:04 /etc/sv/postfix/control/t
652295    4 drwxr-xr-x   3 root     root         4096 Dec  1 16:41 /etc/sv/postfix/log
661408    4 -rwxr-xr-x   1 root     root           58 Dec  1 16:38 /etc/sv/postfix/log/run
661426    4 drwx------   2 root     root         4096 Dec  4 13:48 /etc/sv/postfix/log/supervise
661458    0 -rw-------   1 root     root            0 Dec  1 16:41 /etc/sv/postfix/log/supervise/lock
661461    4 -rw-r--r--   1 root     root           20 Dec  4 13:48 /etc/sv/postfix/log/supervise/status
661477    0 prw-------   1 root     root            0 Dec  1 16:41 /etc/sv/postfix/log/supervise/ok
661728    4 -rw-r--r--   1 root     root            4 Dec  4 13:48 /etc/sv/postfix/log/supervise/stat
652424    4 -rw-r--r--   1 root     root            5 Dec  4 13:48 /etc/sv/postfix/log/supervise/pid
652426    0 prw-------   1 root     root            0 Dec  1 16:41 /etc/sv/postfix/log/supervise/control
652309    4 drwx------   2 root     root         4096 Dec  4 13:48 /etc/sv/postfix/supervise
654580    0 -rw-------   1 root     root            0 Nov 23 11:20 /etc/sv/postfix/supervise/lock
661489    4 -rw-r--r--   1 root     root           20 Dec  4 13:48 /etc/sv/postfix/supervise/status
661277    0 prw-------   1 root     root            0 Nov 23 11:20 /etc/sv/postfix/supervise/ok
661390    4 -rw-r--r--   1 root     root            4 Dec  4 13:48 /etc/sv/postfix/supervise/stat
661388    4 -rw-r--r--   1 root     root            5 Dec  4 13:48 /etc/sv/postfix/supervise/pid
656413    0 prw-------   1 root     root            0 Dec  3 17:17 /etc/sv/postfix/supervise/control

The supervise sub-directories are automatically set up by runsv.

#395 Re: DIY » runit as a process supervisor » 2017-12-04 15:04:17

Postfix and shutdown

There is some further documentation on runit at Gentoo :-

https://wiki.gentoo.org/wiki/Runit

including some example run scripts to be found at :-

https://gitlab.com/flussence/runit-scripts

thus they offer a postfix run file :-

https://gitlab.com/flussence/runit-scri … ostfix/run

I added in -d and corrected the paths. This does seem to work, although I notice that the sub-processes also have the -d flag.

#!/bin/sh -eu
/usr/sbin/postfix check
exec /usr/lib/postfix/master -d

Although "master" is in itself a process supervisor which looks after the various postfix programs. I think that this leads into questions that have been rising in my mind about shutdown. It is not very clear from the documentation how shutdown works if you only use runit as a process supervisor. As far as I can see the shutdown mechanism would use stage 3 of runit, if you were using runit as init. (As a supervisor, it is only stage 2).

With the run file running "master" directly (with the -d flag), as above, then on shutdown, /var/log/mail.info reports

postfix/master[2795]: fatal: master_sigdeath: kill process group: No such process
postfix/postfix-script[4380]: fatal: the Postfix mail system is not running

I think that the first line is "master" receiving a signal to stop. From /var/log/syslog I can sees that at shutdown ntpd (which is not under runit) exiting on signal 15 (TERM), so I would guess that that is what "master" has received. The second line above is probably from "finish", which is being executed after "run" finishes and is therefore correct! The man page for "shutdown" says that "All processes are first notified that the system is going down by the signal SIGTERM." I have assumed that any daemons run by SysV init would have their "K" scripts in /etc/rc0.d run at shutdown, although I can't currently find the documentation on that!

As the couple of daemons that I am trying under runit are not part of the SysV init, I assume that they just receive SIGTERM.

I am wondering whether the answer is to set up runit's stage 3 and somehow trigger it at shutdown, early enough that the daemons get the signal before they get a SIGTERM from elsewhere. The sample stage 3 file for Debian Sarge looks like this :-

#!/bin/sh
exec 2>&1

PATH=/command:/sbin:/bin:/usr/sbin:/usr/bin

LAST=0
test -x /etc/runit/reboot && LAST=6

echo 'Waiting for services to stop...'
sv -w196 force-stop /etc/service/*
sv exit /etc/service/*

echo 'Shutdown...'
/etc/init.d/rc $LAST

Since runit is not in charge, presumably running /etc/init.d/rc $LAST can be commented out. I also removed /command from the path.
Maybe, this stage 3 file could be triggered as K010runit in /etc/rc[06].d to get these daemons to stop cleanly.

cd /etc/rc0.d
ln -s /etc/runit/3 K010runit3
cd /etc/rc6.d
ln -s /etc/runit/3 K010runit3

Also I looked at whether it is possible have runsv catch the SIGTERM and handle it more gracefully. The man page for runsv tells how to customise control signals, so that for SIGTERM :-

/etc/sv/postfix/control/t could contain :-

#!/bin/sh
echo We have SIGTERM for postfix
/usr/sbin/postfix stop

so this should run for "terminate" and should also pick up the control signals for "down" and "exit", according to the man page for runsv.

This does run and appear in /var/svlog/postfix/current when I give the command

sv stop postfix

I reverted the postfix "run" file to the earlier one which uses the "postfix start" command and
with stage 3 being called from rc0.d and with control/t set up, then on shutdown I can see in /var/log/syslog :-

Dec  4 10:49:58 fluorine shutdown[4884]: shutting down for system halt
Dec  4 10:49:58 fluorine init: Switching to runlevel: 0
Dec  4 10:49:59 fluorine avahi-daemon[2600]: Got SIGTERM, quitting.
Dec  4 10:49:59 fluorine avahi-daemon[2600]: Leaving mDNS multicast group on interface xenbr0.IPv6 with address fe...
Dec  4 10:49:59 fluorine avahi-daemon[2600]: Leaving mDNS multicast group on interface xenbr0.IPv4 with address 19...
Dec  4 10:49:59 fluorine avahi-daemon[2600]: avahi-daemon 0.6.31 exiting.
Dec  4 10:50:00 fluorine postfix/master[2924]: terminating on signal 15
Dec  4 10:50:00 fluorine ntpd[2466]: ntpd exiting on signal 15
Dec  4 10:50:00 fluorine postfix/postfix-script[5281]: fatal: the Postfix mail system is not running
Dec  4 10:50:00 fluorine postfix/postfix-script[5289]: fatal: the Postfix mail system is not running
Dec  4 10:50:01 fluorine acpid: exiting
Dec  4 10:50:03 fluorine rsyslogd: [origin software="rsyslogd" swVersion="8.4.2" x-pid="2166" x-info="http://www.rsyslog.com"] exiting on signal 15.

I think that the 2 fatal messages are from "finish" and control/t being called after "master" has alread received SIGTERM, although the echo messages are not appearing in /var/svlogd/postfix/current, maybe svlogd has already been shutdown!

I can see that before I started trying runit and with postfix being started from SysV init, that on shutdown /var/log/mail.info reports :-

Nov 11 12:23:20 fluorine postfix/master[2909]: terminating on signal 15

So the set up with "runit" seems to produce more or less the same result as with SysV init. Setting up to run stage 3 from rc0.d and also setting up control/t does not appear to have any real effect on shutdown.

Geoff

#396 Re: DIY » runit as a process supervisor » 2017-11-28 09:27:14

fungus wrote:

If you have any objections or want to make additions or edit please let me know.

I am delighted that you find it useful. You are most welcome to use it.

Geoff

#397 Re: DIY » runit as a process supervisor » 2017-11-27 11:02:40

Postfix

Running the display manager under runit was very straightforward. I also tried something more complex. As a domestic user I use an mail provider, GMX in my case. However, some system messages are generated locally for delivery to root. Although I recall that exim had been installed, I had earlier experience with postfix, so I had installed that instead and configured it for my requirements and it was working well. This was obviously a prime target for trying out under runit!

Looking at /etc/init.d/postfix I found nearly 1000 lines of impenetrable script. Whereas, I thought that the actual command to start postfix was :-

postfix start

and the actual daemon which is left running is "/usr/lib/postfix/master -w".

There is an example "run" file in the documentation and I tried it

#!/bin/sh
exec 1>&2
 
daemon_directory=/usr/lib/postfix \
command_directory=/usr/sbin \
config_directory=/etc/postfix \
queue_directory=/var/spool/postfix \
mail_owner=postfix \
setgid_group=postdrop \
  /etc/postfix/postfix-script check || exit 1

exec /usr/lib/postfix/master

This did not work well. It appeared to be checking every single file on the system and spotting that most were not owned by postfix! It also failed to run the daemon.

After some fiddling around I decided to try and keep it simple. Since "postfix start" does actually work, why not use it? Well it finishes and returns, which is not how runit works. I therefore set up a simple kludge, /etc/sv/postfix/run :-

#!/bin/sh
exec 1>&2

/usr/sbin/postfix start
while /usr/sbin/postfix status
do sleep 300
done

This does actually work! It also puts out a timestamp every 5 minutes in the log file.

I was not sure how things would work at shutdown, so I also set up a "finish" file. This is described as being executed if "run" stops.
/etc/sv/postfix/finish

#!/bin/sh
echo "calling /etc/sv/postfix/finish"
/usr/sbin/postfix stop

My hope is that if things are not shutdown properly, then this would tidy it all up! What I see in /var/log/mail.info is that the "master" daemon reports

postfix/master[2916]: terminating on signal 15
postfix/postfix-script[4443]: fatal: the Postfix mail system is not running

I think that the second line is saying that it can't stop as it isn't running.
Postfix does its own logging via syslog.

This simple set up seems to work ok, although not really in the spirit of runit!

Geoff

#398 DIY » runit as a process supervisor » 2017-11-27 10:01:24

Geoff 42
Replies: 19

Having reading the message on DNG from Steve Litt about process supervisors :-

https://lists.dyne.org/lurker/message/2 … d3.en.html

I was inspired to investigate for myself. This is not a recipe on how to use runit as your init system, but some notes on using runit as a stage 2 process supervisor.

Of the supervisors mentioned by Steve, only runit was available in the jessie repository so that is what I had a look at.

The set up on ascii is slightly different from jessie. On jessie when installed it all ready for running as a process supervisor. On ascii there is a separate package to install to set up this supervisory role. It would appear that the ascii version is more ready to be run as a replacement init.

On jessie :-

apt-get install runit

on ascii

apt-get install runit runit-sysv

When running

ps uaxf

runsvdir can be seen with space "....." for displaying log messages,
although it is not actually supervising anything yet.

The ascii installation seems to be missing some of the documetation at :-

file:///usr/share/doc/runit/html/

in that the info on the separate programs is missing, although the index.html
page does give the link to the author's pages :-

http://smarden.org/runit/

Also on ascii the directory /etc/service is a link to /etc/runit/default.

Once runit is installed, then comes the job of setting up some daemons to be supervised. They are set up in sub-directories of /etc/sv and when everything is ready a link is set up in /etc/service to the sub-directory in /etc/sv. At this point runsvdir should notice and start running the daemon.

I wanted something simple to start with and went for the display manager. This is very simple, although there is some scope for fun as this can crash X while you are finishing the set-up, so it is good to know what you need to do to finish things. One difference from sysv init is that the daemon should not run in the background, but should remain connected to stdin/stdout. In this case, it means NOT using the "-d" switch to the display manager.

While on jessie I am using "slim" with lxde, on ascii I am using "lxdm" with lxde with some components of lxqt.

There needs to be a file called "run" to run the daemon. Is also possible to set up logging, using svlogd. This uses a sub-directory called log and its own "run" file. The supplied examples show logs being written under the log sub-directory, that is, within the /etc filesystem. I was not too happy with this and set up a separate directory in /var Presumably you could log in /var/log, but I avoided that in case there was any interaction with logrotate, as svlogd looks after its own logs.

These are the steps I took to set up lxdm under runit on ascii :-

mkdir -p /var/svlogd/lxdm
adduser --system log
chown -R log /var/svlogd

cd /etc/sv
mkdir -p lxdm/log

cd lxdm
cat << EOF > run
#!/bin/sh
exec 2>&1
exec /usr/sbin/lxdm
EOF

cd log
cat << EOF > run
#!/bin/sh
exec chpst -ulog svlogd -tt /var/svlogd/lxdm
EOF

cd ..
chmod a+x run log/run

cd /etc/service
update-rc.d lxdm disable
ln -s /etc/sv/lxdm .

This failed to stop X, but was all set up, so I rebooted and it all just worked.
Looking at the output from ps :-

ps uaxf

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
...
root      2398  0.0  0.0   4212  1076 ?        Ss   15:44   0:00 runsvdir -P /etc/service log: ....................................................................
root      2405  0.0  0.0   4060   672 ?        Ss   15:44   0:00  \_ runsv lxdm
log       2406  0.0  0.0   4204   684 ?        S    15:44   0:00      \_ svlogd -tt /var/svlogd/lxdm
root      2407  0.0  0.0  43976  3604 ?        S    15:44   0:00      \_ /usr/sbin/lxdm-binary
root      2412  0.7  0.8 389104 71868 tty7     Ssl+ 15:44   0:27          \_ /usr/lib/xorg/Xorg :0 vt07 -nolisten tcp -novtswitch -auth /var/run/lxdm/lxdm-:0.auth
root      2425  0.0  0.0  49976  3256 ?        S    15:44   0:00          \_ /usr/lib/lxdm/lxdm-session
xxxxxx    2506  0.0  0.1 352720 13280 ?        Ssl  15:44   0:00              \_ /usr/bin/lxsession -s LXDE -e LXDE
xxxxxx    2559  0.0  0.0  11076   332 ?        Ss   15:44   0:00                  \_ /usr/bin/ssh-agent /usr/bin/startlxde
xxxxxx    2568  0.0  0.2 196632 16580 ?        S    15:44   0:01                  \_ openbox --config-file /home/xxxxxx/.config/openbox/lxde-rc.xml
xxxxxx    2573  0.1  0.3 910200 25920 ?        Sl   15:44   0:04                  \_ lxpanel --profile LXDE
xxxxxx    2788  0.0  0.0  36816  4668 ?        S    15:45   0:00                  |   \_ urxvt
xxxxxx    2789  0.0  0.0  39236  2636 ?        S    15:45   0:00                  |   |   \_ urxvt
xxxxxx    2790  0.0  0.0  18396  3468 pts/0    Ss   15:45   0:00                  |   |   \_ bash
xxxxxx    3668  0.5  0.5 327340 47736 pts/0    Sl   16:38   0:03                  |   |       \_ emacs runit
xxxxxx    3820  0.0  0.0  17656  2068 pts/0    R+   16:48   0:00                  |   |       \_ ps uaxf
xxxxxx    2990  0.0  0.4 374260 39964 ?        Sl   15:59   0:01                  |   \_ claws-mail
xxxxxx    3306  3.8  3.1 857764 252200 ?       Sl   16:21   1:02                  |   \_ palemoon
xxxxxx    2574  0.0  0.5 602248 47304 ?        S    15:44   0:00                  \_ spacefm --desktop

The log file, /var/svlogd/lxdm/current, is empty, unlike my slim set-up under jessie, where the log file has output from Xorg as it starts up.

The set-up for slim on jessie is the same, simply replacing the word "lxdm" with "slim" everywhere.

#399 Re: Desktop and Multimedia » Update fails - xserver-xorg-core "loses keyboard and mouse" » 2017-11-25 18:04:22

I only use the codenames, as in "jessie" in the repositories, but synaptic seems to report the versions as being from "stable". Also, if you select the "origin" display in synaptic, then the repositories are shown as "stable" etc. They are all from "pkgmaster.devuan.org".

Geoff

#400 Re: Desktop and Multimedia » Update fails - xserver-xorg-core "loses keyboard and mouse" » 2017-11-23 10:26:45

Have updated my repositories, on my main desktop, to the Amprolla3 ones, as per :-

https://dev1galaxy.org/viewtopic.php?id=1723

I have now looked at updating and upgrading. As the new repositories include stable-proposed-updates, I checked the versions and synaptic reports :-

2:1.16.4-1+deb8u2 (stable-proposed-updates)

2:1.16.4-1+deb8u1+b1 (stable)

It took a bit of fiddling, but eventually I persuaded synaptic to install the deb8u2 version and everything (i.e. X) still works nicely.

I am not very well up on the version numbers, but does the "+b1" part refer to a bug report?

Geoff

Board footer

Forum Software