Archivio per la categoria Opensuse

Confrontare due directory sotto windows.

Nei sistemi linux potremmo confrontare due directory con il comando diff e la seguente sintassi:

diff -r --brief cartella1 cartella2 oppure come al solito per chi non è tanto a suo agio con la bash come me.. si può utilizzare il software Meld sotto gnome.

Sotto windows possiamo appoggiarci al programma winmerge, la cui interfaccia banale ci permette di risolvere il classico problema di avere due cartelle perfettamente allineate.

Winmerge ci permette di visualizzare le differenze in entrambe le cartelle sia nella prima che nella seconda e di copiare le differenze in un senso o nell’altro, questo principio si può applicare anche ai file di testo.

Il sistema di Apple utilizza un software chiamato Filemerge che si occupa del confronto e unione di file.

Lascia un commento

Opensuse: cups e il processo di stampa.

Opensuse: cups e il processo di stampa.

Il sistema di stampa di default in opensuse è Cups (Common Unix Printing System) il quale è bastato su IPP (Interent Printing Protocol), tale protocollo è ampiamente supportato dai maggiori produttori di prodotti per la stampa e dai vai sistemi operativi.

Vediamo di capire le fasi di un processo di stampa sotto linux, come gestire le n/s stampe e consultare gli eventuali log in caso di errori, partiamo definendo per passi il processo di stampa:

  1. Un job di stampa viene lanciato da un applicativo quale openoffice ad esempio.
  2. Il file destinato alla stampante selezionata viene aggiunto alla coda di stampa, la quale crea due files necessari per stampare nella directory /var/spool/cups, Il primo di questi file è il relativo lavoro di stampa, il secondo fornisce informazioni sul creatore del processo di stampa e sulla stampante da utilizzare.
  3. Il  demone cupsd agisce come spooler di stampa, si occupa infatti di controllare le code di stampa e di lanciare i relativi filtri richiesti per convertire i dati nel formato di stampa specifico.
  4. La conversione viene effettuata secondo tale schema:
    1. Il tipo di dato è determinato utilizzando le righe presenti nel file /etc/cups/mime.types
    2. Successivamente il dato viene convertito in Postscript utilizzano le righe presenti nel file /etc/cups/mime.convs.
    3. Dopo ch il programma pstops (/usr/lib/cups/filter/pstops) determina il numero delle pagine da stampare che è scritto nel file /var/log/cups/page_log.
    4. Nel caso in cui la stampante non fosse di tipo Postscript cups utilizzerebbe il formato di conversione necessario richiamando il relativo programma,  uno di questi ad esempio è cupsomatic  (/usr/lib/cups/filte/cupsomatic).
    5. L’invio definitivo alla stampante viene effettuato tramite un dterminato tipo di filtro in base alla connessione del dispositivo all’host di stampa (parallela, usb o network), tale informazioni risiedono nel file /usr/lib/cups/back end.
    6. Una volta che il lavoro è stampato, lo spooler cancella il job dalla coda di stampa e rimane in attesa del successivo, quando il job è cancellato i file in /var/spool/cups/ vengono eliminati.

Le varie stampanti in linux vengono indicate come code di stampa, ognuna di tale code sono registrate nel file /etc/cups/printers.conf, ogni coda ha il suo file di configurazione nella directory /etc/cups/ppd e ognuno di questi file contiene le impostazioni del formato carta, la risoluzione ecc, ecc.

Lascia un commento

Opensuse: gestire i runlevel.

Inittab definisce i runlevel che il sistema linux deve adottare quando è finite il boot, ma che servizi avviare ad ogni runlevel non risulta tra I compiti di questo file.

Tale informazioni sono date dai link simbolici presenti nelle varie directory /etc/ini.d/rcx.d/ che puntano agli script presenti in /etc/init.d/ , al fine di comprendere meglio l’avvio di tali servizi cerchiamo di analizzare:

  • Gli script di init.
  • Il link simbolici ai vari runlevel.
  • Come determianre quali servizi avviare o fermare.
  • Come attivare/disattivare tali servizi per ogni determinato runlevel.

La directory /etc/injt.d contiene gli script dell basj  dei vari task da effettuare dopo l’avvio e eventualmente dei vari  sevizi da avviare o stoppare nel sistema.

Questi script possono essere chiamati direttamente ad esempio all’avvio del sistema, alo spegnimento o durante la pressione di ctrl+alt+canc,  o indirettamente quanto si passa ad esempio da un runlevel all’altro.

