Eucalyptus

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

we got 1.6.2 out, and for now we don't have fedora RPMs. With this
release, as I mentioned, we tried to simplify the way we handle
contributions and we opened up some community wiki part of our web site.

We didn't make it in time to have RPMs for Fedora, but with this release
we are having nightly builds, and we can get the RPMs in there easily
enough and perhaps once they pass long term testing, we can promote them
to the domwnload page.

In this regards I have few questions: we depend on libvirt to run
instances, and we are running into some problems. The first one is: how do
we give permission to the user eucalyptus to run instances? I think you
are using policykit, so how do we configure it correctly?

Also, we need to tell qemu-kvm to drop the console output in a file close
to where we run the instance, but we are having permissions problems. I
think that qemu is running as the user'qemu', so for now the quick fix was
to create the file in the right place, add the 'eucalyptus' user to the
'qemu' group and then start the instance. Is there a more elegant way?

Thanks for all feedback!

graziano

PS: I attach here the spec file after we did a first pass. Comments are
always welcomed of course.

On Thu, Feb 11, 2010 at 10:24:28AM -0600, Garrett Holmstrom wrote:
> On Thu, Feb 11, 2010 at 1:46 AM, graziano obertelli
> <graziano at eucalyptus.com> wrote:
> > So, the reason's why Conflict is there, is beacause we need all the
> > eucalyptus pacakges to be the same version. In our testing it happened
> > that some older versions were left behind, making the experience failry
> > miserable (failure modes in this case are very frustratring to chase). I
> > can remove it, but how do I ensure that all eucalyptus pacakges installed
> > are of the same version?
> 
> Just have every subpackage Require the main one with a versioned dependency:
> 
> Requires: %{name} = %{version}-%{release}
> 
> When one tries to update the main package the older subpackages'
> dependencies will be unsatisfied, causing yum to pull in the new ones
> to fix the problem.  Conversely, when a subpackage is updated it will
> require the newer version of the main package and pull it in.
> 
> > Does %global exists also in CentOS?
> 
> Yes.
> 
> > Hopefully I will have sometime tomorrow and over the weekend to work on
> > the packaging and writing a better spec file (there are still quite a few
> > point you mentioned that I have not tackled). Is that ok for me to post
> > the spec file (once I get something which works) on this list to have more
> > feedback?
> 
> I certainly wouldn't mind.  Then again it isn't difficult to pull up
> the current version in Bazaar either.
> 
> The euca2ools spec file from the tarballs doesn't work on Fedora at
> all because it simply assumes the machine runs CentOS with Python 2.5.
>  Perhaps I can try working on a version that works but is still
> relatively portable.
> _______________________________________________
> cloud mailing list
> cloud at lists.fedoraproject.org
> https://admin.fedoraproject.org/mailman/listinfo/cloud

-- 
Graziano Obertelli
Eucalyptus Systems, Inc.

130 Castilian St. Goleta, CA 93117
Office: 805-845-8000
www.eucalyptus.com
-------------- next part --------------
%global is_suse %(test -e /etc/SuSE-release && echo 1 || echo 0)
%global is_centos %(grep CentOS /etc/redhat-release > /dev/null && echo 1 || echo 0)
%global is_fedora %(grep Fedora /etc/redhat-release > /dev/null && echo 1 || echo 0)
%global euca_dhcp    dhcp
%global euca_httpd   httpd
%global euca_curl    curl
%global euca_libcurl curl-devel
%global euca_build_req vconfig, wget, rsync
%if %is_suse
%global euca_dhcp    dhcp-server
%global euca_httpd   apache2
%global euca_libvirt libvirt, xen-tools
%global euca_hypervisor xen
%global euca_curl    libcurl4
%global euca_libcurl libcurl-devel
%global euca_bridge  br0
%global euca_java    java-sdk >= 1.6.0
%global euca_build_req vlan
%endif
%if %is_centos
%global euca_libvirt libvirt >= 0.6
%global euca_hypervisor xen
%global euca_bridge  xenbr0
%global euca_java    java-sdk >= 1.6.0
%endif
%if %is_fedora
%global euca_libvirt libvirt
%global euca_hypervisor kvm
%global euca_bridge  br0
%global euca_java    java-devel >= 1:1.6.0
%endif

Summary:       Elastic Utility Computing Architecture
Name:          eucalyptus
Version:       1.6.2
Release:       1
License:       GPLv3
Group:         Applications/System
BuildRequires: gcc, make, %{euca_libvirt}-devel, %{euca_libvirt}, %{euca_libcurl}, ant, ant-nodeps, %{euca_java}, euca-axis2c >= 1.6.0, euca-rampartc >= 1.3.0
Requires:      %{euca_build_req}

Source:        http://eucalyptussoftware.com/downloads/releases/eucalyptus-%{version}-src.tar.gz
URL:           http://open.eucalyptus.com

%description
EUCALYPTUS is an open source service overlay that implements elastic
computing using existing resources. The goal of EUCALYPTUS is to allow
sites with existing clusters and server infrastructure to co-host an
elastic computing service that is interface-compatible with Amazon's EC2.

This package contains the common parts: you will need to install either
eucalyptus-cloud, eucalyptus-cluster-contrller or
eucalyptus-node-controller (or all of them).

%package common-java
Summary:      Elastic Utility Computing Architecture - ws java stack 
Requires:     eucalyptus = 1.6.2, %{euca_java}, lvm2
Group:        Applications/System

%description common-java
EUCALYPTUS is an open source service overlay that implements elastic
computing using existing resources. The goal of EUCALYPTUS is to allow
sites with existing clusters and server infrastructure to co-host an
elastic computing service that is interface-compatible with Amazon's EC2.

This package contains the java WS stack.

%package walrus
Summary:      Elastic Utility Computing Architecture - walrus
Requires:     eucalyptus-common-java = 1.6.2, %{euca_java}, lvm2
Group:        Applications/System

%description walrus
EUCALYPTUS is an open source service overlay that implements elastic
computing using existing resources. The goal of EUCALYPTUS is to allow
sites with existing clusters and server infrastructure to co-host an
elastic computing service that is interface-compatible with Amazon's EC2.

This package contains storage component for your cloud: images and buckets
are handled by walrus. Tipically this package is installed alongside the
cloud controller.

%package storage-controller
Summary:      Elastic Utility Computing Architecture - storage controller
Requires:     eucalyptus-common-java = 1.6.2, %{euca_java}, lvm2, vblade
Group:        Applications/System

%description storage-controller
EUCALYPTUS is an open source service overlay that implements elastic
computing using existing resources. The goal of EUCALYPTUS is to allow
sites with existing clusters and server infrastructure to co-host an
elastic computing service that is interface-compatible with Amazon's EC2.

This package contains the storage controller part of eucalyptus which
handles the elastic blocks for a given cluster. Tipically you install it
alongside the cluster-controller.

%package cloud
Summary:      Elastic Utility Computing Architecture - cloud controller
Requires:     eucalyptus-common-java = 1.6.2, %{euca_java}, lvm2
Group:        Applications/System

%description cloud
EUCALYPTUS is an open source service overlay that implements elastic
computing using existing resources. The goal of EUCALYPTUS is to allow
sites with existing clusters and server infrastructure to co-host an
elastic computing service that is interface-compatible with Amazon's EC2.

This package contains the cloud controller part of eucalyptus: the cloud
controller needs to be reachable by both the cluster controller and from
the cloud clients.

%package cluster-controller
Summary:      Elastic Utility Computing Architecture - cluster controller
Requires:     eucalyptus = 1.6.2, eucalyptus-gather-logs = 1.6.2, %{euca_httpd}, euca-axis2c >= 1.6.0, euca-rampartc >= 1.3.0, iptables, bridge-utils, %{euca_dhcp}, vtun
Group:        Applications/System

%description cluster-controller
EUCALYPTUS is an open source service overlay that implements elastic
computing using existing resources. The goal of EUCALYPTUS is to allow
sites with existing clusters and server infrastructure to co-host an
elastic computing service that is interface-compatible with Amazon's EC2.

This package contains the cluster controller part of eucalyptus: it
handles multiple node controllers.

%package node-controller
Summary:      Elastic Utility Computing Architecture - node controller
Requires:     eucalyptus = 1.6.2, eucalyptus-gather-logs = 1.6.2, %{euca_httpd}, euca-axis2c >= 1.6.0, euca-rampartc >= 1.3.0, bridge-utils, %{euca_libvirt}, %{euca_curl}, %{euca_hypervisor}
Group:        Applications/System

%description node-controller
EUCALYPTUS is an open source service overlay that implements elastic
computing using existing resources. The goal of EUCALYPTUS is to allow
sites with existing clusters and server infrastructure to co-host an
elastic computing service that is interface-compatible with Amazon's EC2.

This package contains the node controller part of eucalyptus: this is the
components that handles the instances.

%package gather-logs
Summary:      Elastic Utility Computing Architecture - log service
Requires:     eucalyptus = 1.6.2, %{euca_httpd}, euca-axis2c >= 1.6.0, euca-rampartc >= 1.3.0
Group:        Applications/System

%description gather-logs
EUCALYPTUS is an open source service overlay that implements elastic
computing using existing resources. The goal of EUCALYPTUS is to allow
sites with existing clusters and server infrastructure to co-host an
elastic computing service that is interface-compatible with Amazon's EC2.

This package contains the internal log service of eucalyptus.

%prep
%setup -n eucalyptus-%{version}-src

%build
export DESTDIR=$RPM_BUILD_ROOT
./configure --with-axis2=/opt/packages/axis2-1.4 --with-axis2c=/opt/euca-axis2c --enable-debug --prefix=/
cd clc
make deps
cd ..
make 2> err.log > out.log

%install
export DESTDIR=$RPM_BUILD_ROOT
make install
#CWD=`pwd`
#cd $RPM_BUILD_ROOT
#ls usr/share/eucalyptus/*jar | sed "s/^/\//" > $CWD/jar_list
#cd $CWD

%clean
export DESTDIR=$RPM_BUILD_ROOT
make uninstall
[ ${RPM_BUILD_ROOT} != "/" ] && rm -rf ${RPM_BUILD_ROOT}
rm -rf $RPM_BUILD_DIR/eucalyptus-%{version}

%files
%doc LICENSE INSTALL README CHANGELOG
/etc/eucalyptus/eucalyptus.conf
/var/lib/eucalyptus/keys
/var/log/eucalyptus
/var/run/eucalyptus
/usr/share/eucalyptus/add_key.pl
/usr/share/eucalyptus/euca_ipt
/usr/share/eucalyptus/populate_arp.pl
/usr/share/eucalyptus/euca_upgrade
/usr/lib/eucalyptus/euca_rootwrap
/usr/lib/eucalyptus/euca_mountwrap
/etc/bash_completion.d/euca_conf
/usr/sbin/euca_conf
/usr/sbin/euca_sync_key
/usr/sbin/euca_killall
/etc/eucalyptus/httpd.conf
/etc/eucalyptus/eucalyptus-version
#/usr/share/eucalyptus/connect_iscsitarget.pl
#/usr/share/eucalyptus/disconnect_iscsitarget.pl
#/usr/share/eucalyptus/get_iscsitarget.pl

