On Wed, 16 May 2018 at 16:33:08 +0200, Antoine Pietri wrote: > On Wed, May 16 at 13:05 PM, Jérémy Rosen <jeremy.rosen at smile.fr> wrote: > > hmm, I think you could have the whole /var as a tmpfs and use > > systemd-tmpfiles (man:tmpfiles.d) to initialize /var at startup by > > copying some template directory from a read-only location (typicalli in > > /usr) > > That's another interesting workaround, but ideally we'd like to let > all the packages install stuff in /var/lib like they would normally, > and only put some tmpfs in /var after that. The purpose of /var is that it contains variable data, so a read-only /var seems like a rather contradictory goal? I think you'd really be better off redirecting the packaged or package-manager-produced contents of /var to /usr/var or /usr/share/factory/var or something (perhaps using your package manager's equivalent of dpkg-divert if it has one), and using systemd-tmpfiles to populate a tmpfs with copies or symbolic links (or possibly bind-mounting selected directories from the read-only copy, if entire subtrees like /var/lib/dpkg are read-only except during package manager operations). Projects like libostree and rpm-ostree might have some useful concepts or code for managing immutable, read-only rootfs or /usr deployments, since that's what they do: in an ostree-based OS, /usr is an atomically-updated immutable tree, directories like /var and /home are locally-maintained, and /etc is a three-way merge between the old /usr/etc, the new /usr/etc and the local /etc. smcv