giovedì 24 marzo 2011

pyLoad on Fonera2.0n

Quando ho scritto di captchatrader ho detto che ero riuscito a far girare pyLoad sulla fonera.
Finalmente ho trovato un programma simile a JDownloader ma abbastanza leggero e semplice da non creare problemi nell'installazione ed esecuzione e rendere finalmente funzionale la fonera.
Con questo programma infatti la Fonera 2.0n sarà in grado di scaricare da svariati siti di hosting come megaupload e rapidshare senza necessariamente avere un account premium (il vero motivo per cui l'avevo comprata), in più risolve i captcha. Se attivate captchatrader anche i re-captcha come quelli di hotfile non saranno più un problema

Ecco l'howto:

Dopo aver aggiunto il repository di nslu2-linux.org attiviamolo:
vi /etc/opkg.conf
#src snapshots http://downloads.openwrt.org/kamikaze/8.09.2/brcm-2.4/packages
src snapshots2 http://ipkg2.nslu2-linux.org/feeds/optware/openwrt-brcm24/cross/stable
dest root /
dest ram /tmp
dest usb /tmp/mounts/Disc-A1
lists_dir ext /var/opkg-lists

ora ci basta installare le dipendenze di pyLoad:
opkg -dest usb install python py25-crypto py25-curl py25-openssl py25-django py25-pil tesseract-ocr-lang-eng unzip ossp-js unrar
Spostiamoci sul drive esterno nel mio caso Disc-A1 e scarichiamo pyLoad
cd /tmp/mounts/Disc-A1/
wget http://get.pyload.org/static/pyload-src-v0.4.5.zip
unzip pyload-src-v0.4.5.zip
cd pyload
ora se vogliamo possiamo far girare systemcheck per controllare che tutto sia a posto prima di continuare, è chiaro che sulla fonera non avremo il supporto alla gui e sarà l'unico errore che riceveremo.
python systemCheck.py
questo è il mio output se volete confrontarlo:
##### System Status #####

## pyLoadCore ##
No Problems detected, pyLoadCore should work fine.

## pyLoadGui ##
The system check has detected some errors:

GUI won't work without pyqt4 !!

## Webinterface ##
No Problems detected, Webinterface should work fine.

Possible improvements for webinterface:

Install Flup to use FastCGI or optional webservers.
Press Enter to Exit.
ora passiamo al setup
python pyLoadCore.py
è abbastanza semplice, le parti in rosso sono quelle da inserire manualmente:
Verifica del sistema finita, premi Invio per vedere il report di stato.

## Stato ##

Funzioni disponibili: decrittografia contenitore, connessione ssl, decrittografia automatica captcha, Interfaccia web, Click'N'Load esteso

Continua con il setup? ([y]/n): y

Do you want to change the config path? Current is /root/.pyload
Se si utilizza pyLoad su un server o la partizione principale si trova su una memoria flash interna potrebbe essere una buona idea cambiarla.
Cambiare il percorso della configurazione? (y/[n]): y
Imposta nuovo percorso di configurazione, la configurazione attuale non sarà trasferita!
Percorso di configurazione [/root/.pyload]: /tmp/mounts/Disc-A1/pyload/.pyload
Percorso di configurazione modificato, il setup ora si chiuderà, riavvialo per andare avanti.
Premi Invio per uscire.
riavviamo quindi il setup, per forzarlo
python pyLoadCore.py -s
come prima le parti in rosso sono da inserire:
Funzioni disponibili: decrittografia contenitore, connessione ssl, decrittografia automatica captcha, Interfaccia web, Click'N'Load esteso

Continua con il setup? ([y]/n): y

Do you want to change the config path? Current is /tmp/run/mountd/sda1/pyload/.pyload
Se si utilizza pyLoad su un server o la partizione principale si trova su una memoria flash interna potrebbe essere una buona idea cambiarla.
Cambiare il percorso della configurazione? (y/[n]): n

Do you want to configure login data and basic settings?
E' consigliato per il primo avvio.
Fai la configurazione di base? ([y]/n): y

## Setup Base ##

The following logindata is valid for CLI, GUI and webinterface.
Nome utente [User]: username
Password: password
Password (di nuovo): password

Lingua ([en], de, it, pl, es, cs, fr): it
Cartella di download [Downloads]: /tmp/mounts/Disc-A1/downloads
Max download contemporanei [3]: INVIO
Usa la riconnessione? (y/[n]): n

Vuoi configurare l'ssl?
Configurare ssl? (y/[n]): n

Vuoi configurare l'interrfaccia web?
Configurare l'interfaccia web? ([y]/n): y

## Setup dell'interfaccia web ##

Attivare l'interfaccia web? ([y]/n): y

Indirizzo di ascolto, se usi 127.0.0.1 o localhost, l'interfaccia web sarà accessibile soltanto localmente.
Indirizzo [0.0.0.0]: vostro indirizzo dyndnsINVIO
Porta [8000]: fate voi

In some rare cases the builtin server is not working, if you notice problems with the webinterface
change the builtin server to the threaded one here.
Server ([builtin], threaded): INVIO

Installazione terminata con successo.
Premi Invio per uscire e riavviare pyLoad
Non ho testato l'opzione ssl motivo per cui non l'ho scritta, comunque non dovrebbe creare problemi dato che openssl è già usato dalla fonera per collgarsi alla webgui di luci da wan.
Mettendo un indirizzo dyndns valido Se avete configurato dyndns sulla fonera potrete accedere al core di pyLoad anche dalla rete esterna una volta aperte le porte sul firewall, cosa che faremo fare allo script di avvio di pyload.

Per openwrt basterebbe scrivere uno script in /etc/init.d/, ma la fonera usa il demone "fonstate" per gli script all'avvio e trovare una combinazione funzionante al 100% non è stato facile. Spero che questa vada bene

vi /etc/init.d/pyload
codice:
#!/bin/sh /etc/rc.common
PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin

while [ ! -d /tmp/mounts/Disc-A1 ]
do
sleep 1
done

START=99

start() {
iptables -I input_daemon -p tcp --dport 8000 -j zone_wan_ACCEPT
iptables -I input_daemon -p tcp --dport 7227 -j zone_wan_ACCEPT
python /tmp/mounts/Disc-A1/pyload/pyLoadCore.py --daemon
}

stop() {
iptables -D input_daemon -p tcp --dport 8000 -j zone_wan_ACCEPT
iptables -D input_daemon -p tcp --dport 7227 -j zone_wan_ACCEPT
python /tmp/mounts/Disc-A1/pyload/pyLoadCore.py -q
}
chmod +x /etc/init.d/pyload
In teoria questo dovrebbe bastare e abilitando lo script all'avvio con
/etc/init.d/pyload enable
dovrebbe funzionare.. dovrebbe appunto! Ma la mia fonera non ne ha voluto sapere quindi ho evitato quest'ultimo passaggio e ho passato il comando a fonstate. Provatelo prima di passare a fonstate per altri utenti ha funzionato senza problemi.
vi /etc/fonstated/pyload
#!/bin/sh
/etc/init.d/pyload start
chmod +x /etc/fonstated/pyload

vi /etc/config/fonstate
aggiungiamo alla fine
config 'fonboot'
option 'event' 'pyload'


Se tutto è andato bene al riavvio dovremmo trovare pyload in esecuzione, si può verfiicare con "top", e le porte 8000 e 7227 aperte "iptables -L |grep 8000" "iptables -L |grep 7227". (Per non avere altri problemi con il firewall ho collegato la fonera al modem/router in pppoe.)
Quindi possiamo collegarci alla web gui di pyload all'indirizzo http://VOSTRODYNDNS:8000 e loggarci con user e pass impostati prima, oppure scaricando sul pc pyload e facendo collegare la pyLoadGui a pyLoadCore.py in esecuzione sulla fonera.

Scaricate pyload per Winzozz (per chi usa altri sistemi operativi non credo che debba dare spiegazioni ;))
Decomprimetelo dove preferite ed eseguite pyLoadGui.exe
Cliccate su "New" e inserite i vostri dati.
Dopo aver cliccato su save cliccate due volte sul profilo appena creato per renderlo di default e non fare più apparire la schermata di setup della gui.
FINE!



