# Versteckte Kernelabhängigkeiten

## LinuxTom

Hallo Leute,

um Module bei Änderung eines Kernels zu aktualisieren, gibt es ja

```
module-rebuild
```

Bestimmte Pakete gehen jedoch auch auf den aktuell installierten Kernel:

```
>>> Emerging (1 of 1) sys-fs/cryptsetup-1.1.3-r3

 * cryptsetup-1.1.3.tar.bz2 RMD160 SHA1 SHA256 size ... [ ok ]

 * Package:    sys-fs/cryptsetup-1.1.3-r3

 * Repository: gentoo

 * Maintainer: base-system@gentoo.org

 * USE:  amd64 elibc_glibc kernel_linux multilib nls userland_GNU

 * Determining the location of the kernel source code

 * Found kernel source directory:

 *     /usr/src/linux

 * Found kernel object directory:

 *     /lib/modules/2.6.36-gentoo-r1/build

 * Found sources for kernel version:

 *     2.6.36-gentoo-r1

 * Checking for suitable kernel configuration options...                                                                                                            [ 
```

Wie bekommt man all diese Pakte "zu fassen"?

----------

## franzf

Warum willst du das zu fassen bekommen? cryptsetup prüft nur, ob bestimmte Features im Kernel aktiviert sind (schau ins ebuild unter "pkg_setup"). Wenn die geforderten Features aktiviert sind ist cryptsetup glücklich.

Solltest du die entsprechenden Features mal deaktivieren, merkst du das sofort beim ersten Boot. Dann startest du deinen Failsafe-Fallback-Kernel, begibst dich auf die Fehlersuche, aktivierst alles was nötig ist, baust und installierst den Kernel, rebootest und cryptsetup ist wieder glücklich.

modules-rebuild braucht man nur, um Pakete neu zu bauen, die in /lib/modules/ ein kernel-Modul installieren. Dort gibt es nämlich pro Kernel ein eigenes Directory, bei einem neuen kernel fehlen dort einfach die ganze Module, weshalb z.B. der nvidia-driver nimmer geht, usw.

----------

## LinuxTom

 *franzf wrote:*   

> Warum willst du das zu fassen bekommen?

 

Weil ich vielleicht mal den Kernel anpasse oder aktualisiere, ohne das Paket selber anzufassen.

----------

## franzf

 *LinuxTom wrote:*   

>  *franzf wrote:*   Warum willst du das zu fassen bekommen? 
> 
> Weil ich vielleicht mal den Kernel anpasse oder aktualisiere, ohne das Paket selber anzufassen.

 

Aber dabei bist du dann vorsichtig und kennst deine Spezialeinstellungen.

Du wirst bei verschlüsselten Partitionen kein CRYPT-*** raushauen. Oder ein INOTIFY. usw. Wie gesagt -  du hast hoffentlich einen alten, erprobten Kernel, der dich garantiert ins System bringt. Wenn du tatsächlich elementares aus dem Kernel raushaust, kannst du damit wieder reparieren.

Ein Script, welches dir automatisch alle ebuilds neubaut, welche linux-info.eclass verwenden, kenn ich nicht. Theoretisch durch /var/db/pkg/* greppen, die Kandidaten sammeln und dann ein "emerge" starten. Keine Ahnung, ob einem die portage-api (via python) da direkt Funktionen für liefert - möglich wärs.

----------

## LinuxTom

 *franzf wrote:*   

> ... ob einem die portage-api (via python) da direkt Funktionen für liefert ...

 

Also nichts Fertiges. Demzufolge weiter aufpassen und selbst vielleicht so etwas bauen. Es soll ja nicht kontrolliert werden, ob das Feature im Kernel drin ist, sondern nur die Pakte identifizieren, die in den Kernel schauen. Mal sehen.

Theoretisch sollte es gehen:

```
pkg_setup() {

        local CONFIG_CHECK="~DM_CRYPT ~CRYPTO ~CRYPTO_CBC"

        local WARNING_DM_CRYPT="CONFIG_DM_CRYPT:\tis not set (required for cryptsetup)\n"

        local WARNING_CRYPTO_CBC="CONFIG_CRYPTO_CBC:\tis not set (required for kernel 2.6.19)\n"

        local WARNING_CRYPTO="CONFIG_CRYPTO:\tis not set (required for cryptsetup)\n"

        check_extra_config
```

Habe aber selber noch keine *.eclass geschrieben.

----------

## franzf

 *LinuxTom wrote:*   

> Habe aber selber noch keine *.eclass geschrieben.

 

Du sollst auch keine eigene eclass schreiben  :Very Happy: 

Die Pakete, welche die Linux-Config überprüfen, greifen hier auf die linux-info-eclass zu - /usr/portage/eclass/linux-info.eclass. Wenn diese eingebunden wird, wird sie wohl auch gebraucht.

In /var/db/pkg/ werden die installierten Pakete samt allen Informationen gespeichert. Dort sollte auch was zu den eingebundenen eclasses zu finden sein - Bingo  :Razz: 

```
$ cat /var/db/pkg/sys-fs/cryptsetup-1.1.3-r1/INHERITED

 multilib toolchain-funcs portability eutils versionator linux-info libtool
```

Und so kommst du an alle Pakete:

```
$ grep linux-info /var/db/pkg/*/*/INHERITED
```

Das zerdröseln überlass ich dir  :Smile: 

----------

## LinuxTom

Danke.  :Smile: 

```
grep linux-info /var/db/pkg/*/*/INHERITED | sed 's/^\/var\/db\/pkg\//=/g' | sed -e 's/\/INHERITED.*$//g'
```

----------