Per lanciare un determinate runlevel init chiama in causa lo script  /etc/init.d/rc, con il runlvel come parametro, questo a sua volta legge nella directory /etc/init.d/rcx.d lanciando o stoppando I relative servizi in base ai links enumerati in questa directory.

Ogni runlevel ha la sue subdirectory in /etc/init.d, così avremo per il runlevel 3 /etc/init.d/rc3, /etc/init.d/rc5 per il runlevel 5 e così via.

Osservando I files presenti in ogni subdirectory noteremo che vi sono presenti tue tipologie di file quelle che iniziano con k e quelli che iniziano con s, oguno di questi è sempre seguito da due lettere più il nome del servizio.

Ogni servizio in linux può esere:

Avviato con il parametro start (ad esempio: /etc/init.d/smb start avvia il demone di  samba.)

Fermato con il commando stop

Riavviato con il commando restart, anche se in questo caso prima ferma il servizio poi lo riavvia.

Inittab definisce i runlevel che il sistema linux deve adottare quando è finite il boot, ma che servizi avviare ad ogni runlevel non risulta tra I compiti di questo file.

Tale informazioni sono date dai link simbolici presenti nelle varie directory /etc/ini.d/rcx.d/ che puntano agli script presenti in /etc/init.d/ , al fine di comprendere meglio l’avvio di tali servizi cerchiamo di analizzare:

  • Gli script di init.
  • Il link simbolici ai vari runlevel.
  • Come determianre quali servizi avviare o fermare.
  • Come attivare/disattivare tali servizi per ogni determinato runlevel.

La directory /etc/injt.d contiene gli script dell basj  dei vari task da effettuare dopo l’avvio e eventualmente dei vari  sevizi da avviare o stoppare nel sistema.

Questi script possono essere chiamati direttamente ad esempio all’avvio del sistema, alo spegnimento o durante la pressione di ctrl+alt+canc,  o indirettamente quanto si passa ad esempio da un runlevel all’altro.

Per lanciare un determinate runlevel init chiama in causa lo script  /etc/init.d/rc, con il runlvel come parametro, questo a sua volta legge nella directory /etc/init.d/rcx.d lanciando o stoppando I relative servizi in base ai links enumerati in questa directory.

Ogni runlevel ha la sue subdirectory in /etc/init.d, così avremo per il runlevel 3 /etc/init.d/rc3, /etc/init.d/rc5 per il runlevel 5 e così via.

Osservando I files presenti in ogni subdirectory noteremo che vi sono presenti tue tipologie di file quelle che iniziano con k e quelli che iniziano con s, oguno di questi è sempre seguito da due lettere più il nome del servizio.

Ogni servizio in linux può esere:

Avviato con il parametro start (ad esempio: /etc/init.d/smb start avvia il demone di  samba.)

Fermato con il commando stop

Riavviato con il commando restart, anche se in questo caso prima ferma il servizio poi lo riavvia.

Ricaricato con il commando reload, in questo caso rilegge la configurazione del servizio, ma differenza d restart prima non ferma il servizio.

Visualizzato nel suo stato attuale con il status.

Premesso questo andiamo a spiegare il signifacato dei vari k e s e delle due lettere che li seguono, questi parametri servono a spiegare il comportamento di tali servizi al passaggio da un runlevel all’altro.

Quando cambiamo runlevel init chiama lo script /etc/init.d/rc con il runlevel nuovo come parametro, supponiamo di passare dal runlevel 5 al runlevel 3, in questo caso lo script /etc/init.d/rc leggerà la directory del runlevel corrente (in questa caso 5) e la confronterà con quella del runlevel a cui passare (in questo caso 3).

Lo scenario presente ci ofrre 3 tipi di possibilità

  1. Esiste un link del tipo kxx per un certo servizio nel runlevel 5 ed esiste un link sxx per lo stesso servizio nel runlevel 3, in questo caso passando dal livello 5 a 3 tale servizio non viene ne avviato ne stoppato.
  2. Esiste un link del kxx per un certo servizo nel runlevel 5 ma non esiste un corrispondente sxx nel runlevel 3, in questo caso il servizio nel runlevel 3 viene stoppato.
  3. Esiste un link sxx per un certo servizio nel runlevel 3 ma nessuno corrispondente kxx nel runlevel 5, in questo caso  il servizio viene avviato.

Ancora poco chiaro? Si lo penso anche io.. vediamo di spiegarlo meglio con una tabella ipotizzando l’esempio del link /etc/init.d/kxxnetwork  al passaggio dal runlevel 5 al runlevel 3 con l’eventuale esito di avvio per il servizio network.

