[indice generale] [precedente] [successivo] [indice analitico] [note introduttive]

186. Configurazione di una distribuzione RedHat

La distribuzione RedHat utilizza un sistema di configurazione composto da script, che non dovrebbero essere modificati, e da file di configurazione, utilizzati dagli script e modificabili attraverso programmi che guidano l'amministratore.

Il difetto di questo approccio sta nel fatto che non sempre tutto funziona come previsto e allora occorre mettere le mani sui file e lasciare stare i programmi di configurazione.

186.1 Procedura di inizializzazione del sistema

La procedura di inizializzazione del sistema è attivata da init attraverso le indicazioni di /etc/inittab. I livelli di esecuzione sono:

0 arresto del sistema;

1 singolo utente;

2 multiutente senza l'utilizzo di eventuali NFS;

3 multiutente;

4 non definito (disponibile);

5 multiutente con login grafico;

6 riavvio.

Il file /etc/inittab è quello che dirige il funzionamento di init, e analizzandone il contenuto si può intendere il ruolo degli script della procedura di inizializzazione del sistema.

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:3:initdefault:

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# Things to run in every runlevel.
ud::once:/sbin/update

# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

# When our UPS tells us power has failed, assume we have a few minutes
# of power left.  Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.  
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"


# Run gettys in standard runlevels
1:12345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

# Run xdm in runlevel 5
x:5:respawn:/usr/bin/X11/xdm -nodaemon

186.1.1 Collegamento tra i vari componenti della procedura di inizializzazione del sistema

Attraverso il file /etc/inittab vengono indicati due script fondamentali, attraverso cui si articola la procedura di inizializzazione del sistema. Si tratta di /etc/rc.d/rc.sysinit e /etc/rc.d/rc. Il primo viene utilizzato a ogni avvio del sistema, e da questo dipendono le operazioni che vanno svolte una volta sola in quella occasione; il secondo serve ogni volta che si cambia il livello di esecuzione.

/etc/rc.d/

È la directory che raccoglie gli script utilizzati nella fase di avvio del sistema e in quella di arresto.

/etc/rc.d/rc.sysinit

È lo script di inizializzazione del sistema. In particolare:

attiva la gestione della memoria virtuale per l'uso delle aree di scambio previste nelle partizioni, in base al contenuto del file /etc/fstab;

verifica il filesystem principale e al termine ne esegue il montaggio;

verifica la dipendenza dei moduli;

avvia kerneld per automatizzare il caricamento dei moduli del kernel;

verifica gli altri filesystem indicati per questo nel file /etc/fstab e al termine ne esegue il montaggio;

elimina o ripulisce i file utilizzati nella sessione di lavoro precedente, che servivano per segnalare lo stato di funzionamento;

configura l'orologio del sistema;

attiva la gestione della memoria virtuale per l'uso delle aree di scambio previste sui file;

eventualmente esegue /etc/rc.d/rc.serial per l'attivazione della porta seriale;

eventualmente esegue /etc/rc.d/rc.modules per l'attivazione di moduli del kernel.

/etc/rc.d/rc

È lo script principale per il controllo dei livelli di esecuzione. Viene utilizzato da init, attraverso le indicazioni di /etc/inittab, con un argomento corrispondente al numero di livello di esecuzione da attivare.

/etc/rc.d/rc <livello-di-esecuzione>

Semplificando un po' le cose, /etc/rc.d/rc si limita a determinare se è stato richiesto un cambiamento nel livello di esecuzione, quindi avvia tutti gli script che trova nella directory /etc/rc.d/rcn.d/ (dove n rappresenta il livello di esecuzione richiesto), cominciando da quelli che iniziano con la lettera K e terminando con quelli che iniziano con la lettera S.

In realtà, questi script sono contenuti nella directory /etc/rc.d/init.d/, con nomi più espressivi, e nelle directory /etc/rc.d/rcn.d/ sono contenuti solo dei collegamenti simbolici con nomi scelti appositamente per definire l'ordine in cui le operazioni devono essere svolte.

