[PATCH] base-files: add option to make /var persistent

Alberto Bursi bobafetthotmail at gmail.com
Sat Aug 7 00:05:58 PDT 2021



On 07/08/21 02:46, Stijn Tintel wrote:
> On 7/08/2021 02:56, Alberto Bursi wrote:
>>
>>
>> On 06/08/21 21:27, Stijn Tintel wrote:
>>> In OpenWrt, /var is symlinked to /tmp by default. This is done to reduce
>>> the amount of writes to the flash chip, which often don't have the
>>> greatest durability. As a result, things like DHCP or UPnP lease files,
>>> are not persistent across reboots.
>>>
>>> Since OpenWrt can run on devices with more durable storage, it makes
>>> sense to have an option for a persistent /var. Add an option to make
>>> /var persistent. When enabled, /var will no longer be symlinked to /tmp,
>>> but /var/run will be symlink to /tmp/run, as it should contain only
>>> files that should not be kept during reboot. The option is off by
>>> default, to maintain the current behaviour.
>>>
>>
>> Since it does not really need to recompile anything, I think it
>> can/should be handled as a package, not as a compile option.
>>
>> When you install the package these operations are executed, if you
>> remove the package they are undone.
> 
> Removing /var at runtime, which basically happens when you remove the
> symlink, is very ugly and has a huge potential for breakage. Having it
> as a build option also avoids users from accidentally installing it as a
> package. If you disagree, please elaborate further, including measures
> to avoid random breakage caused by removing /var at runtime.
> 

My focus was more on "not using a compile option", I don't think it's 
necessary to do this at runtime.

A simple measure to avoid breakage would be to add something that runs 
on boot (either initscript or preinitscript) to do these changes before 
any other service that needs that folder is started.
So you install the package and then reboot.

This approach also allows to make this a permanent change (not an 
optional package) and control this function with UCI config, just change 
the setting and reboot.

IMHO this is good enough for most users, and much better than having to 
recompile or do the change manually.


For the sake of completeness, (also shameless plug about my project):
A more complex way to do it at runtime that avoids breakage is bind 
mounting the original folder somewhere else so you can sync the contents 
with the new/empty folder, then restarting all services that need it.
See
https://github.com/bobafetthotmail/folder2ram/blob/master/debian_package/sbin/folder2ram#L658
(the service restart is not included in that script since it has no way 
of knowing what services need the folders, this operation is left to the 
user or for OpenMediaVault it's handled by the plugin that also writes 
the configuration)


> Thanks,
> Stijn
> 
> 
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel at lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
> 



More information about the openwrt-devel mailing list