Category Archives: Guide

Ripristinare il boot loader

Grub

Smanettando incautamente con i boot loader o installando Windows su un sistema dove è presente una partizione Linux spesso capita di sovrascrivere il mbr.

Superato l’attimo di smarrimento per il mancato caricamento del sistema operativo, occorrerà semplicemente mantenere la calma e seguire questa guida per recuperare la situazione.

Ci occorre un liveCD/DVD, ne va bene uno qualunque: UbuntuSystemrescuecdKnoppix, il cd di installazione di Archlinux

Facciamo boot da CD.
Ipotizziamo di avere una partizione / chiamata /dev/sda1 e nessuna /boot

  • Creiamo i mount point
    # sudo su
    # cd /mnt
    # mkdir sda1
    # mount /dev/sda1 /mnt/sda1
    # mount --bind /dev /mnt/sda1/dev
    # mount --bind /proc /mnt/sda1/proc
  • Eseguiamo il chroot in /dev/sda1
    # chroot /mnt/sda1
  • Modifichiamo grub se necessario
    # nano/boot/grub/menu.lst
    oppure se usiamo grub2
    # nano/boot/grub/grub.cfg
  • Reinstalliamo grub
    # grub-install /dev/sda
  • Usciamo dal chroot e smontiamo la partizione
    # exit
    # umount /mnt/sda1/proc
    # umount /mnt/sda1/dev
    # umount /mnt/sda1
  • Facciamo il reboot ed incrociamo le dita…
    # reboot

Router-NAS

seagate_goflex

NBle modifiche che suggerisco potrebbero invalidare la garanzia del prodotto, non mi ritengo responsabile per eventuali danni al vostro hardware, se non sapete cosa state facendo non fatelo!

Questo post nasce in risposta a varie richieste di chiarimento che ho ricevuto in merito a come si possa modificare un router per fargli scaricare in automatico gli aggiornamenti di Arch Linux (o di altre distro).

Scelta dell’hardware

Ai suoi tempi la mia scelta cade sul Netgear DGN2200 per i seguenti motivi:

  • il prezzo contenuto: 49.9 €
  • presenza di una porta USB per la condivisione dei dati con uno storage esterno
  • possibilità di utilizzare un firmware personalizzato: Modfs

Ingredienti

  • un router Netgear DGN2200
  • un hard disk esterno (potrebbe andar bene anche una penna usb da diversi GB)
  • il firmware modificato,
  • l’immagine col modfs
  • binari di rsync + librerie per piattaforma mips

Per prima cosa flashare il router col nuovo firmware. Si tratta di un firmare quasi identico all’originale se non per il fatto che permette di caricare ed avviare il filesystem contenuto nella modfs. Per poter funzionare la modfs deve essere decompressa in una partizione FAT32 del disco collegato via USB al router, il nome dell’immagine non potrà essere modificato altrimenti non verrà caricata.

Ho optato per un HD da 320 GB, con una partizione sda1 FAT32 da qualche GB contenente la modfs e poco altro ed il resto del disco (sda2) formattato in ext3 così da non avere problemi né con i permessi, né con i file di dimensioni > 4 GB.

Col vostro browser preferito aprite l’interfaccia web di configurazione del router:
http://ip_router:8081

Nel mio caso http://192.168.0.1:8081, inserite user e password (di default: admin/admin). Andate su Services ed attivate cron ed sshd.

Per completare l’opera c’è bisogno di installare rsync sul router e di farlo partire in automatico ogni notte per sincronizzare i pacchetti dell’HD USB con quelli di un repository ufficiale di Arch (ovviamente tale giochetto può essere fatto con qualsiasi mirror che supporti rsync: Ubuntu, Debian, Slackware o perfino FreeBSD, NetBSD o OpenBSD).

L’architettura del router è mips, facilmente individuabile loggandovi con ssh e dando il comando # uname -a
Linux (none) 2.6.21.5 #2 Sun Apr 3 10:30:24 CEST 2011 mips unknown

Problema: dove rimediare rsync compilato per piattaforma mips?

Soluzione 1: scaricare buildroot e compilarne uno per conto nostro
Soluzione 2: cercare in rete se qualcuno si è già smazzato al posto nostro e distribuisce qualcosa che può fare al caso nostro.

Nel pieno spirito dell’opensource e data la mia proverbiale pigrizia ho deciso di approfittare del lavoro di qualcun altro. Nello specifico ho optato per sfruttare i pacchetti dei repositori dell’openwrt per adattarli alle mie esigenze.
Per chi fosse interessato metto a disposizione il pacchetto che ho fatto io: rsync, per installarlo basta copiarlo (es. da ssh usando wget) nella directory /tmp/mod/modfs del router e decomprimerlo.

La partizione FAT32 è automaticamente messa in share dal router e montata in /tmp/mnt/usb0/part1, ora bisogna montare manualmente anche l’altra partizione (sda2) all’interno del filesystem condiviso es.: /tmp/mnt/usb0/part1/pub.

