Como gerenciar partições montadas (fstab + pontos de montagem) do fantoche

14

Eu quero gerenciar as partições montadas a partir do fantoche, o que inclui a modificação de /etc/fstab e a criação dos diretórios usados como pontos de montagem. O tipo de recurso mount atualiza fstab bem, mas usar file para criar os pontos de montagem é um pouco complicado.

Por exemplo, por padrão, o proprietário do diretório é root e se a raiz (/) da partição montada tiver outro proprietário, o fantoche tentará alterá-lo e eu não quero isso . Eu sei que posso definir o proprietário desse diretório, mas por que devo me importar com o que está na partição montada? Tudo que eu quero fazer é montá-lo. Existe uma maneira de fazer o fantoche não se importar com as permissões do diretório usado como ponto de montagem?

Isso é o que estou usando agora:

define extra_mount_point(
    $device,
    $location = "/mnt",
    $fstype = "xfs",
    $owner = "root",
    $group = "root",
    $mode = 0755,
    $seltype = "public_content_t"
    $options = "ro,relatime,nosuid,nodev,noexec",
) {
    file { "${location}/${name}":
        ensure  => directory,
        owner   => "${owner}",
        group   => "${group}",
        mode    => $mode,
        seltype => "${seltype}",
    }

    mount { "${location}/${name}":
        atboot  => true,
        ensure  => mounted,
        device  => "${device}",
        fstype  => "${fstype}",
        options => "${options}",
        dump    => 0,
        pass    => 2,
        require => File["${location}/${name}"],
    }
}

extra_mount_point { "sda3": 
    device   => "/dev/sda3",
    fstype   => "xfs",
    owner    => "ciupicri",
    group    => "ciupicri",
    $options => "relatime,nosuid,nodev,noexec",
}

Caso seja importante, estou usando o fantoche-0.25.4-1.fc13.noarch.rpm e o servidor-fantoche-0.25.4-1.fc13.noarch.rpm.

P.S. undef funciona bem para proprietário, grupo e permissões, mas não para o SELinux. Se as partições já estão montadas, o fantoche reclama:

puppetd[18052]: Failed to set SELinux context system_u:object_r:public_content_t:s0 on /mnt/sda3
puppetd[18052]: (/File[/mnt/sda3]/seluser) seluser changed 'unconfined_u' to 'system_u'
puppetd[18052]: Failed to set SELinux context unconfined_u:object_r:mnt_t:s0 on /mnt/sda3
puppetd[18052]: (/File[/mnt/sda3]/seltype) seltype changed 'public_content_t' to 'mnt_t'

As permissões da partição montada são:

drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 /mnt/sda3/

enquanto as permissões de ponto de montagem criadas pelo fantoche são:

 drwxr-xr-x. root root system_u:object_r:mnt_t:s0       /mnt/sda3/

P.P.S. Eu relatei um bug para esse comportamento estranho.

    
por Cristian Ciupitu 27.05.2010 / 14:19

3 respostas

9

Você pode dizer ao Puppet para não gerenciar um determinado metaparameter definindo-o como undef .

file { "${location}/${name}":
    ensure                  => directory,
    owner                   => undef,
    group                   => undef,
    mode                    => undef,
    selinux_ignore_defaults => true,
}

Nesse caso, se o diretório não existir antes da montagem, ele será criado como o usuário e o grupo que puppetd foi iniciado como (presumivelmente root: wheel) e com um umask padrão. O Puppet não se preocupa com o que é definido no momento da criação ou em qualquer execução subsequente.

Como alternativa, se você deseja trocar um pouco de complexidade por garantia, você pode usar um fato personalizado para determinar quais são as montagens ativas e uma instrução switch para definir as permissões de diretório, dependendo de ser pré ou pós-montado.

    
por 28.05.2010 / 00:16
7

Não é realmente uma resposta, mas isso foi corrigido no fantoche 2.6.7: link

    
por 04.11.2011 / 00:04
2

Eu tenho um fato personalizado (funciona apenas com o ATM do Linux) que retornará todas as montagens locais atualmente montadas em um sistema. É terrivelmente simples, mas funciona para mim - parece que você pode encontrar algum uso para ele também. De qualquer forma, eu joguei no github: link

    
por 13.11.2011 / 05:02

Tags