0

I want to backup the pacman sync databases after an execution of pacman -Sy, creating "restore points" which pacman -Suu can use to reverse a failed system upgrade. Further background can be found here.

I want to manually lock the pacman databases via/var/lib/pacman/db.lck to ensure that the databases are not changed while being saved / restored.

How to I atomically check/create /var/lib/pacman/db.lck?

  • 1
    You don't. Let pacman do its job. – jasonwryan Feb 17 '17 at 6:01
  • @jasonwryan pacman doesn't do the job of saving and restoring versions of databases, so I don't follow you. – Tom Hale Feb 17 '17 at 6:35
  • You don't restore databases; you restore packages and let pacman update the database accordingly. – jasonwryan Feb 17 '17 at 6:37
  • I've updated the question to explain why I do want to restore databases. – Tom Hale Feb 17 '17 at 7:22
1

Locking the databases

mkdir is an atomic operation which will avoid concurrency issues.

sudo mkdir /var/lib/pacman/db.lck 2>/dev/null && echo Got lock || echo Locked out

I tested the above while running pacman -Syy in another shell. The output is "Locked out" while pacman is running, and "Got lock" after it completes.

Reciprocally, pacman -Syy will say that it can't lock the database while the directory exists.

Backup

I wrote a paranoia_level=9 bash script which safely saves the sync databases to directories under /var/lib/pacman/backup named by ISO8601 date.

The script also saves non-dependency packages lists of:

  • all packages
  • sync packages
  • foriegn (eg AUR) packages

Usage of backups

Uset the -b option to specify a different location for the databases, eg:

pacman -Suu -b /var/lib/pacman/backup/2017-02-26T12:55:26+07:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.