Tuesday, December 5, 2006

Quantum DLT7000

ADVISORY:
--------------

I comando qui elencati sono stati testati su di un Tape Drive DLT7000. Dovrebbero funzionare anche su altri modelli ma non ho avuto modo di verificarlo direttamente. Quindi se qualcosa non va sono problemi vostri ;).

EDIT 13/02/2006: tutti i comandi sotto sono generici (a parte i comandi per la compressione hardware).

Verifichiamo che tape drive abbiamo installato:

# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 06 Lun: 00
Vendor: QUANTUM Model: DLT7000 Rev: 2255
Type: Sequential-Access ANSI SCSI revision: 02

Da notare Type: Sequential Access ;)

Il modulo del kernel utilizzato per gestire questo device è: st.ko

Per caricarlo basta usare il comando:

# modprobe st

Una volta caricato il modulo dovrebbero essere disponibili i device:

# ls /dev/nst0* /dev/st0*
/dev/nst0 /dev/nst0l /dev/st0 /dev/st0l
/dev/nst0a /dev/nst0m /dev/st0a /dev/st0m

Per comprendere le differenze tra i diversi device possiamo iniziare da /usr/src/linux/Documenation/devices.txt:

[CUT]
9 char SCSI tape devices
0 = /dev/st0 First SCSI tape, mode 0
1 = /dev/st1 Second SCSI tape, mode 0
...
32 = /dev/st0l First SCSI tape, mode 1
33 = /dev/st1l Second SCSI tape, mode 1
...
64 = /dev/st0m First SCSI tape, mode 2
65 = /dev/st1m Second SCSI tape, mode 2
...
96 = /dev/st0a First SCSI tape, mode 3
97 = /dev/st1a Second SCSI tape, mode 3
...
128 = /dev/nst0 First SCSI tape, mode 0, no rewind
129 = /dev/nst1 Second SCSI tape, mode 0, no rewind
...
160 = /dev/nst0l First SCSI tape, mode 1, no rewind
161 = /dev/nst1l Second SCSI tape, mode 1, no rewind
...
192 = /dev/nst0m First SCSI tape, mode 2, no rewind
193 = /dev/nst1m Second SCSI tape, mode 2, no rewind
...
224 = /dev/nst0a First SCSI tape, mode 3, no rewind
225 = /dev/nst1a Second SCSI tape, mode 3, no rewind
...
[CUT]

Si noti che non tutti i device sono funzionanti. Ad esempio nel mio caso posso usare solo /dev/st0 e /dev/nst0:

/dev/st0 ----> con rewind
/dev/nts0 ----> senza rewind

Nel caso i cui siano presenti più tape drive dello stesso tipo il
secondo device verrà indicato con /dev/st1 il terzo con /dev/st2 e via dicendo.

Per gestire questo i tape drive in genere possiamo usare le utility: mt-st, disponibili a questo indirizzo: http://www.gnu.org/software/tar/

Qui analizziamo soltanto alcune delle funzioni più comuni di mt per una guida dettagliata si veda la man page.

Per definire il device su cui si vuole operare si puo' usare sia -t che -f oppure in alternativa si puo' definire la variabile di ambiente TAPE. Ad esempio:

# mt -f /dev/st0 status

oppure

# export TAPE=/dev/st0
# mt status

0 - Raccogliere la cassetta
----------------------------------
# mt -f /dev/st0 rewind


1 - Informazioni sullo stato della casetta e del tape drive
------------------------------------------------------------------------
# mt -f /dev/st0 status
SCSI 2 tape drive:
File number=0, block number=0, partition=0.
Tape block size 0 bytes. Density code 0x1b (DLT 35GB).
Soft error count since last status=0
General status bits on (45010000):
BOT WR_PROT ONLINE IM_REP_EN


