23 February 2008

Fix empty /var/log/boot.log file issue

The local7 facility is used to write into the /var/log/boot.log file.
But since the Fedora core 4, the system has been disabled waiting for a new generation system which does not seem to be available yet (see this bug report and this one)

A quick way to fix the empty /var/log/boot.log file, is to edit the /etc/rc.d/init.d/functions file.
Into the success, failure, passed and warning functions, you can add a line like the following, just before the return instruction:
/usr/bin/logger -p local7.info "$1"

It works but each time the initscripts package is updated, it is needed to edit the file ...

Make Red Hat Graphical Boot detailed

There is unfortunately no configuration file allowing to switch on/off the details of Red Hat Graphical Boot.
Anyway, for it to be detailed, the /etc/rc.d/init.d/functions can be edited:
- simply add --details=yes into the update_boot_stage function on the line using the /usr/bin/rhgb-client.

It works but each time the initscripts package is updated, it is needed to edit the file ...

22 February 2008

Updating courier-imap configuration

By default, the courier-imap creates pop3 (110), pop3s (995), imap (143) and imaps (993) servers.
Generally, they are not all needed, and for obvious security reasons, it is better to not start useless servers.

Under GNU/Linux Fedora, the corresponding configuration files, which are under /usr/lib/courier-imap/etc/, are respectively pop3d, pop3d-ssl, imapd and imapd-ssl.
Into each, there is a variable XXXSTART (with XXX corresponding to POP3D, POP3DSSL, IMAPD or IMAPDSSL) which can be YES or NO.

To not start such a server, it is enough to replace corresponding YES by NO.

Finally, restart the courier-imap service.

Upgrade GNU/Linux Fedora from core 6 to 7, then 8 (with yum)

To upgrade GNU/Linux Fedora from core 6 to 7, then 8, there is no [really] problem today.
It was not the case when I've tried it as soon as Fedora 7 was available, but I've successfully performed such an upgrade without difficulties some days ago.

The principle is globally the same when upgrading from Fedora core N to Fedora core N+1 (see this post), or from Fedora 7 to Fedora 8 (see this post).
In addition, the recommendations of Fedora project have greatly evolved and seem now complete.

This is some additional instructions in case you have specific issues (like I had):
Update your /etc/fstab file:
It is very important to use label (LABEL=myLabel) to identity your device instead of path (/dev/xxx). The identification has changed from Fedora core 6 to Fedora 7, generally from /dev/hdX to /dev/sdY BUT there is absolutely no certainties that X and Y will equal between versions.

Using labels ensure your mount points are always the same.
Particularly it ensures your root partition (/) will be the good, and your computer will well boot after upgrade.
To update the label of a device, you can use the tune2fs command.

Upgrade from Fedora core 6 to Fedora 7:
- do not forget to clean all the yum metadata with yum clean all,
- upgrade the Fedora release:
rpm -Uhv ftp://download.fedora.redhat.com/pub/fedora/linux/releases/7/Fedora/i386/os/Fedora/fedora-release*.noarch.rpm
- upgrade your repository, for instance for livna:
rpm -Uvh http://rpm.livna.org/livna-release-7.rpm
- remove and reinstall authconfig to avoid specific issue.

Upgrade from Fedora 7 to Fedora 8:
- do not forget to clean all the yum metadata with yum clean all,
- upgrade the Fedora release:
rpm -Uvh http://mirror.anl.gov/pub/fedora/linux/releases/8/Everything/i386/os/Packages/fedora-release-*.noarch.rpm
- upgrade your repository, for instance for livna:
rpm -Uvh http://rpm.livna.org/livna-release-8.rpm

Ensure there is no dependencies problem like explained into this post.

Then, you should perform a great configuration files merging campaign to ensure having the up to date functionalities while keeping your own specific configuration (globally the XXX.conf and XXX.conf.rpmnew files).

Clean useless packages under 64bits GNU/Linux

It seems there is some dependency "issues" when installing a 64bits GNU/Linux. It is, for instance, the case under Fedora.
Although the architecture of the installed OS is 64bits, there is some i386 or i686 installed packages.
Some are needed, but lots might be removed.

To begin, to get a sorted list of such potential packages, you can use:
rpm -qa --qf "%{NAME}.%{ARCH}\n" |grep -v x86_64 |grep -v noarch |grep -v "(none)" |sort

Then, you can remove all packages you are sure you do not need, but be careful with the dependencies.
To make it quicker, you can request the remove of package(s) you know it is needed by lots of others (like some libraries).

After all of this, ensure there is no dependencies problem. For instance, with yum utilities:
- ensure the database is up to date with rpm --rebuilddb,
- check if there is problem with package-cleanup --problems.

Finally, to complete the cleaning, you can use the package-cleanup --leaves and ensure you need all those "independent" package(s), else remove them.

Personally, I have removed about 150 packages like this.
For information, there is some i386/i686 packages which are needed by x86_64 ones.
It was the case for me with compat-libstdc++-33.i386, libgcc.i386 and glibc.i686.

18 February 2008

Get 32bits firefox plugins available under 64bits system

There is various article about this, but I have not found all needed information into only one.
This is a quick method to get 32bits firefox plugins available under 64bits system:
- install wished 64bits plugins,
- install 32bits plugins if there is no 64bits version (like for macromedia flash),
- install nspluginwrapper 64 and 32 bits (important to have the two versions),
- ensures 32bits plugins are available under /usr/lib/mozilla/plugins (or create symbolic links),
- ensures 64bits plugins are available under /usr/lib64/mozilla/plugins (or create symbolic links),
- according to your OS, it may then be enough to restart firefox (like under Fedora 8),
- else, use the mozilla-plugin-config -i command.

It is possible to not create symbolic link, and to specify path of corresponding .so file with the mozilla-plugin-config -i.

Each wrapped plugins should be under
/usr/lib64/mozilla/plugins-wrapped (or maybe equivalent). If it is not the case, you can use the -v option while using mozilla-plugin-config.

Finally, under Firefox, you should see all available plugins under "about:plugins".

11 February 2008

Reinstall packages from another source/Vendor without broking dependencies

There is various situations leading to the wish to reinstall packages from another source/Vendor without broking dependencies.
It is not so easy when continuity of services is an important need.
To avoid difficulties, try to make it with iterative manner, "package set" by "package set".

This is the steps which can be followed for each iteration:
- define with the greatest precision the packages which must be updated (this post can help for this),
- define the dependencies which might be broken while removing regarded packages (this post can help for this),
- ensure there is another source for each package which must be reinstalled, for instance with yum:
yum search packageName1 ... packageNameN
- with great caution, remove the packages regardless to dependencies:
rpm -e packageName1 ... packageNameN --nodeps
- finally, install the new version from wanted source, for instance with yum:
yum --disablerepo=unwantedSource install packageName1 ... packageNameN
- ensure there is no problem, particularly about dependencies:
package-cleanup --problems

As final check, restart the services which may have been affected to ensure there is no warning/error.

Split a file into several ones with dd

To split quickly a file in several ones (for greatest management, better legibility ...), the dd command can be used.

To create the /path/to/my/destination/file with the first N MBytes of the /path/to/my/source/file:
dd if=/path/to/my/source/file of=/path/to/my/destination/file bs=1048576 count=N

Manage services under Solaris

A simple refresh of what can be done with svcs and svcadm tools.

Get list of all services:
svcs

Add a service:
To begin, a manifest file is needed to define the service (some information there).
Then, it is needed to ensure it is valid:
xmllint --valid /path/to/my/service/manifest/file

Finally, the service can be add:
svccfg import /path/to/my/service/manifest/file

Activate a service (which has been priorly added):
svcadm enable * serviceName
The -s option can be used to get focus only after the service is fully activated (or failed).

Disable a service:
svcadm disable * serviceName
The -s option can be used to get focus only after the service has been disabled.