Fonti:
http://forum.fon.com
http://wiki.fon.com/wiki/F2_Amule
http://wiki.fon.com/wiki/F2_MgtConsole_tweaks#Fonstated
http://pyload.org/

OPKG-LINK

Il seguente script l'ho trovato sul forum di openwrt serve a creare automaticamente dei link simbolici tra l'hd e la memoria flash della fonera, così da rendere disponibili i programmi e le librerie senza creari troppi problemi, ha il difetto di riempire la memoria flash se i pacchetti da linkare sono troppi. L'ho trovato utile in rare occasioni. Funziona solo se il filsystem supporta link simbolici, ad esempio ext3.
vi /usr/bin/opkg-link
incollate il codice:
#!/bin/sh
COMMAND=$1
PACKAGE=$2
setdest () {
for i in `grep dest /etc/opkg.conf | cut -d ' ' -f 3`; do
if [ -f $i/usr/lib/opkg/info/$PACKAGE.list ]; then
DEST=$i
fi
done
if [ "x$DEST" = "x" ]; then
echo "Can not locate $PACKAGE."
echo "Check /etc/opkg.conf for correct dest listings";
echo "Check name of requested package: $PACKAGE"
exit 1
fi
}
addlinks () {
setdest;
cat $DEST/usr/lib/opkg/info/$PACKAGE.list | while read LINE; do
SRC=$LINE
DST=`echo $SRC | sed 's%'$DEST'%%'`
DSTNAME=`basename $DST`
DSTDIR=`echo $DST | sed 's%/'$DSTNAME'%%'`
test -f "$SRC"
if [ $? = 0 ]; then
test -e "$DST"
if [ $? = 1 ]; then
mkdir -p $DSTDIR
ln -sf $SRC $DST
else
echo "Not linking $SRC to $DST"
echo "$DST Already exists"
fi
else
test -d "$SRC"
if [ $? = 0 ]; then
test -e $DST
if [ $? = 1 ]; then
mkdir -p $DST
else
echo "directory already exists"
fi
else
echo "Source directory $SRC does not exist"
fi
fi
done
}
removelinks () {
setdest;
cat $DEST/usr/lib/opkg/info/$PACKAGE.list | while read LINE; do
SRC=$LINE
DST=`echo $LINE | sed 's%'$DEST'%%'`
DSTNAME=`basename $DST`
DSTDIR=`echo $DST | sed 's%/'$DSTNAME'%%'`
test -f $DST
if [ $? = 0 ]; then
rm -f $DST
test -d $DSTDIR && rmdir $DSTDIR 2>/dev/null
else
test -d $DST
if [ $? = 0 ]; then
rmdir $DST
else
echo "$DST does not exist"
fi
fi
done
}
mountdest () {
test -d $PACKAGE
if [ $? = 1 ]; then
echo "Mount point does not exist"
exit 1
fi
for i in $PACKAGE/usr/lib/opkg/info/*.list; do
$0 add `basename $i .list`
done
}
umountdest () {
test -d $PACKAGE
if [ $? = 1 ]; then
echo "Mount point does not exist"
exit 1
fi
for i in $PACKAGE/usr/lib/opkg/info/*.list; do
$0 remove `basename $i .list`
done
}
case "$COMMAND" in
add)
addlinks
;;
remove)
removelinks
;;
mount)
mountdest
;;
umount)
umountdest
;;
*)
echo "Usage: $0 "
echo " Commands: add, remove, mount, umount"
echo " Targets: , "
echo "Example: $0 add kismet-server"
echo "Example: $0 remove kismet-server"
echo "Example: $0 mount /mnt/usb"
echo "Example: $0 umount /mnt/usb"
exit 1
;;
esac
exit 0
chmod +x /usr/bin/opkg-link
così da renderlo eseguibile ;)

mercoledì 23 marzo 2011

Repository optware sulla Fonera 2.0n

Aggiungendo il repository di ipkg.nslu2-linux.org alla fonera si possono installare molti più programmi di quelli disponibili sul repo di openwrt.
In giro si trovano diverse soluzioni ognuna leggermente diversa per piccole differenze, ma fondamentalmente bisogna aggiungere l'indirizzo del repository nel file "/etc/opkg.conf" aggiungere al path la cartella "/opt" e le cartelle contenti le librerie.
L'hard disk usb nel mio caso è formattato in ext3.
Ottenuto l'accesso ssh alla fonera editiamo il file "/etc/opkg.conf"
vi /etc/opkg.conf
src snapshots http://downloads.openwrt.org/kamikaze/8.09.2/brcm-2.4/packages
#src snapshots2 http://ipkg2.nslu2-linux.org/feeds/optware/openwrt-brcm24/cross/stable
dest root /
dest ram /tmp
dest usb /tmp/mounts/Disc-A1
lists_dir ext /var/opkg-lists
Digitate <ESC> ":wq" per salvare e chiudere l'editor. Con "dest usb /tmp/mounts/Disc-A1" abbiamo aggiunto come destinazione per opkg l'hard disk o pen drive usb, mi raccomando di sostiture la destinazione con quella della vostra periferica.
EDIT: è prefereribile tenere un solo repository attivo per volta così da poter scegliere con chiarezza quello in uso.
mkdir -p /usr/lib/opkg
opkg update
così creiamo una cartella necessaria a opkg e aggiorniamo la lista dei pacchetti disponibili.
opkg -dest usb install ldconfig
così installiamo ldconfig necessario per far trovare le librerie al sistema senza aggiungerne la destinazione in "/etc/profile"
vi /etc/ld.so.conf
/opt/lib
/opt/usr/lib
/tmp/mounts/Disc-A1/usr/lib
/tmp/mounts/Disc-A1/lib
Aggiungiamo al profilo le parti in rosso
vi /etc/profile
ext_path='/tmp/mounts/Disc-A1'
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:$ext_path/bin:$ext_path/sbin:$ext_path/usr/bin:$ext_path/usr/sbin:/opt/bin:/opt/sbin
. /etc/profile
per ricaricare il profilo senza riavviare
questo altro script serve per non avere l'errore postinst 127 dopo l'installazione di un pacchetto dal repo di nslu2-linux.org
mkdir -p /tmp/mounts/Disc-A1/opt/bin
cd /tmp/mounts/Disc-A1/opt/bin/
vi update-alternatives
incollate il seguente codice:
#!/bin/sh
# update-alternatives
#
# Copyright (C) 2001 Carl D. Worth
#
# This program was inspired by the Debian update-alternatives program
# which is Copyright (C) 1995 Ian Jackson. This version of
# update-alternatives is command-line compatible with Debian's for a
# subset of the options, (only --install, --remove, and --help)
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.

set -e

# admin dir
ad="$IPKG_OFFLINE_ROOT/usr/lib/ipkg/alternatives"

usage() {
echo "update-alternatives: $*

Usage: update-alternatives --install

update-alternatives --remove
update-alternatives --help

is the link pointing to the provided path (ie. /usr/bin/foo).
is the name in $ad/alternatives (ie. foo)

is the name referred to (ie. /usr/bin/foo-extra-spiffy)

is an integer; options with higher numbers are chosen.
" >&2
exit 2
}

quit() {
echo "update-alternatives: $*" >&2
exit 2
}

register_alt() {
[ $# -lt 2 ] && return 1
local name="$1"
local link="$2"

if [ ! -d $ad ]; then
mkdir -p $ad
fi

if [ -e "$ad/$name" ]; then
local olink=`head -n 1 $ad/$name`
if [ "$link" != "$olink" ]; then
echo "update-alternatives: Error: cannot register alternative $name to $link since it is already registered to $olink" >&2
return 1
fi
else
echo "$link" > "$ad/$name"
fi

return 0
}

protect_slashes() {
sed -e 's/\//\\\//g'
}

remove_alt() {
[ $# -lt 2 ] && return 1
local name="$1"
local path="$2"

[ ! -f $ad/$name ] && return 0

path=`echo $path | protect_slashes`
sed -ne "/^$path\>.*/!p" $ad/$name > $ad/$name.new
mv $ad/$name.new $ad/$name
}