Status Bit Description
----------------------------
  • BOT: La casetta è posizionata all'inizio del primo file.
  • EOT: Un'operazione ha raggiunto la fine della cassetta.
  • EOF: La casetta è posizionata alla fine di un file.
  • WR_PROT: La casetta del tape drive è write-protected
  • ONLINE: Il tape drive ha una casetta al suo interno ed è pronto per l'uso.
  • DR_OPEN: Il tape drive non ha una cassetta al suo interno.
  • IM_REP_EN: Immediate report mode. Questo bit è settato nel caso in cui non ci sia garanzia che i dati siano stati fisicamente scritti sulla casetta. E' settato a zero solo quando il tape drive non ha dati in buffer.


2 - Creare un archivio sulla cassetta
----------------------------------------------
# tar cvf /dev/st0 sample_dir
sample_dir/
sample_dir/file1.txt
sample_dir/file2.txt
sample_dir/file3.txt

3 - Elencare i file presenti in una cassetta
-----------------------------------------------------
# tar tvf /dev/st0
sample_dir/
sample_dir/file1.txt
sample_dir/file2.txt
sample_dir/file3.txt

4 - Ripristinare tutti i file
-------------------------------
# tar xvf /dev/st0

5 - Ripristinare un single file
-------------------------------------
# tar xvf /dev/st0 sample_dir/file1.txt

6 - Ripristinare una directory
------------------------------------
# tar xvf /dev/nst0 sample_dir

Si noti l'uso di nts0. Dal momento che abbiamo usato il dispositivo di non rewind la casetta adesso è posizionata alla fine del file sample. Si lo so che è una directory ma in unix ALL IS A FILE ;).

Se adesso supponiamo che dopo la directory sample_dir ci sia un'altra directory ad esempio sample_dir2 possiamo usare il comando:

# tar xvf /dev/nst0 sample_dir2

per estrarla dalla cassetta.

Se volessimo partire invece a ripristinare direttamente dalla seconda directory, allora dovremmo usare i comandi:

# mt -f /dev/nst0 fsf 1
# tar xvf /dev/nst0

7 - Creare un archivio multi volume
--------------------------------------------
# tar cvfM /dev/st0 verybigdir

verybigdir/
verybigdir/file1
verybigdir/file2
verybigdir/file3
...
Prepare volume #2 for `/dev/st0' and hit return:
verybigdir/file4
verybigdir/file5
verybigdir/file6
...

8 - Abilitare/Disabilitare la compressione hardware
---------------------------------------------------------------

mt -f /dev/st0 compression 0 # Disabilita la compressione hardware
mt -f /dev/st0 compression # Abilita la compressione hardware

EDIT 13/02/2006:

I comandi per la compressione hardware sono generici e non funzionano con questo modello di DLT. Per Il DLT 7000 si debbono usare:
mt -f /dev/st0 setdensity 0x1b # Disabilita la compressione hardware (35GB)
mt -f /dev/st0 setdensity 0x85 # Abilita la compressione hardware (70 GB)

Saturday, December 2, 2006

Parasole per auto

Quale scegliere per la mia macchinetta ? :D


Seagate HD

Jeffrey O'Brien di Fortune, Watkins ha dichiarato:


"Costruiamo prodotti che aiutino la gente a comprare più "m****" e a guardare i porno".


... questa si chiama consapevolezza ;)

Saturday, November 18, 2006

A useful script for chkrootkit

This script is useful as crontab task ;)

You need ssmtp in order to use it:

* mail-mta/ssmtp
Latest version available: 2.61-r2
Latest version installed: 2.61-r2
Size of downloaded files: 156 kB
Homepage: ftp://ftp.debian.org/debian/pool/main/s/ssmtp/
Description: Extremely simple MTA to get mail off the system to a Mailhub
License: GPL-2


#!/bin/bash

MAIL_ADDRESS=insert_here_your_mail_address

echo -e "Subject: Chkrootkit of: `date`\n" > /tmp/chkrootkit.mail
/usr/sbin/chkrootkit >> /tmp/chkrootkit.mail

SYSTEM_STATUS=`cat /tmp/chkrootkit.mail | grep INFECTED`

