# [EBUILD] USBAuth (modulo pam)

## Alex.l

Ciao a tutti, sto scrivendo una ebuild per il modulo pam usbauth http://usbauth.delta-xi.net , ho già provato pam_usb, ma non mi piace, ho letto un po' di documentazione (ufficiale e non) e ho consultato ebuild già esistenti, tuttavia non riesco a capire dove sbaglio con la mia; durante src_install() da sempre una sandbox violation; non sono affatto esperto, e questo è il mio primo tentativo di realizzare una ebuild, mi potete dare una mano ?

usbauth-0.3.2.ebuild

```
# Copyright 1999-2005 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: $

inherit eutils pam

DESCRIPTION="USBAuth provides passwordless local user authentication via ordinary USB storage devices."

HOMEPAGE="http://usbauth.delta-xi.net"

MY_P=usbauth_v0.3-2_source

SRC_URI=http://dl.delta-xi.net/${MY_P}.tar.bz2 

LICENSE="GPL-2"

SLOT="0"

KEYWORDS="~x86"

IUSE=""

S="${WORKDIR}/usbauth_v0.3"

DEPEND="dev-libs/openssl

sys-libs/pam"

RDEPEND=""

src_compile() {

epatch "${FILESDIR}"/${MY_P}.makefile.gentoo.patch

emake -j1 DESTDIR=${D} || die "emake failed"

}

src_install() {

emake -j1 DESTDIR=${D} install || die " emake install failed"

}
```

usbauth_v0.3-2_source.makefile.gentoo.patch

```

--- Makefile    2007-05-02 09:03:20.000000000 +0200

+++ Makefile.patched    2007-07-22 18:29:35.000000000 +0200

@@ -11,7 +11,7 @@

-all:   $(TARGET)       install

+all:   $(TARGET)

 $(TARGET): $(TARGET).c

        $(CC) -o $(TARGET).so $(CFLAGS) $(LDFLAGS) $(TARGET).c parser.c

```

/var/tmp/portage/sys-auth/usbauth-0.3.2/temp/build.log

```

>>> Unpacking source...

>>> Unpacking usbauth_v0.3-2_source.tar.bz2 to /var/tmp/portage/sys-auth/usbauth-0.3.2/work

>>> Source unpacked.

>>> Compiling source in /var/tmp/portage/sys-auth/usbauth-0.3.2/work/usbauth_v0.3 ...

 * Applying usbauth_v0.3-2_source.makefile.gentoo.patch ...                                                                                                                   [ ok ]

/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../../i686-pc-linux-gnu/bin/ld: warning: creating a DT_TEXTREL in object.

uapasswd.c: In function âotp_rehashâ:

uapasswd.c:437: warning: assignment makes pointer from integer without a cast

>>> Source compiled.

>>> Test phase [not enabled]: sys-auth/usbauth-0.3.2

>>> Install usbauth-0.3.2 into /var/tmp/portage/sys-auth/usbauth-0.3.2/image/ category sys-auth

ACCESS DENIED  open_wr:   /lib/security/pam_usbauth.so

install: impossibile creare il file normale `/lib/security/pam_usbauth.so': Permission denied

make: *** [install] Error 1

!!! ERROR: sys-auth/usbauth-0.3.2 failed.

Call stack:

  ebuild.sh, line 1621:   Called dyn_install

  ebuild.sh, line 1067:   Called qa_call 'src_install'

  ebuild.sh, line 44:   Called src_install

  usbauth-0.3.2.ebuild, line 27:   Called die

!!!  emake install failed

!!! If you need support, post the topmost build error, and the call stack if relevant.

!!! A complete build log is located at '/var/tmp/portage/sys-auth/usbauth-0.3.2/temp/build.log'.

```

AlexLast edited by Alex.l on Mon Jul 23, 2007 12:09 pm; edited 3 times in total

----------

## mrfree

Purtroppo il sito del modulo pare sia down quindi non posso vedere i sorgenti, ti posso però consigliare di dare uno sguardo su http://devmanual.gentoo.org non è che ti manca pure un econf in src_compile()?

----------

## Scen

c'è un DESTDIR=${D} di troppo nella riga

```

