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
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.
(nexus7)
Assicuriamoci di avere l’ultima versione di Android 4.2.1 stock installata tramite aggiornamento OTA di Google.
(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.
(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.
(computer Linux)
Scarichiamo l’immagine della recovery di Clockworkmod
(computer Linux)
Scarichiamo i pacchetti necessari per Cyanogenmod 10.1 per Nexus 7 wifi (grouper) e le Google Apps per Jelly Bean
(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.
(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/
(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
(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.
(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.
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:
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
Per 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 dcron. cronie 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
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.
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.
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.
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
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.
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.
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.
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.
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.
(continua…)
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.