Softpanorama

May the source be with you, but remember the KISS principle ;-)
Contents Bulletin Scripting in shell and Perl Network troubleshooting History Humor

modprobe FATAL could not load /lib/modules/`uname -r`/modules.dep

News

Novell SUSE

Recommended Books Recommended Links  supportconfig Baseliners  Installation Checklist

SLES Service Packs

/proc and /sys Filesystems

Rescue Mode

modprobe FATAL could not load modules.dep

Suse Tips

Humor Etc

I first encountered this problem on Jan 29, 2010. After patching SLES 10 SP3 I got the following message:

Jan 29 15:54:08 usrklxbck01 modprobe: FATAL: Could not load /lib/modules/2.6.16.60-0.58.1-smp/modules.dep: No such file or directory

In this case this error in reality was not fatal and system was still bootable. It just spammed the syslog. 

On May 13, 2010 I run into serious troubles with the same  modprobe: FATAL: message after patching Suse 10 SP3 server using YAST (I appllyed online updates, which included a kernel update). 

Rebooting the server to load a new kernel led to a frozen server which does not accept input from either GUI or command line (safe mode). So you can't login to the server. It you boot recovery image from DVD, partitions under LVM (all in this server setup) are not visible and cannot be mounted. In this particular server only /boot was a 'normal" ext3 partitions, All others were LVM controlled partitions. So using regular mount command you can only mount /boot from the rescue disk. That suggests that putting root partition under LVM is not such a great idea, unless you know LVM really well.  

Here is how the problem looks on the boot screen:

Look for "modprobe: FATAL" message. It's really fatal.  The modules.dep file is generated by depmod. It contain dependencies for kernel modules and without it modules are not loaded leaving you server without drivers. And that typically means without network connectivity but sometimes like in my case without access to console as well. If you have root partition under LVM this is more difficult situation to resolve as you need to know how to mount LVM partitions from the rescue disk.  

For example in my case that the server reported:

uname -a
Linux someserver 2.6.16.60-0.54.5-smp #1 SMP Fri Sep 4 01:28:03 UTC 2009 x86_64 x86_64 x86_64 GNU/Linux

but the /boot directory has had the following content

root@someserver:/boot # ls
System.map-2.6.16.60-0.62.1-smp  symsets-2.6.16.60-0.62.1-smp.tar.gz
boot                             symtypes-2.6.16.60-0.62.1-smp.gz
config-2.6.16.60-0.62.1-smp      symvers-2.6.16.60-0.62.1-smp.gz
grub                             vmlinux-2.6.16.60-0.62.1-smp.gz
initrd                           vmlinuz
initrd-2.6.16.60-0.62.1-smp      vmlinuz-2.6.16.60-0.62.1-smp
The trick to recover from this bug is to boot the server from a different kernel using installation DVD. Select installation from main menu. And then when it will ask installation/upgrade/other select other. Select boot from submenu.

The first I though that the problem is with /etc/lvm/lvm.conf which does not filter disks properly. or just changed its behavior on existing /etc/lvm/lvm.conf.  In reality this was the problem with multipath dirver. After the upgrade most server have the problem in interaction of multipath driver and LVM. It can demonstrate itself  in two ways:

In any case on some severs after appling SP3 and online patches /boot partition, for example  /dev/sda2 in not mounted. As a result,  YaST updater populates regular directory on the boot partition. So the server is booted from /boot partition (which still contains older kernel) and then finds that no modules.dep for this version exists.

It might be limited to cases where some partitions on the drive with /boot partitions are under LVM and some are not. Here is how correct server list of partitions looks like:

# df -k
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/vg00-lv01
                       4128448    428236   3490500  11% /
udev                   1030176      8304   1021872   1% /dev
/dev/sda2               202225     35222    156561  19% /boot
/dev/mapper/vg00-lv06
                      10321208   1008880   8788040  11% /home
/dev/mapper/vg00-lv04
                       4128448   1771996   2146740  46% /opt

Here is how "split kernel" server /etc/fstab looks like

