* Hacking Memcached * Prerequisites - autoconf - automake - autotools - libevent * Getting Started After checking out a git repository, you must first run autogen.sh once in order to create the configure script. Next, run the configure script and start doing builds. IE: ./autogen.sh && ./configure && make && make test * Setting up Git Though not required, there are a couple of things you can add to git to help development. ** Pre Commit Hook The pre-commit hook can be used to ensure that your tree passes tests before allowing a commit. To do so, add the following to .git/hooks/pre-commit (which must be executable): #!/bin/sh make test ** Post Commit Hook Because the version number changes on each commit, it's good to use a post commit hook to update the version number after each commit so as to keep the reporting accurate. To do so, add the following to .git/hooks/post-commit (which must be executable) #!/bin/sh ./version.sh ** Running memcached in gdb for tests. By default `make test` will spawn a memcached daemon for each test. This doesn't let you easily drop into gdb or run verbosely. If you export the environment variable T_MEMD_USE_DAEMON="127.0.0.1:11211" the tests will use an existing daemon at that address. * Debugging seccomp issues If new functionality fails when built with seccomp / drop privileges support, it can be debugged in one of two ways: Run the memcached via strace. For example: strace -o /tmp/memcache.strace -f -- ./memcached less /tmp/memcache.strace And look for calls which failed due to access restriction. They will show up with result: "-1 (errno 13)". Then add them to linux_priv.c. Alternatively, change the definition in linux_priv.c to: #define DENY_ACTION SCMP_ACT_TRAP and the process will crash with a coredump on all policy violations. In strace output those can be seen as: SIGSYS {si_signo=SIGSYS, si_code=SYS_SECCOMP, si_call_addr=0x358a443454d, si_syscall=__NR_write, si_arch=AUDIT_ARCH_X86_64} --- In that output, the si_syscall shows which operation has been blocked. In this case that's `write()`. * Sending patches See current instructions at https://github.com/memcached/memcached/wiki/DevelopmentRepos