Note: Information on this page is for CentOS 7.5.1804 i686. See the Latest Version.

Installing CentOS 7.x on i586 Pentium

[Screenshot of CentOS7 desktop on Pentium 120MHz]

CentOS 7 for i686 doesn't boot on CPU without PAE nor without CMOV instructions. Also, SSE and SSE2 is extensively used in userland. Using a custom non-PAE, SSE2-emulating kernel will make it work.

Warning: This doesn't work on MMX-only processors. Processors with MMX but no SSE will execute some SSE instructions as MMX instruction, which lacks #UD exception for emulating it.
Note: This is just a technical challenge. It is highly impractical to deploy CentOS 7 on sub-GHz CPUs in any way.

$Keywords: CentOS 7.x, Linux kernel, non-PAE, without PAE, 32bit, i386, i586, installation media respin, anaconda, Pentium, CMOV emulation, SSE emulation, SSE2 emulation $

$Id: pentium.html,v 1.115 2018/10/25 12:38:30 kabe Exp $ (2016/02)

Obsolete information for CentOS 7.4 i586 is also available.


Does this work on my machine?

Your CPU has capability of
pae cmov mmx sse sse2 works? Example CPUs
yesplain Pentium
mmx noPentium MMX, K6-2, WinChip
cmovmmx noPentium II, Cyrix MII
cmovmmxsse noPentium III
cmovmmxssesse2 yesPentium M
paecmovmmxssesse2 yes
(but you don't need it)
Pentium 4
Note: from CentOS 7.4 i686, the kernel is compiled without PAE requirement, so you may just use the latest CentOS i686 for Pentium M CPUs.

Things you need


Needed RPMS

Kernel and boot loader

If you're going to run the installer on i686 work machine, manually replace kernel and grub2 packages, and swap the disk onto i586 machine, theoretically it should work given that HDD controller is compatible.

If the target machine can do SSE2 but only lacks PAE (ex.some Pentium M), you don't even need to replace the kernel; from CentOS 7.4 i686, the kernel doesn't need PAE.

For native i586 install, you need more quirks:

RPM toolset

These are patched to let .i686 packages install on i586 host. (Usually rpm refuses so)

For speed gain and stability, you also want these:

Replacing with glibc.i586 will gain +50% speed

30% speedup of installation by liblzma.i586

Pass option to anaconda to wait for 600 seconds insted of hardcoded 60 secs for starting Xserver

No need to replace anaconda packages for this; CentOS 7.5 anaconda has inst.xtimeout=600 kernel boot option for setting timeout of Xorg Xserver to come up. Set this on slow machines.

D-Bus and systemd patched to allow longer timeout

You don't want very basic system components to be emulated ones

other packages having high emulation count

Additional packages


Opcode emulation kernel

The kernel above has CMOV, NOPL, FCOMI, FCMOVcc opcode emulation, and some SSE2 emulation enough to run compiler-generated (-mfpmath=sse) SSE2 instructions. This will let .i686 binaries run on i586 CPUs, which lacks cmov and sse2 capability.

Note: opcode emulation is very slow in nature. Recompile for .i586 whenever possible.

Counts of emulated opcodes will be available under /proc/emulated_ops:

# cat /proc/emulated_ops
cmov:   606311269
nopl:   0
fcomi:  0
fucomi: 0
fcmov:  0
sse:    131199723
sse2:   236361111

Not emulatable on MMX-only processors

MMX-capable, but no-SSE2 processosrs such as Pentium MMX, Pentium II, AMD K6-2, K7, Cyrix MII, IDT WinChip does not raise #UD exception (SIGILL) on some SSE2 instructions and interprets as MMX instructions. On these processors we cannot hook the exeption and emulate. (seems to ignore 0x66 prefix and passes over as MMX instruction)

This means that the emulation kernel practically only works on plain Pentium withOUT MMX, which is clocked at 75,90,100,133,166 or 200 MHz.

GNOME3 is heavy; use KDE4

for desktop environment, you can select the default GNOME3 (gnome-desktop) or KDE4 (kde-desktop), but on slow machines I strongly recommend KDE. GNOME3 had become too heavyweight for sub-GHz, single-thread processor.


Step 1. Install lorax

On the work machine, install following packages:

from official repository or media with your favorite installation method.

	% sudo yum --disablerepo='*' --enablerepo=c7-media install lorax
If work machine is older than CentOS 7.2.1511, c7-media.repo file must be manually added to /etc/yum.repos.d/.

Step 2. Copy over the original media

Mount the original CentOS 7 media. Copy over all of the contents as ./DVD1/ . (so that you'll have ./DVD1/.discinfo)
Clean up the TRANS.TBL files as necessary.

	rm -fr ./DVD1
	cp -pr /media/dvd ./DVD1
	chmod -R +w ./DVD1
	find ./DVD1 -name TRANS.TBL -exec rm {} ';'


Step 3. Modify Packages/

Copy the custom kernel and other packages to replace into ./DVD1/Packages/ directory which holds *.rpm .

	cp -p kernel-3.10.0-693.5.2.el7.v31.i586.rpm ./DVD1/Packages/
	...

And, erase the original .i686 rpm. This is neeeded to prevent installation of it.

	rm ./DVD1/Packages/kernel-3.10.0-693.2.2.el7.centos.plus.i686.rpm
	...
You will want to use replace shell script to do this easily.

You replaced the *.rpm, so ./DVD1/repodata/ must be regenerated using createrepo as below.

	chmod -R +rwX ./DVD1/repodata
	chmod +rwX ./DVD1	;# createrepo demand
	compsxml=`cd ./DVD1; find repodata -name '*-comps*.xml'`; \
	rm -f ./comps.xml; \
	cp ./DVD1/$$compsxml ./comps.xml; \
	test -f ./comps.xml || exit 1; \
	rm ./DVD1/repodata/*.bz2 ./DVD1/repodata/*.gz; \
	cp ./comps.xml ./DVD1/repodata/comps-dvd.xml; \
	createrepo -v -g repodata/comps-dvd.xml \
		./DVD1
createrepo is needed to lorax find the new kernel and other packages to build the installer. Regeneration takes significant amount of time (~5 minutes on 3GHz machine) .


Step 4. Create boot image with lorax

lorax is a program to prepare the installer (anaconda) things you see when booting from the install media.

(Mandatory) Begin with a pristine directory to store the boot.iso file;

	rm -fr ./img7

Then, invoke the lorax with some options.

	sudo lorax -p CentOS -v 7 -r 7.4 -s `pwd`/DVD1 \
	--tmp=`pwd`/tmpb \
	--buildarch=i586 \
	`pwd`/img7 2>&1 | tee -a /tmp/lorax.log
This takes a long time! (about 50 minutes on 3GHz machine) You would like to redirect the output to a logfile as above.

As a result, ./img7/ will be populated with installer boot files, notably ./img7/images/boot.iso .

Scratch directories, owned by root, may be lying around in ./tmpb/ directory. You can safely delete them.

The recreated files are owned by root, so you would like to

	sudo chown -R $LOGNAME ./img7
	chmod      -R +w       ./img7

The generated ./img7/images/boot.iso of about 446MB should boot as a network installer. You would like to try it out on target machine to see if the anaconda installer would work.

It takes around 40 minutes on Pentium 120MHz to reach GUI language selection screen.

Discussion

lorax does not use the native files of the host machine to build the installer; it unpacks files from the *.rpm in the directory. Thus the work host doesn't have to be i686; working on x86_64 should be okay.

lorax is a rewrite of buildinstall used in previous versions of RHEL, and said to be a lot faster, but seems not on my environment.


Step 5. Respin the media

First, replace the DVD1/{images,isolinux,LiveOS} with the one generated by lorax.

	chmod -R +rwX ./DVD1/images ./DVD1/isolinux ./DVD1/LiveOS
	rm -fr ./DVD1/images ./DVD1/isolinux ./DVD1/LiveOS
	rm ./DVD1/.discinfo ./DVD1/.treeinfo
	cp -pr -l ./img7/* ./img7/.??* ./DVD1/

(From CentOS 7.5-) If your target machine is slow enough that Xserver won't come up in default 60 seconds timeout, add inst.xtimeout=600 boot option. Modify ./DVD1/isolinux/isolinux.cfg line as

-append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20i386 quiet
+append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20i386 inst.xtimeout=600 quiet

isolinux.bin should be writeable to make it bootable, so

	chmod -R +w ./DVD1/isolinux

Respin the media image by mkisofs:

	mkisofs -o ./DVD1.iso \
	-b isolinux/isolinux.bin -c isolinux/boot.cat \
	-no-emul-boot -boot-load-size 4 -boot-info-table \
	-R -v -T \
	-J -joliet-long \
	-f \
	-V "CentOS 7 i386" \
	-m upgrade.img -m boot.iso \
	./DVD1

	implantisomd5 ./DVD1.iso

The volume label (-V "CentOS 7 i386") should match with kernel option in ./DVD1/isolinux/isolinux.cfg, inst.stage2=hd:LABEL=CentOS\x207\x20i386 .
Excluding upgrade.img (~40MB) and boot.iso (~360MB) is just for lowering size of the final .iso .

Burn the DVD1.iso and try it out on your favorite Pentium machine.


Preventing yum update to update the kernel

You don't want yum update update the kernel to official CentOS package if you are using the kernel on this page. To prevent yum(1) from automatically upgrading the package, add in [main] section of /etc/yum.conf:

[main]
...
exclude=kernel-* grub2-*
You should at least exclude kernel and grub2, which is essential for i586 deployment.

To manually update the kernel from c7-i586.repo, use the following command:

yum --disablerepo=\* --enablerepo=c7-i586 --disableexcludes=main update kernel


Troubleshooting


Instant reset on boot

Symptom: Install seemed to succeed, but on boot, it instantly resets before GRUB menu appears.

Cause: You didn't replace the grub2-i386-modules.i586 package. Note that the packaging of GRUB2 binaries (/usr/lib/grub/i386-pc/) had changed from grub2.i686 package to grub2-i386-modules.noarch package from CentOS 7.4.

Resolution:

  1. Boot into rescue mode using the DVD.
  2. Chroot to the installation (/mnt/sysimage).
  3. rpm -Uvh --force grub2-i386-modules-2.02-0.64.el7.centos.i586.rpm
  4. grub2-install /dev/sda


Needs pae

Symptom: After initrd.img is loaded,

	This kernel requires the following features not present on the CPU:
	pae cmov
	This processor is unsupported in CentOS 7.

You may need to delete "quiet" kernel option when booting to make this error visible.

Cause: Booting from a stock install media shows that. You didn't replace the kernel package.


init killed

Symptom: After kernel start, Kernel panics killing init.

[   58.412707] Freeing unused kernel memory: 696k freed
[   58.423244] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
[   58.423244]
[   58.424082] CPU: 0 PID: 1 Comm: init Not tainted 3.10.0-229.el7.centos.i586 #1
[   58.424082] Hardware name: System Manufacturer System Name/ALADDIN5, BIOS 0626 07/15/95
[   58.424082]  c0b710c7 e2eee12e c0b84620 ed089e00 c0920c67 ed089e20 c091c4b3 c0aacab4
[   58.424082]  c0cb2920 e2eee12e c0b84620 00000001 ed084000 ed089e74 c0451105 c0aacf90
[   58.424082]  00000004 00000004 00000080 00000001 ed089fb4 00000000 00000000 000000cd
[   58.424082] Call Trace:
[   58.424082]  [<c0920c67>] dump_stack+0x16/0x18
[   58.424082]  [<c091c4b3>] panic+0x87/0x181
[   58.424082]  [<c0451105>] do_exit+0x8f5/0x900
[   58.424082]  [<c045c5e7>] ? recalc_sigpending+0x17/0x50
[   58.424082]  [<c0451184>] do_group_exit+0x34/0xa0
[   58.424082]  [<c045efbb>] get_signal_to_deliver+0x18b/0x680
[   58.424082]  [<c0402525>] do_signal+0x45/0x9e0
[   58.424082]  [<c0927c3a>] ? do_trap+0x5a/0xc0
[   58.424082]  [<c0567b50>] ? free_bprm+0x50/0x60
[   58.424082]  [<c0567fc3>] ? do_execve_common+0x463/0x4e0
[   58.424082]  [<c0403480>] ? do_bounds+0x80/0x80
[   58.424082]  [<c0402f17>] do_notify_resume+0x57/0x80
[   58.424082]  [<c0927215>] work_notifysig+0x30/0x3b

Cause: it tried to execute illegal instruction in init (systemd).

Resolution: Replace the kernel for emulation, or replace with systemd.i586 package.


swapper killed by do_invalid_op

Symptom: Booting kernel-3.10.0-862.3.3.el7 on i586. The kernel panics on early boot stage:

[    0.450437] ftrace: allocating 25137 entries in 50 pages
[    0.640459] do_invalid_op() : invalid opcode detected pid 0(swapper/0) @c04207ee : 00 00 >0f ae 00 31 c0...
[    0.650000] BUG: unable to handle kernel NULL pointer dereference at 00000044
[    0.650000] IP: [<c09ca472>] down_read+0x12/0x30
...
[    0.650000]  [<c0cdfba1>] start_kernel+0x3d3/0x3ea
[    0.650000]  [<c0cdf601>] ? repair_env_string+0x51/0x51
[    0.650000]  [<c0cdf384>] i386_start_kernel+0x12e/0x131
[    0.650000] Code: 8d 74 26 00 89 d1 31 d2 c7 04 24 01 00 00 00 e8 85 fe ff ff c9 c3 66 90 90 55 89 e5 53 3e 8d 74 26 00 89 c3 e8 a0 0e 00 00 89 d8 <3e> ff 00 79 05 e8 b4 b0 cd ff 83 7b 10 01 74 07 c7 43 10 01 00
[    0.650000] EIP: [<c09ca472>] down_read+0x12/0x30 SS:ESP 0068:c0c4fd58
[    0.650000] CR2: 0000000000000044
[    0.650000] ---[ end trace 0d044f5ded777dce ]---
[    0.650000] Kernel panic - not syncing: Fatal exception

Cause: kernel-3.10.0-862.3.3.el7 eagerfpu code doesn't check for fxsr capability (cpu flags) and uses fxsave opcode unconditionally, which doesn't exist on i586.

Workaround: Use eagerfpu=off kernel option. Using the lazy FPU mode could be a performance win on older CPUs too.

Resolution: Patch.


lorax doesn't finish, with missing "dracut module anaconda"

Symptom: On work machine, when lorax was invoked, after creating squashfs, it dies with error:

dracut module 'anaconda' cannot be found or installed.
Traceback (most recent call last):
  File "/sbin/lorax", line 323, in <module>
    main(sys.argv)
  File "/sbin/lorax", line 225, in main
    remove_temp=True)
  File "/usr/lib/python2.7/site-packages/pylorax/__init__.py", line 321, in run
    treebuilder.rebuild_initrds(add_args=anaconda_args)
  File "/usr/lib/python2.7/site-packages/pylorax/treebuilder.py", line 218, in rebuild_initrds
    runcmd(cmd, root=self.vars.inroot)
  File "/usr/lib/python2.7/site-packages/pylorax/executils.py", line 414, in runcmd
    return execWithRedirect(cmd[0], cmd[1:], **kwargs)
  File "/usr/lib/python2.7/site-packages/pylorax/executils.py", line 179, in execWithRedirect
    raise subprocess.CalledProcessError(ret, [command]+argv)
subprocess.CalledProcessError: Command '['dracut', '--nomdadmconf', '--nolvmconf', '--xz', '--install', '/.buildstamp', '--no-early-microcode', '--add', 'anaconda pollcdrom', '--force', 'boot/initramfs-3.10.0-229.el7.i686.img', '3.10.0-229.el7.i686']' returned non-zero exit status 1

Cause: anaconda-dracut-*.rpm package is missing in ./DVD1/Packages/. It doesn't have to be installed on the work host machine. Do not to forget re-createrepo after adding it.


systemd freezes

Symptom: Freeze in early stage of boot. With debug kernel option, systemd stops by

systemd[1]: Caught , dumped core as pid 312.
systemd[1]: Freezing execution.

Cause: systemd completely stops when illegal instruction is detected by things invoked by it on early stage.

Resolution: Replace the kernel with SSE2 emulation kernel.


screen freezes when vga= option specified

Specified vga=ask as kernel option to get VESA screen. After loading initrd, the screen goes blank and seems to freeze.

Resolution: Try waiting for a couple of minutes. Try without vga= option, and see how long it takes to "Unpacking initramfs".
Cause: You will not have any output until initial rootfs is extracted. Some console output resumes after that. This could take a long time on old hardware.

Extraction of initramfs of install disc takes 180 seconds on Pentium 120MHz.


freezes on dracut-pre-pivot

Symptom: On CentOS 7.1.1503, used rd.break kernel option to get emergency shell. it seems to freeze after

systemd[771]: Executing /bin/dracut-pre-pivot

Resolution: Wait for 10 minutes until rpc-statd exits. dracut-pre-pivot depends on remote-fs.target, so it tries to invoke NFS client daemons and sits there.

If you want emergency rd shell, rd.break=mount (CentOS 7.1.1503), rd.break=pre-pivot (CentOS 7.2.1511) should be better.


freezes on Gathering udev info...

Symptom: After root pivot, systemd seems to freeze in

[  764.042427] anaconda-pre-log-gen[1143]: Gathering console messages...
[  765.587195] anaconda-pre-log-gen[1143]: Gathering /etc/lvm info...
[  769.831575] anaconda-pre-log-gen[1143]: Gathering /dev listing...
[  773.073033] anaconda-pre-log-gen[1143]: Gathering /sys/block listing...
[  778.852837] anaconda-pre-log-gen[1143]: Gathering system info...
[  899.115791] anaconda-pre-log-gen[1143]: Gathering udev info...

When installer is invoked with systemd.journald.forward_to_console=1 kernel option, log shows that systemd-logind.service is repeatedly failing to start.

[ 1022.724579] systemd[1]: Starting Login Service...
[ 1046.966507] systemd-logind[1240]: Failed to enable subscription: Connection timed out
[ 1047.019321] dbus[1145]: [system] Failed to activate service 'org.freedesktop.systemd1': timed out
[ 1047.123532] systemd-logind[1240]: Failed to fully start up daemon: Connection timed out
[ 1047.648113] systemd[1]: systemd-logind.service: main process exited, code=exited, status=1/FAILURE
[ 1047.857192] systemd[1]: Failed to start Login Service.
[ 1047.908602] systemd[1]: Unit systemd-logind.service entered failed state.
[ 1048.014812] systemd[1]: systemd-logind.service failed.
[ 1048.299360] systemd[1]: systemd-logind.service has no holdoff time, scheduling restart.
[ 1048.444478] systemd[1]: Cannot add dependency job for unit rhel-loadmodules.service, ignoring: Unit is masked.
[ 1048.505439] systemd[1]: Cannot add dependency job for unit rhel-autorelabel.service, ignoring: Unit is masked.
[ 1048.591871] systemd[1]: Cannot add dependency job for unit systemd-tmpfiles-clean.timer, ignoring: Unit is masked.
[ 1049.169773] systemd[1]: Starting Login Service...

Cause: Default timeout of 25 seconds of dbus is too short for slow machines.

Resolution:

to allow longer timeouts.


Software selection error

Symptom: in Software Selection screen during install, error is shown:

1:dbus-1.6.12-11.el7.i586 requires /usr/sbin/useradd
1:dbus-1.6.12-11.el7.i586 requires chkconfig
1:dbus-1.6.12-11.el7.i586 requires libaudit.so.1
1:dbus-1.6.12-11.el7.i586 requires libcap-ng.so.0
1:dbus-1.6.12-11.el7.i586 requires libexpat.so.1
1:dbus-1.6.12-11.el7.i586 requires libselinux(x86-32) >= 1.15.2
...
coreutils-8.22-11.el7.i586 requires grep
...

Cause: You didn't replace rpm and yum package modified to allow .i686.rpm install on i586 machine.


Wi-Fi interface not recognized after install

Symptom: The machine has a wifi network adaptor. It was usable in installer and rescue disc, but after HDD install, it doesn't work.
It is listed under ip link as

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp2s1:  mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen 1000
    link/ether 00:11:25:44:08:c3 brd ff:ff:ff:ff:ff:ff
3: wlp2s2:  mtu 1500 qdisc mq state DOWN mode DORMANT qlen 1000
    link/ether 00:0e:9b:99:bb:19 brd ff:ff:ff:ff:ff:ff
but NetworkManager seems to ignore the interface; scanning for Access Points (nmcli dev wifi list) nor authenticated connection (nmcli --ask dev wifi connect) doesn't work.

When NetworkManager -d is invoked manually, it shows

NetworkManager[9588]:   (wlp2s2): 'wifi' plugin not available; creating generic device
NetworkManager[9588]:   (wlp2s2): new Generic device (carrier: OFF, driver: 'ath5k', ifindex: 3)

Cause: NetworkManager-wifi plugin is not installed. It may not be installed on upgrading minimum install to something else.

Resolution Install NetworkManager-wifi package. After install, NetworkManager -d output should be

...
NetworkManager[2772]:   Loaded device plugin: NMWifiFactory (/usr/lib/NetworkManager/libnm-device-plugin-wifi.so)
...
NetworkManager[2772]:   (wlp2s2): using nl80211 for WiFi device control
NetworkManager[2772]:   (wlp2s2): driver supports Access Point (AP) mode
NetworkManager[2772]:   (wlp2s2): new 802.11 WiFi device (carrier: UNKNOWN, driver: 'ath5k', ifindex: 3)
NetworkManager[2772]:   (wlp2s2): device state change: unmanaged -> unavailable (reason 'managed') [10 20 2]

Note: Atheros 5xxx (ath5k) driver is not compiled by default on stock RHEL/CentOS kernel.

GNOME session doesn't start

Symptom: Tried to start GNOME desktop via startx, but it won't start. From debugging output from xinit /bin/gnome-session --session=gnome-classic --debug, gnome-session is timed out after 90 seconds.

Feb 11 14:14:38 localhost gnome-session[21070]: DEBUG(+): GsmManager: starting app '/org/gnome/SessionManager/App1'
Feb 11 14:14:39 localhost gnome-session[21070]: DEBUG(+): Starting app: /org/gnome/SessionManager/App1
Feb 11 14:14:39 localhost gnome-session[21070]: DEBUG(+): GsmAutostartApp: starting gnome-shell-classic.desktop: command=/usr/bin/gnome-shell startup-id=103e7075ddf5707b7a145516764254291500000210700000
Feb 11 14:14:39 localhost gnome-session[21070]: DEBUG(+): GsmAutostartApp: started pid:21158
Feb 11 14:14:39 localhost gnome-session[21070]: DEBUG(+): GsmDBusClient: obj_path=/org/freedesktop/DBus interface=org.freedesktop.DBus method=NameOwnerChanged
...
Feb 11 14:16:07 localhost gnome-session[21070]: DEBUG(+): GsmDBusClient: obj_path=/org/freedesktop/DBus interface=org.freedesktop.DBus method=NameOwnerChanged
Feb 11 14:16:09 localhost gnome-session[21070]: WARNING: Application 'gnome-shell-classic.desktop' failed to register before timeout
Feb 11 14:16:09 localhost gnome-session: Unrecoverable failure in required component gnome-shell-classic.desktop

Cause: Machine was slow enough to exceed hardcoded timeout of 90 seconds.

Resolution: Replace gnome-session, gnome-session-xsession packages, which are patched with longer timeout.


gnome-terminal doesn't start

Symptom: gnome-terminal won't start. When started from command line, it says timeouted.

# DISPLAY=:0 gnome-terminal
Error constructing proxy for org.gnome.Terminal:/org/gnome/Terminal/Factory0: Error calling StartServiceByName for org.gnome.Terminal: Timeout was reached

Cause: 25-second default timeout of D-Bus has reached. gnome-terminal isn't a independent application; when gnome-terminal is invoked, /usr/libexec/gnome-terminal-server is invoked via D-Bus, but slow enough machine exceeds timeout between D-Bus and gnome-terminal-server. This timeout is not configurable and seems to be hardcoded as default 25 secs.

Workaround: Invoke DISPLAY=:0 /usr/libexec/gnome-terminal-server manually. Wait for several seconds, then invoke gnome-terminal.

Resolution: the dbus, dbus-libs, dbux-x11 packages provided on this page has the timeout changed from 25 to 50 secs.

gnome-terminal on GNOME3 seems to not work even with longer timeouts. 50 sec timeout works on KDE.


cannot change input method

Symptom:Trying to switch ibus input method. Click-selecting the keyboard icon, or using [Super]-Space, does show the alternate input method (after terrible delay), but keyboard icon doesn't change and input method doesn't change.

Cause: Default timeout of 5 seconds may be too short for slow machines

Resolution: set a longer timeout on ibus-daemon.

% pkill ibus-daemon
% IBUS_TIMEOUT=30000 /usr/bin/ibus-daemon -d -r --xim --timeout=30000

There are two configurable timeouts for ibus-daemon; ibus timeout (IBUS_TIMEOUT), which defaults to 6 seconds, and gdbus timeout (--timeout) which defaults to 5 seconds. These may be too short for slow machines. Above example sets them to 30 seconds. (--timeout seems to be enough)

Making change permanent

Edit /etc/X11/xinit/xinput.d/ibus.conf as:

XIM=ibus
XIM_PROGRAM="/usr/bin/ibus-daemon"
ICON="ibus"
XIM_ARGS="-r --xim --timeout=30000"
PREFERENCE_PROGRAM=/usr/bin/ibus-setup
...


ZD1211 USB WiFi does not work

Symptom: ZyDAS zd1211 based USB wifi adapter (such as Buffalo WLI-UC-AG) is not recognized. On insertion, /var/log/messages says:

Jul 28 07:01:53 capricorn kernel: usb 1-5: Could not load firmware file zd1211/zd1211b_ub. Error number -2
Jul 28 07:01:53 capricorn kernel: zd1211rw 1-5:1.0: couldn't load firmware. Error number -2

Resolution: Install zd1211-firmware package. The one supplied with CentOS 6 will work nicely.

Note: zd1211rw.ko driver is not supplied in stock RHEL/CentOS 7 kernel.
Note: you cannot use 802.11a band; the driver lacks implementation.

To make the driver work in installation/rescue disc, you must add zd1211-firmware-1.4-4.el6.noarch.rpm in ./DVD1/Packages/, createrepo, and pass --installpkgs=zd1211-firmware to lorax.


BCM43xx based WiFi does not work

Symptom: On insertion of Broadcom BCM43xx based (Cardbus) WiFi adapter, dmesg or /var/log/messages says

kernel: pcmcia_socket pcmcia_socket0: pccard: CardBus card inserted into slot 0
kernel: pci 0000:03:00.0: BAR 0: assigned [mem 0xd4000000-0xd4001fff]
kernel: b43-pci-bridge 0000:03:00.0: enabling device (0000 -> 0002)
kernel: ssb: Found chip with id 0x4306, rev 0x03 and package 0x00
kernel: ssb: Sonics Silicon Backplane found on PCI device 0000:03:00.0
kernel: b43-phy1: Broadcom 4306 WLAN found (core revision 5)
kernel: b43-phy1: Found PHY: Analog 2, Type 2 (G), Revision 2
kernel: b43-phy1: Found Radio: Manuf 0x17F, ID 0x2050, Revision 2, Version 0
kernel: Broadcom 43xx driver loaded [ Features: PNLS ]
kernel: b43-phy1 ERROR: Firmware file "b43/ucode5.fw" not found
kernel: b43-phy1 ERROR: Firmware file "b43-open/ucode5.fw" not found
kernel: b43-phy1 ERROR: You must go to http://wireless.kernel.org/en/users/Drivers/b43#devicefirmware and download the correct firmware for this driver version. Please carefully read all instructions on this website.

Resolution: Install a firmware package. b43-openfwwf-5.2-10.el6.noarch.rpm supplied with CentOS 6 works. If it doesn't, you need to use b43-fwcutter by yourself to extract a firmware.

Note: b43.ko driver is not supplied in stock RHEL/CentOS 7 kernel.

To make the driver work in installation/rescue disc, you must add b43-openfwwf-5.2-10.el6.noarch.rpm in ./DVD1/Packages/, createrepo, and pass --installpkgs=b43-openfwwf to lorax.


b43 driver ceases to transmit traffic on switching VT

Symptom: Using Broadcom BCM4306 (rev 03) based CardBus wireless card. When ssh-ed to remote host, generate some traffic with ls -lR /, and repeatedly switch VTs by Alt-F1<>Alt-F2, eventually the network stops working. The card can receive traffic but no transmission occurs.

With b43.ko built with CONFIG_B43_DEBUG=y, it shows following error:

kernel: b43-phy1 debug: Out of order TX status report on DMA ring 1. Expected 148, but got 180

Workaround:


3Com 3c509 does not work

Symptom: Using 3com EtherlinkIII 3c509 network adaptor. When manually modprobe 3c509 is done, the card is detected, but does not link up, even if I said ethtool -s eth0 port tp. Kernel messages says:

eth0: 3c5x9 found at 0x310, BNC port, address 00:a0:24:28:c2:80, IRQ 3.
3c509.c:1.20 04Feb2008 becker@scyld.com
------------[ cut here ]------------
WARNING: CPU: 0 PID: 737 at net/sched/sch_generic.c:356 dev_watchdog+0x1f3/0x200
NETDEV WATCHDOG: eth0 (3c509): transmit queue 0 timed out
Modules linked in: ip_set nfnetlink ebtable_nat ...
CPU: 0 PID: 737 Comm: nmcli Not tainted 3.10.0-862.el7.v37.i586 #1
Hardware name: System Manufacturer System Name/ALADDIN5, BIOS 0626 07/15/95
Call Trace:
 <SOFTIRQ>  [<c09c5ba0>] dump_stack+0x16/0x18
 [<c0452daa>] __warn+0xea/0x110
 [<c08e8f53>] ? dev_watchdog+0x1f3/0x200
 [<c0452e16>] warn_slowpath_fmt+0x46/0x60
 [<c08e8f53>] dev_watchdog+0x1f3/0x200
 [<c04612f2>] call_timer_fn+0x32/0x100
 [<c07bc312>] ? scsi_decide_disposition+0x1d2/0x210
 [<c047cc69>] ? put_cred_rcu+0x89/0xb0
 [<c08e8d60>] ? dev_deactivate_queue.constprop.30+0x50/0x50
 [<c0463429>] run_timer_softirq+0x199/0x270
 [<c08e8d60>] ? dev_deactivate_queue.constprop.30+0x50/0x50
 [<c045b933>] __do_softirq+0xc3/0x1f0
 [<c045b870>] ? tasklet_action+0x110/0x110
 [<c041a565>] call_on_stack+0x45/0x50
 <EOI>  [<c045bbb5>] ? irq_exit+0x95/0xa0
 [<c0419e95>] ? do_IRQ+0x45/0xd0
 [<c09d0810>] ? __do_page_fault+0x490/0x490
 [<c09d4ef3>] ? common_interrupt+0x33/0x40
---[ end trace b49bc66903ceb9e0 ]---
eth0: transmit timed out, Tx_status 00 status 2000 Tx FIFO room 1332.
eth0: transmit timed out, Tx_status 00 status 2000 Tx FIFO room 1484.
eth0: transmit timed out, Tx_status 00 status 2000 Tx FIFO room 1528.
eth0: transmit timed out, Tx_status 00 status 2000 Tx FIFO room 1408.
eth0: transmit timed out, Tx_status 00 status 2000 Tx FIFO room 1328.
eth0: transmit timed out, Tx_status 00 status 2000 Tx FIFO room 1260.

Cause: Media autodetection is disabled on the card. When the card is set to use particular link port, ethtool -s eth0 port tp doesn't have any effect.

Resolution: Use 3C5X9CFG.EXE, included in 3Com EtherDisk, to set the card to use TP (RJ-45) medium.


ping(8) does not work

Symptom: Using K6-2 CPU. ping(8) does not seem to work; packet goes out but no reply.

Cause: ping(8) uses pxor %xmm opcode, which cannot be emulated on MMX capable but non-SSE CPUs. Totally unsupported and expected-not-to-work configuration.

Resolution: Recompile iputils package for i586.


Cannot login on console under heavy load

Symptom: Under heavy load, login on vt console is rejected by

	Login timed out after 60 seconds

Resolution: Add login(1) LOGIN_TIMEOUT in /etc/login.defs:

	## default 60secs is short under heavy load
	LOGIN_TIMEOUT	300


akonadi does not work

Symptom: Running KDE4 on Pentium. On KDE desktop start, akonadi does not work. akonadiserver repeatedly crashes and fail to connect to mysqld, leaving error in ~/.local/share/akonadi/akonadiserver.error: (also reproducible by akonadictl start)

Error during executing query "SELECT * FROM SchemaVersionTable LIMIT 1" :  "Lost connection to MySQL server during query QMYSQL3: Unable to execute statement" 
"Unable to retrieve data from table.
Sql error: Lost connection to MySQL server during query QMYSQL3: Unable to execute statement
Query: SELECT * FROM SchemaVersionTable LIMIT 1" 
Unable to initialize database. 
"[
0: akonadiserver(_Z11akBacktracev+0x47) [0x808fbf7]
1: akonadiserver() [0x808feed]
2: [0xb7747400]
3: /lib/libc.so.6(gsignal+0x3c) [0xb6df60ac]
... (backtrace isn't helpful here)
]
" 

Cause: akonadi and underlying mysqld installs their own SIGILL trap, which nullifies opcode emulation, and aborts inexpectedly.

Resolution: Replace akonadi and mariadb packages.

Since working akonadi is very heavy on CPU, you may want just let them fail if you don't use PIM related apps, such as Korganizer.


pydoc does not work

$ pydoc -k zqwykjv
Segmentation fault
$ _

This is caused by installed several python C extension modules (*.so) . Beside Python, if following packages are installed (KDE desktop installation likely haves them all)

gdb of "pydoc -k zqwykjv" session reveals that infinite recursion loop in _gobject.so, eats up resources and try to emit last error, but too late. Also tons of unrelated *.so libraries are loaded just for extracting help messages, making weird interference.

$ gdb /bin/python

GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-80.el7
...
Reading symbols from /usr/bin/python2.7...Reading symbols from /usr/bin/python2.7...(no debugging symbols found)...done.
(no debugging symbols found)...done.
Missing separate debuginfos, use: debuginfo-install python-2.7.5-48.el7.i686

(gdb) run /bin/pydoc -k zqwykjv

Starting program: /bin/python /bin/pydoc -k zqwykjv
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0xb7c3c2db in vfprintf () from /lib/libc.so.6

(gdb) where
#0  0xffffffff in vfprintf () at /lib/libc.so.6
#1  0xffffffff in __vasprintf_chk () at /lib/libc.so.6
#2  0xffffffff in g_vasprintf () at /lib/libglib-2.0.so.0
#3  0xffffffff in g_strdup_vprintf () at /lib/libglib-2.0.so.0
#4  0xffffffff in g_logv () at /lib/libglib-2.0.so.0
#5  0xffffffff in g_log () at /lib/libglib-2.0.so.0
#6  0xffffffff in g_return_if_fail_warning () at /lib/libglib-2.0.so.0
#7  0xffffffff in g_type_get_qdata () at /lib/libgobject-2.0.so.0
#8  0xffffffff in pygobject_lookup_class ()
    at /usr/lib/python2.7/site-packages/gobject/_gobject.so
#9  0xffffffff in pyg_type_get_bases ()
    at /usr/lib/python2.7/site-packages/gobject/_gobject.so
#10 0xffffffff in pygobject_new_with_interfaces ()
    at /usr/lib/python2.7/site-packages/gobject/_gobject.so
#11 0xffffffff in pygobject_lookup_class ()
    at /usr/lib/python2.7/site-packages/gobject/_gobject.so
#12 0xffffffff in pyg_type_get_bases ()
    at /usr/lib/python2.7/site-packages/gobject/_gobject.so
#13 0xffffffff in pygobject_new_with_interfaces ()
    at /usr/lib/python2.7/site-packages/gobject/_gobject.so
#14 0xffffffff in pygobject_lookup_class ()
    at /usr/lib/python2.7/site-packages/gobject/_gobject.so
#15 0xffffffff in pyg_type_get_bases ()
    at /usr/lib/python2.7/site-packages/gobject/_gobject.so
#16 0xffffffff in pygobject_new_with_interfaces ()
    at /usr/lib/python2.7/site-packages/gobject/_gobject.so
#17 0xffffffff in pygobject_lookup_class ()
    at /usr/lib/python2.7/site-packages/gobject/_gobject.so
#18 0xffffffff in pyg_type_get_bases ()
    at /usr/lib/python2.7/site-packages/gobj
(gdb) ^CQuit

Workaround: for AssertionError: '' != 'dm.c: 1693: not running as root returning empty list', simple workaround is just "chmod 700 /usr/lib/python2.7/site-packages/block/". python-pyblock is an anaconda module, and you are unlikely to use this besides root.

Segfault workaround: uninstall one of the 5 packages. gnome-abrt is most unintruding, so force uninstall by "rpm -ev --nodeps gnome-abrt" .


Freezes as a Hyper-V guest

Symptom: Tried installing CentOS 7.3.1611 i686 AltArch version as Hyper-V guest. After [Begin Installation], the installer just sits for hours in "Creating disklabel on /dev/sda". In background, dd if=/dev/zero of=/dev/sda bs=512 seek=2048 count=2048 is running, not to finish.
CentOS 7.2.1511 i686 did not have a problem.

Cause: a 32-bit kernel specific bug in Hyper-V storage driver, drivers/scsi/storvsc_drv.c .

Resolution: patch the kernel, or use the kernel provided on this page. CentOS 7.4 i686 has this fixed.


kernel-3.10.0-862.11.6.el7.centos.plus.1.i686 and after doesn't boot as Hyper-V guest

(as reported as CentOS#15374)

Symptom: Booting kernel-3.10.0-862.11.6.el7.centos.plus.1.i686 as Hyper-V guest. The boot stops at

[ OK ] Mounted RPC Pipe File System.
[ OK ] Reached target rpc_pipefs.target.
then freezes.

Using single init=/bin/sh kernel option, it does drops to shell, but invoking an external command will kill the init (/bin/sh) by SIGSEGV (exitcode=0x0000000b).

 [ OK ] Started Plymouth switch root service.
 [ 3.029778] systemd-journald[74]: Received SIGTERM from PID 1 (systemd).
 sh-4.2# [ 5.137207] psmouse serio1: trackpoint: IBM TrackPoint firmware: 0x01, buttons: 0/0
 [ 5.147197] input: TPPS/2 IBM TrackPoint as /devices/platform/i8042/serio1/input/input3
 [ 5.155562] input: AT Translated Set 2 keyboard as
 /devices/LNXSYSTM:00/device:00/PNP0A03:00/device:08/VMBUS:01/d34b2567-b9b6-42b9-8778-0a4ec0
 b955bf/serio2/input/input4
 sh-4.2#
 sh-4.2#
 sh-4.2# echo *
 bin boot dev etc export home lib lost+found media mnt opt proc root run sbin srv sys tmp
 usr var
 sh-4.2#
 sh-4.2#
 sh-4.2# ls
 bin dev export lib media opt root sbin sys usr
 boot [ 12.437659] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
 [ 12.437659]
 [ 12.438580] CPU: 0 PID: 1 Comm: sh Tainted: G W ------------
 3.10.0-862.11.6.el7.centos.plus.1.i686 #1
 [ 12.438580] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS 090006 05/23/2012
 [ 12.438580] Call Trace:
 [ 12.438580] [<d59d81e3>] dump_stack+0x16/0x18
 [ 12.438580] [<d59d418b>] panic+0x98/0x1b7
 [ 12.438580] [<d545cc0b>] do_exit+0x8eb/0x8f0
 [ 12.438580] [<d5468a17>] ? recalc_sigpending+0x17/0x50
 [ 12.438580] [<d545cc84>] do_group_exit+0x34/0xa0
 [ 12.438580] [<d546b319>] get_signal_to_deliver+0x189/0x590
 [ 12.438580] [<d5416e95>] do_signal+0x45/0x960
 [ 12.438580] [<d5468a17>] ? recalc_sigpending+0x17/0x50
 [ 12.438580] [<d546945c>] ? __set_task_blocked+0x3c/0x90
 [ 12.438580] [<d546b8c7>] ? __set_current_blocked+0x37/0x70
 [ 12.438580] [<d546ba9f>] ? sigprocmask+0x7f/0xc0
 [ 12.438580] [<d5417817>] do_notify_resume+0x67/0x80
 [ 12.438580] [<d59df6b9>] work_notifysig+0x30/0x37
 [ 12.438580] Kernel Offset: 0x14400000 from 0xc1000000 (relocation range: 0xc0000000-0xf7ffdfff)
 [ 12.480357] ------------[ cut here ]------------

Cause: arch/x86/include/asm/uaccess_32.h wasn't updated in sync with uaccess_64.h . Upstream RHEL only has x86_64 release, so x86_32 fixes are often left behind.

Resolution: Patch.


Xorg Xserver loses keyboard and mouse input

Symptom: When plain Xorg Xserver is started as

xinit
the mouse and keyboard loses input. You can't terminate the Xserver via Ctrl-Alt-BackSpace nor switch to other Virtual Terminal (VT) by Ctrl+Alt+Fn. The Xorg could be killed from other (possibly ssh) shell to restore state.

/var/log/Xorg.0.log says:

(II) LoadModule: "evdev"
(II) Loading /usr/lib/xorg/modules/input/evdev_drv.so
(II) Module evdev: vendor="X.Org Foundation"
	compiled for 1.17.2, module version = 2.9.2
	Module class: X.Org XInput Driver
	ABI class: X.Org XInput driver, version 21.0
(II) systemd-logind: got fd for /dev/input/event1 13:65 fd 17 paused 1
(II) systemd-logind: releasing fd for 13:65
(II) config/udev: Adding input device Power Button (/dev/input/event0)
(**) Power Button: Applying InputClass "evdev keyboard catchall"
(**) Power Button: Applying InputClass "system-keyboard"

Cause: The Xorg was compiled with --enable-systemd-logind, which will be the default when compiled on Dbus and systemd aware host. (Mass build systems using mock sometimes does NOT fall in this category) When compiled with systemd-logind integration, Xorg needs vt1 option when invoked from VT1 (/dev/tty1).

Some officially built Xorg binary, as in CentOS 7, does NOT have the integration, and thus does not suffer.

To determine whether Xorg is compiled with systemd-logind support, search for string in the binary:

$ strings -a /usr/bin/Xorg | grep 'systemd-logind: releasing fd'
systemd-logind: releasing fd for %u:%u
If Xorg contains this string, systemd-logind support is integrated.

Workaround: Always add vt1 option for Xserver, as

xinit -- vt1 
/usr/bin/startx does this automatically, so use startx if appropriate.

When systemd-logind integration is properly working, the /var/log/Xorg.0.log will be as follows:

(II) LoadModule: "evdev"
(II) Loading /usr/lib/xorg/modules/input/evdev_drv.so
(II) Module evdev: vendor="X.Org Foundation"
	compiled for 1.17.2, module version = 2.9.2
	Module class: X.Org XInput Driver
	ABI class: X.Org XInput driver, version 21.0
(II) systemd-logind: got fd for /dev/input/event1 13:65 fd 17 paused 0
(II) Using input driver 'evdev' for 'Power Button'
(**) Power Button: always reports core events
(**) evdev: Power Button: Device: "/dev/input/event1"
(--) evdev: Power Button: Vendor 0 Product 0x1
(--) evdev: Power Button: Found keys
(II) evdev: Power Button: Configuring as keyboard
(**) Option "config_info" "udev:/sys/devices/LNXSYSTM:00/LNXPWRBN:00/input/input1/event1"
(II) XINPUT: Adding extended input device "Power Button" (type: KEYBOARD, id 6)
(**) Option "xkb_rules" "evdev"
(**) Option "xkb_layout" "jp"
(II) config/udev: Adding input device Power Button (/dev/input/event0)
(**) Power Button: Applying InputClass "evdev keyboard catchall"
(**) Power Button: Applying InputClass "system-keyboard"

Resolution:

Use Xorg compiled with --disable-systemd-logind.


Cannot login as root on single-user mode

Symptom: Passed single as kernel command line, to drop into single-user mode. Root password is denied as:

Give root password for maintenance
(or type Control-D to continue): ********
sulogin: crypt failed: Invalid argument
Login incorrect

Give root password for maintenance
(or type Control-D to continue): _

Cause: SELinux is in enforcing mode, and /etc/shadow is not labelled correctly as

----------. root root system_u:object_r:shadow_t:s0    /etc/shadow

Resolution: Boot with enforcing=0 single kernel option. You should be able to login as root. At shell prompt, do restorecon -v /etc/shadow to reset the SELinux context.


pata_ali is restricted to MWDMA2 speed

Symptom: Using ALi M1543C (Alladin V companion) as southbridge chip. Even though the chip has UDMA/33 capability, on boot, it reports as "max MWDMA2" and transfer speed is restricted. dmesg says:

[   39.348668] libata version 3.00 loaded.
[   39.625253] pata_ali 0000:00:0f.0: can't derive routing for PCI INT A
[   39.696198] scsi host0: pata_ali
[   39.720877] scsi host1: pata_ali
[   39.722588] ata1: PATA max MWDMA2 cmd 0x1f0 ctl 0x3f6 bmdma 0xffa0 irq 14
[   39.722813] ata2: PATA max MWDMA2 cmd 0x170 ctl 0x376 bmdma 0xffa8 irq 15
...
[   39.920777] ata1.00: ATA-6: ST340810A, 3.39, max UDMA/100
[   39.960749] ata1.00: configured for MWDMA2

Cause: You're likely using a Revision 0xC1 of the chipset. Linux kernel (even the latest 4.8) doesn't have special handling for this chipset and reverts to MWDMA2.

Resolution: Patch. Patched kernel should report as

[   55.006883] libata version 3.00 loaded.
[   55.015390] pata_ali 0000:00:0f.0: can't derive routing for PCI INT A
[   55.166479] scsi host0: pata_ali
[   55.196424] scsi host1: pata_ali
[   55.198219] ata1: PATA max UDMA/33 cmd 0x1f0 ctl 0x3f6 bmdma 0xffa0 irq 14
[   55.198449] ata2: PATA max UDMA/33 cmd 0x170 ctl 0x376 bmdma 0xffa8 irq 15
[   55.397480] ata1.00: ATA-6: ST340810A, 3.39, max UDMA/100
[   55.397714] ata1.00: 78165360 sectors, multi 16: LBA 
[   55.437145] ata1.00: configured for UDMA/33


Screen garbled under Intel integrated video (i915.ko)

Symptom: Running CentOS 7.3.1611 kernel (3.10.0-514) on Intel integrated 865G video. Several lines at top of the text screen is blank/garbled.

[Sample screenshot of garbled 82865G]

sample of garbled text on 82865G

Cause: New bug introduced in backported DRM code.

Resolution: Patch. This patch is now included in kernel.org linux-4.4.
Also this problem is fixed in CentOS 7.4.1708 (3.10.0-693) kernel.


Text screen resolution reset when using Matrox video card

Symptom: Using a Matrox video card (such as G200). Text console resolution is reset to 80x30 regardess of vga=... nomodeset kernel option.

Cause: matroxfb_base module is read in by udev, which does not honor kernel options such as video=, vga=, nomodeset.

Resolution: Prepare /etc/modprobe.d/matrox.conf, or append to /etc/modprobe.d/blacklist.conf the following to prevent matroxfb from loading:

## /etc/modprobe.d/matrox.conf
# disable loading matroxfb by udev.
# udev scans /sys/**/modalias and loads driver by modprobe -b;
# "video=matroxfb:disabled" isn't honored by udev

blacklist matroxfb_base

If you want to explicitly set the resolution, you may say
#blacklist matroxfb_base
# 1024x768 
options matroxfb_base vesa=0x118 left=168
# 800x600
#options matroxfb_base vesa=0x115 upper=22 left=112 right=48 
# 1360x768 widescreen
#options matroxfb_base xres=1360 yres=768 fv=60 hslen=112 vslen=7 upper=18 lower=3 left=256 right=64 

See Documentation/fb/matroxfb.txt for options.

Note: matroxfb is not enabled on stock CentOS/RHEL kernel. Nor it is enabled in initrd in custom kernel, since it isn't drm (KMS) aware.
Note: VESA graphics console (vga=...) is very slow on older CPU, occasionaly causing "tsc unstable" log. Using matroxfb is recommended.

Widescreen not enabled on Matrox MGA G200

Symptom: Using Matrox G200 graphics card and widescreen monitor. Full 1360x768 resolution was available in CentOS 6 X desktop, but only 1024x768 is provided in CentOS 7, which seems to use VESA driver.

Cause: Xorg server of RHEL7 is patched to not find legacy xorg-x11-drv-* drivers which isn't shipped with RHEL7. MGA (xorg-x11-drv-mga) is among such driver.

Resolution: Replace the xorg-x11-server-Xorg with the one provided on this page, and additionally install the driver below. This will enable full resolution available for Matrox graphics cards.


yum complains package is not signed

Symptom: Tried yum --disablerepo=\* --enablerepo=c7-media group install on respun DVD. After grinding for 15 minutes, yum complains:

Package anaconda-gui-21.48.22.93-1.el7.v12.0.1.i586.rpm is not signed

Workaround: Use yum --nogpgcheck option.


Fails to load SoundBlaster AWE32 driver

Symptom: Using SoundBlaster AWE32 soundcard. Since this card isn't detected automatically, I tried to load the driver by insmod, but fails as following:

# modprobe snd_sbawe
sbawe 01:01.00: activated
sbawe 01:01.02: activated
sbawe: fatal error - EMU-8000 synthesizer not detected at 0x620
sbawe 01:01.00: disabled
sbawe 01:01.02: disabled

Workaround: Add snd_sbawe seq_ports=0 option. This skips detection of EMU-8000 wavetable sequencer, so PCM part of driver loads.

# modprobe snd_sbawe seq_ports=0
sbawe 01:01.00: activated
sbawe 01:01.02: activated
Note: snd_sbawe.ko module is not compiled in for stock CentOS kernel.

Kernel warning on loading SoundBlaster AWE32 driver

Symptom: When modprobe snd-sbawe, it works, but kernel warning is issued:

sbawe 01:01.00: [irq 5]
sbawe 01:01.00: [dma 1]
sbawe 01:01.00: [dma 5]
sbawe 01:01.00: [io  0x0220-0x022f]
sbawe 01:01.00: [io  0x0330-0x0331]
sbawe 01:01.00: [io  0x0388-0x038b]
sbawe 01:01.00: activated
sbawe 01:01.02: [io  0x0620-0x0623]
sbawe 01:01.02: [io  0x0a20-0x0a23]
sbawe 01:01.02: [io  0x0e20-0x0e23]
sbawe 01:01.02: activated
------------[ cut here ]------------
WARNING: at fs/sysfs/dir.c:526 sysfs_add_one+0x98/0xc0()
sysfs: cannot create duplicate filename '/devices/virtual/sound/card0/seq-oss-0-0'
Modules linked in: snd_emu8000_synth(+) snd_emux_synth snd_util_mem snd_seq_virmidi ...

Call Trace:
 [<c098372a>] dump_stack+0x16/0x18
 [<c0455b5c>] warn_slowpath_common+0x6c/0xa0
 [<c05f08c8>] ? sysfs_add_one+0x98/0xc0
 [<c05f08c8>] ? sysfs_add_one+0x98/0xc0
 [<c0455bce>] warn_slowpath_fmt+0x3e/0x60
 [<c05f08c8>] sysfs_add_one+0x98/0xc0
 [<c05f0a6a>] create_dir+0x6a/0xc0
 [<c05f0dae>] sysfs_create_dir+0x8e/0xf0
...
---[ end trace f86334c6ce0dff24 ]---
------------[ cut here ]------------
WARNING: at lib/kobject.c:196 kobject_add_internal+0x1fa/0x320()
kobject_add_internal failed for seq-oss-0-0 with -EEXIST, don't try to register things with the same name in the same directory.
Modules linked in: snd_emu8000_synth(+) snd_emux_synth snd_util_mem snd_seq_virmidi ...

Call Trace:
 [<c098372a>] dump_stack+0x16/0x18
 [<c0455b5c>] warn_slowpath_common+0x6c/0xa0
 [<c067c0ca>] ? kobject_add_internal+0x1fa/0x320
 [<c067c0ca>] ? kobject_add_internal+0x1fa/0x320
 [<c0455bce>] warn_slowpath_fmt+0x3e/0x60
 [<c067c0ca>] kobject_add_internal+0x1fa/0x320
 [<c076ad8f>] ? device_private_init+0x1f/0x60
 [<c067c635>] kobject_add+0x35/0x80
 [<c076aee6>] device_add+0x116/0x730
 [<e0c08cb3>] ? snd_device_new+0x43/0xa0 [snd]
 [<e0c08cb3>] ? snd_device_new+0x43/0xa0 [snd]
 [<e0c08d00>] ? snd_device_new+0x90/0xa0 [snd]
 [<e0bb5295>] snd_seq_device_dev_register+0x15/0x50 [snd_seq_device]
 [<e0c089e9>] __snd_device_register.part.0+0x19/0x30 [snd]
 [<e0c08a47>] snd_device_register+0x47/0x60 [snd]
 [<e0cac32e>] snd_emux_init_seq_oss+0xce/0xf0 [snd_emux_synth]
...
---[ end trace f86334c6ce0dff25 ]---

Resolution: Patch.


NE2000 (RTL8019AS) does not work with SounbBlaster AWE32

Symptom: RTL8019AS and SoundBlaster AWE32 both in PnP mode. Manually modprobe ne; modprobe snd-sbawe will recognize the driver, but ne driver does not work. It seems to stop working after modprobe snd-sbawe.

Resolution: Try modprobe in opposite order, i.e modprobe snd-sbawe; modprobe ne. snd-sbawe driver seems to be less forgiving in PnP resource allocation, so let it allocate resources first, then load ne which is more flexible in resource allocation.


Unable to mount root fs on unknown-block(0,0)

Symptom: On boot, kernel panics at early stage:

...
md: ... autorun DONE.
List of all partitions:
No filesystem could mount root, tried:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.10.0-514.10.2.el7.v24.i586 #1
Hardware name: System Manufacturer System Name/ALLADIN5, BIOD 0626 07/15/95
  c0bf90c7 88c46b0c df44bf10 df44bce4 c098320a df44bee4 c097ec83 c0b298a4
  c0d959e0 c0b5ad7b df44bf10 00008001 df6d4000 df44fb40 c0c7f05e c0b1b1c8
  df44bf10 df44bf28 c0594db2 00000000 df6d410e 00000000 dffdda80 c0b1acd7
Call Trace:
  [<co98320a>] dump_stack+0x16/0x18
  [<c097ec83>] panic+0x92/0x18c
  [<c0c7f05e>] mount_block_root+0x249/0x251
  [<c0594db2>] ? SyS_mknodat+0x162/0x1f0
  [<c0594e6d>] ? SyS_mknod+0x2d/0x30
  [<c0c7f0c1>] mount_root+0x5b/0x61
...

Cause: The grub menu is lacking initrd16 /boot/initramfs-3.10.0-514.10.2.el7.v23.i586.img line. You are very likely have interrupted the kernel installation by Ctrl+C, which leaves grub.cfg in transient state, missing initrd16 line.

Resolution: The easiest way is to reinstall the kernel, after booting in previous kernel:

# yum reinstall ./kernel-3.10.0-514.10.2.el7.v24.i586.rpm


pulseaudio hogs cpu in desktop environment

Symptom: Used startx to start a desktop environment. Watching the top(1) output. pulseaudio is hogging the cpu and desktop initialization crawls to nearly halt.

Workaround: Disable autospawn of pulseaudio. Edit /etc/pulse/client.conf, and add

autospawn = no
This will prevent pulseaudio from automatically starting. After the desktop had initialized, manually invoke pulseaudio by pulseaudio --start .

Since pulseaudio is designed for platform where CPU power >> soundcard processing power, you are not likely to have satisfactory performance when using ISA soundcards. PCI soundcard is recommended.

/sys says it's vulnerable to Spectre/Meltdown

$ sudo more /sys/devices/system/cpu/vulnerabilities/*
::::::::::::::
/sys/devices/system/cpu/vulnerabilities/meltdown
::::::::::::::
Vulnerable
::::::::::::::
/sys/devices/system/cpu/vulnerabilities/spectre_v1
::::::::::::::
Mitigation: Load fences
::::::::::::::
/sys/devices/system/cpu/vulnerabilities/spectre_v2
::::::::::::::
Vulnerable: Retpoline without IBPB

Cause: RHEL doesn't backport everything for i686 things since it's x86_64 only; CentOS Altarch i686 kernel may only have partial support for Meltdown/Spectre vulnerabilities.

If you're CPU is i586 class, it isn't an issue since i586 CPUs doesn't do speculative execution.

If you're on i686 class CPUs, you are likely out of luck;


Appendix

Source RPMs

Applied Patches


kabe.sra-tohoku.co.jp