Delay Tolerant Network [ebuild]


Il mio primo ebuild (link) ha richiesto solo un paio d’ore; provo a descrivere quello che ho fatto.

  1. Ho sistemato l’header dell’ebuild
    [code]
    # ==========================================================================
    # ***************** Sigmalab Portage Overlay (02/26/07) *****************
    # ***************** For more info go to http://sigmalab.net *****************
    # ==========================================================================
    # Copyright 1999-2007 Gentoo Foundation
    # Distributed under the terms of the GNU General Public License v2
    # $Header: $inherit eutilsDESCRIPTION=”Disruption Tolerant Networking (DTN)”
    HOMEPAGE=”http://www.dtnrg.org”
    SRC_URI=”http://www.dtnrg.org/docs/code/${PN}_${PV}.tgz”LICENSE=”Apache-2.0″
    SLOT=”0″
    KEYWORDS=”~x86″
    [/code]
    Le varie Keyword sono ben descritte sulla documentazione di gentoo. Ricordare di mettere ~x86 se lo si vuole ridistribuire in quanto indica l’instabilità dell’ebuild
  2. La seconda parte è data dalle dipendenze e dalle possibili use flag:
    [code]
    IUSE=”oasys”
    DEPEND=”>=dev-lang/tcl-8.0.0
    >=sys-libs/db-4.2.52_p4-r2″
    [/code]
    Anche qui nulla di nuovo, in depend la sintassi è la stessa dei package del portage; nel mio caso ho anche specificato la versione esatta, ma potrebbe non essere necessario. Da notare invece che alcune dipendenze possono essere necessarie solo se una specifica flag è attiva in quel caso guardate questo esempio:
    [code]
    mysql? ( >=dev-db/mysql-3.23.49 )
    [/code]
  3. Passiamo ora alle variabili globali
    [code]
    INSTALLDIR=”/usr/local/bin/”
    S=${WORKDIR}/${PN}_${PV}
    [/code]
    Attenzione solo alcune variabili sono modificabili, altre sono readonly! (vedi qui)
  4. come compilare il pacchetto
    [code]
    src_compile() {
    cd ${S}
    ./configure -C –verbose || die “configure problem”
    emake || die “compile problem”
    }
    [/code]
    Questo codice è utile se usate gli autotools;
  5. e ora la parte difficile installare tutto secondo logica
    [code]
    src_install() {
    emake DESTDIR={D} install || die “install problem”# il demone
    dobin daemon/dtnd
    keepdir /etc/dtn
    insinto /etc/dtn
    doins daemon/dtn.conf dtn/dtn.conf# per salvare i bundles e i db
    keepdir /var/tmp/dtn
    keepdir /var/tmp/dtn/bundles
    keepdir /var/tmp/dtn/db# installo le librerie base
    keepdir /usr/include/dtn
    insinto /usr/include/dtn
    doins applib/*.h

    if use oasys ; then
    keepdir /usr/include/dtn/oasys
    insinto /usr/include/dtn/oasys
    doins oasys/*.h
    fi

    exeinto /usr/local/bin/

    doexe apps/dtnperf/dtnperf-client
    doexe apps/dtnperf/dtnperf-server
    doexe apps/dtnrecv/dtnrecv.1
    doexe apps/dtnsend/dtnsend.1

    for appsname in $(echo “dtnping dtntest dtncp dtncpd dtnmoteproxy dtntunnel dtnrecv dtnsend”);
    do
    doexe apps/$appsname/$appsname
    done

    dohtml doc/manual/*
    dodoc doc/*.txt

    }
    [/code]
    Complesso non è vero? Per comprendere i vari comandi nella bibliografia troverete i link a vari articoli che spiegano dettagliatamente ogni comando. Suggerisco di seguire questo ordine per i comandi : demoni, directory necessarie, librerie, compilati, documenti e manuali. In particolare vorrei far notare che il demone viene installato nella directory di default /usr/bin se avesso voluto cambiare la destinazione avrei dovuto ricorrere a into /usr/local/, tenendo presente che da li in poi i vari comandi do* avrebbero preso come root la nuova /usr/local, quindi occhio a quando lo fate. Altro problema lo avrei avuto se avessi voluto creare una cartella specifica per ragruppare i binari all’interno di /usr/local infatti se avessi creato una cartella al suo interno, quanto chiedo con il tab la completazione del testo avrei come risultato valido anche il nome della cartella.

  6. per finire
    [code]
    pkg_postinst() {
    einfo “”
    einfo “……..”
    einfo “”
    }
    [/code]
    potete comunicare all’utente le informazioni che ritenete necessarie. Oppure esegure comandi di fix dei permessi o cose simili.
  7. A chi ha buon occhio noterà che ancora non ho inserito nessun init.d e conf.d script. Spero di farlo quanto prima.

Per ottenere questo risultato ho consultato in particolare :

  • [bfentry id=1 small]
  • [bfentry id=2 small]
  • [bfentry id=3 small]
  • [bfentry id=4 small]