Appunti Solaris - De Falco Alfano
Transcript
Appunti Solaris - De Falco Alfano
Appunti Solaris - Unix Appunti Solaris - Unix Autore ldfa Versione 1.4 del 28.11.2007 Indice generale Introduzione....................................................................................................................1 Notazioni....................................................................................................................2 Cosa è Solaris..................................................................................................................2 Logging...........................................................................................................................2 Principali Shell..................................................................................................................3 Gestione Disco.................................................................................................................3 Identificazione della partizione/disco.............................................................................3 Partizioni.....................................................................................................................4 File system: creazione.................................................................................................6 File system: check.......................................................................................................6 Swap..........................................................................................................................7 Copia di un disco.........................................................................................................7 File system.....................................................................................................................10 Come cercare grandi file............................................................................................10 Link di /home/aspect verso /export/aspect..................................................................11 Rete Locale....................................................................................................................11 File di configurazione.................................................................................................11 Controllo stato interfacce LAN....................................................................................13 IPMP.........................................................................................................................13 Email.............................................................................................................................13 Generalità.................................................................................................................13 Problema..................................................................................................................13 Librerie..........................................................................................................................14 Librerie statiche.........................................................................................................14 Librerie dinamiche.....................................................................................................15 Appendice: esempi di script............................................................................................16 cpdsk: copia logica di disco........................................................................................16 Identificazione................................................................................................................18 Riferimenti:...............................................................................................................18 Glossario...................................................................................................................19 Introduzione Qui di seguito presento una serie di appunti di lavoro fissati nel corso di varie attività espletate su sistemi Unix. Salvo dove diversamente indicato, il sistema di riferimento utilizzato è Solaris 9 montato su sistemi SUN SPARC. Questi appunti sono liberamente consultabili e riproducibili, ma vengono forniti dall'autore senza alcuna garanzia di accuratezza e/o di completezza. L'autore non assume nessuna responsabilità per eventuali danni direttamente o indirettamente conseguenti all'uso di questi appunti. pag. 1 di 18 Appunti Solaris - Unix Notazioni Dalla versione 1.4 di questo documento, due bordi ai lati di un paragrafo evidenziano variazioni del testo, o inserimento di nuovo testo, rispetto la versione precedente. I bordi ai lati di un titolo di un capitolo indicano che il capitolo in questione è nuovo, o ha subito una completa nuova stesura. Cosa è Solaris Solaris è la pacchettizzazione di SunOS, con vari strumenti aggiuntivi e una interfaccia X11. A sua volta, SunOS è l'implementazione Unix di Sun Microsystems. Questi due ambienti hanno regole di denominazione della versione diverse. In particolare Solaris (versione 1) è stato creato da Sun a partire da SunOS 4. La versione Solaris 2 usa SunOS 5. Inoltre ora Sun fa riferimento a Solaris usando solo la minor version (ovvero tralascia il 2 della major version) nominando Solaris 8 invece di 2.8, 9 invece di 2.9 etc. Inizialmente SunOS era una versione di Unix BSD. Dalla versione 5.x in poi SunOS ha accorpato anche le caratteristiche di Unix System V, divenendo un sistema System V release 4 (SVR4). Le precedenti informazioni sono tratte da rif. [5]. Logging Le indicazioni di questo paragrafo sono riprese da rif. [10] , [11], [12] e [13]. Nel primo riferimento è anche possibile leggere come configurare un sistema di log remotizzato. I file di log vengono memorizzati in directory diverse al variare del tipo di Unix usato. Le directory di solito sono: ● /usr/adm usato da versioni vecchie di unix ● /var/adm questa è usata dalle nuove versioni di Unix e Solaris ● /var/log usata da alcune versioni di Solaris, Linux, BSD e FreeBSD I file d'interesse sono: ● acct or pacct registra i comandi eseguiti da ogni utente ● lastlog login utente ● loginlog tentativi non riusciti di login utente ● messages messaggi registrati su console e su syslogd ● sulog uso del comando su ● utmp, utmpx utenti loggati correntemente ● wtmp, wtmpx tempo di login, logout, shutdown, startup ● vold.log errori durante l'uso di media esterni (Floppy, CD) ● xferlog accesso ftp syslogd è il demone che effettua il log dei messaggi. Si configura con il file /etc/syslog.conf. Parte dal file di startup /etc/rc2.d . Di solito in Solaris i file di log sono nella partizione /var . La configurazione si effettua con: facility.level logfile_o_sistema Ad esempio: pag. 2 di 18 Appunti Solaris - Unix *.info /var/adm/messages richiede di registrare in /var/adm/messages i messaggi di qualunque livello (info) da parte di tutti (*). Invece *.info;mail.none /var/adm/messages è come il precedente, ma in più ordina di ignorare (none) i messaggi di mail. Per ampliare i file di log del login è necessario creare il file loginlog, ad esempio con: touch var/adm/loginlog chmod 600 /var/adm/loginlog chgrp sys /var/adm/loginlog Altri log files d'interesse: ● /var/cron/log – log dei lavori (jobs) lanciati tramite crontab ● /var/lp/logs/lpsched – log delle informazioni correlate ai servizi di stampa Principali Shell Le principali shell comandi sono: ● Bourne shell, è il default; comando sh; ● Bourne-Again shell, o bash, ha il command history, job control, ed altro; comando bash; ● C-Shell, ha il job control, notazione più simile al C-language, ed altro; comando csh; ● Korn shell, come c-shell ma sintassi simile alla Bourne; comando ksh 1; Per maggiori approfondimenti si veda rif.[6]. La variabile SHELL (si noti il maiuscolo) contiene il nome della shell di login. Ad esempio: root@venus # echo $SHELL root@venus # /sbin/sh ci dice che il log ci ha avviato una Bourne shell. Per scoprire con quale shell si sta lavorando, si può usare ps: root@venus # ps | grep sh 602 pts/2 0:00 sh 625 pts/2 0:00 bash in questo caso ci si è loggati con una Bourne, per poi attivare una bash. Alcune shell (Cshell e TCSH) hanno la variabile shell (si noti il minuscolo) per indicare la shell corrente. In tal caso si può usare semplicemente: venus# echo $shell /bin/csh per identificare la shell corrente. Gestione Disco Identificazione della partizione/disco I dischi sono identificati: ● dal software di basso livello di gestione dell'hardware (il netbios nel caso di Personal Computer, l'equivalente firmware di gestione delle macchine SPARC nel caso di 1 E' la shell utilizzata come default dall'utente Aspect nel prodotto CSS della omonima società. pag. 3 di 18 Appunti Solaris - Unix computer SUN ...); ● dal sistema operativo vero e proprio. Ad esempio, possiamo avere /eisa/eha@1000,0/cmdk@1,0:a come identificativo di una partizione a livello di macchina, e /dev/rdsk/c1t0d0s0 come identificativo della stessa partizione a livello di sistema operativo. In Solaris, per conoscere l'id di una partizione a livello macchina (utile per avviare con quella partizione quando si accende il sistema) si usa il comando ls -l sul nome partizione conosciuto dal sistema operativo: # ls -l /dev/rdsk/c1t0d0s0 lrwxrwxrwx 1 root root 55 Mar 5 12:54 /dev/rdsk/c1t0d0s0 -> ../../devices/eisa/eha@1000,0/cmdk@1,0:a quel che viene dopo la directory /eisa/eha@1000,0/cmdk@1,0:a /devices è quanto serve per il boot: A noi interessa l'identificazione a livello di sistema operativo, si veda il successivo paragrafo. Partizioni Il disco è suddiviso in uno o più regioni. Ognuna di queste regioni è detta partizione o slice. Ogni partizione contiene un file system, o comunque un gruppo di dati la cui disciplina di accesso è omogenea. E' possibile avere file system di tipo diverso sullo stesso hard disk, ma ognuno di essi dovrà avere il suo slice dedicato. In particolare, per i dischi scsi, gli slice vengono nominati con la seguente nomenclatura: cxtydwsz dove c indica controller, t terminal, d disk, s slice; mentre i numeri che seguono (nello schema precedente i caratteri xyw e z in corsivo) sono gli identificativi relativi. Quindi c1t1d0s0 indica controller 1, terminal 1, disk 0 e slice 0. Importante: lo slice 2 identifica il disco nel suo complesso. Ad esempio c1t1d0s2 identifica l'intero disco 0 (d0) collegato tramite controller 1 (c1), terminal 1 (t1). La struttura raccomandata da SUN per i dischi Solaris è la seguente: s0 s1 s5 s6 s7 / swap /var /exp (metadb per il Volume manager) Altri autori (vedi rif. [2] ) raccomandano di usare slice separati, oltre che per / e /var, anche per /usr, /tmp e /opt. Il partizionamento complessivo di un disco si può osservare con il comando prtvtoc raw-device Ad esempio possiamo avere: # prtvtoc /dev/rdsk/c1t0d0s2 * * * * * * * * * * * * * * * * pag. 4 di 18 /dev/rdsk/c1t0d0s2 partition map Dimensions: 512 bytes/sector 424 sectors/track 24 tracks/cylinder 10176 sectors/cylinder 14089 cylinders 14087 accessible cylinders Flags: 1: unmountable 10: read-only Partition 0 1 Tag 2 3 Flags 00 01 First Sector Last Sector Count Sector 8201856 81926976 90128831 0 8201856 8201855 Mount Directory / Appunti Solaris - Unix 2 5 6 7 5 7 0 0 00 00 00 00 0 143349312 143349311 90128832 5586624 95715455 95715456 47104704 142820159 142820160 529152 143349311 /var /exp /sds Il partizionamento di un disco si ottiene usando il comando format. Questo comando è potente e flessibile, perché usabile sia batch che interattivamente (vedi rif. [2] ). D'altro canto l'uso di format è complesso perché permette di modificare le impostazioni per singola partizione. Il comando fmthard invece è più semplice, e permette la modifica al volo di tutte le partizioni di un disco. Ad esempio: fmthard -s /master/diskframe /dev/rdsk/c1t1d0s2 partiziona il disco c1t1d0s2 con il contenuto del file diskframe. Questo file deve essere preventivamente preparato con una prtvtoc ridiretta sul file stesso, o composto manualmente se hai tendenze masochiste. In quest'ultimo caso attenzione al fatto che gli slice devono rispettare l'allineamento ai cilindri del disco. Se poi il modello è il disco running, e la destinazione della formattazione è montato sul sistema (ad esempio: c1t0d0s2 è il disco running la cui struttura vogliamo copiare; e il disco destinazione, fisicamente uguale al precedente, è raggiungibile con il nome c1t1d0s2) possiamo usare un comando come segue: prtvtoc /dev/rdsk/c1t0d0s2 | fmthard -s - /dev/rdsk/c1t1d0s2 che scrive l'uscita del prtvtoc sullo stdin di fmthard. Elegante! Una nota: a differenza di quel che accade nel mondo DOS/Windows, format non costruisce le strutture dati del file system. A questo scopo si deve usare il comando newfs (vedi l'apposito paragrafo a pag. 6) Le partizioni di un disco divengono accessibili solo se vengono montate. Anche in questo caso Unix è diverso da DOS/Windows, e non utilizza il concetto di drive. Quando si monta una partizione, il suo contenuto viene visto come una estensione del file system corrente, e non come l'inizio di un nuovo file system. Ad esempio. Usando Windows, se monto un disco con due partizioni su un computer senza altri dischi, probabilmente vedrò i drive C: e D: ognuno con il proprio file system. Usando Unix, nelle stesse condizioni, vedrò un unico file system che comincia da root (/) e si estende inglobando i contenuti di entrambe le partizioni. Il comando semplificato per montare uno slice è: mount block-device mount-directory Ad esempio: mount /dev/dsk/c1t1d0s0 /mnt permette di accedere ai contenuti della partizione s0 del disco c1t1td0 dalla directory /mnt. Per smontare una partizione si usa il comando umount mount-directory Riferendoci al precedente esempio, se eseguo: umount /mnt distacco i contenuti di c1t1td0s0 dal file system, e /mnt diviene nuovamente un direttorio vuoto. Quando Unix parte, controlla il contenuto del file /etc/vfstab per sapere quali slice deve montare, e su quali directory. Se /etc/vfstab è corrotto, o malamente modificato, il sistema può non essere in grado di montare lo slice di avvio. Il recovery di questa situazione impone l'avvio con un sistema alternativo (CD-ROM o un altro disco) per poi montare manualmente lo slice contenente il file /etc/vfstab guasto per effettuare la sua riparazione con edit del file. Per avere l'elenco dei device di disco si usa il comando df [-k] pag. 5 di 18 Appunti Solaris - Unix Ad esempio possiamo avere: root@venus # df / /proc /etc/mnttab /dev/fd /var /var/run /tmp /export (/dev/md/dsk/d0 (/proc (mnttab (fd (/dev/md/dsk/d5 (swap (swap (/dev/md/dsk/d6 ):62931386 ): 0 ): 0 ): 0 ): 5029806 ):11433488 ):11433488 ):45877226 blocks blocks blocks blocks blocks blocks blocks blocks 4683548 29938 0 0 433244 197186 197186 2777802 files files files files files files files files L'opzione -k è utile per verificare la percentuale d'impegno degli slice: root@venus # df -k Filesystem kbytes used avail capacity /dev/md/dsk/d0 40344451 8878758 31062249 23% /proc 0 0 0 0% mnttab 0 0 0 0% fd 0 0 0 0% /dev/md/dsk/d5 2736975 222072 2460164 9% swap 5716792 32 5716760 1% swap 5716768 8 5716760 1% /dev/md/dsk/d6 23196744 258131 22706646 2% Mounted on / /proc /etc/mnttab /dev/fd /var /var/run /tmp /export File system: creazione Abbiamo visto che il termine formattazione nel mondo Solaris, a differenza di quanto accade in DOS/Windows, non indica la creazione dei dati necessari alla gestione di un file system, ma solo il partizionamento del disco. La creazione fisica del file system avviene con il comando new file system: newfs raw-device ad esempio per creare uno Unix file system nello slice s0: newfs /dev/rdsk/c1t1d0s0 Mentre, per creare lo swap file systems nello slice s1, precedentemente correttamente formattato: newfs /dev/rdsk/c1t1d0s1 Nota. Da questi esempi si deduce che il comando newfs rileva informazioni dalla tabella di partizionamento per sapere che tipo di file system creare nello slice richiesto. File system: check Il file system si controlla con: fsck raw-or-block-device Dove raw-or-block-device indica lo slice da controllare. Ad esempio: fsck /dev/dsk/c1t1d0sx dove sx può essere s0 s5 s6 s7. Attenzione: ● usare dsk (block device) e non rdsk (raw device) se si vuole un controllo logico della struttura del file system; ● il file system controllato deve essere a riposo, quindi deve girare in single user mode o su partizioni smontate; ● ricordare che non si può smontare la partizione di root del disco di avvio della macchina. Se ne deduce che non si può fare un file system check dello slice di root di un disco che ha avviato un sistema. Se si ha questa necessità, al limite si può provare ad andare in single user mode (comando init -s) e poi bloccare il file system (comando lockfs -fa) pag. 6 di 18 Appunti Solaris - Unix prima di eseguire il fsck. Swap Per avere l'elenco e le dimensioni dei device e file che partecipano allo swap si usa il comando: swap -l Mentre per ottenere l'impegno e la disponibilità dell'area di swap intesa come device+file +ram si usa: swap -s Lo slice di swap è /dev/dsk/c1t0d0s1 e viene montato all'avvio se nella tabella /etc/vfstab è presente una riga del tipo /dev/dsk/c1t0d0s1 – - swap – yes Come si crea il file system di swap? Basta chiamare il comando newfs su slice adeguatamente marcato con il relativo partizionamento: vedi il relativo paragrafo. Copia di un disco. Concettualmente sono possibili almeno due modi per effettuare la copia di un disco: ● la clonazione: consiste nel fare la copia settore per settore, utilizza il comando dd; ● copia logica: si copiano i contenuti dei file system degli slice del disco, utilizza i comandi ufsdump e ufrestore. La clonazione copia anche i settori che non contengono informazioni vive. Per questo motivo è potenzialmente temporalmente più lunga della copia logica. Inoltre i due dischi devono essere almeno delle stesse dimensioni, eventualmente il disco di output puo’ essere piu’ grande. Il sistema deve essere in single user mode per fare l’operazione di copia. La procedura da seguire è semplice. La copia logica è di solito temporalmente più breve, in quanto vengono copiate le sole informazioni vive2. I due dischi possono avere dimensioni diverse, incluso un disco di output più piccolo del disco di input, purché di capacità sufficiente per contenere le informazioni presenti nei file system da copiare. La procedura da seguire è più articolata di quella per la clonazione. Copia tramite clonazione. Ipotizziamo di avere in c1t0d0 il disco di avvio da copiare, e in c1t1d0 il disco destinazione, che sarà sovrascritto con i contenuti del disco da copiare. Mettiamoci in condizione di operare in single user mode dopo avere effettuato un controllo delle periferiche collegate. A questo scopo avviamo il sistema, attendiamo che sulla console sia presente il cursore “X” ruotante, quindi eseguiamo STOP A per ottenere il comando della routine di POST. Al prompt {0} ok eseguiamo il comando boot –rs dove r indica rescan del bus SCSI e s single user mode. Il sistema si riavvierà, e, dopo l'inserimento della password di root, si porterà in single user mode. A questo punto possiamo copiare la struttura del disco e poi fare il comando dd: $ prtvtoc /dev/rdsk/c1t0d0s2 | fmthard –s - /dev/rdsk/c1t1d0s2 $ dd if=/dev/rdsk/c1t0d0s2 of=/dev/rdsk/c1t1d0s2 bs=128k $ fsck –Y /dev/rdsk/c1t1d0s0 2 Se in disco non è saturo le informazioni contenute nei file system lo occuperanno solo parzialmente. pag. 7 di 18 Appunti Solaris - Unix raccomando la pazienza: il comando dd impiega circa un'ora per copiare un disco scsi da 72 GB, ed oltre due ore per un disco scsi da 146 GB. Copia logica In questo caso si deve prevedere la copia di ogni singolo slice che compone il disco e in cui siano presenti informazioni d'interesse. Ipotizziamo di avere un disco con questa struttura: Slice s0 s1 s5 s6 s7 mount / swap /var /exp /sds size 77GB contents_size 3GB 5.2GB 48GB 242MB 196MB 49MB 1MB In questo contesto è opportuno ricorrere a una copia logica del disco, visto che il suo contenuto reale è molto inferiore alla capacità del dispositivo. Gli slice da copiare saranno s0, s5, s6. Non è necessario copiare s1: essendo uno swap verrà ricreato da zero. Nel seguito di questi appunti ignoriamo anche s73. La procedura di massima deve prevedere due fasi: ● copiare il contenuto del disco da replicare (sorgente) su un disco di archivio; ● copiare il contenuto dal disco di archivio al disco destinazione. Per la prima fase (copia di un sorgente su un disco di archivio) si procede così: 1 avviare il sistema con un disco su cui verrà archiviato il contenuto del disco da replicare; 2 inserire in c1t1d0 il disco da replicare (sorgente); 3 archiviare sul disco di avvio: 3.1 la partizione del disco sorgente; 3.2 i contenuti degli slice s0, s5, s6; 3.3 il settore di boot; 4 togliere da c1t1d0 il sorgente. Per la seconda fase (copia dall'archivio al disco destinazione), avremo: 1 avviare il sistema con il disco contenente l'archivio; 2 inserire in c1t1d0 il disco destinazione; 3 usando l'archivio presente sul disco di avvio: 3.1 partizionare il disco destinazione; 3.2 per ogni slice s0, s5, s6: creare il file system e copiarvi il contenuto in archivio dello slice corrispondente; 3.3 creare il settore di boot del disco destinazione; 4 togliere da c1t1d0 la destinazione. Si usano questi comandi: ● prtvtoc (vedi) per leggere e la struttura delle partizioni; 3 Lo slice s7 qui viene ignorato perché questo disco di esempio era destinato ad essere mirrorato con SVM. E' usuale istruire SVM ad utilizzare lo slice s7 per i metadb con le informazioni di stato per il mirroring dei dischi. Questi data base di stato sono scritti da SVM in modalità diretta sul disco, senza utilizzo di un file system. pag. 8 di 18 Appunti Solaris - Unix ● ufsdump (unix file system dump) per archiviare in un file il contenuto di un intero file system; ● mount e copy del bootsector; ● fmthard (vedi) per ricreare la struttura delle partizioni del disco; ● newfs per creare (formattare) i vari file system vuoti necessari; ● mount, ufrestore, umount precedentemente archiviato. per popolare il file system con il contenuto Qui di seguito il maggiore dettaglio. Start con un disco Solaris libero su cui cumulare i contenuti in c1t0d0 (usando la directory /master per archiviare i contenuti), e in c1t1d0 il disco da replicare. Attenzione: gli esempi che seguono sono estratti da script. Quindi # indica commento e non prompt di sistema, mente \ è il “a capo” del comando corrente. Archiviazione dei contenuti del disco sorgente # c1t1 non montato perché la copia richiede filesystem a riposo prtvtoc /dev/rdsk/c1t1d0s2 >/master/diskframe # copia tabella delle\ partizioni in un file ufsdump 0f /master/imgs0 /dev/rdsk/c1t1d0s0 # copia il contenuto della\ partizione in un file ufsdump 0f /master/imgs5 /dev/rdsk/c1t1d0s5 ufsdump 0f /master/imgs6 /dev/rdsk/c1t1d0s6 ufsdump 0f /master/imgs7 /dev/rdsk/c1t1d0s7 # c1t1 montato perché devo copiare il suo bootblock (file .../bootblk) mount /dev/dsk/c1t1d0s0 /mnt cp /a/usr/platform/SUNW,Netra-240/lib/fs/bootblk /master/bootblk umount /mnt Per la duplicazione. (Opzionale:) Spegnere. Sostituire il disco da copiare in c1t1 con il disco destinazione. (Se si è spento:) Riavviare. Quindi: fmthard -s /master/diskframe /dev/rdsk/c1t1d0s2 # applica la tabella\ delle partizioni al\ nuovo HDU newfs /dev/rdsk/c1t1d0s0 # crea (format) il\ filesystem newfs /dev/rdsk/c1t1d0s1 newfs /dev/rdsk/c1t1d0s5 newfs /dev/rdsk/c1t1d0s6 newfs /dev/rdsk/c1t1d0s7 mount /dev/dsk/c1t1d0s0 /mnt cd /mnt ufrestore xf /master/imgs0 cd / umount /mnt mount /dev/dsk/c1t1d0s5 /mnt cd /mnt ufrestore xf /master/imgs5 cd / umount /mnt mount /dev/dsk/c1t1d0s6 /mnt cd /mnt ufrestore xf /master/imgs6 cd / umount /mnt installboot /master/bootblk /dev/rdsk/c1t1d0s0 (Opzionale:) Spegnere. Sfilare il disco duplicato. I passi predetti sono stati implementati nello shell script cpdsk, riportato per esteso in appendice a pag. 15 cui si rimanda per il dettaglio. Il comando per l'uso dello script è: pag. 9 di 18 Appunti Solaris - Unix cpdsk {-i|-o} directory block_disk_device Quindi: 1. inserire il disco da copiare (sorgente) in c1t1d0 (2° disco); 2. creare sul disco c1t0d0 (lavoro) una directory di appoggio su cui copiare i contenuti del disco sorgente, ad esempio /master; 3. eseguire cpdsk -i /master c1t1d0. A comando completato sostituire il sorgente con il disco destinazione; 4. eseguire cpdsk -o /master c1t1d0; 5. a comando completato estrarre il disco destinazione per utilizzarlo. Dopo avere eseguito i precedenti punti 1. 2.e 3. è possibile eseguire i punti 4.e 5. a ripetizione per creare più dischi uguali. Attenzione. Per comodità il comando cpdsk formatta il disco destinazione con la stessa struttura di slice letta dal disco sorgente. Se si hanno esigenze diverse, ad es. se il disco destinazione ha dimensioni fisiche diverse, o se si vuole cambiare l'impegno disco dei diversi slice, è necessario commentare la riga con il comando fmthard. Inoltre questa procedura non è valida se si gestisce un disco su cui sia stato acceso il disk mirroring, con particolare riferimento ai contenuti dello slice di root, che sono modificati per avviare il software di disk mirroring. Inoltre anche la tabella /etc/vfstab viene alterata per indicare le partizioni in mirror e non più quelle singole usabili con avvio del disco isolato. Di conseguenza, per copiare tutto il contenuto di un disco mirrorato, è necessario fermare il mirror su tutti gli slice, soprattutto lo slice di root s0, e poi effettuare la copia. In seguito bisognerà eseguire nuovamente la procedura per attivare il mirror sul disco. File system Come cercare grandi file Per cercare grandi file usare il comando: find /dadove -size +nnnn che rende in uscita i nomi dei file di dimensioni superiori a nnnn blocchi (512 byte/ blocco). Con il seguente si ottiene il list dei file in questione: find /dadove -size +nnnn | xargs ls -l Link di /home/aspect verso /export/aspect Per avere il link di /home/aspect verso il sorgente /export/aspect. Procedere come segue. Nel file /etc/auto_home aggiungere in fondo la riga: aspect nomemacchina:/export/aspect Nel file /etc/auto_master modificare la riga relativa a /home togliendo il parametro -nobrowse; la riga diviene: /home auto_home Riavviare. Per i dettagli: man automount pag. 10 di 18 Appunti Solaris - Unix Rete Locale Per una descrizione con maggiore dettaglio di quanto esposto qui di seguito si consulti rif.[7] e il cap.10 di rif.[8]. File di configurazione I file di configurazione della rete dati sono: ● /etc/hostname.interface ● /etc/nodename ● /etc/defaultdomain ● /etc/defaultrouter 4 l'ultimo è opzionale. I principali file per il database di network sono: ● /etc/inet/hosts ● /etc/inet/netmasks Si noti che i file per il database di network sono nella directory /etc/inet, e non in /etc. Questa è una variazione introdotta con Solaris 9. Le versioni precedenti usavano /etc. Dalla versione 9 il file /etc/hosts (e gli altri file analoghi) sono link simbolici ai file qui nominati. /etc/hostname.bge0 contiene il nome macchina o l'indirizzo ip assegnato alla scheda: root@venus # cat hostname.bge0 192.168.1.10 netmask + broadcast + up /etc/hostname6.intefaccia è utilizzata per Ipv6, con lo stesso scopo del precedente. /etc/nodename contiene il nome macchina: root@venus # cat nodename venus /etc/defaultdomain è il nome completo del dominio di appartenenza. Ad esempio: deserts.worldwide.com /etc/defaultrouter una riga per ogni router direttamente connesso alla rete. La riga contiene il nome dell'interfaccia che funziona come router tra networks: root@venus # cat defaultrouter 128.1.1.1 255.255.0.0 Database hosts. Contiene gli indirizzi e i nomi host delle macchine sulla propria rete. Se si usano i servizi di nome (NIS, NIS+, DNS, a volte LDAP) questi sono gestiti nella host table. Se la macchina è configurata per avere i servizi dei nomi su file locali, gli indirizzi sono in /etc/inet/hosts Ad esempio: root@venus # cat hosts # # Internet host table # 127.0.0.1 localhost 128.1.1.16 venus loghost 192.168.1.115 css71tsp 192.168.1.10 css71a Database netmasks. Usato in caso di subnetting. E' una lista di reti e le relative subnet masks. E' in /etc/inet/netmasks. Esempio: root@venus # cat netmasks # 4 Ad esempio hostname.bge0 pag. 11 di 18 Appunti Solaris - Unix # The netmasks file associates Internet Protocol (IP) address # masks with IP network numbers. # # network-number netmask # # The term network-number refers to a number obtained from the Internet Network # Information Center. # # Both the network-number and the netmasks are specified in # "decimal dot" notation, e.g: # # 128.32.0.0 255.255.255.0 # #128.1.0.0 255.255.0.0 #10.10.0.0 255.255.0.0 128.1.1.0 255.255.255.0 192.168.1.0 255.255.255.0 L'elenco completo dei file di database di rete è: ● hosts ● ipnodes ● netmasks ● ethers ● bootparams ● protocols ● services ● networks Inoltre il file nsswitch.conf specifica quale servizio di nomi usa la macchina: local files, NIS, NIS+, DNS, o LDAP. In rif.[7], pag.97, i relativi dettagli. Per configurare un host con servizio dei nomi local files, si procede come segue: ● da superuser in /etc; ● creare i file /etc/hostname.interfaccia , uno per ogni interfaccia di rete, dove interfaccia è il relativo nome dell'interfaccia, ad esempio bg0, bge1, ... e inserirci il relativo indirizzo IP, o il nome host; ● nel file /etc/inetd/hosts effettuare il mapping tra gli IP e i relativi nomi host;5 ● nel file /etc/defaultrouter inserire il/gli IP del/dei router direttamente connessi alla rete; ● nel file /etc/inet/hosts effettuare il mapping tra IP e i relativi nomi host del/dei router; ● se la rete è una subnet, modificare di conseguenza il file /etc/inet/netmasks; ● riavviare 5 Attenzione: l'inserimento di nomi e IP non controllati direttamente (ovvero altre macchine di rete amministrate da altri) può dare luogo a problemi di gestione. Se un altro amministratore modifica il relativo IP a ns insaputa, il tutto non funziona più. In tal caso meglio ricorrere al DNS. Per fare questo si deve configurare /etc/nsswitch.conf e /etc/resolv.conf. pag. 12 di 18 Appunti Solaris - Unix Controllo stato interfacce LAN Per controllare le statistiche dei pacchetti sulle interfacce di LAN, usare il comando netstat -in Sulle Netra le interfacce fisiche di rete sono bge0, bge1, bge2, bge3 IPMP Solaris 10 permette IPMP sul solo link fisico, evitando il ping. Ipotizzato il sistema con le interfacce di LAN qfe0 e qfe4 si può configurare come segue: nel file /etc/hostname.qfe0: hostname group groupname up e nel file /etc/hostname.qfe4: group groupname up Con Solaris 9 ho provato e non funziona. Nota: usare il link fisico non permette di individuare certi tipi di guasto, ad esempio oltre lo switch di attestazione del SUN. Per sapere come si comporta IPMP non ho trovato di meglio del fare il trace dei pacchetti icmp. Dare il comando snoop -d interfaccia_da_osservare icmp Email Generalità Esistono MUA, MTA, MDA: Mail User Agent, Transfer Agent, Delivery Agent. I MUA ricevono comandi dall'utente per comporre e inviare la posta. Gli MTA trasferiscono la posta tra nodi diversi. Gli MDA consegnano la posta ad un utente, che la legge con un MUA. Un esempio di MUA è il programma mail per inviare posta da linea di comando. sendmail è un MTA, usato sia in Unixware che in Solaris. sendmail riceve ordini da un MUA per inviare posta (ad esempio: mail), e interfaccia gli MDA ed altri MTA remoti per recapitare la posta. In Unixware l'agente di delivery locale è il programma slocal. In Solaris lo MDA locale è mail.local. La posta locale viene messa in file con lo stesso nome della login utente. Ad esempio /var/mail/defalco contiene la posta per l'utente defalco. Questi file sono ascii, e quindi leggibili con un qualunque file editor. Problema E' accaduto (in Unixware) che la mancanza del file /var/mail/aspect (e l'associato /var/mail/.aspect.index) impedissero il delivery della posta, generando messaggi di errore che hanno saturato il disco del sistema (file /var/adm/log/osmlog in Unixware). Librerie Una libreria è una collezione di moduli software che mettono a disposizione di programmi dei “servizi”, senza che il fruitore del servizio stesso si preoccupi di come è stato implementato. Il concetto di libreria persegue diversi scopi: 1. sviluppare una sola volta un determinato servizio, e metterlo a disposizione di chiunque ne abbia bisogno; pag. 13 di 18 Appunti Solaris - Unix 2. limitare la quantità di memoria RAM impegnata nel sistema quando più processi richiedono lo stesso servizio, perché una determinata libreria viene caricata in memoria una sola volta, indipendentemente da quanti programmi la stanno usando contemporaneamente; 3. limitare la quantità di memoria disco impegnata nel sistema, perché è possibile sviluppare librerie presenti sul disco in unica istanza, anche se impiegate da più programmi. Scritto il codice di un programma, il programmatore suole passare tramite due fasi per ottenere un eseguibile: compilazione e linking. La prima fase produce un particolare formato intermedio, detto codice oggetto. In Unix, per convenzione e non obbligatoriamente, i file con codice oggetto sono identificati con nomi terminanti per .o . La seconda fase provvede a inglobare nel codice oggetto, gli eventuali servizi esterni richieste a librerie. Il risultato finale di queste due fasi è un eseguibile, ovvero una serie di comandi che il loader del sistema operativo può caricare in RAM, per poi avviarli nella CPU. La CPU sarà in grado di eseguire direttamente questi comandi. Una libreria può essere di due diversi tipi: ● statica, ● dinamica (la terminologia inglese in Unix è: shared, ovvero condivisa). Una libreria è statica se durante la fase di linking il suo codice entra stabilmente a far parte del file eseguibile. Una libreria statica risolve il precedente punto 1, non i punti 2 e 3. Una libreria è dinamica se durante la fase di linking il suo codice non viene incorporato nel file eseguibile, ma vi vengono messi solo degli opportuni puntamenti. In questo caso, quando si richiede l'esecuzione dell'eseguibile, sarà compito del loader del sistema operativo verificare quali librerie dinamiche occorrono, e, se non sono già in RAM, caricarvele opportunamente. Una libreria dinamica risove tutti e tre i punti prima citati, ma introduce una maggiore complessità di gestione. Librerie statiche. Per creare una libreria statica si producono in codice oggetto i moduli che la formeranno. Dopo di che si usa il programma ar (archive) dandogli il nome delle libreria da creare e l'elenco dei moduli oggetto che deve inglobare. Ad esempio: ar rc mylib.a mod_1.o mod_2.o mod_3.o crea la libreria mylib.a a partire dai moduli mod_1.0 , mod_2.o e mod_3.o . Il programma ar viene utilizzato anche per la manutenzione della libreria, sostituendo e/o aggiungendo moduli. Una libreria statica può essere indicizzata, utilizzando un apposito programma: ranlib . Ad esempio: ranlib mylib.a indicizza la libreria statica mylib.a .L'indicizzazione è utile per abbreviare il tempo necessario al linking di programmi di grandi dimensioni. L'uso di una libreria statica si limita ad una corretta fase di linking. Un programma costruito con libreria statica ha inglobato tutto il codice che serve. Di conseguenza è del tutto autonomo in fase di esecuzione. Un esempio di link è il seguente: cc p.o -L./mylibs -lmylib -o p pag. 14 di 18 Appunti Solaris - Unix dove il compilatore c (comando cc) effettua il link del codice oggetto p.o con la libreria statica mylib.a (opzione -l) da cercare nella directory ./mylibs (opzione -L) producendo il programma eseguibile p (opzione -o). Librerie dinamiche La creazione di una libreria dinamica richiede che il codice oggetto dei moduli che la formeranno venga preparato in un particolare formato rilocabile. Per fare ciò si usa una opportuna opzione di compilazione -pic (acronimo di position indipendent code) o similari (dipende dal compilatore). Ad esempio: cc -c -fpic mod_1.c produce in formato rilocabile il codice oggetto mod_1.o . Dopo di che, sempre tramite compilatore, si crea la libreria dinamica, usando una opportuna opzione (quale sia questa opzione dipende dal compilatore, ad esempio può essere -G). Ad esempio: cc -G mydlib.so mod_1.o mod_2.o mod_3.o crea la libreria dinamica mydlib.so a partire dai moduli mod_1.o , mod_2.so e mod_3.so . Si noti il suffisso .so che in Unix per convenzione individua le librerie dinamiche. L'uso di una libreria dinamica non richiede lo stesso tipo di compilazione di una libreria statica: cc p.o -L./mylibs -lmydlib -o p che è del tutto analogo all'esempio precedente. Però ora per eseguire il programma p , bisogna caricare sul sistema anche la libreria mydlib.so . Dove posizionare questo file dipende dal path di ricerca del sistema operativo per le librerie dinamiche. Per sicurezza è il caso di controllare il settaggio della variabile d'ambiente LD_LIBRARY_PATH . Se esiste si può mettere la libreria in una delle directory in essa presenti. Se non esiste si può creare inserendovi una directory in cui mettere le librerie dinamiche d'utente. In ogni caso è possibile controllare se le librerie dinamiche necessarie ad un programma sono raggiungibili dal sistema usando il comando ldd . Ad esempio: ldd p darà l'elenco delle librerie dinamiche necessarie, e i relativi path in cui sono presenti nel disco. Se il path non è presente, la libreria non è raggiungibile. Per maggiori dettagli riguardo le librerie si consulti rif.[9] a pag.18. Appendice: esempi di script cpdsk: copia logica di disco #!/bin/bash # copy a disk # usage: cpdsk {-i|-o} directory device # by ldfa at citec spa # ver 1.0 13.02.07 # ver 1.1 04.04.07 example correction # input: mount -r to get bootsector from mirrored disk # PRG_VER="1.1" PRG_DATE="04-Apr-2007" #The guardian # we must to check at least the presence of 3 parameters if [ -z $1 ] # no parameters pag. 15 di 18 Appunti Solaris - Unix then echo echo echo echo "usage: cpdsk {-i|-o} directory disk_device" "copy a disk" " -i copy disk contents from device to directory" " -o copy disk contents from directory to device" echo "example:" echo " cpdsk -i /master c1t1d0" echo "WARNING: DO NOT write slice in disk_device" echo " AND write disk_device without /dev/rdsk \ (see the previous example)" echo "Disclaimer: the use of this program is free, but \ you use it at your own" echo " risk. Author does not make warranties, express \ or implied, nor he assumes" echo " any legal liability or responsibility for the use\ of this program." echo "Current version is $PRG_VER of $PRG_DATE" exit 1 fi if [ -z $2 ] # no 2nd parameter then echo "error: no directory" echo "type cpdsk without parameters if you need help" exit 1 fi if [ -z $3 ] # no 3rd parameter then echo "error: no device" echo "type cpdsk without parameters if you need help" exit 1 fi # TO ADD -i -o check #The code RDEV=/dev/rdsk/ BDEV=/dev/dsk/ if [ $1 == "-i" ] then # input of the source disk echo "input of source disk $RDEV$3 to directory $2" cd $2 # do not mount disk_device: ufsdump requests static file system prtvtoc $RDEV$3s2 > diskframe # getting source disk partition table # echo "dumping $RDEV$3s0 in ufsdump 0f imgs0 $RDEV$3s0 # echo "dumping $RDEV$3s5 in ufsdump 0f imgs5 $RDEV$3s5 # echo "dumping $RDEV$3s6 in ufsdump 0f imgs6 $RDEV$3s6 # echo "dumping $RDEV$3s7 in # ufsdump 0f imgs7 $RDEV$3s7 $2/img0" # copying slice content in one file $2/img5" $2/img6" $2/img7" # do not dump because to use only\ as metadb replica(s) location # mount disk_device: must get bootblock (file .../bootblk) mount -r $BDEV$3s0 /mnt # added -r: do not disturb a\ root slice of a mirrored disk cp "/mnt/usr/platform/SUNW,Netra-240/lib/fs/ufs/bootblk" bootblk #WARN:\ netra 240 specific case, use \ `uname -i` to check your system\ identification umount /mnt fi if [ $1 == "-o" ] then echo "output of directory $2 to device $RDSK$3" cd $2 pag. 16 di 18 Appunti Solaris - Unix fmthard -s diskframe $RDEV$3s2 # partitioning destination disk newfs $RDEV$3s0 fsck $RDEV$3s0 newfs $RDEV$3s1 fsck $RDEV$3s1 newfs $RDEV$3s5 fsck $RDEV$3s5 newfs $RDEV$3s6 fsck $RDEV$3s6 # formatting destination file systems mount $BDEV$3s0 /mnt cd /mnt ufsrestore rf $2/imgs0 rm restoresymtable cd / umount /mnt mount $BDEV$3s5 /mnt cd /mnt ufsrestore rf $2/imgs5 rm restoresymtable cd / umount /mnt mount $BDEV$3s6 /mnt cd /mnt ufsrestore rf $2/imgs6 rm restoresymtable cd / umount /mnt # copying contents to slices cd $2 installboot bootblk /dev/rdsk/c1t1d0s0 # putting bootblock in place fi exit 0 Identificazione Documento: Progetto/Titolo...............Appunti Solaris - Unix / Appunti Solaris - Unix Versione ........................1.4 Del.................................28.11.2007 Stato.............................. Diffusione....................... Filename........................appunti-solaris-1.4_.odt Storia: Versione Del Lavorazione 1.0................................prima stesura 1.1................................inserimento del capitolo relativo alla email 1.2............30.03.2007...migliorata la descrizione delle copie di dischi 1.3............17.04.2007...inserito il capitolo “identificazione e storia” migliorata la sezione gestione disco 1.4............28.11.2007...Inserito il capitolo “Cosa è Solaris” Inserito il capitolo “Principali shell” cambiata la formattazione del documento Inserito il capitolo “Librerie” Inserito il capitolo “Logging” pag. 17 di 18 Appunti Solaris - Unix Riferimenti: Rif. [1]...............E.V. Meersch, K.Hens- Configuring Boot Disks With Solaris™ Volume Manager Software - Sun BluePrints OnLine - October 2002 [2]...............Greg (shoe) Schuweiler - The "format" Utility in the Solaris Operating System November 2004 [3]...............Sun Microsystems, Inc. - Solaris Volume Manager Administration Guide – May 2002 [4]...............Scott Cromar - Solaris SPARC boot sequence - Princeton University – 2006 [5]...............indiana university, university information technology services, knowledge base - http://kb.iu.edu/data/agjq.html [6]...............From Wikipedia, the free encyclopedia: Bourne shell http://en.wikipedia.org/wiki/Bourne_shell [7]...............SUN Microsystems, Inc. - System Administration Guide: IP Services – May 2002 [8]...............Janice Winsor – Solaris, operating environment system administrator's guide – Sun Micorsistems Press, A Prentice Hall Title -4th ed. [9]...............guy keren - Building And Using Static And Shared "C" Libraries http://users.actcom.co.il/~choo/lupg/tutorials/libraries/unix-c-libraries.html [10].............Caltech, Information Technology Services - Unix Security Overview: Solaris: Logging http://www.its.caltech.edu/its/security/sysadmins/seminars/solaris/logging.html [11].............Kristopher March - System Log Rotation Utilizing logadm (for Solaris 9 OS Only) - http://www.sun.com/bigadmin/content/submitted/solaris_logadm.html [12].............Boran consulting - IT Security Cookbook, Securing UNIX #1/2 http://www.boran.com/security/unix1.html#Heading107 [13].............By Simson Garfinkel & Gene Spafford - Practical unix & internet security ISBN 1-56592-148-8 http://www.unix.org.ua/orelly/networking/puis/ch10_01.htm Glossario Acronimo Significato ALOM...........Advanced Lights Out Manager, controllore di sistema che permette di gestire da remoto il server SUN Netra 240 POST............Power On Self Test, il programma che controlla l'integrità del sistema all'avvio, e prosegue con le routine di avvio propriamente dette. Nel rif. [4] vi è una descrizione delle fasi di avvio di un sistema SPARC. VMS.............Volume Manager Software, sinonimo di SVM (vedi) SVM.............Solaris Volume Manager, Evoluzione di Solstice, software di disk mirroring adottato da SUN per Solaris. Si veda Rif. [1] pag. 18 di 18
Documenti analoghi
Nuove funzioni dell`ambiente operativo Solaris 8
marchi SPARC sono utilizzati su licenza e sono marchi o marchi registrati di SPARC International, Inc. negli Stati Uniti e in altri paesi. I
prodotti con marchio SPARC sono basati su un’architettur...