emake -j1 DESTDIR=${D}

```

di src_compile(): non serve.

togli il -j1 dal emake di src_install()

quella patch che va a modificare il Makefile l'hai fatta tu? L'ebuild dà lo stesso errore anche se NON applichi quella patch? Il tuo problema dovrebbe essere proprio nel Makefile, che non considera correttamente la variabile ${D} che gli passi, e tenta d installare direttamente il o i file nella root di sistema.

@mrfree: Riguardo alla mancanza di econf, non è detto che sia un errore. I sorgenti di molti pacchetti non includono lo script di autoconfigurazione, ma solamente il Makefile (il più delle volte "pilotato" da delle variabili da passare al make). Comunque, Alex.l: controlla se i sorgenti di questo programma includono anche lo script configure, ed includi eventualmente la procedura nell'ebuild!

----------

## drizztbsd

Scen si vede che sei un developer di documentazione  :Razz: 

src_compile e src_install fatti così sono inutili e ridondanti, se ti servono così LEVALI che tanto sono quelli di default.

----------

## Scen

 *drizztbsd wrote:*   

> Scen si vede che sei un developer di documentazione 
> 
> src_compile e src_install fatti così sono inutili e ridondanti, se ti servono così LEVALI che tanto sono quelli di default.

 

 :Wink:  C'hai ragggione  :Razz:   (Devo ancora farmi le ossa  :Rolling Eyes:  Inoltre è lunedì mattina, devo ancora svegliarmi completamente  :Very Happy:  )

Per rifarmi aggiungo una cosa: l'eventuale epatch inseriscilo nella funzione src_unpack

```

src_unpack() {

   unpack ${A}

   cd "${S}"

   epatch "${FILESDIR}/${MY_P}.makefile.gentoo.patch"

}

```

----------

## Alex.l

Intanto grazie a tutti!!!

Allora il makefile del programma è un po' strano, nel senso che non prevede lo script configure e ha solo "install" come target, quidni prendendo spunto da un altro thread ho patchato in modo da fare make+make install; questo è il MAkefile originale

Makefile:

```

#gcc -I/usr/include -shared -lcrypt -o pam_usbauth.so pam_usbauth.c

DESTDIR = .

CC = gcc

CFLAGS = -I/usr/include -shared

LDFLAGS = -lcrypt -lssl

TARGET = pam_usbauth

PASSWD = uapasswd

DAEMON = usbauthd

WARNINFO = "\n\n********WARNING:********\nBe sure NOT to select harddisk devices when using the "-d" switch of uapasswd (or in /etc/usbauth.conf), otherwise they will be corrupted!\nAlways carry your USB device with you. Please note that the state of this software should still be considered as alpha!\n************************\n"

 

all:   $(TARGET)   install

$(TARGET): $(TARGET).c

   $(CC) -o $(TARGET).so $(CFLAGS) $(LDFLAGS) $(TARGET).c parser.c

   $(CC) -o $(PASSWD) $(LDFLAGS) $(PASSWD).c

   $(CC) -o $(DAEMON) $(LDFLAGS) $(DAEMON).c

install:

   install $(TARGET).so /lib/security

   install uapasswd.man /usr/share/man/man1/uapasswd.1

   install -m 0700 uapasswd /usr/sbin

   install -m 0700 usbauthd /usr/sbin

   if [ -e /etc/usbauth.conf ]; then rm /etc/usbauth.conf; fi

   install -m 0600 usbauth.conf /etc/usbauth.conf

   @echo -e $(WARNINFO)

   @echo -e "\nEverything's going ok!"

clean:

   rm -f *.o *.so