# cat /etc/fstab
/dev/vg01/root       /                    ext3       acl,user_xattr        1 1
/dev/disk/by-id/scsi-36001c230c765b9000ea9010b1aac9f3f-part2 /boot                ext3       acl,user_xattr        1 2
/dev/vg01/home       /home                ext3       acl,user_xattr        1 2
/dev/vg01/opt        /opt                 ext3       acl,user_xattr        1 2
/dev/vg01/tmp        /tmp                 ext3       acl,user_xattr        1 2
/dev/vg01/usr        /usr                 ext3       acl,user_xattr        1 2
/dev/vg01/var        /var                 ext3       acl,user_xattr        1 2
/dev/disk/by-id/scsi-36001c230c765b9000ea9010b1aac9f3f-part3 swap                 swap       defaults              0 0
proc                 /proc                proc       defaults              0 0
sysfs                /sys                 sysfs      noauto                0 0
debugfs              /sys/kernel/debug    debugfs    noauto                0 0
usbfs                /proc/bus/usb        usbfs      noauto                0 0
devpts               /dev/pts             devpts     mode=0620,gid=5       0 0
/dev/vg02/prefilter  /pre-filter          ext3       acl,user_xattr        1 2
/dev/vg02/backup     /backup              ext3       acl,user_xattr        1 2

Despite this by-id reference introduced since SP1 and enforced in SP3 it still points to the correct partition:

# ll /dev/disk/by-id/scsi-36001c230c765b9000ea9010b1aac9
f3f-part2
lrwxrwxrwx 1 root root 10 May 13 16:55 /dev/disk/by-id/scsi-36001c230c765b9000ea9010b1aac9f3f-part2 -> ../../sda2

The problem is the LVM blocking mounting it: in df -k listing its nowhere to be found:

# df -k
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/vg01-root
                       4128448    495076   3423660  13% /
udev                   8220628       244   8220384   1% /dev
/dev/mapper/vg01-home
                       1032088    179804    799856  19% /home
/dev/mapper/vg01-opt   2064208    739512   1219840  38% /opt
/dev/mapper/vg01-tmp   4128448    144240   3774496   4% /tmp
/dev/mapper/vg01-usr   4128448   1691360   2227376  44% /usr
/dev/mapper/vg01-var  10321208   1018200   8778720  11% /var
As you see there is no /boot partition mounted from the listing on mount command:
# mount
/dev/mapper/vg01-root on / type ext3 (rw,acl,user_xattr)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
debugfs on /sys/kernel/debug type debugfs (rw)
udev on /dev type tmpfs (rw)
devpts on /dev/pts type devpts (rw,mode=0620,gid=5)
/dev/mapper/vg01-home on /home type ext3 (rw,acl,user_xattr)
/dev/mapper/vg01-opt on /opt type ext3 (rw,acl,user_xattr)
/dev/mapper/vg01-tmp on /tmp type ext3 (rw,acl,user_xattr)
/dev/mapper/vg01-usr on /usr type ext3 (rw,acl,user_xattr)
/dev/mapper/vg01-var on /var type ext3 (rw,acl,user_xattr)
securityfs on /sys/kernel/security type securityfs (rw)

There are two solutions to this particular "split kernel" problem:

  1. You  can try to symlink the non existing kernel to existing as usually they are very close.  This is a hack that does not solve the problem but the server becomes bootable to it can give you some time to sort things our. It's important if it really important production server and, for example, flow of the mail stopped due to this bug.

    For example, if the error mentions  2.6.16.60-0.54.5-smp kernel and the existing directory points to 2.6.16.60-0.62.1-smp

    ln -s  /lib/modules/2.6.16.60-0.62.1-smp /lib/modules/2.6.16.60-0.54.5-smp

  2. If the server does not use multipath driver the easiest way to fix this problem is to disable it. You can boot into rescue mode, mount /boot partition and disable multipath on /boot/grub/menu.lst by adding multipath=off to the kernel directive. The other way to solve this problem is to rebuild initrd. Both fixes are not permanent and will probably be overwritten by the next set of patches.

    Its unclear what to do if multipath is really used on the server. In this case it might make sense not apply online patches after upgrading to SP3 or say on SP2 just wait until SP4 will be available. 

    After that you you can reboot normally, verify that boot partition is mounted OK, delete symlink and reinstall the kernel.


Top Visited
Switchboard
Latest
Past week
Past month

Old News ;-)

2016 2015 2014 2013 2012 2011 2010 2009 2008 2007

[May 14, 2010]   OpenVZ Forum Support = [solved] modprobe problem

See also modprobe FATAL could not load modules.dep

[May 14, 2010]   Re [opensuse] Recovered 10.3 system with 11.2 recovery disk, now get - modprobe FATAL Could not load /lib/modules/2.6.31.5-0.1

See also modprobe FATAL could not load modules.dep

On Sun, 2010-01-03 at 02:21 -0600, David C. Rankin wrote:
 
Listmates,

I recovered my 10.3 system with the 11.2 install dvd. I booted the installed system from the 11.2 disk and then re-installed grub. Now I get the following modprobe error whenever I try to copy files from sdb -> sda:

Jan 3 02:06:53 nirvana modprobe: FATAL: Could not load /lib/modules/2.6.31.5-0.1-default/modules.dep: No such file or directory
 

Sounds like the 11.2 recovery gave you an 11.2 kernel in /boot, with an
11.2 initrd, but didn't give you the 11.2 kernel rpm with the modules.

I suspect your 10.3 kernel is still under /boot though, and it may even
be available as a boot option already in /boot/grub/menu.lst, but if it
isn't, edit that file and make it point to the correct kernel file.

If the kernel isn't available under /boot, you may have to reinstall the
rpm, which should take care of menu.lst automatically

Anders On Sun, 2010-01-03 at 12:46 +0100, Carlos E. R. wrote:
 
Ah! There is an "/etc/depmod.conf" file, look in there.
 

No, there you can only override the search order of the directories inside the kernel directory.

The path of the kernel directory is basedir/versiondir/. You can change the basedir with the -d parameter to modprobe (it is /lib/modules by default), and you can change the versiondir with the -S parameter (or by replacing uname, the default is the output of 'uname -r')

Or you can recompile module-init-tools. But you can't change the defaults with a config file.

Incidentally, the post-build-checks package does install its own uname script, which can be configured to return a different output than the currently running kernel, with a config file /.kernelversion, but even
that wouldn't confuse modprobe, since it uses the uname syscall, not the executable

Anders

On Sunday, 2010-01-03 at 02:21 -0600, David C. Rankin wrote:

Listmates,

I recovered my 10.3 system with the 11.2 install dvd. I booted the installed system from the 11.2 disk and then re-installed grub. Now I get the following modprobe error whenever I try to copy files from sdb -> sda:

Jan 3 02:06:53 nirvana modprobe: FATAL: Could not load /lib/modules/2.6.31.5-0.1-default/modules.dep: No such file or directory
Jan 3 02:06:53 nirvana modprobe: FATAL: Could not load /lib/modules/2.6.31.5-0.1-default/modules.dep: No such file or directory
 

It seems like depmod got confused. But I don't know where the information to search for modules.dep is stored. Have a look to see if the kernel files in /boot are consistent. Try running depmod.

Ah! There is an "/etc/depmod.conf" file, look in there.
 

[OpenSUSE 11.1] modprobe FATAL Could not load -lib-modules - openSUSE Forums

See also modprobe FATAL could not load modules.dep
Re: [OpenSUSE 11.1] modprobe: FATAL: Could not load /lib/mod

Maybe you didn't start an upgrade explicitly, but the YaST autoupdater may have done it. You can see the last 20 packages installed and when, by:

Code:
rpm -qa --last | head -20
My bet is the kernel was updated behind the scenes, and you haven't rebooted yet. Re: [OpenSUSE 11.1] modprobe: FATAL: Could not load /lib/mod

Quote:

Originally Posted by ken_yap View Post

Maybe you didn't start an upgrade explicitly, but the YaST autoupdater may have done it. You can see the last 20 packages installed and when, by:

 

Code:
rpm -qa --last | head -20
My bet is the kernel was updated behind the scenes, and you haven't rebooted yet.
You are right. Although the result don't show up unless I do head -100 (it has updated lots of other things as well). If it had updated the system, why didn't it create the /lib/modules/2.6.27.7-9-pae/ directory and now spitting out errors?!

I have created a symlink. So /lib/modules/2.6.27.21-0.1-pae is now symlinked to /lib/modules/2.6.27.7-9-pae/ and the error has stopped.

Is there any way to know if I reboot the system, it will come back up good?

I guess when I rebooted the system, auto-yast2-installation kicked off. How do I turn off Yast Auto Updater/ auto-yast2-installation?

Thanks. modprobe: FATAL: Could not load /lib/mod

No, don't do that symlink. You're not supposed to mix modules from different kernel releases. But it doesn't matter anyway. The old kernel has been deleted and you have no choice but to use the new kernel when you reboot. That's why the module directory for the old kernel didn't exist any more.

YaST autoupdate is configured from Software > Online Update Configuration. It's normally weekly.

I've always thought SUSE's handling of automatic kernel updates a little bit reckless. Currently only one version is retained, the most recent. Of course you can install the update manually and retain the previous version, but expecting normal users to use CLI tools is not realistic. Debian and Ubuntu keep all previous versions which leads to a pile of old kernels and initrds. The most sensible handling I've seen so far is RHEL where the last n (normally 3) kernels are retained. If a new kernel is installed, the oldest is removed. That way the last version is still on disk and doesn't cause bafflement when module loading is attempted after an update.

Irregular Activity » Blog Archive » modprobe FATAL could not load -lib-modules-2.6.29.4-modules.dep – Fix!!

See also modprobe FATAL could not load modules.dep
Didn’t fix the problem unfortunately, but the I stumbled across a forum post over at Remote-Exploit and the following rather simple command fixed the whole shebang:

update-grub

And now it works like a treat! Original Post at the RE Forums here.

Filed under Linux

2 comments to...
“modprobe FATAL could not load /lib/modules/2.6.29.4/modules.dep – Fix!!”

holy loller
September 22nd, 2009

hi try this:

update-initramfs -c -k 2.6.29.4

it works!

[May 14, 2010]   modprobe FATAL Could not load -lib-modules ... modules.dep: No such a file or directory

I experienced the same problem with SLES 10 SP3 after installing current patches via YAST on May 13, 2010. Creating of the symbolic link like recommended below (/lib/modules/2.6.27.7-9-pae/modules.dep -> /lib/modules/2.6.27.21-0.1-pae/modules.dep) solved the problem.

I'm getting "modprobe: FATAL: Could not load /lib/modules/2.6.27.7-9-pae/modules.dep: No such file or directory" in /var/log/messages

This is a OpenSUSE 11.1 box and I haven't modified/ updated/ upgraded anything related to kernel. I use this box only for apache, bind and dhcp servers.


I looked around the system and there is no /lib/modules/2.6.27.7-9-pae/modules.dep
but there is /lib/modules/2.6.27.21-0.1-pae/modules.dep

uname -a shows 2.6.27.7-9-pae #1 SMP

/etc/sysconfig/bootloader shows

default name as DEFAULT_NAME="openSUSE 11.1 - 2.6.27.7-9"

In /boot/grub directory it shows two files have been changed/ created recently: menu.lst.old and menu.lst - both the files have been modified at the exact same time!

menu.lst.old

Code:

# Modified by YaST2. Last modification on Wed Apr 29 11:03:02 2009
default 0
timeout 8
##YaST - generic_mbr
gfxmenu (hd0,1)/message
##YaST - activate

###Don't change this comment - YaST2 identifier: Original name: linux###
title openSUSE 11.1 - 2.6.27.21-0.1
    root (hd0,1)
    kernel /vmlinuz-2.6.27.21-0.1-pae root=/dev/disk/by-id/ata-ST3160828AS_5MT3MBZH-part1 resume=/dev/disk/by-id/ata-ST3160828AS_5MT3MBZH-part3 splash=silent showopts vga=0x31a
    initrd /initrd-2.6.27.21-0.1-pae

###Don't change this comment - YaST2 identifier: Original name: failsafe###
title Failsafe -- openSUSE 11.1 - 2.6.27.21-0.1
    root (hd0,1)
    kernel /vmlinuz-2.6.27.21-0.1-pae root=/dev/disk/by-id/ata-ST3160828AS_5MT3MBZH-part1 showopts ide=nodma apm=off noresume nosmp maxcpus=0 edd=off powersaved=off nohz=off highres=off processor.max_cstate=1 x11failsafe vga=0x31a
    initrd /initrd-2.6.27.21-0.1-pae


###Don't change this comment - YaST2 identifier: Original name: linux###
title openSUSE 11.1 - 2.6.27.7-9
    root (hd0,1)
    kernel /vmlinuz-2.6.27.7-9-pae root=/dev/disk/by-id/ata-ST3160828AS_5MT3MBZH-part1 resume=/dev/disk/by-id/ata-ST3160828AS_5MT3MBZH-part3 splash=silent showopts vga=0x31a
    initrd /initrd-2.6.27.7-9-pae


###Don't change this comment - YaST2 identifier: Original name: failsafe###
title Failsafe -- openSUSE 11.1 - 2.6.27.7-9
    root (hd0,1)
    kernel /vmlinuz-2.6.27.7-9-pae root=/dev/disk/by-id/ata-ST3160828AS_5MT3MBZH-part1 showopts ide=nodma apm=off noresume nosmp maxcpus=0 edd=off powersaved=off nohz=off highres=off processor.max_cstate=1 x11failsafe vga=0x31a
    initrd /initrd-2.6.27.7-9-pae
