## page was renamed from LorenzoGaruti/RoUbuntu #format wiki #LANGUAGE it <
> <> <> = Introduzione = Questa guida spiega come avviare '''Ubuntu''' in modalità sola lettura, eseguendo il boot dalla ram anziché dal disco fisso. Ciò può risultare utile per coloro che necessitano di rendere disponibile '''Ubuntu''' in contesti pubblici come per esempio gli internet cafè, di modo che, disponendo di postazioni multi-utente o ad accesso libero, le applicazioni e le configurazioni non vengano modificate dall'utente. Al termine della seguente procedura, il sistema sarà composto dalla partizione '''/''' (`root`) montata su `tmpfs`. Saranno inoltre create in fase di avvio, all'interno di `tmpfs`, due cartelle: * in `/ro` sarà presente la partizione '''/''' (`root`) in sola lettura; * in `/rw` saranno presenti i file che saranno modificati dall'utente durante l'attività della macchina. = Preparare il sistema = Un installazione di '''Ubuntu''' funzionante e tutto il software che si ritiene necessario fornire all'utente. {{{#!wiki tip E' consigliabile personalizzare il proprio sistema __prima__ di proseguire. Benché sia possibile riportare il sistema in condizioni di lettura e scrittura, risulta più comodo preparare prima il sistema finito.}}} E' necessario risolvere una serie di problematiche che si andrebbero a creare in modalità sola lettura. 0. Con un editor di testo e con i [[AmministrazioneSistema/Sudo|privilegi di amministrazione ]] aggiungere la seguente riga al file `/etc/sysctl.conf`: {{{ kernel.yama.protected_nonaccess_hardlinks = 0 }}} al fine di consentire un corretto funzionamento dell'audio e per evitare che ''gnome-settings-daemon'' utilizzi il 100% del processore. 0. Con i [[AmministrazioneSistema/Sudo|privilegi di amministrazione ]], disabilitare all'avvio il servizio ''apparmor'': {{{ sudo update-rc.d apparmor disable }}} 0. Spostare gli script posti nella cartella `/etc/apparmor.d` in una cartella di backup in modo da disabilitarli ma averli disponibili all'occorrenza: {{{ sudo mv /etc/apparmor.d /etc/apparmor.d_disable }}} Questa modifica è necessaria in quanto, viceversa, il ''dhclient'' non configura la rete correttamente. = Configurazione = == Creazione script == 0. Con un editor di testo e con i [[AmministrazioneSistema/Sudo|privilegi di amministrazione ]] creare all'interno della cartella `/etc/initramfs-tools/hooks` il file `ro_root`: {{{ sudo nano /etc/initramfs-tools/hooks/ro_root }}} 0. Inserire al suo interno il seguente script: {{{ #!/bin/sh PREREQ='' prereqs() { echo "$PREREQ" } case $1 in prereqs) prereqs exit 0 ;; esac . /usr/share/initramfs-tools/hook-functions manual_add_modules aufs manual_add_modules tmpfs copy_exec /bin/chmod /bin }}} 0. Rendere il file eseguibile: {{{ sudo chmod +x /etc/initramfs-tools/hooks/ro_root }}} 0. All'interno della cartella `/etc/initramfs-tools/scripts/init-bottom` creare un altro file `ro_root` e inserire il seguente contenuto: {{{ #!/bin/sh PREREQ='' prereqs() { echo "$PREREQ" } case $1 in prereqs) prereqs exit 0 ;; esac # Boot normally when the user selects single user mode. if grep single /proc/cmdline >/dev/null; then exit 0 fi ro_mount_point="${rootmnt%/}.ro" rw_mount_point="${rootmnt%/}.rw" # Create mount points for the read-only and read/write layers: mkdir "${ro_mount_point}" "${rw_mount_point}" # Move the already-mounted root filesystem to the ro mount point: mount --move "${rootmnt}" "${ro_mount_point}" # Mount the read/write filesystem: mount -t tmpfs root.rw "${rw_mount_point}" # Mount the union: mount -t aufs -o "dirs=${rw_mount_point}=rw:${ro_mount_point}=ro" root.union "${rootmnt}" # Correct the permissions of /: chmod 755 "${rootmnt}" # Make sure the individual ro and rw mounts are accessible from within the root # once the union is assumed as /. This makes it possible to access the # component filesystems individually. mkdir "${rootmnt}/ro" "${rootmnt}/rw" mount --move "${ro_mount_point}" "${rootmnt}/ro" mount --move "${rw_mount_point}" "${rootmnt}/rw" # Make sure checkroot.sh doesn't run. It might fail or erroneously remount /. rm -f "${rootmnt}/etc/rcS.d"/S[0-9][0-9]checkroot.sh }}} 0. Rendere il file eseguibile, digitando il seguente comando: {{{ sudo chmod +x /etc/initramfs-tools/scripts/init-bottom/ro_root }}} == Configurazione initrd == Prima di procedere è consigliato creare una copia di backup del file `initrd.img-$VERSIONE` in modo da avere un modo più veloce di ripristinare il sistema in caso si avesse bisogno di un sistema in lettura e scrittura. Per creare al copia di backup digitare il seguente comando in una finestra di terminale: {{{ cd /boot sudo cp initrd.img-$VERSIONE initrd.img-$VERSIONE.rw }}} Sostituire `$VERSIONE` con la versione del kernel in uso. Creare ora un nuovo `initrd` per il sistema in modalità sola lettura: {{{ update-initramfs -u }}} = Montare il filesystem in lettura e scrittura = Per montare il filesystem in modalità lettura e scrittura digitare il seguente comando: {{{ sudo mount -o remount,rw /ro }}} In questo modo la cartella `/ro` sarà scrivibile. A questo punto, copiare i file modificati nel loro relativo percorso sotto la cartella `/ro` e rimettere i filesystem in sola lettura: {{{ sudo mount -o remount,ro /ro }}} È possibile inoltre installare nuovi pacchetti anche se il sistema è in sola lettura. Dopo aver reso scrivibile la cartella `/ro` attraverso il comando precedente, entrare nella cartella `/ro`, tramite il comando ''chroot'': {{{ chroot /ro }}} A questo punto installare i pacchetti come di consueto. Per uscire dal ''chroot'' e rimettere il sistema in sola lettura digitare il seguente comando: {{{ exit }}} ---- CategoryAmministrazione CategoryDaRevisionare