Archive by Author
tethering

Attivare l’Hotspot Personale (Tethering) su iPad con Tre Italia – no jailbreak

Anche sul nuovo ipad (ovviamente) è presente la funzione di hotspot personale.

A quanto pare, però, alcuni simpatici gestori inibiscono questa funzionalità temendo chissà quali utilizzi perversi.

Ora, se siete consapevoli di quello che volete fare, se siete convinti che tali limitazioni siano assurde, se siete perversi… procediamo.

Scaricate il file Hutchinson_it.ipcc (oppure qui). E’ il carrier bundle modificato.

Chiudete iTunes se è aperto. A questo punto aprite un terminale e digitate:

defaults write com.apple.iTunes carrier-testing -bool TRUE

Potete aprire nuovamente iTunes e connettere l’iPad con il cavo USB. Spostatevi nella schermata “Sommario” e cliccate su “Ripristina” tenendo premuto il tasto ALT (Shift su Windows).

Nella finestra di dialogo che si aprirà navigate fino alla cartella dove avete scaricato il file, selezionatelo e apritelo.

iTunes ripristinerà il nuovo carrier bundle sull’iPad nel giro di pochi secondi.

Spegnete e riaccendete l’iPad

Una volta riacceso l’iPad aspettate che il dispositivo trovi la rete 3G di Tre, andate su Preferenze, Generali, Rete e come per magia, se tutto è andato per il verso giusto, vedrete l’opzione Hotspot Personale. Un tap per selezionarla e un altro per attivarla.

Controllate che il tethering sia effettivamente funzionante e godetevi il vostro nuovo iPad con Hotspot Personale abilitato.

Per dovere di cronaca ecco i carrier bundle TIM e Vodafone opportunamente modificati:

Carrier Bundle TIM (oppure da qui)
Carrier Bundle VODAFONE (oppure da qui)

 Se volete ripristinare i carrier bundle originali:
 
 
Per abilitare il ripristino del carrier bundle su windows utilizzare i seguenti comandi:
 

%ProgramFiles%\iTunes\iTunes.exe /setPrefInt carrier-testing 1

Per chi utilizza Windows 64 bit il comando da inserire invece è questo:

C:\Program Files (x86)\iTunes\iTunes.exe” /setPrefInt carrier-testing 1

Comments ( 0 )
images

Copiare la propria chiave pubblica ssh su un server senza ssh-copy-id

Linux ha il comando ssh-copy-id che permette la copia della propia chiave pubblica ssh su un altro server, ma non tutte le varianti *nix hanno tale programma. Per copiare la propria chiave pubblica ssh su un server, da una macchina che non ha ssh-copy-id, ad esempio Mac OSX, di può ricorrere al seguente comando da lanciare nel terminale di OSX:

cat ~/.ssh/id_rsa.pub | ssh utente@dominio.estensione "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"
dove utente@dominio.estensione rappresenta l’utente ed il server su cui attivare l’accesso senza dover inserire la password ogni volta.

Per consentire l’accesso SSH all’utente root solo con il certificato (bloccando la connessione con password), bisogna modificare il file /etc/ssh/sshd_config ed in particolare impostare la direttiva:

PermitRootLogin without-password
riavviare poi il servizio con il classico:

/etc/init.d/ssh restart

Comments ( 0 )
squid_proxy_cache_clear_logo

Utilizzare un proxy squid come parent per alcuni domini

Ipoteticamente dalla nostra rete locale non possiamo raggiungere alcune destinazioni (p.e. baia.estensione) a causa di filtri a livello IP del nostro provider

Avendo la disponibilità di un server estero (o su una rete non filtrata) possiamo utilizzare questo come parent proxy per raggiungere queste destinazioni.

Stabiliamo una VPN tra il nostro gateway e il server non filtrato. Ipoteticamente l’ip VPN del server è 172.16.1.1.

Sul file /etc/squid/squid.conf aggiungiamo:

acl vpn src 172.16.1.0/24
http_access allow vpn

Installiamo sulla nostra rete locale uno squid in modalità trasparente e gli indichiamo, sempre in /etc/squid/squid.conf ma sul server locale:

cache_peer 172.16.1.1 parent 3128 3130
cache_peer_domain 172.16.1.1 .baia.estensione baia.estensione

A questo punto quando il nostro proxy trasparente LOCALE riceve una richiesta per baia.estensione inoltrerà questa richiesta al proxy parente che la potrà soddisfare senza problemi.

fatto.

 

Comments ( 0 )
administrator

