Visit Jeremy's Blog.
Go Back > Forums > Linux Forums > Linux - Distributions > Slackware
User Name
Slackware This Forum is for the discussion of Slackware Linux.


Search this Thread
Old 07-17-2011, 04:18 AM   #1
Registered: Feb 2009
Posts: 328

Rep: Reputation: 127Reputation: 127
slack build binary dependencies in a database

in short: sbbdep

sbbdep is a program that reads the elf header of dynamic linked files found in the given argument.
argument can be
a package file from /var/adm/packages/...
a DESTDIR destination path of make install
a single given binaries/dynamic libraries

as result it prints out, or into a file, the package names the given argument require.

sbbdep scans installed packages, extract some information about dynamic linked binaries and libraries and dumps these infos into a sqlite database
usually sbbdep works fast.
time consuming is only the first where the cache becomes created
this takes about ~? (1 - 2) minutes, of cause, duration depends on the number of cpus and speed of disk io
on other runs than the first sbbdep syncs the cache, this is usually a fast operation (~1sec), even if some packages where undated/removed/installed

using the cache with a sqlite client some custom queries can be done like what is required by pkg or file, what are the dependencies of file xy,....

current state of sbbdep is 0.0.1, the first public release.

of cause I wanted to make some things better, prettier, more documented and so on ...
but before going on holiday, than waiting until Christmas cause work stresses and than an other year comes ..
I place the code now to a public repo.

for me it looks stable enough to release it without stress people that will test/use sbbdep to much with problems.
but there may be some bugs I did not noticed, or better say there will be some bugs like it is always the case in software.
but since sbbdep does not anything critical an can/shall be run as normal user it will not do anything bad

getting and building sbbdep
sbbdep uses 2 other components I have written
the direct URLs for all components are
but these are only of interest for c++ developers

to simplify download and build I have created a 'meta' project that reduce download and build to the following steps:
hg clone 
cd sbbdep_slk 
cmake . 
this will produce a bin directory containing sbbdep.

the slk repo also has some sample sql statements.

Note, the hg command may/will print some key warnings, to get rid of these create a .hgrc file and add
[hostfingerprints] = 81:2b:08:90:dc:d3:71:ee:e0:7c:b4:75:ce:9b:6c:48:94:56:a1:fe
(don't know why I need this on slackware/salix, on other machines I do not need to ad this)

for building, sbbdep requires boost (headers) and cmake
the binary itself has very little dependencies

on Salix
./sbbdep -s --nosync sbbdep
cxxlibs | gcc-g++, file, gcc, glibc, libelf,
on Slackware
./sbbdep --nosync sbbdep 
aaa_elflibs >= 13.37 | gcc >= 4.5.2
aaa_elflibs >= 13.37 | libelf >= 0.8.13
cxxlibs >= 6.0.14 | gcc-g++ >= 4.5.2
file >= 5.05
gcc >= 4.5.2
glibc >= 2.13 | glibc-solibs >= 2.13
so nothing that would not exist on a default slackware/salix installation

to explain the command above:
./sbbdep --help
usage: sbbdep [OPTION]... [QUERY]

 QUERY can be a single binary/library file
              a file from /var/adm/packages
              a package DESTDIR of a slackbuild
 if QUERY is omitted runs only cache synchronise

 if OPTION -c/--cache is omitted, ~/sbbdep.cache will be used

 available options:

  -c,  --cache               cache file to use
                                if this option is omitted 
                                $HOME/sbbdep.cache is used
                                cache must be read/writable

  -f,  --file=[FILENAME]     write output to file FILENAME
                                if this option is omitted 
                                output will go to stdout

  -s,  --short               suppress version information
                                produce a comma separated list of required package names 

  --nosync                   skips synchronise the cache
                                only usefully if cache is up to date
                                after install/update/remove packages, this option should not be used
                                if cache is up to date, QUERY will be a bit faster with this option

  -h,  --help                display this text
Note: I have no multilib setup, so I don'T know how sbbdep will resolve dependencies with 32bit binaries on a 64bit installation.
this is still on my todo list.

future plans:
adding some documentation to sbbdep and the other components
review/work the code
waiting for bug reports to fix them
waiting for feature request to implement them
implement some additional features I have in mind
Old 07-24-2011, 01:28 AM   #2
Registered: Feb 2009
Posts: 328

Original Poster
Rep: Reputation: 127Reputation: 127
tip has been updated
*)sbbdep now handles rpath/runpath info found in elf header for dependency handling
*)added option to query who needs file or packge

./sbbdep --whoneeds /usr/lib64/  
argument could also be package file in /var/adm/packages/

./sbbdep --whoneeds /var/adm/packages/boost-1.45.0-x86_64-1     
of cause this are runtime dependencies, not build dependencies.

the information about dependencies could be much more detailed, like
pkg a, lib a needs libAA from XY , libAB from XZ , ....
then we would see that eg akonadi_control requires boost program options, ...such stuff.
the information therefor is already available within sbbdep, but I need to implement additional cmd parameters and output writers

dependency list generation for packages/files resolves no more correct since it uses rpath/runpath infos.

the new version reqireds to delete existing cache database manually, version info and autoupdate for the cache is on my todo list.

multilib: --whoneeds should work with multilib (untested), query dependencies for packages that contain binaries for both archs will throw an exception cause I check if all files whithing a pkg have the same arch. I need to change this but this has to wait until I have a multilib setup.

Note: some packages, like for example mysql, place their libraries in an on directory, like /usr/lib(64)/mysql.
that the installation script places links into /usr/lib(64), and files linking against a mysql lib look in /usr/lib(64), so they have no rpath/runpath info available.
so these dependencies will not be found by default, the solution is to add the dir /usr/lib64/mysql into the lddir table from sbbdep.cache.
sqlite3 ~/sbbdep.cache
insert into lddir dirname values('/usr/lib64/mysql');
this needs also to be done for other non standard lib directories.
maybe sbbdep will make use of one day, but a situation like the sample of mysql can not be autodetected, and not caring about dirnames would result in incorrect dependencies to packages that brings their own version of library xy.

questions suggestions and feedback are welcome.
1 members found this post helpful.
Old 07-26-2011, 12:17 AM   #3
Registered: Feb 2009
Posts: 328

Original Poster
Rep: Reputation: 127Reputation: 127

sbbdep parses now /etc/ and uses these directories

i was able to auto detect those directories from where links are placed into ld directories
this works all automatically , no user intervention is required.

so the SQL database queries find now all what the linker finds and generation of various dependencies queries between packages/packages files/packages packages/files files/files works fine.

program should now also handle multilib packages, code base therefore is implemented but needs to be tested if the dependencies information for multilib pkgs are correct.
if this is done I will call the prog version rc1

for the directory stuff db schema was updated, so version nr changed to 0.0.3

user documentation and docu about the db schema and how to use it is in progress
1 members found this post helpful.
Old 07-27-2011, 12:15 AM   #4
Registered: Feb 2009
Posts: 328

Original Poster
Rep: Reputation: 127Reputation: 127
multilib installed and checked if sbbdep wokrs, and as far as I am able to validate it until now it works!

this gives me the nice chance to post a new log samles (sync cache) and the output of some dependencies queries
1) output of sync opreation after upgrading to multilib
sync cache 

aaa_elflibs-compat32-13.37-x86_64-7 => installed 
alsa-lib-compat32- => installed 
alsa-oss-compat32-1.0.17-x86_64-1 => installed 
atk-compat32-1.32.0-x86_64-1 => installed 
audiofile-compat32-0.2.7-x86_64-1 => installed 
bzip2-compat32-1.0.6-x86_64-1 => installed 
cairo-compat32-1.10.2-x86_64-2 => installed 
compat32-tools-2.1-noarch-9alien => installed 
cups-compat32-1.4.6-x86_64-1 => installed 
curl-compat32-7.21.4-x86_64-1 => installed 
cxxlibs-compat32-6.0.14-x86_64-1 => installed 
cyrus-sasl-compat32-2.1.23-x86_64-1 => installed 
dbus-compat32-1.4.1-x86_64-1 => installed 
dbus-glib-compat32-0.88-x86_64-1 => installed 
e2fsprogs-compat32-1.41.14-x86_64-1 => installed 
esound-compat32-0.2.41-x86_64-1 => installed 
expat-compat32-2.0.1-x86_64-2 => installed 
fontconfig-compat32-2.8.0-x86_64-1 => installed 
freetype-compat32-2.4.4-x86_64-1 => installed 
gamin-compat32-0.1.10-x86_64-3 => installed 
gcc-4.5.2_multilib-x86_64-2alien => update from gcc-4.5.2-x86_64-2
gcc-g++-4.5.2_multilib-x86_64-2alien => update from gcc-g++-4.5.2-x86_64-2
gcc-gfortran-4.5.2_multilib-x86_64-2alien => update from gcc-gfortran-4.5.2-x86_64-2
gcc-gnat-4.5.2_multilib-x86_64-2alien => update from gcc-gnat-4.5.2-x86_64-2
gcc-java-4.5.2_multilib-x86_64-2alien => update from gcc-java-4.5.2-x86_64-2
gcc-objc-4.5.2_multilib-x86_64-2alien => update from gcc-objc-4.5.2-x86_64-2
gdk-pixbuf2-compat32-2.23.3-x86_64-1 => installed 
glew-compat32-1.5.7-x86_64-1 => installed 
glib2-compat32-2.28.6-x86_64-1 => installed 
glibc-2.13_multilib-x86_64-4alien => update from glibc-2.13-x86_64-4
glibc-i18n-2.13_multilib-x86_64-4alien => update from glibc-i18n-2.13-x86_64-4
glibc-profile-2.13_multilib-x86_64-4alien => update from glibc-profile-2.13-x86_64-4
glibc-solibs-2.13_multilib-x86_64-4alien => update from glibc-solibs-2.13-x86_64-4
glibc-zoneinfo-2.13_multilib-noarch-4alien => update from glibc-zoneinfo-2.13-noarch-4
gnutls-compat32-2.10.5-x86_64-1 => installed 
gst-plugins-base-compat32-0.10.32-x86_64-1 => installed 
gst-plugins-good-compat32-0.10.28-x86_64-2 => installed 
gstreamer-compat32-0.10.32-x86_64-1 => installed 
gtk+2-compat32-2.24.4-x86_64-1 => installed 
hal-compat32-0.5.14-x86_64-3 => installed 
jasper-compat32-1.900.1-x86_64-3 => installed 
lcms-compat32-1.19-x86_64-1 => installed 
lesstif-compat32-0.95.2-x86_64-1 => installed 
libFS-compat32-1.0.3-x86_64-1 => installed 
libICE-compat32-1.0.7-x86_64-1 => installed 
libSM-compat32-1.2.0-x86_64-1 => installed 
libX11-compat32-1.4.3-x86_64-2 => installed 
libXScrnSaver-compat32-1.2.1-x86_64-1 => installed 
libXau-compat32-1.0.6-x86_64-1 => installed 
libXaw-compat32-1.0.9-x86_64-1 => installed 
libXcomposite-compat32-0.4.3-x86_64-1 => installed 
libXcursor-compat32-1.1.11-x86_64-1 => installed 
libXdamage-compat32-1.1.3-x86_64-1 => installed 
libXdmcp-compat32-1.1.0-x86_64-1 => installed 
libXevie-compat32-1.0.3-x86_64-1 => installed 
libXext-compat32-1.2.0-x86_64-1 => installed 
libXfixes-compat32-5.0-x86_64-1 => installed 
libXfont-compat32-1.4.3-x86_64-1 => installed 
libXfontcache-compat32-1.0.5-x86_64-1 => installed 
libXft-compat32-2.2.0-x86_64-1 => installed 
libXi-compat32-1.4.2-x86_64-1 => installed 
libXinerama-compat32-1.1.1-x86_64-1 => installed 
libXmu-compat32-1.1.0-x86_64-1 => installed 
libXp-compat32-1.0.1-x86_64-1 => installed 
libXpm-compat32-3.5.9-x86_64-1 => installed 
libXrandr-compat32-1.3.1-x86_64-1 => installed 
libXrender-compat32-0.9.6-x86_64-1 => installed 
libXres-compat32-1.0.5-x86_64-1 => installed 
libXt-compat32-1.1.1-x86_64-1 => installed 
libXtst-compat32-1.2.0-x86_64-1 => installed 
libXv-compat32-1.0.6-x86_64-1 => installed 
libXvMC-compat32-1.0.6-x86_64-1 => installed 
libXxf86dga-compat32-1.1.2-x86_64-1 => installed 
libXxf86misc-compat32-1.0.3-x86_64-1 => installed 
libXxf86vm-compat32-1.1.1-x86_64-1 => installed 
libart_lgpl-compat32-2.3.21-x86_64-1 => installed 
libdmx-compat32-1.1.1-x86_64-1 => installed 
libdrm-compat32-2.4.23-x86_64-1 => installed 
libelf-compat32-0.8.13-x86_64-2 => installed 
libexif-compat32-0.6.20-x86_64-1 => installed 
libfontenc-compat32-1.1.0-x86_64-1 => installed 
libgcrypt-compat32-1.4.6-x86_64-1 => installed 
libglade-compat32-2.6.4-x86_64-4 => installed 
libgpg-error-compat32-1.9-x86_64-1 => installed 
libgphoto2-compat32- => installed 
libidn-compat32-1.19-x86_64-1 => installed 
libieee1284-compat32-0.2.11-x86_64-2 => installed 
libjpeg-compat32-v8a-x86_64-1 => installed 
libmng-compat32-1.0.10-x86_64-2 => installed 
libmpc-compat32-0.8.2-x86_64-2 => installed 
libpcap-compat32-1.1.1-x86_64-1 => installed 
libpng-compat32-1.4.5-x86_64-1 => installed 
libsndfile-compat32-1.0.24-x86_64-1 => installed 
libtermcap-compat32-1.2.3-x86_64-7 => installed 
libtiff-compat32-3.9.4-x86_64-2 => installed 
libtool-compat32-2.4-x86_64-1 => installed 
libusb-compat32-1.0.8-x86_64-2 => installed 
libxcb-compat32-1.7-x86_64-1 => installed 
libxml2-compat32-2.7.8-x86_64-3 => installed 
libxslt-compat32-1.1.26-x86_64-1 => installed 
mesa-compat32-7.9.2-x86_64-1 => installed 
mpg123-compat32-1.13.3-x86_64-1 => installed 
mysql-compat32-5.1.56-x86_64-1 => installed 
ncurses-compat32-5.9-x86_64-1 => installed 
openldap-client-compat32-2.4.23-x86_64-1 => installed 
openssl-compat32-0.9.8r-x86_64-3 => installed 
openssl-solibs-compat32-0.9.8r-x86_64-3 => installed 
pango-compat32-1.28.4-x86_64-1 => installed 
pixman-compat32-0.20.2-x86_64-1 => installed 
popt-compat32-1.7-x86_64-3 => installed 
qt-compat32-4.7.0_7abde40-x86_64-3 => installed 
readline-compat32-5.2-x86_64-4 => installed 
sane-compat32-1.0.22-x86_64-2 => installed 
sdl-compat32-1.2.14-x86_64-5 => installed 
seamonkey-solibs-compat32-2.1b3-x86_64-2 => installed 
svgalib-compat32-1.9.25-x86_64-2 => installed 
util-linux-compat32-2.19-x86_64-1 => installed 
v4l-utils-compat32-0.8.3-x86_64-2 => installed 
xfce-compat32-4.6.2-x86_64-5 => installed 
zlib-compat32-1.2.5-x86_64-4 => installed
2) a sample with s multilib pkg (that has unresolved dependency)
bash-4.1$ ./sbbdep --nosync /var/adm/packages/qt-compat32-4.7.0_7abde40-x86_64-3 
aaa_elflibs-compat32 >= 13.37 | alsa-lib-compat32 >=
aaa_elflibs-compat32 >= 13.37 | freetype-compat32 >= 2.4.4
aaa_elflibs-compat32 >= 13.37 | gcc >= 4.5.2_multilib
aaa_elflibs-compat32 >= 13.37 | glib2-compat32 >= 2.28.6
aaa_elflibs-compat32 >= 13.37 | libjpeg-compat32 >= v8a
aaa_elflibs-compat32 >= 13.37 | libpng-compat32 >= 1.4.5
aaa_elflibs-compat32 >= 13.37 | libtiff-compat32 >= 3.9.4
aaa_elflibs-compat32 >= 13.37 | zlib-compat32 >= 1.2.5
cxxlibs-compat32 >= 6.0.14 | gcc-g++ >= 4.5.2_multilib
fontconfig-compat32 >= 2.8.0
glibc >= 2.13_multilib | glibc-solibs >= 2.13_multilib
libICE-compat32 >= 1.0.7
libSM-compat32 >= 1.2.0
libX11-compat32 >= 1.4.3
libXext-compat32 >= 1.2.0
libXrender-compat32 >= 0.9.6
libmng-compat32 >= 1.0.10
mesa-compat32 >= 7.9.2
mysql-compat32 >= 5.1.56
openssl-compat32 >= 0.9.8r | openssl-solibs-compat32 >= 0.9.8r
/var/log/packages/qt-compat32-4.7.0_7abde40-x86_64-3 ! not found:
/var/log/packages/qt-compat32-4.7.0_7abde40-x86_64-3 ! not found:
for compair, the 64 bit version of qt
bash-4.1$ time ./sbbdep --nosync  /var/adm/packages/qt-4.7.0_7abde40-x86_64-3 
aaa_elflibs >= 13.37 | alsa-lib >=
aaa_elflibs >= 13.37 | freetype >= 2.4.4
aaa_elflibs >= 13.37 | gcc >= 4.5.2_multilib
aaa_elflibs >= 13.37 | glib2 >= 2.28.6
aaa_elflibs >= 13.37 | libjpeg >= v8a
aaa_elflibs >= 13.37 | libpng >= 1.4.5
aaa_elflibs >= 13.37 | libtiff >= 3.9.4
aaa_elflibs >= 13.37 | zlib >= 1.2.5
cxxlibs >= 6.0.14 | gcc-g++ >= 4.5.2_multilib
fontconfig >= 2.8.0
glibc >= 2.13_multilib | glibc-solibs >= 2.13_multilib
libICE >= 1.0.7
libSM >= 1.2.0
libX11 >= 1.4.3
libXext >= 1.2.0
libXrender >= 0.9.6
libiodbc >= 3.52.7
libmng >= 1.0.10
mesa >= 7.9.2
mysql >= 5.1.56
openssl >= 0.9.8r | openssl-solibs >= 0.9.8r
sqlite >= 3.7.5


real    0m0.149s
user    0m0.092s
sys     0m0.056s

3) who needs sample with mesa, 64 bit and the 32 bit comapt
bash-4.1$ ./sbbdep --nosync --whoneeds /var/adm/packages/mesa-7.9.2-x86_64-1 

bash-4.1$ ./sbbdep --nosync --whoneeds /var/adm/packages/mesa-compat32-7.9.2-x86_64-1 
1 members found this post helpful.
Old 07-27-2011, 11:53 AM   #5
Senior Member
Registered: Sep 2006
Location: Liverpool - England
Distribution: slackware64 13.37 and -current, Dragonfly BSD
Posts: 1,810

Rep: Reputation: 227Reputation: 227Reputation: 227
Thanks for publicising this. I have been working on a very similar project in python which originally built a mysql database as it was much quicker but I changed this to an sqlite3 database a little while ago, very similar to yours, once I figured out how to optimize sqlite3 for speed. Thankfully it's now quicker than the mysql version as it should be. Your database builder is very quick! Looking at the data structures they are remarkably similar to my work so far.

I'm not at all proficient with C++ so am finding it hard working through the source code to analyse your application. Do you run ldd or perhaps,(on my Slackware64 install), to find dependencies or perhaps read the elf headers directly or maybe some other way of getting dependencies? Again - if I were more familiar with C++ I could work this out for myself from the source but unfortunately I'm not.

