[arch-general] Location of the pacman database

Tobias Hunger tobias.hunger at gmail.com
Sun Sep 14 18:30:47 EDT 2014


Hi Nowaker,

I am the one with the images, not Yamakaky:-)

On Sun, Sep 14, 2014 at 11:15 PM, Nowaker <enwukaer at gmail.com> wrote:
> What are these significant changes more than just the pacman database
> that would make users go through trouble? In #41863 I see three parts:
>
> - move /var/lib/pacman/local/ to /usr
> - move the default pacman.conf and mirrorlist to /usr/share
> - provide tmpfiles.d to copy those files to /etc
>
> If I'm not mistaken, /usr/share and tmpfiles.d are really trivial and
> wouldn't affect users in any way. That'd be a few additional files
> somewhere in the filesystem without any effect on existing machines. Or
> I'm wrong?

Nope, these two are really minor tasks. I do not think it makes sense
to split these up.

>> I then store the store the physical machine images in ostree (I am
>> currently changing that to the subvolume approach systemd recently
> suggested).
>
> Yamakaky, can you please provide some more info on this?
>
> And generally, could you show me your workflow - the shell commands in
> particular? That would explain things better than thousands of words. :-)

I have everything in a git repo, and that repo can basically recreate
(almost) all my machines from scratch -- minus the home directories
and a couple of server files I do backups off. I think you will
understand that I do not want that repository public:-)

If there is interest I can put "splitting the actual scripts from the
system configuration" onto my todo list.

Basically (almost) all my machines are created from scratch each
night. The simplified version is this:

For each machine:
1) Create a temp directory T
2) mount a new usr:something:new-snapshot btrfs subvolume on $T/usr
3) Run pacstrap to install all packages defined for that system into
$T, making sure the package DB ends in $T/usr/lib/pacman/db
4) Apply any configuration changes (create users, whatever)
5) Move $T/etc to $T/usr/share/factory/etc
6) Copy kernel and initrd to $T/usr/somewhere

Now the new arch snapshot is ready to be used:-).

I only need to copy that on the target machine it is intended for
(using btrfs send/receive, but that is still untested), copy the
kernel/initrd from that snapshot into /boot and create a new boot
loader entry for the root:my-arch:foo root subvolume I already have on
that machine with the new usr:something:new-snapshot subvol as its
/usr.

Reboot. As part of every reboot something like a "factory reset"
happens (I wipe /etc and copy the stuff in the factory directory
during early boot), so that /etc is always in the state it was
intended to be.

To get back to an earlier usr-snapshot I just reboot again and select
one of the older bootloader entries.

Does that help?

Actually the process currently still involves ostree to
store/distribute and install directory images. I did describe the
process I am currently moving to, even though it is not yet fully
tested. It is a lot simpler to describe.

PS: Yeap, my base systems are pretty static: I do want my basic setup
to always work. The mutable parts of my system are the chroots I
develop in. I can create those with the exact same system as my base
systems, but I can also just run pacman in there to add more stuff.

Best Regards,
Tobias


More information about the arch-general mailing list