CentOS – GNU Screen refuse to start on non-root user

After a system upgrade, I couln’t start anymore screen as a regular user, only as root.

After a system upgrade, I couln’t start anymore screen as a regular user, only as root. Which is not okay…

Usually I’ve had trouble with wrong permission on /dev/pts/ but not here, screen justs silently exit.

[user@nsxxxxx ~]$
[user@nsxxxxx ~]$ screen
[screen is terminating]
[user@nsxxxxx ~]$
[user@nsxxxxx ~]$

After a lot of strace and duckduckgoing around, I found that it was due to the mount parameters in /etc/fstab

To test, I’ve just commented the entry in /etc/fstab and reloaded my server

[root@nsxxxxx ~]# mount | grep devpts
devpts on /dev/pts type devpts (rw,relatime,mode=600,ptmxmode=000)
[root@nsxxxxx ~]#
[root@nsxxxxx ~]#

Permission are not okay, and most importantly, the GID is not set to the TTY group ( 5 )

[root@nsxxxxx ~]# cat /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/md2 / ext4 errors=remount-ro 0 1
/dev/md3 /home ext4 defaults 1 2
/dev/sda4 swap swap defaults 0 0
/dev/sdb4 swap swap defaults 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
#devpts /dev/pts devpts defaults 0 0  <<<<<< Commented entry
[root@nsxxxxx ~]#

After a reload ( probably a remount should/could work ? )

[root@nsxxxxx ~]#
[root@nsxxxxx ~]# mount | grep pts
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)[root@nsxxxxx ~]#

From my understanding, screen needs to allocate PTS for the user. That can be done if the process is owned by TTY group ( and the permission set accordingly  )

[root@nsxxxxx ~]# cat /etc/group | grep tty

Practical example of slackware package install logs

Here is a short discovery topic of how you can use the slackware package install logs for troubleshooting.
This is a practical example, used to tshoot an issue with LibreOffice ( disclaimer, it’s – as usual – a user mistake )


Today got some trouble with LibreOffice ( or libreoffice ? ), I couln’t start it anymore.

$ libreoffice 
/usr/lib64/libreoffice/program/oosplash: error while loading shared libraries: libboost_system.so.1.63.0: cannot open shared object file: No such file or directory

I first though about lib issue, as the error states…and libboost, as you can see, it is really missing.

$ ldd /usr/lib64/libreoffice/program/oosplash
	linux-vdso.so.1 (0x00007ffdfd31f000)
	libboost_system.so.1.63.0 => not found <<<<<<<<<<< MISSING !
	libXinerama.so.1 => /usr/lib64/libXinerama.so.1 (0x00007f2f011ce000)
	libX11.so.6 => /usr/lib64/libX11.so.6 (0x00007f2f00e92000)
	libpng16.so.16 => /usr/lib64/libpng16.so.16 (0x00007f2f00c5f000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f2f008c4000)
	libuno_sal.so.3 => /usr/lib64/libreoffice/program/libuno_sal.so.3 (0x00007f2f00667000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f2f0027d000)
	libXext.so.6 => /usr/lib64/libXext.so.6 (0x00007f2f0006b000)
	libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x00007f2effe45000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f2effc41000)
	libz.so.1 => /lib64/libz.so.1 (0x00007f2effa2a000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f2f013d1000)
	libboost_system.so.1.63.0 => not found
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f2eff80b000)
	librt.so.1 => /lib64/librt.so.1 (0x00007f2eff603000)
	libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f2eff27c000)
	libgcc_s.so.1 => /usr/lib64/libgcc_s.so.1 (0x00007f2eff065000)
	libXau.so.6 => /usr/lib64/libXau.so.6 (0x00007f2efee61000)
	libXdmcp.so.6 => /usr/lib64/libXdmcp.so.6 (0x00007f2efec5b000)

My system is running  the boost 1.67 ( not 1.63 ). I thought it was probably due to a package compiled at a point in time… then the lib has been upgraded so I needed to recompile the package.

# slackpkg search boost
Looking for boost in package list. Please wait... DONE

The list below shows all packages with name matching "boost".

[ installed ] - boost-1.67.0-x86_64-1

You can search specific files using "slackpkg file-search file"

Then I realised that it’s weird that libreoffice is pointing to  /usr/lib64/libreoffice/. libreoffice is installed usually in /opt

When trying to reinstall the libreoffice6.0 package, I found an interresting output:

 # removepkg libreoffice

Removing package /var/log/packages/libreoffice-6.0.3-x86_64-1_SBo...
Removing files:
  --> /usr/bin/lobase (symlink) was found in another package. Skipping.
  --> /usr/bin/localc (symlink) was found in another package. Skipping.
  --> /usr/bin/lodraw (symlink) was found in another package. Skipping.
  --> /usr/bin/loimpress (symlink) was found in another package. Skipping.
  --> /usr/bin/lomath (symlink) was found in another package. Skipping.
  --> /usr/bin/lowriter (symlink) was found in another package. Skipping.
  --> /usr/bin/soffice (symlink) was found in another package. Skipping.
  --> /usr/bin/unopkg (symlink) was found in another package. Skipping.
  --> Deleting symlink /usr/bin/libreoffice6.0
  --> Deleting symlink /usr/bin/sbase