In questo modo, è possibile definire il livello di esecuzione 4, lasciato a disposizione, semplicemente copiandovi all'interno i collegamenti simbolici necessari e senza toccare alcuno script.

/etc/rc.d/rcn.d/

Come accennato, si tratta delle directory riferite a ogni livello di esecuzione (n rappresenta il numero del livello stesso). Al loro interno si trovano solo collegamenti simbolici riferiti agli script che si vuole siano eseguiti.

Quando viene selezionato il livello di esecuzione relativo, vengono eseguiti in ordine alfabetico, prima gli script (o meglio i collegamenti) che iniziano con la lettera K (kill) nella forma

/etc/rc.d/rcn.d/<script> stop

allo scopo di disattivare il servizio particolare cui si riferiscono, quindi quelli che iniziano con la lettera S (start), nella forma seguente:

/etc/rc.d/rcn.d/<script> start

/etc/rc.d/init.d/

È il vero contenitore degli script utilizzati dalla procedura di inizializzazione del sistema. Questi vengono utilizzati indirettamente attraverso collegamenti simbolici contenuti nelle directory /etc/rc.d/rcn.d/. Molti di questi script caricano le informazioni contenute in file di configurazione collocati altrove, e ciò rappresenta la base del sistema di configurazione della distribuzione RedHat, perché permette di limitarsi alla modifica di questi file, invece che intervenire direttamente sugli script stessi.

Molti di questi script possono essere utilizzati dall'amministratore per disattivare o attivare un servizio particolare, senza dover utilizzare un livello di esecuzione diverso e senza dover ricordare tutte le implicazioni di un particolare servizio. Il formato generale è il seguente:

/etc/rc.d/init.d/<servizio> {start|stop|status}

/etc/rc.d/init.d/functions

Si tratta di uno script utilizzato da quasi tutti gli altri, per definire alcune funzioni standard. In particolare, queste funzioni, servono per evitare l'avvio di demoni già in funzione e comunque per uniformare il sistema di avvio e conclusione del loro funzionamento.

pidofproc

Restituisce attraverso lo standard output i numeri PID abbinati a processi con il nome fornito. Per questo, tenta inizialmente di utilizzare il programma pidof; se fallisce, analizza quanto contenuto nella directory /var/run/; come ultima risorsa tenta di analizzare il risultato dell'esecuzione di ps.

daemon

Avvia un programma dopo aver verificato che non sia già in funzione, restituendo attraverso lo standard output il nome di questo, senza l'eventuale percorso di avvio.

killproc

Elimina un processo utilizzando la funzione pidofproc per determinare il suo numero PID. Restituisce attraverso lo standard output il nome del processo eliminato.

status

Restituisce, attraverso lo standard output, lo stato del servizio corrispondente.

/var/lock/subsys/

Questa directory viene utilizzata dagli script contenuti in /etc/rc.d/init.d/ per annotare la presenza in funzione di un determinato servizio: se esiste un file (vuoto) con quel nome, il servizio è considerato attivo.