Put a service under maintenance:
svcadm mark * serviceName

Remove the "maintenance" status of a service:
svcadm clear * serviceName

Update the configuration of a service:
svcadm refresh * serviceName

Get the current status of a service:
svcs -x serviceName stop

Manage services under GNU/Linux distributions providing service and chkconfig

A simple refresh of what can be done with service and chkconfig tools.

Get list of all services and their state for each runlevel (including inet and/or xinet if available):
chkconfig --list

Get state for each runlevel of one service (including inet and/or xinet if available):
chkconfig --list serviceName

Remove a service:
chkconfig --del serviceName

Add a service (with state for each runlevel defined automatically according to the service definition file):
chkconfig --add serviceName

Add a service with specific state for some runlevels:
chkconfig --level * serviceName on|off**
* one or several runlevel(s) specified without separator
** only "on" as sense there (to add/activate the service)

Define the state for some runlevels of an installed service:
chkconfig --level * serviceName on|off*
* "on" to "activate" the service, "off" otherwise

Get the current status of all services:
service --status-all

Get the current status of a service:
service serviceName status

Start a service:
service serviceName start

Stop a service:
service serviceName stop

Restart a service:
service serviceName restart

Request DEB packages ("Debian-like" GNU/Linux distribution)

A simple refresh of what can be done with dpkg tool.

All those commands query installed packages.

Get the list of packages:
dpkg -l

Get the list of packages matching a specific pattern:
dpkg -l pattern
For instance for libraries: dpkg -l lib*

General information about a package:
dpkg -s myPackageName[-myCompletePackageVersion]

Get the list of files of a package:
dpkg -L myPackageName

Get the package providing a specific file:
dpkg -S myFilePathOrPattern*
*: absolute path or pattern

To get the general information of the package providing a specific file (under GNU/Bash) with only one command line:
dpkg -s $( dpkg -S myFilePath |awk '{print $1}' |sed -e 's/://g;' )

Request RPM packages ("Redhat-like" GNU/Linux distribution)

Request RPM packages ("Redhat-like" GNU/Linux distribution)
A simple refresh of what can be done with rpm tool.

To begin, the -q option allow to select the RPM packages to request.
The -a option allow to select all (potentially with a pattern to match).
Name, pattern and even version can be specified for greatest precision in selection.

All those commands query installed packages.

Get the list of packages:
rpm -qa

Get the list of packages matching a specific pattern:
rpm -qa pattern
For instance for X libraries: rpm -qa lib*X*

General information about a package:
rpm -qi myPackageName[-myCompletePackageVersion]
For instance, for a specific kernel: rpm -qi kernel-2.6.20-1.2962.fc6

Get the list of files of a package:
rpm -ql myPackageName[-myCompletePackageVersion]

Get ChangeLog of a package:
rpm -q --changelog myPackageName[-myCompletePackageVersion]

Get the list of packages needed by another package:
rpm -qR myPackageName[-myCompletePackageVersion]

Get the list of what provides a package:
rpm -q --provides myPackageName[-myCompletePackageVersion]

Get the list of packages providing a specific functionality:
rpm -q --whatprovides functionalityName
For instance, for the perl functionality "Authen::SASL": rpm -q --whatprovides "perl(Authen::SASL)"

Get the package providing a specific file:
rpm -qf myFilePath*
*: the path can be relative to current directory or absolute

To get the general information of the package providing a specific file (under GNU/Bash) with only one command line:
rpm -qi $( rpm -q --file myFilePath )

Define what is the installed GNU/Linux distribution

The "release" part of the Linux Standard Base (LSB) allow answering this question.

Tips:
- to install it under GNU/Linux Fedora, use yum install redhat-lsb
- to install it under GNU/Linux Debian, use apt-get install lsb-release

Then, simply use the command lsb_release -i.

This is output instances:
- under GNU/Linux Fedora, it answers "Distributor ID: Fedora"
- under GNU/Linux Debian, it answers "Distributor ID: Debian"