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 */