Slackware 12.1 e US Robotics 9108A wifi adsl router



In slackware 12.1 il pacchetto CUPS è nella versione 1.3.x. Ebbene il router in questione è anche provvisto di print server. Se proviamo ad usare il print server con slackware la stampante non funzionerà ... il motivo è perchè probabilmente l'implementazione di IPP da parte di us robotics non è standard (come descritto qui), risultato...: il router è incompatibile con versioni di cups >= 1.2.x mentre con cups 1.1.x nessun problema in quanto quest'ultimo non è comforme alle specifiche HTTP 1.1 al 100% e questa caratteristica sembra un tweak per l'implementazione usr.

Aspettando risoluzione da parte di usr questo bug è presente fino alla versione del firmware etichettata come "3.04L.01.07 (ven 17 feb 2006 14:21:00 CET)"
Infatti ecco la risposta della us robotics: "Siamo spiacenti pero' USRobotics non da' assistenza al sistema operativo LINUX. USRobotics vi ringrazia per averci contattato." che dire... non ci sono parole. Aggiornamento: us robotics ha rilasciato un firmware 1.7 beta che risolve i problemi con cups.

Soluzione per usr9108a con firmware modificato: LA SOLUZIONE

Aggiornare il router con il firmware reperibile QUA
Poi attivare cups con

# mv /etc/rc.d/rc.cups.new /etc/rc.d/rc.cups
# chmod 755 /etc/rc.d/rc.cups
# /etc/rc.d/rc.cups start


Ora possiamo configurare la nostra stampante scrivendo nella barra degli indirizzi del nostro browser http://localhost:631/ (istruzioni nel file LEGGIMI.TXT contenuto nel pacchetto firmware)

Soluzione per usr9108a con firmware originale

Dobbiamo quindi effettuare un downgrade se vogliamo avere stampanti di rete in slackware 12.1; ecco i pacchetti che ho preparato per questo scopo (gli slackbuild da cui sono stati ottenuti sono quelli di Pat con pochissime modifiche).
cups 1.1.23
kdelibs 3.5.9 (con supporto cups <= 1.2.x)

qui di seguito una mini guida per un downgrade corretto di cups:

# /etc/rc.d/rc.cups stop
# rm -rf /etc/cups/cupsd.conf
# rm -rf /etc/rc.d/rc.cups
# removepkg cups-1.3.7-i486-2
# installpkg cups-1.1.23-i486-1sm.tgz
# chmod 755 /etc/rc.d/rc.cups
# /etc/rc.d/rc.cups start


ora possiamo configurare la nostra stampante scrivendo nella barra degli indirizzi del nostro browser http://localhost:631/
cups è sistemato ma se proviamo a stampare da programmi kde come kwrite, kpdf ecc... otterremmo:
"symbol lookup error: /usr/lib/kde3/kdeprint_cups.so: undefined symbol: httpSetAuthString"

con conseguente crash del programma. Questo perchè slackware 12.1 usa cups 1.3.7 e proprio questo software dalla 1.3rc1 è stato modificata la gestione della cache di autenticazione. Quindi per risolvere il problema occorre ricompilare il pacchetto kdelibs-3.5.9-i486-4 di Pat dopo aver fatto il downgrade di cups.

Si può capire il motivo facendo un
grep -ir "httpSetAuthString" kdelibs-3.5.9/kdeprint/cups/
otteniamo un occorrenza in ipprequest.cpp
Se leggiamo la parte di codice presente in kdeprint/cups/ipprequest.cpp nella funzione doFileRequest, notiamo che la parte viene compilata in modo differente a seonda della versione di cups.

#ifdef HAVE_CUPS_NO_PWD_CACHE
#if CUPS_VERSION_MAJOR == 1 && CUPS_VERSION_MINOR <= 2
strncpy( HTTP->authstring, cups_authstring.data(), HTTP_MAX_VALUE );
#else
httpSetAuthString( HTTP, NULL, cups_authstring.data() );
#endif
#endif

[...]

#ifdef HAVE_CUPS_NO_PWD_CACHE
#if CUPS_VERSION_MAJOR == 1 && CUPS_VERSION_MINOR <= 2
cups_authstring = HTTP->authstring;
#else
cups_authstring = httpGetAuthString( HTTP );
#endif
#endif

Usciamo da server X o avviamo un'altro DE se stiamo usando kde. Possiamo procedere con l'aggiornamento di kdelibs
# upgradepkg --reinstall kdelibs-3.5.9-i486-4sm.tgz