#%files common-java -f jar_list
%files common-java
/etc/init.d/eucalyptus-cloud
/etc/eucalyptus/cloud.d
/var/lib/eucalyptus/db
/var/lib/eucalyptus/modules
/var/lib/eucalyptus/webapps
/usr/lib/eucalyptus/liblvm2control.so
/usr/sbin/eucalyptus-cloud
/usr/share/eucalyptus/*jar*

%files cloud

%files walrus

%files storage-controller

%files cluster-controller
/opt/euca-axis2c/services/EucalyptusCC
/etc/init.d/eucalyptus-cc
/etc/eucalyptus/vtunall.conf.template

%files node-controller
/usr/share/eucalyptus/gen_libvirt_xml
/usr/share/eucalyptus/gen_kvm_libvirt_xml
/usr/share/eucalyptus/partition2disk
/usr/share/eucalyptus/get_xen_info
/usr/share/eucalyptus/get_sys_info
/usr/share/eucalyptus/detach.pl
/usr/sbin/euca_test_nc
/opt/euca-axis2c/services/EucalyptusNC
/etc/init.d/eucalyptus-nc

%files gather-logs
/opt/euca-axis2c/services/EucalyptusGL

%pre
if [ "$1" = "2" ]; 
then
	# let's see where we installed
	EUCADIRS="/ /opt/eucalyptus/"
	for i in $EUCADIRS
	do
	    if [ -e $i/etc/eucalyptus/eucalyptus-version ]; then
		EUCADIR=$i
		break
	    fi
	done
	cd $EUCADIR

	# stop all old services
	if [ -x etc/init.d/eucalyptus-cloud ];
	then
		 etc/init.d/eucalyptus-cloud stop
	fi
	if [ -x etc/init.d/eucalyptus-cc ]; 
	then
		 etc/init.d/eucalyptus-cc stop
	fi
	if [ -x etc/init.d/eucalyptus-nc ]; 
	then
		 etc/init.d/eucalyptus-nc stop
	fi

	# save a backup of important data
	DATESTR=`date +%s`
	echo /root/eucalyptus.backup.$DATESTR > /tmp/eucaback.dir
	mkdir -p /root/eucalyptus.backup.$DATESTR
	cd /root/eucalyptus.backup.$DATESTR
	EUCABACKUPS=""
	for i in $EUCADIR/var/lib/eucalyptus/keys/ $EUCADIR/var/lib/eucalyptus/db/ $EUCADIR/etc/eucalyptus/eucalyptus.conf $EUCADIR/etc/eucalyptus/eucalyptus-version
	do
	    if [ -e $i ]; then
		EUCABACKUPS="$EUCABACKUPS $i"
	    fi
	done
	tar cf -  $EUCABACKUPS 2>/dev/null | tar xf - 2>/dev/null
	cd $EUCADIR
fi

%post
# we need a eucalyptus user
if ! getent passwd eucalyptus > /dev/null ; then
%if %is_suse
	groupadd eucalyptus
	useradd -M eucalyptus -g eucalyptus
%endif
%if %is_centos
	adduser -M eucalyptus 
%endif
fi

if [ "$1" = "1" ]; 
then
	# let's configure eucalyptus
	/usr/sbin/euca_conf -d / --instances /usr/local/eucalyptus/ -hypervisor %{euca_hypervisor} -bridge %{euca_bridge}
fi
if [ "$1" = "2" ];
then
	/usr/sbin/euca_conf -d / --instances /usr/local/eucalyptus/ -hypervisor %{euca_hypervisor} -bridge %{euca_bridge}
	if [ -f /tmp/eucaback.dir ]; then
	    BACKDIR=`cat /tmp/eucaback.dir`
	    if [ -d "$BACKDIR" ]; then
		/usr/share/eucalyptus/euca_upgrade --old $BACKDIR --new / --conf --keys
		/usr/sbin/euca_conf -setup
	    fi
	fi
fi

# final setup and set the new user
/usr/sbin/euca_conf -setup -user eucalyptus

%post common-java
if [ "$1" = "2" ];
then
    if [ -f /tmp/eucaback.dir ]; then
	BACKDIR=`cat /tmp/eucaback.dir`
	if [ -d "$BACKDIR" ]; then
	    /usr/share/eucalyptus/euca_upgrade --old $BACKDIR --new / --db
	    /usr/sbin/euca_conf -setup
	fi
    fi
fi
chkconfig --add eucalyptus-cloud

%post cloud
/usr/sbin/euca_conf --enable cloud
%if %is_centos
if [ -e /etc/sysconfig/system-config-securitylevel ];
then
	if ! grep 8773:tcp /etc/sysconfig/system-config-securitylevel > /dev/null ; 
	then
		echo "--port=8773:tcp" >> /etc/sysconfig/system-config-securitylevel
		echo "--port=8443:tcp" >> /etc/sysconfig/system-config-securitylevel
	fi
fi
%endif
# upgrade
#if [ "$1" = "2" ];
#then
#	if [ -f /tmp/eucaback.dir ]; then
#	    BACKDIR=`cat /tmp/eucaback.dir`
#	    if [ -d "$BACKDIR" ]; then
#		/usr/share/eucalyptus/euca_upgrade --old $BACKDIR --new / --db
#		/usr/sbin/euca_conf -setup
#	    fi
#	fi

#	cd /
#	[ -e /opt/eucalyptus/etc/eucalyptus/eucalyptus-version ] && cd /opt/eucalyptus
#	if [ -e var/lib/eucalyptus/db/eucalyptus_volumes.properties ];
#	then
#		# if groovy was installed on the same shell the
#		# environment can be wrong: we need to souce groovy env
#		if [ -e /etc/profile.d/groovy.sh ];
#		then
#			. /etc/profile.d/groovy.sh
#		fi
#		/usr/share/eucalyptus/euca_upgrade --old /opt/eucalyptus --new / --db
#	fi
#fi

%post walrus
/usr/sbin/euca_conf --enable walrus

%post storage-controller
/usr/sbin/euca_conf --enable sc

%post cluster-controller
chkconfig --add eucalyptus-cc
%if %is_centos
if [ -e /etc/sysconfig/system-config-securitylevel ];
then
	if ! grep 8774:tcp /etc/sysconfig/system-config-securitylevel > /dev/null ; 
	then
		echo "--port=8774:tcp" >> /etc/sysconfig/system-config-securitylevel
	fi
fi
%endif
#if [ "$1" = "2" ];
#then
#	if [ -f /tmp/eucaback.dir ]; then
#	    BACKDIR=`cat /tmp/eucaback.dir`
#	    if [ -d "$BACKDIR" ]; then
#		echo /usr/share/eucalyptus/euca_upgrade --old $BACKDIR --new / --conf --keys
#	    fi
#	fi
#fi

%post node-controller
chkconfig --add eucalyptus-nc
%if %is_centos
if [ -e /etc/sysconfig/system-config-securitylevel ];
then
	if ! grep 8775:tcp /etc/sysconfig/system-config-securitylevel > /dev/null ; 
	then
		echo "--port=8775:tcp" >> /etc/sysconfig/system-config-securitylevel
	fi
fi
%endif
%if %is_suse
if [ -e /etc/PolicyKit/PolicyKit.conf ]; 
then
	if ! grep eucalyptus /etc/PolicyKit/PolicyKit.conf > /dev/null ;
	then
		sed -i '/<config version/ a <match action="org.libvirt.unix.manage">\n   <match user="eucalyptus">\n      <return result="yes"/>\n   </match>\n</match>' /etc/PolicyKit/PolicyKit.conf
	fi
fi
%endif
#if [ "$1" = "2" ];
#then
#    if [ -f /tmp/eucaback.dir ]; then
#	BACKDIR=`cat /tmp/eucaback.dir`
#	if [ -d "$BACKDIR" ]; then
#	    echo /usr/share/eucalyptus/euca_upgrade --old $BACKDIR --new / --conf --keys
#	fi
#    fi
#fi


%postun
# in case of removal let's try to clean up the best we can
if [ "$1" = "0" ];
then
	rm -rf /var/log/eucalyptus
	rm -rf /etc/eucalyptus/http*
fi

%preun cloud
if [ "$1" = "0" ];
then
%if %is_centos
	if [ -e /etc/sysconfig/system-config-securitylevel ];
	then
		sed -i '/^--port=8773/ d' /etc/sysconfig/system-config-securitylevel
		sed -i '/^--port=8443/ d' /etc/sysconfig/system-config-securitylevel
	fi
%endif
	[ -x /usr/sbin/euca_conf ] && /usr/sbin/euca_conf --disable cloud
	if [ -e /etc/init.d/eucalyptus-cloud -a /etc/eucalyptus/eucalyptus.conf ];
	then 
		/etc/init.d/eucalyptus-cloud restart || true
	fi
fi


%preun walrus
if [ "$1" = "0" ];
then
	[ -x /usr/sbin/euca_conf ] && /usr/sbin/euca_conf --disable walrus
	if [ -e /etc/init.d/eucalyptus-cloud ];
	then 
		/etc/init.d/eucalyptus-cloud restart || true
	fi
fi

%preun storage-controller
if [ "$1" = "0" ];
then
	[ -x /usr/sbin/euca_conf ] && /usr/sbin/euca_conf --disable sc
	if [ -e /etc/init.d/eucalyptus-cloud -a /etc/eucalyptus/eucalyptus.conf ];
	then 
		/etc/init.d/eucalyptus-cloud restart || true
	fi
fi

%preun common-java
if [ "$1" = "0" ];
then
    if [ -f /etc/eucalyptus/eucalyptus.conf ]; then
	/etc/init.d/eucalyptus-cloud stop
    fi
    chkconfig --del eucalyptus-cloud
    rm -f /var/lib/eucalyptus/services
fi

%preun cluster-controller
if [ "$1" = "0" ];
then
    if [ -f /etc/eucalyptus/eucalyptus.conf ]; then
	/etc/init.d/eucalyptus-cc cleanstop
    fi
    chkconfig --del eucalyptus-cc
%if %is_centos
	if [ -e /etc/sysconfig/system-config-securitylevel ];
	then
		sed -i '/^--port=8774/ d' /etc/sysconfig/system-config-securitylevel
	fi
%endif
fi

%preun node-controller
if [ "$1" = "0" ];
then
    if [ -f /etc/eucalyptus/eucalyptus.conf ]; then
	/etc/init.d/eucalyptus-nc stop
    fi
    chkconfig --del eucalyptus-nc
%if %is_centos
    if [ -e /etc/sysconfig/system-config-securitylevel ];
    then
	sed -i '/^--port=8775/ d' /etc/sysconfig/system-config-securitylevel
    fi
%endif
fi

%changelog
* Fri Feb 12 2010 Eucalyptus Systems <support at open.eucalyptus.com>
- 1.6.2
- Thanks to Garrett Holmstrom and cloud at lists.fedoraproject.org for
  helping with the RPM pacakging
- Re-worked upgrade path for RPM install
- Re-worked spec file to honor DESTDIR

* Thu Nov 5 2009 Eucalyptus Systems <support at open.eucalyptus.com>
- 1.6.1
- install in / instead of /opt/eucalyptus

* Mon Jun 15 2009 eucalyptus systems <support at open.eucalyptus.com>
- 1.5.2

* Thu Apr 16 2009 mayhem group <support at open.eucalyptus.com>
- 1.5.1
- Elastic Block Store (EBS) support (volumes & snapshots) 
- Better Java installation checking
- New command-line administration: euca_conf -addcluster ... -addnode ...
- Non-root user deployment of Eucalyptus
- Binary packages for more distributions (Ubuntu et al) 
- Cloud registration with Rightscale (from admin's 'Credentials' tab)
- New configuration options for Walrus
- Better screening of usernames
- Fixed account confirmation glitches 

* Mon Jan  5 2009 mayhem group <support at open.eucalyptus.com>
- 1.4
- Added new networking subsystem that no longer depends on VDE
- Added support for elastic IP assignment and security using the 'MANAGED' 
  networking mode
- Added Walrus: a Amazon S3 interface compatible storage manager. Walrus
  handles storage of user data as well as filesystem images, kernels, and
  ramdisks.
- Support for new operations: reboot instance and get console output.
- Revamped logging throughout, with five levels a la log4j.

* Thu Aug 28 2008 mayhem group <support at open.eucalyptus.com>
- 1.3

* Mon Jul 28 2008 mayhem group <support at open.eucalyptus.com>
- 1.2
- Removed cloud, cluster controller and node controller and created their
  own packages.
- Added the possibility of installing Eucalyptus from RPMs (without ROCKS).
- Added WS-security for internal communication
- Added URL Query Interface for interacting with Eucalyptus
- Cluster Controller improvements:
   - Instance caching added to improve performance under
     certain conditions
   - Thread locks removed to improve performance
   - NC resource information gathered asynchronously to
     improve scheduler performance
- Network control improvements:
   - Added ability to configure 'public' instance interface
     network parameters (instead of hardcoded 10. network)
   - Lots of reliability changes
- Cloud Controller improvements:
   - Pure in-memory database
   - Image registration over WS interface
   - Improved build procedure
- Web interface improvements:
    - For all users (query interface credentials, listing of
      available images)
    - For the administrator (addition, approval, disabling,
      and deletion of users; disabling of images)
- Numerous bug fixes, improving stability and performance.
   In particular, but not limited to:
   - Recovering Cloud Controller system state
   - Timeout-related error reporting
   - Slimmer log files, with timestamps


[Index of Archives]     [Fedora General Discussion]     [Older Fedora Users Archive]     [Fedora Advisory Board]     [Fedora Security]     [Fedora Devel Java]     [Fedora Legacy]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Mentors]     [Fedora Package Announce]     [Fedora Package Review]     [Fedora Music]     [Fedora Packaging]     [Centos]     [Fedora SELinux]     [Coolkey]     [Yum Users]     [Big List of Linux Books]     [Yosemite News]     [Linux Apps]     [KDE Users]     [Fedora Art]     [Fedora Docs]     [Asterisk PBX]

  Powered by Linux