Script
Aggiornare i repository di Arch  comporta l’impiego di vari parametri non particolarmente intuitivi da passare a rsync, per semplificarmi la vita mi sono creato quest script che scarica tutto quello che mi serve in /tmp/mnt/usb0/part1/pub/Backup/archlinux/

crond
Aggiungiamo lo script al cron-job così che possa essere eseguito ogni giorno ad una certa ora (es. alle 3:30):

/tmp/mod/modfs/packages/DGN2200/cron/scripts/cron_entry -s rsync "30 03 * * * /tmp/mnt/usb0/part1/pub/Backup/archlinux/mirror.sh"

/tmp/mod/modfs/packages/DGN2200/cron/scripts/update

(Per eliminare un processo da cron va invece usato quest’altro comando:
/tmp/mod/modfs/packages/DGN2200/cron/scripts/cron_entry -u rsync)

Condivisione
Per non interferire con i processi di sistema ho deciso di non sfruttare il server ftp dello share, ma di usare un nuovo processo con l’httpd di busybox.
httpd -p 81 -h /tmp/mnt/usb0/part1/pub/Backup/archlinux/ -c /tmp/mod/modfs/etc/httpd.conf
(Ho dovuto metterlo in ascolto sulla porta 81, perché l’80 è già occupata dal demone che gestisce l’interfaccia di configurazione del router)

Automatismo di boot
Per non dover montare a mano la partizione ext3 e far partire l’httpd sulla porta 81 ogni volta che devo riavviare il router, ho aggiunto allo script di sistema /tmp/mod/modfs/boot.sh
le seguenti righe:
mount /dev/sda2 /tmp/mnt/usb0/part1/pub
httpd -p 81 -h /tmp/mnt/usb0/part1/pub/Backup/archlinux/ -c /tmp/mod/modfs/etc/httpd.conf

Client
Per poter usare il repository locale dai PC di casa con Arch bisogna modificare il file /etc/pacman.d/mirrorlist
E come prima riga aggiungere
Server = http://192.168.0.1:81/$repo/$arch
(Dove 192.168.0.1 è l’IP del router e /$repo/$arch corrispondono al path dove risiedono i pacchetti)

Se usate Debian/Ubuntu dovrete invece modificare appropriatamente il file /etc/apt/sources.list

P.S.
In teoria la mia ADSL è un’Alice 7 MB, in pratica la portante arriva 1,5 MB a cui corrisponde una velocità massima in download di circa 155 Kb/sec.
Il mirror completo dei repository di Arch sono circa 25 GB per la i686 + altri 25 per la x86_64, quindi un totale di circa 50 GB se non volete rinunciare ad utilizzare un sistema a 64bit sui processori che lo supportano.
La prima volta che ho fatto la sincronizzazione per scaricare i 50 GB ho impiegato 3 giorni interi!
Adesso rsync si avvia in automatico ogni notte alle 3:30 ed in più di due anni non mi è mai capitato di trovarlo ancora in esecuzione la mattina alle 7.
Avere l’ADSL intasata dalle 3 alle 5 di mattina non crea alcun disturbo, mentre fare aggiornamenti di centinaia di MB in pochi secondi non ha prezzo 🙂
Guardate, ad esempio, la differenza di tempo che impiego nello scaricare un pacchetto da 26 MB come wine.

Repository esterno:
wine-1.3.33-1-x86_64            26.5M  152.2K/s 00:02:55

Mirror interno:
wine-1.3.33-1-x86_64            26.5M    4.8M/s 00:00:05

Ogni 25 MB risparmio circa 3 minuti. Non di rado capita un aggiornamento di KDE, GNOME o LibreOffice che può anche superare i 400 MB. Con la mia connessione ci metterei 40-50 minuti a PC, che moltiplicato x i 4 PC che ho, fanno 3 ore e mezzo! Col serverino casalingo impiego circa 1 minuto a PC e anche in quel breve lasso di tempo l’ADSL non subisce rallentamenti perché i pacchetti sono scaricati dalla LAN.
Cosa non ci tocca fare per rimediare all’inefficienza della Telecom…

Android Server

smartphone-server

Che i moderni smatphone siano dei veri e proprio computer è cosa appurata, ma non tutti sanno che con poca fatica è possibile trasformare il proprio cellulare in un vero e proprio server!

Giusto per avere un parametro di riferimento: la potenza del mio vecchio Motorola Cliq del 2010 sembra essere di 527.68 BogoMIPS, ciò lo renderebbe equiparabile all’incirca ad un Pentium III 500 del 2000.
Tutto sommato sembrerebbe una discreta macchina per un serverino casalingo dal minimo ingombro ed a bassissimo consumo!

Requisiti

  • Smartphone o tablet con Android con permessi di root (per ogni modello bisogna seguire una procedura specifica per attivare tali permessi, ma ATTENZIONE perché nella maggior parte dei casi tali modifiche invalidano la garanzia)
  • Un emulatore di terminale (es. ConnectBot)
  • L’applicazione Debian Kit
  • Link della guida ufficiale del Debian Kit (English only)

