forked from memcached/memcached
-
Notifications
You must be signed in to change notification settings - Fork 1
/
HACKING
82 lines (53 loc) · 2.2 KB
/
HACKING
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