Nome link Runlevel 5 Nome link Runlevel 3 Esito
kxxnework Link presente sxxnetwork Link presente Servizio ignorato.
kxxnework Link presente sxxnetwork Link assente Servizio fermato.
sxxnework Link presente kxxnetwork Link resente Servizio avviato.

Rimane adesso da definire il significato delle lettere dopo k o s, indicano semplicemente la priorità dell’esecuzione dei vari servizi, ad esempio k10network sarà eseguito prima di k20cron,il cambio da un runlevel all’altro può essere eseguito dal superuser con il comando init + numero_runlevel.

Per gestire l’avvio dei vari servizi ad ogni runlevel state tranquilli possiamo utilizzare tranquilamente il n/S amato Yast2, digitando da prompt yast2 runlevel oppure dalla gui System->System Service (runlevel), l’interfaccia grafica si propone in due modalità

Simple: dove possiamo abilitare/disabilitare i vari servizi (demons) per il prossimo avvio.

Exert mode: abbiamo il totale controllo dei servizi possiamo scegliere non solo quali abilitare o meno ma anche quali per ogni runlevel, quali fermare o quali ricaricare.

Lascia un commento

Opensuse: il file /etc/inittab e i runlevel.

Gestire i runlevel è essenziale per qualsiasi amministratore linux che si rispetti, perciò non  è sicuramente il caso mio, tuttavia conoscerne il funzionamento può servire per risolvere varie situazioni anche a i vari neofiti come il sottoscritto.

Iniziamo dando uno sguardo al programma ini e i vari runlevel che in linux sono numerati da 0 a 6 ognuno indicante una modalità di avvio diversa del sistema operativo.

Init viene lanciato da /sbin/init che a sua volta viene avviato dal kernel di linux come primo proesso di sistema, questo processo avvia poi successivamente tutti gli altri.

Essendo init l’ultimo programma in esecuzione durante l’avvio di linux questo vuol dire che è lo stesso programma che si occupa di tutto l’avvio e anche dello shutdown del sistema operativo, il file di configurazione a cui si appoggia init e /etc/inittab che si occupa di lanciare i vari script di avvio che sono locati nella directory /etc/init.d.

Definiamo intanto cosa sono poi questi runlevel, semplicemente definiscono lo stato di un sistema linux, i vari runlevel sono così divisi:

0 = Halt del sistema.

S = Utilizzato per effettuare l’avvio in single-mode (con layout di tastiera inglese).

1 = Modalità utente singolo (single-user mode)

2 = Multiutenza senza servizi di rete.

3 = Multiutenza con servizi di rete (senza server x-org).

4 = Questo non viene utilizzato mai.

5 = Multiutenza  con servizi di rete e modalità in grafica (x-org).

0 = Riavvio del sistema.

Dalla bash il comando runlevel ritorna il reunlevel attuale.

Per comprendere inittab dobbiamo:

Conoscere la sintassi di inittab.

Conoscere le varie entries presenti in inittab.

Ogni riga del file inittab è definita dalla seguente sintassi:

id:rl:azione:processo

id: un identificativo univoco di 4 lettere  per ogni riga del file.

rl:  la lsist dei runlevel per cui questo id è valido.

azione: La modalita’ con cui viene eseguito il comando vero e proprio

processo: identifica il processo relative a questa riga.

Vediamo adesso le entries classiche di inittab, partendo dalla prima di tutte che è la seguente:

Id:5:initdefault

Initdfault indica il livello di runlevel in cui deve essere avviato un system linux dopo il boot, solitamente questo può essere 3 oppure 5.

Il runlevel S è un come certamente vi sarete chiesti un runlevel special, addirittura funzionerebbe nel caso in cui /etc/inittab fosse mancante.

Vi basterebbe digitare S al prompt del boot quando il computer parte, in questo caso il commando sulogin permetterebbe solo al superuser di effettuare il login.

Concludiamo dicendo che inittab si occupa anche dell’eventuale pressione dei tasti ctrl+alt+canc durante l’avvio., per impedire che la loro pressione comprometta l’avvio di linux possiamo commentare l’eventuale riga nel file.

Lascia un commento

Opensuse: Grub il bootmanager.

Per avviare un sistema operativo, qualunque esso si avete bisogno di un programma particolare chiamato bootloader, questo dopo la fase iniziale del post di avvio del computer ricerca i vari dispositivi configurati per effettuare il boot e una volta identificati avvia da essi il processo di avvio del sistema operativo stesso.

Un bootmangaer può fare questo ed altro, ovvero non solo carica il processo di avvio si un sistema operativo ma può gestire l’avvio di più sistemi operativi insieme.

