Aviso: Todo o artigo é de caráter introdutório. Se você for usuário avançado em
Arch Linux, com certeza não precisará lê-lo.
Arch Linux usa pacotes binários que são gerenciados pela ferramenta
Pacman. Esses pacotes binários são compilados de forma otimizada para processadores i686 ou x86_64, mas também podem ser construídos a partir dos códigos-fonte pelo
Arch Build System (ou simplesmente
ABS) que nada mais é que um sistema "ports-like". Com isso você terá a possibilidade de criar pacotes de acordo com sua necessidade específica.
Para instalar o ABS:
# pacman -Sy abs base-devel wget
Antes de criar a árvore ABS, selecione os repositórios (core, extra, community e testing) que não deseja utilizar precedendo-o com sinal de exclamação:
# nano /etc/abs.conf
#
# /etc/abs.conf
#
# the top-level directory of all your PKGBUILDs
[ "$ABSROOT" = "" ] && ABSROOT="/var/abs/"
#
Server to sync from
#
#
SYNCSERVER="rsync.archlinux.org"
#
# The architecture to fetch abs for
# Either i686 or x86_64
#
ARCH="i686"
#
# Pacman mirror list used for syncing via tarball
#
MIRRORLIST="/etc/pacman.d/mirrorlist"
#
# REPOS to be parsed by abs (in this order)
# (prefix a repo with a ! to disable it)
#
# Note: If a repo is removed, it is still fetched!
# Repos must be preceded with a ! to prevent fetching
#
REPOS=(core extra community !testing)
Para criar a árvore:
# abs
Obs.: Pelo menos uma vez por semana recomendo que atualize a árvore ABS.
A árvore ABS fica em
/var/abs, que contém os subdiretórios para seus respectivos ABS (pacotes). Em cada ABS você encontrará um arquivo
PKGBUILD que, como você provavelmente já sabe, é um script que contém as instruções para baixar e criar o pacote, ativado pelo comando
makepkg.
Para visualizar os ABS, por exemplo, do repositório community, execute:
# ls /var/abs/community/ | more
Após ter criado a árvore você poderá compilar todos os pacotes do Arch Linux a partir dos seus fontes. Antes, porém, seria uma boa prática criar um diretório no home do seu usuário para executar a compilação. Dessa forma evita-se possíveis alterações prejudiciais à árvore ABS:
mkdir -p ~/abs
Para exemplificar, compilaremos o Firefox.
cp -r /var/abs/extra/firefox ~/abs/
$ cd ~/abs/firefox/
Dê uma olhada no PKGBUILD e, se nunca viu um antes, tente entender o que vê. É muito didático:
nano PKGBUILD
# $Id: PKGBUILD 49172 2009-08-04 10:57:05Z jgc $
# Contributor: Jakub Schmidtke <sjakub@gmail.com>
pkgname=firefox
pkgver=3.5.2
pkgrel=1
_xulver=1.9.1.2
pkgdesc="Standalone web browser from mozilla.org"
arch=(i686 x86_64)
license=('MPL' 'GPL' 'LGPL')
depends=("xulrunner=${_xulver}" 'desktop-file-utils')
makedepends=('zip' 'pkgconfig' 'diffutils' 'libgnomeui>=2.24.1' 'python')
replaces=('firefox3')
install=firefox.install
url="http://www.mozilla.org/projects/firefox"
source=(http://releases.mozilla.org/pub/mozilla.org/firefox/releases/${pkgver}/source/firefox-${pkgver}-source.tar.bz2
mozconfig
firefox.desktop
firefox-safe.desktop
mozilla-firefox-1.0-lang.patch
browser-defaulturls.patch
firefox-version.patch)
md5sums=('136867f95c86f3988b7f825e874b85de'
'd672df11a6e16a5dec68428b00bfb810'
'68cf02788491c6e846729b2f2913bf79'
'5e68cabfcf3c021806b326f664ac505e'
'bd5db57c23c72a02a489592644f18995'
'346d74ec560e7bbf453c02ff21f4b868'
'1dd9a10df0b9e4cf332eadc326d78e07')
build() {
cd "${srcdir}/mozilla-1.9.1"
patch -Np1 -i "${srcdir}/mozilla-firefox-1.0-lang.patch" || return 1
patch -Np0 -i "${srcdir}/browser-defaulturls.patch" || return 1
patch -Np1 -i "${srcdir}/firefox-version.patch" || return 1
cp "${srcdir}/mozconfig" .mozconfig
unset CFLAGS
unset CXXFLAGS
export LDFLAGS="-Wl,-rpath,/usr/lib/firefox-3.5"
make -j1 -f client.mk build MOZ_MAKE_FLAGS="${MAKEFLAGS}" || return 1
make -j1 DESTDIR="${pkgdir}" install || return 1
rm -f ${pkgdir}/usr/lib/firefox-3.5/libjemalloc.so
install -m755 -d ${pkgdir}/usr/share/applications
install -m755 -d ${pkgdir}/usr/share/pixmaps
install -m644 ${srcdir}/mozilla-1.9.1/browser/branding/unofficial/default48.png ${pkgdir}/usr/share/pixmaps/firefox.png || return 1
install -m644 ${srcdir}/firefox.desktop ${pkgdir}/usr/share/applications/ || return 1
install -m644 ${srcdir}/firefox-safe.desktop ${pkgdir}/usr/share/applications/ || return 1
}
Modifique os parâmetros de acordo com sua necessidade, se julgar necessário.
Obs.: informações introdutórias sobre o PKGBUILD serão abordadas mais a frente.
Crie o pacote:
makepkg
Aguarde o download, a compilação e o empacotamento. O resultado será um pacote como formato pkg.tar.gz. Basta instalá-lo normalmente:
# pacman -U nomedopacote.pkg.tar.gz
Obs.: Você pode aplicar certos parâmetros ao makepkg, como por exemplo o "-i" para instalar o pacote automaticamente. Para outros parâmetros use o comando "makepkg --help".
Agora entenderemos um pouquinho sobre o PKGBUILD.