Onde está a documentação oficial sobre os mecanismos de bloqueio do etckeeper, apt e / ou dpkg?

1

Contexto:

Deseja colocar um bloqueio na atividade do gancho etckeeper / apt durante o backup especial.

O objetivo é preservar a integridade total do pacote, por exemplo, aguardar a conclusão da instalação de qualquer pacote e impedir que a nova instalação seja iniciada até que o backup especial seja concluído.

Script de shell encontrado em cron que parece estar tentando bloquear

/var/cache/etckeeper/packagelist.pre-install

mas na verdade não é executado atomicamente e por isso é falho. Presumo que o script shell cron faça parte da instalação do Ubuntu 16.04 , e não parte da versão etckeeper . Código de bloqueio com falhas mostrado abaixo.

Pesquisou a documentação do etckeeper sobre o uso de /var/cache/etckeeper/packagelist.pre-install como arquivo de bloqueio. Não encontrei documentação. Mas encontrei uma parte do arquivo de script que grava em /var/cache/etckeeper/packagelist.pre-install sem tratá-lo como um arquivo de bloqueio. Neste momento, estou supondo que /var/cache/etckeeper/packagelist.pre-install não se destina a servir como uma interface de arquivo de bloqueio para etckeeper . Script interno do Etckeeper que não trata /var/cache/etckeeper/packagelist.pre-install como um arquivo de bloqueio mostrado abaixo.

Pergunta 1: Existe (e, se sim, onde está) documentação sobre o mecanismo de bloqueio do etckeeper ou um portal de desenvolvedores para emitir uma solicitação de esclarecimento?

Há muitas perguntas e muita discussão sobre os sites stackexchange sobre o uso de

/var/lib/apt/lists/lock    (we call it apt lock below)

e

/var/lib/dpkg/lock     (we call it dpkg lock below)

como bloqueios para apt e dpkg respectivamente. Todas as comunicações estão relacionadas a travas presas, como diagnosticá-las e como soltá-las. No entanto, eu não acho nenhuma referência à documentação oficial do apt e do dpkg especificando que os arquivos de bloqueio usam como uma interface formal.

Pergunta 2: Existe (e, se sim, onde está) documentação sobre o mecanismo de bloqueio do apt e / ou o mecanismo de bloqueio do dpkg como interfaces públicas?

Script shell de tentativa de bloqueio com falha, provavelmente fornecido pelo Ubuntu 16.04 :

$ sudo cat /etc/cron.daily/etckeeper
#!/bin/sh
set -e
if [ -x /usr/bin/etckeeper ] && [ -e /etc/etckeeper/etckeeper.conf ]; then
    . /etc/etckeeper/etckeeper.conf
    if [ "$AVOID_DAILY_AUTOCOMMITS" != "1" ]; then
        # avoid autocommit if an install run is in progress
        lockfile=/var/cache/etckeeper/packagelist.pre-install
        if [ -e "$lockfile" ] && [ -n "$(find "$lockfile" -mtime +1)" ]; then
            rm -f "$lockfile" # stale
        fi
        if [ ! -e "$lockfile" ]; then
            AVOID_SPECIAL_FILE_WARNING=1
            export AVOID_SPECIAL_FILE_WARNING
            if etckeeper unclean; then
                etckeeper commit "daily autocommit" >/dev/null
            fi
        fi
    fi
fi

Etckeeper scipt shell interno escrevendo para packagelist.pre-install e não o tratando como um bloqueio - daí eu não acho que foi planejado como uma interface de bloqueio.

$ sudo cat /etc/etckeeper/pre-install.d/10packagelist 
#!/bin/sh
# This list will be later used when committing.
mkdir -p /var/cache/etckeeper/
etckeeper list-installed > /var/cache/etckeeper/packagelist.pre-install
etckeeper list-installed fmt > /var/cache/etckeeper/packagelist.fmt
    
por Craig Hicks 12.05.2018 / 03:44

1 resposta

3
  1. A tarefa agendada está tratando /var/cache/etckeeper/packagelist.pre-install como evidência de que uma instalação está sendo processada, por isso ainda não deve arquivar qualquer coisa. Esse arquivo não deve ser um arquivo de bloqueio, mas o trabalho do cron está usando isso como um substituto.

    No entanto, não me preocupo particularmente com etckeeper e quaisquer ficheiros de bloqueio que tenha ou não tenha. Se você quiser um backup consistente de uma árvore etckeeper gerenciada, use os recursos do VCS (mas não esqueça de nenhum arquivo ignorado).

  2. Os dpkg locks são documentados (embora brevemente) como interfaces públicas em frontend.txt ( /usr/share/doc/dpkg-dev/frontend.txt em dpkg-dev ).

por 12.05.2018 / 08:44