Applying local patches after updating FreeBSD source

Maxim Khitrov max at mxcrypt.com
Tue Jan 24 13:39:58 UTC 2012


On Mon, Jan 23, 2012 at 2:13 PM, Maxim Khitrov <max at mxcrypt.com> wrote:
> On Mon, Jan 23, 2012 at 1:25 PM, Matthew Seaman
> <m.seaman at infracaninophile.co.uk> wrote:
>> On 23/01/2012 18:03, Maxim Khitrov wrote:
>>> Hi all,
>>>
>>> When I need to apply a custom patch to a port, I can set EXTRA_PATCHES
>>> make variable in /usr/local/etc/ports.conf (when using portconf), and
>>> the patch will be automatically applied whenever that port is built.
>>> Is there equivalent functionality for building FreeBSD world and
>>> kernel?
>>>
>>> When I run 'make update' in /usr/src, csup overwrites all local
>>> changes. There is a LOCAL_PATCHES variable, but it seems to apply only
>>> to 'make release'.
>>>
>>> If possible, I would like to avoid writing custom scripts for updating
>>> and building world, because at some point I will forget to use the
>>> script and build everything without the patches. How can I preserve
>>> the current behavior of running 'make update && make buildworld
>>> buildkernel' while automatically applying custom patches in between?
>>
>> Check the system sources out of svn?
>>
>> This way, you can apply your patches and the result is automatically
>> merged when you update the sources by 'svn up' -- unless there has been
>> a conflicting commit to the same file, when you may be required to
>> intervene manually.
>
> I don't have subversion installed on any of my servers and that's a
> dependency that I would prefer to do without.
>
> Are there any changes I could make to /etc/make.conf that would allow
> me to execute an arbitrary command after the 'update' task is
> finished?
>
> - Max

For anyone else that might be interested in doing this, the solution
is to create a shell script that is executed instead of csup when
running 'make update'. The script to execute is specified in
/etc/make.conf:

SUP=/root/bin/csup-src

I'm pretty sure that this is safe to do. Just in case, the script
checks the current working directory to make sure that patches are
only applied when updating /usr/src. You could also perform this check
in make.conf.

The script template is below. Feel free to adapt it for your own needs.

----
#!/bin/sh

/usr/bin/csup "$@" || exit
test "`pwd`" = '/usr/obj/usr/src' || exit 0

cd /usr/src
echo '--------------------------------------------------------------'
echo '>>> Applying local patches'
echo '--------------------------------------------------------------'

# <your code here>
----

- Max


More information about the freebsd-questions mailing list