Utente di dominio con diritti di Amministratore Locale

Quando si crea una rete con dominio Microsoft tutti gli utenti che utilizzano i client hanno i diritti del Gruppo Domain Users che è analogo al gruppo Users su Workgroup. Tale gruppo non può installare programmi e fare modifiche hardware, tipo installare una stampante o aggiornare il driver video.

In questo caso solo l’amministratore del dominio può effettuare modifiche rilevanti rendendo l’utilizzo del pc quasi impossibile per un utente comune.

Ma se vogliamo concedere all’utente il “pieno controllo” del proprio computer senza scollegarlo dal dominio che si fa?

Dare i diritti di Domain Admin ad un’utente può essere eccessivo perchè avrebbe la facoltà di cambiare le policy del server.

Andiamo sul computer dell’utente finale e avviamo un prompt dei comandi coi privilegi di amministratore del dominio:

Start -> Tutti i Programmi -> Accessori -> Prompt dei Comandi -> Tasto Destro
  -> su XP fai Esegui Come -> Utente Seguente – poi su Nome utente metti NOMEDOMINIO\Administrator e su Password la password poi OK
  -> su Windows Vista/7 Esegui come amministratore e scrivi semplicemente nome utente e password

A questo punto digitiamo i seguenti comandi:

net localgroup Administrators /add dominio\utente
gpupdate

dove su dominio va il nome del vostro dominio e su utente il nome utente loggato localmente sulla macchina che state usando. Al riavvio successivo del computer sarete in grado senza chiedere niente a nessuno di installare programmi e altro.

Comments ( 0 )
linuxkvm

Virtualizzazione KVM su Debian/64 – tutorial

installazione di base

si parte da un’installazione mimima del server con Debian/64.
I due dischi saranno partizionati così:

/dev/md0 composto da /dev/sda1 e /dev/sdb1, raid1, 500MB
/dev/md1 composto da /dev/sda2 e /dev/sdb2, raid1, resto dei dischi

/dev/md0 verrà utilizzato come “/boot”
/dev/md1 verrà utilizzato come LVM

dentro l’LVM verrà creato il VG “vg0” per l’intera capienza

per partire verranno definiti tre LV per swap, root e home.

la situazione iniziale del server è questa:
i volumi fisici sono:

# vgdisplay 
  --- Volume group ---
  VG Name               vg0
  Format                lvm2
  VG Size               2.73 TiB
  PE Size               4.00 MiB
  Total PE              715268
  Alloc PE / Size       13824 / 54.00 GiB
  Free  PE / Size       701444 / 2.68 TiB

i volumi logici sono (per brevità ometto le parti non necessarie):

# lvdisplay 
  --- Logical volume ---
  LV Name                /dev/vg0/root
  VG Name                vg0
  LV Size                10.00 GiB
   
  --- Logical volume ---
  LV Name                /dev/vg0/swap
  VG Name                vg0
  LV Size                24.00 GiB
   
  --- Logical volume ---
  LV Name                /dev/vg0/home
  VG Name                vg0
  LV Size                20.00 GiB

appena installato il server probabilmente il sistema MD starà riallineando i dischi:

# cat /proc/mdstat 
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : active raid1 sda2[0] sdb2[1]
      2929739071 blocks super 1.2 [2/2] [UU]
      [=>...................]  resync =  9.2% (269886208/2929739071) finish=288.3min speed=153726K/sec
      
md0 : active raid1 sda1[0] sdb1[1]
      524276 blocks super 1.2 [2/2] [UU]

Installiamo alcune utility:

# apt-get install jed mc iptraf tcpdump mtr

per prima cosa installiamo le utility per gli ethernet bridge:

# apt-get install bridge-utils

la definizione delle interfacce originale:

# cat interfaces.orig 
### Hetzner Online AG - installimage
# Loopback device:
auto lo
iface lo inet loopback

# device: eth0
auto  eth0
iface eth0 inet static
  address   5.9.39.34
  broadcast 5.9.39.63
  netmask   255.255.255.224
  gateway   5.9.39.33

# default route to access subnet
up route add -net 5.9.39.32 netmask 255.255.255.224 gw 5.9.39.33 eth0

modifichiamo per utilizzare il bridge:

# cat interfaces
### Hetzner Online AG - installimage
# Loopback device:
auto lo
iface lo inet loopback

# device: eth0
auto br0
iface br0 inet static
  address   5.9.39.34
  broadcast 5.9.39.63
  netmask   255.255.255.224
  gateway   5.9.39.33
  bridge_ports eth0
  bridge_stp on
  bridge_maxwait 0
  bridge_fd 0