# Check if system was infected!!!
if [ "$SYSTEM_STATUS" ]; then
echo >> /tmp/chkrootkit.mail
echo "************************************" >> /tmp/chkrootkit.mail
echo "* YOUR SYSTEM WAS INFECTED *" >> /tmp/chkrootkit.mail
echo "************************************" >> /tmp/chkrootkit.mail
echo >> /tmp/chkrootkit.mail
fi

# Sending mail
cat /tmp/chkrootkit.mail | ssmtp $MAIL_ADDRESS

# Remove temp file
rm -f /tmp/chkrootkit.mail

Tuesday, November 14, 2006

... continuando a parlare di heartbeat

Visto che ho parlato dei miei problemi con heartbeat qui, posto anche dove reperire le soluzioni ;)

Gentoo Buzilla

Clear-Text: http://bugs.gentoo.org/show_bug.cgi?id=152776
Secure: https://bugs.gentoo.org/show_bug.cgi?id=152776

A proposito di batterie difettose :S

Wednesday, October 25, 2006

heartbeat-2.0.7 e kernel version

Dopo due giorni di sbattere la testa su questo messaggio di errore:


Oct 23 12:38:16 auriga CTS: BadNews: heartbeat[11283]: 2006/10/23_12:37:46 ERROR: Cannot write to media pipe 2: Resource temporarily unavailable


ho finalmente compreso che heartbeat è incompatibile con versioni di kernel superiori al branch 2.6.16.

Linux idra 2.6.16.14 #1 SMP Tue Oct 24 15:32:19 CEST 2006 i686 Intel(R) Xeon(TM) CPU 3.60GHz GNU/Linux


Alla fine a parte dei piccoli bug nell'ebuild di gentoo sembra andare tutto.

P.S.: per chi fosse interssato questo è il link del bugreport dove ho postato una patch per l'ebuild heartbeat-2.0.7-r2 che risolve vari problemi.

Monday, October 16, 2006

Firefox e l'encoding

Da questa discussione sul forum italiano di gentoo, mi sono sorti dei dubbi sulla configurazione dell'encoding in Firefox, dal momento che questa è suddivisa in diversi menu e in alcuni casi le voci presenti in questi ultimi non sono chiarissime ( almeno per me ;) ).

Dopo aver girovagato un pò per il web, credo di essere riuscito a chiarirmi le idee e dal momento che non ho trovato molta documentazione in proposito ho deciso di buttare giù due righe per i posteri.

WARNING: Partiamo dal presupposto che tutte le informazioni contenute in questo post non sono da ritenersi una verità assoluta dal momento che potrei anche non aver capito nulla ;).

Partendo dal menu:

Edit -> Preferences -> "Fonts & Colors"

cliccando sul bottone [Advanced], alla voce "Default Character Encoding" è possibile selezionare la codifica di default nel caso in cui il server web che stiamo visitando non ce ne proponga una. Questa si traduce nell'opzione di configurazione (basta digitare in nuovo tab about:config):

"intl.charset.default"

Un server web può proporre una codifica in due modi distinti:

- Attraverso un header http

- Attraverso il meta tag html "Content-Type", contenuto nell'html della pagina web che stiamo richiedendo.

Vediamo in dettaglio ciascuno dei due casi.

1 - Attraverso un headers http

Come di può vedere dall'estratto della comunicazione tra client (firefox) e server web, il client richiede una pagina web elencando le sue preferenze per quanto concerne l'encoding (ISO-8859-15 come prima scelta e utf-8 come seconda nel caso in cui la prima codifica non sia disponibile):

GET / HTTP/1.1
Host: www.linuxhardware.org
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20060917 Firefox/1.5.0.7
Accept: text/xml,application/xml,application/xhtml+xml ...
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-15,utf-8;q=0.7,*;q=0.7 <----
Keep-Alive: 300 Connection: keep-alive


Il server risponde:

HTTP/1.x 200 OK
Date: Mon, 16 Oct 2006 16:09:44 GMT
Server: Apache/1.3.34 (Unix) (Gentoo) mod_perl/1.29 PHP/5.1.6-pl4-gentoo mod_ssl/2.8.25 OpenSSL/0.9.8d
X-Powered-By: Slash 2.002006
X-Fry: They're great! They're like sex except I'm having them.
Cache-Control: no-cache
Pragma: no-cache
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8 <----


cioè informa il client che le informazioni che sta ritornando sono un testo html codificato in utf-8.

2 - Attraverso il meta tag html "Content-Type"

In questo caso tra i meta tag della pagina html troveremo qualcosa del tipo:

<meta equiv="content-type" content="text/html;charset=iso-8859-15">



E' anche possibile selezionare:

View -> Character Encoding -> Auto-Detect -> Universal

nel caso in cui si voglia lasciare a firefox la possibilità di indovinare la codifica.

Nel caso in cui la codifica scelta da firefox per la pagina corrente non sia quella corretta è possibile selezionarne una ( che varrà solo per la sessione corrente ) dal menu:

View -> Character Encoding -> More Encodings

Nel menu View -> Character Encoding sono presenti alcune codifiche che possono essere selezionate senza necessità di accedere ai sottomenu che si raggiungiungono da View -> Character Encoding -> More Encodings. L'elenco precdente è contenuto nella variabile

intl.charsetmenu.browser.static

è può essere modificato da:

View -> Character Encoding -> Customize List

Saturday, September 23, 2006

Un'orchestra per il Commodore 64

... i vecchi giochi del C64 (arcade puri); quante giornate passate a cercare di superare livelli, per poi riprendere dal livello successivo.

La grafica non era delle migliori se paragonata a quella attuale, ma quanta giocabilità hanno perso molti dei giochi maggiormente in voga adesso? Sembra che l'alto livello grafico serva spesso solamente a compensare la mancanza di idee.

Su soundblog.it ho trovato che un'orchestra ha riarrangiato i motivetti dei più famosi giochi per C64:

La C64 orchestra infatti ripropone le colonne sonore di giochi come, in versione orchestrale, permettendovi di tornare nel mondo reale sulle note di Prince Of Persia. Sul sito potete trovare gli mp3 delle loro prove, le foto, il perchè della loro scelta. Se invece volete solo farvi trasportare dalle dolci note di International Karate o Cybernoid 2 andate direttamente sul loro Myspace e fatevi pervadere dai brividi!

Saturday, July 22, 2006

Tuesday, June 20, 2006

Sysadmin e sysadmin

Nel mondo dei sysadmin in genere non si vedono molte fanciulle :S.

Ma dalla foto sotto sembra che mi sbagli :D.

















Qualcuno sa mica dove lavora la tizia in questione?

Tuesday, May 23, 2006

mpd && asus hotkeys REVISITED

#!/bin/bash

###############
MPD_URL="localhost"
MPD_PORT="6600"
###############

function xecho() {
echo "$1" | osd_cat --font="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*" --shadow=2 --pos=top --align=center --colour=yellow --delay=2
}

function send_command_to_mpd () {
echo $1 | nc -q1 $MPD_URL $MPD_PORT
}

function get_current_song() {
filename=`send_command_to_mpd currentsong | grep "file: " | sed -e 's/file: //'`
artist=`send_command_to_mpd currentsong | grep "Artist: " | sed -e 's/Artist: //'`
title=`send_command_to_mpd currentsong | grep "Title: " | sed -e 's/Title: //'`

if [ "$artist-$title" == "-" ] ; then
echo $filename
else
echo "$artist -- $title"
fi
}

function mpd_status () {
status=`send_command_to_mpd status | grep "state:" | sed -e 's/state: //'`
case $status in
play ) echo play ;;
pause ) echo pause ;;
stop ) echo stop ;;
* ) echo unknown ;;
esac
}

