Ultimi commenti
- RedSend » Blog Archive » Faceyourmanga si rinnova e gli americani attaccano :) on Face Your Manga
- Aumentare la dimensione della barra dei segnalibri in Firefox 3 « MARCORAI’S BLOG (http://marcorai.wordpress.com) on Barre dei segnalibri multiple in firefox
- RedSend » Blog Archive » Database completo regioni-province-comuni on Tutte le provincie italiane in un .sql
- raphè on Disabilitare preview di SNAP
- Musikele on Disabilitare preview di SNAP
- Lupin on Gentoo linux & dell xps m1330: lettore impronte digitali
- raphè on Gentoo linux & dell xps m1330: lettore impronte digitali
- Lupin on Gentoo linux & dell xps m1330: lettore impronte digitali
Random Posts
Tags Cloud
Archivio
- August 2008 (11)
- July 2008 (17)
- June 2008 (5)
- May 2008 (7)
- April 2008 (9)
- March 2008 (11)
- February 2008 (5)
- January 2008 (12)
- December 2007 (19)
- November 2007 (36)
- October 2007 (18)
- September 2007 (16)
- August 2007 (13)
- July 2007 (21)
- June 2007 (13)
- May 2007 (7)
- April 2007 (4)
- March 2007 (10)
- February 2007 (4)
- January 2007 (3)
- December 2006 (5)
- November 2006 (4)
- October 2006 (10)
- September 2006 (7)
- August 2006 (3)
- July 2006 (3)
- June 2006 (6)
- May 2006 (2)
- April 2006 (7)
- March 2006 (2)
- February 2006 (3)
- January 2006 (20)
- December 2005 (10)
- November 2005 (14)
- October 2005 (6)
- September 2005 (9)
- July 2005 (1)
8th
AUG
Driver fuori da Gentoo!!!
Posted by deepred | Filed under Linux, Programming
Sottolineo già da queste prime righe che questo articolo si rivolge esclusivamente ad utenti Gentoo!!!
Problema: il mio nuovo computer ha una scheda ethernet della Realtek RTL8168. Durante l’installazione scopro che questa scheda non è supportata dal kernel Linux (2.6.21). Poco male, penso, i driver saranno nel Portage: e invece no. I driver per questa scheda di rete sono fuori da Gentoo. Girando per Internet trovo comunque i driver linux sul sito della Realtek, li scarico, li installo e tutto è ok! O quasi! Nel senso che trattandosi di un driver questo deve essere installato ogni volta che si ricompila il kernel. Gentoo, per ovviare al problema di dover ricordarsi tutti i moduli esterni e reinstallarli, offre un tool module-rebuild che provvede a fare ciò. Ma module-rebuild funziona solo per driver che sono presenti nel Portage e il driver della mia scheda di rete non c’è!!! Come devo fare?
Soluzione: Creare una ebuild (uno script che permette di installare un pacchetto con emerge, ndr) e aggiungerla al database di module-rebuild.
Per la prima parte della soluzione ho provveduto ad aprire il mio PORTAGE_OVERLAY e dentro ho inserito la porzione di portage tree presente qui. Siccome ho utilizzato una nuova categoria (net-eth) non ancora nel Portage, ho dovuto aggiungere questa al file /usr/portage/categories.
Per aggiungerla a module-rebuild nulla è stato più semplice: è bastato digitare il comando $ module-rebuild add net-eth/r8168-0.1_alpha1.
E per altri driver fuori da Gentoo?
Sebbene la soluzione proposta sia di validità generale, affinchè sia possibile inserire nel Portage il proprio driver è necessario costruire correttamente l’ebuild. Cercherò in breve di spiegare i passi da compiere per ottenere questo risultato, illustrando a titolo di esempio quanto fatto da me per il driver suddetto.
- All’interno del proprio PORTAGE_OVERLAY creare una cartella che indichi la categoria (net-eth nel mio caso), quindi al suo interno una cartella che indica il pacchetto (r8168 nel mio caso).
- Nella cartella creata genereare il file {nome_pacchetto}-{versione}_{stato}{num}, dove {nome_pacchetto} è il nome anche della directory contenitrice, {versione} è la versione del pacchetto a disposizione, {stato} è usato per indicare informazioni aggiuntive com “alpha” o “beta” version o release canidate (”rc”) (seguite eventualmente da un numero). Quindi nel mio caso un nome accettabile era r8168-0.1_alpha1, anche se sarebbe stato più corretto (attenendosi alla versione del driver presente sul sito) il nome r8168-8.002.00_alpha1.
- Per scrivere da 0 l’ebuild bisogna cominciare dall’header: questo può essere recuperato dal file /usr/portage/header.txt.
- In secondo luogo bisogna settare le variabili necessarie: SLOT=”0″, LICENSE (indicare la licenza con cui sono forniti i driver), KEYWORDS (solitamente i fornitori del driver indicano che tipo di architeetture sono supportate), DESCRIPTION, SRC_URI (dove scaricare i driver), HOMEPAGE, IUSE (potrebbe rimanere vuoto). Se sono richieste particolari dipendenze potrebbero essere espresse attraverso le variabili DEPEND e RDEPEND. Infine, bisogna indicare la variabile S, cioè il nome della cartella all’interno del quale bisognerà lavorare: la cosa più semplice potrebbe essere scomppattare il driver, analizzare il nome della directory creata ed impostare S=${WORKDIR}/nome_directory. Nel mio caso quindi ho impostato S=${WORKDIR}/r8168-8.002.00
- Come installare tale driver? per prima cosa leggete il readme contenuto all’interno del file scompattato. Questo conterrà le istruzioni necessarie all’installazione. Possiamo dividere queste istruzioni in 3 macrogruppi: istruzione di compilazione (prima del make install), istruzioni di installazione (make install e simili), istruzioni post-installazione (dopo il make install). Nel mio caso al primo gruppo apparteneva il comando make clean modules, al secondo make install, al terzo depmod -a.
- La suddivisione al punto precedente è necessaria per capire dove inserire i comandi all’interno dell’ebuild. le instruzioni di compilazione all’interno di src_compile(), le istruzioni di installazione all’interno di src_install() e le eventuali istruzioni post-installazione in pkg_postinst().
- Una attenzione particolare è riservata a make install: quando viene inserito nell’ebuild dovrà essere aggiunto il parametro DESTDIR=${D}. In questo modo il pacchetto sarà installato nella sandbox e solo dopo nella fase di merging nel sistema. Questo, come nel mio caso, potrebbe non bastare: infatti i Makefile del driver potrebbero contenere path assoluti. Per evitare ciò bisogna creare una patch e aggiungerla all’albero di portage all’interno della cartella files.
- Se è necessario applicare patch sarà necessario modificare ulteriormente la nostra ebuild, aggiungendo la linea inerith eutils e la funzione src_unpack(). Questa consetrà delle seguenti 3 istruzioni:
unpack ${A}cd "${S}" epatch "${FILESDIR}"/nome_patch - Una volta fatto completato l’ebuild bisognerà eseguire il comando: ebuild /path/to/ebuild/nome_ebuild.ebuild digest.
- Ora rimane da lanciare emerge e vedere che succede: se tutto funziona avete creato la vostra ebuild.
Creare una patch? E come si fà?
È abbastanza semplice: si copia il file da patchare. Tale nuovo file sarà modificato opportunamente aggiungendo, modificando o eliminando elementi nel file: ad esempio nel caso siano presenti path assolute queste potrebbero essere fatte precedere da ${DESTDIR}. Una volta modificato opportunamente, saremo pronti a creare il nostro patchfile: diff -u origfile newfile > patchfile. Attenzione al path inserito per newfile: deve essere tale che sia possibile riferircisi dalla posizione corrente durante la fase di installazione.
Spero che queste righe possano essere utili a qualche gentooista per risolvere i propri problemi.
Tags: diff > driver > ebuild > emerge > gentoo > kernel > Linux > module-rebuild > open-source > patch > Portage > Programming > scheda-di-rete > tips26th
SEP
Installare ebuild non presenti in portage
Posted by RedSend | Filed under Linux
Vi spiego brevemente come installare ebuild che ancora non sono stai inseriti in portage, i passi da fare sono pochi e semplici, prima cosa dobbiamo impostare questa variabile nel file /etc/make.conf
PORTDIR_OVERLAY="/usr/local/portage"
potete modificare anche la directory non è detto che debba essere quella, ma di solito si rimane quella
controlliamo che la directory esista, altrimenti la creiamo
redsendP4 ~ # mkdir -p /usr/local/portage
Si pu dire che il nostro portage personale è stato creato
per è vuoto, què di seguito vi indico la procedura che dovete seguire ogni volta che volete inserire un ebuild esterno.
Allora prima cosa dovete decidere in che categoria mettere l’ebuild, se lo state scaricando da http://bugs.gentoo.org allora ci sarè scritta lè la categoria (per categoria intendo ad esempio media-tv quando in una ricerca vi compare media-tv/kdetv), se invece lo avete creato voi è a vostra discrezione, cosa impossibile altrimenti non eravate arrivati fino a questo punto della guida ma vi eravate fermati prima :-).
redsendP4 ~ # cd /usr/local/portage redsendP4 portage # mkdir media-tv (esempio)
Creiamo anche la cartella con il nome del programma
redsendP4 portage # cd media-tv redsendP4 media-tv # mkdir kdetv (esempio)
Copiamo l’ebuild nella cartella
redsendP4 media-tv # cp /posizione/dell/ebuild/kdetv-x.x.ebuild kdetv
Ora facciamo il digest del nostro ebuild
redsendP4 media-tv # ebuild kdetv/kdetv-x.x.ebuild digest
A questo punto l’ebuild è pronto per essere emerso, controllate la presenza di ementuali KEYWORDS oppure mask, e poi potete dare un bel emerge.
Aggiornamento: mi sono accorto che questa guida è molto breve e veloce, se può sembra non chiaro qualcosa, vi consiglio di guardare il wiki ufficiale in particolare a questo howto “HOWTO_Installing_3rd_Party_Ebuilds“
Tags: ebuild > gentoo > Linux > Portage