# default route to access subnet
up route add -net 5.9.39.32 netmask 255.255.255.224 gw 5.9.39.33 eth0

per ottenere un secondo bridge dove connettere le schede di rete delle VM possiamo:

# brctl addbr br1
# brctl stp br1 on
# brctl show
bridge name	bridge id		STP enabled	interfaces
br0		8000.c8600054bfea	yes		eth0
br1		8000.000000000000	no		
# ifconfig br1 up
# ifconfig br1 172.16.16.1 netmask 255.255.255.0

o, alternativamente, appendere questa sezione al file /etc/network/interfaces:

auto br1
iface br1 inet static
  address 172.16.16.1
  broadcast 172.16.16.255
  netmask 255.255.255.0
  bridge_ports dummy0
  bridge_stp on
  bridge_maxwait 0
  bridge_fd 0

creiamo un LV per i dati degli ISO:

# mkdir /ISO
# lvcreate -L 30G -n ISO vg0
# mkfs.ext4 -m 0 -L ISO /dev/vg0/ISO
# mount /dev/mapper/vg0-ISO /ISO/

e inziamo scaricando una iso di ipfire e una di Debian:

# cd /ISO/
# wget http://cdimage.debian.org/debian-cd/6.0.5/amd64/iso-cd/debian-6.0.5-amd64-netinst.iso
# wget http://downloads.ipfire.org/releases/ipfire-2.x/2.11-core59/ipfire-2.11.i586-full-core59.iso

Iniziamo con la virtualizzazione.
Per prima cosa installiamo i tool necessari:

apt-get install qemu-kvm libvirt-bin virtinst

Creiamo il disco per il firewall:

# lvcreate --size 4G --name vm-ipfire vg0
  Logical volume "vm-ipfire" created

e procediamo con l’installazione del firewall:

# virt-install -d --name=firewall --ram 768 --vnc :0 --disk path=/dev/vg0/vm-ipfire --network=bridge:br0 --network=bridge:br1 --os-type=linux --cdrom /ISO/ipfire-2.11.i586-full-core59.iso

A questo punto l’installazione della VM è iniziata, possiamo connetterci al VNC attraverso un tunnel SSH:

ssh root@host-server -L 5900:127.0.0.1:5900
vnc localhost:0

Ad installazione completata (poche decine di secondi) la VM si riavvierà. Potrete trovarvi nella situazione in cui la VM non viene riavviata. Non è un problema.

Per prima cosa controlliamo quali VM stanno girando:

# virsh list
 Id Name                 State
----------------------------------

La lista è vuota. Proviamo a listare TUTTE le VM:

# virsh list --all
 Id Name                 State
----------------------------------
  - firewall             shut off

Appunto. La VM firewall è spenta. Accendiamola:

# virsh start firewall
Domain firewall started

Ci possiamo quindi riconnettere con VNC e terminare la configurazione.

ok
Comments ( 0 )
Homer_Teaching_Sq

Documentazione

Ecco un pò di link a della documentazione interessante

 

Comments ( 0 )
adobe-reader-3D

Ritagliare un file pdf

Spesso ci troviamo con un pdf con bordi troppo grossi oppure asimmetrico e vogliamo ritagliarlo.

Ovviamente stampare, usare una taglierina, scannerizzare di nuovo non è un’opzione. ok.

Per prima cosa installiamo le utility podofo:

apt-get install libpodofo-utils

Vediamo qualche informazione sul file (in questo esempio iptables-tutorial.pdf):

# podofopdfinfo iptables-tutorial.pdf | head -n 19
Document Info
-------------
File: iptables-tutorial.pdf
PDF Version: 1.4
Page Count: 459
Page Size: 612 x 792 pts

Fast Web View Enabled: No
Tagged: No
Encrypted: No
Printing Allowed: Yes
Modification Allowed: Yes
Copy&Paste Allowed: Yes
Add/Modify Annotations Allowed: Yes
Fill&Sign Allowed: Yes
Accessibility Allowed: Yes
Document Assembly Allowed: Yes
High Quality Print Allowed: Yes

La dimensione è 612 x 792 punti. Quando specifichiamo la dimensione nelle utility dobbiamo moltiplicare per 100 (aggiungere due zeri).

Utilizziamo il comando podofobox, la cui sintassi è:

# podofobox
Usage: podofobox [inputfile] [outpufile] [boxtype] [left] [bottom] [width] [height]
Boxtype is one of media crop bleed trim art.

Vogliamo togliere 20 punti dal lato sinistro, 160 dal basso e ottenere un foglio di 392 punti x 612 punti.

Ritagliamo con:

podofobox iptables-tutorial.pdf ipt.pdf media 2000 16000 39200 61200

fatto.

Comments ( 0 )
USBFlashDrive

Copia integrale usbpen con dd

Capita di voler copiare integralmente una chiavetta usb su cui, per esempio, abbiamo installato una distribuzione GNU/Linux.

Per effettuare una copia integrale possiamo utilizzare il comando di sistema “dd”.

Per prima cosa inseriamo la chiavetta ed identifichiamola.

root@host:~# tail -n 15 /var/log/messages
[ 3460.142979] USB Mass Storage support registered.
[ 3461.140853] scsi 5:0:0:0: Direct-Access hp v165w 0.00 PQ: 0 ANSI: 2
[ 3461.208876] sd 5:0:0:0: Attached scsi generic sg2 type 0
[ 3461.210933] sd 5:0:0:0: [sdb] 15773696 512-byte logical blocks: (8.07 GB/7.52 GiB)
[ 3461.212340] sd 5:0:0:0: [sdb] Write Protect is off
[ 3461.212349] sd 5:0:0:0: [sdb] Mode Sense: 00 00 00 00
[ 3461.212932] sd 5:0:0:0: [sdb] Asking for cache data failed
[ 3461.212941] sd 5:0:0:0: [sdb] Assuming drive cache: write through
[ 3461.215794] sd 5:0:0:0: [sdb] Asking for cache data failed
[ 3461.215802] sd 5:0:0:0: [sdb] Assuming drive cache: write through
[ 3461.218178] sdb: sdb1 sdb2
[ 3461.231576] sd 5:0:0:0: [sdb] Asking for cache data failed
[ 3461.231586] sd 5:0:0:0: [sdb] Assuming drive cache: write through
[ 3461.231594] sd 5:0:0:0: [sdb] Attached SCSI removable disk
[ 3461.604212] EXT4-fs (sdb2): mounted filesystem with ordered data mode. Opts: (null)

 

la chiavetta è sul dispositivo sdb ed è da 8GB.

root@host:~# df -h
File system Dim. Usati Disp. Uso% Montato su
/dev/sda2 13G 4,2G 8,1G 35% /
udev 2,0G 4,0K 2,0G 1% /dev
tmpfs 793M 848K 792M 1% /run
none 5,0M 0 5,0M 0% /run/lock
none 2,0G 1,4M 2,0G 1% /run/shm
/dev/sda3 439G 12G 404G 3% /home
/dev/sdb2 6,8G 855M 5,9G 13% /media/eded68f1-c30a-4135-bba0-9e926964ad02

 

la chiavetta è montata, smontiamola:

root@host:/home# umount /media/eded68f1-c30a-4135-bba0-9e926964ad02/

 

adesso effettuiamo la lettura del dispositivo:

root@host:/home# dd if=/dev/sdb of=/home/immagine.dd bs=1M

 

e poi compattiamo il risultato:

root@host:/home# gzip /home/immagine.dd

 

adesso possiamo archiviare l’immagine.

se vogliamo ripristinare l’immagine su una nuova chiavetta procediamo come per la lettura (quindi identifichiamo la chiavetta e la smontiamo) e poi, sempre con il comando “dd” facciamo:

root@host:/home# gunzip immagine.dd.gz
root@host:/home# dd if=/home/immagine.dd of=/dev/sdb bs=1M

fatto

Comments ( 0 )
ical_logo

Condivisione calendari google multipli su iCal e iPhone

Se avete più di un calendario su gmail e volete condividerli sia sul mac con iCal che su iphone dovete procedere come segue.

Su iCal aggiungete l’account google come caldav e poi, dal menù delega, selezionate tutti gli altri calendari che volete visualizzare.

Su iPhone la questione è un pò più macchinosa.

Aggiungiamo l’account come server Exchange, impostiamo il server a m.google.com

Appena installato il calendario e verificato la funzionalità prendiamo Safari e puntiamo all’indirizzo https://m.google.com/sync/settings/iconfig/

Effettuiamo il login con le nostre credenziali e scegliamo i calendari da visualizzare.

Facile facile.

a.

Comments ( 0 )
c_lang

Non esagerate con i trucchetti

Greg writes:

Here’s a quick and clean way to swap data in place without having to resort to using a temporary memory location:

short *aPtr, *bPtr;

*aPtr ^= *bPtr;
*bPtr ^= *aPtr;
*aPtr ^= *bPtr;

While this is mathematically cool, lets take a look at the assembly code that it generates and see what’s really happening. First, for comparison, a couple of more pedestrian implementations:

void swap2(short *aPtr, short *bPtr) {
  short a = *aPtr; // a version with two temporaries
  short b = *bPtr;

  *aPtr = b;
  *bPtr = a;
}

void swap1(short *aPtr, short *bPtr) {
  short a = *aPtr; // a version with one temporary

  *aPtr = *bPtr;
  *bPtr = a;
}

void swap0(short *aPtr, short *bPtr) {
  *aPtr ^= *bPtr; // Greg’s tip
  *bPtr ^= *aPtr;
  *aPtr ^= *bPtr;
}

Now, let’s take a look at what the compiler actually generates for these functions. (I’m using CodeWarrior with all optimizations on for these examples.)

Recall that as processsors have gotten faster, memory has not. For instance 1/80ns (the speed on memory in most Macintoshes) = 12.5 MHz. This means that if adjacent instructions have to address memory with no intervening computation, it’s as if the processor has slowed to 12.5MHz.

First the 68K compiler, starting with the two temp case:

Name="swap2"(6) Size=26
  MOVEA.L $0004(A7),A1
  MOVEA.L $0008(A7),A0
  MOVE.W (A1),D0
  MOVE.W (A0),D1
  MOVE.W D1,(A1)
  MOVE.W D0,(A0)
  RTS

Ignoring the two MOVEA.L’s which set up the address registers and the return, this takes four instructions, all of which touch memory. Notice, however that there are no cases where the result of an instruction is used an an input to the next instruction, meaning that most of the instructions can overlap in the processor pipeline.

Next with one temp:

Name="swap1"(4) Size=24
  MOVEA.L $0004(A7),A1
  MOVEA.L $0008(A7),A0
  MOVE.W (A1),D0
  MOVE.W (A0),(A1)
  MOVE.W D0,(A0)
  RTS

Here we have three instructions, all accessing memory and all can overlap. This is smaller than the example above. Whether it is faster depends on the relative timing of the MOVE.W (A0),(A1) instruction. (If anyone wants to time this, I’ll print the results.)

Now Greg’s ‘tip’:

Name="swap0"(1) Size=30
  MOVEA.L $0004(A7),A1
  MOVEA.L $0008(A7),A0
  MOVE.W (A0),D0
  EOR.W D0,(A1)
  MOVE.W (A1),D0
  EOR.W D0,(A0)
  MOVE.W (A0),D0
  EOR.W D0,(A1)
  RTS

This generates six instructions, all of which touch memory. Furthermore three of these are read-modify-write cycles, which are slower that a read or write and each instruction depends on the result of the instructon directly before it, meaning it won’t overlap in the pipeline, making this both the largest and slowest implementation of the three.

Now lets look at the PowerPC code:

Name=".swap2"(6) Size=20
  lha r0,0(r3)
  lha r5,0(r4)
  sth r5,0(r3)
  sth r0,0(r4)
  blr

Name=".swap1"(4) Size=20
  lha r5,0(r3)
  lha r0,0(r4)
  sth r0,0(r3)
  sth r5,0(r4)
  blr

Note that both of the versions with temporaries generated the same code (4 instructions, all touching memory but pipelineable). This is because RISC processors typically don’t have memory to memory operations; instead, they must move data to a register before operating on it.

Now our ‘tip’:

Name=".swap0"(1) Size=52
  lha r5,0(r4)
  lha r0,0(r3)
  xor r0,r0,r5
  sth r0,0(r3)
  lha r5,0(r3)
  lha r0,0(r4)
  xor r0,r0,r5
  sth r0,0(r4)
  lha r4,0(r4)
  lha r0,0(r3)
  xor r0,r0,r4
  sth r0,0(r3)
  blr

This implementation is by far the largest and slowest, generating 12 instructions, including 6 memory accesses. Furthermore there are 2 pipeline stalls. Clearly this implementation is the largest and slowest of all.

The moral of the story is: don’t get tricky. C programmers often try to minimize the number of lines of C in their program without consideration for what the compiler will generate. When in doubt, write clear code and give the optimizer a chance to maximize performance. Look at the compiler output. Your code will be easier to debug and probably faster too.

’Till next time

Comments ( 0 )