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

Bas Mevissen abuse at basmevissen.nl
Sat Aug 7 05:19:43 PDT 2021



On 8/7/21 10:40 AM, Stijn Tintel wrote:
> 
> On 7/08/2021 10:05, Alberto Bursi wrote:
>>
>>
>> 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)
>>
> 
> Appreciate the input. It still sounds overly complex compared to my 
> suggestion, especially for something that most users will probably not 
> use. I don't feel comfortable implementing something like that. I'll 
> just keep using my patch locally then, as I have done for almost five 
> years.
> 

I would love to see your patch it in de main tree. It is a nice addition 
for everyone using extroot (like me).

Even without extroot and current flashes, it might be worthwile to 
enable this and make thinks like dhcp leases persistent. In a soho 
network, they don't change that often to wear out a flash.

> 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