Posts Tagged debian

MySQL: controllare, ottimizzare, riparare

MySQL e’ un fantastico prodotto ormai giunto ad uno stato di maturità rasserenante. Puo’ capitare pero’ che in situazioni di altissimo traffico e in presenza di query `pesanti`una qualche tabella possa andare a $donnedifacilicostumi, in questi casi mysqlchek ci viene in contro! mi appunto qui di seguito qualche esempio di uso:

Controlla, ottimizza e ripara tutti i databases:

mysqlcheck -p -Aao --auto-repair

Controlla, ottimizza e ripara una precisa tabella

mysqlcheck -p -ao --auto-repair dbname table

Controlla ottimizza e ripara un preciso database:

mysqlcheck -p -ao --database dbname

Share

, , , , , , , ,

No Comments

HAProxy e gestione dei VirtualHost

L’unico modo per gestire i virtualhost su HAProxy (o meglio per legare un preciso vhost ad uno o piu’  precisi backend server) è quello di usare le ACL, mi appunto qui di seguito un conf di test (autoesplicativo) dove le ACL vengono implementate:

global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemon

defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000

frontend http-in
bind *:80

acl is_www_example_com hdr_end(host) -i example.com
acl is_www_domain_com hdr_end(host) -i domain.com

use_backend www_example_com if is_www_example_com
use_backend www_domain_com if is_www_domain_com
default_backend www_example_com

backend www_example_com
balance roundrobin
cookie SERVERID insert nocache indirect
option httpchk HEAD /check.txt HTTP/1.0
option httpclose
option forwardfor
server Server1 10.1.1.1:80 cookie A check
server Server2 10.1.1.2:80 cookie B check

backend www_domain_com
balance roundrobin
cookie SERVERID insert nocache indirect
option httpchk HEAD /check.txt HTTP/1.0
option httpclose
option forwardfor
server Server1 192.168.5.1:80 cookie A check
server Server2 192.168.5.2:80 cookie B check

Share

, , , , , , , ,

No Comments

Debian Sid VNC server

Dunque, ho sempre usato ‘vino’ con soddisfazione, semplice da configurare e ottima integrazione in Gnome, si forse un po’ eccessivo nel consumo delle risorse nelle prime versioni ma ultimamente è(ra) molto migliorato. L’ultima release presenta un bug già noto in una precedente versione: il demone sta in ascolto  in tcp6, questo mi impedisce di connettermi rendendo (per me) questo software al momento inutilizzabile, alternative? Si, tightvncserver. Pessima integrazione ma di fatto funziona.

# apt-get install tightvncserver
$ tightvncserver

Output:

You will require a password to access your desktops.

Password:
Verify:

New 'X' desktop is debian:1

Creating default startup script ~/.vnc/xstartup
Starting applications specified in ~/.vnc/xstartup

Adesso, la configurazione di defaul non avvia assolutamente una sessione Gnome, per tanto dobbiamo andare ad editare ~/.vnc/xstartup per avviare Gnome e non avere il charset completamente a $donnedifacilicostumi ho dovuto inserire al suo interno:

#!/bin/sh

export XKL_XMODMAP_DISABLE=1
exec gnome-session &

Si, grezzo ma funziona! A questo punto creiamo lo script di avvio/gestione del demone: creiamo il file /etc/init.d/tightvncserver e inseriamo al suo interno quanto segue:

#!/bin/sh -e
### BEGIN INIT INFO
# Provides: vncserver
# Required-Start: networking
# Default-Start: S
# Default-Stop: 0 6
### END INIT INFO

PATH="$PATH:/usr/X11R6/bin/"

# The Username:Group that will run VNC
export USER="utente_che_vogliamo_usare"
#${RUNAS}


# The display that VNC will use
DISPLAY="1"

# Color depth (between 8 and 32)
DEPTH="16"

# The Desktop geometry to use.
#GEOMETRY="x"
#GEOMETRY="800x600"
GEOMETRY="1024x768"
#GEOMETRY="1280x1024"

# The name that the VNC Desktop will have.
NAME="my-vnc-server"