186.1.2 /etc/rc.d/init.d/*

I file contenuti nella directory /etc/rc.d/init.d/, quando si riferiscono a dei servizi, hanno una struttura abbastanza comune, simile a quella seguente. Si fa riferimento all'ipotetico servizio «pippo», a cui corrisponde un demone con lo stesso nome.

#!/bin/sh
#
# chkconfig: 345 85 15
# description: Servizio Pippo. Si tratta di un servizio che non serve \
#	       a nulla e non interessa a nessuno.
#

# Caricamento delle funzioni standard.
. /etc/rc.d/init.d/functions

# Analisi dell'argomento usato nella chiamata.
case "$1" in
  start)
	echo -n "Avvio del servizio Pippo: "
	daemon pippo
	echo
	touch /var/lock/subsys/pippo
	;;
  stop)
	echo -n "Spegnimento del servizio Pippo: "
	killproc pippo
	rm -f /var/lock/subsys/pippo
	echo
	;;
  status)
	status pippo
	;;
  restart)
	killall -HUP pippo
	;;
  *)
	echo "Usage: pippo {start|stop|restart|status}"
	exit 1
esac

exit 0

Nella prima parte viene letto il contenuto del file contenente la definizione delle funzioni standard, quindi si analizza il primo argomento fornito allo script. Se era start si provvede ad avviare uno o più programmi attraverso la funzione daemon, e quindi si segnala il fatto creando un file vuoto (con touch) nella directory /var/lock/subsys/. Se l'argomento era stop si provvede a eliminare i processi relativi, normalmente attraverso la funzione killproc, e quindi si elimina il file corrispondente nella directory /var/lock/subsys. Se l'argomento era status si visualizza lo stato del servizio attraverso la funzione status. Infine, se l'argomento era restart, di solito si invia un segnale SIGHUP al processo corrispondente al servizio.

In questi script, alcuni commenti introduttivi hanno un ruolo preciso: servono a definire i livelli di esecuzione con cui questi vengono presi in considerazione, il momento in cui devono essere avviati i servizi relativi, e il momento in cui devono essere chiusi gli stessi servizi. Nell'esempio mostrato si tratta del pezzo seguente:

# chkconfig: 345 85 15
# description: Servizio Pippo. Si tratta di un servizio che non serve \
#	       a nulla e non interessa a nessuno.

La riga # chkconfig 2345 85 15, serve a stabilire che il servizio corrispondente può essere avviato solo quando il livello di esecuzione va da 3 a 5. Il numero 85 successivo, indica l'ordine nell'avvio del servizio, e dato il numero, si intuisce che si vuole fare in modo che questo avvenga dopo molti altri. Il numero 15 finale, indica l'ordine di disattivazione del servizio in fase di arresto del sistema, e si intende dal numero che si vuole fare in modo di chiuderlo abbastanza presto rispetto agli altri. Verrà chiarito meglio nella prossima sezione il senso di questi numeri.

La riga # description: serve ad annotare una descrizione del servizio, come promemoria per facilitare l'utilizzo del programma ntsysv, che sarà mostrato successivamente. Per il momento, si osservi che la descrizione può continuare su più righe di commento, purché si utilizzi il simbolo \ subito prima della conclusione della riga.

186.1.3 /etc/rc.d/rc?.d/

Le directory /etc/rc.d/rcn.d/ servono a contenere una serie di collegamenti simbolici che puntano a script della directory /etc/rc.d/init.d. Il listato seguente dovrebbe chiarire il meccanismo.

lrwxrwxrwx 1 root root 13 13:39 K15gpm -> ../init.d/gpm
lrwxrwxrwx 1 root root 13 13:39 K60atd -> ../init.d/atd
lrwxrwxrwx 1 root root 15 13:39 K60crond -> ../init.d/crond
lrwxrwxrwx 1 root root 16 13:39 K96pcmcia -> ../init.d/pcmcia
lrwxrwxrwx 1 root root 17 13:39 S01kerneld -> ../init.d/kerneld
lrwxrwxrwx 1 root root 17 13:39 S10network -> ../init.d/network
lrwxrwxrwx 1 root root 15 13:39 S15nfsfs -> ../init.d/nfsfs
lrwxrwxrwx 1 root root 16 13:39 S20random -> ../init.d/random
lrwxrwxrwx 1 root root 16 13:39 S30syslog -> ../init.d/syslog
lrwxrwxrwx 1 root root 14 13:39 S50inet -> ../init.d/inet
lrwxrwxrwx 1 root root 18 13:39 S75keytable -> ../init.d/keytable
lrwxrwxrwx 1 root root 11 12:44 S99local -> ../rc.local

I collegamenti che iniziano con la lettera «S» vengono avviati ordinatamente all'attivazione del livello di esecuzione corrispondente, con l'argomento start, mentre quelli che iniziano con la lettera «K» vengono avviati prima di passare a un nuovo livello di esecuzione, con l'argomento stop.

Il numero che segue la lettera «S» e «K», serve a definire un ordine alfabetico, corrispondente a quello in cui i servizi vanno avviati o interrotti. Se si volesse predisporre uno script, nella directory /etc/rc.d/init.d/ per la gestione di un servizio addizionale, si dovrebbero predisporre due collegamenti nella directory del livello di esecuzione prescelto, simili a quelli già visti, con un numero adatto a collocarli nella posizione giusta nell'ordine delle azioni da compiere.

Si osservi la presenza del collegamento S99local che punta allo script /etc/rc.d/rc.local. Si tratta di un'anomalia nella logica generale, dal momento che si fa riferimento a qualcosa di esterno alla directory /etc/rc.d/init.d/. Il numero, 99, è obbligatorio, dal momento che l'esecuzione di questo deve avvenire alla fine dell'avvio di tutti gli altri servizi.

186.1.4 # ntsysv e chkconfig

Attraverso il programma ntsysv, è possibile aggiungere o togliere servizi da attivare nel livello di esecuzione standard. ntsysv provvede da solo a creare i collegamenti simbolici mostrati nella sezione precedente, utilizzando la convenzione mostrata. Per stabilire il numero da usare per i collegamenti di avvio (quelli che iniziano con la lettera S) e per quelli di conclusione (K), si avvale del commento iniziale contenuto negli script originali.

Per riprendere l'esempio già mostrato in precedenza, se nella directory /etc/rc.d/init.d/ si trova lo script pippo, che contiene il commento iniziale seguente,

#! /bin/sh
#
# chkconfig: 345 85 15
# description: Servizio Pippo. Si tratta di un servizio che non serve \
#	       a nulla e non interessa a nessuno.

ntsysv sarà in grado di creare i collegamenti S85pippo e K15pippo. La descrizione, inoltre, è utile per ricordare a cosa serve questo servizio (o comunque a cosa serve questo script), quando è il momento di scegliere se attivarlo o meno.

Il programma chkconfig serve fondamentalmente alle stesse funzioni di ntsysv, con la differenza che si tratta di un programma a riga di comando, mentre il secondo è interattivo e utilizza una maschera visiva piuttosto amichevole.

186.2 Configurazione del sistema

La maggior parte dei file di configurazione della distribuzione RedHat si trova nella directory /etc/sysconfig. I nomi dei file permettono di capire, intuitivamente, il genere di cose che con essi si intendono configurare. In particolare, la directory /etc/sysconfig/network-scripts/ contiene una serie di script, e altri file, necessari a facilitare la gestione delle interfacce di rete e degli instradamenti.

186.2.1 Configurazione della rete

L'organizzazione dei file di configurazione e degli script per la connessione in rete è un po' complicata, e tutto questo per permetterne il controllo attraverso il pannello di controllo, o più precisamente, attraverso netcfg.

186.2.1.1 /etc/sysconfig/network

Si tratta del file contenente le informazioni fondamentali sulla connessione alla rete:

attivazione o meno della rete;

nome completo dell'elaboratore;

nome del dominio;

router (gateway) predefinito;

interfaccia di rete che porta verso il router predefinito.

Come al solito si utilizza la semplificazione per cui l'elaboratore ha un solo nome e un solo dominio di appartenenza, anche se ha più interfacce di rete (e quindi più nomi e più domini). Evidentemente, se ci sono più interfacce, si deve scegliere un nome e un dominio.

Alcune direttive

NETWORKING={yes|no}

Permette di attivare (yes), o di disattivare (no), la configurazione delle rete.

HOSTNAME=<nome-FQDN>

Il nome completo (FQDN) dell'elaboratore, possibilmente quello corrispondente a un'interfaccia di rete realmente esistente. Il file /etc/HOSTNAME, generato normalmente in modo automatico, dovrebbe contenere questo nome.

DOMAINNAME=<dominio>

Permette di definire il nome del dominio dell'elaboratore. In pratica, si può riferire solo a un dominio di un'interfaccia di rete particolare.

FORWARD_IPV4={yes|no}

Permette di attivare (yes), o di disattivare (no), l'inoltro IP. Perché l'elaboratore possa funzionare come router, è indispensabile che questa funzione sia attivata, mentre, per motivi di sicurezza, il valore predefinito è no.

GATEWAY=<indirizzo-IP-del-router-predefinito>

Permette di definire l'indirizzo IP di un router per l'instradamento predefinito, cioè quel router da utilizzare quando si vuole inoltrare un pacchetto verso un indirizzo per il quale non esista già un instradamento specifico.

GATEWAYDEV=<interfaccia-di-rete>

Permette di indicare esplicitamente il nome dell'interfaccia di rete da utilizzare per l'instradamento predefinito.

NISDOMAIN=<dominio-NIS>

Permette di definire il dominio NIS a cui appartiene l'elaboratore.

Esempi

L'esempio seguente si riferisce alla configurazione dell'elaboratore portatile.plip.dg. In particolare, si utilizza un router che ha indirizzo IP 192.168.254.254, raggiungibile attraverso l'interfaccia plip1.

NETWORKING=yes
FORWARD_IPV4=false
HOSTNAME=portatile.plip.dg
DOMAINNAME=plip.dg
GATEWAY=192.168.254.254
GATEWAYDEV=plip1

186.2.1.2 /etc/sysconfig/static-routes

Si tratta della definizione degli instradamenti statici, cioè quelli che non cambiano. Riguarda sia gli instradamenti alle reti accessibili direttamente che a quelle raggiungibili solo attraverso un router. L'esempio seguente dovrebbe essere abbastanza chiaro: la prima riga definisce un instradamento alla rete locale, le altre due definiscono gli instradamenti verso altre reti accessibili attraverso il router 192.168.1.254.

eth0 net 192.168.1.0 netmask 255.255.255.0
eth0 net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.254
eth0 net 192.168.3.0 netmask 255.255.255.0 gw 192.168.1.254

186.2.1.3 /etc/sysconfig/network-scripts/ifcfg-*

Per ogni interfaccia di rete gestita, appare un file di configurazione con il nome ifcfg-<interfaccia> nella directory /etc/sysconfig/network-scripts/. Questi file contengono informazioni differenti in funzione del tipo di interfaccia.

Alcune direttive

DEVICE=<interfaccia>

Definisce il nome dell'interfaccia di rete corrispondente.

IPADDR=<indirizzo-IP>

L'indirizzo IP dell'interfaccia.

NETMASK=<maschera-di-rete>

La maschera di rete.

NETWORK=<indirizzo-di-rete>

Indirizzo della rete.

BROADCAST=<indirizzo-broadcast>

Indirizzo broadcast.

ONBOOT={yes|no}

Permette di attivare (yes), o di disattivare (no), l'interfaccia all'avvio del sistema.

Esempi

L'esempio seguente si riferisce alla configurazione dell'interfaccia lo, praticamente obbligatoria, corrispondente al file /etc/sysconfig/network-scripts/ifcfg-lo.

DEVICE=lo
IPADDR=127.0.0.1
NETMASK=255.0.0.0
NETWORK=127.0.0.0
BROADCAST=127.255.255.255
ONBOOT=yes

L'esempio seguente si riferisce alla configurazione dell'interfaccia eth0 con un indirizzo IP 192.168.1.1 e la maschera di rete 255.255.255.0.

DEVICE=eth0
IPADDR=192.168.1.1
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
ONBOOT=yes
BOOTPROTO=none

186.2.2 Configurazione di altri elementi

Il resto della configurazione, è gestito attraverso file contenuti esclusivamente nella directory /etc/sysconfig/.

186.2.2.1 /etc/sysconfig/clock

Il file /etc/sysconfig/clock permette di configurare l'orologio del sistema. Per farlo, si deve conoscere come è impostato l'orologio hardware. In pratica, è importante sapere se questo è allineato al tempo universale oppure a quella locale. Eventualmente può essere usato il programma timeconfig per definire correttamente questo file.

Alcune direttive

UTC={true|false}

Se viene utilizzato il valore true, si intende che l'orologio hardware sia allineato al tempo universale; diversamente, si intende che sia allineato all'ora locale.

186.2.2.2 /etc/sysconfig/keyboard

Il file /etc/sysconfig/keyboard permette di configurare la tastiera. Eventualmente può essere usato il programma kbdconfig per definire correttamente questo file.

Alcune direttive

KEYTABLE=<mappa-tastiera>

Definisce la mappa della tastiera, indicando il file corrispondente.

Esempi

KEYTABLE="/usr/lib/kbd/keymaps/i386/qwerty/it.map"

Definisce la configurazione della tastiera italiana.

KEYTABLE=it.map

Esattamente come nell'esempio precedente, senza il problema di dover indicare tutto il percorso per raggiungere il file, dal momento che si tratta di quello predefinito.

186.2.2.3 /etc/sysconfig/mouse

Il file /etc/sysconfig/mouse permette di configurare il mouse per l'utilizzo attraverso il programma gpm. Eventualmente può essere usato il programma mouseconfig per definire correttamente questo file.

Alcune direttive

MOUSETYPE=<tipo>

Permette di definire il tipo di mouse utilizzato. Sono validi i nomi seguenti.

microsoft

mouseman

mousesystems

ps/2

msbm

logibm

atibm

logitech

mmseries

mmhittab

XEMU3={yes|no}

Abilita o disabilita l'emulazione del tasto centrale.

Esempi

L'esempio seguente rappresenta la configurazione per un mouse compatibile con il tipo Microsoft a due tasti, per cui il terzo deve essere emulato.

MOUSETYPE="Microsoft"
XEMU3=yes

186.3 Configurazione di shell

Anche la configurazione della shell è molto importante per il sistema, e questa risulta relativamente complessa.

186.3.1 Bash

/etc/profile

Si tratta del file di configurazione generale, secondo lo standard, ma è organizzato in modo da permettere l'inserimento di altri segmenti, senza toccarlo. Infatti, alla fine vengono caricati tutti i file che si trovano nella directory /etc/profile.d/ e terminano con l'estensione .sh.

# /etc/profile

# System wide environment and startup programs
# Functions and aliases go in /etc/bashrc

PATH="$PATH:/usr/X11R6/bin"
PS1="[\u@\h \W]\\$ "

ulimit -c 1000000
if [ `id -gn` = `id -un` -a `id -u` -gt 14 ]; then
	umask 002
else
	umask 022
fi

USER=`id -un`
LOGNAME=$USER
MAIL="/var/mail/$USER"

HOSTNAME=`/bin/hostname`
HISTSIZE=1000
HISTFILESIZE=1000
export PATH PS1 HOSTNAME HISTSIZE HISTFILESIZE USER LOGNAME MAIL

for i in /etc/profile.d/*.sh ; do
	if [ -x $i ]; then
		. $i
	fi
done

/etc/bashrc

Secondo le intenzioni di chi ha organizzato la distribuzione, questo file dovrebbe contenere solo la definizione di funzioni e di alias di interesse generale, ma il suo utilizzo dipende dalla configurazione personalizzata di ogni utente, che potrebbe anche escludere l'inclusione di questo file.

# /etc/bashrc

# System wide functions and aliases
# Environment stuff goes in /etc/profile

# For some unknown reason bash refuses to inherit
# PS1 in some circumstances that I can't figure out.
# Putting PS1 here ensures that it gets loaded every time.
PS1="[\u@\h \W]\\$ "

alias which="type -path"

Per qualche motivo, il file /etc/bashrc fornito con la distribuzione contiene la definizione della variabile PS1, che va a sovrapporsi a quanto già indicato nel file di configurazione generale, /etc/profile. Se si intende modificare l'aspetto predefinito del prompt, conviene agire in questo file.

Potrebbe essere conveniente definire, per tutti gli utenti, una serie di alias ai comandi più «pericolosi», trasformando quindi il file nel modo seguente (il prompt viene commentato).

# /etc/bashrc

# System wide functions and aliases
# Environment stuff goes in /etc/profile

## For some unknown reason bash refuses to inherit
## PS1 in some circumstances that I can't figure out.
## Putting PS1 here ensures that it gets loaded every time.
#PS1="[\u@\h \W]\\$ "

alias which="type -path"

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

~/.bashrc

È il file di configurazione di una shell Bash interattiva. Secondo le intenzioni di chi ha organizzato la distribuzione, questo file dovrebbe contenere solo la definizione di funzioni e di alias personalizzati, e alla fine dovrebbe richiamare il file /etc/bashrc che contiene le stesse cose, ma a livello generale.

# .bashrc

# User specific aliases and functions

# Source global definitions
if [ -f /etc/bashrc ]; then
	. /etc/bashrc
fi

~/.bash_profile

È il file di configurazione utilizzato dalla shell Bash quando questa viene avviata a seguito di un login. Per mantenere uniformità con l'insieme, esegue a sua volta il contenuto di ~/.bashrc

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin
ENV=$HOME/.bashrc
USERNAME=""

export USERNAME ENV PATH

186.3.1.1 Configurazione aggiuntiva

La directory /etc/profile.d/ viene usata per contenere una serie di file da inserire ordinatamente alla fine di /etc/profile. Attraverso questo meccanismo, l'installazione di un programma può definire un'aggiunta nella configurazione della shell senza dover modificare il file /etc/profile.

I file in questione, devono terminare con l'estensione .sh, non serve che siano eseguibili, e nemmeno che inizino con la definizione della shell che deve interpretarli. L'esempio seguente mostra uno di questi file con la definizione di alcune variabili utili.

# /etc/profile.d/config.sh

LANG="it_IT.ISO-8859-1"
export LANG

PATH="$PATH:$HOME/bin:."
export PATH

PS1='\u@\h:\w\$ '
export PS1

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

Nell'esempio viene definita la variabile LANG, nel modo corretto per l'Italia, quindi vengono aggiunte al percorso di ricerca degli eseguibili, la directory ~/bin e la directory corrente. Successivamente, viene definita la variabile PS1 (il prompt) e una serie di alias.

In precedenza si è visto che la distribuzione RedHat indica il file /etc/bashrc come il contenitore adatto per la definizione del prompt e degli alias. Dipende dal gusto dell'amministratore del sistema la scelta di come intervenire.

186.4 Utenti

Utenti e gruppi vengono gestiti in modo differente dal solito: si tende ad abbinare a ogni utente un gruppo con lo stesso nome e lo stesso numero. Questa tecnica permette di lasciare al gruppo gli stessi permessi dell'utente, facilitando la creazione e lo scioglimento di gruppi di lavoro con la semplice creazione di gruppi nuovi a cui si abbinano gli utenti che ne fanno parte. Questo viene descritto un po' meglio nella sezione 29.5.3.

In queste condizioni, la maschera dei permessi utilizzata normalmente è 002.

È il caso di osservare che l'utente e il gruppo nobody hanno il numero 99.

Lo script useradd inserisce gli utenti a partire dal numero 500 in poi, aggregando a ognuno un gruppo privato.

186.4.1 /etc/passwd

root::0:0:root:/root:/bin/bash
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
adm:*:3:4:adm:/var/adm:
lp:*:4:7:lp:/var/spool/lpd:
sync:*:5:0:sync:/sbin:/bin/sync
shutdown:*:6:0:shutdown:/sbin:/sbin/shutdown
halt:*:7:0:halt:/sbin:/sbin/halt
mail:*:8:12:mail:/var/mail:
news:*:9:13:news:/var/spool/news:
uucp:*:10:14:uucp:/var/spool/uucp:
operator:*:11:0:operator:/root:
games:*:12:100:games:/usr/games:
gopher:*:13:30:gopher:/usr/lib/gopher-data:
ftp:*:14:50:FTP User:/home/ftp:
nobody:*:99:99:Nobody:/:

186.4.2 /etc/group

root::0:root
bin::1:root,bin,daemon
daemon::2:root,bin,daemon
sys::3:root,bin,adm
adm::4:root,adm,daemon
tty::5:
disk::6:root
lp::7:daemon,lp
mem::8:
kmem::9:
wheel::10:root
mail::12:mail
news::13:news
uucp::14:uucp,root
man::15:
games::20:
gopher::30:
dip::40:
ftp::50:
nobody::99:
users::100:

186.5 Stampa

Il sistema di stampa adottato da RedHat è quello tradizionale, cioè BSD. Le directory delle code, riferite ad altrettante voci del file /etc/printcap, si diramano a partire da /var/spool/lpd/ e ognuna di queste contiene il filtro di stampa (se viene utilizzato), e i file di configurazione utilizzati dal filtro.

Tutto questo, compreso il file /etc/printcap, è gestito direttamente dal programma di configurazione della stampa, printtool.

186.5.1 /var/spool/lpd/*/

