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