Howto

  • Installare l’applicazione Debian Kit o scaricare direttamente il più recente file debian-kit-*.shar in una qualsiasi directory non di sistema (es. /sdcard/Download/)
  • Aprire un terminale, loggarsi come root ed eseguire il file appena scaricato:
    # su
    # cd /sdcard/Download/
    # sh /sdcard/download/debian-kit-1-5.shar
  • Seguire le istruzioni dell’installer
  • Digitare “deb” da una console per fare avviare il sistema Debian appena installato

Adesso possiamo utilizzare il classico apt-get install per aggiungere nuovi programmi (mysql, lighttpd, ftpd, etc…).

Per prima cosa consiglio caldamente di installare il metapacchetto ssh contenente (openssh client e server) così da poter utilizzare una normale tastiera di un PC per loggarsi sulla shell dello smartphone.

# apt-get install ssh

Per bypassare l’assenza della password di root e loggarsi sull’smartphone si può effettuare il login tramite chiave pubblica copiando la propria id_dsa.pub nell’authorized_keys del telefono.

Es.: (dal terminale del cellulare)
# ssh-keygen
# cd .ssh/
# sftp user@hostname_PC
get .ssh/id_dsa.pub
bye
# mv id_dsa.pub'authorized_keys

Linux Terminal Server

x2goDato che una delle principali occupazioni del GOLEM riguarda il trashware non è infrequente che ci vengano chieste delucidazioni su come recuperare laboratori di informatica utilizzando soluzioni centralizzate es. attraverso Terminal Server e Thin Client. Tradotto per i non anglofoni suona come qualcosa di questo genere: un serverone centrale al quale si possono connettere dei terminali “stupidi” (cioè vecchi PC poco potenti) al fine di sfruttarne la potenza di calcolo.

È  possibile optare per diverse soluzioni tecniche

  • Linux Terminal Server Projects: soluzione classica, funzionante, ma un po’ complicata da realizzare.
  • NoMachine NX:  alternativa al più lento VNC, permette di collegarsi tramite ssh ad qualsiasi computer connesso in rete.
  • X2Go: un’evoluzione del precedente progetto.

In questi giorni mi sono proposto di analizzare e testare sulle mie macchine X2Go, rispetto alle precedenti l’ho trovata estremamente più semplice (praticamente alla portata di chiunque) e di rapida realizzazione.

Lato server

Installare x2goserver

Arch Linux
Il pacchetto è già presente nei repository ufficiali per cui è sufficiente installarlo, creare il database ed avviare il demone
# pacman -Syu && pacman -S x2goserver && x2godbadmin --createdb
# systemctl enable x2goserver.service ; systemctl start x2goserver.service

Debian
Occorre aggiungere manualmente il repository prima di installare il pacchetto
# apt-key adv --recv-keys --keyserver keys.gnupg.net E1F958385BFE2B6E
# echo "deb http://packages.x2go.org/debian squeeze main" >> /etc/apt/sources.list
# apt-get update && apt-get install x2go-keyring && apt-get update

Adesso sarà possibile effettuare l’installazione
# apt-get install x2goserver

NB: sul server è necessario che sia attivo anche il demone ssh

Lato client

Installare x2goclient

Arch Linux
# pacman -Syu && pacman -S x2goclient

Debian
Se il repository è già stato configurato basta installare il pacchetto client
# apt-get install x2goclient

Cliccando su Programmi -> Internet -> X2Go sarà adesso possibile effettuare il login su qualsiasi server nel quale sia configurati i servizi ssh ed x2goserver.

NB: utilizzando pulseaudio funzionano anche l’audio!

Spunti di utilizzo
Realizzare (es. con remastersys) un livecd o una penna usb avviabile per usare X2Go anche su computer senza disco fisso o addirittura rendere disponibile l’iso del livecd per il boot da rete tramite PXE (prendendo esempio da questa guida).

Installazione con PXE

netboot

In officina capita spesso di dover effettuare installazioni dell’ultimo minuto. Normalmente, ammesso che si riesca a rintracciare l’ISO giusta sulla workstation, il PC col masterizzatore è sempre occupato da qualcuno che sta facendo qualcosa di importantissimo (es. cercare su Google il numero di tel. del ristorante dove organizzare la prossima cena del GOLEM :-P), ovviamente è impensabile trovare nei paraggi qualche penna USB funzionante e sacrificabile per tale scopo.

Ecco come il PXE, permettendoci di effettuare il boot di un PC direttamente da rete (invece che da CD-ROM o USB come faremmo normalmente), può venirci in soccorso.

Non occorre nemmeno che il BIOS del computer in questione supporti il boot da rete perché scaricando un apposito floppy qualsiasi PC può acquisire questa capacità, si possono addirittura effettuare boot da reti WIFI protette con WPA o WEP.

Per i dettagli sulla configurazione del server di boot si rimanda al WIKI.