Por que o 'slapconfig -backupdb' não está criando imagem de disco quando executado a partir do cron no Snow Leopard Server?

3

Há alguns anos, eu criei o seguinte script expect para executar backups do Open Directory sob o Tiger Server e também funcionou bem com o Leopard Server:

#!/usr/bin/expect -f

set date [timestamp -format "%Y-%m-%d"]
set archive_path "path/to/you/backup/dir"
set archive_password "password"
set archive_name "opendirectory_backup"

spawn /usr/sbin/slapconfig -backupdb $archive_path/$archive_name-$date
expect "Enter archive password"
send "$archive_password\r"
expect eof

É um dos poucos scripts que ainda vive no crontab do root, em oposição a ter um launchd plist. É rwx por raiz apenas por motivos óbvios de segurança.

Agora, o problema é que atualizei meu Open Directory Master para o Mac OS X 10.6.4 Snow Leopard Server há algumas semanas e ele não funciona desde ... quando executado pelo cron. Se eu fizer login como usuário root e executá-lo manualmente, ele funcionará corretamente e criará a imagem de disco criptografada resultante. Quando executado pelo cron, ele passa pelos movimentos completos (incluindo a saída em /Library/Logs/slapconfig.log que corresponde àquela de quando é executado manualmente), mas o arquivo de imagem de disco nunca é criado. No entanto, em '/var/log/system.log/, vejo a seguinte saída:

Jul 23 03:00:08 servername hdiejectd[93114]: running
Jul 23 03:00:11 servername diskimages-helper[93111]: -frameworkCallbackWithDictionary: threw exception calling home.
Jul 23 03:00:11 servername diskimages-helper[93111]: threw exception reporting results back to framework.
Jul 23 03:00:21 servername hdiejectd[93114]: quitCheck: calling exit(0)

Quando executado manualmente, essa saída é a seguinte (sem diskimages-helper exceções):

Jul 23 14:29:27 servername hdiejectd[7776]: running
Jul 23 14:29:40 servername hdiejectd[7776]: quitCheck: calling exit(0)

Em ambos os casos, não há usuário logado via GUI. Eu tenho alguns amigos que estão executando o mesmo script em seus OD Masters e ele também não roda mais pelo cron desde a atualização para o Snow Leopard Server.

Eu me lembro de alguns problemas com as ferramentas de imagem de disco de linha de comando do Mac OS X que exigiam acesso às chaves, mas não me lembro dos detalhes. Alguma coisa relacionada com isso ficou mais rigorosa no Snow Leopard Server?

Alguma ideia ou sugestão?

    
por morgant 23.07.2010 / 23:08

2 respostas

0

Ok, agora tenho uma solução em funcionamento. Comecei escrevendo um novo script bash (em vez de usar expect ) que envolvia o utilitário serveradmin da Apple (sendo ele próprio um wrapper em torno do slapconfig -backupdb que eu estava chamando diretamente de the expect script ):

#!/bin/bash

dst="/path/to/your/backup/directory"
pass="password"

host=$(hostname)
date=$(date +%Y-%m-%d-%H%M)

serveradmin command <<-EOC
    dirserv:backupArchiveParams:archivePassword = $pass
    dirserv:backupArchiveParams:archivePath = ${dst}/od_backup-${host}-${date}
    dirserv:command = backupArchive

EOC

Ele se baseia no script , mas usa bash "here document" em vez de criar um arquivo no disco contendo os comandos serveradmin (incl. senha em texto puro) a serem executados.

Este funcionou bem quando executado a partir da linha de comando, mas ainda não foi criado .sparseimage quando foi executado a partir do cron. Então, a segunda etapa da minha correção foi, como mencionei acima nos comentários da minha pergunta original, criar um launchd plist para executá-lo:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>tld.domain.od_backup</string>
        <key>ProgramArguments</key>
        <array>
            <string>/var/root/sbin/od_backup</string>
        </array>
        <key>StartCalendarInterval</key>
        <dict>
            <key>Hour</key>
            <integer>2</integer>
            <key>Minute</key>
            <integer>30</integer>
        </dict>
    </dict>
</plist>

Naturalmente, carreguei o plist w / sudo launchctl load /Library/LaunchDaemons/tld.domain.od_backup.plist (o domínio & tld foi alterado para proteger a identidade). E, parece ser executado corretamente quando chamado por launchd . O script original também pode ter sido executado corretamente se for chamado por launchd , mas eu não testei isso.

    
por 19.11.2010 / 21:18
4

Eu experimentei o mesmo problema depurado no script original, para mim, o padrão esperava que o tempo limite de 10 segundos estivesse fazendo com que o comando hdiutil incorporado fosse abortado. Eu consertei isso adicionando:

tempo limite definido 120

No script esperado. Agora o script está funcionando bem novamente. Meu script:

#!/usr/bin/expect -f

set date [timestamp -format "%Y-%m-%d"]
set archive_path "path/to/you/backup/dir"
set archive_password "password"
set archive_name "opendirectory_backup"
set timeout 120

spawn /usr/sbin/slapconfig -backupdb $archive_path/$archive_name-$date
expect "Enter archive password"
send "$archive_password\r"
expect eof
    
por 17.02.2012 / 13:32