menu.lst

 

Code:

# Modified by YaST2. Last modification on Wed Apr 29 11:03:02 2009
default 0
timeout 8
##YaST - generic_mbr
gfxmenu (hd0,1)/message
##YaST - activate

###Don't change this comment - YaST2 identifier: Original name: linux###
title openSUSE 11.1 - 2.6.27.21-0.1
    root (hd0,1)
    kernel /vmlinuz-2.6.27.21-0.1-pae root=/dev/disk/by-id/ata-ST3160828AS_5MT3MBZH-part1 resume=/dev/disk/by-id/ata-ST3160828AS_5MT3MBZH-part3 splash=silent showopts vga=0x31a
    initrd /initrd-2.6.27.21-0.1-pae

###Don't change this comment - YaST2 identifier: Original name: failsafe###
title Failsafe -- openSUSE 11.1 - 2.6.27.21-0.1
    root (hd0,1)
    kernel /vmlinuz-2.6.27.21-0.1-pae root=/dev/disk/by-id/ata-ST3160828AS_5MT3MBZH-part1 showopts ide=nodma apm=off noresume nosmp maxcpus=0 edd=off powersaved=off nohz=off highres=off processor.max_cstate=1 x11failsafe vga=0x31a
    initrd /initrd-2.6.27.21-0.1-pae
Looks like menu.lst has been modified and the old version is in menu.lst.old - but who would change it? Yast? How? And how can I fix this mess?

 
Hmm. Why don't you try and create a symbolic link /lib/modules/2.6.27.7-9-pae/modules.dep -> /lib/modules/2.6.27.21-0.1-pae/modules.dep? If all your woes are gone you might simply leave it at that.

The reason for all this might be that you have automatic updates via YAST enabled(forgot the name SuSE / Novell uses for that). That might have gotten you a new kernel (as it should) with no update of the modules.dep (buggy?). You might try to download / update those possibly by installing the kernel sources.


How to Setup and Configure Apache Web Server in SLES 10
Dave Simons explains how to setup and configure the Apache Web server in SLES 10.

Recommended Links



Etc

FAIR USE NOTICE This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. We are making such material available in our efforts to advance understanding of environmental, political, human rights, economic, democracy, scientific, and social justice issues, etc. We believe this constitutes a 'fair use' of any such copyrighted material as provided for in section 107 of the US Copyright Law. In accordance with Title 17 U.S.C. Section 107, the material on this site is distributed without profit exclusivly for research and educational purposes.   If you wish to use copyrighted material from this site for purposes of your own that go beyond 'fair use', you must obtain permission from the copyright owner. 

ABUSE: IPs or network segments from which we detect a stream of probes might be blocked for no less then 90 days. Multiple types of probes increase this period.  

Society

Groupthink : Two Party System as Polyarchy : Corruption of Regulators : Bureaucracies : Understanding Micromanagers and Control Freaks : Toxic Managers :   Harvard Mafia : Diplomatic Communication : Surviving a Bad Performance Review : Insufficient Retirement Funds as Immanent Problem of Neoliberal Regime : PseudoScience : Who Rules America : Neoliberalism  : The Iron Law of Oligarchy : Libertarian Philosophy

Quotes

War and Peace : Skeptical Finance : John Kenneth Galbraith :Talleyrand : Oscar Wilde : Otto Von Bismarck : Keynes : George Carlin : Skeptics : Propaganda  : SE quotes : Language Design and Programming Quotes : Random IT-related quotesSomerset Maugham : Marcus Aurelius : Kurt Vonnegut : Eric Hoffer : Winston Churchill : Napoleon Bonaparte : Ambrose BierceBernard Shaw : Mark Twain Quotes

Bulletin:

Vol 25, No.12 (December, 2013) Rational Fools vs. Efficient Crooks The efficient markets hypothesis : Political Skeptic Bulletin, 2013 : Unemployment Bulletin, 2010 :  Vol 23, No.10 (October, 2011) An observation about corporate security departments : Slightly Skeptical Euromaydan Chronicles, June 2014 : Greenspan legacy bulletin, 2008 : Vol 25, No.10 (October, 2013) Cryptolocker Trojan (Win32/Crilock.A) : Vol 25, No.08 (August, 2013) Cloud providers as intelligence collection hubs : Financial Humor Bulletin, 2010 : Inequality Bulletin, 2009 : Financial Humor Bulletin, 2008 : Copyleft Problems Bulletin, 2004 : Financial Humor Bulletin, 2011 : Energy Bulletin, 2010 : Malware Protection Bulletin, 2010 : Vol 26, No.1 (January, 2013) Object-Oriented Cult : Political Skeptic Bulletin, 2011 : Vol 23, No.11 (November, 2011) Softpanorama classification of sysadmin horror stories : Vol 25, No.05 (May, 2013) Corporate bullshit as a communication method  : Vol 25, No.06 (June, 2013) A Note on the Relationship of Brooks Law and Conway Law

