| Line 1: |
Line 1: |
| − | == Setting up working enviroment == | + | == Set up working environment == |
| | + | |
| | Although criu could be run as non-root (see [[Security]]), development is better to be done as root. For example, some tests require root. So, it would be a good idea to set up some recent Linux distro on a virtual machine. | | Although criu could be run as non-root (see [[Security]]), development is better to be done as root. For example, some tests require root. So, it would be a good idea to set up some recent Linux distro on a virtual machine. |
| | | | |
| − | === Obtaining the source code === | + | == Get the source code == |
| | | | |
| − | The CRIU sources are tracked by Git SCM at [https://github.com/xemul/criu https://github.com/xemul/criu] repository. You either could download packed sources or use git tool itself. | + | The CRIU sources are tracked by Git. Official CRIU repo is at [https://github.com/xemul/criu https://github.com/xemul/criu]. |
| | | | |
| − | For example to clone CRIU one need to type
| + | The repository may contain multiple branches. Development happens in the '''criu-dev''' branch. |
| | | | |
| − | git clone [https://github.com/xemul/criu https://github.com/xemul/criu]
| + | To clone CRIU repo and switch to the proper branch, run: |
| | | | |
| − | === Picking the proper branch ===
| + | <pre><nowiki> |
| | + | git clone https://github.com/xemul/criu |
| | + | git checkout criu-dev |
| | + | </nowiki></pre> |
| | | | |
| − | In CRIU development happens on the ''criu-dev'' branch. From time to time patches from this branch are moved (cherry-picked) into the master branch, which is used for stable [[releases]].
| + | == Compile == |
| | | | |
| − | === Compiling the source code ===
| + | First, you need to install compile-time dependencies. Check [[Installation#Dependencies]] for more info. |
| | + | |
| | + | To compile CRIU, run: |
| | | | |
| − | {{Note|Dependencies are listed in the [[Installation]] article.}}
| |
| − | Run:
| |
| | cd criu | | cd criu |
| | make | | make |
| − | This will produce ./criu executable. | + | |
| − | As you are going to work with sources, it would come in handy to get tags by running:
| + | This should make the ./criu executable. |
| | + | |
| | + | == Edit the source code == |
| | + | |
| | + | If you use ctags, you can generate the ctags file by running |
| | + | |
| | make tags | | make tags |
| − | {{Note|It requires ctags to be installed.}}
| |
| | | | |
| − | == Changing the source code ==
| + | When you change the source code, please keep in mind the following code conventions: |
| | + | |
| | + | * we prefer tabs and indentations to be 8 characters width |
| | + | * consider reading [https://www.kernel.org/doc/Documentation/CodingStyle Linux kernel coding style]. |
| | + | |
| | + | Other conventions can be learned from the source code itself. In short, make sure your new code |
| | + | looks similar to what is already there. |
| | + | |
| | + | == Test your changes == |
| | + | |
| | + | CRIU comes with an extensive test suite. To check whether your changes introduce any regressions, run |
| | + | |
| | + | make test |
| | | | |
| − | When you change the source code keep in mind - we prefer tabs and
| + | The command runs [[ZDTM Test Suite]]. Check for any error messages produced by it. |
| − | indentations to be 8 characters width. Consider reading [https://www.kernel.org/doc/Documentation/CodingStyle Linux kernel coding style].
| |
| | | | |
| − | Other "rules" could be learned from the source code - just make your code
| + | In case you'd rather have someone else run the tests, you can use travis-ci for your |
| − | to look similar.
| + | own github fork of CRIU. It will check the compilation for various supported platforms, |
| | + | as well as run most of the tests from the suite. See https://travis-ci.org/xemul/criu |
| | + | for more details. |
| | | | |
| − | == Producing a patch == | + | == Make a patch == |
| | | | |
| − | There are at least two ways to make it right.
| + | To create a patch, run |
| | | | |
| − | 1) git format-patch
| + | git format-patch |
| | | | |
| − | You might need to read documentation on Git SCM how to prepare patch | + | You might need to read GIT documentation on how to prepare patches |
| − | for mail submission. Take a look on http://book.git-scm.com/ and/or | + | for mail submission. Take a look at http://book.git-scm.com/ and/or |
| | http://git-scm.com/documentation for details. It should not be hard | | http://git-scm.com/documentation for details. It should not be hard |
| | at all. | | at all. |
| | | | |
| − | 2) Use "diff -up"
| + | == Sign your work == |
| | | | |
| − | Use <code>diff -up</code> or <code>diff -uprN</code> to create patches.
| + | To improve tracking of who did what, we ask you to sign off the patches |
| − | | + | that are to be emailed. |
| − | == Signing your work ==
| |
| − | | |
| − | To improve tracking of who did what we've introduced a "sign-off" procedure | |
| − | on patches that are being emailed around.
| |
| | | | |
| | The sign-off is a simple line at the end of the explanation for the | | The sign-off is a simple line at the end of the explanation for the |
| | patch, which certifies that you wrote it or otherwise have the right to | | patch, which certifies that you wrote it or otherwise have the right to |
| − | pass it on as a open-source patch. The rules are pretty simple: if you | + | pass it on as an open-source patch. The rules are pretty simple: if you |
| | can certify the below: | | can certify the below: |
| | | | |
| − | Developer's Certificate of Origin 1.1
| + | <div class="toccolours mw-collapsible mw-collapsed" style="width: 64em;"> |
| − |
| + | '''Developer's Certificate of Origin 1.1''' |
| | + | <div class="mw-collapsible-content"> |
| | By making a contribution to this project, I certify that: | | By making a contribution to this project, I certify that: |
| | | | |
| Line 83: |
Line 101: |
| | maintained indefinitely and may be redistributed consistent with | | maintained indefinitely and may be redistributed consistent with |
| | this project or the open source license(s) involved. | | this project or the open source license(s) involved. |
| − | | + | </div></div> |
| | then you just add a line saying | | then you just add a line saying |
| | | | |
| Line 95: |
Line 113: |
| | <code>git commit --amend -s</code>. | | <code>git commit --amend -s</code>. |
| | | | |
| − | == An example of patch message == | + | <div class="toccolours mw-collapsible mw-collapsed" style="width: 64em;"> |
| | + | '''Example patch message''' |
| | + | <div class="mw-collapsible-content"> |
| | | | |
| | From: Random J Developer <random at developer.example.org> | | From: Random J Developer <random at developer.example.org> |
| Line 106: |
Line 126: |
| | --- | | --- |
| | Patch body here | | Patch body here |
| | + | </div></div> |
| | | | |
| − | == Checking patches for errors == | + | == Mail patches == |
| − | Basic style error checking is provided by scripts/checkpatch.pl script
| |
| − | from linux kernel source tree. You might have headers or complete sources
| |
| − | of linux kernel at /usr/src/. Run
| |
| − | checkpatch.pl my_patch.patch (consider --no-tree option for headers-only)
| |
| − | It will produce detailed report on style problems in your patch.
| |
| − | Make sure to fix all _errors_(some warnings may be ignored).
| |
| − | | |
| − | To check whether your patches don't harm anything run
| |
| − | make test
| |
| − | It will launch [[ZDTM_Test_Suite]]. Check for error messages produced by it.
| |
| − | You may also want to run other tests(rpc, libcriu, security etc) from test/ dir.
| |
| − | | |
| − | In addition, you can enable [https://travis-ci.org/xemul/criu travis-ci] for you github repo,
| |
| − | which will check compilation on all platforms and execute a big part of tests.
| |
| − | | |
| − | == Mailing patches ==
| |
| | | | |
| − | The patches should be sent to CRIU development mailing list | + | The patches should be sent to [CRIU development mailing list which is located at https://openvz.org/mailman/listinfo/criu]. |
| − | which is located at https://openvz.org/mailman/listinfo/criu | |
| | | | |
| − | Please make sure the email client you're using doesn't screw | + | Please make sure the email client you're using doesn't screw your patch (line wrapping and so on). |
| − | your patch (line wrapping and so on). | |
| | | | |
| | == Wait for response == | | == Wait for response == |
| | | | |
| | Be patient. Most CRIU developers are pretty busy people so if | | Be patient. Most CRIU developers are pretty busy people so if |
| − | there is no immediate response on your patch - don't be surprised, | + | there is no immediate response on your patch — don't be surprised, |
| − | sometimes a patch may fly around a week(s) before it get reviewed. | + | sometimes a patch may fly around a week before it gets reviewed. |
| − | But definitely the patches will not go to <code>/dev/null</code>.
| |
| | | | |
| | [[Category:Development]] | | [[Category:Development]] |