Thanks again for posting this it's very interesting - I'll be keeping an eye on Bitbucket for any updates you make.
Old 07-27-2011, 12:02 PM   #6
Registered: Dec 2009
Location: Hanover, Germany
Distribution: Gentoo
Posts: 15,411
Blog Entries: 2

Rep: Reputation: 3995Reputation: 3995Reputation: 3995Reputation: 3995Reputation: 3995Reputation: 3995Reputation: 3995Reputation: 3995Reputation: 3995Reputation: 3995Reputation: 3995
Thanks for your great work, your tool is exactly what I am needing, especially the --whoneeds option. I vote to put this excellent program into /extra, even if it is still in development.
Old 07-27-2011, 07:05 PM   #7
Registered: Apr 2010
Location: Lausanne - Switzerland ( Bordeaux - France / Montreal - QC - Canada)
Distribution: Slackware Leet - 32/64bit
Posts: 272

Rep: Reputation: 87

I've been reading your posts for several days. I don't have a 'user' need for that tool (at least for now), but I was thinking it could be very useful to me as a software developer myself: I build statically built applications (a C++ framework allowing closed source commercial application development), and until now it was only based on my own knowledge of my dependencies I included in the framework. I'm not working on my framework for now so I haven't test it, but I guess that your tool could be a great help in testing if there weren't any hidden dependencies in the built binary.

Thank you ! I'll try to give you some feedback on it whenever I'll have a chance to try it on some of my test applications.


Old 07-28-2011, 01:30 PM   #8
Registered: Feb 2009
Posts: 328

Original Poster
Rep: Reputation: 127Reputation: 127
thanks for the feedback!

added a make install target to the sbbdep_slk project
added a README.txt with some additional information , current state here

added a source distribution that is easy to download and build

download and extract ,
cd into sbbdep
cmake .

make install , or use the binary from the bin directory

this should simplify the way to get sbbdep.

development of sbbdep will be continued after 2 or even 3 weeks, with a fresh view to the TODOS
until then, it would help if people test sbbdep and post problem and bug reports,feature requests and/or suggestions, I will implement them if possible.

Last edited by a4z; 07-28-2011 at 10:56 PM. Reason: link to readme updated
1 members found this post helpful.
Old 07-28-2011, 05:55 PM   #9
Alien Bob
Slackware Contributor
Registered: Sep 2005
Location: Eindhoven, The Netherlands
Distribution: Slackware
Posts: 5,190

Rep: Reputation: Disabled
I'll try to create a package for it soon-ish... the "make install" target will certainly help. I hope it will give the program some more coverage.

Old 07-29-2011, 07:44 AM   #10
Alien Bob
Slackware Contributor
Registered: Sep 2005
Location: Eindhoven, The Netherlands
Distribution: Slackware
Posts: 5,190

Rep: Reputation: Disabled
Hm, this does not build on Slackware prior to 13.37...
I am trying on Slackware 13.1 and there I get the following error:
[ 63%] Building CXX object sbbdep/CMakeFiles/sbbdep.dir/src/sbbdep/dynlinked.cpp.o
/home/slackbuilds/sbbdep/build/sbbdep/sbbdep_slk/sbbdep/src/sbbdep/dynlinked.cpp:32:25: error: libelf/gelf.h: No such file or directory
/home/slackbuilds/sbbdep/build/sbbdep/sbbdep_slk/sbbdep/src/sbbdep/dynlinked.cpp:33:27: error: libelf/libelf.h: No such file or directory
Libelf was added on "Mon Oct 18 20:34:23 UTC 2010" to Slackware 13.37.

Old 07-29-2011, 08:42 AM   #11
Registered: Feb 2009
Posts: 328

Original Poster
Rep: Reputation: 127Reputation: 127
this is true, libelf does not exist in salckware < 13.37
the libelf pkg from slackware can be backported to 13.1, that was tested and done by me for writing sbbdep, and I am sure there are also no problems to backport this to an earlier versions.
thought I mentioned that in the OP, but didn't, sorry.

I was pretty surprised when I was looking for lib elf on slackware, there are also different libelf implementations available, the one slackware has now, and an other one developed by Ulrich Drepper, libelf1, which I used for my first version to read elf header, noticeable via the out-commented include path in the src.
there are also some differences in using these libraries, libelf1 seems to have some new methodes/defines...


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off

Similar Threads
Thread Thread Starter Forum Replies Last Post
Unable to build binary RPM DougCM Linux - Software 3 01-16-2011 08:07 AM
Build ImageMagick into a single binary? ceashton Linux - Software 9 04-01-2010 09:28 AM
self build rpm fails with missing dependencies on build host zhjim Linux - Software 1 09-24-2009 08:47 AM
How to figure out what dependencies a binary uses ssnodgra Linux - Software 6 01-13-2006 03:42 PM
How to build one binary for all Redhat systems? mattengland Linux - Software 3 09-11-2005 11:16 PM

All times are GMT -5. The time now is 06:35 PM.

Main Menu
Write for LQ is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration