Cyanogenmod 10.1 su nexus 7 con Linux

Scrivo questa guida passo passo per installare cyanogenmod 10.1 su Nexus 7, come promemoria, spero omnicomprensivo, dal momento che su internet non ho trovato una spiegazione chiara ed esaustiva, almeno in lingua italiana.

La guida presuppone che venga usato linux come sistema operativo per procedere allo sblocco del bootloader e android-sdk come unico tool necessario.

A bomba sui

Requisiti preliminari

Procuriamoci il pacchetto android Sdk. Con archlinux dovremo prelevare i seguenti pacchetti AUR: android-sdk e android-sdk-platform-tools. Per le distribuzioni debian-centriche, nello specifico Ubuntu, il pacchetto è disponibile tramite PPA W8 . Per altre distribuzioni basate su rpm è sufficiente consultare le guide di vostra appartenenza. Qui, ad esempio, c’è una pagina wiki che spiega come installare l’android development kit su Fedora.

Lo scopo sostanziale dell’installazione di android-sdk è di avere due strumenti da console: adb e fastboot, che ci consentiranno di procedere all’unlock ed al trasferimento delle immagini di cyanogenmod all’interno del nostro nexus 7.

Ora procediamo all’operazione, passo passo.

Passo 1:

(nexus7)
Assicuriamoci di avere l’ultima versione di Android 4.2.1 stock installata tramite aggiornamento OTA di Google.

Passo 2:

(nexus7)
Abilitiamo il debug usb in Nexus 7. Per farlo, scegliamo: impostazioni->informazioni sul tablet e facciamo tap per 7 volte su Numero Build. Ottenuti i permessi di sviluppatore, scegliamo opzioni sviluppatore e selezioniamo debug USB.

Passo 3:

(computer Linux)
Assicuriamoci che fastboot e adb siano stati installati correttamente e che il PATH sia stato esportato, tramite i comandi adb e fastboot, che, lanciati senza argomenti, dovranno restituirci il solito prontuario di help dei parametri disponibili.

Passo 4:

(computer Linux)
Scarichiamo l’immagine della recovery di Clockworkmod

Passo 5:

(computer Linux)
Scarichiamo i pacchetti necessari per Cyanogenmod 10.1 per Nexus 7 wifi (grouper) e le Google Apps per Jelly Bean

Passo 6:

(computer linux)
Colleghiamo via usb il nostro computer al nexus7 e verifichiamo che venga riconosciuto da adb, tramite il seguente comando:

sudo su
[root@badapple ~]# adb devices
List of devices attached 
015d24bc5d641414	device

Se otteniamo, come qui sopra, il seriale del dispositivo, siamo pronti per procedere.

Passo 7:

(computer linux)
Trasferiamo le immagini precedentemente scaricate nel Nexus7. Possiamo farlo o via mtd o tramite console con

adb push cm-10.1-20130105-NIGHTLY-grouper.zip /sdcard/
adb push gapps-jb-20121212-signed.zip /sdcard/

Passo 8:

(computer linux)
Otteniamo i permessi di root e posizioniamoci nella directory dove abbiamo scaricato la recovery Clockworkmod. Diamo il comando

 
adb reboot bootloader

per mettere il nexus7 in modalità fastboot. Una volta ottenuta la schermata di fastboot sul nexus7, verifichiamo che il dispositivo venga riconosciuto dal nostro tool con

fastboot devices.

Anche qui, questo comando dovrà restituirci il numero seriale del nostro nexus7.
Passiamo quindi a sbloccare il bootloader del nostro dispositivo:

fastboot oem unlock

Apparirà un disclaimer sullo schermo del nexus7, al quale dovremo rispondere yes. I bootloader ora è sbloccato e possiamo installare la Clockworkmod recovery

Passo 9:

(computer linux)
Dopo il riavvio del dipositivo ormai sbloccato, ripetiamo la procedura di fastboot mode per installare clockworkmod:

adb reboot bootloader

La schermata di fastboot, ormai familiare, ci dirà che il dispositivo è sbloccato e che quindi ci sarà possibile flashare Clockworkmod.

fastboot flash recovery recovery-clockwork-6.0.1.9-grouper.img

La procedura durerà alcuni secondi. Una volta terminata, tramite i pulsanti volume e power del nexus7 potremo riavviare il terminale in recovery mode.

Passo 10:

(nexus7)
Dalla schermata di Clockworkmod recovery, tramite i pulsanti volume e power scegliamo nell’ordine:
wipe data/factory reset
install zip from sdcard
install cm-10-XXX.zip
install gapps-jb-XXX.zip
reboot.

Fatto, il nostro Nexus7 è ora cyanogenmoddato. :-)

Come ho detto nella premessa, ci sono tonnellate di guide in rete, anche in italiano, ci sono toolkit che fanno tutto in un click, ma questo approccio, che ho usato anche ieri per sbloccare il mio Nexus7, mi è sembrato il più lineare e semplice, con il totale controllo delle operazioni.

Se avessi commesso degli errori o se aveste bisogno di quelche chiarimento, sono sempre disponibili qui nei commenti e su google plus.

Follow @dema on ADN

+Antonangelo De Martini»

Archlinux e systemd/initscript in tre semplici mosse

Se usate archlinux come me e se, compulsivamente, date, anche più volte in un giorno, yaourt -Syua, allora siete già pronti per passare ad un init misto systemd/initscript.

Ecco i tre passi da compiere per completare il passaggio:

  1. Andiamo su /etc/default/ e modifichiamo il file grub come segue
    nano -v grub
    GRUB_CMDLINE_LINUX_DEFAULT="init=/usr/lib/systemd/systemd quiet"

    Ricreiamo il file /boot/grub/grub.cfg con i seguenti comandi (ridondanti, ma nel più ci sta il meno):

    grub-install /dev/sda #o l'unità disco dal quale il vostro sistema fa il boot
    grub-mkconfig -o /boot/grubgrub.cfg
    mkinitcpio -p linux

    Riavviate

  2. Il nostro sistema ora parte con un sistema di init misto, systemd/sysvinit/initscripts.
    Dobbiamo controllare quali demoni partono all’avvio con il vecchio file /etc/rc.conf e cercare di rimpiazzarli con systemd.
    Apriamo due emulatori di terminale come illustrato qui in basso; in uno modifichiamo il file /etc/rc.conf in un altro attiviamo i comandi systemctl enableterminali emulazione demaPer ogni demone lanciato precedentemente dagli script sysvinit ed indicati nella riga DAEMONS in rc.conf dobbiamo trovare l’analogo per systemd.Possiamo aiutarci con la seguente tabella: (courtesy of archwiki)

    initscripts systemd Description
    acpid acpid.service Delivers ACPI events.
    alsa alsa-store.service
    alsa-restore.service
    Advanced Linux Sound Architecture; provides device drivers for sound cards.
    atd atd.service Run jobs queued for later execution.
    avahi-daemon avahi-daemon.service Allows programs to automatically find local network services.
    avahi-dnsconfd avahi-dnsconfd.service
    bitlbee bitlbee.service BitlBee IRC/IM gateway.
    chrony chrony.service Alternative NTP client/server designed for systems not online all the time.
    clamav clamd.service
    freshclamd.service
    Antivirus.
    cpupower cpupower.service Userspace tools for the kernel cpufreq subsystem
    craftbukkit not yet implemented CraftBukkit Minecraft server
    crond cronie.service Daemon to schedule and time events. The daemon name crond is used by at least two packages, cronie and dcron.
    cupsd cupsd.serviceor cups.service Common UNIX Printing System daemon.
    dbus dbus.service Message bus system for software communication.
    dcron dcron.service Daemon to schedule and time events. The daemon name crond is used by at least two packages, cronie and dcroncronie is the default cron implementation for Arch.
    deluged deluged.service Cross-platform and full-featured BitTorrent client.
    deluge-web deluge-web.service Cross-platform and full-featured BitTorrent client web UI.
    dovecot dovecot.service IMAP and POP3 server.
    dropboxd not yet implemented Cross-platform file synchronisation with version control.
    fam deprecated File Alteration Monitor. (deprecated)
    fancontrol fancontrol.service Fan control daemon (part of lm_sensors)
    fbsplash not yet implemented Graphical boot splash screen for the user.
    fluidsynth fluidsynth.service Software synthesizer
    ftpd not yet implemented Inetutils ftp daemon
    gdm gdm.service Gnome Display Manager (Login Screen)
    git-daemon git-daemon.socket GIT daemon
    gpm gpm.service Console mouse support.
    hal deprecated Hardware Abstraction Layer. (Deprecated)
    hddtemp hddtemp.service Hard drive temperature monitor daemon
    healthd healthd.service A daemon which can be used to alert you in the event of a hardware health monitoring alarm (part of lm_sensors).
    iptables iptables.service Load firewall rules.
    ip6tables ip6tables.service Load firewall rules for ipv6.
    httpd httpd.service
    See Systemd/Services#apache2 for manual configuration.
    Apache HTTP Server (Web Server)
    hwclock Not a daemon as such, but on shutdown, updates hwclock to compensate for drift. Only run this daemon if ntpd is not running as both daemons adjust the hardware clock.
    irqbalance not yet implemented Irqbalance is the Linux utility tasked with making sure that interrupts from your hardware devices are handled in as efficient a manner as possible.
    kdm kdm.service KDE Display Manager (Graphical Login)
    krb5-kadmind krb5-kadmind.service Kerberos 5 administration server
    krb5-kdc krb5-kdc.service Kerberos 5 KDC
    krb5-kpropd krb5-kpropd.service Kerberos 5 propagation server
    laptop-mode laptop-mode-tools.service Laptop Power Saving Tools
    lighttpd lighttpd.service Lighttpd HTTP Server (Web Server).
    lxdm lxdm.service LXDE Display Manager (Graphical Login)
    mdadm mdadm.service MD Administration (Linux Software RAID).
    mpd mpd.service Music Player Daemon.
    mysqld mysqld.service MySQL database server.
    mythbackend mythbackend.service Backend for the MythTV digital video recording/home theater software.
    named named.service The Berkeley Internet Name Daemon (BIND) DNS server.
    netfs unused, handled automatically, seeremote-fs.target to manually execute scripts Mounts network file systems.
    net-auto-wired net-auto-wired.service Netcfg replacement for network - connects to wired network
    net-auto-wireless net-auto-wireless.service Netcfg replacement for network - connects to wireless network
    net-profiles netcfg.servicenetcfg@<profile-name>.service Netcfg replacement for network - connects to profiles
    network (dynamic Ethernet)dhcpcd@<interface>.service To bring up the network connections.
    networkmanager NetworkManager.serviceNetworkManager-wait-online.service Replaces network, and provides configuration and detection for automatic network connections.
    nginx nginx.service Nginx HTTP Server and IMAP/POP3 proxy server (Web Server)
    nscd nscd.service Name service cache daemon
    ntpd ntpd.service Network Time Protocol daemon (client and server).
    Ntop ntop.service Ntop is a network traffic probe based on libcap.
    openntpd openntpd.service alternate Network Time Protocol daemon (client and server).
    osspd osspd.service OSS Userspace Bridge.
    openvpn openvpn@<profile-name>.service One for each vpn conf file saved like /etc/openvpn/<profile-name>.conf
    pdnsd pdnsd.service Proxy DNS server with permanent caching.
    php-fpm php-fpm.service FastCGI Process Manager for PHP
    oss oss.service Open Sound System. Alternative to ALSA.
    postgresql postgresql.service PostgreSQL database server.
    postfix postfix.service
    powernowd not yet implemented To adjust speed of CPU depending on system load. See also CPU Frequency Scaling
    prosody prosody.service XMPP server.
    ppp not yet implemented A daemon which implements the Point-to-Point Protocol for dial-up networking.
    preload preload.service Makes applications run faster by prefetching binaries and shared objects.
    psd psd.service Manages your browser’s profile in tmpfs and periodically sync it back to your physical disk.
    pure-ftpd not yet implemented FTP server.
    readahead systemd-readahead-collect.service

    systemd-readahead-done.service

    systemd-readahead-drop.service

    systemd-readahead-replay.service

    Readahead for faster boot
    rfkill rfkill.service (Un)block radio devices. (.service does not seem to provide equivalent functionality.)
    rsyncd rsyncd.service Rsync daemon.
    rsyslogd rsyslog.service The latest version of a system logger.
    samba smbd.servicenmbd.servicewinbindd.service File and print services for Microsoft Windows clients.
    saned saned@.service To share the scanner system over network.
    sensord sensord.service Sensor information logging daemon (part of lm_sensors)
    sensors lm_sensors.service Hardware (temperature, fans etc) monitoring.
    slim slim.service Simple Login Manager
    smartd smartd.service Self-Monitoring, Analysis, and Reporting Technology (S.M.A.R.T) Hard Disk Monitoring
    smbnetfs smbnetfs.service To automatically mount Samba/Microsoft network shares.
    snmpd not yet implemented A suite of applications used to implement SNMP
    soundmodem not yet implemented Multiplatform Soundcard Packet Radio Modem
    spamd spamassassin.service e-mail spam filtering service.
    sshd sshd.service
    sshd@.service
    sshdgenkeys.service
    OpenSSH (secure shell) daemon.
    stbd deprecated This daemon was previously necessary for gnome-system-tools. However, as of gnome-tools 2.28, it is no longer needed.
    svnserve svnserve.service Subversion server
    syslogd deprecated This was the older and basic system logger.
    syslog-ng syslog-ng.service System logger next generation.
    timidity++ not yet implemented Software synthesizer for MIDI.
    tor tor.service Onion routing for anonymous communication.
    transmissiond transmission.service Bit Torrent Daemon.
    ufw ufw.service Uncomplicated FireWall.
    vboxservice vboxservice.service VirtualBox Guest Service
    vsftpd vsftpd.service
    vsftpd@.service
    vsftpd-ssl.service
    FTP server.
    wicd wicd.service Combine with dbus to replace network, a lightweight alternative to NetworkManager.
    x11vnc not yet implemented VNC remote desktop daemon

    Una volta compiuto questo passo, siamo pronti per togliere di mezzo sysvinit/initscript e passare a systemd/initscript

  3. Installiamo il pacchetto systemd-sysvcompat
    pacman -S systemd-sysvcompat
    risoluzione delle dipendenze in corso...
    ricerca dei conflitti in corso...
    :: systemd-sysvcompat e sysvinit vanno in conflitto. Vuoi rimuovere sysvinit? [s/N]

    Rimuoviamo la riga da /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT=”init=/usr/lib/systemd/systemd, riconfiguriamo grub come al punto 1 e riavviamo.

In un prossimo post vedremo come passare ad un sistema con init in puro systemd.

Follow @dema on ADN

+Antonangelo De Martini»

Font mangiucchiati su Arch Linux con Intel 945

Se usi linux (arch nel mio caso), se hai una scheda grafica Intel così identificata da lspci

00:02.0 VGA compatible controller: Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller (rev 03)

e vedi i font mangiucchiati, devi aggiungere questo file nel path /etc/X11/xorg.conf.d .

nano -w 10-debugwait.conf
Section "Device"
    Identifier "Intel"
    Driver "intel"
    Option "DebugWait" "true"
EndSection

Riavvia il server grafico X e niente più font mangiucchiati.

+Antonangelo De Martini

Le cose di una volta parte 1

E’ per me un periodo di riciclo, di rivalutazione delle cose di una volta.
Intendiamoci, con i tempi che corrono, le cose di una volta si possono annoverare negli oggetti che hanno anche solo due anni di vita.

Ecco alcuni strumenti che ho rimesso in vita e ri-cominciato ad usare su base giornaliera.

MacBook Nero 1.1 anno 2006
Core Duo (T2500) 2.0 GHz
1 GB PC2-5300 DDR2
80 GB (5400 RPM) Serial ATA (1.5 Gb/s)
13.3″ Widescreen Glossy display.

marcamp 2007

Image Credits:Luca Conti

E’ il mio primo e unico macbook, usato con assiduità per circa tre anni e poi abbandonato, prima in favore di un netbook 10,1 asus e poi semplicemente non usato per minore necessità di computazione in mobilità; per intenderci la comparsa degli smartphone ha ridotto l’esigenza di portarsi sempre appresso un notebook.

Ultimamente viaggiava sempre in borsa, ma sempre spento e veniva utilizzato solo nell’eventualità di un intervento presso qualche cliente. Le ragioni di un progressivo disinnamoramento credo siano da ricercarsi nel fatto che una macchina così poco dotata dal lato hardware ormai faticava, e non poco, con il carico del sistema operativo Mac OsX Leopard.

Alcuni giorni fa la svolta. Seguendo la precisa guida di Arch Wiki ho fatto piazza pulita di MacOs e installato Archlinux. Il macbook è tornato a nuova vita. Una saetta incredibilmente performante, con tutte le periferiche funzionanti, una sospensione su ram — che con macosx aveva smesso di funzionare per problemi di intermittenza del chip bluetooth — favolosa e una durata di esercizio delle batterie forse maggiore che con MacOs*.
continua…

*quest’ultima valutazione può essere falsata dal mio rinnovato entusiasmo nel veder volare un computer che prima era lento come una lumaca :-)

+Antonangelo De Martini

Web radio con Amazon EC2

Come forse già sapete, Amazon ha lanciato le nuove micro istanze da 0.02 US$ l’ora che permettono di avere un server virtuale  con 633 MB di Ram e 1 VCPU. Questo ci permette di poter fare delle sperimentazioni senza troppi patemi d’animo.

Quello che segue è un piccolo esperimento per un server webradio Icecast da usare in qualsiasi momento per una diretta radio estemporanea con la possibilità di collegare un discreto numero di ascoltatori contemporaneamente.

Infatti ogni istanza EC2 Amazon dovrebbe poter contare su 250Mbps di banda upstream, il che permette un totale di quasi 1900 ascoltatori a 128Kbps con un costo indicativo di circa 0.15 us$ per Gb. Per un’ora di trasmissione con 2000 ascoltatori dovremmo spendere all’incirca 15 euro. Ci dovremmo stare nelle spese :-)

Andiamo a vedere nel dettaglio come lanciare un’istanza micro di fedora core 8.

(altro…)

Old sources su Ubuntu non più mantenute

Certe volte capita di dover lavorare su vecchie installazioni di Ubuntu, ancora perfettamente funzionanti ma non di classe LTS e quindi ormai abbandonate.

Può capitare di voler aggiungere qualche pacchetto, ma essendo scaduto il supporto, apt-get install non funziona più.

La soluzione è cambiare il file sources.list, elencando come target old-releases.ubuntu.com. Ecco un esempio con Gutsy 7.10  :

[sourcecode language="bash"]
deb http://old-releases.ubuntu.com/ubuntu/ gutsy main restricted
deb http://old-releases.ubuntu.com/ubuntu/ gutsy-updates main restricted
deb http://old-releases.ubuntu.com/ubuntu/ gutsy universe
deb http://old-releases.ubuntu.com/ubuntu/ gutsy-updates universe
deb http://old-releases.ubuntu.com/ubuntu/ gutsy multiverse
deb http://old-releases.ubuntu.com/ubuntu/ gutsy-updates multiverse
deb http://old-releases.ubuntu.com/ubuntu/ gutsy-security main restricted
deb http://old-releases.ubuntu.com/ubuntu/ gutsy-security universe
deb http://old-releases.ubuntu.com/ubuntu/ gutsy-security multiverse[/sourcecode]

Dopo un apt-get update possiamo nuovamente aggiungere il pacchetto preferito con apt-get install.

Il mediacenter in salotto

Finalmente ho deciso di dotarmi di una postazione di home entertainment in salotto così composta :

Tv lcd full HD 37 pollici LG 37LD428
Decoder sky HD
Asus eeebox  PC EB1501

Se ovviamente lato televisore e decoder c’è veramente poco da smanettare nel piccolo eeebox possiamo mettere le mani con soddisfazione  e creare un media center di tutto rispetto mantenendo ingombro e rumorosità sotto controllo e, cosa da non sottovalutare, senza deturpare l’arredo con “case” catafalchi e grovigli di fili.

L’eeebox EB1501 è stato scelto fra i vari nettop principalmente per tre motivi.
Il primo è che ho un’ottima stima di Asus come produttore e nessuna brutta esperienza con i suoi prodotti, il secondo è la dotazione di serie di un telecomando a raggi infrarossi e un ricevitore IR integrato, indispensabile per un mediacenter e l’ultimo perché è uno dei pochi nettop che incorpora anche il lettore DVD (sempre più raramente, ma a volte può capitare di vederne uno).

Per il resto le caratteristiche sono quelle di un comune nettop: intel atom 330 dual core, 2 Gb Ram, disco da 250 Gb, grafica Nvidia ION, porta Lan e WLAN b/g/n.

Non mi dilungo sulle valutazioni dell’hardware in quanto l’Eeebox EB1501 è ormai in commercio da un pezzo ed è stato già rivoltato come un calzino.

Vediamo come al solito passo passo come procedere all’installazione del software che si appoggerà su Ubuntu 9.10 e XBMC.

(altro…)

Backup su HSDPA con router Linux

La settimana scorsa Stefano ha avuto un down tremendo della HDSL, più di 72 ore, quasi insopportabili per una azienda al giorno d’oggi. Per questo motivo mi ha chiesto di aggiungere al firewall/router che già gestisce le policy di rete, un backup su HSDPA automatico che attivi la connessione su 3G non appena il link ADSL cade.

Ho cercato in rete se esisteva già qualche setup, ma ho trovato solo una guida per zeroshell e alcune discussioni su forum che però non erano pienamente esaustive.

Partendo quindi dal semplice concetto che per effettuare uno switch al volo occorre testare il default gateway e nel caso fallisca attivare il gateway su rete cellulare e il masquerading  attraverso esso, ho buttato giù questo accrocchio immondo in shell script.

Il meccanismo si basa su quattro script chiamati pingeth1, killpingeth1, pingppp0, killpingppp0.

Lo script principale è pingeth1

[sourcecode language="bash"]
#/bin/bash
ping -I eth1 -c3 151.99.29.203 > result.tst;
ALERT=`grep -c "3 received" result.tst`
if [ $ALERT = 1 ] ; then
echo "ok"
else
wvdial &
sleep 10
/usr/local/bin/killpingeth1
/sbin/shorewall clear
/sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
/sbin/route add default gw 10.64.64.64 dev ppp0
fi
rm result.tst
exit 0[/sourcecode]

Esaminiamo nel dettaglio quanto sopra:

Vengono lanciati 3 ping attraverso eth1 (porta wan collegata al router adsl) verso il nodo p-t-p della connessione (151.99.29.203) e il risultato viene scritto nel file temporaneo result.tst

Viene introdotta la variabile ALERT ottenuta greppando e contando l’occorrenza del termine “3 received” dal file temporaneo result.tst.

Se il valore di ALERT è uguale ad 1, lo script si limita a stampare la scritta OK, se il valore di ALERT è diverso da 1 viene nell’ordine:

1)lanciato wvdial in backgroud
2)inserito un sleep di 10 secondi per permettere a wvdial di alzare correttamente la connessione
3)invocato lo script killpingeth1 (che vedremo più sotto)
4)resettate le regole del firewall in essere
5)inserita una nuova regola di iptables per il masquerading attraverso l’interfaccia ppp0
6)aggiunta la nuova default gateway attraverso l’interfaccia ppp0

Viene infine rimosso il file temporaneo result.tst.

Pingeth1 va eseguito ogni minuto da cron, per cui occorre creare un nuovo cronjob

[sourcecode language="bash"]
crontab -e
*/1 * * * * /usr/local/bin/pingeth1 >/dev/null[/sourcecode]

Esaminiamo ora lo script killpingeth1

[sourcecode language="bash"]
#/bin/bash
crontab -l >CRON_TEMP
awk ‘$0!~/pingeth1/ { print $0 }’ CRON_TEMP >CRON_NEW
echo "*/1 * * * * /root/pingppp0 >/dev/null" >>CRON_NEW
crontab CRON_NEW
/etc/init.d/cron restart
rm CRON_TEMP;
rm CRON_NEW;
exit 0[/sourcecode]

La funzione primaria di killpingeth1 è quella di cambiare lo schedulatore, rimuovendo la programmazione di pingeth1 ed inserendo la nuova programmazione di pingppp0 (che vedremo più sotto).

Invocato unicamente in caso di mancata risposta del gateway primario killpingeth1 esegue i seguenti passaggi:

1)Elenca il contenuto del crontab e lo scrive in un file temporaneo CRON_TEMP
2)verifica la presenza della stringa pingeth1 sul file temporaneo CRON_TEMP e se presente la elimina scrivendo un nuovo file CRON_NEW
3)appende alla fine del file CRON_NEW la nuova schedula di pingppp0
4)installa il nuovo cronjob
5)rimuove i file temporanei CRON_NEW e CRON_TEMP

Da questo momento la connessione è instradata attraverso ppp0, però con un monitor sempre attivo sull’interfaccia principale, in modo che, se la connessione dovesse essere ripristinata, si ritorni in modo automatico alle condizioni di lavoro predefinite.

Il controllo dell’interfaccia eth1 viene demandato allo script pingppp0 che abbiamo inserito nel nuovo cronjob.

Vediamolo in dettaglio

[sourcecode language="bash"]
#/bin/bash
/sbin/route del default gw 192.168.0.1 dev eth1
/sbin/route add default gw 192.168.0.1 dev eth1
ping -I eth1 -c 3 151.99.29.203 > result.tst;
ALERT=`grep -c "3 received" result.tst`
if [ $ALERT = 1 ] ; then
killall wvdial
/usr/local/bin/killpingppp0
/sbin/shorewall restart
else
echo "ancora su linea backup"
/sbin/route del default gw 192.168.0.1 dev eth1
fi
rm result.tst
exit 0[/sourcecode]

Lo script pingppp0 viene eseguito ogni minuto e compie la seguente routine:

Cancella ed aggiunge la default gateway su eth1 (workaround orrendo, ma senza questo passaggio il ping di controllo non riusciva a passare dall’interfaccia eth1, se qualcuno ha una soluzione può integrare e migliorare questo passaggio)

Esegue i soliti 3 ping verso il nodo p-t-p della connessione (151.99.29.203) e il risultato viene scritto nel file temporaneo result.tst

Introduce la variabile ALERT ottenuta greppando e contando l’occorrenza del termine “3 received” dal file temporaneo result.tst.

Se il valore di ALERT è uguale ad 1 viene nell’ordine:

1)abbattuto il processo wvdial facendo così cadere la connessione 3G
2)invocato lo script killpingppp0 ( che vedremo più sotto)
3)fatto ripartire il firewall

Se il valore di ALERT è diverso da 1 si limita a stampare la stringa “ancora su linea backup” e cancella la default gateway su eth1, rimuovendo come ultimo comando il file temporaneo result.tst.

Rimane da prendere in esame l’ultimo script killpingppp0 che si prende cura di ripristinare il corretto cronjob su pingeth1

Ecco lo script:

[sourcecode language="bash"]
#/bin/bash
crontab -l >CRON_TEMP
awk ‘$0!~/pingppp0/ { print $0 }’ CRON_TEMP >CRON_NEW
echo "*/1 * * * * /root/pingeth1>/dev/null" >>CRON_NEW
crontab CRON_NEW
/etc/init.d/cron restart
rm CRON_TEMP
rm CRON_NEW
exit 0[/sourcecode]

Lo script è del tutto analogo a killpingeth1 e quindi esegue nell’ordine i seguenti passaggi:

1)Elenca il contenuto del crontab e lo scrive in un file temporaneo CRON_TEMP
2)verifica la presenza della stringa pingppp0 sul file temporaneo CRON_TEMP e se presente la elimina scrivendo un nuovo file CRON_NEW
3)appende alla fine del file CRON_NEW la nuova schedula di pingeth1
4)installa il nuovo cronjob
5)rimuove i file temporanei CRON_NEW e CRON_TEMP

Questa catena di script si intesta in un loop che switcha in maniera accettabilmente veloce la connessione tra la linea adsl e 3G, senza nessun intervento manuale da parte dell’amministratore di sistema.

Vista la ruvidità del procedimento non è possibile avere tutte le funzionalità avanzate del router come transparent proxy e vpn, ma credo che il compromesso per essere sempre online anche dopo la caduta del link primario sia accettabile.

I vostri commenti, insulti e migliorie sono come al solito più che apprezzati.

Xen su debian lenny 64 bit, no frills guide parte 3

Eccoci giunti al momento di installare delle virtual machines full virtualized sul nostro hypervisor Xen.

Inizieremo con la preparazione di un file immagine per ospitare il sistema windows e con la creazione dell’immagine Iso per l’installazione.
(altro…)

Xen su debian lenny 64 bit, no frills guide parte 2

Ci eravamo lasciati con il riavvio di Dom0 nel nuovo ambiente di hypervisor, con tutti i controlli e gli accorgimenti del caso.

E’ arrivato il momento di creare la prima virtual machine (DomU) linux paravirtualizzata.

(altro…)