OPTIONS="-name ${NAME} -depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}"

. /lib/lsb/init-functions

case "$1" in
start)
log_action_begin_msg "Starting vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver ${OPTIONS}"
;;


stop)
log_action_begin_msg "Stoping vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver -kill :${DISPLAY}"
;;


restart)
$0 stop
$0 start
;;
esac

Dove, da tenere ben presente, va modificato: export USER="utente_che_vogliamo_usare" inserendo il vostro utente. Adesso diamo un bel:

# chmod +x /etc/init.d/tightvncserver
# update-rc.d tightvncserver defaults
# /etc/init.d/tightvncserver restart
# netstat -tunap | grep LISTEN | grep Xtightvnc

Output:

tcp 0 0 0.0.0.0:5801 0.0.0.0:* LISTEN 2089/Xtightvnc
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 2089/Xtightvnc
tcp 0 0 0.0.0.0:6001 0.0.0.0:* LISTEN 2089/Xtightvnc

Share

, , , , , , ,

No Comments

Accelaratore PHP – eAccelerator

Qui di seguito un esempio di implementazione di eAccelerator allo scopo di avere una cache di pagine HTML già pronte da fornire a chi le richiede  senza dover necessariamente attendere la risposta (generazione della pagina) da parte dell’interprete PHP ogni volta, risparmiando anche cicli di CPU sul server:

Installiamo quanto necessario alla compilazione:

# apt-get install php5-dev build-essential

Scaricare l’archivio del software da internet reperibile su http://www.eaccelerator.net/ oppure:

# wget http://bart.eaccelerator.net/source/0.9.6/eaccelerator-0.9.6-rc1.tar.bz2

# tar xvfj eaccelerator-0.9.6-rc1.tar.bz2

# cd eaccelerator-0.9.6-rc1

#  /usr/bin/phpize

# ./configure

# make

# make install

Creiamo una directory che conterrà le pagine di cache e diamo permessi di lettura scrittura a $pigsANDdogs

# mkdir /var/cache/eaccelerator

# chmod 0777 /var/cache/eaccelerator

Adesso creiamo il file di configurazione:

# nano /etc/php5/conf.d/eaccelerator.ini

e inseriamo al suo interno quanto segue:


extension=”eaccelerator.so”
eaccelerator.shm_size=”16″
eaccelerator.cache_dir=”/var/cache/eaccelerator”
eaccelerator.enable=”1″
eaccelerator.optimizer=”1″
eaccelerator.check_mtime=”1″
eaccelerator.debug=”0″
eaccelerator.filter=”"
eaccelerator.shm_max=”0″
eaccelerator.shm_ttl=”0″
eaccelerator.shm_prune_period=”0″
eaccelerator.shm_only=”0″
eaccelerator.compress=”1″
eaccelerator.compress_level=”9″

Impostazioni di eAccelerator

eaccelerator.shm_size è il parametro che indica quanta memoria condivisa viene adoperata da eAccelerator per memorizzare la cache php. Il numero è in megabyte quindi eaccelerator.shm_size = “16″ significa attribuire 16 megabyte.

Eseguendo il comando:

cat /proc/sys/kernel/shmmax

Il numero restituito rappresenta la dimensione massima di memoria che un processo può allocare. Dividendolo per 1024 fissa il massimo valore per eaccelerator.shm_size. Ovvero eaccelerator.shm_size non deve mai superare (value di shmmax)/1024.

eaccelerator.cache_dir è la cartella dove eAccelerator salva la cache del codice php.

eaccelerator.enable se ha valore 1 allora eAccelerator è in funzione mentre se è a 0 (zero), il programma è disattivato. Questa funzione è molto utile perché consente di disabilitare temporaneamente la cache magari mentre si testano le performance del codice php appena sviluppato.

eaccelerator.optimizer funziona similmente a eaccelerator.enable; se impostato a 1, eAccelerator ottimizza le pagine mentre a zero l’esecuzione del codice php risulta lenta (come se non fosse in funzione il software).

eaccelerator.debug se attiva crea messaggi informativi nel file di log per il debugging.