Il vecchio Lilo (linux loader) vien oggi sostituito da Grub (Grand Unified bootloader), ed è oramai il bootmanager di default di ogni distro linux opensuse compresa.

Il processo di Grub si articola in una architettura a due fasi:

  1. In  questa fase Grub vine installato nel MBR (Master Boot Record) solitamente quello del primo hard disk, data la sua grandezza, 446 byte, l’MBR contiene le informazioni necessarie per accedere alla fase due dell’avvio di Grub.
  2. Questa fase contiene il bootloader, i file del secondo stage del bootloader sono localizzati nella directory /boot/grub.

Grub può essere lanciato prima dell’avvio del sistema operativo premendo Esc quando appaiono le scritte indicanti i sistemi operativi da eseguire, e configurato addirittura dentro opensuse stessa, sia da Yast2 che da riga di comando.

 

Lascia un commento

Opensuse: Il processo di avvio.

Opensuse come qualsiasi sistema linux o altro esegue una sequenza di avvio ben determinata dal momento di accensione del computer al momento in cui sia arriva alla finestra di login dell’utente.

Le fasi di avvio di un sistema linux generalmente sono:

Sequenza del Bios e caricamento del boot manager.
Il kernel.
Inittramfs (Initial Ram System).
Init.
La sequenza di avvio del Bios (Basic Input Output System) che parte quando viene acceso il computer esegue una serie di test hardware sugli eventuali dispositivi di boot quali hard disks, cdrom anche periferiche usb nelle mainboard moderne, una volta trovato il primo hard disk avviabile (bootable) il Bios legge l’ MBR (Master Boot Record) presente sul disco leggendo perciò il codice li presente avvia il boot manager.

Il boot manager è il programma che avvia ogni sistema operativo, in linux questo è di default Grub che negli anni ha sostituito il vecchio LILO, grub carica il kernel e initrd in memoria e successivamente avvia il kernel.

Il kernel (/boot/vmlinux che non è altro che un link simbolico a /boot/vmlinux-kernel_versione) viene decompresso e si organizza per continuare l’avvio (boot) del sistema operativo.

Il kernel controlla e predispone la console (Il Bios, registra la scheda grafica e l’output della risoluzione video dello schermo), poi legge i parametri del Bios e inizializza le interfacce hardware e le vari periferiche.

Vengono poi caricati i drivers, che sono parte del kernel stesso, controlla e gestisce l’hardware presente in base ai drivers conosciuti.

Inittramfs (Initial Ram System) è un archivio creato in formato cpio che viene caricato nella ram, provvede un sistema minimale linux che abilita l’esecuzione dei programmi prima che il filesystem di root venga caricato.

Inittramfs deve sempre caricare un eseguibile chiamato init che esegue appunto il programma init sul filesystem di root per permettere al processo di boot di avviarsi.

I sistemi opensuse utilizzano il modulo initrd, /boot/initrd è un link a /boot/initrd-kernel_versione ovvero il file che contiene l’archivio compresso cpio.

Il kernel carica il programma init contenuto in initramfs, questo è script della shell di linux che carica i moduli del kernel e monta il filesystem root, e successivamente avvia /sbin/init dalla root stessa.

Una volt controllato le partizioni e montato la root, il programma init carica /sbin/init che effettua il boot del sistema operativo avviando i suoi programmi e le eventuali configurazioni.

Al processo init è sempre assegnato il PID (process ID) uguale a 1, questo si affida al file /etc/inittab per l’ informazioni sulla configurazione e su quali processi avviare.

Lascia un commento

Opensuse: lanciare i jobs con il comando at.

Una volta discusso della possibilità di utilizzare il demone cron per schedulare le n/s routine o processi, passiamo a presentare at che p il comando che serve per programmare l’esecuzione dei vari jobs nel caso in cui questi devono essere eseguiti un’unica volta.

Prima di tutto precisiamo che il servizio di at si attiva se non fosse avviatel con il comando rcatd start, secondo dobbiamo determinare quali utenti di sistema possono definire e lanciare i propri jobs.

Il file /etc/at.allow contiene gli utenti ammessi a schedulare i propri jobs, /etc/at.deny quelli a cui non è premesso, di default in suse /etc/at.deny esiste mentre /etc/at.allow deve solitamente essere creato con un editor di testo tipo vi.

La sintassi del comando è at orario_di avvio del jobs, successivamente possiamo digitare una serie di istruzioni da far eseguire al job e salvare il job stesso premendo Ctrl+d.

Le istruzioni possono essere anche contenute in un file di testo, in questo caso la sintassi sarà la seguente:

at –f nome_file orario_di avvio.

 

Lascia un commento