History:

Fifty glorious years (1950-2000): the triumph of the US computer engineering : Donald Knuth : TAoCP and its Influence of Computer Science : Richard Stallman : Linus Torvalds  : Larry Wall  : John K. Ousterhout : CTSS : Multix OS Unix History : Unix shell history : VI editor : History of pipes concept : Solaris : MS DOSProgramming Languages History : PL/1 : Simula 67 : C : History of GCC developmentScripting Languages : Perl history   : OS History : Mail : DNS : SSH : CPU Instruction Sets : SPARC systems 1987-2006 : Norton Commander : Norton Utilities : Norton Ghost : Frontpage history : Malware Defense History : GNU Screen : OSS early history

Classic books:

The Peter Principle : Parkinson Law : 1984 : The Mythical Man-MonthHow to Solve It by George Polya : The Art of Computer Programming : The Elements of Programming Style : The Unix Hater’s Handbook : The Jargon file : The True Believer : Programming Pearls : The Good Soldier Svejk : The Power Elite

Most popular humor pages:

Manifest of the Softpanorama IT Slacker Society : Ten Commandments of the IT Slackers Society : Computer Humor Collection : BSD Logo Story : The Cuckoo's Egg : IT Slang : C++ Humor : ARE YOU A BBS ADDICT? : The Perl Purity Test : Object oriented programmers of all nations : Financial Humor : Financial Humor Bulletin, 2008 : Financial Humor Bulletin, 2010 : The Most Comprehensive Collection of Editor-related Humor : Programming Language Humor : Goldman Sachs related humor : Greenspan humor : C Humor : Scripting Humor : Real Programmers Humor : Web Humor : GPL-related Humor : OFM Humor : Politically Incorrect Humor : IDS Humor : "Linux Sucks" Humor : Russian Musical Humor : Best Russian Programmer Humor : Microsoft plans to buy Catholic Church : Richard Stallman Related Humor : Admin Humor : Perl-related Humor : Linus Torvalds Related humor : PseudoScience Related Humor : Networking Humor : Shell Humor : Financial Humor Bulletin, 2011 : Financial Humor Bulletin, 2012 : Financial Humor Bulletin, 2013 : Java Humor : Software Engineering Humor : Sun Solaris Related Humor : Education Humor : IBM Humor : Assembler-related Humor : VIM Humor : Computer Viruses Humor : Bright tomorrow is rescheduled to a day after tomorrow : Classic Computer Humor

The Last but not Least


Copyright © 1996-2016 by Dr. Nikolai Bezroukov. www.softpanorama.org was created as a service to the UN Sustainable Development Networking Programme (SDNP) in the author free time. This document is an industrial compilation designed and created exclusively for educational use and is distributed under the Softpanorama Content License.

The site uses AdSense so you need to be aware of Google privacy policy. You you do not want to be tracked by Google please disable Javascript for this site. This site is perfectly usable without Javascript.

Original materials copyright belong to respective owners. Quotes are made for educational purposes only in compliance with the fair use doctrine.

FAIR USE NOTICE This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. We are making such material available to advance understanding of computer science, IT technology, economic, scientific, and social issues. We believe this constitutes a 'fair use' of any such copyrighted material as provided by section 107 of the US Copyright Law according to which such material can be distributed without profit exclusively for research and educational purposes.

This is a Spartan WHYFF (We Help You For Free) site written by people for whom English is not a native language. Grammar and spelling errors should be expected. The site contain some broken links as it develops like a living tree...

You can use PayPal to make a contribution, supporting development of this site and speed up access. In case softpanorama.org is down you can use the at softpanorama.info

Disclaimer:

The statements, views and opinions presented on this web page are those of the author (or referenced source) and are not endorsed by, nor do they necessarily reflect, the opinions of the author present and former employers, SDNP or any other organization the author may be associated with. We do not warrant the correctness of the information provided or its fitness for any purpose.

Last modified: August 13, 2017