```

Sono ignorantissimo su queste cose, però avendo bisogno di questo programma mi sono buttato con la speranza di imparare qualcosa (e di riuscirci  :Very Happy:  )

Alex

----------

## Alex.l

Ragazzi credo di avercela fatta!!! Se a qualcuno puo' interessare metto qui l'ebuild e la patch, magari la potete inserire nei tip; adess olo provo un po', poi credo di modificare l'ebuild per compilare dal trunk svn, l'autore del prog sostiene che i sorgenti che mette in svn sono solitamente stabili.

Vediamo se funziona!!!

usbauth-0.3.2.ebuild

```

# Copyright 1999-2005 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: $

inherit eutils pam

DESCRIPTION="USBAuth provides passwordless local user authentication via ordinary USB storage devices."

HOMEPAGE="http://usbauth.delta-xi.net"

MY_P=usbauth_v0.3-2_source

SRC_URI=http://dl.delta-xi.net/${MY_P}.tar.bz2 

LICENSE="GPL-2"

SLOT="0"

KEYWORDS="~x86"

IUSE=""

S="${WORKDIR}/usbauth_v0.3"

DEPEND="dev-libs/openssl

sys-libs/pam"

RDEPEND=""

src_unpack() {

   unpack ${A}

   cd "${S}"

   epatch "${FILESDIR}/${MY_P}.makefile.gentoo.patch"

} 

src_compile() {

 emake || die "emake failed"

}

src_install() {

 emake install || die "emake install failed"

 dodir $(getpam_mod_dir) /usr/sbin

 einstall DESTDIR=${D} PAM_MODULES="${D}/$(getpam_mod_dir)"

}

```

usbauth_v0.3-2_source.makefile.gentoo.patch

```

--- Makefile    2007-05-02 09:03:20.000000000 +0200

+++ Makefile.patched    2007-07-23 12:12:59.000000000 +0200

@@ -4,6 +4,11 @@

 CC = gcc

 CFLAGS = -I/usr/include -shared

 LDFLAGS = -lcrypt -lssl

+MKDIR:= mkdir

+LIB_DEST:=$(DESTDIR)/lib/security

+MAN_DEST:=$(DESTDIR)/usr/share/man/man1

+SBIN_DEST:=$(DESTDIR)/usr/sbin

+CONF_DEST:=$(DESTDIR)/etc

 TARGET = pam_usbauth

 PASSWD = uapasswd

 DAEMON = usbauthd

@@ -11,7 +16,7 @@

-all:   $(TARGET)       install

+all:   $(TARGET)

 $(TARGET): $(TARGET).c

        $(CC) -o $(TARGET).so $(CFLAGS) $(LDFLAGS) $(TARGET).c parser.c

@@ -19,12 +24,13 @@

        $(CC) -o $(DAEMON) $(LDFLAGS) $(DAEMON).c

 install:

-       install $(TARGET).so /lib/security

-       install uapasswd.man /usr/share/man/man1/uapasswd.1

-       install -m 0700 uapasswd /usr/sbin

-       install -m 0700 usbauthd /usr/sbin

-       if [ -e /etc/usbauth.conf ]; then rm /etc/usbauth.conf; fi

-       install -m 0600 usbauth.conf /etc/usbauth.conf

+       $(MKDIR) -p $(DESTDIR) $(LIB_DEST) $(SBIN_DEST) $(CONF_DEST) $(MAN_DEST)

+       install $(TARGET).so $(LIB_DEST)

+       install uapasswd.man $(MAN_DEST)/uapasswd.1

+       install -m 0700 uapasswd $(SBIN_DEST)

+       install -m 0700 usbauthd $(SBIN_DEST)

+       if [ -e /etc/usbauth.conf ]; then rm $(CONF_DEST)/usbauth.conf; fi

+       install -m 0600 usbauth.conf $(CONF_DEST)/usbauth.conf

        @echo -e $(WARNINFO)

        @echo -e "\nEverything's going ok!"

 clean:

```

----------

## drizztbsd

RDEPEND è sbagliato e src_compile puoi anche ometterlo, per il resto va bene  :Razz: 

----------