Bins are skipped, due due to being present in another package, which is odd.

Here I remember that Slackware keeps the logs of the package installation, in /var/log/packages

# cd /var/log/packages/
:/var/log/packages # 
:/var/log/packages # 
:/var/log/packages # 
:/var/log/packages # grep -R /usr/bin/lobase *
:/var/log/packages # grep -R lobase *

Bingo, it just seems that I’ve installed somehow 2 version of libreoffice at some point. Note the typo difference, one package is calle libreoffice, the other LibreOffice.

Both version came from https://slackbuilds.org :

  • libreoffice is the package you can build using the full source of the project, while
  • LibreOffice is a re-package of the official/upstream RPM package

After removing the LibreOffice and libreoffice , then properly reinstall libreoffice6. Everything was fine !




Slackware kernel (re)compilation

I needed to rebuild my kernel with NUMA support ( for VPP installation )

Stock Slackware kernel does not have NUMA built-in, let’s fix this !

No matter the option, the (re)built method is the same 😉

Kernel sources are installed in /usr/src/

:~ # ls /usr/src/ -lastrh
total 97M
 97M -rw-r--r--  1 root root  97M Jan  5 15:51 linux-4.14.12.tar.xz
4.0K drwxr-xr-x 22 root root 4.0K Jan 30 00:59 linux-4.14.12/
4.0K drwxr-xr-x 17 root root 4.0K Feb  4 00:12 ../
4.0K drwxr-xr-x 25 root root 4.0K Feb  4 02:26 linux-4.14.17/
   0 lrwxrwxrwx  1 root root   13 Feb  5 19:33 linux -> linux-4.14.17/
4.0K drwxr-xr-x  4 root root 4.0K Feb  5 19:33 ./
23:42 root@ws1:~ # 

Let’s save the stock kernel config file, not that I use the `linux` dir directly, as it’s a symlink to the latest linux-4.14.17 dir.

:~ # cp /usr/src/linux/.config /usr/src/linux/.config.stock

Get the running kernel config, (though I could have used the previous .config file ) . As a good habit, I always run `make oldconfig` to show if there is newer option . I doubt to find some new option here as I’m recompiling the running slackware kernel… but when compiling a new kernel version, new option can be added. You night want to check them out and set them as built-in/module/not set.

:~ # zcat /proc/config.gz > /usr/src/linux/.config
:~ # cd /usr/src/linux
:/usr/src/linux # 
:/usr/src/linux # 
:/usr/src/linux # make oldconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/basic/bin2c
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
scripts/kconfig/conf  --oldconfig Kconfig
# configuration written to .config
:/usr/src/linux #

Then modify options  with `make menuconfig` ( it’s a ncurses interface ).

  • General setup -> add as built-in Memory placement aware NUMA scheduler
  • Processor type and features -> add as built-in Numa Memory Allocation and Scheduler Support
  • Processor type and features -> add as built-in NUMA emulation
  • Also as explained in the official doc, if you rebuilt an already installed  kernel, in order to avoid messing up with kernel modules for that kernel, you need to change the LOCAL_VERSION under: General setup -> Local version ( I used a suffix -vpp )
:/usr/src/linux # make menuconfig
  HOSTCC  scripts/kconfig/mconf.o
  HOSTCC  scripts/kconfig/lxdialog/checklist.o
  HOSTCC  scripts/kconfig/lxdialog/util.o
  HOSTCC  scripts/kconfig/lxdialog/inputbox.o
  HOSTCC  scripts/kconfig/lxdialog/textbox.o
  HOSTCC  scripts/kconfig/lxdialog/yesno.o
  HOSTCC  scripts/kconfig/lxdialog/menubox.o
  HOSTLD  scripts/kconfig/mconf
scripts/kconfig/mconf  Kconfig
configuration written to .config

*** End of the configuration.
*** Execute 'make' to start the build or try 'make help'.

:/usr/src/linux #

Let’s make the kernel and modules

:/usr/src/linux # make all
 HOSTCC scripts/basic/fixdep
 CHK include/config/kernel.release
 CHK include/generated/uapi/linux/version.h
 HOSTCC scripts/basic/bin2c
 DESCEND objtool
 HOSTCC /usr/src/linux-4.14.17/tools/objtool/fixdep.o
<--- output suppressed--->
 LD [M] sound/usb/usx2y/snd-usb-us122l.ko
 LD [M] sound/usb/usx2y/snd-usb-usx2y.ko
 LD [M] sound/x86/snd-hdmi-lpe-audio.ko
 LD [M] virt/lib/irqbypass.ko
:/usr/src/linux #

then install the modules in /lib/modules

:/usr/src/linux # make modules_install
  INSTALL arch/x86/crypto/blowfish-x86_64.ko
  INSTALL arch/x86/crypto/camellia-aesni-avx-x86_64.ko
<--- output suppressed --->
 INSTALL sound/x86/snd-hdmi-lpe-audio.ko
  INSTALL virt/lib/irqbypass.ko
  DEPMOD  4.14.17-vpp