eaccelerator.log_file qualora si voglia fare debugging è opportuno indicare dove memorizzare i log generati dal programma. eaccelerator.log_file = “/var/log/apache2/eaccelerator_log” memorizza un file testuale nella directory dei log usata anche da Apache.

eaccelerator.check_mtime assegnando 1 al parametro, eAccelerator controlla che la cache sia aggiornata, se è stata fatta una modifica ad una pagina questa deve essere ricompilata e memorizzata nuovamente. Disabilitando quest’opzione se una pagina già in cache viene modificata è necessario cancellare manualmente la cache per vedere la nuova versione della pagina. Ovviamente è consigliata l’attivazione.

eaccelerator.filter specifica quali file vengono memorizzati nella cache. Per esempio indicando eaccelerator.filter=”*.php”, solo i file con estensione .php saranno trattati dal programma. Con eaccelerator.filter=”!/home*”, eAccelerator non gestisce i file il cui nome contenga la stringa /home seguita da qualsiasi carattere; attenzione però perché un eventuale file /home/utente/script.php non viene processato da eAccelerator in quanto /home compare nel suo nome. Il punto esclamativo indica la non inclusione.

eaccelerator.shm_max indica il numero massimo in byte usati dalla memoria condivisa. Non c’è un limite come c’è per eaccelerator.shm_size. Per limitare la dimensione massima della memoria condivisa a 1 megabyte si può impostare eaccelerator.shm_max=”1M”, anche se è preferibile mettere zero per non restringere la cache. Non ha nulla a che vedere con la massima dimensione di una pagina singola memorizzata.

eaccelerator.shm_ttl quando non c’è più memoria a disposizione di eaccelerator.shm_only le pagine più vecchie, che sono state richieste da prima del valore messo in eaccelerator.shm_ttl, sono cancellate. Mettendo zero le pagine non sono cancellate. Settando eaccelerator.shm_ttl=”600″ il tempo è di 10 minuti (60 sec x 10).

eaccelerator.shm_prune_period simile a eaccelerator.shm_ttl, solo che vengono eliminate le pagine più vecchie.

eaccelerator.shm_only abilita o disabilita la memorizzazione sul disco rigido delle pagine elaborate da eAccelerator. Mettendo eaccelerator.shm_only=”0″ eAccelerator salva le pagine anche sul disco e non solo in memoria. E’ preferibile indicare zero.

eaccelerator.compress attiva la compressione delle pagine per risparmiare memoria. eaccelerator.compress=”0″ lascia le pagine non compresse.

eaccelerator.compress_level indica quanto comprimere le pagine elaborate. Nove è il massimo fattore di compressione.

Share

, , , ,

1 Comment

Load Balancing in High availability

Dopo aver usato per un bel po’ di tempo Pound come bilanciatore di carico per i miei server web, ho deciso di testare una nuova (si fa per dire) soluzione, dato che il suddetto progetto pare non sia piu’ mantenuto. Il candidato ideale mi è sembrato Haproxy che pare essere (oltre che mantenuto), molto piu’ performante di Pound e già che c’ero ho deciso di testarlo in accoppiata con Keepalived per prevenire eventuali failover. Eccovi un esempio di implementazione su Debian:

shared IP=192.168.0.99
192.168.0.100  192.168.0.101 192.168.0.102 192.168.0.103
+——————-+————–+————+———-
|                             |                           |                     |
+–+–+     +—+–+      +—-+–+   +——-+—-+
| lb1    |      | lb2     |         | http1 |     |  http2         |
+—–+      +——-+      +——–+   +————-+
haproxy      haproxy      2 web servers (Apache)
keepalived   keepalived

L’IP (virtuale) shared 192.168.0.99 sarà l’indirizzo pubblico del cluster che in un primo tempo sarà del master (lb1), in caso di failover verrà automaticamente attivato su lb2 tramite appunto Keepalived.

1) Preparazione dei backend web servers Apache (da effettuare su http1/http2):

Dopo aver installato apache2 è necessario procedere con una piccola modifica del file /etc/apache2/apache2.conf modificando il parametro LogFormat nel seguente modo per avere Haproxy configurato come trasparent peoxy:

[...]
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\
"" combined

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\
" \"%{User-Agent}i\"" combined
[...]

Adesso sarà necessario creare un piccolo file di testo: ‘/var/www/check.txt’ che verrà controllato da haproxy per capire se il nodo è attivo o meno. A questo punto è necessario risolvere il problema delle statistiche (se presenti) in quanto tutte le interrogazioni al suddetto file da parte di haproxy portano inevitabilmente ad un inquinamento dei report. Sarà necessario quindi modificare la direttiva CustomLog nei VirtualHost (ad esempio default) nel seguente modo:

[...]
SetEnvIf Request_URI "^/check\.txt$" dontlog
CustomLog /var/log/apache2/access.log combined env=!dontlog
[...]

un bel ‘/etc/init.d/apache2 restart’ ed i backend sono pronti.

2) Installazione di Haproxy (da eseguire su lb1/lb2)

Prima di tutto diamo un bel:

apt-get install haproxy

Una volta installato il pacchetto procediamo con la modifica del file di configurazione:

cp /etc/haproxy.cfg /etc/haproxy.cfg_orig
cat /dev/null > /etc/haproxy.cfg
vi /etc/haproxy.cfg

Nel seguente modo:

global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
        #debug
        #quiet
        user haproxy
        group haproxy

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

listen webfarm 192.168.0.99:80
       mode http
       stats enable
       stats auth someuser:somepassword
       balance roundrobin
       cookie JSESSIONID prefix
       option httpclose
       option forwardfor
       option httpchk HEAD /check.txt HTTP/1.0
       server webA 192.168.0.102:80 cookie A check
       server webB 192.168.0.103:80 cookie B check

Una volta fatto questo abilitiamo lo startup di Haproxy editando il file ‘/etc/default/haproxy’ e impostando ENABLED da 0 a 1.

3) Installazione di Keepalived (lb1/lb2):

apt-get install keepalived

editiamo il seguente file:

vi /etc/sysctl.conf

inserendo al suo interno:

[...]
net.ipv4.ip_nonlocal_bind=1

ed eseguiamo:

sysctl -p

a questo punto editiamo:

vi /etc/keepalived/keepalived.conf

Nel seguente modo:

vrrp_script chk_haproxy {           # Requires keepalived-1.1.13
        script "killall -0 haproxy"     # cheaper than pidof
        interval 2                      # check every 2 seconds
        weight 2                        # add 2 points of prio if OK
}

vrrp_instance VI_1 {
        interface eth0
        state MASTER
        virtual_router_id 51
        priority 101                    # 101 on master, 100 on backup
        virtual_ipaddress {
            192.168.0.99
        }
        track_script {
            chk_haproxy
        }
}

questa configurazione setta lb1 come Master (priority 101) la stessa configurazione puo’ essere effettuata su lb2 con la sola differenza che priority dovrà essere essettato a 100 (backup o slave che dir si voglia).

Sarà sufficiente adesso dare su entrambe le macchine un bel:

/etc/init.d/keepalived start

e un:

ip addr sh eth0

per verificare che la configurazione sia corretta.

Diamo in fine l’ultimo comando per avviare haproxy:

/etc/init.d/haproxy start

Non resta che verificare  al seguente indirizzo http://192.168.0.99/haproxy?stats che tutto sia andato a buon fine ;)

Share

, , , , , , ,

No Comments

Postfix: Unica istanza e Indirizzi IP/hostname multipli

Mi appunto qui di seguito una semplice configurazione per avere su di un singolo MTA piu’ Indirizzi IP (configurati su piu’ schede di rete virtuali) in modo che il demone (sulla porta 25) risponda con Hostname diversi, tutto questo allo scopo di eludere i sistemi antispam ‘feroci’ tipo quelli implementati da Hotmail e Yahoo.

Dopo aver configurato tutte quante le nostre schede di rete virtuali (ex. eth0:1, eth0:2, eth0:3 … eth0:n) procediamo con il configurare il file /etc/postfix/master.cf (in Debian like) e cambiamo la linea qui sotto da:

smtp inet n - n - - smtpd

a:

localhost:smtp  inet n - n - - smtpd
ipaddress-1:smtp inet n - n - - smtpd
ipaddress-2:smtp inet n - n - - smtpd -o myhostname=hostname-2
.
.
.
ipaddress-n:smtp inet n - n - - smtpd -o myhostname=hostname-n

Con questa nuova configurazione in pratica bindiamo ogni indirizzo ip su di un relativo hostname (magari sarebbe bene definirli prima nel file /etc/hosts) eccetto che per localhost e per ipadress-1 che risponderà con il regolare hostname.

Share

, , , , , , ,

1 Comment

Proftpd e utenti virtuali

Con questo post voglio inaugurare la serie “basta con l’utilizzo di utenti di sistema” ed iniziare ad appuntarmi un po’ di configurazioni per i demoni piu’ utilizzati relativamente all’utilizzo di utenti virtuali storati in un db MySQL . Cominciamo con qualcosa di semplice: configuriamo il nostro servizio FTP.

Per prima cosa procuriamoci tutto il necessario:

# apt-get install proftpd proftpd-mysql mysql-server

Settiamo una password (su Debian di default è blank)

# mysqladmin -u root password 'QuiLaMiaPassword'

Adesso prepariamo gruppi e utenti:

# groupadd -G 3001 ftpgroup
# useradd -s /bin/false -d /bin/null -c "proftpd user" --uid 3001 -g ftpgroup ftpuser

Adesso cominciamo a preparare Il nostro DB:

# mysql -u root -p

mysql> CREATE DATABASE proftpddb;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT USAGE ON *.* TO proftpduser@localhost IDENTIFIED BY 'proftpdpassword';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON proftpddb.* TO 'proftpduser'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> quit

Adesso è  il momento di inserire le tabelle necessarie all’interno del nostro DB, per far questo prepariamo un file di testo che chiameremo ‘proftp-mysql.sql’ e lo editiamo inserendo quanto segue:

CREATE TABLE ftpgroup (
groupname varchar(16) NOT NULL default '',
gid smallint(6) NOT NULL default '3000',
members varchar(16) NOT NULL default '',
KEY groupname (groupname)
) TYPE=MyISAM COMMENT='ProFTPd group table';

CREATE TABLE ftpuser (
id int(10) unsigned NOT NULL auto_increment,
userid varchar(32) NOT NULL default '',
passwd varchar(80) NOT NULL default '',
uid smallint(6) NOT NULL default '3000',
gid smallint(6) NOT NULL default '3000',
homedir varchar(255) NOT NULL default '',
shell varchar(16) NOT NULL default '/sbin/nologin',
count int(11) NOT NULL default '0',
accessed datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id),
UNIQUE KEY userid (userid)
) TYPE=MyISAM COMMENT='ProFTPd user table';

e adesso diamo un bel:

# mysql -u root -p proftpddb < proftpd-mysql.sql

Poi:

# mysql -u proftpduser -p proftpddb

mysql> INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 3001, 'ftpuser');

mysql> INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES (1, 'firstuser', PASSWORD('userpassword'), 3001, 3001, '/var/proftp/firstuser', '/sbin/nologin', 0, '', '');

Adesso settiamo la $HOME del nostro utente e gli diamo i permessi corretti:

# mkdir /var/proftp
# chown ftpuser:ftpgroup /var/proftp
# chmod 775 /var/proftp

Procediamo Adesso con il setup del nostro demone FTP. Per prima cosa ci spostiamo in /etc/proftpd ed editiamo modules.conf scommentando il modulo relativo a Mysql, dopodiche’ creiamo un nuovo file mysql.conf e lo editiamo inserendo al suo interno:

#Force the use of mysql backend
SQLBackend mysql

# The passwords in MySQL are using its own PASSWORD function
SQLAuthTypes Backend
SQLAuthenticate users* groups*

# details to connect to mysql db
# dbname@host dbuser dbpass
SQLConnectInfo proftpddb@localhost proftpduser proftpdpassword

