summaryrefslogtreecommitdiff
path: root/HACKING
blob: 1d815aee7eb46ec6bf87080e2a7d0b2a3c7a64a8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
* 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