This page is an attempt to create a CentOS 8 for 32bit i686/i586.
CentOS 8.x does not have 32bit i686 distribution, and no plan to be provided. (Note that CentOS 7.x i686 distribution was based on i686 artifacts compiled for 32bit compatibility)
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 insanely impractical to deploy CentOS 8 on sub-GHz CPUs in any way.
It works fairly well on Pentium M 1.8GHz. KDE 5 is somewhat sluggish, but works.
Some figures deployed on Pentium 120MHz:
$Keywords: CentOS Linux 8, 32bit, el8.i686, el8.i586, installation media respin, anaconda, Pentium, CMOV emulation, SSE emulation, SSE2 emulation, QtWebEngine without SSE2 $
Obsolete info for CentOS 8.3 i586 is also archived.
$Id$ (2021/09)
Your CPU has capability of | |||||
cmov
| mmx
| sse
| sse2
| works? | Example CPUs |
---|---|---|---|---|---|
yes | plain Pentium | ||||
mmx | no | Pentium MMX, K6-2, WinChip | |||
cmov | mmx | no | Pentium II, Cyrix MII | ||
cmov | mmx | sse | no | Pentium III, Athlon XP | |
cmov | mmx | sse | sse2 | yes | Pentium M, Pentium 4 |
The reason for all this fuss is that not all binaries are re-compiled. CentOS provided userland .i686 RPMs includes CMOV and SSE2 instructions which needs emulation, but MMX/SSE only processors cannot emulate them properly.
You need enough memory to fit the
unexpanded (70MB) and expanded (~220MB) initrd of
anaconda
installer,
plus kernel itself (20MB uncompressed), plus the work memory.
512MB was not enough.
Compiling for .i686.rpm packages should be done in
setarch i686
'ed chroot environment.
Many packages just doesn't cross-compile properly in x86_64 environment.
On the work machine, make SELinux permissive.
This is a lorax
(1) requirement.
You need a reboot for this.
Build of sed
package fails if SELinux is totally disabled.
Suppose you are prepring a chroot environment in
/chroot/i686/
of the work machine.
After sudo mkdir -p /chroot/i686/,
add the following entries in /etc/fstab :
# /chroot/i686 /proc /chroot/i686/proc none auto,bind 0 0 /dev /chroot/i686/dev none auto,bind 0 0 /dev/pts /chroot/i686/dev/pts none auto,bind 0 0 tmpfs /chroot/i686/dev/shm tmpfs auto,nosuid,nodev 0 0 sysfs /chroot/i686/sys sysfs auto,rw,nosuid,nodev,noexec 0 0 /sys/fs/cgroup /chroot/i686/sys/fs/cgroup none auto,bind 0 0 ## to let systemd build test see a /sys/fs/cgroup/systemd fs_type /sys/fs/cgroup/systemd /chroot/i686/sys/fs/cgroup/systemd none auto,bind 0 0 ## to let systemd build test see /run/systemd/session/<#> /run /chroot/i686/run none auto,bind 0 0 ## to let sed build test see selinux selinuxfs /chroot/i686/sys/fs/selinux selinuxfs auto 0 0 /home /chroot/i686/home none auto,bind 0 0
Do:
base$ sudo mkdir -p /chroot/i686/{proc,dev,sys,run} /chroot/i686/home
Then, manually mount the entries above, or just reboot to mount them all.
The goal is to prepare enough 32bit packages into /chroot/i686/
to run rpmbuild
(8).
Drop-in ix86.repo as /chroot/i686/etc/yum.repos.d/ix86.repo .
base$ sudo mkdir -p /chroot/i686/etc/yum.repos.d/ base$ sudo cp ix86.repo /chroot/i686/etc/yum.repos.d/ix86.repo
Install rpm-build
package and mass dependencies
using dnf --installroot
.
Use precompiled packages provided by this site for bootstrapping.
base$ sudo setarch i686 --32bit \ dnf --installroot=/chroot/i686 --releasever=8 \ --disablerepo=\* \ --enablerepo=ix86repo-BaseOS --enablerepo=ix86repo-AppStream \ --verbose install rpm-build sudo
Pull in other packages needed for rpmbuild:
base$ sudo setarch i386 --32bit \ dnf --installroot=/chroot/i686 --releasever=8 \ --disablerepo=\* \ --enablerepo=ix86repo-BaseOS --enablerepo=ix86repo-AppStream \ --verbose install dnf gcc make
With bash
(1) installed in the chroot,
it should be able to chroot inside.
Check uname -a
to see if it is an i686 environment.
base$ uname -a Linux centos8.localdomain 4.18.0-80.11.2.el8_0.x86_64 #1 SMP Tue Sep 24 11:32:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux base$ sudo cp -p /etc/passwd /etc/shadow /etc/sudoers /chroot/i686/etc/ base$ sudo setarch i686 --32bit chroot /chroot/i686 sudo -u $LOGNAME -s i686$ uname -a Linux centos8.localdomain 4.18.0-80.11.2.el8_0.x86_64 #1 SMP Tue Sep 24 11:32:19 UTC 2019 i686 i686 i386 GNU/LinuxThis is tedious, so you want to add the following to
~/.bashrc
in the work machine's base x86_64 system:
if [ `uname -m` != i686 ]; then alias i686env="sudo setarch i686 --32bit chroot /chroot/i686 sudo -u $LOGNAME -s" fi
Now, you would compile the individual packages.
To compile a package,
rpmbuild
to build the binary RPMs.
rpmbuild
will tell you about the missing packages
needed for build.
Build and install the needed dependency, or
invoke dnf to download from this site.
Repeat above until the package compiles.
Since you are mass-building various packages, directly building under ~/rpmbuild/ is not recommended. The example below uses ~/c8builds/coreutils-c8/ for coreutils package build.
base$ sudo setarch i686 --32bit chroot /chroot/i686 i686# sudo -u user -s user@i686$ cd user@i686$ mkdir -p c8builds/coreutils-c8 user@i686$ cd c8builds/coreutils-c8 user@i686$ pwd /home/user/c8builds/coreutils-c8
You would like to run a following mkrpmdir
shellscript
inside the directory:
#!/bin/sh ### mkdir for d in SPECS SOURCES; do mkdir -p $d; done ### ./rpmbin cat > ./rpmbin << 'EOF' #!/bin/sh D=${0%/*} test x"$D" = x"." && D="`/bin/pwd`" #--target=i586 exec ${0##*/} -D "_topdir $D" "$@" EOF chmod +x ./rpmbin ### symlink ./rpmbuild, ./rpm -> rpmbin for i in rpmbuild rpm; do rm -f ./$i; ln -s rpmbin ./$i; doneThis script prepares
./rpm
and ./rpmbuild
to install/compile the package.
Source RPMs are available under
ix86.repo/Source/, or if not, under
http://vault.centos.org/.
For example, source RPM for coreutils
package is at
http://ftp.iij.ad.jp/pub/linux/centos-vault/8.4.2105/BaseOS/Source/SPackages/coreutils-8.30-8.el8.src.rpm
Download it:
user@i686$ curl -R -O http://ftp.iij.ad.jp/pub/linux/centos-vault/8.4.2105/BaseOS/Source/SPackages/coreutils-8.30-8.el8.src.rpmYou would like to take note what directory the package goes eventually:
user@i686$ echo BaseOS > reponame
"Install" the source rpm in the current directory. You do not need a root privilege for source installation and compile.
user@i686$ ./rpm -ivh coreutils-8.30-8.el8.src.rpmNote that you use
./rpm
. It installs the source RPM
in current directory and populates ./SPECS/ and ./SOURCE/ .
rpmbuild
to build the binary RPMYou will invoke ./rpmbuild
multiple times until it compiles,
so prepare a ./Makefile
like the following:
PKG=coreutils DIST=.el8 binary: ./rpmbuild --target=i586 -v -bb \ -D 'dist $(DIST)' \ SPECS/$(PKG).spec 2>&1 | \ while IFS="" read line; do echo `date '+%Y-%m-%d %T'` "$$line"; done | \ tee log src: ./rpmbuild --target=i586 -v -bs \ -D 'dist $(DIST)' \ SPECS/$(PKG).specChange the emphasized part according to the package.
PKG=coreutils
to the package name you are compiling.
DIST=.el8
to the package suffix.
Some packages have .el8_1
, .el8_2
suffix.
For example zlib-1.2.11-16.el8_2.src.rpm
has .el8_2
.
rpmbuild
to build the binary RPMYou have made a Makefile, so invoke
user@i686$ make ./rpmbuild --target=i586 -v -bb \ -D 'dist .el8' \ SPECS/coreutils.spec 2>&1 | \ while IFS="" read line; do echo `date '+%Y-%m-%d %T'` "$line"; done| \ tee log 2020-11-03 07:17:53 error: Failed build dependencies: 2020-11-03 07:17:53 autoconf is needed by coreutils-8.30-7.el8.1.i586 2020-11-03 07:17:53 automake is needed by coreutils-8.30-7.el8.1.i586 2020-11-03 07:17:53 gettext-devel is needed by coreutils-8.30-7.el8.1.i586 2020-11-03 07:17:53 glibc-langpack-en is needed by coreutils-8.30-7.el8.1.i586 2020-11-03 07:17:53 gmp-devel is needed by coreutils-8.30-7.el8.1.i586 2020-11-03 07:17:53 hostname is needed by coreutils-8.30-7.el8.1.i586 2020-11-03 07:17:53 libacl-devel is needed by coreutils-8.30-7.el8.1.i586 2020-11-03 07:17:53 libattr-devel is needed by coreutils-8.30-7.el8.1.i586 2020-11-03 07:17:53 libcap-devel is needed by coreutils-8.30-7.el8.1.i586 2020-11-03 07:17:53 libselinux-devel is needed by coreutils-8.30-7.el8.1.i586 2020-11-03 07:17:53 libselinux-utils is needed by coreutils-8.30-7.el8.1.i586 2020-11-03 07:17:53 openssl-devel is needed by coreutils-8.30-7.el8.1.i586 2020-11-03 07:17:53 strace is needed by coreutils-8.30-7.el8.1.i586 2020-11-03 07:17:53 texinfo is needed by coreutils-8.30-7.el8.1.i586 2020-11-03 07:17:53 Building target platforms: i586 2020-11-03 07:17:53 Building for target i586Log will be logged in
./log
file.
You will normally have dependencies like above to resolve
for building packages.
Recursively build and install them, or install from this site:
i686# dnf --disablerepo=\* --enablerepo=ix86repo-\* install straceRepeat recursive build, install and make until binary RPMs are built.
Although the not hardest to compile for 32bit, kernel package has the most patches.
Patched to make grub2-pc-modules as .i586, not .noarch .
rpm
refuses so)
Patched for slower machine deployment.
Refer Source directory for other modified packages.
Note: QtWebEngine (Chromium) is about 20 time heavier than KHTML even after eliminating SSE2. Konqueror provided on this page is patched to use KHTML by default. (EPEL Konqueror defaults to QtWebEngine)
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: 3750123 nopl: 0 fcomi: 0 fucomi: 0 fcmov: 0 sse: 32682918 sse2: 1489899
On CentOS 8 (RHEL 8), for desktop environment, only GNOME 3 is provided, but on slow machines I strongly recommend KDE. GNOME3 had become too heavyweight for sub-GHz, single-thread processor. KDE 5 is provided via EPEL, but since it provides only x86_64 binaries, every KDE 5 components had to be recompiled for 32bit.
Collect .i686 packages listed in
centos-packages.txt
from your favorite
CentOS x86_64 repository or mirror.
For downloading,
dnf --downloadonly package
will
download it in the current directory, but timestamp is not preserved.
Recommend downloading by
wget
or curl -R -O
.
Note: console-setup.noarch package, is from CentOS 7. This ought to be obsoleted but needed to compile kbd and kbd-misc packages.
Some .i686 packages are not provided in the latest repository (i.e 8.4.2105/); try searching into older releases' directory.
Compile source packages listed in compile-packages.txt .
These packages needs to be compiled because either
Use Source RPMs in Source directory if available. If there wasn't, use Source RPMs from http://vault.centos.org/ .
Following packages may not have corresponding source RPM in vault.centos.org. You must directly check it out from git.centos.org.
babeltrace datefudge libabigail pam_wrapper
perl(-5.26) psutils python-cryptography-vectors
python-pretend rubygem-coderay rubygem-kramdown unicode-emoji
Example:
user@i686$ git clone https://git.centos.org/rpms/datefudge.git datefudge-c8 ## checks out into ./datefudge-c8/ directory
You may also need to git clone
the whole dependencies of
ghc (Glasgow Haskell Compiler),
which is dependency of pandoc, which is dependency of LLVM.
See List of nonstandard Makefiles.
For KDE 5 desktop, additional EPEL source packages must be compiled.
If you encountered an error similar to the following:
CMake Error: The source directory "/home/user/c8builds/kf5-kwindowsystem-epel-c8/BUILD/kwindowsystem-5.68.0/i586-redhat-linux-gnu" does not appear to contain CMakeLists.txt.Add
-D '__cmake_in_source_build 1'
to the
rpmbuild
arguments.
You need to collect the downloaded/compiled RPMs and
assemble them as a repository,
which lorax
(1) requires.
Prepare another directory for a repository:
user@i686$ cd user@i686$ mkdir ix86.repo user@i686$ cd ix86.repo user@i686$ mkdir -p BaseOS/Packages AppStream/Packages PowerTools/Packages epel/Packages
Then, collect the downloaded/compiled binary RPMs into the above directories. You don't have to strictly follow the location of the directory as published in CentOS/RHEL; if you are lazy, just cramming everything into BaseOS/Packages/ may work.
user@i686$ find ../c8builds/coreutils-c8/RPMS/ -name '*.rpm' | egrep -v -- '-debuginfo-|-debugsource-' | xargs ln -t BaseOS/PackagesYou would like to take advantage of "reponame" file made earlier for automatic sieving.
createrepo_c
First, browse in the CentOS x86_64 binary repository for comps.xml file. If your favorite mirror is located at http://ftp.iij.ad.jp/pub/linux/centos/8.4.2105/BaseOS/x86_64/os/ , the comps.xml file may be at http://ftp.iij.ad.jp/pub/linux/centos/8.4.2105/BaseOS/x86_64/os/repodata/bbe4d6c0eadd96f6a033794a25f89a2df43e5a02007f8fe748ef7634099bcbbc-comps-BaseOS.x86_64.xml . Copy it as ./comps-BaseOS.x86_64.xml (for later use).
Then, invoke createrepo_c
against the RPM collection directory:
user@i686$ mkdir -p ./BaseOS/repodata/ user@i686$ cp -p comps-BaseOS.x86_64.xml ./BaseOS/repodata/comps.xml user@i686$ createrepo_c -v --groupfile repodata/comps.xml ./BaseOSDo the same thing against ./AppStream/ , ./PowerTools/ and ./epel/ directory.
Since the compiled RPMs are not "modularized", there are no module info in the repository and anaconda installation will fail. Install a https://github.com/sgallagher/repo2module program.
user@i686$ cd user@i686$ git clone https://github.com/sgallagher/repo2module user@i686$ cd repo2module ## Follow the instructions in README.md user@i686$ python3 setup.py install --user ## This will install ~/.local/bin/repo2moduleAdd module information to the repository:
user@i686$ cd user@i686$ cd ix86.repo user@i686$ ~/.local/bin/repo2module --module-name=BaseOS --module-stream=stable ./BaseOS modules.yaml ## ./modules.yaml will be created. No need to edit for current purpose user@i686$ modifyrepo_c --mdtype=modules modules.yaml BaseOS/repodataDo the same thing against ./AppStream/ and ./PowerTools/ .
Use dnf --repofrompath
option to temporary make the
new repository recognized, and list the contents.
user@i686$ dnf --disablerepo=\* --repofrompath=testrepo-BaseOS,`pwd`/BaseOS clean all user@i686$ dnf --disablerepo=\* --repofrompath=testrepo-BaseOS,`pwd`/BaseOS list ... zlib.i586 1.2.11-13.el8 testrepo-BaseOS zlib-devel.i586 1.2.11-13.el8 testrepo-BaseOS zlib-static.i586 1.2.11-13.el8 testrepo-BaseOS
After you had made the repository,
it's the time to use lorax
(1) to assemble the
anaconda installer.
On the x86_64 work host, install lorax
package
from official repository or media.
base$ sudo dnf --disablerepo=\* --enablerepo=media\* install lorax
lorax
On the x86_64 work host, prepare a separate directory for boot image assembling. Begin with a pristine directory to store the boot.iso file:
base$ cd base$ mkdir c8lorax base$ cd c8lorax base$ rm -fr ./img8
Download add_template.tmpl file. You need this if the target machine is a slow machine.
Then, invoke the lorax
with some options.
Below assumes that assembled repository resides in
../ix86.repo/ .
base$ sudo lorax -p CentOS -v 8 -r 8 \ -s `pwd`/../ix86.repo/BaseOS \ -s `pwd`/../ix86.repo/AppStream \ -s `pwd`/../ix86.repo/PowerTools \ --add-template `pwd`/add_template.tmpl \ --buildarch=i686 --nomacboot \ `pwd`/img8This takes a long time! (about 40 minutes on 3GHz 2-thread machine) Logfiles are automatically created as ./lorax.log, ./pylorax.log, ./program.log .
lorax
use a loopback filesystem.
-s path
should be absolute path.
As a result, ./img8/ will be populated with installer boot files, notably ./img8/images/boot.iso .
Scratch directories, owned by root, may be lying around in
/var/tmp/lorax/
directory. You can safely delete them.
The created files are owned by root, so you would like to
base$ sudo chown -R $LOGNAME ./img8 base$ chmod -R +w ./img8
The generated
./img8/images/boot.iso
of about 692MB should boot as a network installer.
You would like to try it out on target machine
to see if the anaconda installer would work.
lorax
does not use the native files
of the work machine to build the installer;
it unpacks files from the *.rpm in the
-s path
directory.
Thus the work host doesn't have to be i686; working on x86_64 should be okay.
Copy (hardlink) over your repository contents to ./img8/ .
base$ sudo chown -R $LOGNAME ./img8 base$ rm -fr ./img8/Packages ./img8/SPackages ./img8/repodata base$ rm -fr ./img8/{BaseOS,AppStream,PowerTools,epel} base$ cp -rpl ../ix86.repo/{BaseOS,AppStream,PowerTools,epel} ./img8/
Optionally, if the target machine is slow, append the
kernel boot line with inst.xtimeout=600
(wait for 600 seconds for Xorg to start; default 60 secs)
base$ sed -i -e 's/ quiet$/ inst.xtimeout=600&/' ./img8/isolinux/isolinux.cfg
The ./img8/.treeinfo generated by lorax doesn't include BaseOS/, AppStream/ et al directives. You must recreate it. Download productmd-treeinfo.py file, and invoke as:
base$ cp -p ./img8/.treeinfo ./img8/.treeinfo.lorax base$ python3 ./productmd-treeinfo.py ./img8/.treeinfo.lorax > ./img8/.treeinfoYou need to install
python3-productmd
package beforehand.
Now you can respin the DVD media image.
base$ mkisofs -o ./DVD1.iso \ -b isolinux/isolinux.bin -c isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table \ -R -T -J \ -v \ -V "CentOS-8-i386" \ -m upgrade.img -m boot.iso \ ./img8 base$ implantisomd5 ./DVD1.iso
The volume label (-V "CentOS-8-i386"
) should match with kernel option in ./img8/isolinux/isolinux.cfg,inst.stage2=hd:LABEL=CentOS-8-i386
.
Excluding boot.iso (~700MB) is for lowering size of the final DVD1.iso .
This will create a DVD1.iso image around 4.55GB. Burn the DVD1.iso and try it out on your target machine.
rngd
, which seeds /dev/random
,
is now not installed by default in 8.4.
You must install rng-tools
package manually, or
install haveged
(EPEL),
to seed /dev/random
faster.
You will need this when using a crypto filesystem or SSL.
Upgraded systems will continue to have rngd
.
Only new installs will be affected.
Despite above, the installer environment (anaconda created by lorax)
still has rngd
enabled.
In RHEL 8.4 kernel code, kernel internal
struct __kernel_timespec
was separated from
struct timespec
.
These were just an alias up to 8.3.
This change does not affect 64bit kernel/userland,
but in 32bit kernel,
any system calls using struct timespec
(such as clock_gettime
(2), ppoll
(2), pselect
(2))
will fail miserably with a kernel panic, or
*** stack smashing detected ***: <unknown> terminated
,
since system calls expect struct __kernel_timespec
to be passed, which became 64bit.
So, the 32bit kernel provided on this page reverts to 8.3 behavior,
making these structs an alias and be 32bit.
I guess 32 bit struct timespec
will serve in RHEL 8.x
support timespan.
Symptom: %check during build of cmake
fails:
The following tests FAILED: 249 - CTestTestStopTime (Failed) 251 - CTestTestTimeout (Failed) 252 - CTestTestRerunFailed (Failed) 342 - RunCMake.Make (Failed) 377 - RunCMake.GoogleTest (Failed) 424 - RunCMake.ctest_test (Failed) 468 - RunCMake.CTestTimeout (Failed) 469 - RunCMake.CTestTimeoutAfterMatch (Failed) 501 - RunCMake.CTestCommandLine (Failed) Errors while running CTest
Cause: The installed libuv
package is too old.
libuv-1.23.1-1
suffers.
Older libuv
had bugs regarding usage of
epoll_wait
(2), used in timeout tests.
Resolution: Install later libuv
package
(libuv-1.41.1-1.el8_4
), then retry rpmbuild.
Symptom: %check fails during build of curl
:
1148: output (log/stderrlog1148) FAILED: --- log/check-expected 2021-08-17 14:24:40.713936980 +0900 +++ log/check-generated 2021-08-17 14:24:40.713936980 +0900 @@ -1 +1 @@ -[CR]bar 100.0%[LF] +#=#=# [CR][CR]bar 100.0%[LF]
Cause: Test 1148 was not tolerant enough to accomodate intermediate progress bar appearing on slow build environment.
Resolution: Port the commit of upstream show below:
Symptom: During building gtk-doc package, %check fails. tests/test-suite.log says:
... expected no more than 1 log line in /home/kabe/c8builds/gtk-doc-c8/BUILD/gtk-doc-1.28/tests/gobject/docs/gtkdoc-mkpdf.log, but got 3 71 %: Checks 7, Failures: 2 FAIL sanity.sh (exit status: 1)tests/gobject/docs/gtkdoc-mkpdf.log says:
gtkdoc-mkpdf --uninstalled --path=/home/kabe/c8builds/gtk-doc-c8/BUILD/gtk-doc-1.28/tests/gobject/docs --imgdir=./images tester tester-docs.xml --path=/home/kabe/c8builds/gtk-doc-c8/BUILD/gtk-doc-1.28/tests/gobject/examples Unexpected error occured Error: sequence item 0: expected str instance, bytes found
Cause: 'bug' in dblatex, invoked by gtkdoc-mkpdf. The error is a familiar message for python3 users when mixing (unicode) string and (binary) bytes type.
Workaround: Patch the installed dblatex .py files.
Symptom: Intermediate %install stops during build of postfix
:
SHLIB_ENV_VAR= SHLIB_ENV_VAL= LD_LIBRARY_PATH=/home/kabe/c8builds/postfix-c8/BUILD/postfix-3.5.8/lib shlib_directory=${shlib_directory:-`LD_LIBRARY_PATH=/home/kabe/c8builds/postfix-c8/BUILD/postfix-3.5.8/lib bin/postconf -dhx shlib_directory`} /bin/sh postfix-install -non-interactive -package -keep-build-mtime bin/postconf: symbol lookup error: bin/postconf: undefined symbol: printable_except postfix-install: Error: "" should be "no" or an absolute path name. make[1]: *** [Makefile:199: non-interactive-package] Error 1
Cause The generated binaries has RPATH /usr/lib/postfix/
embedded, causing LD_LIBRARY_PATH
to be completely ignored,
and tries to read already-installed, stale /usr/lib/postfix/*.so .
The postfix
package itself remedies this by adding
--enable-new-dtags
compile option on configure, but
RHEL SPECS/postfix.spec has SHLIB_RPATH
explicitly defined without.
Resolution: Fix SPECS/postfix.spec to include
SHLIB_RPATH="-Wl,--enable-new-dtags ..."
.
This does not manifest in mock
environment, since
it does not have /usr/lib/postfix/ inside the build environment.
See ld.so(8) for information about RPATH, RUNPATH and LD_LIBRARY_PATH. Use objdump -p binary to see content of RPATH or RUNPATH of the binary.
Symptom: When booting the installer, kernel panics with:
[ 27.665083] List of all partitions: [ 27.706705] No filesystem could mount root, tried: [ 27.706707] [ 27.782675] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) [ 27.870028] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.18.0-305.10.2.el8_4.centos.plus.v9.i586 #1 [ 27.970027] Hardware name: FUJITSU FMVC10C131/FM111AA, BIOS V1.04 09/16/2003 [ 28.070026] Call Trace: [ 28.090028] dump_stack+0x58/0x7e [ 28.130027] panic+0x94/0x23f [ 28.170028] mount_block_root+0x24e/0x267 [ 28.210028] mount_root+0x97/0x9c [ 28.250026] prepare_namespace+0x11b/0x14b [ 28.310026] kernel_init_freeable+0x1d0/0x1dd [ 28.350028] ? rest_init+0x8a/0x8a [ 28.390026] kernel_init+0xd/0xda [ 28.440036] ret_from_fork+0x2e/0x40 [ 28.450012] Kernel Offset: disabled [ 28.450012] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]---
Possible cause: Try booting via serial console
(kernel parameter: console=ttyS0,9600 inst.graphical
)
, and
find earlier errors.
If you found the following:
[ 6.492624] Unpacking initramfs... [ 14.139809] Initramfs unpacking failed: write error [ 14.297618] Freeing initrd memory: 69156Kyou need more physical memory.
Discussion: initrd of the installer image is big; it expands to almost 220MB. 384MB memory (128MBx3) is not enough. You want at least 640MB (256MBx2+128MB) to invoke the installer. Most "Super 7"motherboards with PC100 DIMM slots could go up to 768MB (256MBx3); some could go up to 1.5GB (512MBx3).
Recommended minimim RAM is 1GB. (RHEL official info for x86_64 says 1.5GB)
Previous RHEL 6 anaconda
installer had logic to check memory and
refused to install under 640MB systems, but
RHEL 8 anaconda
installer implements impractical limits of
320MB text, 410MB GUI, which is way too low for even booting the installer.
Also after install, it tends to invoke OOM killer frequently on 384MB; you would like to keep 512MB as bare minimum.
To simulate small memory system, add mem=640M
to kernel option.
Symptom: (only last 25 lines will be visible on VGA console; the list below is collected from serial console)
Starting iSCSI UserSpace I/O driver... [ 9.912121] dracut-cmdline[242]: //lib/dracut/hooks/cmdline/25-parse-anaconda-options.sh: line 21: echo: write error: No space left on device[FAILED] Failed to start iSCSI UserSpace I/O driver. See 'systemctl status iscsiuio.service' for details. [ 9.948517] dracut-cmdline[242]: //lib/dracut/hooks/cmdline/25-parse-anaconda-options.sh: line 21: echo: write error: No space left on device [ 9.965607] dracut-cmdline[242]: //lib/dracut/hooks/cmdline/25-parse-anaconda-options.sh: line 21: echo: write error: No space left on device [ 9.979705] dracut-cmdline[242]: //lib/dracut/hooks/cmdline/25-parse-anaconda-options.sh: line 21: echo: write error: No space left on device [ 10.073960] dracut-cmdline[242]: /lib/dracut-lib.sh: line 978: printf: write error: No space left on device [ 10.083264] dracut-cmdline[242]: /lib/dracut-lib.sh: line 981: printf: write error: No space left on device [ 10.093371] dracut-cmdline[242]: /lib/dracut-lib.sh: line 982: printf: write error: No space left on device [ 10.113705] dracut-cmdline[242]: /lib/dracut-lib.sh: line 944: echo: write error: No space left on device [ 10.123044] dracut-cmdline[242]: /lib/dracut-lib.sh: line 945: echo: write error: No space left on device [ 10.132484] dracut-cmdline[242]: /lib/dracut-lib.sh: line 946: echo: write error: No space left on device [ 10.142119] dracut-cmdline[242]: /lib/dracut-lib.sh: line 953: /sbin/initqueue: No such file or directory [ 10.163881] dracut-cmdline[242]: //lib/dracut/hooks/cmdline/28-parse-anaconda-net.sh: line 68: echo: write error: No space left on device [ 10.204876] dracut-cmdline[242]: //lib/dracut/hooks/cmdline/30-parse-crypt.sh: line 34: echo: write error: No space left on device [ 10.216631] dracut-cmdline[242]: //lib/dracut/hooks/cmdline/30-parse-crypt.sh: line 35: echo: write error: No space left on device [ 10.241670] dracut-cmdline[242]: //lib/dracut/hooks/cmdline/30-parse-crypt.sh: line 172: echo: write error: No space left on device [ OK ] Stopped iSCSI UserSpace I/O driver. Starting iSCSI UserSpace I/O driver... [ OK ] Stopped Entropy Daemon based on the HAVEGE algorithm. [ OK ] Started Entropy Daemon based on the HAVEGE algorithm. [FAILED] Failed to start iSCSI UserSpace I/O driver. See 'systemctl status iscsiuio.service' for details. [ 10.364706] dracut-cmdline[242]: //lib/dracut/hooks/cmdline/90-parse-iscsiroot.sh: line 95: modprobe: command not found[ 10.375167] dracut: FATAL: iscsiroot requested but kernel/initrd does not support iscsi [ 10.383789] dracut: Refusing to continue [ 10.388025] dracut-cmdline[242]: /lib/dracut-lib.sh: line 465: echo: write error: No space left on device [ 10.396831] dracut-cmdline[242]: /lib/dracut-lib.sh: line 466: echo: write error: No space left on device [ OK ] Stopped iSCSI UserSpace I/O driver. Starting iSCSI UserSpace I/O driver... [ 10.470710] printk: systemd-shutdow: 32 output lines suppressed due to ratelimiting [ 10.485505] systemd-shutdown[1]: Syncing filesystems and block devices. [ 10.492578] systemd-shutdown[1]: Sending SIGTERM to remaining processes... [ 10.501769] systemd-shutdown[1]: Sending SIGKILL to remaining processes... [ 10.510457] systemd-shutdown[1]: Unmounting file systems. [ 10.516670] [518]: Unmounting '/etc/machine-id'. [ 10.521939] [519]: Remounting '/' read-only in with options 'size=214252k,nr_inodes=53563'. [ 10.530814] systemd-shutdown[1]: All filesystems unmounted. [ 10.536367] systemd-shutdown[1]: Deactivating swaps. [ 10.542065] systemd-shutdown[1]: All swaps deactivated. [ 10.547050] systemd-shutdown[1]: Detaching loop devices. [ 10.552277] systemd-shutdown[1]: All loop devices detached. [ 10.557572] systemd-shutdown[1]: Detaching DM devices. [ 12.640513] psmouse serio1: trackpoint: IBM TrackPoint firmware: 0x01, buttons: 3/3 [ 12.668504] input: TPPS/2 IBM TrackPoint as /devices/platform/i8042/serio1/input/input3 [ 12.685037] reboot: System halted
Cause: More physical memory is required. The "No space left on device" refers to the ramdisk, not an HDD, used during initrd run.
Symptom: During anaconda startup, anaconda bails out:
08:46:07,998 CRT exception: Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/pyanaconda/ui/gui/__init__.py", line 988, in _on_continue_clicked nextAction = self._instantiateAction(self._actions[1]) File "/usr/lib/python3.6/site-packages/pyanaconda/ui/gui/__init__.py", line 773, in _instantiateAction obj = actionClass(self.data, self.storage, self.payload, self.instclass) File "/usr/lib/python3.6/site-packages/pyanaconda/ui/gui/spokes/network.py", line 1692, in __init__ self.network_control_box.current_hostname = self._network_module.proxy.GetCurrentHostname() File "/usr/lib/python3.6/site-packages/pydbus/proxy_method.py", line 102, in __call__ raise error pyanaconda.modules.common.errors.DBusError: g-dbus-error-quark: GDBus.Error:org.freedesktop.DBus.Error.TimedOut: Failed to activate service 'org.freedesktop.hostname1': timed out (service_start_timeout=25000ms) (20)
Cause: DBus timeout is by default 25 seconds in bus/config-parser.c:
parser->limits.activation_timeout = 25000; /* 25 seconds */which could be too short on slow machine.
Workaround: The timeout could be adjusted by adding /etc/dbus-1/system-local.conf XML file, which is included from /usr/share/dbus-1/system.conf .
Add /etc/dbus-1/system-local.conf
:
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> <!-- dbus: enlengthen default hardcoded <limit name="service_start_timeout">25000</limit> (dbus package, bus/config-parser.c:parser->limits.activation_timeout = 25000; /* 25 seconds */) to longer value, using system drop-in included from /usr/share/dbus-1/system.conf --> <busconfig> <limit name="service_start_timeout">240045</limit> </busconfig>Doing this is already added in add_template.tmpl .
800x600 resulution is tough to install RHEL 8.
Try passing vga=ask inst.xdriver=fbdev option to kernel command line on DVD boot. If selecting ex. 1024x768x16 will make the text console in that resolution, Xorg will pick that up.
inst.xdriver
and inst.usefbx
(equivalent of inst.xdriver=fbdev
) is mentioned in
docs/boot-options.rst of anaconda source code.
Unfortunaly the document is not installed anywhere.
Pass in inst.xdriver=vesa
for installer kernel option.
It seems that VESA driver prefers more colors than resolution. 800x600 is tough for RHEL 8 installation if autoselected. Try fbdev driver mentioned above if possible.
Symptom: During install, anaconda bails out:
09:04:05,946 INF threading: Thread Failed: AnaInstallThread (-1313998016) 09:04:05,946 DBG exception: running handleException 09:04:05,954 CRT exception: Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/pyanaconda/threading.py", line 286, in run threading.Thread.run(self) File "/usr/lib/python3.6/threading.py", line 864, in run self._target(*self._args, **self._kwargs) File "/usr/lib/python3.6/site-packages/pyanaconda/installation.py", line 388, in doInstall installation_queue.start() File "/usr/lib/python3.6/site-packages/pyanaconda/installation_tasks.py", line 304, in start item.start() File "/usr/lib/python3.6/site-packages/pyanaconda/installation_tasks.py", line 304, in start item.start() File "/usr/lib/python3.6/site-packages/pyanaconda/installation_tasks.py", line 472, in start self.run_task() File "/usr/lib/python3.6/site-packages/pyanaconda/installation_tasks.py", line 438, in run_task self._task(*self._task_args, **self._task_kwargs) File "/usr/lib/python3.6/site-packages/pyanaconda/payload/dnfpayload.py", line 1089, in install raise payload.PayloadError(msg) pyanaconda.payload.PayloadError: Payload error - DNF installation has ended up abruptly: No available modular metadata for modular packageTraceback (most recent call last): File "/usr/lib/python3.6/site-packages/pyanaconda/payload/dnfpayload.py", line 283, in do_transaction base.do_transaction(display=display) File "/usr/lib/python3.6/site-packages/dnf/base.py", line 834, in do_transaction self.transaction._populate_rpm_ts(self._ts) File "/usr/lib/python3.6/site-packages/dnf/db/group.py", line 334, in _populate_rpm_ts raise dnf.exceptions.Error(_("No available modular metadata for modular package")) dnf.exceptions.Error: No available modular metadata for modular package
Resolution: Create fake modular metadata on the repository.
Symptom: tmux server seems to use all CPU power available (30% ~ 50%) during the anaconda install.
Cause: The following /usr/share/anaconda/tmux.conf line during anaconda setup, read by tmux, repeatedly invokes /bin/sh and eats up CPU. (included as data/tmux.conf in anaconda source code)
set-option status-right '#[fg=blue]#(echo -n "Switch tab: Alt+Tab | Help: F1 ")'
Resolution: Since this is a static string, there's no need to invoke a shell via #(); just replacing it to
set-option status-right '#[fg=blue]Switch tab: Alt+Tab | Help: F1 'will make tmux CPU usage sane. The anaconda source and binary package provided by this site already has this patch applied.
Symptom: On old machine without a TPM chip,
rngd
eats up CPU to nearly 100% for several minutes on boot.
Workaround: Use haveged
package provided from EPEL.
It is much lighter on CPU on slow machines.
# dnf --disablerepo=\* --enablerepo=ix86repo\* install haveged # systemctl disable rngd # systemctl enable haveged
This still launches rngd
in initrd,
so boot could still be slow.
To get rid of it (and you aren't using crypto filesystems),
uninstall rng-tools
package and re-dracut
:
# rpm -ev rng-tools # dracut -vv -f
To replace rngd with haveged in anaconda installer,
place the haveged.i586.rpm in PowerTools/Packages/ of the repository,
then invoke lorax
with --installpkgs=haveged
.
add_template.tmpl already have quirks to
replace rngd with haveged for anaconda.
Symptom: On slow machine, some systemd service fail to boot due to timeout.
Resolution: Enlenghten TimeoutStartSec settings using drop-in settings on such services. add_template.html includes such quirks for installer. You may have to implement the quirks below manually after install.
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> <!-- dbus: enlengthen default hardcoded <limit name="service_start_timeout">25000</limit> (dbus package, bus/config-parser.c:parser->limits.activation_timeout = 25000; /* 25 seconds */) to longer value, using system drop-in included from /usr/share/dbus-1/system.conf --> <busconfig> <limit name="service_start_timeout">240045</limit> </busconfig>
[Service] TimeoutStartSec=5min
[Service] TimeoutStartSec=5min
[Service] TimeoutStartSec=5minAdditionally, edit
/usr/lib/systemd/system/NetworkManager-wait-online.service
to use --timeout=300
instead of --timeout=30
.
[Service] TimeoutStartSec=5min
[Service] TimeoutStartSec=5min
[Service] RestartSec=2s TimeoutStartSec=5min
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: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp2s1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000 link/ether 00:11:25:44:08:c3 brd ff:ff:ff:ff:ff:ff 3: wlp2s2: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000 link/ether 00:0e:9b:99:bb:19 brd ff:ff:ff:ff:ff:ffbut 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 says
<info> [1604490696.4915] manager: (wlp2s2): 'wifi' plugin not available; creating generic device <info> [1604490696.4927] manager: (wlp2s2): new Generic device (/org/freedesktop/NetworkManager/Devices/3)
Cause: NetworkManager-wifi
plugin is not installed.
It is not installed by "minimum install".
Resolution: Install NetworkManager-wifi
package.
After install, NetworkManager -d
output should be
... <info> [1604490850.9231] Loaded device plugin: NMWifiFactory (/usr/lib/NetworkManager/1.22.8-5.el8_2/libnm-device-plugin-wifi.so) ... <info> [1604490850.9926] device (wlp2s2): driver supports Access Point (AP) mode <info> [1604490850.9938] manager: (wlp2s2): new 802.11 Wi-Fi device (/org/freedesktop/NetworkManager/Devices/3) <info> [1604490850.9964] device (wlp2s2): state change: unmanaged -> unavailable (reason 'managed', sys-iface-state: 'external') <info> [1604490851.1861] device (wlp2s2): set-hw-addr: set MAC address to D2:BF:13:B9:78:4F (scanning) <info> [1604490851.2284] supplicant: wpa_supplicant running <info> [1604490851.2286] device (wlp2s2): supplicant interface state: init -> starting
Symptom: Using old VGA device such as S3 Trio64 (2MB memory).
After install, fbcon
driver is enabled and
full screen resolution is available, but xinit does not work.
/var/log/Xorg.0.log
says:
[ 188.728] (II) FBDEV(0): Console is 8bpp, defaulting to 32bpp [ 188.728] (II) FBDEV(0): Creating default Display subsection in Screen section "Default Screen Section" for depth/fbbpp 24/32 [ 188.728] (==) FBDEV(0): Depth 24, (==) framebuffer bpp 32 [ 188.728] (==) FBDEV(0): RGB weight 888 [ 188.728] (==) FBDEV(0): Default visual is TrueColor [ 188.728] (==) FBDEV(0): Using gamma correction (1.0, 1.0, 1.0) [ 188.728] (II) FBDEV(0): hardware: S3 Trio64V2/DX (video memory: 2048kB) [ 188.728] (II) FBDEV(0): checking modes against framebuffer device... [ 188.728] (II) FBDEV(0): checking modes against monitor... [ 188.728] (II) FBDEV(0): Virtual size is 1360x768 (pitch 1360) [ 188.728] (**) FBDEV(0): Built-in mode "current": 85.5 MHz, 47.7 kHz, 60.0 Hz [ 188.728] (II) FBDEV(0): Modeline "current"x0.0 85.51 1360 1424 1536 1792 768 771 777 795 +hsync +vsync -csync (47.7 kHz b) [ 188.729] (==) FBDEV(0): DPI set to (96, 96) [ 188.729] (II) Loading sub module "fb" [ 188.729] (II) LoadModule: "fb" [ 188.729] (II) Loading /usr/lib/xorg/modules/libfb.so [ 188.729] (II) Module fb: vendor="X.Org Foundation" [ 188.729] compiled for 1.20.10, module version = 1.0.0 [ 188.729] ABI class: X.Org ANSI C Emulation, version 0.4 [ 188.729] (**) FBDEV(0): using shadow framebuffer [ 188.729] (II) Loading sub module "shadow" [ 188.729] (II) LoadModule: "shadow" [ 188.730] (II) Loading /usr/lib/xorg/modules/libshadow.so [ 188.730] (II) Module shadow: vendor="X.Org Foundation" [ 188.730] compiled for 1.20.10, module version = 1.1.0 [ 188.730] ABI class: X.Org ANSI C Emulation, version 0.4 [ 188.730] (EE) FBDEV(0): FBIOPUT_VSCREENINFO: Invalid argument [ 188.730] (EE) FBDEV(0): mode initialization failed [ 188.730] (EE) Fatal server error: [ 188.730] (EE) AddScreen/ScreenInit failed for driver 0
Cause: xorg-x11-drv-fbdev
driver assumes 32bit depth
when no depth is specified. The VGA card may not have enough video memory
to do it.
Workaround: First, try explicit -depth by
$ xinit -- /usr/bin/Xorg :0 -depth 16If that results in working X, add a config file under /etc/X11/xorg.conf.d:
# /etc/X11/xorg.conf.d/50-depth.conf Section "Screen" Identifier "Screen0" DefaultDepth 16 Endsection
See xorg.conf(5) about *.conf.
Caveats: KDE 5 assumes 24bit FullColor, so this setting will not get a proper operating Plasma 5 desktop. You need a video card with more memory.
Symptom: Started KDE by startx
on a slow machine.
Since it's slow, it invokes the default screenlocker during startup,
and the machine is slow enough to be
screenlocker reinvoked after disarming the screenlocker.
I can't access the desktop.
systemsettings5
can't be invoked to change the setting.
Workaround: Manually disable the spash screen and screenlocker by creating following files:
; ~/.config/ksplashrc [KSplash] Engine=none Theme=None
; ~/.config/kscreenlockerrc [Daemon] Autolock=false
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)
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 ...
Symptom: ZyDAS zd1211 based USB wifi adapter (such as Buffalo WLI-UC-AG) is not recognized. On insertion, /var/log/messages or journalctl -xe says:
Nov 06 21:10:17 scorpio kernel: usb 1-4: Direct firmware load for zd1211/zd1211b_ub failed with error -2 Nov 06 21:10:17 scorpio kernel: usb 1-4: Could not load firmware file zd1211/zd1211b_ub. Error number -2 Nov 06 21:10:17 scorpio kernel: zd1211rw 1-4:1.0: couldn't load firmware. Error number -2 Nov 06 21:10:17 scorpio NetworkManager[675]: <info> [1604664617.4144] device (wlp0s29f7u4): state change: unmanaged -> unavailable (reason 'managed', sys-iface-state: 'external') Nov 06 21:10:17 scorpio NetworkManager[675]: <warn> [1604664617.4266] device (wlp0s29f7u4): firmware may be missing. Nov 06 21:10:17 scorpio NetworkManager[675]: <info> [1604664617.4274] device (wlp0s29f7u4): set-hw-addr: set MAC address to 0E:E1:3E:98:C5:2F (scanning)
Resolution: Install zd1211-firmware package. The one supplied with CentOS 6 will work nicely.
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 BaseOS/Packages/, createrepo_c, and
pass --installpkgs=zd1211-firmware
to lorax
.
Symptom: On insertion of Broadcom BCM43xx based (Cardbus) WiFi adapter, journalctl or /var/log/messages says
Nov 07 10:48:47 scorpio kernel: pcmcia_socket pcmcia_socket0: pccard: CardBus card inserted into slot 0 Nov 07 10:48:47 scorpio kernel: pci 0000:03:00.0: [14e4:4320] type 00 class 0x028000 Nov 07 10:48:47 scorpio kernel: pci 0000:03:00.0: reg 0x10: [mem 0x00000000-0x00001fff] Nov 07 10:48:47 scorpio kernel: pci 0000:03:00.0: BAR 0: assigned [mem 0xd4000000-0xd4001fff] Nov 07 10:48:47 scorpio kernel: pci 0000:03:00.0: cache line size of 32 is not supported Nov 07 10:48:48 scorpio kernel: b43-pci-bridge 0000:03:00.0: enabling device (0000 -> 0002) Nov 07 10:48:48 scorpio kernel: ssb: Found chip with id 0x4306, rev 0x03 and package 0x00 Nov 07 10:48:48 scorpio kernel: ssb: Core 0 found: ChipCommon (cc 0x800, rev 0x04, vendor 0x4243) Nov 07 10:48:48 scorpio kernel: ssb: Core 1 found: IEEE 802.11 (cc 0x812, rev 0x05, vendor 0x4243) Nov 07 10:48:48 scorpio kernel: ssb: Core 2 found: PCMCIA (cc 0x80D, rev 0x02, vendor 0x4243) Nov 07 10:48:48 scorpio kernel: ssb: Core 3 found: V90 (cc 0x807, rev 0x02, vendor 0x4243) Nov 07 10:48:48 scorpio kernel: ssb: Core 4 found: PCI (cc 0x804, rev 0x09, vendor 0x4243) Nov 07 10:48:48 scorpio kernel: ssb: Sonics Silicon Backplane found on PCI device 0000:03:00.0 Nov 07 10:48:48 scorpio kernel: b43-phy1: Broadcom 4306 WLAN found (core revision 5) Nov 07 10:48:48 scorpio kernel: b43-phy1: Found PHY: Analog 2, Type 2 (G), Revision 2 Nov 07 10:48:48 scorpio kernel: b43-phy1: Found Radio: Manuf 0x17F, ID 0x2050, Revision 2, Version 0 Nov 07 10:48:48 scorpio kernel: Broadcom 43xx driver loaded [ Features: PNLS ] Nov 07 10:48:48 scorpio kernel: b43 ssb0:0: Direct firmware load for b43/ucode5.fw failed with error -2 Nov 07 10:48:48 scorpio kernel: b43 ssb0:0: Direct firmware load for b43/ucode5.fw failed with error -2 Nov 07 10:48:48 scorpio kernel: b43 ssb0:0: Direct firmware load for b43-open/ucode5.fw failed with error -2 Nov 07 10:48:48 scorpio kernel: b43 ssb0:0: Direct firmware load for b43-open/ucode5.fw failed with error -2 Nov 07 10:48:48 scorpio kernel: b43-phy1 ERROR: Firmware file "b43/ucode5.fw" not found Nov 07 10:48:48 scorpio kernel: b43-phy1 ERROR: Firmware file "b43-open/ucode5.fw" not found Nov 07 10:48:48 scorpio 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.
The URL mentioned in the kernel message is old. Currently it is https://wireless.wiki.kernel.org/en/users/drivers/b43 , although it doesn't have much information now.
To make the driver work in installation/rescue disc, you must add
b43-openfwwf-5.2-10.el6.noarch.rpm
in BaseOS/Packages/, createrepo_c, and
pass --installpkgs=b43-openfwwf
to lorax
.
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.
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
You may have to boot into single user mode to make this change, since multi-user mode keeps CPU load > 5 for several minutes.
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 /sbin/restorecon -v /etc/shadow
to reset the SELinux context.
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_baseIf 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=64See Documentation/fb/matroxfb.txt (provided by kernel-doc package) for options.
Note: VESA graphics console (vga=...) is very slow on older CPU, occasionaly causing "tsc unstable" log. Using matroxfb is recommended.
Symptom: Using Matrox G200 graphics card and widescreen monitor. Full 1360x768 resolution was available in CentOS 6 X11 desktop, but only 1024x768 is provided in CentOS 8, which seems to use VESA driver.
Cause: Xorg server of RHEL8 is patched to not find legacy xorg-x11-drv-* drivers which isn't shipped with RHEL8. 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 desktop Matrox graphics cards.
To enable full resolution in anaconda installer,
add --installpkgs=xorg-x11-drv-mga
argument to
lorax
.
Symptom: Using a S3 video card (such as S3 Virge).
Text console resolution is reset to 80x30 regardess of
vga=... nomodeset
kernel option.
Cause: s3fb
module is read in by
udev, which does not honor kernel options such as video=, vga=, nomodeset.
Workaround:
Prepare /etc/modprobe.d/s3fb.conf
, or
append to /etc/modprobe.d/blacklist.conf
the following to prevent s3fb
from loading:
## /etc/modprobe.d/s3fb.conf # disable loading s3fb by udev. # udev scans /sys/**/modalias and loads driver by modprobe -b; # "video=s3fb:disabled" isn't honored by udev blacklist s3fb
If you want to explicitly set the resolution, you may say
#blacklist s3fb options s3fb mode_options=1024x768-16@60
s3fb.ko
module will pick up DDC info from the monitor and sets
widescreen resolution if DDC pin on the output is wired.
If you see the following in the system log
(perhaps after manual invocation of modprobe s3fb)
i2c i2c-0: unable to read EDID block. i2c i2c-0: unable to read EDID block. i2c i2c-0: unable to read EDID block.the card is not capable of reading DDC info from the monitor.
Since s3fb.ko
framebuffer could be very slow,
especially when backscrolling,
you may want to blacklist s3fb
,
and use xorg-x11-drv-s3
or xorg-x11-drv-s3virge
for X11.
Symptom: Using S3 Virge video card (4MB memory). Widescreen is not enabled in X by xinit. Also the resolution is ugly like 960x540.
Cause Assuming you had installed xorg-x11-drv-s3virge
driver, the driver couldn't read DDC info from monitor, and
used whatever resolution it liked.
Workaround: Try adding then following as /etc/X11/xorg.conf.d/60-1360x.conf , and restart xinit :
# /etc/X11/xorg.conf.d/60-1360x.conf Section "Monitor" Identifier "Monitor0" Option "MaxPixClock" "70000" Option "ReducedBlanking" "yes" ## need HorizSync or VertRefresh to make MaxPixClock effective VertRefresh 60 #Matrox timing ModeLine "mx1360x768" 85.50 1360 1424 1536 1792 768 771 777 795 +hsync +vsync EndSection Section "Screen" Identifier "Screen0" Monitor "Monitor0" DefaultDepth 16 SubSection "Display" Modes "mx1360x768" EndSubSection EndSection
Caveats: KDE 5 assumes 24bit FullColor, so this setting will not get a proper operating Plasma 5 desktop. You need a video card with more memory.
Symptom: Using NVIDIA Geforce2 (NV11) video card.
Kernel nouveau.ko
driver automatically loads on boot
and provides full graphic console, but not stable;
just doing man nouveau makes the screen hang and
/var/log/messages
is filled with
kernel: nouveau 0000:01:00.0: fifo: DMA_PUSHER - ch 0 [DRM] get 0000f6b4 put 00008638 state 401c0008 (err: INVALID_MTHD) push 00000000 cygnus systemd-journald[689]: Missed 1 kernel messages kernel: nouveau 0000:01:00.0: fifo: DMA_PUSHER - ch 0 [DRM] get 00001578 put 0000a410 state 401c0008 (err: INVALID_MTHD) push 00000000 systemd-journald[689]: Missed 2 kernel messages kernel: nouveau 0000:01:00.0: fifo: DMA_PUSHER - ch 0 [DRM] get 000032dc put 0000c9c4 state 40180004 (err: INVALID_MTHD) push 00000010 systemd-journald[689]: Missed 1 kernel messages kernel: nouveau 0000:01:00.0: fifo: DMA_PUSHER - ch 0 [DRM] get 0000c9ec put 00006178 state 400c0004 (err: INVALID_MTHD) push 00000000
Workaround: Disable nouveau.ko
kernel driver.
You would add a following new file /etc/modprobe.d/nouveau.conf
:
blacklist nouveau ## this is needed to make "fbdev" based Xorg work #options nouveau fbcon_bpp=32
For X11, on older NVIDIA cards,
you would have more chance having a stable system by
using legacy xorg-x11-drv-nv
driver, instead of
DRI dependent xorg-x11-drv-nouveau
.
Install xorg-x11-drv-nv
package.
Then, uninstall xorg-x11-drv-nouveau
,
or drop in an xorg.conf file
as /etc/X11/xorg.conf.d/30-use-nv.conf
:
# # force use of nv_drv.so instead of nouveau_drv.so # Section "Device" Identifier "nv-device" Driver "nv" EndSection
You MUST blacklist nouveau.ko kernel driver when using legacy X11 nv_drv.so driver, since nv_drv.so cannot reclaim the framebuffer device claimed by nouveau.ko .
Symptom: Using a raw VGA conole. Blue color is too dark to read; ls -l shows directories in blue which is too dark.
Workaround: Set the color palette to brighter blue (as in other KMS consoles):
$ printf '\033]P44444FF\033]PC4444FF'
These console codes were explained in console_codes
(4)
manual page up till RHEL 7,
but RHEL 8 seems to not have this manual.
If you want this automatically on boot, append the
following lines to /etc/rc.d/rc.local
(it isn't worth having a dedicated systemd unit):
## make blue color lighter to read printf '\033]P44444FF\033]PC4444FF' > /dev/tty0Do not forget to chmod +x /etc/rc.d/rc.local , as mentioned at the head of the file.
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.
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.
Symptom: On boot, kernel panics at early stage:
... [ 7.030357] md: ... autorun DONE. [ 7.035143] List of all partitions: [ 7.038643] No filesystem could mount root, tried: [ 7.038645] [ 7.045754] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) [ 7.054114] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.18.0-193.6.3.el8_2.centos.plus.v3.i586 #1 [ 7.054114] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS 090008 12/07/2018 [ 7.054114] Call Trace: [ 7.054114] dump_stack+0x58/0x7e [ 7.054114] panic+0x94/0x230 [ 7.054114] mount_block_root+0x242/0x25b [ 7.054114] mount_root+0x76/0x7b ...
Cause:
The grub menu is lacking
initrd ($root)/initramfs-4.18.0-193.6.3.el8_2.centos.plus.v3.i586.img
line.
You are very likely have interrupted the kernel installation by Ctrl+C,
which leaves /boot/grub2/grub.cfg
in transient state, missing initrd line.
Resolution: The easiest way is to reinstall the kernel-core package, after booting in previous kernel:
# dnf reinstall ./kernel-core-4.18.0-193.6.3.el8_2.centos.plus.v3.i586.rpm
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 = noThis 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.
Symptom: On a slow machine, grub just sits there during vmlinuz and initrd load. Isn't there a progress meter like grub-legacy had?
Resolution: Add below somewhere in /boot/grub2/grub.cfg . It shows percentage text of things loading in 1.5 seconds interval.
insmod progress
Resolution: Install
pcmciautils,
and issue pccardctl eject 0
.
Symptom: When Konqueror is launched from App Launcher (Start Menu) -> Favorites, it always shows an error screen as below. No problem when invoking konqueror from a terminal, KRunner (Alt+F2) or App Launcher -> Applications -> Internet -> Konqueror .
The requested operation could not be completed
Undocumented Error
Details of the Request:
- URL: (blank)
- ...
Description:
Unknown error code -1,229.371,680 Please send a full bug report at https://bugs.kde.org.
Cause: An entry in Favorites invokes kfmclient openURL "" text/html
via /usr/share/applications/kfmclient.desktop ,
but Konqueror doesn't like the null string ("") passed in.
Workaround: Patch the konqueror package. This will not pass the URL argument if it was a null string, to make the "Home Page" open. This patch is partial; it always invokes "about:" URL when Konqueror is already running, since there's no explicit URL to invoke the "Home Page" setting of Konqueror via DBus.
Symptom: Using a hardware which uses i915 driver. When opening KDE System Settings, it only shows a black window. Invoking systemsettings5 from terminal shows
QOpenGLShader: could not create shader QOpenGLShader: could not create shader QOpenGLShader: could not create shader QOpenGLShader: could not create shader QOpenGLShader: could not create shader QOpenGLShader: could not create shader QOpenGLShader: could not create shader QOpenGLShader: could not create shader QOpenGLShader: could not create shader
Cause: KDE5 needs OpenGL 2.0 renderer, but
/usr/lib/dri/i915_dri.so
seems to not support it.
Checking glxinfo:
... Extended renderer info (GLX_MESA_query_renderer): Vendor: Intel Open Source Technology Center (0x8086) Device: Mesa DRI Intel(R) 852GM/855GM x86/MMX/SSE2 (0x3582) Version: 20.3.3 Accelerated: yes Video memory: 96MB Unified memory: yes Preferred profile: compat (0x2) Max core profile version: 0.0 Max compat profile version: 1.3 Max GLES1 profile version: 1.1 Max GLES[23] profile version: 0.0 ...
Workaround: Delete /usr/lib/dri/i915_dri.so
.
Restarting Xorg will make use of software renderer
/usr/lib/dri/swrast_dri.so
,
and invoking glxinfo will now show
... Extended renderer info (GLX_MESA_query_renderer): Vendor: Mesa/X.org (0xffffffff) Device: llvmpipe (LLVM 11.0.0, 128 bits) (0xffffffff) Version: 20.3.3 Accelerated: no Video memory: 983MB Unified memory: no Preferred profile: core (0x1) Max core profile version: 4.5 Max compat profile version: 3.1 Max GLES1 profile version: 1.1 Max GLES[23] profile version: 3.2 ...
Symptom: Using a hardware using i915 driver.
When xterm is invoked,the text cursor (block cursor)
disappears on key input.
It becomes visible when backspace or left-arrow key is pressed.
Konsole is not affected.
Killing kwin_x11
(window manager) makes cursor back to normal;
re-invoking kwin_x11
makes cursor invisible again.
Workaround: Add a new file,
/etc/X11/xorg.conf.d/20-intel.conf
:
Section "Device" Identifier "Intel Graphics" Driver "Intel" ## Use legacy UXA, not default SNA Option "AccelMethod" "UXA" EndSection
See intel(4) manpage for "AccelMethod".