add_alt() {
[ $# -lt 3 ] && return 1
local name="$1"
local path="$2"
local priority="$3"
remove_alt $name $path
echo "$path $priority" >> $ad/$name
}

find_best_alt() {
[ $# -lt 1 ] && return 1
[ ! -f $ad/$name ] && return 0

link=$IPKG_OFFLINE_ROOT/`head -n 1 $ad/$name`

## path=`sed -ne "1!p" $ad/$name | sort -nr -k2 | head -1 | sed 's/ .*//'`
## busybox safe:
path=`sed -ne "1!p" $ad/$name | sed -e "s/\(.*\) \(.*\)/\2 \1/g" | sort -nr | head -n 1 | sed 's/[^ ]* //'`
if [ -z "$path" ]; then
echo "update-alternatives: removing $link as no more alternatives exist for it"
rm $ad/$name
if [ -L $link ]; then
rm $link
fi
return 0
fi

if [ ! -e $link -o -L $link ]; then
local link_dir=`dirname $link`
if [ ! -d $link_dir ]; then
mkdir -p $link_dir
fi
ln -sf $path $link
echo "update-alternatives: Linking $link to $path"
else
echo "update-alternatives: Error: not linking $link to $path since $link exists and is not a link"
return 1
fi

return 0
}

do_install() {
if [ $# -lt 4 ]; then
usage "--install needs

"
fi
local link="$1"
local name="$2"
local path="$3"
local priority="$4"

path=`echo $path | sed 's|/\+|/|g'`

# This is a bad hack, but I haven't thought of a cleaner solution yet...
[ -n "$IPKG_OFFLINE_ROOT" ] && path=`echo $path | sed "s|^$IPKG_OFFLINE_ROOT/*|/|"`

register_alt $name $link
add_alt $name $path $priority
find_best_alt $name
}

do_remove() {
if [ $# -lt 2 ]; then
usage "--remove needs
"
fi
local name="$1"
local path="$2"

path=`echo $path | sed 's|/\+|/|g'`

# This is a bad hack, but I haven't thought of a cleaner solution yet...
[ -n "$IPKG_OFFLINE_ROOT" ] && path=`echo $path | sed "s|^$IPKG_OFFLINE_ROOT/*|/|"`

remove_alt $name $path
find_best_alt $name
}

###
# update-alternatives "main"
###

while [ $# -gt 0 ]; do
arg="$1"
shift

case $arg in
--help)
usage "help:"
exit 0
;;
--install)
do_install $*
exit $?
;;
--remove)
do_remove $*
exit $?
;;
*)
usage "unknown argument \`$arg'"
;;
esac
done

usage "at least one of --install or --remove must appear"

exit 0
chmod +x update-alternatives
opkg update
ln -s /tmp/mounts/Disc-A1/opt /opt
L'ultimo comando crea un link simbolico tra l'hd e la flash interna. Dopo aver installato un qualsiasi programma vi dovrebbe bastare usare ldconfig per indicizzare (credo) le librerie.
ldconfig -p
dà la lista con le librerie trovate.
opkg -dest usb install NOMEPACCHETTO
Per installare qualsiasi pacchetto sull'hd.
Se il pacchetto proviene da nslu2-linux.org sarà installato in "/tmp/mounts/Disc-A1/opt" e se invece è di openwrt sarà installato in "/tmp/mounts/Disc-A1" in ogni caso verrà trovato dal sistema.
Spero di essere stato chiaro e in qualche modo d'aiuto ;)

---Aggiornamento---
Mi ero dimenticato di scrivere come aggiungere gli script necessari per quei pacchetti installati da nslu2-linux.org che contengono uno script all'avvio (mysql, lighttpd, etc..)
vi /etc/init.d/optware
come prima incollate il codice:
#!/bin/sh /etc/rc.common

START=80

start() {
echo "Starting Optware."
[ -x /opt/etc/rc.optware ] && /opt/etc/rc.optware start
}

stop() {
echo "Shutting down Optware."
[ -x /opt/etc/rc.optware ] && /opt/etc/rc.optware stop
}
chmod +x /etc/init.d/optware
mkdir -p /opt/etc
vi /opt/etc/rc.optware
codice:
#!/bin/sh

# Start all init scripts in /opt/etc/init.d
# executing them in numerical order.
#
if [ x$1 == xstop ] ; then
progs="/opt/etc/init.d/K??*"
rc=stop
else
progs="/opt/etc/init.d/S??*"
rc=start
fi

for i in $progs ;do

# Ignore dangling symlinks (if any).
[ ! -f "$i" ] && continue

echo starting $i
case "$i" in
*.sh)
# Source shell script for speed.
(
trap - INT QUIT TSTP
set $rc
. $i
)
;;
*)
# No sh extension, so fork subprocess.
$i $rc
;;
esac
done
chmod +x /opt/etc/rc.optware
e infine per abilitare lo script come si fa su openwrt dare
/etc/init.d/optware enable
Quest'ultimo passaggio non l'ho testato sulla fonera2.0n ma su openwrt (ovviamente) funziona.

Fonti:



lunedì 21 marzo 2011

Risolvere automaticamente i re-captcha

Per puro caso ho trovato questo servizio che offre un metodo davvero particolare per risolvere i captcha.
Captchatrader infatti permette la soluzione di questi maledetti codici con un sistema a crediti.
10 o 5 crediti per rislolverne uno, il costo dipende dal tipo, se sotto forma di testo o immagine. Ovviamente c'è la possibilità di acquistare i crediti, ma soprattutto si possono "guadgnare" risolvendo i captcha di altri utenti.
3 o 7 crediti per ogni codice corretto inviato sono (dipende sempre dal tipo).
Infine c'è la classica campagna con i referral link.
Per sfruttare il servizio si deve installare il plugin in JDownloader o si può usare pyLoad che ce l'ha integrato.
Per chi non li conoscesse sono due programma per la gestione di link come Rapidshare e Megaupload il primo scritto in Java, credo che sia il più famoso e versatile, ha però il difetto di essere un mattone.... pyLoad invece è scritto in python, per me era sconosciuto fino a prima di scoprire Captchatrader ma è moooooooolto più leggero. Tanto leggero che sono riuscito a farlo girare sulla Fonera2.0n (ma questo lo scrivo un'altra volta :P).
Torniamo a Captchatrader. Dopo la registrazione basta scaricare il plugin dalla pagina realtiva unzipparlo e copiare la cartella "captchatrader" in "<CARTELLA DI INSTALLAZIONE DI JDownloader>\jd\captcha\methods". Dopodichè aprite la cartella del plugin e modificate con "Blocco note" il file "captchatrader.properties" inserendo nome utente e password.
Finito. Al prossimo avvio JDownloader sarà in grado di risolvere da solo i captcha inviati da siti di hosting come Fileserve o Hotfile. Una seccatura in meno! ;)
Se la cosa vi interessa per iscrivervi potreste usare il mio link di refer: http://captchatrader.com/users/refer/bisont87/

domenica 20 marzo 2011

Salve a tutti!

Sto aprendo questo blog più che altro per avere un diario personale con gli appunti delle piccole scoperte fatte, ultimamente perlopiù riguardanti la Fonera2.0n e Openwrt. Per quanto possano essere delle cose semplici o inutili ciò non toglie che la condivisione delle informazioni è il principio secondo cui secondo me si dovrebbe basare internet, tra l'altro se non avessi avuto il supporto dei vari forum o blog sparsi nella rete non avrei sicuramente potuto capire nè fare nulla di ciò che ho fatto. 
Un saluto a tutti! ;)
bisont87

P.S.: Sì, il titolo non c'entra un tubo con il tema, ma è rimasto quello per tradizione :P

Le guide che trovate su questo blog sono basate sulla mia esperienzapersonale e sulle community citate, seguibili quindi a proprio rischio e pericolo e senza nessun tipo di garanzia. Non mi ritengo responsabile di eventuali danni recati a persone o cose, nè dell'uso che ne farete.