Gentoo uClibc Chroot Umgebung

Howto Pakete mit der Gentoo uClibc Chroot Umgebung erzeugen

Voraussetzungen? Welche Distros kommen in Frage?

32bit linux 2.6 - sollte ausreichen..

Basic Setup

Zunächst ziehen wir das uClibc Stage3 Paket der aktuellen Gentooversion (zu finden unter /releases/x86/<version>/stages/experimental/stage3-x86-uclibc-<version>.tar.bz2 auf allen Gentoo Mirrors), sowie ein Snapshot des Portages (unter /snapshots/portage-latest.tar.bz2).

 # cd /tmp
 # wget http://de-mirror.org/distro/gentoo/releases/x86/2008.0_beta2/stages/experimental/stage3-x86-uclibc-2008.0_beta2.tar.bz2
 # wget http://de-mirror.org/distro/gentoo/snapshots/portage-latest.tar.bz2

(Gentoo Mirrors: "Erzeuge Verzeichnis für das Chroot und entpacke das Stagefile in dieses Verzeichnis, sowie den Portage Snapshot nach usr.

 # mkdir /opt/uclibc
 # cd /opt/uclibc
 # tar xjfv /tmp/stage3-x86-uclibc-hardened-2008.0_beta2.tar.bz2
 # cd usr
 # tar xjfv /tmp/portage-latest.tar.bz2

Kopiere die resolv.conf des Systems nach /opt/uclibc/etc und wechsele in die Chroot Umgebung.

 # cp /etc/resolv.conf /opt/uclibc/etc/
 # chroot /opt/uclibc

Setzte das Profil des Portage auf uclibc/x86

 # ln -snf ../usr/portage/profiles/uclibc/x86 /etc/make.profile 

Füge folgende Variablen der /etc/make.conf hinzu.

UCLIBC_CPU="386" 
PKGDIR="/root/i386-uclibc-packages" 
FEATURES="buildpkg ccache" 
USE="" 

Das "buildpkg"-Feature sorgt dafür, dass Gentoo neben der Installation innerhalb der Chroot zusätzlich Binärpakete baut und diese im per PKGDIR definierten Verzeichnis ablegt.

Installiere "ccache", aktualisiere das Portage, sowie aktualisiere das System.

 # emerge -av ccache 
 # emerge --sync
 # emerge -uDNav world 
 # etc-update 

(Bei etc-update können getrost alle alten Configfiles überschrieben werden)

Anpassungen für OpenSLX (veraltet)

Hinweis

Für nbd-client/hwinfo existieren modifizierte Versionen, die nicht mehr von glib2/iconv abhängig sind. Sie sind unter /openslx-src-tools im SVN zu finden.

WICHTIG

Nur für hwinfo, sowie dessen Abhängigkeiten! Am besten vorher ein Backup des Systems machen und danach wieder herstellen, denn mit libiconv macht das System insbesondere der GCC Probleme.

/etc/packages.keywords

dev-libs/glib 
dev-libs/libiconv **
sys-apps/hwinfo
sys-apps/915resolution

/usr/portage/profiles/uclibc/package.mask: kommentiere dev-libs/libiconv aus (Funktioniert so weit, trotz des Kommentars :)).

..
# breaks gcc and such
# dev-libs/libiconv
..

* WICHTIG - mit JEDEM emerge --sync wird diese Datein überschrieben *

/usr/portage/profiles/uclibc/package: <dev-libs/glib-2.5 auskommentieren

..
# glib-2.x requires working locale/iconv which
# isn't available atm in uclibc
#<dev-libs/glib-2.5
..

* WICHTIG - mit JEDEM emerge --sync wird diese Datein überschrieben *

Sonstige Hinweise
uclibc Update to 0.9.30 =
Wenn das Update mit folgender Fehlermeldung
make: *** [include/bits/sysnum.h":http://www.gentoo.org/main/en/mirrors2.xml]) Error 127

abbricht, fehlt das Paket mktemp.

Compile-Fehler durch gettext/iconv (libintl_gettext)

Problem besteht z.B. bei "eject" (kommt als Abhängigkeit von "hal" mit.)
Lösung:

 # LDADD=-lintl emerge <paketname>

Compilefehler durch fehlende sys/pci.h

Lösung:
Entweder ersetzen durch die eines anderen Systems oder selbst anlegen:

/usr/include/sys/pci.h

/* Copyright (C) 1997 Free Software Foundation, Inc.
   This file is part of the GNU C Library.

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, write to the Free
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   02111-1307 USA.  */

#ifndef _SYS_PCI_H
#define _SYS_PCI_H      1

/* We use the constants from the kernel.  */
#include <linux/pci.h>

#endif /* sys/pci.h */