First of all, there are a few packages which crop up and I keep having to double check that I have installed them. I have, because they form part of the core system. They are:
Installed with LFS
zlib
libuuid
Installed Basics
zip
unzip
lzma
openssl
Installed with Xorg:
XML::Parser
Intltool
libpng (and yes I applied the patch to allow it to be used with Firefox)
Fontconfig
Pixman
Installed with GTK:
Cairo
Pango
PCRE
tiff
jpeg
I do not need to worry about those again, they are already installed. So what is not, and what is the best order to install these extras in? I think first of all we will install some programs that do not depend on any of the other packages we are about to dump into the system. SQLite is a database program and startup-notification makes the pointer do the hourglass thing while another program is starting up. For some programs, unbelievably this is actually a prerequisite.
I am going to stick all of these source files in a separate folder in sources - this is just to show that they are not part of the structure of LFS, and neither are they the Applications that I will end up running.
mkdir /sources/dependencies cd /sources/dependencies wget http://ftp.gnome.org/pub/gnome/sources/startup-notification/0.9/startup-notification-0.9.tar.bz2 wget http://sqlite.org/sqlite-amalgamation-3.7.3.tar.gz cd /dev/shm tar -xjvf /sources/dependencies/startup-notification-0.9.tar.bz2 cd startup-notification-0.9 ./configure --prefix=/usr && make $CORES_TO_USE make install && install -v -m644 -D doc/startup-notification.txt /usr/share/doc/startup-notification-0.9/startup-notification.txt cd .. rm -rvf startup-notification-0.9 tar -xzvf /sources/dependencies/sqlite-amalgamation-3.7.3.tar.gz cd sqlite-3.7.3 CFLAGS="-g -O2 -DSQLITE_SECURE_DELETE -DSQLITE_ENABLE_UNLOCK_NOTIFY=1" ./configure --prefix=/usr --enable-threadsafe --enable-readline --enable-dynamic-extensions && make $CORES_TO_USE make install cd .. rm -rvf sqlite-3.7.3
Lets move on to a biggie which is the Python language. A number of applications use this, as do some of the intermediate libraries.
cd /sources/dependencies wget http://www.python.org/ftp/python/2.6.4/Python-2.6.4.tar.bz2 wget http://www.linuxfromscratch.org/patches/blfs/svn/Python-2.6.4-bdb_4.8-1.patch wget http://docs.python.org/ftp/python/doc/2.6/python-2.6-docs-html.tar.bz2 cd /dev/shm tar -xjvf /sources/dependencies/Python-2.6.4.tar.bz2 cd Python-2.6.4 sed -i "s/ndbm_libs = \[\]/ndbm_libs = ['gdbm', 'gdbm_compat']/" setup.py patch -Np1 -i /sources/dependencies/Python-2.6.4-bdb_4.8-1.patch ./configure --prefix=/usr --enable-shared make $CORES_TO_USE make install chmod -v 755 /usr/lib/libpython2.6.so.1.0 install -v -m755 -d /usr/share/doc/Python-2.6.4/html tar --strip-components=1 --no-same-owner --no-same-permissions -C /usr/share/doc/Python-2.6.4/html -xvf /sources/dependencies/python-2.6-docs-html.tar.bz2 cat >> /etc/profile.d/35-python.sh << "EOF" export PYTHONDOCS=/usr/share/doc/Python-2.6.4/html EOF cd .. rm -rvf Python-2.6.4
Right, now it is time for some hot library action:
cd /sources/dependencies wget http://ftp.gnome.org/pub/gnome/sources/libIDL/0.8/libIDL-0.8.14.tar.bz2 wget http://xmlsoft.org/sources/libxml2-2.7.6.tar.gz wget http://xmlsoft.org/sources/libxslt-1.1.26.tar.gz wget ftp://sourceware.org/pub/libffi/libffi-3.0.8.tar.gz wget http://ftp.gnome.org/pub/gnome/sources/libglade/2.6/libglade-2.6.4.tar.bz2 cd /dev/shm tar -xjvf /sources/dependencies/libIDL-0.8.14.tar.bz2 cd libIDL-0.8.14 ./configure --prefix=/usr && make $CORES_TO_USE make install cd .. rm -rvf libIDL-0.8.14 tar -xzvf /sources/dependencies/libxml2-2.7.6.tar.gz cd libxml2-2.7.6 ./configure --prefix=/usr make $CORES_TO_USE make install cd .. rm -rvf libxml2-2.7.6 tar -xzvf /sources/dependencies/libxslt-1.1.26.tar.gz cd libxslt-1.1.26 ./configure --prefix=/usr && make $CORES_TO_USE make install cd .. rm -rvf libxslt-1.1.26 tar -xzvf /sources/dependencies/libffi-3.0.8.tar.gz cd libffi-3.0.8 ./configure --prefix=/usr && make $CORES_TO_USE make install cd .. rm -rvf libffi-3.0.8 tar -jxvf /sources/dependencies/libglade-2.6.4.tar.bz2 cd libglade-2.6.4 ./configure --prefix=/usr && make $CORES_TO_USE make install cd .. rm -rvf libglade-2.6.4
Still on the libraries front, we installed Glib, Cairo, Pango and GTK. Some applications need GTK to be able to speak C++ so we need to install the following crossover libraries (the libsigc++ is needed for glibmm). Note that this project has taken so long that I am now out of date with my version of glib. I had to update it before I could install glibmm. I also had to update gtk+2 and ATK, but not cairo or pango. I will write up a new GTK+2 installation post to bring the installation up to date.
cd /sources/dependencies wget http://cairographics.org/releases/cairomm-1.6.2.tar.gz wget http://ftp.gnome.org/pub/gnome/sources/libsigc++/2.2/libsigc++-2.2.8.tar.bz2 wget http://ftp.gnome.org/pub/gnome/sources/glibmm/2.24/glibmm-2.24.2.tar.bz2 wget http://ftp.gnome.org/pub/gnome/sources/pangomm/2.26/pangomm-2.26.2.tar.bz2 wget http://ftp.gnome.org/pub/gnome/sources/gtkmm/2.20/gtkmm-2.20.3.tar.bz2 cd /dev/shm tar -xzvf /sources/dependencies/cairomm-1.6.2.tar.gz cd cairomm-1.6.2 ./configure --prefix=/usr && make $CORES_TO_USE make install cd .. rm -rvf cairomm-1.6.2 tar -xjvf /sources/dependencies/libsigc++-2.2.8.tar.bz2 cd libsigc++-2.2.8 ./configure --prefix=/usr && make $CORES_TO_USE make install cd .. rm -rvf libsigc++-2.2.8 tar -xjvf /sources/dependencies/glibmm-2.24.2.tar.bz2 cd glibmm-2.24.2 ./configure --prefix=/usr && make $CORES_TO_USE make install cd .. rm -rvf glibmm-2.24.2 tar -xjvf /sources/dependencies/pangomm-2.26.2.tar.bz2 cd pangomm-2.26.2 ./configure --prefix=/usr && make $CORES_TO_USE make install cd .. rm -rvf pangomm-2.26.2 tar -xjvf /sources/dependencies/gtkmm-2.20.3.tar.bz2 cd gtkmm-2.20.3 ./configure --prefix=/usr && make $CORES_TO_USE make install cd .. rm -rvf gtkmm-2.20.3
The next set are modules which plug in to the Python and give it access to GTK.
cd /sources/dependencies wget http://ftp.gnome.org/pub/gnome/sources/gobject-introspection/0.6/gobject-introspection-0.6.14.tar.bz2 wget http://ftp.gnome.org/pub/gnome/sources/pygobject/2.21/pygobject-2.21.3.tar.bz2 wget http://cairographics.org/releases/pycairo-1.8.8.tar.gz wget http://ftp.gnome.org/pub/GNOME/sources/pygtk/2.17/pygtk-2.17.0.tar.bz2 wget http://downloads.sourceforge.net/pyxml/PyXML-0.8.4.tar.gz wget http://ftp.gnome.org/pub/gnome/sources/gtksourceview/2.10/gtksourceview-2.10.4.tar.bz2 wget http://ftp.gnome.org/pub/gnome/sources/pygtksourceview/2.10/pygtksourceview-2.10.1.tar.bz2 cd /dev/shm tar -xjvf /sources/dependencies/gobject-introspection-0.6.14.tar.bz2 cd gobject-introspection-0.6.14 ./configure --prefix=/usr --disable-tests && make $CORES_TO_USE make install cd .. rm -rvf gobject-introspection-0.6.14 tar -xjvf /sources/dependencies/pygobject-2.21.3.tar.bz2 cd pygobject-2.21.3 ./configure --prefix=/usr make $CORES_TO_USE make install cd .. rm -rvf pygobject-2.21.3 tar -xzvf /sources/dependencies/pycairo-1.8.8.tar.gz cd pycairo-1.8.8 ./configure --prefix=/usr make $CORES_TO_USE make install cd .. rm -rvf pycairo-1.8.8 tar -xjvf /sources/dependencies/pygtk-2.17.0.tar.bz2 cd pygtk-2.17.0 ./configure --prefix=/usr make $CORES_TO_USE make install cd .. rm -rvf pygtk-2.17.0 tar -xzvf /sources/dependencies/PyXML-0.8.4.tar.gz cd PyXML-0.8.4 python setup.py build python setup.py install && install -v -m644 doc/man/xmlproc_*.1 /usr/share/man/man1 && install -v -m755 -d /usr/share/doc/PyXML-0.8.4 && cp -v -R doc demo test /usr/share/doc/PyXML-0.8.4 && install -v -m644 README* /usr/share/doc/PyXML-0.8.4 cd .. rm -rvf PyXML-0.8.4 tar -xjvf /sources/dependencies/gtksourceview-2.10.4.tar.bz2 cd gtksourceview-2.10.4 ./configure --prefix=/usr && make $CORES_TO_USE make install cd .. rm -rvf gtksourceview-2.10.4 tar -xjvf /sources/dependencies/pygtksourceview-2.10.1.tar.bz2 cd pygtksourceview-2.10.1 ./configure --prefix=/usr --disable-docs && make $CORES_TO_USE make install cd .. rm -rvf pygtksourceview-2.10.1
Sticking with the previous theme, we also need to install some modules for Perl:
cd /sources/dependencies wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/Archive-Zip-1.20.tar.gz wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/IO-Compress-Base-2.005.tar.gz wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/Compress-Raw-Bzip2-2.005.tar.gz wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/IO-Compress-Bzip2-2.005.tar.gz wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/Compress-Raw-Zlib-2.005.tar.gz wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/IO-Compress-Zlib-2.005.tar.gz wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/perl-modules/Compress-Zlib-2.005.tar.gz cd /dev/shm tar -xzvf /sources/dependencies/IO-Compress-Base-2.005.tar.gz cd IO-Compress-Base-2.005 perl Makefile.PL && make && make install cd .. rm -rvf IO-Compress-Base-2.005 tar -xzvf /sources/dependencies/Compress-Raw-Bzip2-2.005.tar.gz cd Compress-Raw-Bzip2-2.005 perl Makefile.PL && make && make install cd .. rm -rvf Compress-Raw-Bzip2-2.005 tar -xzvf /sources/dependencies/IO-Compress-Bzip2-2.005.tar.gz cd IO-Compress-Bzip2-2.005 perl Makefile.PL && make && make install cd .. rm -rvf IO-Compress-Bzip2-2.005 tar -xzvf /sources/dependencies/Compress-Raw-Zlib-2.005.tar.gz cd Compress-Raw-Zlib-2.005 sed -i -e "s|BUILD_ZLIB\s*= True|BUILD_ZLIB = False|" -e "s|INCLUDE\s*= ./zlib-src|INCLUDE = /usr/include|" -e "s|LIB\s*= ./zlib-src|LIB = /usr/lib|" config.in perl Makefile.PL && make && make install cd .. rm -rvf Compress-Raw-Zlib-2.005 tar -xzvf /sources/dependencies/IO-Compress-Zlib-2.005.tar.gz cd IO-Compress-Zlib-2.005 perl Makefile.PL && make && make install cd .. rm -rvf IO-Compress-Zlib-2.005 tar -xzvf /sources/dependencies/Compress-Zlib-2.005.tar.gz cd Compress-Zlib-2.005 perl Makefile.PL && make && make install cd .. rm -rvf Compress-Zlib-2.005 tar -xzvf /sources/dependencies/Archive-Zip-1.20.tar.gz cd Archive-Zip-1.20 perl Makefile.PL && make && make install cd .. rm -rf Archive-Zip-1.20
Now we need some applications which are regularly relied on:
cd /sources/dependencies wget ftp://ftp.gnu.org/gnu/which/which-2.20.tar.gz wget http://curl.haxx.se/download/curl-7.20.0.tar.bz2 cd /dev/shm tar -xzvf /sources/dependencies/which-2.20.tar.gz cd which-2.20 ./configure --prefix=/usr && make $CORES_TO_USE make install cd .. rm -rvf which-2.20 tar -xjvf /sources/dependencies/curl-7.20.0.tar.bz2 cd curl-7.20.0 ./configure --prefix=/usr make $CORES_TO_USE make install find docs -name "Makefile*" -o -name "*.1" -o -name "*.3" | xargs rm install -v -d -m755 /usr/share/doc/curl-7.20.0 cp -v -R docs/* /usr/share/doc/curl-7.20.0 cd .. rm -rvf curl-7.20.0
And some C++ stuff which I am a little in the dark about.
cd /sources/dependencies wget http://downloads.sourceforge.net/boost/boost-jam-3.1.17.tgz wget http://downloads.sourceforge.net/boost/boost_1_37_0.tar.bz2 cd /dev/shm tar -xzvf /sources/dependencies/boost-jam-3.1.17.tgz cd boost-jam-3.1.17 ./build.sh cd bin.linux* && cp -v bjam /usr/bin cd .. rm -rvf boost-jam-3.1.17 tar -xjvf /sources/dependencies/boost_1_37_0.tar.bz2 cd boost_1_37_0 ./configure --prefix=/usr --with-toolset=gcc --with-bjam=/usr/bin/bjam && make $CORES_TO_USE make install && ln -sfnv boost-1_37/boost /usr/include/boost cd .. rm -rvf boost_1_37_0
Some security libraries (and a stand alone SQLite database to support them:
cd /sources/dependencies
wget http://ftp.mozilla.org/pub/mozilla.org/nspr/releases/v4.8.6/src/nspr-4.8.6.tar.gz
wget http://www.linuxfromscratch.org/patches/blfs/svn/nspr-4.8.6-pkgconfig-1.patch
wget http://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/NSS_3_12_4_RTM/src/nss-3.12.4.tar.gz
wget http://svn.cross-lfs.org/svn/repos/patches/nss/nss-3.12.4-fixes-1.patch
wget http://cross-lfs.org/~jciccone/nss-3.12-r5-config.in
cd /dev/shm
tar -xzvf /sources/dependencies/nspr-4.8.6.tar.gz
cd nspr-4.8.6
patch -Np1 -i /sources/dependencies/nspr-4.8.6-pkgconfig-1.patch &&
cd mozilla/nsprpub &&
./configure --prefix=/usr --with-mozilla --with-pthreads &&
make $CORES_TO_USE
make install &&
cp -v -LR dist/include/nspr /usr/include &&
rm -v -f /usr/bin/{prerr.properties,compile-et.pl}
cd ../../..
rm -rvf nspr-4.8.6
tar -xzvf /sources/dependencies/nss-3.12.4.tar.gz
cd nss-3.12.4
patch -Np0 -i /sources/dependencies/nss-3.12.4-fixes-1.patch &&
sed -i 's@\$(MKSHLIB) -o@\$(MKSHLIB) \$(LDFLAGS) -o@g' mozilla/security/coreconf/rules.mk &&
for dir in mozilla/security/{coreconf,dbm,nss}; do
make -C $dir BUILD_OPT=1 PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 NSPR_INCLUDE_DIR=$(pkg-config --variable=includedir nspr) NSPR_LIB_DIR=$(pkg-config --variable=libdir nspr) FREEBL_NO_DEPEND=1 || break
done
for file in libsoftokn3.so libfreebl3.so libnss3.so libnssutil3.so libssl3.so libsmime3.so libnssckbi.so libnssdbm3.so; do
install -m755 mozilla/dist/*.OBJ/lib/${file} /usr/lib
done
for file in libcrmf.a libnssb.a libnssckfw.a; do
install -m644 mozilla/dist/*.OBJ/lib/${file} /usr/lib
done
for file in certutil cmsutil crlutil modutil pk12util signtool signver ssltap; do
install -m755 mozilla/dist/*.OBJ/bin/${file} /usr/bin
done
install -m755 -d /usr/include/nss3
install -m644 mozilla/dist/public/nss/*.h /usr/include/nss3 &&
ln -sfv nss3 /usr/include/nss
cat > /usr/lib/pkgconfig/nss.pc << "EOF"
prefix=/usr
exec_prefix=/usr/bin
libdir=/usr/lib
includedir=/usr/include/nss3
Name: NSS
Description: Network Security Services
Version: 3.12.4
Requires: sqlite3 nspr >= 4.8
Libs: -L${libdir} -lssl3 -lsmime3 -lnss3 -lnssutil3
Cflags: -I${includedir}
EOF
chmod 644 /usr/lib/pkgconfig/nss.pc
ln -sfv nss.pc /usr/lib/pkgconfig/mozilla-nss.pc
install -v -m755 /sources/dependencies/nss-3.12-r5-config.in /usr/bin/nss-config &&
sed -i -e "s/@MOD_MAJOR_VERSION@/3/" -e "s/@MOD_MINOR_VERSION@/12/" -e "s/@MOD_PATCH_VERSION@/3/" -e "s/@prefix@/\/usr/" /usr/bin/nss-config
cd ..
rm -rvf nss-3.12.4Lastly I am going to install some Java software including, stunningly, Java. Download the Java source from this link into the /sources/extras folder. Then run these commands:
cd /dev/shm
chmod +x /sources/extras/jdk-6u21-linux-i586.bin
/sources/extras/jdk-6u21-linux-i586.bin
cd jdk1.6.0_21
install -v -m755 -d /opt/jdk-6u21
mv -v * /opt/jdk-6u21
chown -v -R root:root /opt/jdk-6u21
ln -v -sf xawt/libmawt.so /opt/jdk-6u21/jre/lib/i386/
cd ..
sed -i 's@XINERAMA@FAKEEXTN@g' /opt/jdk-6u21/jre/lib/i386/xawt/libmawt.so
ln -v -nsf jdk-6u21 /opt/jdk
cat >> /etc/profile.d/30-jdk.sh << "EOF"
# Begin /etc/profile.d/30-jdk.sh
# Set JAVA_HOME directory
JAVA_HOME=/opt/jdk
# Adjust PATH
pathappend ${JAVA_HOME}/bin PATH
# Auto Java CLASSPATH
# Copy jar files to, or create symlinks in this directory
AUTO_CLASSPATH_DIR=/usr/lib/classpath
pathprepend . CLASSPATH
for dir in `find ${AUTO_CLASSPATH_DIR} -type d 2>/dev/null`; do
pathappend $dir CLASSPATH
done
export JAVA_HOME CLASSPATH
unset AUTO_CLASSPATH_DIR
unset dir
# End /etc/profile.d/30-jdk.sh
EOF
source /etc/profileJUnit is not, as you may be forgiven for assuming, a boy band. It is, instead, a small Java application that allows various tests to be run on other Java applications, such as Apache Ant which is a Java based alternative to [make] and OpenOffice.org, amongst others, is going to use it to compile.
cd /sources/dependencies
wget http://downloads.sourceforge.net/junit/junit4.8.1.zip
wget http://anduin.linuxfromscratch.org/sources/BLFS/svn/a/apache-ant-1.8.1-src.tar.bz2
cd /dev/shm
unzip /sources/dependencies/junit4.8.1.zip
cd junit4.8.1
install -v -m755 -d /usr/share/{,doc/}junit-4.8.1 &&
chown -R root:root . &&
cp -v -R junit* org /usr/share/junit-4.8.1 &&
cp -v -R *.html *doc /usr/share/doc/junit-4.8.1
export CLASSPATH=$CLASSPATH:/usr/share/junit-4.8.1/junit-4.8.1.jar:/usr/share/junit-4.8.1
cd ..
rm -rvf junit4.8.1
tar -jxvf /sources/dependencies/apache-ant-1.8.1-src.tar.bz2
cd apache-ant-1.8.1
sed -i 's|${dist.dir}/etc|/etc/ant|' build.xml &&
sed -i 's|/etc/ant.conf|/etc/ant/ant.conf|' src/script/ant &&
cp -v /usr/share/junit-4.8.1/junit-4.8.1.jar lib/optional/junit.jar
./build.sh -Ddist.dir=/opt/ant-1.8.1 dist &&
ln -v -sf /etc/ant /opt/ant-1.8.1/etc &&
ln -v -sf ant-1.8.1 /opt/ant
cd ..
rm -rvf apache-ant-1.8.1
Thank you! I found you through the Dependency Hell post, trying to install PyGTK, little suspecting that only TINY EXACT VERSION INCREMENTS had any prayer of working. I'm going to have to read through the rest of this blog to see if you've tackled Nautilus, because that is giving me hairballs, too (mostly "libunique-1.0" which seems to be unable to build because unique-1.0 isn't found in the lib path. sigh.)
ReplyDelete