# Let proFTPd know the name of the columns in the user table
# Mind that this need to match the name in you table
SQLUserInfo ftpuser userid passwd uid gid homedir shell

# Let proFTPd know the name of the columns in the group table
# we want it to interact with. Again the names match with those in the db
SQLGroupInfo ftpgroup groupname gid members

# proftpd will dynamicaly create if the homedir does not yet exist
SQLHomedirOnDemand on

# update counter when a user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser

# change modified time anytime a user delete a file or upload one
SQLLog STOR,DELE modified

SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

Salviamo ed editiamo proftpd.conf inserendo subito dopo Include /etc/proftpd/modules.conf:

Include /etc/proftpd/mysql.conf

RootLogin off

RequireValidShell off

Adesso restartiamo il servizio e siamo pronti ad effettuare il primo test ;)

Share

, , , , , , , , , ,

No Comments

Creare lo snaphost di un disco con dd

Mi appunto una serie di comandi per creare lo snaphost di un disco con dd

# dd if=/dev/hda of=/mnt/storage/immagine_disco.img ;  bs=512 ; date ; sleep 3600 ; date ; dd if=/dev/hda bs=512 | md5sum ; date ; sleep 3600; date ; dd if=/mnt/storage/immagine_disco.img | md5sum ; date

Ovviamente tutto su una riga.

Share

, , , , , , , ,

No Comments

Pulizia dei pacchetti e files di configurazione in Debian

MI appunto qui di seguito una serie di metodi per tenere il sistema debian pulito da pacchetti non piu’ utilizzati e da files di configurazione imbastarditi:

Deborphan

Il suo scopo è quello di generare una lista di pacchetti `orfani’, ovvero pacchetti che per dipendenza non vengono piu’ utilizzati da nessun software presente sul sistema:

# apt-get install deborphan

# deborphan

o si puo’ usare l’opzione –libdevel che crea una lista con le librerie di sviluppo

# deborphan --libdevel

quindi passiamo la lista di pacchetti generata ad apt con:

# apt-get --purge remove `deborphan`
# apt-get --purge remove `deborphan --libdev`

File di Configurazione

Con questo comando e’ possibile pulire /etc dai files di configurazione che sono rimasti sul sistema dopo disinstallazioni di pacchetti senza aver utilizzato l’opzione –purge:

# dpkg --purge `COLUMNS=300 dpkg -l | egrep "^rc" | cut -d' ' -f3`

Localepurge

Una volta installato questo software provvede da solo dopo ogni installazione di pacchetti di rimuovere le lingue che non ci interessano

# localepurge

La cache di apt-get

Apt ci mette a disposizione alcuni efficacissimi strumenti per tenere pulita la cache:

# apt-get clean
# apt-get autoclean

La cache di apt-build

Lo stesso vale per apt-build:

# apt-build clean-sources
# apt-build clean-build
# apt-build clean-repository


Share

, , , , , , , ,

No Comments

Ubuntu 7.10 & bluetooth

Come fare? E’ sufficiente aggiungere questo repository al proprio sources.list

deb http://download.tuxfamily.org/blueman ubuntu bluetooth blueman-svn

e validarlo con la chiave gpg appropriata

wget http://download.tuxfamily.org/blueman/repository.gpg ; sudo apt-key add repository.gpg ; rm -rf repository.gpg

Baster? dunque forzare l’aggiornamento del sistema con:

sudo apt-get update

sudo apt-get upgrade

ed installare gli aggiornamenti che vengono proposti.

Alla fine dell’installazione la periferica bluetooth dovrebbe funzionare correttamente senza bisogno di riavviare.

Nel caso in cui non aveste precedentemente installato il bluetooth sul vostro sistema, seguite la guida nel wiki di ubuntu.

E visto che ci siete installate anche Blueman, a mio parere la migliore applicazione per la gestione delle connessioni bluetooth

sudo apt-get install blueman blueman-i18n

ovviamente solo dopo aver aggiunto il repository di cui sopra.

easy ;)

Prossimamente vedremo come accedere al web dal proprio smartphone via bluetooth untilizzando come gateway la propria linux box.

Share

, , , , , , , ,

No Comments