case "$1" in
play_pause )
case `mpd_status` in
play ) send_command_to_mpd pause && xecho "`get_current_song`" ;;
pause ) send_command_to_mpd play && xecho "`get_current_song`" ;;
stop ) send_command_to_mpd play && xecho "`get_current_song`" ;;
esac ;;
stop ) send_command_to_mpd stop && xecho "`get_current_song`" ;;
next ) send_command_to_mpd next && xecho "`get_current_song`" ;;
previous ) send_command_to_mpd previous && xecho "`get_current_song`" ;;
* ) exit 1;;
esac

exit 0

asus_acpi events

I forgot asus_acpi events :S

gutter@giskard ~/.asus_acpi/events $ for list in `ls mpd*`
> do echo Filename: $list
> cat $list | grep -v \# | grep -v -e "^$"
> done

Filename: mpd_next
event=hotkey.*41[[:space:]].*
action=~/.asus_acpi/mpd.sh next
Filename: mpd_play_pause
event=hotkey.*45[[:space:]].*
action=~/.asus_acpi/mpd.sh play_pause
Filename: mpd_previuos
event=hotkey.*40[[:space:]].*
action=~/.asus_acpi/mpd.sh previous
Filename: mpd_stop
event=hotkey.*43[[:space:]].*
action=~/.asus_acpi/mpd.sh stop

"Incontro a Farpoint" (TNG), data astrale 41153.7


McCoy: Non vedo punte sulle tue orecchie, ragazzo, ma tu parli come un Vulcaniano.
Data: No, signore. Io sono un androide.
McCoy: Beh, siamo li'...
-- "Incontro a Farpoint" (TNG), data astrale 41153.7"

Monday, May 22, 2006

mpd && asus hotkeys

A bunch of bash lines in order to use mpd in combination with Asus hotkeys.

This sript requires: netcat, xosd, asus_acpi and mpd ;).

#!/bin/bash

###################
MPD_URL="localhost"
MPD_PORT="6600"
###################

function xecho() {
echo "$1" | osd_cat --font="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*" --shadow=2 --pos=top --align=center --colour=yellow --delay=2
}

function send_command_to_mpd () {
echo $1 | nc -q1 $MPD_URL $MPD_PORT
}

function get_current_song() {
filename=`send_command_to_mpd currentsong | grep "file: " | sed -e 's/file: //'`
artist=`send_command_to_mpd currentsong | grep "Artist: " | sed -e 's/Artist: //'`
title=`send_command_to_mpd currentsong | grep "Title: " | sed -e 's/Title: //'`

if [ "$artist-$title" == "-" ] ; then
echo $filename
else
echo "$artist -- $title"
fi
}

function mpd_status () {
status=`send_command_to_mpd status`
play_or_pause=`echo $status | sed -e 's/.*state: //' -e 's/ song:.*//'`
case $play_or_pause in
play ) echo play ;;
pause ) echo pause ;;
stop ) echo stop ;;
* ) echo unknown ;;
esac
}

case "$1" in
play_pause )
case `mpd_status` in
play ) send_command_to_mpd pause && xecho "`get_current_song`" ;;
pause ) send_command_to_mpd play && xecho "`get_current_song`" ;;
stop ) send_command_to_mpd play && xecho "`get_current_song`" ;;
esac ;;
stop ) send_command_to_mpd stop && xecho "`get_current_song`" ;;
next ) send_command_to_mpd next && xecho "`get_current_song`" ;;
previous ) send_command_to_mpd previous && xecho "`get_current_song`" ;;
* ) exit 1;;
esac

exit 0

Friday, May 19, 2006

A comment on schedules...

A comment on schedules:
Ok, how long will it take?
For each manager involved in initial meetings add one month.
For each manager who says "data flow analysis" add another month.
For each unique end-user type add one month.
For each unknown software package to be employed add two months.
For each unknown hardware device add two months.
For each 100 miles between developer and installation add one month.
For each type of communication channel add one month.
If an IBM mainframe shop is involved and you are working on a non-IBM
system add 6 months.
If an IBM mainframe shop is involved and you are working on an IBM
system add 9 months.
Round up to the nearest half-year.
--Brad Sherman
By the way, ALL software projects are done by iterative prototyping.
Some companies call their prototypes "releases", that's all.