Hint detailing the use of the pacman package manager in LFS
x vedejas
xvedejas at gmail.com
Sun Mar 22 19:45:14 MDT 2009
Turns out there was a tiny issue with my hint, I fixed it really quick. And
here attached is the fixed hint.
Thanks,
Xander Vedejas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://linuxfromscratch.org/pipermail/hints/attachments/20090322/c601c602/attachment.html
-------------- next part --------------
AUTHOR: Xander Vedejas <xvedejas at gmail.com>
DATE: 2008-03-22
LICENSE: GNU Free Documentation License Version 1.2
SYNOPSIS: Using the Pacman Package Manager to manage the LFS build.
DESCRIPTION:
Pacman is the advanced package manager used in distros such as Arch Linux, Chakra, and Frugalware. It is extremely handy for LFS builders due to its pkgbuild system, which automates compiling and package creation. To use pacman with LFS, pacman needs to be ready before part three. This hint explains what dependencies are necessary and how to compile them, as well as how to continue with the LFS build process, creating pacman packages along the way.
This hint has been tested with LFS development version SVN-20090306.
ATTACHMENTS:
PREREQUISITES:
You need to have built an LFS system up to part III before this hint is applicable. If you have already started part III, this hint will also not work.
HINT:
To build Pacman, these additional dependencies are required:
* attr ftp://oss.sgi.com/projects/xfs/cmd_tars/attr_2.4.43-1.tar.gz
* bzip2 http://www.bzip.org/1.0.5/bzip2-1.0.5.tar.gz
* zlib http://www.zlib.net/zlib-1.2.3.tar.bz2
* libarchive http://people.freebsd.org/~kientzle/libarchive/src/libarchive-2.4.17.tar.gz
* libdownload http://black-flag.co.uk/files/lfs/libdownload-1.3.tar.gz
* openssl http://www.openssl.org/source/openssl-0.9.8g.tar.gz
and http://www.linuxfromscratch.org/patches/blfs/6.3/openssl-0.9.8g-fix_manpages-1.patch
* fakeroot http://ftp.de.debian.org/debian/pool/main/f/fakeroot/fakeroot_1.11.tar.gz
* And yes, pacman itself ftp://ftp.archlinux.org/other/pacman/pacman-3.2.2.tar.gz
We will install these to the /tools/ directory.
* Installing Attr
sed -i Makefile \
-e '/autoconf/d' \
-e 's at default: $(CONFIGURE)@default:@'
sed -i "/AC_OUTPUT/i\AC_PROG_LIBTOOL" configure.in
cp -vf install-sh{,.orig}
libtoolize -f -i
cp -vf install-sh{.orig,}
aclocal -I m4
autoconf
./configure --prefix=/ --exec-prefix=/ --sbindir=/tools/sbin \
--bindir=/tools/sbin --libdir=/tools/lib --libexecdir=/tools/lib --includedir=/tools/include \
--mandir=/tools/share/man --datadir=/tools/share
make DEBUG=-DNDEBUG LIBTOOL="$PWD/libtool"
make LIBTOOL=$PWD/libtool install install-dev install-lib
chmod 755 -v /tools/lib/libattr.so.1.1.0
rm -v /tools/lib/libattr.{,l}a
* Installing Bzip2
make
make PREFIX=/tools install
* Installing Zlib
./configure --prefix=/tools --shared --libdir=/tools/lib
make
make install
rm -v /tools/lib/libz.so
ln -sfv /tools/lib/libz.so.1.2.3 /tools/lib/libz.so
make clean
./configure --prefix=/tools
make
make install
chmod -v 644 /tools/lib/libz.a
* Installing Libarchive
./configure --prefix=/tools
make
make install
* Installing Libdownload
make
make prefix=/tools install
* Installing Openssl
patch -Np1 -i ../openssl-0.9.8g-fix_manpages-1.patch
./config --openssldir=/tools/etc/ssl --prefix=/tools shared
make MANDIR=/tools/share/man
make MANDIR=/tools/share/man install
cp -v -r certs /tools/etc/ssl
install -v -d -m755 /tools/share/doc/openssl-0.9.8g
cp -v -r doc/{HOWTO,README,*.{txt,html,gif}} \
/tools/share/doc/openssl-0.9.8g
* Installing Fakeroot
./configure --prefix=/tools
make
make install
* Installing Pacman
./configure --prefix=/tools
make
make install
* Continuing with LFS part III
Now, when you compile each package in part III, you will want to write a PKGBUILD script.
Here is how you would make a PKGBUILD for the linux headers:
pkgname=linuxheaders
pkgver=2.6.28.7
pkgrel=1
pkgdesc="The Linux API Headers expose the kernel's API for use by Glibc."
arch=(`uname -m`)
url="http://www.kernel.org/"
license=('GPL')
groups=('base')
source=(http://www.kernel.org/pub/linux/kernel/v2.6/linux-$pkgver.tar.bz2)
md5sums=()
build() {
cd $srcdir/linux-$pkgver
make mrproper
make headers_check
make INSTALL_HDR_PATH=dest headers_install
mkdir -p $pkgdir/usr/
cp dest/include $pkgdir/usr/ -r
}
* For Glibc
pkgname=glibc
pkgver=2.9
pkgrel=1
pkgdesc="The Glibc package contains the main C library. This library provides the basic routines for allocating memory, searching directories, opening and closing files, reading and writing files, string handling, pattern matching, arithmetic, and so on."
arch=(`uname -m`)
url="http://www.gnu.org/"
license=('GPL')
groups=('base')
depends=(linuxheaders)
install=$pkgname.install
source=(glibc-build.tar.bz2)
md5sums=()
build() {
cd $srcdir/glibc-build
make install_root='$pkgdir/' install || return 1
}
* For Zlib
pkgname=zlib
pkgver=1.2.3
pkgrel=1
pkgdesc="A compression/decompression Library"
arch=(`uname -m`)
license=('custom:zlib')
url="http://www.zlib.net/"
groups=('base')
depends=('glibc')
source=("http://zlib.net/${pkgname}-${pkgver}.tar.bz2")
md5sums=()
build() {
cd ${srcdir}/$pkgname-$pkgver
./configure --prefix=/usr --shared
make || return 1
make install prefix=${pkgdir}/usr || return 1
chmod 644 ${pkgdir}/usr/lib/libz.a
grep -A 24 '^ Copyright' zlib.h > license.txt
install -D license.txt ${pkgdir}/usr/share/licenses/zlib/license.txt
}
Normally in the build() section:
Keep the prefix the same (usually --prefix=/usr when configuring). But on the "make install" command, add "DESTDIR=${pkgdir}". Notice that this is not the case for the kernel headers, glibc, or zlib (this is why their PKGBUILD files have been included) but is the normal way to set it up for most packages.
To make this package, save the PKGBUILD file as PKGBUILD. Make sure you have the sources in the directory, and execute "makepkg -g --asroot" to obtain md5sum files. Once you've edited the PKGBUILD file to include the md5sums necessary, make the package with "makepkg --asroot". To make sure everything installed correctly in the package directory, you might try extracting the package (warning: do not extract in the root filesystem). Finally, install with "pacman -U /path/to/package.pkg.tar.gz".
It is advisable to make a pacman package for each package built in part III. It is also good practice to save all of your PKGBUILD files for later reference.
* For more Information
http://wiki.archlinux.org/index.php/Pacman
http://wiki.archlinux.org/index.php/ABS_PKGBUILD_Explained
http://wiki.archlinux.org/index.php/The_Arch_package_making_HOW-TO_-_with_guidelines
ACKNOWLEDGEMENTS:
Thanks to Judd Vinet <jvinet at zeroflux.org>, for making the amazing pacman package manager.
CHANGELOG:
[2008-03-22]
* Initial hint.
More information about the hints
mailing list