[Guida] Dracut, creatore di Initramfs

  • Autore discussione Autore discussione wine
  • Data d'inizio Data d'inizio
Pubblicità

wine

Bannato a Vita
Messaggi
2,024
Reazioni
719
Punteggio
72
Dracut

Introduzione


Visto che in giro per la rete non si trova niente, nemmeno sul wiki di ArchLinux (e questo è strano) scrivo una guida su Dracut.

Innanzitutto per chi non sa e vorrebbe sapere cos'è l'initramfs:

Dal wiki di Arch:
L'initramfs (disco ram iniziale in italiano) è essenzialmente un minuscolo ambiente a livello utente che carica cari moduli del kernel e imposta il necessario prima di lasciare il controllo all'init-system. Cosa sia l'init system è irrilevante ai fini della guida, conseguentemente non verrà trattato. D'altronde "Google is your friend" ;)

Cos'è Dracut? (Dal wiki della sua pagina su kernel.org, con tanto di traduzione fatta a mano ;) ) :

Dracut è un sistema di creazione dell'initramfs gestito dagli eventi. A differenza degli altri creatori dell'initramfs (ArchLinux usa mkinitcpio) il suo obiettivo è di inserire meno cose possibile nell'initramfs con l'obiettivo di rendere l'avvio della macchina il più snello e più veloce possibile.

Disclaimer



Dracut è un tool che che lavora a basso livello, modificando alcuni file essenziali per l'avvio del sistema. Anche se questa guida farà in modo di mantenere almeno un modo sicuro di avviare la macchina senza problemi, nè IO, nè Tom's hardware, nè i colleghi Linari che vi aiuteranno a risolvere eventuali dubbi/problemi, ci prendiamo responsabilità in caso di danni al sistema operativo. Inoltre si consiglia di effettuare un backup dei propri dati o, al limite, tenere la home su una partizione separata.
Questa guida è fatta su ArchLinux, su distro differenti, anche se dubito, il processo potrebbe essere diverso e, quindi, andrebbe adattato.


Bene, dopo questo papiro iniziale iniziamo la guida vera e propria.
Per installare il pacchetto c'è bisogno di AUR, dato che, non essendo un pacchetto che gode di particolare fama e non essendo molto utilizzato, non è incluso nel repo community.
Il sottoscritto ha utilizzato yaourt per la compilazione, uno degli strumenti per la compilazione del PKGBUILD più usati.
Per l'installazione procediamo così:

Codice:
sudo yaourt -S dracut-git

In questo modo si installerà l'ultima versione disponibile sul server gitorious (al momento rimanda alla 019, ma è uscita la 020).
Generalmente si sconsiglia di fare la compilazione con i diritti di superuser, ma, dato che il sottoscritto non ha mai capito come fare, attendo lumi dai più esperti (anche per l'installazione dopo la compilazione) :inchino:.
Bene se l'installazione è andata per il verso giusto potete proseguire, altrimenti postate pure, per quanto possibile cercherò/emo di aiutarvi.

Aprendo un terminale e digitando dracut vi verrà fuori una bella lista di opzioni, che racchiuderò qui sotto:

Codice:
Version: 019

 
Creates initial ramdisk images for preloading modules

  -f, --force           Overwrite existing initramfs file.
  -m, --modules 
[LIST]  Specify a space-separated list of dracut modules to
                         call when building the initramfs. Modules are located
                         in /usr/lib/dracut/modules.d.
  -o, --omit 
[LIST]     Omit a space-separated list of dracut modules.
  -a, --add 
[LIST]      Add a space-separated list of dracut modules.
  -d, --drivers 
[LIST]  Specify a space-separated list of kernel modules to
                        exclusively include in the initramfs.
  --add-drivers 
[LIST] Specify a space-separated list of kernel
                        modules to add to the initramfs.
  --omit-drivers 
[LIST] Specify a space-separated list of kernel
                        modules not to add to the initramfs.
  --filesystems 
[LIST]  Specify a space-separated list of kernel filesystem
                        modules to exclusively include in the generic
                        initramfs.
  -k, --kmoddir [DIR]   Specify the directory, where to look for kernel
                        modules
  --fwdir [DIR]         Specify additional directories, where to look for
                        firmwares, separated by :
  --kernel-only         Only install kernel drivers and firmware files
  --no-kernel           Do not install kernel drivers and firmware files
  --strip               Strip binaries in the initramfs
  --nostrip             Do not strip binaries in the initramfs (default)
  --prefix [DIR]        Prefix initramfs files with [DIR]
  --noprefix            Do not prefix initramfs files (default)
  --mdadmconf           Include local /etc/mdadm.conf
  --nomdadmconf         Do not include local /etc/mdadm.conf
  --lvmconf             Include local /etc/lvm/lvm.conf
  --nolvmconf           Do not include local /etc/lvm/lvm.conf
  --fscks 
[LIST]        Add a space-separated list of fsck helpers.
  --nofscks             Inhibit installation of any fsck helpers.
  -h, --help            This message
  --debug               Output debug information of the build process
  --profile             Output profile information of the build process
  -L, --stdlog [0-6]    Specify logging level (to standard error)
                         0 - suppress any messages
                         1 - only fatal errors
                         2 - all errors
                         3 - warnings
                         4 - info (default)
                         5 - debug info (here starts lots of output)
                         6 - trace info (and even more)
  -v, --verbose         Increase verbosity level (default is info(4))
  -q, --quiet           Decrease verbosity level (default is info(4))
  -c, --conf [FILE]     Specify configuration file to use.
                         Default: /etc/dracut.conf
  --confdir [DIR]       Specify configuration directory to use *.conf files
                         from. Default: /etc/dracut.conf.d
  --tmpdir [DIR]        Temporary directory to be used instead of default
                         /var/tmp.
  -l, --local           Local mode. Use modules from the current working
                         directory instead of the system-wide installed in
                         /usr/lib/dracut/modules.d.
                         Useful when running dracut from a git checkout.
  -H, --hostonly        Host-Only mode: Install only what is needed for
                         booting the local host instead of a generic host.
  --no-hostonly         Disables Host-Only mode
  --fstab               Use /etc/fstab to determine the root device.
  --add-fstab [FILE]    Add file to the initramfs fstab
  --mount "[DEV] [MP] [FSTYPE] [FSOPTS]"
                        Mount device [DEV] on mountpoint [MP] with filesystem
                        [FSTYPE] and options [FSOPTS] in the initramfs
  -i, --include [SOURCE] [TARGET]
                        Include the files in the SOURCE directory into the
                         Target directory in the final initramfs.
                        If SOURCE is a file, it will be installed to TARGET
                         in the final initramfs.
  -I, --install 
[LIST]  Install the space separated list of files into the
                         initramfs.
  --gzip                Compress the generated initramfs using gzip.
                         This will be done by default, unless another
                         compression option or --no-compress is passed.
  --bzip2               Compress the generated initramfs using bzip2.
                         Make sure your kernel has bzip2 decompression support
                         compiled in, otherwise you will not be able to boot.
  --lzma                Compress the generated initramfs using lzma.
                         Make sure your kernel has lzma support compiled in,
                         otherwise you will not be able to boot.
  --xz                  Compress the generated initramfs using xz.
                         Make sure that your kernel has xz support compiled
                         in, otherwise you will not be able to boot.
  --compress [COMPRESSION] Compress the generated initramfs with the
                         passed compression program.  Make sure your kernel
                         knows how to decompress the generated initramfs,
                         otherwise you will not be able to boot.
  --no-compress         Do not compress the generated initramfs.  This will
                         override any other compression options.
  --list-modules        List all available dracut modules.
  -M, --show-modules    Print included module's name to standard output during
                         build.
  --keep                Keep the temporary initramfs for debugging purposes
  --printsize           Print out the module install size
  --sshkey [SSHKEY]     Add ssh key to initramfs (use with ssh-client module)


If 
[LIST] has multiple arguments, then you have to put these in quotes.
For example:
# dracut --add-drivers "module1 module2"  ...



Se avete visto la lista dei comandi, vi accorgerete che è proprio succulenta.
Mi soffermo su quelli più interessanti e che sicuramente useranno tutti:

--force ( o -f) :
Necessario per sovrascrivere l'initramfs nel caso in cui ne fosse già presente una con lo stesso nome in /boot

--modules (o -m) :
Usato per indicare a dracut dei moduli specifici da caricare per l'initramfs, i moduli forniti da dracut si trovano in /usr/lib/dracut/modules.d. Per indicare più moduli si usa la sintassi "modulo1 modulo2 ... modulo48489865514548974"

--omit (-o):
Uno dei comandi (se non IL comando) più usato. Esso permette infatti di omettere dei moduli dall'initramfs. Infatti Dracut non farà alcun controllo dei moduli necessari, dovete quindi essere voi a dire cosa mettere o meno, altrimenti riempie l'initramfs, creando un camaleonte

--bzip2 --gzip --lzma --xz:
Permettono di comprimere l'initramfs rispettivamente in bzip2, gzip, lzma, xz. Di default, se non date nessuna opzione, dracut comprimerà l'immagine in gzip. Dai miei test il miglior metodo, come spazio occupato, è risultato xz, che però comprime parecchio, quindi si perderà molto tempo per la decompressione. Motivo per cui ho preferito il più veloce, perchè anche se occupa 3MB in più rende l'avvio più veloce di 1 secondo. Questa opzione equivale a --compress-algoritmo_di_compressione

Per il momento mi fermo con la scrittura delle opzioni e domani spiegherò TUTTI i metodi e le opzioni messi a disposizione. Ora spiego solo quelli che ho omesso IO.

lvm:
Serve per la gestione dei volumi logici virtuali, creati con lo scopo di sopperire al problema del MBR dei BIOS classici (L'UEFI supporta anche GPT che sopperisce a questo problema), che consente la creazione di 4 partizioni massime per disco (sia esso fisico o RAID). Quindi se il disco di avvio della vostra distro ha 5 partizioni o più e condividete l'HDD in dual boot con Windows XP/Vista/7 state usando LVM, in ogni caso consiglio sempre di controllare con un nuon programma/LiveCD di partizionamento

mdraid:
Uno dei tanti sistemi per lo sfruttamento del RAID su linux. MD corrisponde a Multiple Devices, è uno dei sistemi non standard per creare, monitrare e cancellare RAID 10 (o 1 + 0, fate voi, la sostanza è sempre quella). Se avete un RAID o lo in futuro credete di volerlo creare è da tenere, altrimenti no.

dm:
Permette di utilizzare su kernel Linux i RAID creati tramite il BIOS attraverso l'utility fakeraid (che l'utente ovviamente non vede). La maggiorparte dei radi creati dalle schede madri appartiene a questo tipo, in quanto i RAID standard non sono supportati da Windows. In pratica il controller crea un RAID finto (you don't say?) per permettere a Windows di riconoscerlo. La situazione con quell'OS potrebbe comunque essere migliorata.
Una lsita dei controller che sfruttano fakeraid è disponibile qui: Breve guida a DMRAID - Slacky.eu . Conseguentemente se avete un RAID (o avete intenzione di farlo o monitorarlo) questo modulo è da mantenere, altrimenti dritto nel cestino

crypt:
Come dice il nome serve per gestire le partizioni (e dischi) criptate. Usa le specifiche LUKS per controllare i dischi criptati. Come al solito, è necessario se avete dei dispositivi criptati o volete/dovrete gestirne in futuro.

virtfs:
E' un modulo che permette di avere dei file system virtuali su linux. Si trovano in genere sotto /home/virtfs, sono accessibili solo da remoto e eliminarli in locale significa generalmente compromettere l'intero sistema. Come avrete intuito è destinato ai server, se non sfruttate sistemi di questo tipo è totalmente inutile.

fcoe:
Sinonimo di Fibre Channel Over Ethernet, è un protocollo usato in ambito server che ha poco a che vedere con la fibra ottica. Serve a trasportare pacchetti Fibre Channel tramite ethernet (yds again?) alla velocità massima di 10 gigabite al secondo. Necessita di costose schede di rete e appositi switch. Inoltre non è consentita la perdita di pacchetti. Completamente eliminabile in ambito domestico.

iscsi
Modulo che permette la gestione di dischi SCSI tramite Internet. Se sfruttate questo tipo di connessioni attraverso la rete (ad esempio gestite un server che si appoggia a quest'interfaccia) è da tenere assoolutamente, altrimenti è eliminabile. In ogni caso dai miei test l'eliminazione AUMENTA le dimensioni dell'initramfs, anche se di poco.

Usare Dracut


Usare Dracut è molto semplice, per richiamarlo da terminale basta il comando

Codice:
[SIZE=2]d[/SIZE]racut

Che però, se non viene configurato il file di configurazione rimanda al manuale (equivale a "dracut --help").
Per le prove ci avvarremo quindi delle opzioni messe a disposizione da questo affascianante progetto. Il comando da dare è

Codice:
[SIZE=2]s[/SIZE]udo [SIZE=2]d[/SIZE]racut <cartella_dove_scrivere_initramfs_e_nome> <nome kernel>

Innanzitutto notare il sudo: è necessario perchè va a scrivere file all'ESTERNO della nostra home, precisamente andremo a scrivere l'initramfs in /boot, dato che all'esterno è inutile. Consiglio di non utilizzare il nome "initramfs-linux" perchè altrimenti dovrete forzare l'operazione e in caso di problemi o usate l'initramfs fallback (che non scriveremo per ovvi motivi) oppure sarete fregati e dovrete sovrascrivere i file da un OS esterno. Va dato l'intero percorso, quindi dovrete dare /boot/foo.img (sostituite foo con un nome di vostra scelta. poi segnatevelo o ricordatelo). Se il file esiste e quindi va sovrascritto aggiungete --force al termine del comando.
Consiglio comunque di tenere di initramfs, una standard e una custom, andando a riscrivere sempre quest'ultima.
Nome kernel si riferisce al solo nome che ha la cartella contenente i moduli del kernel sotto /lib/modules. Quindi se la cartella si chiama 3.4.4-2-ARCH (come nel mio caso) dovrete scrivere SOLO il nome della cartella, non tutto il percorso

Tramite il comando:
Codice:
sudo dracut --gzip /boot/initramfs-linus.img 3.4.4-2-ARCH -o "lvm mdraid dm crypt virtfs fcoe"

Con questo comando diremo a dracut di: comprimere l'immagine in gzip (--gzip, dracut lo farebbe di default, ma è sempre meglio essere chiari), scriverla in /boot con il nome "initramfs-linus.img" e di prendere i moduli del kernel necessari da /lib/modules/3.4.4-2-ARCH e omettere (non mettere) i moduli relativi al fakeraid, al raid, ai volumi logici, al criptaggio, ai file system virtuali e al Fibre Channel via Ethernet.

Per ora la guida si ferma qui, in quanto l'ora è tarda, continerò domani (probabilmente di sera, di giorno mi attendono i libri), spero di completarla conseguentemente.

Posto intanto i miei risultati. Sicuramente, studiando al meglio i moduli forniti è possibile fare di meglio.

La mia situazione di base era un'immagine creata con mkinitcpio (il modo standard di arch per initramfs) con una leggerissima ottimizzazione, in quanto ho eliminato il supporto a scsi e pata (in quanto la mobo non li supporta). La compressione era in gzip.
Il tempo di caricamento l'ho misurato a mano (con lo smartphone) fino alla visualizzazione del desktop di KDE, notoriamente abbastanza pesante all'avvio. Considerate quindi il tempo come maggiorato di qualcosa compreso tra 0,2 e 0,5 secondi (il tempo di coordinazione occhio-mano), quindi al massimo togliete un minimo di tempo.

Situazione base: peso di 2.9 MB e tempo di circa 28,8 secondi.

xz : peso di 18 MB e tempo di circa 30,2 secondi. (xz è una compressione pesante e lenta da decomprimere)
gzip : peso di 20.3 MB e tempo di circa 28,5 secondi.
lzma : peso di 17,4 MB e tempo di circa 29.5 secondi (come potete vedere è il più leggero ma non è velocissimo)
bzip2 : peso di 19.6 MB e tempo di circa 30.3 secondi

Da qui in poi, vista l'indubbia convenienza di gzip, i test sono stati fatti solo con gzip ed eliminando vari moduli.

Togliendo "lvm", "mdraid", "dm" e "crypt": peso di 17.8 MB e tempo di 27.5 secondi.
Togliendo "lvm", "mdraid", "dm", "crypt", "virtfs" e "fcoe": peso di 14.0 MB e tempo di 27 secondi.

Tutti i test sono fatti con partizione di boot formattata in etx2, quindi probabilmente con ext4 probabilmente il boot è più veloce, conseguentemente il guadagno potrebbe essere più risicato.
Che dite ne vale la pena? Senza sforzi abbiamo ottenuto 2 secondi in meno al boot, con un (forse) ampio margine d'azione ancora possibile e riducibili ulteriormente ottimizzando il sistema di init (magari usando anche l'ottimo systemd).

Modificare il bootloader

C'era davvero qualuno che credeva che non avremmo modificato un file del bootloader? :asd:
A parte gli scherzi non è niente di difficile, in quanto modificheremo un semplicissimo file di testo.
Utilizzando GRUB 0.97 (o Legacy che dir voglia) il file da modificare è /boot/grub/menu.lst (è il file che contiene le varie voci che visualizzate nel bootloader). Modifichiamo la linea come segue:

Codice:
[CENTER]# (1) Arch Linux Dracut
title  Arch Linux Dracut
root   (hd0,2)
kernel /vmlinuz-linux root=/dev/sda4 ro
initrd /initramfs-linus.img[/CENTER]

Spieghiamo un po' come utilizzarla al meglio.
La linea:

Codice:
#(1) Arch Linux Dracut

Il numero 1 indica la posizione che occuperà nel bootloader, in questo caso la seconda (ricordate che in informatica il primo numero è SEMPRE lo 0, a meno di scelte progettuali diverse del programmatore). Arch Linux Dracut in questa riga non ha nessuna importanza, serve solo a noi per quando modifichiamo il file, in modo da sapere che nelle righe sotto si hanno i file creati con Dracut. Il bootloader IGNORA questa linea in quanto commentata (contiene # all'inizio) ed è bene che rimanga tale. Insomma, potete chiamarla anche pippo (o pippa) non cambierà niente al bootloader.

Codice:
title Arch Linux Dracut

Questo è il nome della linea che vedrete in GRUB. Come sopra chiamarla in modo diverso non cambia niente, ma dato che è ciò che vedremo al boot è sempre meglio dargli un nome che sia riconoscibile al volo no?

Codice:
[CENTER]root   (hd0,2)[/CENTER]

A differenza del termine root all'inizio indica dove si trova la partizione di boot, in questo caso indica il primo hd e terza partizione (ricordate il principio dello 0 come primo numero?). La voce hd DOVREBBE essere indipendente dal tipo di connessione utilizzata dal disco (quindi non cambia in caso di connessione sata, pata, scsi, pci-e).

Se la cartella /boot si trova all'interno della stessa partizione di root ovviamente metterete quel numero. Per controllare il numero della partizione e in che disco si trova potete usare un programma di partizionamento come Ggparted o KDE Partition manager, oppure un metodo più veloce e comunque sicuro è controllare le altre voci in questo menu, dato che automaticamente la distro rileva in che partizione si trova /boot

Codice:
[CENTER]kernel /vmlinuz-linux root=/dev/sda4 ro[/CENTER]

Indica il nome che ha il kernel nella partizione di boot (non c'entra con l'initramfs), nel caso in cui avete un kernel diverso da quello di Arch dovrà prendere, ovviamente, il nome che gli avrete dato. Per controllare basta andare in /boot. Nel caso di un kernel con patch di con kolivas, ad esempio, potrebbe chiamarsi vmlinux-linux-ck.
root=/dev/sda4 ro indica che la partizione di root si trova nel disco sda (se connesso tramite sata, altrimenti sarà diverso, ad esempio hda).
Ricordate la teoria dello 0 come primo numero? Bene, scordatela (per ora ;) ). I progettisti hanno deciso che per gestire le partizioni su connessione sata era meglio iniziare con il numero 1. Quindi la 4a partizione corrisponde a sda4.

"ro" al termine indica che il kernel deve essere aperto con permessi di sola lettura (a cosa serve avere il kernel con permessi di scrittura per il funzionamento del PC?).

Bene, ora passiamo all'ultima linea:

Codice:
initrd /initramfs-linus.img

Questa è la riga che ci interessa di più, infatti se per le altre linee un copia incolla da un'altra voce presente in quel file è più che sufficente, per questa dovrete inserire il nome che avrete deciso di dare all'initramfs tramite dracut.
Io che l'ho chiamata initramfs-linus.img (ricordate che l'originale era linux, ho cambiato la "x" con "s" perchè molti che sentono "linux" chiedono se si tratti di un DJ. :D ).
Configurare dracut.rc

Il file dracut.rc si trova all'interno /etc. L'altra opzione che abbiamo è creare più profili e inserirli in /etc/dracut.conf.d . Badate bene che i file di configurazione all'interno della cartella /etc/dracut.con.d quando verrà lanciato il programma "sovrascriveranno" le impostazioni del dracut.rc "standard". In questo modo potete creare una sola configurazione di base e delle configurazioni minori che apporteranno solo qualche modifica.

Cosa possiamo impostare da dracut.conf:
1 - La riduzione dell'initramfs per far sì che sia più leggera e che contenga file relativi solo al nostro PC. è possibile ridurre più di 12 MB in questo modo.
2 - Impostare le interfacce che useremo per connetterci a Internet e il metodo utilizzato. Es: eth0 e dhcp. E' altresì possibile impostare il mac address​
3 - Le impostazioni della lingua, dato che di base dracut le include tutte, risparmieremo circa 700kb di spazio con questo metodo. Dracut funziona lo stesso senza impostazioni, ma mentre crea l'initramfs darà un avvertimento. Possono anche essere impostate cose esotiche come il font della console e la mappatura sia della tastiera che del tipo di codifica utilizzata. Per comodità utilizzeremo la codifica Unicode.
4 - Omettere o aggiungere moduli di dracut o propri, sia del kernel che del firmware, qualora quest'ultimo sia installato.

...To be continued


Note di Licenza

Questa guida è rilasciata con licenza Creative Commons attribution non commercial share alike 3.0 (CC BY-NC-SA 3.0).
E' possibile copiare, modificare, e ripostare la guida con scopi non commerciali a patto che venga citato l'autore della guida, con annesso link a codesta guida.
Ogni abuso sarà punibile.

cc-by-nc-sa.webp

Dracut, creatore di initramfs by winebar is licensed under a Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported License
 
Ultima modifica:
Non ho ancora avuto il tempo di leggerla, sono in ufficio. Ma lo farò sicuramente entro oggi.
Nel frattempo aggiungo il link al topic ufficiale delle guide, se non hai niente in contrario.
:thanks:
 
Non ho ancora avuto il tempo di leggerla, sono in ufficio. Ma lo farò sicuramente entro oggi.
Nel frattempo aggiungo il link al topic ufficiale delle guide, se non hai niente in contrario.
:thanks:

Addirittura nel topic delle guide? :trotta:
Non mi sarei mai aspettato un'accoglienza del genere. :thanks:

Probabilmente una volta finita questa (e ci vorrà un po') farò anche una guida su systemd, dato che è un init replacement "reale", e a quanto pare su Arch in futuro verrà spostato su core (da AUR pian piano i pacchetti stanno finendo tutti su core). Senza contare il fatto che upstream c'è stato il merge tra udev e systemd (arch li mantiene entrambi al momento).

Piccolo avviso: per un'ottimizzazione veramente pesante del tutto ci vuole molta, ma molta pazienza. Al termine è sempre possibile configurare l'rc del programma, quindi al rilascio dei nuovi kernel si può sempre riutilizzare.
Di conseguenza se lo fate SOLO per velocizzare il boot consiglio di fare solo i passaggi più veloci, se intendete conoscere un po' meglio il funzionamento dell'os a bassissimo livello continuate pure.
Giusto per capirci: all'interno di base vengono inseriti TUTTI i moduli relativi alle varie tastiere (e lingue) che ci sono in giro per il mondo, quindi questa è un'ottimizzazione che richiede parecchio tempo per dare i suoi frutti, e difficilmente sarà un guadagno nettissimo in termini prestazionali.
 
Ultima modifica:
lascia c osi :)

comunque installato e marciante

Ok, poi stasera continuo la guida. Ora installo systemd, in modo da poter sfruttare systemd-analyze per avere tempi non calcolati "ad minchiam". ;)

Edit: ho un piccolo problema con systemd, che non mi carica KDE all'avvio (nonostante abbia seguito il wiki inglese alla lettera).
Provo a chiedere sul forum di Arch (dato che è specifico per la distro ;) ) e spero di tornare all'opera il prima possibile.
Centoventicinque, ho visto che di la ci sei anche tu (mi sono appena iscritto :D ).


Ragazzi, non mi sono dimenticato della guida.
Le intenzioni sono sempre quelle. E' solo che sto studiando per gli esami, quindi studiarmi per bene Dracut (cosa che ritengo essenziale per una guida esaustiva) mi viene un po' difficile.
Da martedì sono a disposizione per continuare.

Chagelog, license added.
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top