All'interno della directory per la coda di stampa si trovano, oltre ai file utilizzati da lpr e lpd, anche lo script usato come filtro e i relativi file di configurazione.

filter

È il filtro che fa riferimento a diversi componenti collocati sotto /usr/lib/rhs/rhs-printfilters/.

general.cfg

È un file di configurazione generale della stampa. Segue un esempio nel quale si fa riferimento a:

stampante locale;

sistema di stampa PostScript (attraverso un filtro);

foglio A4;

file ASCII trasformati in PostScript.

#
# General config options for printing on this queue
# Generated by PRINTTOOL, do not modify.
#
export DESIRED_TO=ps
export PAPERSIZE=a4
export PRINTER_TYPE=LOCAL
export ASCII_TO_PS=YES

postscript.cfg

È un file di configurazione per l'emulazione della stampa PostScript. Segue un esempio nel quale si fa riferimento a:

stampante compatibile con HP Laserjet;

risoluzione 300x300 dpi;

foglio A4.

#
# configuration related to postscript printing
# generated automatically by PRINTTOOL
# manual changes to this file may be lost
#
GSDEVICE=laserjet
RESOLUTION=300x300
COLOR=
PAPERSIZE=a4
EXTRA_GS_OPTIONS=""
REVERSE_ORDER=
PS_SEND_EOF=NO

#
# following is related to printing multiple pages per output page
#
NUP=1
RTLFTMAR=18
TOPBOTMAR=18

textonly.cfg

È un file di configurazione della stampa di solo testo. Segue un esempio, nel quale si fa riferimento, in particolare, alla trasformazione dei codici di interruzione di riga in modo che corrispondando sempre a <CR><LF>.

#
# text-only printing options for printing on this queue
# Generated by PRINTTOOL, do not modify.
#
TEXTONLYOPTIONS=
CRLFTRANS=1
TEXT_SEND_EOF=YES

186.5.2 /etc/printcap

Dal momento che la stampa è organizzata attraverso questo sistema di filtri, controllato da printtool, sarebbe meglio non modificare il file standard /etc/printcap, o almeno limitarsi a utilizzare le sole caratteristiche che printtool può gestire.

# /etc/printcap
#
# Please don't edit this file directly unless you know what you are doing!
# Be warned that the control-panel printtool requires a very strict format!
# Look at the printcap(5) man page for more info.
#
# This file can be edited with the printtool in the control-panel.

##PRINTTOOL3## LOCAL laserjet 300x300 a4 {} LaserJet Default {}
lp:\
	:sd=/var/spool/lpd/lp:\
	:mx#0:\
	:sh:\
	:lp=/dev/lp1:\
	:if=/var/spool/lpd/lp/filter:

---------------------------

Appunti Linux 1999.07.12 --- Copyright © 1997-1999 Daniele Giacomini --  daniele @ evo.it

[indice generale] [precedente] [successivo] [indice analitico] [note introduttive]