:/usr/src/linux #

Note that a 4.14.17-vpp directory has been created 😉 ( that means that is you have forgotten to modify LOCAL_VERSION, you are likely to overwrite actual kernel modules.

:~ # ls /lib/modules/
4.14.15/  4.14.17/  4.14.17-vpp/
:~ #

Let’s put the kernel in place, copying kernel/config/system.map file in /boot

:/usr/src/linux # cp arch/x86/boot/bzImage /boot/vmlinuz-vpp-4.14.17
:/usr/src/linux # cp .config /boot/.config-vpp-4.14.17
:/usr/src/linux # cp System.map /boot/System.map-vpp-4.14.17
:/usr/src/linux #
:/usr/src/linux # ls -lastr /boot/System.map
0 lrwxrwxrwx 1 root root 23 Feb  5 19:27 /boot/System.map -> System.map-huge-4.14.17
:/usr/src/linux # 
:/usr/src/linux # rm /boot/System.map
:/usr/src/linux # ln -s /boot/System.map-vpp-4.14.17 /boot/System.map
:/usr/src/linux #
:/usr/src/linux # ls -lastr /boot/System.map
0 lrwxrwxrwx 1 root root 28 Feb  6 20:03 /boot/System.map -> /boot/System.map-vpp-4.14.17
:/usr/src/linux #

Let’s create the initrd

:/usr/src/linux # /usr/share/mkinitrd/mkinitrd_command_generator.sh -k 4.14.17-vpp
# mkinitrd_command_generator.sh revision 1.45
# This script will now make a recommendation about the command to use
# in case you require an initrd image to boot a kernel that does not
# have support for your storage or root filesystem built in
# (such as the Slackware 'generic' kernels').
# A suitable 'mkinitrd' command will be:

mkinitrd -c -k 4.14.17-vpp -f ext4 -r /dev/sda1 -m xhci-pci:ohci-pci:ehci-pci:xhci-hcd:uhci-hcd:ehci-hcd:hid:usbhid:i2c-hid:hid_generic:hid-cherry:hid-logitech:hid-logitech-dj:hid-logitech-hidpp:hid-lenovo:hid-microsoft:hid_multitouch:jbd2:mbcache:ext4 -u -o /boot/initrd.gz

Please note that I’ve specified the -k option with kernel version set to 4.14.17-vpp instead of just 4.14.17. It’s because mkinitrd will look in the corresponding directory for kernel modules, ie in /lib/modules/$kernelVersion … here we want mkinitrd to look in /lib/modules/4.14.17-vpp/

:/usr/src/linux # mkinitrd -c -k 4.14.17-vpp -f ext4 -r /dev/sda1 -m xhci-pci:ohci-pci:ehci-pci:xhci-hcd:uhci-hcd:ehci-hcd:hid:usbhid:i2c-hid:hid_generic:hid-cherry:hid-logitech:hid-logitech-dj:hid-logitech-hidpp:hid-lenovo:hid-microsoft:hid_multitouch:jbd2:mbcache:ext4 -u -o /boot/initrd-4.14.17-vpp.gz
OK: /lib/modules/4.14.17-vpp/kernel/drivers/usb/host/xhci-hcd.ko added.
OK: /lib/modules/4.14.17-vpp/kernel/drivers/usb/host/xhci-pci.ko added.
<--- output suppressed --->
OK: /lib/modules/4.14.17-vpp/kernel/fs/mbcache.ko added.
OK: /lib/modules/4.14.17-vpp/kernel/fs/ext4/ext4.ko added.
49081 blocks
/boot/initrd-4.14.17-vpp.gz created.
Be sure to run lilo again if you use it.
:/usr/src/linux #

Let’s add the corresponding section in lilo.conf

image = /boot/vmlinuz-vpp-4.14.17                                                                                                         
  initrd = /boot/initrd-4.14.17-vpp.gz                                                                                                    
  root = /dev/sda1                                                                                                                        
  label = vpp-4.14.17                                                                                                                     

And run LILO

:~ # lilo -v
LILO version 24.2 (released 22-November-2015)
<--- output suppressed --->

Boot image: /boot/vmlinuz-vpp-4.14.17
Mapping RAM disk /boot/initrd-4.14.17-vpp.gz
The initial RAM disk will be loaded in the high memory above 16M.
Added vpp-4.14.17  +

<--- output suppressed --->
Writing boot sector.
/boot/boot.0800 exists - no boot sector backup copy made.
:~ #

Then reload 🙂


Once it’s back running on our new kernel, let’s check NUMA support.

:~ # uname -a
Linux ws1.home.lodpp.net 4.14.17-vpp #2 SMP Tue Feb 6 09:15:33 CET 2018 x86_64 Intel(R) Xeon(R) CPU D-1540 @ 2.00GHz GenuineIntel GNU/Linux
:~ # zcat /proc/config.gz | grep -i numa
# CONFIG_NUMA_EMU is not set
:~ # 


kernel install/compilation: https://docs.slackware.com/howtos:slackware_admin:kernelbuilding

System.map : http://rlworkman.net/system.map/