Tramite gli script di inizializzazione è possibile customizzare l'ambiente shell in cui si lavora, modificando e impostando i valori di variabili d'ambiente (valide per ogni processo gestito dall'utente) o di variabili locali (valide solo la shell corrente).
Le variabili d'ambiente più comuni sono:
LOGNAME
La login dell'utente. Viene impostata al login.
USER
L'utente corrente. Può essere diverso da LOGNAME se l'utente ha fatto un 'su'.
HOME
Il path dell'home directory dell'utente. Viene impostata al login.
SHELL
Il path della shell di default. Viene impostata al login.
PATH
I path di default in cui la shell cerca comandi da eseguire. Viene impostata al login.
MAIL
Il path della casella postale dell'utente. Viene impostata al login.
TERM
Il tipo di terminale corrente.
PWD
La directory di lavoro corrente.
PS1
Il prompt della shell (per Bourne e Korn shell)
prompt
Il prompt della shell (per la C shell)
EDITOR
Il text editor di default (usato nella shell e in comandi quali crontab -e)
DISPLAY
Dove viene visualizzato il Display di un X server
Per impostare o modificare una variabile d'ambiente ci sono diversi metodi a seconda della shell utilizzata:
Bourne, Bash e Korn Shell: VARIABILE=valore ; export VARIABILE
. Per esempio: PS1='$LOGNAME@$HOSTNAME ! $' ; export PS1
. Oppure, in forma ridotta: export VARIABILE=valore
C Shell: setenv variabile valore
. Per esempio: setenv prompt "\! 'uname -n' % "
Il web, ovviamente, è la migliore e più accessibile fonte su cui trovare informazioni, documentazione, software e risorse su Sun Solaris.
Nei link correlati a questo BOX vengono indicati i siti principali, per gli approfondimenti del caso basta cercare Sun Solaris (o query più specifiche) sui motori di ricerca.
Su Unix sono disponibili degli strumenti di dump (copia) e restore su nastro (storicamente) di interi file system o parti di essi.
Su Solaris è possibile trovare analoghi comandi specificatamente dedicati al file system UFS di Sun.
Il comando ufsdump viene usato per eseguire un backup completo (full) o incrementale di un file-system UFS. La sua sintassi è:
ufsdump opzioni [argomenti] file_da_dumpare
Le Opzioni più comuni:
0-9
Specifica il livello di DUMP. 0 (zero) è quello più basso ed indica sempre un FULL DUMP, da 1 a 9 sono usati per dump incrementali e hanno significato solo relativo fra loro (un dump di livello 3, per esempio, include anche file dumpati con livelli superiori, ma non file dumpati con operazioni di livello inferiore).
f nome_device
Specifica il device in cui vengono scritti i file da dumpare.
v
Verifica dei dati copiati.
S
(senza altre opzioni) Visualizza il numero di byte previsti per il backup per il device o directory specificati.
u
Aggiorna il registro /etc/dumpdates con la data e il livello del backup che si sta eseguendo.
file_da_dumpare
Può riferirsi sia al nome di un file o directory (es: /export/home/al ) che al nome di un file system montato (es: /home ) che al nome completo di un device (es: /dev/dsk/c0t0d0s0 ).
I backup incrementali vengono gestiti con livelli di dump da 1 a 9. Questo permette di schedulare backup incrementali con flessibilità. Quando viene eseguito un backup incrementale, vegnono copiati solo i dati modificati dell'ultima volta in cui è stato eseguito un backup dello stesso livello o superiore. Lo storico dei backup eseguiti viene mantenuto sul file /etc/dumpdates
, per cui è sempre raccomandabile usare ufsdump con l'opzione u
.
E' raccomandabile eseguire il dump di un file system quando questo non è montato sul sistema e non può essere modificato durante l'operazione di copia (questa è infatti divisa in due diverse fasi: nella prima si raccolgono gli inode dei file da dumpare, nella seconda si copiano i dati effettivi).
Se non si può andare direttamente in maintenance mode (init S
), la procedura corretta per il dump di un intera partizione è:
- Umount della partizione (es: umount /home
) Questa operazione è ovviamente impossibile con la / o la /usr (dove risiedono tutti i comandi di sistema)
- File system check della partizione (es: fsck /dev/rdsk/c0t1d0s1
)
- Dump su nastro della partizione (es: ufsdump 0f /dev/rmt/0 /dev/rdsk/c0t1d0s1
)
- Mount della partizione precedentemente smontata (es: mount /home
)
Per conoscere esattamente mount point e relativi nomi completi di device fare riferimento a /etc/vfstab
.
Si può verificare la dimensione dei dati da backuppare con ufsdump S file_da_dumpare
.
Il restore dei dati salvati su nastro viene fatta con ufsrestore:
ufsrestore opzioni [argomenti] [file_da_riprestinare]
Le Opzioni più comuni:
i
Esegue un restore interattivo: si visualizza un prompt dedicato da cui è possibile browsare file e directory su nastro, selezionare quali ripristinare e fare un restore selettivo dei file scelti.
r
Esegue un restore completo dell'intero backup.
t
Visualizza l'elenco dei file backuppati senza fare un restore.
x
Esegue un restore solo dei file specificati come argomento.
f dump_file
Specifica un dump_file (tape device, dischetto o disk file) alternativo a quello di default (/dev/rmt/0).
v
Verbose mode: visualizza i nomi dei path mentre vengono restorati.
L'operazione di restore viene eseguita in riferimento alla directory corrente: se ci si trova in /tmp e si fa un restore di /etc/hosts (usfrestore xvf /dev/rmt/0 ./etc/hosts
), il file viene scritto in /tmp/etc/hosts.
Se si deve eseguire un restore di un intero sistema per un qualsiasi disastro (rm -rf /*, crash di un hard disk non mirrorato, formattazioni incaute ecc.) si devono eseguire le seguenti operazioni (fare riferimento alla documentazione SUN online per maggiori dettagli, qui viene fatto solo un sommario elenco):
1- Spegnimento del sistema, inserimento di un nuovo hard disk;
2- Boot del sistema da CDROM in maintenance mode (boot cdrom -r
da ok prompt);
3- Riconoscimento, partizionamento, formattazione e mount su una directory temporanea del nuovo hard disk.
4- Restore dei dati dal nastro al nuovo hard disk (ufsrestore rvf /dev/rmt/0
)
5- Eventuali restore successivi di dump incrementali (farlo dai livelli di dump inferiori a quelli superiori)
6- Verifica dell'integrità del file system restorato nell directory montata e rimozione di restoresymtable
.
7- Umount e fsck del nuovo file system.
8- Creazione dei settori di boot sulla partizione di root (installboot /usr/platform/'uname -i'/lib/fs/ufs/bootblk /dev/rdsk/nomedevice
)
9- Ripetizione dei punti da 4 a 8 per ogni mount point o partizioni separate
10- Verifica che /directorydimounttemporaneo/etc/vfstab abbia informazioni corrette per il nuovo hard disk aggiunto al sistema (va modificato se l'hard disk non è stato fisicamente sostituito al precente ed ha un device name diverso)
11- Reboot del sistema (con le dita incrociate).
Da Solaris 8 è disponibile il tool fssnap
che permette un corretto dump di un file system senza la necessità di doverlo smontare.
Su Solaris vengono installati di default vari servizi che possono essere avviati al boot tramite i relativi startup-scripts.
Alcuni di questi demoni possono presentare problematiche di sicurezza, altri sono in molti casi inutili, altri ancora possono generare una quantità di dati e informazioni, o offrire servizi che di fatto non vengono utilizzati dagli amministratori.
Vediamo una rassegna dei servizi che si possono ritrovare come installati ed eseguiti al boot in una installazione standard di Solaris 8.
INIT 2 (script di Start in /etc/rc2.d/ )
S01MOUNTFSYS
Script che esegue il mount dei file sistem. Presente in ogni run-level. Necessario - tenere
S05RMTMPFILES
Script che rimuove file temporanei e ripulisce le relative directory. Necessario - tenere
S20sysetup
Esegue alcuni script di startup. Non indispensabile, ma innocuo - tenere
S21perf
Esegue (vanno scommentati) gli script di System Activity Reporting (sar) che generano log e statistiche sull'utilizzo delle risorse della macchina. Utile solo per monitoring approfondito - Rimuovere
S30sysid.net
Script che completa la configurazione delle interfacce di rete. Necessario - Tenere
S40llc2
Inizializza il Logical Link Control driver (Layer 2 networking). Necessario - Tenere
S47asppp
Esegue il aspppd, Asyncronous PPP manager. Utile solo in stazioni con modem per dial in e dial out. Utile solo se si usa un modem - Rimuovere
S69inet
Imposta la configurazione del TCP/IP impostando i vari parametri di rete. Necessario - Tenere
S70uucp
Esegue operazioni di manutenzione per file gestiti con uucp (antico metodo di copia file fra stazioni Unix). Utile solo se si usa uucp. Rimuovere
S71ldap.client
Lancia il client ldap. Necessario solo se si usa ldap. Tenere solo in questo caso.
S71rpc
Lancia il rcpbind (Remote Procedure Call manager) e i servizi NIS+. Potenzialmente pericoloso per la sicurezza. Necessario se si usa NIS+, NFS o altri servizi RPC - Tenere solo in questi casi
S71sysid.sys
Esegue una serie di comandi che compeltano l'inizializzazione del sistema. Necessario - Tenere
S72inetsvc
Completa la configurazione della rete. Viene lanciato, se configurato, il server DNS. Necessario - Tenere
S72autoinstall
Esegue script di post-installazione dopo un setup via rete (con Kickstart). Necessario solo in fase di installazione con Kickstart. Rimuovere.
S72slpd
Esegue il Service Locator Protocol Daemon, necessario per l'autodiscovery di certi servizi in rete. Necessario solo in ambienti che supportano questo protocollo. Tenere solo in questo caso.
S73nfs.client
Esegue i processi necessari per il client NFS. Necessario se si usa NFS - Tenere solo in questo caso
S73cachefs.daemon
Gestisce il Cache File system, per migliorare le prestazioni del FS. Necessario se si vuole usare questa funzionalità - Tenere solo in questo caso
S74autofs
Avvio all'automountd che permette il mount automatico di device. Comodo su workstation - Rimuovere su server
S74xntpd
Lancia il Network Time Protocol Daemon. Necessario solo su NTP server - Tenere solo in questo caso
S74syslog
Esegue il syslogd, fondamentale per il logging del sistema. Necessario - Tenere
S75cron
Esegue il demone che gestisce il cron. Necessario - Tenere
S75savecore
Gestisce i file di coredump (core) Solitamente non necessario ma innocuo - Tenere
S76nscd
Lancia il Name Service Cache Daemon. Può velocizzare la risoluzione dei nomi. Nel dubbio rimuovere.
S80PRESERVE
Sposta file editati con Ex in /usr/preserve. Non particolarmente utile ma innocuo - Tenere
S80lp
Lancia il Print Server Daemon. Utile solo su un print server - Rimuovere
S80spc
Esegue printd, servizio di supporto per lpd. Utile solo su un print server - Rimuovere
S85power
Gestisce il Power Management. Utile su laptop - Rimuovere
S88utmpd
Avvia il demone utmpd, che monitora il corretto accounting dei processi su /var/adm/utmp. Non indispensabile ma innocuo. Tenere.
S89bdconfig
Lancia bdconfig per la gestione di "Buttons e Dials" Rimuovere
S90wbem
Necessario per il Web Based Enterprise Management Rimuovere, se non si usa
S92volmgt
Lancia il Volume Management Daemon, comodo per gestire CDROM, ZIP, floppy ecc. Rimuovere su un server
S93cacheos.finish
Esegue script utile per il cacheos. Necessario se si una un cachefs. Tenere solo in questo caso
S94ncalogd
Gestisce il logging del Network Cache And Accelerator Server. Tenere solo se si abilita il NCA server
S95ncad
Esegue il Network Cache And Accelerator server, utile per migliorare le prestazioni di un server web. Utile, se ben configurato, su server web. Tenere solo in questo caso
S99audit
Gestisce l'audit daemon. Tenere solo se è necessario l'auditing di processi e utenti
S99dtlogin
Lancia il dtlogin per il login su ambiente grafico CDE. Necessario solo su stazioni grafiche. Rimuovere se non si usa Xwindows
I comandi Solaris per la visualizzazione, la gestione e il debugging dei processi su Solaris sono simili a quelli presenti su altri Unix.
Comandi per la visualizzazione di processi (con le opzioni più utili):
ps -ef
Visualizza tutti i processi attivi sul sistema con alcune informazioni utili
prstat -a
Visualizza una schermata, aggiornata automaticamente con i processi ordinabili secondo vari criteri (simile a top
). L'opzione -a visualizza anche i totali per singoli utenti. Un programma simile, disponibile in ambiente grafico è il CDE Process Manager, che si può eseguire lanciando Find Process dal menu Tools
Comandi per il debugging di processi:
truss -p PID
Visualizza tutte le chiamate di sistema del processo con il PID specificato. E' fondamentale per fare un debugging approfondito di un processo e capire cosa effettivamente fa. Corrisponde allo strace
comune su Linux.
La configurazione del networking su Sun Solaris si basa su alcuni file specifici che, una volta noti, non presentano particolari complicazioni.
Il comando ifconfig
puo- essere usato per visualizzare informazioni sulle interfacce di rete e per configurarle. Notare che su Solaris e' necessario prima di poterla utilizzare fare un plumb dell'interfaccia (ifconfig hme0 plumb
.
La sintassi di ifconfig e' simile a quella di Linux e altri Unix, per esempio:
ifconfig hme0 10.0.0.15 netmask 255.255.255.0 broadcast 10.0.0.255 up
attiva l'interfaccia hme0 e gli assegna IP 10.0.0.15.
Ifconfig viene anche usato per gestire e configurare un'interfaccia via DHCP:
ifconfig hme0 dhcp start
manda un DHCP broadcast per trovare in rete un server da cui ottenere il proprio indirizzo IP.
I file in cui possono essere salvate le configurazioni relative alla rete sono:
/etc/nodename
Contiene il nome dell'host. Es: talete
/etc/hostname.hme0
Dove hme0 e' il nome dell'interfaccia di rete. Contiene il nome dell'host per quella
interfaccia, associato al contenuto di /etc/hosts
di fatto assegna l'ip all'interfaccia. Es: talete
/etc/hosts
Symlink a /etc/inet/hosts
. E' il file che contiene staticamente le associazioni nome macchina/indirizzo IP. E' fondamentale per la configurazione di un indirizzo IP su Solaris. Es:
127.0.0.1 localhost loghost
172.16.5.1 talete
/etc/defaultrouter
Contiene il nome o l'indirizzo IP del default gateway
/etc/netmasks
Symlink a /etc/inet/netmasks
. E- un file che contiene le maschere di sottorete per netowkr subnettati rispetto alle tradizionali classi A, B e C. Es> 172.16.5.0 255.255.255.0
/etc/resolv.conf
Contiene indirizzo IP dei server DNS e, eventualmente, nome di dominio predefinito. Es:
domain openskills.info
nameserver 172.16.5.1
nameserver 217.56.35.99
/etc/nsswitch.conf
Contiene informazioni su quali strumenti (file locali, dns, nis], ldap...) utilizzare per la risoluzione dei nomi e per altri servizi.
/etc/services
Symlink a /etc/inet/services
. Descrive l'associazione numero di porta : nome del servizio. Generalmente non e' necessario modificarlo.
Se si ha un host con piu' interfacce o se sulla stessa interfaccia si devono configurare piu' indirizzi IP basta creare un file tipo /etc/hostname.hme0:1
(Contenente il nome dell'host su questa interfaccia, es: taletebis
) e aggiungere il nome dato a /etc/hosts
(es: 172.16.5.101 taletebis
).
Come ogni sistema operativo Solaris viene costantemente aggiornato, sia per la scoperta di bug o buchi di sicurezza nella versione rilasciata inizalmente al pubblico, sia per l'aggiunta di nuove funzionalità o il suopporto di nuovo hardware. Gli aggiornamenti di Solaris vengono fatti tramite "patch" che possono essere scaricati direttamente dal sito di Sun.
Il punto di riferimento per la verifica delle patch per il proprio sistema e l'aggiornamento è http://sunsolve.sun.com
. Qui si possono browsare e ricercare le patch e scaricare sia quelle "Reccomended" (download aperto a tutti" sia tutte le altre (download riservato ai clienti che hanno un contratto di assistenza con Sun). Lo storico delle patch installate sul sistema sta in /var/sadm/patch
, questa directory non va cancellata in quanto permette l'aggiunta o rimozione di patch.
Da Solaris 7 in poi le patch sono in un file .zip, con un formato tipo: 112438-01.zip. Il primo numero, di 6 cifre, è un ID univoco diverso per ogni patch. Il secondo numero, di 2 cifre, è la revisione per quella patch. E' un numero progressivo, revisioni successive (es: 10) comprendono tutte le precedenti (es: 07).
I comandi utili per gestire le patch sono patchadd
, patchrm
e showrev
.
Una volta unzippata la patch (es: unzip 112438-01.zip
, si ottiene una directory, col nome della patch, che contiene vari file e sottodirectory con questa logica:
README.112438
Instruzioni per l'installazione
postpatch
Script eseguito al termine del processo di patch
postbackout
Script da eseguire in caso di rimozione della patch
SUNWmdbx/
Directory con il nome pacchetto che viene aggiornato (possono essercene più di una per patch).
SUNWmdbx/pkgmap
Path dei nuovi file o directory nella patch
SUNWmdbx/pkginfo
Informazioni aggiornate per il pacchetto (vanno in /var/sadm/pkg/SUNmdbx/pkginfo
)
SUNWmdbx/install/
Directory che contiene script da eseguire durante il patching
SUNWmdbx/reloc/
Directory che contiene i nuovi file che vanno a sostituire quelli esistenti (con PATH completo)
Per installare la patch basta un comodo (da Solaris 7 in poi):
patchadd 112438-01
che esegue il comando pkgadd
e gli script presenti nella patch.
Con l'aggiornamento vengono eseguite le seguenti modifiche in /var/sadm
:
- Viene aggiunta la directory 112438-01 in /var/sadm/patch
;
- Viene aggiornato il file /var/sadm/pkg/PACCHETTIAGGIORNATI/pkginfo
(ovviamente per PACCHETTIAGGIORNATI si intendoni nomi come SUNWmdbx)
- Viene creata la directory /var/sadm/pkg/PACCHETTIAGGIORNATI/save
dove ci sono informazioni e binari per il ripristino dei vecchi file.
E' possibile ripristinare la situazione pre-patch con il comando patchrm 112438-01
(possibile solo se la patch non è richiesta (required) da un'altra patch o se non è stata resa obsoleta (obsoleted) da un ulteriore patch)
Con il comando showrev -p
(o patchadd -p
è possibile visualizzare l'elenco delle patch installate.
Sun, inoltre, su Sunsolve.sun.com, mette a disposizione dei Cluster di Patch costantemnte aggiornati, che contengono tutte le patch reccomended e permettono di eseguire in un unica operazione l'aggiornamento completo del sistema operativo. I cluster di patch sono paragonabili ai Service Packs di Microsoft, con la differenza che vengono costantemente aggiornati.
Per installare un cluster di solito basta unzippare l'enorme file, entrare nella directory ottenuta ed eseguire ./install_cluster
(sempre meglio leggersi i README del caso, prima).
I file di inizializzazione possono variare su Shell e sistemi operativi diversi.
Qui si analizzano quelli di tutte le shell disponibili su Solaris. In genere sono validi per tutti i dialetti Unix.
BOURNE SHELL
File di inizializzazione globali:/etc/profile
File eseguiti al login dell'utente: $HOME/.profile
File eseguiti all'apertura della shell dopo il login: --
PATH della shell: /bin/sh
KORN SHELL
File di inizializzazione globali:/etc/profile
File eseguiti al login dell'utente: $HOME/.profile
- $HOME/.kshrc
File eseguiti all'apertura della shell dopo il login: $HOME/.kshrc
PATH della shell: /bin/ksh
C SHELL
File di inizializzazione globali:/etc/.login
File eseguiti al login dell'utente: $HOME/.cshrc
File eseguiti all'apertura della shell dopo il login: --
PATH della shell: /bin/csh
Z SHELL
File di inizializzazione globali:/etc/zshenv
- /etc/zprofile
- /etc/zshrc
- /etc/zlogin
File eseguiti al login dell'utente: $HOME/.zshenv
- $HOME/.zprofile
- $HOME/.zlogin
File eseguiti all'apertura della shell dopo il login: $HOME/.zshrc
PATH della shell: /bin/zsh
BASH
File di inizializzazione globali:/etc/profile
File eseguiti al login dell'utente: $HOME/.bash_profile
- $HOME/.bash_login
- $HOME/.profile
File eseguiti all'apertura della shell dopo il login: $HOME/.bashrc
PATH della shell: /bin/bash
TC
File di inizializzazione globali:/etc/csh.cshrc
- /etc/csh.login
File eseguiti al login dell'utente: $HOME/.tcshrc
o $HOME/.cshrc
File eseguiti all'apertura della shell dopo il login: --
PATH della shell: /bin/tcsh
La gestione degli utenti di un sistema Solaris è simile a quella di ogni Unix e Linux.
Vediamone gli strumenti e la logica.
Ogni utente su Solaris (e su altri Unix) ha le seguenti caratteristiche:
User name o login - Il nome, univoco, con cui l'utente è riconosciuto da sistema.
UserID - Un numero identificativo dell'utente. Univoco.
GroupID - L'ID del gruppo di utenti a cui l'utente appartiene.
Comment - Una stringa che identifica l0utente. Può essere il suo nome e cognome per esteso.
Shell - La shell che viene eseguita quando l'utente esegue il login
Home - Il PATH della directory in cui si ritrova l'utente al login e in cui ha tutti i permessi per salvarci file e documenti personali.
Password - La password, che, associata al login, permette all'utente di accedere al sistema
Password Status - Indica se la password è disattivata, se va cambiata al successivo login dell'utente, se non esiste perchè l'utente viene usato solo dal sistema
Password Min Change - Quanti giorni minimo possono passare prima di un cambio password
Password Max Change - Quanti giorni massimo può durare la password
Password Max Inactive - Quanti giorni l'account può rimanere inattivo prima di essere disattivato
Password Expiration Date - La data (ggmmaa) di scadenza della password
Password Warning - Quanti giorni prima della scadenza l'utente viene avvisato che deve cambiare password.
La gestione degli utenti può essere fatta con admintool se si vuole lavorare in ambiente grafico oppure con i comandi shell useradd, userdel, usermod, groupadd, groupdel, groupmod, passwd.
Il file di sistema in cui sono contenuti i dati relativi agli utenti sono, come in ogni Unix recente: /etc/passwd, /etc/shadow, /etc/group.
Per chi è abituato al comando useradd su Linux va sottolineato che questo di default NON crea l'home directory dell'utente. Per farlo bisogna specificare l'opzione -m: useradd -m al
crea, oltre alle entry in /etc/passwd e /etc/shadow per il nuovo utente, anche la sua home directory: /home/al
e ci copia (come in Linux) tutti i file contenuti nella directory di template /etc/skel
in modo da creare per il nuovo utente un ambiente coerente con quello degli altri utenti.
I comandi shell per gestire gli utenti hanno varie opzioni che permettono di definire tutti i parametri sopra esposti, che sono facilmente configurabili anche con admintool o possono essere modificati a amno (solo per gli esperti) editando direttamente i file di sistema.
Tutti i device possono essere nominati in 3 modi diversi su Solaris, secondo logiche diverse:
- Nomi logici di device;
- Nome fisici di device;
- Nomi abbreviati (alias).
Nomi logici di device
Sono usati da programmi ed utenti e sono tutti contenuti della directory /dev
.
Sono link simbolici ai nomi di device fisici presenti nella directory /devices
.
Il nome dei device come dischi fissi contiene: numero del controller, numero del target, numero del disco, numero della slice (partizione).
Un esempio può essere c0t0d1s4
: Controller 0, Target 0, Disco 1, Slice 4.
Per dischi fissi IDE i nomi di device sono (si considerano con un unica partizione):
Primary Master: c0t0d0s0 - Primary Slave: c0t1d0s0
Secondary Master: c0t2d0s0 - Secondary Slave: c0t3d0s0
Nomi fisici di device
Identificano univocamente i dispositivi attaccati al sistema con una convenzione basata su un albero di directory che inizia da /devices
, che si considera la radice dell'albero sotto la quale esistono varie ramificazioni.
Per esempio su una Netra T1, il device logico /dev/dsk/c0t0d0s0
corrisponde al device fisico /devices/pci@1f,0/pci@1,1/scsi@2/sd@0,0:a
Nomi abbreviati
Sono nomi assegnati dal kernel per ogni dispositivo del sistema. Sono in forma abbreviata e facilmente utilizzabile.
Il device sopra indicato, per esempio, ha nome abbreviato sd
.
Le schede di rete hanno nomi come hme, qfe (sono nomi diversi a seconda del modello e del tipo della scheda, a differenza di Linux, dove ogni scheda di rete ethernet è chiamata eth).
Il file /etc/path_to_inst
contiene un elenco di tutti i device fisice e il relativo alias utilizzato dal kernel per identificare ogni tipo di device. Questo file è diverso a seconda del sistema, su una Netra T1 ha questo aspetto:
"/pci@1f,0" 0 "pcipsy"
"/pci@1f,0/pci@1,1" 0 "simba"
"/pci@1f,0/pci@1,1/ebus@1" 0 "ebus"
"/pci@1f,0/pci@1,1/ebus@1/power@14,724000" 0 "power"
"/pci@1f,0/pci@1,1/ebus@1/i2c@14,600000" 0 "i2c"
"/pci@1f,0/pci@1,1/ebus@1/i2c@14,600000/adc@0,9e" 0 "i2cadc"
"/pci@1f,0/pci@1,1/ebus@1/i2c@14,600000/gpio@0,70" 0 "i2cgpio"
"/pci@1f,0/pci@1,1/ebus@1/i2c@14,600000/gpio@0,72" 1 "i2cgpio"
"/pci@1f,0/pci@1,1/ebus@1/fdthree@14,3203f0" 0 "fd"
"/pci@1f,0/pci@1,1/ebus@1/i2c@14,100000" 1 "i2c"
"/pci@1f,0/pci@1,1/ebus@1/su@14,3602f8" 1 "su"
"/pci@1f,0/pci@1,1/ebus@1/su@14,3803f8" 0 "su"
"/pci@1f,0/pci@1,1/ebus@1/ecpp@14,340278" 0 "ecpp"
"/pci@1f,0/pci@1,1/scsi@2" 0 "glm"
"/pci@1f,0/pci@1,1/scsi@2/ses@f,0" 15 "ses"
"/pci@1f,0/pci@1,1/scsi@2/ses@d,0" 13 "ses"
"/pci@1f,0/pci@1,1/scsi@2/ses@e,0" 14 "ses"
"/pci@1f,0/pci@1,1/scsi@2/ses@b,0" 11 "ses"
"/pci@1f,0/pci@1,1/scsi@2/ses@c,0" 12 "ses"
"/pci@1f,0/pci@1,1/scsi@2/ses@a,0" 10 "ses"
"/pci@1f,0/pci@1,1/scsi@2/ses@6,0" 6 "ses"
"/pci@1f,0/pci@1,1/scsi@2/ses@7,0" 7 "ses"
"/pci@1f,0/pci@1,1/scsi@2/ses@4,0" 4 "ses"
"/pci@1f,0/pci@1,1/scsi@2/ses@5,0" 5 "ses"
"/pci@1f,0/pci@1,1/scsi@2/ses@2,0" 2 "ses"
"/pci@1f,0/pci@1,1/scsi@2/ses@3,0" 3 "ses"
"/pci@1f,0/pci@1,1/scsi@2/ses@0,0" 0 "ses"
"/pci@1f,0/pci@1,1/scsi@2/ses@1,0" 1 "ses"
"/pci@1f,0/pci@1,1/scsi@2/ses@8,0" 8 "ses"
"/pci@1f,0/pci@1,1/scsi@2/ses@9,0" 9 "ses"
"/pci@1f,0/pci@1,1/scsi@2/sd@4,0" 4 "sd"
"/pci@1f,0/pci@1,1/scsi@2/sd@5,0" 5 "sd"
"/pci@1f,0/pci@1,1/scsi@2/sd@6,0" 6 "sd"
"/pci@1f,0/pci@1,1/scsi@2/sd@0,0" 0 "sd"
"/pci@1f,0/pci@1,1/scsi@2/sd@1,0" 1 "sd"
"/pci@1f,0/pci@1,1/scsi@2/sd@2,0" 2 "sd"
"/pci@1f,0/pci@1,1/scsi@2/sd@3,0" 3 "sd"
"/pci@1f,0/pci@1,1/scsi@2/sd@8,0" 7 "sd"
"/pci@1f,0/pci@1,1/scsi@2/sd@9,0" 8 "sd"
"/pci@1f,0/pci@1,1/scsi@2/sd@d,0" 12 "sd"
"/pci@1f,0/pci@1,1/scsi@2/st@4,0" 4 "st"
"/pci@1f,0/pci@1,1/scsi@2/sd@e,0" 13 "sd"
"/pci@1f,0/pci@1,1/scsi@2/st@5,0" 5 "st"
"/pci@1f,0/pci@1,1/scsi@2/sd@f,0" 14 "sd"
"/pci@1f,0/pci@1,1/scsi@2/st@6,0" 6 "st"
"/pci@1f,0/pci@1,1/scsi@2/st@0,0" 0 "st"
"/pci@1f,0/pci@1,1/scsi@2/sd@a,0" 9 "sd"
"/pci@1f,0/pci@1,1/scsi@2/st@1,0" 1 "st"
"/pci@1f,0/pci@1,1/scsi@2/sd@b,0" 10 "sd"
"/pci@1f,0/pci@1,1/scsi@2/st@2,0" 2 "st"
"/pci@1f,0/pci@1,1/scsi@2/sd@c,0" 11 "sd"
"/pci@1f,0/pci@1,1/scsi@2/st@3,0" 3 "st"
"/pci@1f,0/pci@1,1/network@1,1" 0 "hme"
"/pci@1f,0/pci@1" 1 "simba"
"/pci@1f,0/pci@1/pci@1" 0 "pci_pci"
"/pci@1f,0/pci@1/pci@1/ide@e" 0 "uata"
"/options" 0 "options"
"/pseudo" 0 "pseudo"
Un comando uile per visualizzare la configurazione del sistema e ogni istanza di device è prtconf
.
Il suo output elenca anche device non fisicamente attaccati (ma previsti dal sistema), nell'output che segue vengono omessi i device non attaccati:
prtconf | grep -v not
System Configuration: Sun Microsystems sun4u
Memory size: 1024 Megabytes
System Peripherals (Software Nodes):
SUNW,UltraSPARC-IIi-cEngine
options, instance #0
pci, instance #0
pci, instance #0
ebus, instance #0
su, instance #0
su, instance #1
network, instance #0
scsi, instance #0
sd, instance #0
sd, instance #1
pci, instance #1
pci, instance #0
ide, instance #0
pseudo, instance #0
Per visualizzare e gestire (partizionare, formattare, rinominare) i dischi fissi del sistema si può usare anche il comando format
.
Inoltre è possibile visualizzare l'elenco dei device sul sistema (nome fisico e alias) su OpenBoot, con il comando devalias
.
AGGIUNGERE UN DEVICE AD UN SISTEMA SUN
Se si deve aggiungere un nuovo device al proprio sistema Sun si possono seguire 3 metodi di massima:
1- Creare il file /reconfigure (touch /reconfigure
), spegnere il sistema, attaccare il device e riavviarlo.
2- Spegnere il sistema. attaccare il device. Entrare in PROM mode. Digitare boot -r
per un boot in reconfigurazion mode.
3- Usare da shell il comando devfsadm -v
. E' il metodo più comune e pratico. Disponibile da Solaris 8.
4- Su Solaris 7 si può usare il comando shell drvconfig
seguito da un comando diverso a seconda del tipo di device che si sta utilizzando, per esempio: tapes
per device a nastro; disks
per hard disk.
Tutti questi metodi creano in /dev i link relativi ai nuovi device e li installano utilizzando i relativi drivers (se esistono sul sistema).
Su Solaris è comune trovare, oltre al file sistem nativo, UFS, altri file system di diversa natura. Qui viene presentata una breve rassegna.
File system basati du disco
ufs - Unix File System, lo standard su Solaris.
hsfs - High Sierra file system, utilizzato sui CDROM.
pcfs - L'implementazione Sun del FAT 32 dei sistemi Microsoft
udf - Universal Disk Format per dispositivi ottici, usato su DVD e CDROM, anche scrivibili.
vxfs - Veritas File System. File system ad alte performance (generalmente sostituisce i raw device in ambienti oracle) che viene concesso sotto licenza da Veritas.
File System Distribuiti
nfs - Network File System, il file system di rete più usato in ambienti Unix.
Pseudo File System
tmpfs - File system per scrivere in memoria file senza dover scrivere su disco. Viene usato in /tmp i cui contenuti sono distrutti ad ogni reboot.
swapfs - Utilizzato per gestire lo swapping della memoria su disco
fdfs - File Descriptor File System, fornisce nomi per i file descriptor dei file (dev/fd/0, /dev/fd/1, /dev/fd/2).
procfs - Process File System, contiene l'elenco dei processi attivi nella directory /proc.
La struttura dell'albero delle directory su sistemi Sun Solaris è simile a quella di tutti gli Unix ma presenta alcune singolarità che val la pena analizzare.
/
La directory principale al cui interno è presente tutto il file system.
/bin/
E' un symlink a /usr/bin dove risiedono comandi standard ddestinati ad essere usati da tutti gli utenti
/dev/
Contiene i device files del sistema. Sono tutti symlink a file in /devices/. Fra questi si segnalano le seguenti directory:
/dev/dsk
Block disk device, quali hard disk IDE o SWCSI
/dev/pts
Pseudo Terminali (usati , per esempio, in sessioni telnet)
/etc/
File di configurazione dell'host. Si segnalano le seguenti subdirectory:
/etc/acct
Configurazioni sull'accounting
/etc/cron.d
Informazioni sulla configurazione del cron
/etc/default
Informazioni di default per il sistema e alcuni programmi
/etc/inet
File di configurazione per servizi di network
/etc/init.d
Gli script di start e stop dei singoli servizi. Invocati da rc nei vari runlevel.
/etc/opt
File di configurazione per pacchetti opzionali
/etc/skel
Script e file di configurazione di default per i nuovi utenti
/export
Directory di default per file system comunemente condivisi via rete
/home
Directory che di default contiene le home degli utenti
/kernel
Il kernel e i moduli platform independent
/opt
Directory di default dove vengono installati pacchetti opzionali
/sbin
Comandi essenziali usati per system recovery o durante il boot
/tmp
Directory per file temporanei. Viene mountata sul swpa file system e perde il suo contenuto al reboot
/usr
Acronimo di Unix System Resources. Directory molto vasta con varie sottodirectory, fra cui:
/usr/bin
Posizione standard per i comandi di sistema
/usr/include
Header files per programmi in C
/usr/java
Contiene programmi e librerie per l'ambiente Java
/usr/lib
Librerie e binari
/usr/openwin
Contiene i programmi che fanno parte di OpenWindows
/var
Contiene file variabili come log, spool ecc.
Solaris utilizza un sistema di gestione dei programmi in pacchetti analogo agli RPM o DEB comuni in Linux.
Su Solaris si parla di packages, .pkg, che contengono binari già compilati, manuali, file di configurazione e generalmente tutto quello che serve per installare un software sul sistema.
Gli strumenti per gestire i packages sono vari:
- Command line (comandi pkgadd, pkgrm, pkginfo, pkgchk, pkgask);
- Admintool, strumento grafico disponibile sotto Xwindows;
- Solaris Product Registry, altro strumento grafico, disponibile da Solaris 8.
Questi strumenti sono intercambiabili e convivere senza problemi: un pacchetto può, per esempio, essere installato con Admintool e rimosso com pkgrm.
Occupiamoci degli strumenti in command line, una volta capita la loro logica, diventa triviale utilizzare le alternative grafiche.
/bin/pkgadd
Installa uno o più pacchetti. Utilizza di default i comportamenti definiti nel file di configurazione /var/sadm/install/admin/default
in cui sono presenti varie coppie di parametri=valore che definiscono come gestire l'installazione di pacchetti a seconda delle situazioni (se chiedere all'utente, procedere automaticamente, annullare l'operazione ecc in presenza di determiante situazioni: pacchetto già installato, completamente o parzialmente, spazio su disco insufficente, conflitti con altri pacchetti, necessità di dependencies, run level, controllo sull'impatto sulla sicurezza, directory di installazione ecc).
Il file di default, in genere, chiede all'utente come procedere quando incontra una delle suddette impostazioni ed ha come directory predefinita /opt
.
La sintassi di pkgadd:
-d nome_device
Opzione facoltativa. Specifica il device (es: /cdrom/cdrom0 ) in cui si trova(no) i(l) pacchetto(i).
-a file_di amministrazione
Opzione facoltativa, permette di specificare un file di configurazione/amministrazone diverso da /var/sadm/install/admin/default. Se si specifica solo il nome, senza path, viene cercato in /var/sadm/install/admin/.
nome_pacchetto
Il nome (pkgid) di uno o più pacchetti che si voglinno installare. Se non specifica nessun pacchetto e nessun device, pkgadd cerca se ce ne sono nella directory di spool /var/spool/pkg
e li installa automaticamente.
/usr/sbin/pkgchk
Verifica l'integrità di un pacchetto. Va fatto seguire dal nome del pacchetto (pkgid) e se non da nessun output se il pacchetto è installato correttamente.
Se non si specifica alcun nome di pacchetto, esegue il check di tutti i pacchetti installati sul sistema.
-d directory_di_spool
Controlla i pacchetti nella directory di spool (o device)
specificati. Le informazioni non sono complete, comunque, fino a quando il pacchetto non viene effettivamente installato.
-v
Elenca tutti i file contenuti nel pacchetto. Questi dati vengono registrati nel file /var/sadm/install/contents
.
Per verificare in quale pacchetto è contenuto un determinato file digitare:
pkgchk -l -p nomefile
/bin/pkgparam
Visualizza i parametri del pacchetto specificato.
-v
Opzione per visualizzare sia il nome del parametro che il suo valore (di default visualizza solo il valore).
/bin/pkginfo
Visualizza tutti i pacchetti installati sul sistema con una breve descrizione.
-d directory
Visualizza l'elenco dei pacchetti contenuti sulla directory o device specificati.
/usr/sbin/pkgrm
Rimuove il pacchetto specificato.
-n
Rimuove il pacchetto in modalità non interattiva
-s directory_di_spool
Rimuove il pacchetto (se non viene speicificato li rimuove tutti) dalla directory di spool indicata.
Le fasi che caratterizzano il caricamento in memoria di un sistema operativo hanno una logica simile su piattaforme diverse.
Nei sistemi Unix, in particolare, sono identificabili 4 fasi comuni e ben identificabili:
- L'esecuzione del Bios residente su ROM all'accensione del sistema;
- Il caricamento e l'esecuzione di un boot loader, che permette di accedere ai dispositivi disponibili e caricare il kernel;
- Il caricamento e l'esecuzione del kernel e dei suoi moduli;
- L'avvio di INIT e il conseguente startup dei suoi processi figli, che portano il sistema allo stato di normale funzionalità.
Su sistemi Sun Solaris le quattro fasi sono così descritte:
Boot PROM phase
Alimentazione al sistema. Mentre LED si accendono e ventole si attivano, il firmware (OpenBoot sulle SUN meno vecchie) della PROM onboad esegue un Power On Self Test di basso livello (POST) e legge da un modulo rimuovibile di RAM non volatile (NVRAM) dati mutabili quali: date e ora, ethernet address e hostid della macchina, device di boot e altri parametri configurabili dall'utente.
Qui si può SKIPpare il POST premendo il tasto Stop
della tastiera mentre si accende il sistema o attivare il diagnostic mode premendo contemporaneamente i tasti Stop + d
.
Un riavvio di una macchina complessa con livello di debug settato al massimo può durare anche svariati minuti.
Dopo il POST, OpenBoot mette a disposizione una command line che permette di scegliere come procedere nel boot, se eseguire ulteriori test diagnostici e se caricare driver di basso livello di dispositivi di terze parti.
Al prompt di OpenBoot ok è possibile digitare vari comandi tra cui:
banner
- Visualizza informazioni sul sistema tra cui HostID, mac address, modello.
boot [device] - opzioni
- Permette di decidere da dove e come caricare il sistema:
boot
Carica il sistema e lo porta in multiuser mode
boot -s
Carica il sistema in single user mode (maintenance mode) e chiede la password di root
boot cdrom -s
Carica il sistema in maintenance mode direttamente dal cdrom di installazione (senza richiesta di password). A volte è l'unico metodo per recuperare un sistema inaccessibile (password persa, shell di root mancante ecc., disco di boot danneggiato...)
boot -a
Carica in modo interattivo, chiedendo informazioni su quali device e in quali directory cercare kernel, moduli e file di configurazione del kernel
boot -r
Esegue un boot di riconfigurazione, utile per identificare nuovi device attaccati al sistema
boot -V
(o anche boot -rV, boot -sV) Visualizza informazioni di debugging
boot net - install
Procede all'installazione del sistema operativo tramite un Jumpstart server in rete
printenv
Visualizza i parametri salvati nella NVRAM con i valori correnti e quelli di default.
setenv
Modifica i alcuni parametri contenuti in NVRAM, tra cui alcuni fondamentali per gestire da dove e come fare il boot
setenv boot-device disk|net|cdrom ...
Imposta il device da cui eseguire il boot.
setenv auto-boot? true|false
Definisce se caricare automaticamente il sistema operativo ad un reset e arrestare il boot al prompt ok
setenv diag-level max|low
Imposta il livello di debug nel POST
setenv diag-switch? true|false
Definisce se eseguire il debug al POST
reset
Registra e resetta il sistema e ripetendo le sequenze di boot con i nuovi parametri settati
set-default parametro
Reimposta il parametro specificato, presente in NVRAM, al suo valore di default
set-defaults
Reimposta tutti i parametri in NVRAM ai loro valori di default
devalias
Visualizza gli alias dati ai device (es: disk, net, cdrom) e i relativi dispositivi hardware (nel formato Sun dei device tree (es: /pci@1f,0/pci@1,1/ide@3/[email protected]:f ).
Notare che i parametri settati in NVRAM possono essere modificati con il comando shell /usr/sbin/eeprom
.
Una caratteristica distintiva e particolarmente utile si sitemi Sun rispetto ad architetture Intel è la possibilità di accedere in qualsiasi momento al prompt OpenBoot, anche quando la macchina è in standby (halt) o durante il suo normale funzionamento (si può congelare ogni operazione in esecuzione e accedere da console al prompt con i tasti Stop + a
o, su terminali ASCII, mandando una seguenza BREAK
).
Sia che il boot proceda automaticamente, sia che venga arrestato al prompt di OpenBoot e poi lanciato col comando boot, viene successivamente eseguito il Primary Boot Program: bootblk
che si trova in una posizione fissa dei primi 15 blocchi del device di boot.
Boot Program Phase
bootblk entra nella sua seconda fase, in cui, viene caricato ufsboot
direttamente da una partizione UFS del sistema. Tramite l'utility Solaris installboot è possibile settare il path in cui si trova ufsboot
, il cui compito è quello di caricare ed eseguire i due file di cui è composto il kernel Solaris è composto che si trovano nella directory /platform/'uname -m'/kernel
(per sistemi a 32 bit) o /platform/'uname -m'/kernel/sparcv9
(per sistemi a 64 bit).
Il nome della piattaforma è l'output del comando uname -m. Per esempio, su una Ultra 10 è sun4u.
Kernel inizialization phase
Il kernel di Solaris è diviso in più parti:
- Un core generico, indipendente dalla piattaforma utilizzata, chiamato genunix;
- Un core platform specific, chiamato semplicemente unix, diverso a seconda dell'hardware Sun a disposizione.
- Moduli caricabili dinamicamente con driver per il supporto di hardware vario, file system diversi, classi e componenti aggiuntive del kernel.
I moduli si possono trovare nelle directory /kernel, /usr/kernel, /platform/'uname -m'/kernel, /platform/'uname -i'/kernel
in sottodirectory diverse a seconda del tipo di modulo (es: sys, misc, fs, sched, exec...).
Il kernel legge il suo file di configurazione /etc/system
in cui si possono definire:
- il PATH dove cercare i moduli (sezione moddir)
- settaggi relativi al root file system e al root device (rootfs e rootdev)
- se ci sono moduli da non caricare automaticamente (exclude)
- se ci sono moduli per cui forzare il caricamento (forceload)
- parametri da passare al kernel per modificarne il comportamento (set seguito da coppie parametro=valore)
Prima di modificare /etc/system
è raccomandabile crearne copie di backup (es: /etc/system.orig
) che possono, in caso di maldestre modifiche dell'/etc/system originale, essere richiamate dal PROM digitando boot -a
).
Init phase
Caricato il kernel, le operazioni passano a init
che basandosi sul file di configurazione /etc/inittab
esegue diversi script e lancia tutti gli altri processi necessari per il completamento del caricamento.
A seconda del run-level impostato come default in inittab vengono eseguiti i relativi run control (rc) scripts.
La sintassi del file di configurazione di Init su Solaris è uguale a quella di Init su Linux e altri Unix, quello che cambia sono i singoli script di inizializzazione eseguiti e le loro operazioni.
Notare le righe in /etc/inittab impostate con action sysinit: definiscono quali script vengono sempre lanciati, nella sequenza indicata, a prescindere dal run level.
Agli script rc (/sbin/rc0, /sbin/rc1, /sbin/rc2 ...
) corrispondono le directory in cui sono contenuti i symlink che gestiscono l'avvio o lo stop dei singoli servizi (/etc/rc0.d, /etc/rc1.d, /etc/rc2.d ...
puntando agli script di gestione che si trovano in /etc/init.d/
.
la configurazione e il comportamento di syslog su Solaris è comune a quello di Linux e di altri Unix.
Il processo /usr/sbin/syslogd
viene fatto partire allo startup tramite un normale script di init, gestito da rc: /etc/init.d/syslog
.
Il suo file di configurazione è /etc/syslog.conf
e viene preprocessato da M4:
*.err;kern.notice;auth.notice /dev/sysmsg
*.err;kern.debug;daemon.notice;mail.crit /var/adm/messages
daemon.info /var/adm/messages
*.alert;kern.err;daemon.err operator
*.alert root
*.emerg *
#auth.notice ifdef(`LOGHOST', /var/log/authlog, @loghost)
mail.debug ifdef(`LOGHOST', /var/log/syslog, @loghost)
ifdef(`LOGHOST', ,
user.err /dev/sysmsg
user.err /var/adm/messages
user.alert `root, operator'
user.emerg *
)
Notare le righe con la stringa ifdef, queste, tramite m4, vengono considerate se il LOGHOST è associato ad un ip locale.
In /etc/hosts
si può definire quale IP corrisponde a LOGHOST. Per esempio:
127.0.0.1 localhost loghost
172.17.0.10 server.dominio.it server
Un comando utile, sopratutto in script custom, per scrivere una entry direttamente nel syslog è:
/usr/bin/logger [ -i ] [ -f file ] [ -p priority ] [ -t tag ] [ message ]
.
Comando per la diagnostica del sistema, oltre che la visualizzazione di alcune informazioni sull'hardware di una macchina Sun Solaris.
mail01:/root#/usr/platform/`uname -i`/sbin/prtdiag
System Configuration: Sun Microsystems sun4u Sun Enterprise 450 (2 X UltraSPARC-II 400MHz)
System clock frequency: 100 MHz
Memory size: 4096 Megabytes
========================= CPUs =========================
Run Ecache CPU CPU
Brd CPU Module MHz MB Impl. Mask
--- --- ------- ----- ------ ------ ----
SYS 1 1 400 4.0 US-II 10.0
SYS 3 3 400 4.0 US-II 10.0
========================= Memory =========================
Memory Interleave Factor = 4-way
Interlv. Socket Size
Bank Group Name (MB) Status
---- ----- ------ ---- ------
0 0 1901 256 OK
0 0 1902 256 OK
0 0 1903 256 OK
0 0 1904 256 OK
1 0 1801 256 OK
1 0 1802 256 OK
1 0 1803 256 OK
1 0 1804 256 OK
2 0 1701 256 OK
2 0 1702 256 OK
2 0 1703 256 OK
2 0 1704 256 OK
3 0 1601 256 OK
3 0 1602 256 OK
3 0 1603 256 OK
3 0 1604 256 OK
========================= IO Cards =========================
Bus Freq
Brd Type MHz Slot Name Model
--- ---- ---- ---- -------------------------------- ----------------------
SYS PCI 33 1 pciclass,068000
SYS PCI 33 2 pciclass,068000
SYS PCI 33 4 pciclass,001000 Symbios,53C875
SYS PCI 33 5 pciclass,001000 Symbios,53C875
No failures found in System
===========================