Anteprima della patch da 200 righe di Linux

Quelle che seguono sono le istruzioni di Lennart Poettering per implementare sui sistemi RedHat 6 /CentOS e Ubuntu l’anteprima della patch da 200 righe di Linux.

Come Linus stesso ha chiarito, questo è il metodo con il quale sono state condotte le prime prove della patch, senza apportare modifiche al kernel. La patch che è seguita è stata la conseguenza dell’esito positivo di queste prove.

Sto scrivendo questo testo dopo aver seguito le indicazioni dettagliate di seguito. Non sto notando nulla di evidente, anche se non credo che Thunderbird e Firefox riescano a mettere in crisi un sistema Ubuntu a 64 bit con 6 Gb di RAM e controller RAID Adaptec.

Due parole di avviso prima di procedere. State per modificare dei parametri di funzionamento del kernel, siate ben consci di quello che state per fare e fatelo con estrema cura. Va da sé che è sempre bene avere ben presente un metodo per annullare le modifiche che state per fare, anche in caso di impossibilità di fare il boot con il PC. La modifica interessa l’utilizzo interattivo di Linux e non ha effetto sui server.

Questa è la procedura per RedHat 6 da non usare su Ubuntu.

Aggiungere questo a ~/.bashrc:

if [ "$PS1" ] ; then
    mkdir -m 0700 /sys/fs/cgroup/cpu/user/$$
    echo $$ > /sys/fs/cgroup/cpu/user/$$/tasks
fi

Ed eseguire una sola volta con i privilegi di root questi comandi:

mount -t cgroup cgroup /sys/fs/cgroup/cpu -o cpu
mkdir -m 0777 /sys/fs/cgroup/cpu/user

Riavviare il computer per attivare la modifica.

Questa, invece è la proicedura da usare su Ubuntu.

Aggiungere, con i privilegi di root, queste righe a /etc/rc.local prima della riga exit 0:

mkdir -p /dev/cgroup/cpu
mount -t cgroup cgroup /dev/cgroup/cpu -o cpu
mkdir -m 0777 /dev/cgroup/cpu/user
echo "1" > /dev/cgroup/cpu/user/notify_on_release
echo "/usr/local/sbin/cgroup_clean" > /dev/cgroup/cpu/release_agent

Verificare che /etc/rc.local sia eseguibile.

Aggiungere questo a ~/.bashrc:

if [ "$PS1" ] ; then
    mkdir -m 0700 /dev/cgroup/cpu/user/$$
    echo $$ > /dev/cgroup/cpu/user/$$/tasks
fi

Eseguire questo comando:

sudo gedit /usr/local/sbin/cgroup_clean

E incollare questo nel testo del file:

#!/bin/sh
rmdir /dev/cgroup/cpu/$1

Salvare il file e renderlo eseguibile con

sudo chmod +x /usr/local/sbin/cgroup_clean

Riavviare il computer per attivare le modifiche.

I più temerari con Ubuntu 10.10 a 64 bit possono scaricare e installare il kernel contenente la patch. (via Web Upd8)


Pubblicato

in

da

Tag:

Commenti

12 risposte a “Anteprima della patch da 200 righe di Linux”

  1. […] 19/11/2010 08:00 – È possibile modificare il kernel per avere un’anteprima della patch. Segnala o […]

  2. Avatar Kurgan

    L’hai provata su ubu 10.10? La patch al kernel o le modifiche userspace? Funziona? Quasi quasi potrei anche tentare di installare il kernel patchato, tanto la probabilita` che mi fotta il file system e` bassa, ho il backup, e si tratta del mio desktop, non di un server.

  3. Avatar Luigi Rosa

    Ho fatto le modifiche userspace cosi’ il kernel segue il suo ciclo di aggiornamenti standard di Ubuntu.

    So far so good

  4. Avatar Fabrizio Vettore

    Negativo per Redhat (CentOS 5.5)
    /sys/fs/cgroup/cpu non esiste neppure a ricompilare il kernel con tutte le opzioni cgroup abilitate.
    Forse Fedora???
    Comunque sembra interessante, almeno per il mio desk che, nonostante il doppio core, è spesso al collasso…. (vmware e acroreader i colpevoli abituali…)
    Aspetto i prossimi sviluppi. Sembra se ne stia parlando molto.

    (Luigi, ad essere pignolo manca il . davanti a bashrc 😉 )

    1. Avatar Luigi Rosa

      /sys/fs/cgroup/cpu te lo crea (o dovrebbe farlo) la parte che aggiungi a ~/.bashrc

      Corretto il punto, grazie.

      1. Avatar Fabrizio Vettore

        Negativo luigi, l’utente comune ovviamente non ha i permessi per creare alcunchè in quel punto…
        Creare le cartelle manualmente da root dubito che serva.
        Manca qualcosa a livello di sistema, ma probabilmente fedora 12 e RHEL6 (waiting for CentOS…) sono già fornite del supporto cgroup e quindi delle cartelle di sistema necessarie.

        1. Avatar Fabrizio Vettore

          Confermo quanto sopra.
          Per completezza allego link alle note di rilascio della RHEL6
          http://www.redhat.com/rhel/server/details/
          dove tra le novità è specificato il supporto CGROUPS del kernel.

  5. Avatar Kurgan

    Ragazzi, “cartelle”? siamo sistemisti Linux, e che cazzo. Sono “directory”. Ah, e samba non e` un servizio, e` un demone.

    1. Avatar Fabrizio Vettore

      ROTFL!
      Quanto è vero!
      Purtoppo molti di noi sono “obbligati” a passare molto tempo a contato con l’utente finale e questo porta immancabilmete all’acquisizione di brutte abitudini linguistiche.
      L’utente windows medio non sa cos’è una directory, se gli parli di samba dice che gli piacciono i balli latino-americani e se gli parli di demoni ti dice di chiamare l’esorcista!

  6. Avatar Alberto Noseda
    Alberto Noseda

    Ho provato la modifica su Ubuntu 10.10 a livello userspace.

    Pero’ se lancio una shell (a questo punto succede anche altrove, ma con la shell lo vedo):

    mkdir: cannot create directory `/dev/cgroup/cpu/user/2633′: No such file or directory
    bash: /dev/cgroup/cpu/user/2633/tasks: No such file or directory

    1. Avatar Fabrizio Vettore

      Controlla di avere la cart… volevo dire directory /dev/cgroup/cpu/user/ . Mi sa che non ce l’hai.

      Dovrebbe essere creata in fase di boot e resa scrivibile da utenti non privilegiati se hai fatto la modifica di cui sopra in
      /etc/rc.local

      1. Avatar Edogaldo
        Edogaldo

        E’ effettivamente un “problema” della patch Ubuntu, succede anche a me: ala chiusura dell’ultima shell il comando “cgroup_clean” (che rimuove la cartella temporanea) viene lanciato due volte: la prima con in input il valore corretto “/user/xyz” e la seconda con in input solo “/user”, questa seconda operazione rimuove anche la cartella “user”…
        Io ho fixato modificando il “cgroup_clean” così:

        #!/bin/sh
        if [ “$1” != “/user” ] ; then
        rmdir /dev/cgroup/cpu/$1
        fi

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *