https://criu.org/api.php?action=feedcontributions&user=Kir&feedformat=atomCRIU - User contributions [en]2024-03-29T00:05:10ZUser contributionsMediaWiki 1.35.6https://criu.org/index.php?title=Download/criu/3.18&diff=5428Download/criu/3.182023-10-19T22:24:49Z<p>Kir: rm extra vertical whitespace</p>
<hr />
<div><!--<br />
**** FOR STEPS NEEDED TO MAKE A RELEASE, SEE https://criu.org/Releasing<br />
Use {{Bug|123}} to link to a github issue<br />
--><br />
[[Image:3.18.jpg|400px|right]]<br />
{{Release|3.18}}<br />
<br />
=== New features ===<br />
* Allow CRIU to be used as non-root<br />
* Add SIGTSTP support<br />
* Add opt to skip file r/w/x check on restore<br />
<br />
=== Bugfixes ===<br />
* Many fixes here and there<br />
<br />
=== Improvements ===<br />
* cgroup2: Dump cgroup controllers of every threads in a process<br />
* save IP_FREEBIND option for SOCK_RAW sockets also<br />
* support IP_PKTINFO and IPV6_RECVPKTINFO options<br />
* Implement hw breakpoint for arm64 platform<br />
* Set only used XFEATURE_* in xstate_bv<br />
* Checkpoint and restore some global properties<br />
* A checkpoint optimization for highly sparse ghost files (--ghost-fiemap)</div>Kirhttps://criu.org/index.php?title=Releasing&diff=5403Releasing2023-04-19T16:08:26Z<p>Kir: </p>
<hr />
<div>This is a reminder of steps needed to roll out a new release.<br />
<br />
== Code ==<br />
* Fix <code>Makefile.versions</code><br />
* Commit: <code>git commit -m "criu: Version $version"</code><br />
* Merge it like any other criu changes (create a github pr, get it approved, etc)<br />
* Tag: <code>git tag -a v$version -m '$summary'</code><br />
* Push: <code>git push origin v$version</code><br />
<br />
== Wiki ==<br />
<br />
* Make sure ''previous version'' is listed in [[Releases#Old versions]]<br />
* Add release metadata:<br />
** name to [[Template:Codename]]<br />
** date to [[Template:Release date]]<br />
* Create [[Download/criu/VERSION]]<br />
* Bump [[Template:Last version]]<br />
* Add new version to [[Changelogs]]<br />
* Fixup [[Release schedule]]<br />
** remove new version from [[Release schedule#Future releases]]<br />
** add previous version to [[Release schedule#Past releases]]<br />
<br />
== Announces ==<br />
<br />
* Send an announcement to the criu mailing list.<br />
<br />
[[Category: development]]</div>Kirhttps://criu.org/index.php?title=Template:Codename&diff=5298Template:Codename2022-07-12T00:22:59Z<p>Kir: added 3.17.1 codename (same as 3.17)</p>
<hr />
<div><includeonly>{{#switch: v{{{1}}}<br />
| v2.1 = Steel Lapwing<br />
| v2.2 = Carbon Nightingale<br />
| v2.3 = Wooden Duck<br />
| v2.4 = Marble Lark<br />
| v2.5 = Concrete Oriole<br />
| v2.6 = Paper Crane<br />
| v2.7 = Rubber Owl<br />
| v2.8 = Bronze Siskin<br />
| v2.9 = Silk Tit<br />
| v2.10 = Brass Waxwing<br />
| v2.11 = Acrylic Bullfinch<br />
| v2.12 = Vulcanite Rook<br />
| v3.0 = Basalt Wagtail<br />
| v3.1 = Graphene Swift<br />
| v3.2 = Tin Hoopoe<br />
| v3.3 = Crystal Pelican<br />
| v3.4 = Cobalt Swan<br />
| v3.5 = Clay Jay<br />
| v3.6 = Alabaster Finch<br />
| v3.7 = Vinyl Magpie<br />
| v3.8 = Snow Bunting<br />
| v3.8.1 = Snow Bunting<br />
| v3.9 = Sand Martin<br />
| v3.10 = Granite Eagle<br />
| v3.11 = Glass Flamingo<br />
| v3.12 = Ice Penguin<br />
| v3.13 = Silicon Willet<br />
| v3.14 = Platinum Peacock<br />
| v3.15 = Titanium Falcon<br />
| v3.16 = Petrified Puffin<br />
| v3.16.1 = Petrified Puffin<br />
| v3.17 = Radiant Redstart<br />
| v3.17.1 = Radiant Redstart<br />
| <!-- no codename --><br />
}}</includeonly><noinclude><br />
<br />
This template is used to get the codename of a specified release. If there is no codename, empty string is produced.<br />
<br />
== Usage ==<br />
<br />
<pre><nowiki>{{Codename|VERSION}}</nowiki></pre><br />
<br />
== Examples ==<br />
<br />
{| class="wikitable"<br />
! Markup<br />
! Result<br />
|-<br />
| <pre><nowiki>{{Codename|3.3}}</nowiki></pre><br />
| {{Codename|3.3}}<br />
|-<br />
| <pre><nowiki>{{Codename|2.1}}</nowiki></pre><br />
| {{Codename|2.1}}<br />
|-<br />
| <pre><nowiki>{{Codename|2.0}}</nowiki></pre><br />
| {{Codename|2.0}}<br />
|}<br />
<br />
== See also ==<br />
<br />
* [[Release schedule]] for future codenames<br />
* [[Template:Release date]]<br />
* [[Template:criu]]<br />
* [[Template:Release]]<br />
* [[Template:Latest release]]<br />
<br />
</noinclude></div>Kirhttps://criu.org/index.php?title=Template:Release_date&diff=5297Template:Release date2022-07-12T00:18:39Z<p>Kir: added v to newest entries</p>
<hr />
<div><includeonly>{{#switch: v{{{1}}}<br />
| v3.17.1 = 23 Jun 2022<br />
| v3.17 = 5 May 2022<br />
| v3.16.1 = 14 Oct 2021<br />
| v3.16 = 22 Sep 2021<br />
| v3.15 = 03 Nov 2020<br />
| v3.14 = 29 Apr 2020<br />
| v3.13 = 11 Sep 2019<br />
| v3.12 = 25 Apr 2019<br />
| v3.11 = 06 Nov 2018<br />
| v3.10 = 10 Jul 2018<br />
| v3.9 = 21 May 2018<br />
| v3.8.1 = 29 Mar 2018<br />
| v3.8 = 13 Mar 2018<br />
| v3.7 = 19 Dec 2017<br />
| v3.6 = 23 Oct 2017<br />
| v3.5 = 27 Sep 2017<br />
| v3.4 = 21 Aug 2017<br />
| v3.3 = 18 Jul 2017<br />
| v3.2.1 = 28 Jun 2017<br />
| v3.2 = 19 Jun 2017<br />
| v3.1 = 22 May 2017<br />
| v3.0 = 24 Apr 2017<br />
| v2.12.1 = 27 Mar 2017<br />
| v2.12 = 8 Mar 2017<br />
| v2.11.1 = 17 Feb 2017<br />
| v2.11 = 13 Feb 2017<br />
| v2.10 = 16 Jan 2017<br />
| v2.9 = 12 Dec 2016<br />
| v2.8 = 14 Nov 2016<br />
| v2.7 = 17 Oct 2016<br />
| v2.6 = 12 Sep 2016<br />
| v2.5 = 15 Aug 2016<br />
| v2.4 = 11 Jul 2016<br />
| v2.3 = 14 Jun 2016<br />
| v2.2 = 16 May 2016<br />
| v2.1 = 11 Apr 2016<br />
| v2.0 = 7 Mar 2016<br />
| v1.8 = 7 Dec 2015<br />
| v1.7.2 = 28 Oct 2015<br />
| v1.7 = 7 Sep 2015<br />
| v1.6.1 = 12 Aug 2015<br />
| v1.6 = 1 Jun 2015<br />
| v1.5.2 = 28 Apr 2015<br />
| v1.5.1 = 31 Mar 2015<br />
| v1.5 = 2 Mar 2015<br />
| v1.4 = 1 Dec 2014<br />
| v1.3.1 = 12 Sep 2014<br />
| v1.3 = 1 Sep 2014<br />
| v1.3-rc2 = 18 Jun 2014<br />
| v1.3-rc1 = 25 Apr 2014<br />
| v1.2 = 26 Feb 2014<br />
| v1.1 = 28 Jan 2014<br />
| v1.1-rc2 = 20 Jan 2014<br />
| v1.1-rc1 = 30 Dec 2013<br />
| v1.0 = 25 Nov 2013<br />
| v0.8 = 18 Oct 2013<br />
| v0.7 = 3 Sep 2013<br />
| v0.6 = 1 Jul 2013<br />
| v0.5 = 30 Apr 2013<br />
| v0.4 = 20 Feb 2013<br />
| v0.3 = 11 Dec 2012<br />
| v0.2 = 20 Sep 2012<br />
| v0.1 = 23 Jul 2012<br />
| <!-- unknown release? return nothing --><br />
}}</includeonly><noinclude><br />
<br />
This template is used to get the date of a specified release.<br />
<br />
== Usage ==<br />
<br />
<pre><nowiki>{{Release date|VERSION}}</nowiki></pre><br />
<br />
Examples:<br />
<br />
{| class="wikitable"<br />
! Markup<br />
! Result<br />
|-<br />
| <pre><nowiki>{{Release date|2.10}}</nowiki></pre><br />
| {{Release date|2.10}}<br />
|-<br />
| <pre><nowiki>{{Release date|2.1}}</nowiki></pre><br />
| {{Release date|2.1}}<br />
|-<br />
| <pre><nowiki>{{Release date|1.3-rc1}}</nowiki></pre><br />
| {{Release date|1.3-rc1}}<br />
|-<br />
| <pre><nowiki>{{Release date|0.1}}</nowiki></pre><br />
| {{Release date|0.1}}<br />
|}<br />
<br />
== See also ==<br />
* [[Template:Codename]]<br />
* [[Template:Release]]<br />
<br />
</noinclude></div>Kirhttps://criu.org/index.php?title=Mount-v2&diff=5273Mount-v22022-04-27T05:04:25Z<p>Kir: /* Links */ make a list</p>
<hr />
<div>Mount-v2 CRIU algorithm<br />
<br />
== Introduction ==<br />
<br />
After we've merged MOVE_MOUNT_SET_GROUP feature to mainstream linux v5.15 [https://github.com/torvalds/linux/commit/9ffb14ef61bab83fa818736bf3e7e6b6e182e8e2 torvalds/linux@9ffb14e] now we can use it to restore sharing groups of mounts without the need to care about inheriting those groups when create mounts, we can just set sharing groups at later stage and before that construct mount trees with private mounts.<br />
<br />
Restoring propagation right with conservative approach of both creating mounts and inheriting propagation groups looks like mission impossible task for us due to many problems:<br />
<br />
* Criu knows nothing about the initial history or order of mount tree creation;<br />
* Propagation can create tons of mounts;<br />
* Propagation may change parent mounts for existing mount tree;<br />
* "Mount trap" - propagation may cover initial mount;<br />
* "Non-uniform" propagation - there are different tricks with mount order and temporary children-"lock" mounts, which create mount trees which can't be restored without those tricks;<br />
* "Cross-namespace" sharing groups creation need to be ordered with mount namespace creation right;<br />
* Sharing groups vs mount tree order inversion can be very complex to restore and require multiple auxiliary. (see example below)<br />
<br />
See my talks about it on Linux Plumbers Conference:<br />
* [https://www.linuxplumbersconf.org/event/7/contributions/640/ CRIU mounts migration: problems and solutions]<br />
* [https://linuxplumbersconf.org/event/11/contributions/923/ Mount-v2 CRIU migration engine: status update]<br />
<br />
And here is the example of order inversion where multiple temporary mounts needed to achieve the result:<br />
[[File:Mounts-inverse-order-example.gif|none|link=|Mounts-inverse-order-example.gif]]<br />
<br />
== Mount-v2 description ==<br />
<br />
New mount-v2 algorithm is integrated deeply in the original one, so that dumping of mounts is done exactly the same for original mount engine and new one. So mount-v2 series has preparatory steps related to bindmount detection, external mounts detection and helper mounts handling to make the original mount code more robust, to make it easier to reuse it in mount-v2.<br />
<br />
==== Plain mountpoints ====<br />
<br />
One of main differences of mount-v2 comparing to original is that mounts are initially created "plain", for instance if we had '''MOUNT''' with '''mnt_id=1000''' and '''ns_mountpoint="/mount/point/path"''', original mount engine would originally mount this '''MOUNT''' in the mount tree to '''<criu_root_yard>/<mntns>/mount/point/path''' so that if this mount had '''PARENT''' mount with '''mnt_id=999''' and '''ns_mountpoint="/mount/point"''' corresponding mount for '''PARENT''' would be created in '''<criu_root_yard>/<mntns>/mount/point''' thus restoring parent-child relationship between them initially. For mount-v2 '''MOUNT''' would be first mounted to '''<criu_root_yard>/mnt-1000''' and '''PARENT''' would be mounted to '''<criu_root_yard>/mnt-999''' so that on the first stage we only create mounts and then on separate second stage handle the tree assembling separately. This way we can have useful heuristics like on the second stage we can create overmounts after mounts they overmount, and on the first stage we can create external mounts before their bindmounts and these two do not clinch with each other.<br />
<br />
But it is not so simple actually because we do not want to rewrite all the code for instance for restoring mount content or restoring ghost and remap files, which used mountpoint paths in "tree" format. So in all places where it does not matter (where we do not access <criu_root_yard>/<mntns>/... paths) we switched from using mount_info->mountpoint to mount_info->ns_mountpoint and in all places where we actually needed "tree" format paths we replace them with service_mountpoint() helper which would return "tree" paths for original mount engine and "plain" paths for mount-v2. This way we can safely switch from one to another.<br />
<br />
==== Resolving sharing groups ====<br />
<br />
Just after reading mounts from images in read_mnt_ns_img() when mount-v2 is enabled we have an additional step to collect sharing group information from mounts and turn it to sharing groups forest graph (resolve_shared_mounts_v2). First, we just walk over all mounts and create sharing group for each mount with unique shared_id + master_id pair, also we sew all mounts to corresponding sharing group with same id pair. Second, we walk over all sharing groups which has non-zero master_id and lookup the corresponding parent sharing groups and connect them with a tree.<br />
<br />
There is also a case when master_id is non-zero but there is no corresponding parent sharing group, this means that outside of dumped container there is mount with matching shared_id - external slavery detected. For this case we just collect sibling sharing groups in list with empty parent link. Also we detect source path from which the master_id would be inherited either from some mountpoint-external mount or from root container mount.<br />
<br />
==== Actual restore of mounts ====<br />
<br />
Actual restore of mounts in original mount engine starts with prepare_mnt_ns() function, when mount-v2 is enabled we pass controll from it to prepare_mnt_ns_v2() instead. It consists of several stages:<br />
<br />
1) We pre-create mount namespaces for each restored mount namespace in pre_create_mount_namespaces(). These namespaces appear almost empty: they contain tmpfs as their root, they have root yard path created in it with another tmpfs mounted in it, and"namespace" path for assembling tree of mounts in it created in corresponding subdirectory of root yard mount. Surely we also save nsfs fds to each mount namespace to be able to reenter them later.<br />
<br />
2) In populate_mnt_ns_v2() we reuse mnt_tree_for_each() walk over mount tree from original mount engine and so we walk mounts in tree order with addition of temporary skipping mounts and their descendants with can_mount_now_v2() in case they depend from other mounts, restarting the walk for them later. The can_mount_now_v2() is basically skipping mounts which should be restored as bindmounts but their source is not ready yet, this is true for bindmounts of root, external or plugin mounts or non-fsroot mounts.<br />
<br />
3) In the mentioned walk over mounts forest in do_mount_one_v2() we determine if the newly created mount is directory one or a file one in detect_is_dir(), we just open its mountpoint path relative to parent "plain" mountpoint and do stat. That's why it is important to use mnt_tree_for_each() as it insures that parent is already "plain" mounted.<br />
<br />
4) In the mentioned walk over mounts forest in do_mount_one_v2() we create "plain" mountpoint for a new mount, empty file or directory based on the previous step.<br />
<br />
5) In the mentioned walk over mounts forest in do_mount_one_v2() we actually create new mount, either we create completely new mount or device-external in do_new_mount_v2() if it's supported, or bind container root mount in do_mount_root_v2() from the still visible host mount tree, or bind mountpoint-external mount in do_bind_mount_v2() and similarly bind any mount for which superblock is already created by other mount beforehand and we can just bind it in do_bind_mount_v2(). These functions act similar to ones in original mount engine but simplified as they don't need to care about inheriting sharing groups.<br />
<br />
6) The do_bind_mount_v2() is improved to do bindmount via open_tree() + move_mount() with flags allowing not to traverse symlinks or autofs mounts.<br />
<br />
7) Also we cross-namespace bindmount the newly created mount to restored mount namespace to the same "plain" mountpoint in do_mount_in_right_mntns(). So that we initially have a mount which would be visible after restore, this would be required in future to be able to restore bindmounted unix sockets on the right mount.<br />
<br />
8) Now after the walk we don't plan to do bindmounts anymore so we set unbindable flags on mounts.<br />
<br />
9) Next we assemble mount trees in each restored mount namespace in assemble_mount_namespaces() by again reusing move_mount_to_tree() to have tree order of moving mounts into proper places in mount tree. Also we open fds on the mountpoint: one mp_fd_id before moving and another mnt_fd_id after, so that we can access files on each mount later from final mntns via those fds.<br />
<br />
10) Finally we do restore sharing groups on the assembled mount forest in restore_mount_sharing_options(). It walks each root sharing group and their descendants with dfs tree walk. It creates sharing for the first mount in the sharing group and then sets the same sharing on all other mounts in this group.<br />
<br />
Sharing creation for first mount is two step:<br />
<br />
a) If mount has master_id we either copy shared_id from parent sharing group or from external source and then make mount slave thus converting it to right master_id.<br />
b) Next if mount has shared_id we just make us shared, creating right shared_id.<br />
<br />
We need to use userns_call() for MOVE_MOUNT_SET_GROUP to have all right permissions for copying sharing (move_mount_set_group()). Also we need to resolve external paths given by user to their actual mountpoint, we do so with openat2(RESOLVE_NO_XDEV) in resolve_mountpoint, this also only works from userns_call().<br />
<br />
11) We remove sources of deleted mounts making them actually deleted (from "service" mount namespace), as moving deleted mounts is not allowed and just to simplify things we do it at the last step.<br />
<br />
==== Links ====<br />
<br />
* "Virtuozzo" (original) version (using non-mainstream kernel interface): [[Mounts-v2-Virtuozzo|Mounts-v2-Virtuozzo]] It actually has cool features we don't have in mainstream yet, for instance - nested pidns proc handling, this feature requires nested pidns support beforehand.<br />
<br />
* MOVE_MOUNT_SET_GROUP kernel feature: [https://github.com/torvalds/linux/commit/9ffb14ef61bab83fa818736bf3e7e6b6e182e8e2 torvalds/linux@9ffb14e]<br />
<br />
* Mount-v2 PR to criu: [https://github.com/checkpoint-restore/criu/pull/1721 #1721]<br />
<br />
[[Category: Under the hood]]</div>Kirhttps://criu.org/index.php?title=Template:Codename&diff=5272Template:Codename2022-04-27T04:59:08Z<p>Kir: Add a name for 3.8.1</p>
<hr />
<div><includeonly>{{#switch: v{{{1}}}<br />
| v2.1 = Steel Lapwing<br />
| v2.2 = Carbon Nightingale<br />
| v2.3 = Wooden Duck<br />
| v2.4 = Marble Lark<br />
| v2.5 = Concrete Oriole<br />
| v2.6 = Paper Crane<br />
| v2.7 = Rubber Owl<br />
| v2.8 = Bronze Siskin<br />
| v2.9 = Silk Tit<br />
| v2.10 = Brass Waxwing<br />
| v2.11 = Acrylic Bullfinch<br />
| v2.12 = Vulcanite Rook<br />
| v3.0 = Basalt Wagtail<br />
| v3.1 = Graphene Swift<br />
| v3.2 = Tin Hoopoe<br />
| v3.3 = Crystal Pelican<br />
| v3.4 = Cobalt Swan<br />
| v3.5 = Clay Jay<br />
| v3.6 = Alabaster Finch<br />
| v3.7 = Vinyl Magpie<br />
| v3.8 = Snow Bunting<br />
| v3.8.1 = Snow Bunting<br />
| v3.9 = Sand Martin<br />
| v3.10 = Granite Eagle<br />
| v3.11 = Glass Flamingo<br />
| v3.12 = Ice Penguin<br />
| v3.13 = Silicon Willet<br />
| v3.14 = Platinum Peacock<br />
| v3.15 = Titanium Falcon<br />
| v3.16 = Petrified Puffin<br />
| v3.16.1 = Petrified Puffin<br />
| v3.17 = Radiant Redstart<br />
| <!-- no codename --><br />
}}</includeonly><noinclude><br />
<br />
This template is used to get the codename of a specified release. If there is no codename, empty string is produced.<br />
<br />
== Usage ==<br />
<br />
<pre><nowiki>{{Codename|VERSION}}</nowiki></pre><br />
<br />
== Examples ==<br />
<br />
{| class="wikitable"<br />
! Markup<br />
! Result<br />
|-<br />
| <pre><nowiki>{{Codename|3.3}}</nowiki></pre><br />
| {{Codename|3.3}}<br />
|-<br />
| <pre><nowiki>{{Codename|2.1}}</nowiki></pre><br />
| {{Codename|2.1}}<br />
|-<br />
| <pre><nowiki>{{Codename|2.0}}</nowiki></pre><br />
| {{Codename|2.0}}<br />
|}<br />
<br />
== See also ==<br />
<br />
* [[Release schedule]] for future codenames<br />
* [[Template:Release date]]<br />
* [[Template:criu]]<br />
* [[Template:Release]]<br />
* [[Template:Latest release]]<br />
<br />
</noinclude></div>Kirhttps://criu.org/index.php?title=Download/criu&diff=5271Download/criu2022-04-27T04:57:31Z<p>Kir: added 3.16 to past releases</p>
<hr />
<div>== Latest version ==<br />
<br />
{{:Download/criu/{{Last version}}}}<br />
<br />
== Old versions ==<br />
<br />
=== 3.x ===<br />
<br />
The following [[Download/criu/3.x|3.x]] releases were made:<br />
<br />
* {{fe|criu|{{nln}}* |3.16|3.15|3.14|3.13|3.12|3.11|3.10|3.9|3.8.1|3.8|3.7|3.6|3.5|3.4|3.3|3.2.1|3.2|3.1|3.0}}<br />
<br />
=== 2.x ===<br />
<br />
The following [[Download/criu/2.x|2.x]] releases were made:<br />
<br />
* {{fe|criu|{{nln}}* |2.12.1|2.12|2.11.1|2.11|2.10|2.9|2.8|2.7|2.6|2.5|2.4|2.3|2.2|2.1|2.0}}<br />
<br />
=== 1.x ===<br />
<br />
The following [[Download/criu/1.x|1.x]] releases were made:<br />
<br />
* {{fe|criu|{{nln}}* |1.8|1.7.2|1.7|1.6.1|1.6|1.5.2|1.5.1|1.5|1.4|1.3.1|1.3|1.3-rc2|1.3-rc1|1.2|1.1|1.1-rc2|1.1-rc1|1.0}}<br />
<br />
=== 0.x ===<br />
<br />
The following [[Download/criu/0.x|0.x]] releases were made:<br />
<br />
* {{fe|criu|{{nln}}* |0.8|0.7|0.6|0.5|0.4|0.3|0.2|0.1}}<br />
<br />
== See also ==<br />
<br />
* [[Changelogs]] to see all the changelogs on a single page.</div>Kirhttps://criu.org/index.php?title=Template:Dl&diff=5199Template:Dl2021-09-23T16:41:54Z<p>Kir: fixed link to criu 2.x</p>
<hr />
<div><includeonly>{{#ifexpr: {{#sub:{{{1}}}|0|1}} >= 3 | [[github:checkpoint-restore/criu/archive/v{{{1}}}/criu-{{{1}}}.tar.gz | criu-{{{1}}}.tar.gz]] | [[dl:criu/criu-{{{1}}}.tar.bz2|criu-{{{1}}}.tar.bz2]] }}</includeonly><noinclude><br />
<br />
This produces a download link for a given version.<br />
<br />
* for releases < 3, it links to download.openvz.org (interwiki <code>dl:</code>), and uses tar.bz2.<br />
* for releases >= 3, it links to github.org (interwiki <code>github:</code>), and uses tar.gz.<br />
<br />
== Examples ==<br />
<br />
{| class="wikitable"<br />
! Wiki code !! Result<br />
|-<br />
| <code><nowiki>{{Dl|2.3}}</nowiki></code> || {{Dl|2.3}}<br />
|-<br />
| <code><nowiki>{{Dl|3.14}}</nowiki></code> || {{Dl|3.14}}<br />
|-<br />
|}<br />
</noinclude></div>Kirhttps://criu.org/index.php?title=Template:Dl&diff=5198Template:Dl2021-09-23T16:40:54Z<p>Kir: fixed to use github.com/checkpoint-restore/criu/archive/vXXX/criu-XXX.tar.gz instead of codeload. This fixes the file name when using wget.</p>
<hr />
<div><includeonly>{{#ifexpr: {{#sub:{{{1}}}|0|1}} >= 3 | [[github:checkpoint-restore/criu/archive/v{{{1}}}/criu-{{{1}}}.tar.gz | criu-{{{1}}}.tar.gz]] | [[dl:criu/criu-{{{1}}}.tar.bz2|criu-{{{1}}}.tar.bz2]] }}</includeonly><noinclude><br />
<br />
This produces a download link for a given version.<br />
<br />
* for releases < 3, it links to download.openvz.org (interwiki <code>dl:</code>), and uses tar.bz2.<br />
* for releases >= 3, it links to github.org (interwiki <code>github:</code>), and uses tar.gz.<br />
<br />
== Examples ==<br />
<br />
{| class="wikitable"<br />
! Wiki code !! Result<br />
|-<br />
| <code><nowiki>{{Dl|2.3.1}}</nowiki></code> || {{Dl|2.3.1}}<br />
|-<br />
| <code><nowiki>{{Dl|3.14}}</nowiki></code> || {{Dl|3.14}}<br />
|-<br />
|}<br />
</noinclude></div>Kirhttps://criu.org/index.php?title=Template:Git_release&diff=5195Template:Git release2021-09-22T22:02:17Z<p>Kir: fix double slash</p>
<hr />
<div>[[github:checkpoint-restore/criu/releases/tag/{{{1}}}|{{{1}}}]]</div>Kirhttps://criu.org/index.php?title=Template:Dl&diff=5194Template:Dl2021-09-22T21:59:16Z<p>Kir: use codeload.github.com for 3.x; add documentation</p>
<hr />
<div><includeonly>{{#ifexpr: {{#sub:{{{1}}}|0|1}} >= 3 | [[gh-codeload:checkpoint-restore/criu/tar.gz/refs/tags/v{{{1}}} | criu-{{{1}}}.tar.gz]] | [[dl:criu/criu-{{{1}}}.tar.bz2|criu-{{{1}}}.tar.bz2]] }}</includeonly><noinclude><br />
<br />
This produces a download link for a given version.<br />
<br />
* for releases < 3, it links to download.openvz.org (interwiki <code>dl:</code>), and uses tar.bz2.<br />
* for releases >= 3, it links to codeload.github.org (interwiki <code>gh-codeload:</code>), and uses tar.gz.<br />
<br />
== Examples ==<br />
<br />
{| class="wikitable"<br />
! Wiki code !! Result<br />
|-<br />
| <code><nowiki>{{Dl2|2.3.1}}</nowiki></code> || {{Dl2|2.3.1}}<br />
|-<br />
| <code><nowiki>{{Dl2|3.14}}</nowiki></code> || {{Dl2|3.14}}<br />
|-<br />
|}<br />
</noinclude></div>Kirhttps://criu.org/index.php?title=Template:Dl2&diff=5193Template:Dl22021-09-22T21:58:23Z<p>Kir: polish; improve docs</p>
<hr />
<div><includeonly>{{#ifexpr: {{#sub:{{{1}}}|0|1}} >= 3 | [[gh-codeload:checkpoint-restore/criu/tar.gz/refs/tags/v{{{1}}} | criu-{{{1}}}.tar.gz]] | [[dl:criu/criu-{{{1}}}.tar.bz2|criu-{{{1}}}.tar.bz2]] }}</includeonly><noinclude><br />
<br />
This produces a download link for a given version.<br />
<br />
* for releases < 3, it links to download.openvz.org (interwiki <code>dl:</code>), and uses tar.bz2.<br />
* for releases >= 3, it links to codeload.github.org (interwiki <code>gh-codeload:</code>), and uses tar.gz.<br />
<br />
== Examples ==<br />
<br />
{| class="wikitable"<br />
! Wiki code !! Result<br />
|-<br />
| <code><nowiki>{{Dl2|2.3.1}}</nowiki></code> || {{Dl2|2.3.1}}<br />
|-<br />
| <code><nowiki>{{Dl2|3.14}}</nowiki></code> || {{Dl2|3.14}}<br />
|-<br />
|}<br />
</noinclude></div>Kirhttps://criu.org/index.php?title=Template:Dl2&diff=5192Template:Dl22021-09-22T21:55:08Z<p>Kir: use interwiki prefix</p>
<hr />
<div>{{#ifexpr: {{#sub:{{{1}}}|0|1}} >= 3 | [[gh-codeload:checkpoint-restore/criu/tar.gz/refs/tags/v{{{1}}} | criu-{{{1}}}.tar.gz]] | [[dl:criu/criu-{{{1}}}.tar.bz2|criu-{{{1}}}.tar.bz2]] }}<noinclude><br />
<br />
This produces a download link for a given version.<br />
<br />
<br />
== Examples ==<br />
<br />
{| class="wikitable"<br />
! Wiki code !! Result<br />
|-<br />
| <code><nowiki>{{Dl2|2.3.1}}</nowiki></code> || {{Dl2|2.3.1}}<br />
|-<br />
| <code><nowiki>{{Dl2|3.14}}</nowiki></code> || {{Dl2|3.14}}<br />
|-<br />
|}<br />
</noinclude></div>Kirhttps://criu.org/index.php?title=Template:Dl2&diff=5191Template:Dl22021-09-22T21:50:43Z<p>Kir: fix</p>
<hr />
<div>{{#ifexpr: {{#sub:{{{1}}}|0|1}} >= 3 | [[https://codeload.github.com/checkpoint-restore/criu/tar.gz/refs/tags/v{{{1}}}{{|}}criu-{{{1}}}.tar.gz]] | [[dl:criu/criu-{{{1}}}.tar.bz2|criu-{{{1}}}.tar.bz2]] }}<noinclude><br />
<br />
This produces a download link for a given version.<br />
<br />
<br />
== Examples ==<br />
<br />
{| class="wikitable"<br />
! Wiki code !! Result<br />
|-<br />
| <code><nowiki>{{Dl2|2.3.1}}</nowiki></code> || {{Dl2|2.3.1}}<br />
|-<br />
| <code><nowiki>{{Dl2|3.14}}</nowiki></code> || {{Dl2|3.14}}<br />
|-<br />
|}<br />
</noinclude></div>Kirhttps://criu.org/index.php?title=Template:Dl2&diff=5190Template:Dl22021-09-22T21:48:50Z<p>Kir: redirect 3.x downloads to github</p>
<hr />
<div>{{#ifexpr: {{#sub:{{{1}}}|0|1}} >= 3 | [[https://codeload.github.com/checkpoint-restore/criu/tar.gz/refs/tags/v{{{1}}}|criu-{{{1}}}.tar.gz]] | [[dl:criu/criu-{{{1}}}.tar.bz2|criu-{{{1}}}.tar.bz2]] }}<noinclude><br />
<br />
This produces a download link for a given version.<br />
<br />
<br />
== Examples ==<br />
<br />
{| class="wikitable"<br />
! Wiki code !! Result<br />
|-<br />
| <code><nowiki>{{Dl2|2.3.1}}</nowiki></code> || {{Dl2|2.3.1}}<br />
|-<br />
| <code><nowiki>{{Dl2|3.14}}</nowiki></code> || {{Dl2|3.14}}<br />
|-<br />
|}<br />
</noinclude></div>Kirhttps://criu.org/index.php?title=API_compliance&diff=5170API compliance2021-08-08T15:42:10Z<p>Kir: nit</p>
<hr />
<div>This page brings together 3 APIs we have<br />
<br />
== Actions ==<br />
{| class="wikitable sortable"<br />
! [[Usage|CLI]]<br />
! [[RPC]]<br />
! [[C_API|C library]]<br />
! comment<br />
|-<br />
| dump || CRIU_REQ_TYPE__DUMP || criu_dump ||<br />
|-<br />
| pre-dump || CRIU_REQ_TYPE__PRE_DUMP || criu_dump_iters ||<br />
|-<br />
| restore || CRIU_REQ_TYPE__RESTORE || criu_restore, criu_restore_child ||<br />
|-<br />
| show || || || Deprecated. The [[CRIT]] tool should be used instead<br />
|-<br />
| check || CRIU_REQ_TYPE__CHECK || criu_check ||<br />
|-<br />
| cpuinfo dump || CRIU_REQ_TYPE__CPUINFO_DUMP || ||<br />
|-<br />
| cpuinfo check || CRIU_REQ_TYPE__CPUINFO_CHECK || ||<br />
|-<br />
| exec || || ||<br />
|-<br />
| page-server || CRIU_REQ_TYPE__PAGE_SERVER || ||<br />
|-<br />
| service || || ||<br />
|-<br />
| dedup || || ||<br />
|}<br />
<br />
== Options ==<br />
{| class="wikitable sortable"<br />
! [[Usage|CLI]]<br />
! [[RPC]]<br />
! [[C_API|C library]]<br />
! comment<br />
|-<br />
|"tree" || pid || criu_set_pid ||<br />
|-<br />
|"leave-stopped" || || ||<br />
|-<br />
|"leave-running" || leave_running || criu_set_leave_running ||<br />
|-<br />
|"restore-detached" || || || tasks always restore detached in RPC/lib<br />
|-<br />
|"restore-sibling" || rst_sibling || || For [[RPC]] -- in swrk mode only<br />
|-<br />
|"daemon" || || || only for page server in RPC/lib<br />
|-<br />
|"images-dir" || images_dir_fd || criu_set_images_dir_fd ||<br />
|-<br />
|"work-dir" || work_dir_fd || criu_set_work_dir_fd ||<br />
|-<br />
|"log-file" || log_file || criu_set_log_file ||<br />
|-<br />
|"root" || root || criu_set_root ||<br />
|-<br />
|"ext-unix-sk" || ext_unix_sk || criu_set_ext_unix_sk ||<br />
|-<br />
|"tcp-established" || tcp_established || criu_set_tcp_established ||<br />
|-<br />
|"log-pid" || || ||<br />
|-<br />
|"evasive-devices" || evasive_devices || criu_set_evasive_devices ||<br />
|-<br />
|"veth-pair" || veths || criu_add_veth_pair ||<br />
|-<br />
|"action-script" || notify_scripts || criu_set_notify_cb || see article about [[action scripts]]<br />
|-<br />
|"link-remap" || link_remap || criu_set_link_remap ||<br />
|-<br />
|"shell-job" || shell_job || criu_set_shell_job ||<br />
|-<br />
|"file-locks" || file_locks || criu_set_file_locks ||<br />
|-<br />
|"page-server" || ps || ||<br />
|-<br />
|"address" || ps.address || ||<br />
|-<br />
|"port" || ps.port || ||<br />
|-<br />
|"pidfile" || ps.pid || || page-server pid returned for RPC<br />
|-<br />
|"prev-images-dir" || parent_img || criu_set_parent_images ||<br />
|-<br />
|"ms" || || || "Check" only<br />
|-<br />
|"feature" || || || "Check" only<br />
|-<br />
|"track-mem" || track_mem || criu_set_track_mem ||<br />
|-<br />
|"auto-dedup" || auto_dedup || criu_set_auto_dedup ||<br />
|-<br />
|"libdir" || || || not clear how to do it in RPC<br />
|-<br />
|"cpu-cap" || cpu_cap || criu_set_cpu_cap ||<br />
|-<br />
|"force-irmap" || force_irmap || criu_set_force_irmap ||<br />
|-<br />
|"exec-cmd" || exec_cmd || criu_set_exec_cmd ||<br />
|-<br />
|"manage-cgroups" || manage_cgroups || criu_set_manage_cgroups ||<br />
|-<br />
|"cgroup-root" || cg_root || criu_add_cg_root ||<br />
|-<br />
|"inherit-fd" || inherit_fd || || For [[RPC]] -- in swrk mode only<br />
|-<br />
|"skip-mnt" || || ||<br />
|-<br />
|"ext-mount-map" || ext_mnt/auto_ext_mnt || criu_add_ext_mount/criu_set_auto_ext_mount ||<br />
|-<br />
|"enable-fs" || || ||<br />
|-<br />
|"enable-external-sharing" || ext_sharing || criu_set_ext_sharing ||<br />
|-<br />
|"enable-external-masters" || ext_masters || criu_set_ext_masters ||<br />
|-<br />
| || pidfd_store_sk || criu_set_pidfd_store_sk || see [[Pidfd store]]<br />
|-<br />
|"network-lock" || network_lock || criu_set_network_lock ||<br />
|-<br />
|"help" || || ||<br />
|-<br />
|"version" || || ||<br />
|-<br />
|"pid" || || || obsoleted<br />
|-<br />
|"namespaces" || || || obsoleted<br />
|-<br />
|"close" || || || hidden and obsoleted<br />
|-<br />
|"contents" || || || deprecated (for show)<br />
|-<br />
|"file" || || || deprecated (for show)<br />
|-<br />
|"fields" || || || deprecated (for show)<br />
|}<br />
<br />
[[Category: API]]<br />
[[Category: Outdated]]</div>Kirhttps://criu.org/index.php?title=CLI/opt/--network-lock&diff=5169CLI/opt/--network-lock2021-08-08T15:36:18Z<p>Kir: use definition list; fix a link</p>
<hr />
<div>Set the method to be used for network locking/unlocking. Locking is done to ensure that tcp packets are dropped between dump and restore. This is done to avoid the kernel sending RST when a packet arrives destined for the dumped process.<br />
<br />
Currently two methods are available:<br />
;<b>iptables</b><br />
: Use iptables rules to drop the packets. This is the default if 'method' is not specified.<br />
;<b>nftables</b><br />
: Use nftables rules to drop the packets.<br />
<br />
For more information: [[TCP connection#Checkpoint and restore TCP connection]]<br />
<br />
[[Category:CLI]]</div>Kirhttps://criu.org/index.php?title=TCP_connection&diff=5168TCP connection2021-08-08T15:31:35Z<p>Kir: use template:opt</p>
<hr />
<div>This page describes how we handle established TCP connections.<br />
<br />
== TCP repair mode in kernel ==<br />
<br />
The <code>TCP_REPAIR</code> socket option was added to the kernel 3.5 to help with C/R for TCP sockets.<br />
<br />
When this option is used, the socket is switched into a special mode, in which any action performed on it<br />
does not result in anything defined by an appropriate protocol actions, but rather directly puts the socket<br />
into the state that the socket is expected to be in at the end of a successfully finished operation.<br />
<br />
For example, calling <code>connect()</code> on a repaired socket just changes its state to <code>ESTABLISHED</code>,<br />
with the peer address set as requested.<br />
The <code>bind()</code> call forcibly binds the socket to a given address (ignoring any potential conflicts).<br />
The <code>close()</code> call closes the socket without any transient <code>FIN_WAIT</code>/<code>TIME_WAIT</code>/etc states,<br />
socket is silently killed.<br />
<br />
=== Sequences ===<br />
<br />
To restore the connection properly, bind() and connect() is not enough. One also needs to restore the<br />
TCP sequence numbers. To do so, the <code>TCP_REPAIR_QUEUE</code> and <code>TCP_QUEUE_SEQ</code> options were introduced.<br />
<br />
The former one selects which queue (input or output) will be repaired and the latter gets/sets the sequence. Note<br />
setting the sequence is only possible on CLOSE-d socket.<br />
<br />
=== Packets in queue ===<br />
<br />
When set the queue to repair as described above, one can call recv or send syscalls on a repaired socket. Both calls<br />
result on peeking or poking data from/to the respective queue. This sounds funny, but yes, for repaired socket one<br />
can receve the outgoing and send the incoming queues. Using the <code>MSG_PEEK</code> flag for <code>recv()</code> is required.<br />
<br />
=== Options ===<br />
<br />
There are 4 options that are negotiated by the socket at the connecting stage. These are<br />
<br />
* mss_clamp -- the maximum size of the segment peer is ready to accept<br />
* snd _scale -- the scale factor for a window<br />
* sack -- whether selective acks are permitted or not<br />
* tstamp -- whether timestamps on packets are supported<br />
<br />
All four can be read with <code>getsockopt()</code> calls to a socket and in order to restore them the <code>TCP_REPAIR_OPTIONS</code> sockoption is introduced.<br />
<br />
== Timestamp ==<br />
"The sender's timestamp clock is used as a source of monotonic non-decreasing values to stamp the segments"(rfc7323). The Linux kernel uses the jiffies counter as the tcp timestamp.<br />
<br />
<code>#define tcp_time_stamp ((__u32)(jiffies))</code><br />
<br />
We add the <code>TCP_TIMESTAMP</code> options to be able to compensate a difference between jiffies counters, when a connection is migrated on another host. When a connection is dumped, criu calls <code>getsockopt(TCP_TIMESTAMP)</code> to get a current timestamp, then on restore it calls <code>setsockopt(TCP_TIMESTAMP)</code> to set this timestamp as a starting point.<br />
<br />
== Checkpoint and restore TCP connection ==<br />
<br />
With the above sockoptions dumping and restoring TCP connection becomes possible. The criu just reads the socket<br />
state and restores it back letting the protocol resurrect the data sequence.<br />
<br />
One thing to note here — while the socket is closed between dump and restore the connection should be "locked", i.e.<br />
no packets from peer should enter the stack, otherwise the RST will be sent by a kernel. In order to do so a simple<br />
netfilter rule is configured that drops all the packets from peer to a socket we're dealing with. This rule sits<br />
in the host netfilter tables after the criu dump command finishes and it should be there when you issue the<br />
criu restore one. The locking method can be specified using the {{opt|--network-lock}} option.<br />
<br />
Another thing to note is -- on restore there should be available the IP address, that was used by the connection.<br />
This is automatically so if restore happens on the same box as dump. In case of hand-made live migration the<br />
IP address should be copied too.<br />
<br />
That said, the command line option {{opt|--tcp-established}} should be used when calling criu to explicitly state, that the<br />
caller is aware of this "transitional" state of the netfilter.<br />
<br />
In case the target process lives in NET namespace the connection locking happens the other way. Instead of<br />
per-connection iptables rules the "network-lock"/"network-unlock" [[action scripts]] are called so that the user<br />
could isolate the whole netns from network. Typically this is done by downing the respective veth pair end.<br />
<br />
== States ==<br />
=== TCP_SYN_SENT ===<br />
There is only one difference with TCP_ESTABLISHED, we have to restore a socket and disable the repair mode before calling <code>connect()</code>. The kernel will send a one syn-sent packet with the same initial sequence number and sets the TCP_SYN_SENT state for the socket.<br />
<br />
=== Half-closed sockets ===<br />
A socket is half-closed when it sent or received a fin packet. These sockets are in one for these states: TCP_FIN_WAIT1, TCP_FIN_WAIT2, TCP_CLOSING, TCP_LAST_ACL, TCP_CLOSE_WAIT. To restore these states, we restore a socket into the TCP_ESTABLISHED state and then we call shutfown(SHUT_WR), if a socket has sent a fin packet and we send a fake fin packet, if a socket has received it before. For example, if we want to restore the TCP_FIN_WAIT1 state, we have to call shutfown(SHUT_WR) and we can send a fake ack to the fin packet to restore the TCP_FIN_WAIT2 state.<br />
<br />
== See also ==<br />
* [[Simple TCP pair]]<br />
* [[TCP repair TODO]]<br />
* [[CLI/opt/--tcp-close|Dropping the connection]]<br />
<br />
== External links ==<br />
* http://lwn.net/Articles/495304/<br />
<br />
[[Category:Under the hood]]<br />
[[Category:Sockets]]<br />
[[Category: Editor help needed]]</div>Kirhttps://criu.org/index.php?title=CLI/opt/--lazy-pages&diff=5158CLI/opt/--lazy-pages2021-06-15T20:56:11Z<p>Kir: fix a typo</p>
<hr />
<div>The <code>--lazy-pages</code> option may be used with <code>dump</code>, <code>restore</code> and <code>page-server</code> actions.<br />
Specifying this option enables functionality necessary for [[Userfaultfd|lazy memory restore]] and [[Lazy migration]].<br />
<br />
The actual meaning of the <code>--lazy-pages</code> option depends what <code>criu</code> actions has been called with that option.<br />
<br />
== Dump ==<br />
Perform the dump procedure without writing memory pages into the image files and prepare to service page requests over the network.<br />
<br />
When <code>dump</code> runs in this mode it presumes that [[CLI/cmd/lazy-pages|<code>lazy-pages</code>]] daemon will connect to it and fetch memory pages in order to lazily inject them into the restored process address space.<br />
<br />
This option is intended for [[Lazy migration|post-copy (lazy) migration]] and should be used in conjunction with <code>restore</code> with appropriate options.<br />
<br />
== Restore ==<br />
Restore the processes without filling out the entire memory contents.<br />
<br />
When this option is used, <code>restore</code> sets up the infrastructure required to fill memory pages either on demand when the process accesses them or in the background without stopping the restored process.<br />
<br />
This option requires running [[CLI/cmd/lazy-pages|<code>lazy-pages</code>]] daemon.<br />
<br />
== Page server ==<br />
Serve local memory dump to a remote [[CLI/cmd/lazy-pages|<code>lazy-pages</code>]] daemon.<br />
<br />
In this mode the <code>page-server</code> reads local memory dump and allows the remote <code>lazy-pages</code> daemon to request memory pages in random order.</div>Kirhttps://criu.org/index.php?title=Packages&diff=5151Packages2021-03-24T18:33:38Z<p>Kir: rm pkgs.org link as it's not working (and when you do a manual search not a lot of distros are found -- repology works better)</p>
<hr />
<div>This page summarizes our knowledge about CRIU packages in various Linux distributions.<br />
<br />
== Specific distributions ==<br />
<br />
<br />
=== AltLinux ===<br />
* http://packages.altlinux.org/crtools<br />
<br />
=== Arch ===<br />
* https://aur.archlinux.org/packages/criu/<br />
<br />
As of '''2018-09-12''' the kernel package '''linux''' has CONFIG_CHECKPOINT_RESTORE enabled. The kernel package '''linux-lts''' has CONFIG_CHECKPOINT_RESTORE '''disabled'''.<br />
<br />
=== CentOS ===<br />
* https://git.centos.org/rpms/criu/releases<br />
* https://copr.fedorainfracloud.org/coprs/adrian/criu-el7/<br />
<br />
=== CoreOS ===<br />
* https://github.com/coreos/coreos-overlay/tree/master/sys-process/criu<br />
<br />
=== Debian ===<br />
* https://tracker.debian.org/pkg/criu<br />
<br />
=== Fedora ===<br />
* https://apps.fedoraproject.org/packages/criu<br />
<br />
=== Gentoo ===<br />
* http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/sys-process/criu/<br />
<br />
=== Kali ===<br />
* http://pkg.kali.org/pkg/criu<br />
<br />
=== Mageia ===<br />
* http://madb.mageia.org/package/show/application/0/name/criu<br />
<br />
=== OpenSUSE ===<br />
* https://build.opensuse.org/package/show/openSUSE:Factory/criu#<br />
<br />
=== Ubuntu ===<br />
* https://launchpad.net/ubuntu/+source/criu<br />
* https://launchpad.net/~criu/+archive/ubuntu/ppa<br />
<br />
== External links ==<br />
<br />
* [https://repology.org/project/criu/versions repology.org: search CRIU package in various Linux distributions]<br />
* [https://qa.debian.org/popcon.php?package=criu Popularity contest statistics for criu]</div>Kirhttps://criu.org/index.php?title=Packages&diff=5150Packages2021-03-24T18:31:30Z<p>Kir: moved distros to a sub-section; formatting changes</p>
<hr />
<div>This page summarizes our knowledge about CRIU packages in various Linux distributions.<br />
<br />
== Specific distributions ==<br />
<br />
<br />
=== AltLinux ===<br />
* http://packages.altlinux.org/crtools<br />
<br />
=== Arch ===<br />
* https://aur.archlinux.org/packages/criu/<br />
<br />
As of '''2018-09-12''' the kernel package '''linux''' has CONFIG_CHECKPOINT_RESTORE enabled. The kernel package '''linux-lts''' has CONFIG_CHECKPOINT_RESTORE '''disabled'''.<br />
<br />
=== CentOS ===<br />
* https://git.centos.org/rpms/criu/releases<br />
* https://copr.fedorainfracloud.org/coprs/adrian/criu-el7/<br />
<br />
=== CoreOS ===<br />
* https://github.com/coreos/coreos-overlay/tree/master/sys-process/criu<br />
<br />
=== Debian ===<br />
* https://tracker.debian.org/pkg/criu<br />
<br />
=== Fedora ===<br />
* https://apps.fedoraproject.org/packages/criu<br />
<br />
=== Gentoo ===<br />
* http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/sys-process/criu/<br />
<br />
=== Kali ===<br />
* http://pkg.kali.org/pkg/criu<br />
<br />
=== Mageia ===<br />
* http://madb.mageia.org/package/show/application/0/name/criu<br />
<br />
=== OpenSUSE ===<br />
* https://build.opensuse.org/package/show/openSUSE:Factory/criu#<br />
<br />
=== Ubuntu ===<br />
* https://launchpad.net/ubuntu/+source/criu<br />
* https://launchpad.net/~criu/+archive/ubuntu/ppa<br />
<br />
== External links ==<br />
<br />
* [https://repology.org/project/criu/versions repology.org: search CRIU package in various Linux distributions]<br />
* [http://pkgs.org/search/criu pkgs.org: search CRIU package in various Linux distributions]<br />
* [https://qa.debian.org/popcon.php?package=criu Popularity contest statistics for criu]</div>Kirhttps://criu.org/index.php?title=Packages&diff=5149Packages2021-03-24T18:07:18Z<p>Kir: added link to repology</p>
<hr />
<div>This page summarizes our knowledge about CRIU packages in various Linux distributions.<br />
<br />
== AltLinux ==<br />
: http://packages.altlinux.org/crtools<br />
<br />
== Arch ==<br />
: https://aur.archlinux.org/packages/criu/<br />
<br />
As of '''2018-09-12''' the kernel package '''linux''' has CONFIG_CHECKPOINT_RESTORE enabled. The kernel package '''linux-lts''' has CONFIG_CHECKPOINT_RESTORE '''disabled'''.<br />
<br />
== CentOS ==<br />
: https://git.centos.org/rpms/criu/releases<br />
: https://copr.fedorainfracloud.org/coprs/adrian/criu-el7/<br />
<br />
== CoreOS ==<br />
: https://github.com/coreos/coreos-overlay/tree/master/sys-process/criu<br />
<br />
== Debian ==<br />
: https://tracker.debian.org/pkg/criu<br />
<br />
== Fedora ==<br />
: https://apps.fedoraproject.org/packages/criu<br />
<br />
== Gentoo ==<br />
: http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/sys-process/criu/<br />
<br />
== Kali ==<br />
: http://pkg.kali.org/pkg/criu<br />
<br />
== Mageia ==<br />
: http://madb.mageia.org/package/show/application/0/name/criu<br />
<br />
== OpenSUSE ==<br />
: https://build.opensuse.org/package/show/openSUSE:Factory/criu#<br />
<br />
== Ubuntu ==<br />
: https://launchpad.net/ubuntu/+source/criu<br />
: https://launchpad.net/~criu/+archive/ubuntu/ppa<br />
<br />
<br />
== See also ==<br />
<br />
* [https://repology.org/project/criu/versions repology.org: search CRIU package in various Linux distributions]<br />
* [http://pkgs.org/search/criu pkgs.org: search CRIU package in various Linux distributions]<br />
* [https://qa.debian.org/popcon.php?package=criu Popularity contest statistics for criu]</div>Kirhttps://criu.org/index.php?title=MediaWiki:Sidebar&diff=5132MediaWiki:Sidebar2021-02-13T03:50:00Z<p>Kir: </p>
<hr />
<div>* navigation<br />
** mainpage|mainpage-description<br />
** recentchanges-url|recentchanges<br />
** randompage-url|randompage<br />
** helppage|help<br />
* SEARCH<br />
* TOOLBOX<br />
* LANGUAGES<br />
<br />
* News<br />
** https://twitter.com/__criu__|Twitter<br />
** http://www.youtube.com/c/OpenVZorg|YouTube<br />
<br />
* External resources<br />
** https://github.com/checkpoint-restore/criu|Github / source code<br />
** https://github.com/checkpoint-restore/criu/issues|Issues / bugs<br />
** https://ci.openvz.org/view/CRIU/|Mr. Jenkins<br />
** https://www.openhub.net/p/criu|Open Hub<br />
** http://openvz.org/|OpenVZ</div>Kirhttps://criu.org/index.php?title=Articles&diff=5117Articles2020-11-14T03:42:28Z<p>Kir: shrink the list for main page</p>
<hr />
<div><noinclude>This is a collection of external articles regarding the CRIU project, sorted by date.<br />
<!--<br />
<br />
NOTE this page is included into [[Main Page]] (look for External articles)<br />
so please make sure that Main Page looks good after your edits!<br />
<br />
PLEASE keep the lists sorted by date, newest ones on top.<br />
<br />
--><br />
</noinclude><br />
* 2020-04-30, [https://dl.acm.org/doi/abs/10.1145/3342195.3387555 Balancing efficiency and fairness in heterogeneous GPU clusters for deep learning]<br />
* 2020-03-17, [https://www.ssrg.ece.vt.edu/papers/vee20-h-container.pdf Edge Computing -- the Case for Heterogeneous-ISA Container Migration]<br />
* 2019-10-03, [https://dl.acm.org/citation.cfm?id=3357542 Fast In-Memory CRIU for Docker Containers]<br />
* 2019-09-24, [https://ieeexplore.ieee.org/document/8916436 Using Container Migration for High Performance Computing (HPC) Workloads Resilience]<br />
* 2019-09-11, [https://arxiv.org/pdf/1909.04945.pdf Performance Estimation of Container-BasedCloud-to-Fog Offloading]<br />
<!------------------------------------------------<br />
This is to cut the rest of it for Main Page,<br />
adding the More... link instead.<br />
Make sure to move this whole block up from time to time.<br />
--><br />
<includeonly>: '''[[Articles|More external articles...]]'''</includeonly><noinclude><br />
<!--<br />
the below stuff is now shown on the Main Page<br />
--------------------------------------------------><br />
* 2019-07-16, [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=8754197 FastContainer: A Homeostatic System Architecture High-speed Adapting Execution Environment Changes]<br />
* 2019-07-11, [https://ieeexplore.ieee.org/abstract/document/8814504 Exploring Potential for Non-Disruptive Vertical Auto Scaling and Resource Estimation in Kubernetes]<br />
* 2019-07, University of Twente: [https://essay.utwente.nl/78342/1/coenen_MA_EEMCS.pdf Increasing Availability of the AEPU by Improving the Update Process]<br />
* 2019-05-25, [https://dl.acm.org/citation.cfm?id=3303978 Replayable Execution Optimized for Page Sharing for a Managed Runtime Environment]<br />
* 2019-04-29, Binghamton University: [http://www.cs.binghamton.edu/~huilu/pubs/mWarp.pdf mWarp: Accelerating Intra-Host Live Container Migration via Memory Warping]<br />
* 2019-04-10, [https://lisas.de/~adrian/posts/2019-Apr-10-criu-and-selinux.html CRIU and SELinux]<br />
* 2019-03-27, [https://www.mdpi.com/1424-8220/19/7/1488/pdf Container Migration in the Fog: A Performance Evaluation]<br />
* 2019-03-25, [https://dl.acm.org/citation.cfm?id=3313947 Checkpointing and Migration of IoT Edge Functions]<br />
* 2019-03-24, Future University Hakodate: [https://doi.asiabsdcon.org/10.25263/asiabsdcon2019/p07a Yet Another Container Migration on FreeBSD]<br />
* 2019-03-09, [https://link.springer.com/article/10.1007/s10586-019-02920-6 Provenance-based fault tolerance technique recommendation for cloud-based scientific workflows: a practical approach]<br />
* 2019-02-26, Georgia Institute of Technology / Peking University: [https://www.ndss-symposium.org/wp-content/uploads/2019/02/ndss2019_05A-3_Duan_paper.pdf Automating Patching of Vulnerable Open-Source Software Versions in Application Binaries]<br />
* 2019-01-30, University West: [https://www.researchgate.net/publication/330798282_Evaluating_Distributed_MPI_Checkpoint_and_Restore_using_Docker_Containers_and_CRIU Evaluating Distributed MPI Checkpoint and Restore using Docker Containers and CRIU]<br />
* 2018-12, University of Lille: [https://tel.archives-ouvertes.fr/tel-02011337/document Flexible Framework for Elasticity in Cloud Computing]<br />
* 2018-12, Arizona State University: [https://search.proquest.com/openview/ef9070310256fe9ec9a663ebde537b36/1 Concurrent Checkpointing for Embedded Real-Time Systems]<br />
* 2018-11-08, [https://lisas.de/~adrian/posts/2018-Nov-08-criu-configuration-files.html CRIU configuration files]<br />
* 2018-11-06, [https://www.redhat.com/en/blog/using-criu-upgrade-vpn-servers-kernel-without-dropping-connections Using CRIU to upgrade a VPN server's kernel without dropping connections]<br />
* 2018-10-13, [https://dl.acm.org/citation.cfm?id=3290626 Linux Process Tree Reconstruction Using The Attributed Grammar-Based Tree Transformation Model]<br />
* 2018-10-10, [https://podman.io/blogs/2018/10/10/checkpoint-restore.html Adding checkpoint/restore support to Podman]<br />
* 2018-09-15, [https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=8539562 Stateful Container Migration employing Checkpoint-based Restoration for Orchestrated Container Clusters]<br />
* 2018-09-07, [https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=8502659 Container Live Migration for Latency Critical Industrial Applications on Edge Computing]<br />
* 2018-08-15, University of Maryland: [https://drum.lib.umd.edu/bitstream/handle/1903/20499/CS-TR-5056.pdf Fast and Service-preserving Recovery from Malware Infections Using CRIU]<br />
* 2018-07-31, [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6131214/ Hot-starting software containers for STAR aligner]<br />
* 2018-07-07, Moscow Institute of Physics and Technology: [https://pdfs.semanticscholar.org/9ac4/f8ab4fd0492bfdc503831f60a5ce3d1d50a5.pdf?_ga=2.17262585.1140385641.1554239661-2109847679.1554239661 Using CRIU with HPC Containers: Field Experience]<br />
* 2018-06-28, University of Aberdeen: [https://link.springer.com/chapter/10.1007/978-3-030-02465-9_13 Efficient Live Migration of Linux Containers]<br />
* 2018-03-24, [https://www.smitechow.com/2018/03/compile-criu-on-centos-6.html Compile CRIU on CentOS 6]<br />
* 2017-12-06, [https://lisas.de/~adrian/posts/2017-Dec-06-optimizing-live-container-migration-in-lxd.html Optimizing live container migration in LXD]<br />
* 2017-10-12, Red Hat Blog: [http://rhelblog.redhat.com/2017/10/12/container-migration-around-the-world/ Container Migration Around The World]<br />
* 2017-07-19, Red Hat Blog: [https://www.redhat.com/en/blog/how-can-process-snapshotrestore-help-save-your-day How can process snapshot/restore help save your day?]<br />
* 2017-06-29, University West, Sweden: [http://www.diva-portal.org/smash/record.jsf?pid=diva2%3A1144045&dswid=4414 Distributed Checkpointing with Docker Containers in High Performance Computing]<br />
* 2017-06-06, [https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=7980161 Voyager: Complete Container State Migration]<br />
* 2017-06-06, Selectel Blog: [https://blog.selectel.com/managing-containers-runc/ Managing Containers in runC]<br />
* 2016-12-16, University of Lisbon: [http://www.gsd.inesc-id.pt/~pjpf/ALMA-middleware-2016.pdf ALMA – GC-assisted JVM Live Migration for Java Server Applications]<br />
* 2016-07-20, Red Hat KnowledgeBase: [https://access.redhat.com/articles/2455211 CRIU - Checkpoint/Restore in user space]<br />
* 2016-07-20, LWN.net: [https://lwn.net/SubscriberLink/694593/4d6291b3f727791a/ Quality in open source: testing CRIU]<br />
* 2016-06-22, Usenix: [https://www.usenix.org/conference/atc16/technical-sessions/presentation/kashyap Instant OS Updates via Userspace Checkpoint-and-Restart]<br />
* 2016-05-04: [http://lisas.de/~adrian/?p=1183 Lazy Process Migration]<br />
* 2015-12-31, [http://kimh.github.io/blog/jp/criu/experiment-to-suspend-and-resume-docker-container-with-criu-jp/ Use the CRIU Docker container of stop / resume to the challenge]<br />
* 2015-12-31, [http://blog.codeship.com/how-containers-will-change-the-game-server-hosting-industry/ How Containers Will Change the Game Server Hosting Industry]<br />
* 2015-09-21, [http://blog.circleci.com/checkpoint-and-restore-docker-container-with-criu/ Checkpoint and restore Docker container with CRIU]<br />
* 2015-09-21, [https://blog.docker.com/2015/09/dolly-demo-linuxcon-runc/ Dolly Demo at LinuxCon: Rapid cloning of existing services with runC]<br />
* 2015-09-10, [http://blog.tonicdev.com/2015/09/10/time-traveling-in-node.js-notebooks.html Time Traveling in Node.js Notebooks]<br />
* 2015-01-01, [http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/openstack-at-cisco/linux-containers-white-paper-cisco-red-hat.pdfLinux Containers: Why They’re in Your Future and What Has to Happen First]<br />
* 2015-07-01, [https://kubernetes.io/blog/2015/07/how-did-quake-demo-from-dockercon-work/ How did the Quake demo from DockerCon Work?]<br />
* 2015-05-06, [https://insights.ubuntu.com/2015/05/06/live-migration-in-lxd/ Live Migration in LXD] Ubuntu Insignts<br />
* 2015-04-22, TuxDiary [http://tuxdiary.com/2015/04/22/dump-debug-resume-process-criu/ Dump, debug, resume process with criu]<br />
* 2014-12-12, Symposium on Information and Communication Systems (SInCom 2014) [https://lisas.de/~adrian/proceedingsSInCom2014.pdf Checkpoint/Restore in User-Space with Open MPI]<br />
* 2014-09-31, [http://www.reuters.com/article/wa-parallels-idUSnBw035202a+100+BSW20141103 Parallels Surpasses One Million Deployed Virtual Containers]<br />
* 2014-08-01, ADMIN magazine: [http://www.admin-magazine.com/Archive/2014/22/Save-and-Restore-Linux-Processes-with-CRIU Save and Restore Linux Processes with CRIU]<br />
* 2014-02-15, OCCAM Reproduce: [http://heirman.net/papers/reproduce2014.pdf Efficient, Accurate and Reproducible Simulation of Multi-Threaded Workloads] ([http://www.occamportal.org/slides/reproduce/reproduce14_slides_05.pdf slides])<br />
* 2013-11-25, Phoronix: [http://www.phoronix.com/scan.php?page=news_item&px=MTUyNjE Checkpoint-Restore Hits v1.0: Freeze Your Linux Apps]<br />
* 2013-11-25, LWN: [http://lwn.net/Articles/574918/ A note about 1.0]<br />
* 2013-10-29, LWN: [http://lwn.net/Articles/572125/ Kernel summit report]<br />
* 2013-02-01, A blog [http://www.anchor.com.au/blog/2013/02/overview-of-checkpoint-and-restore-live-migrating-processes-on-a-linux-system/ post] upon LCA-2013 talk.<br />
* 2013-01-09, LWN: [http://lwn.net/Articles/531939/ Checkpoint/restore and signals]<br />
* 2012-11-20, LWN: [http://lwn.net/Articles/525675/ LCE: Checkpoint/restore in user space: are we there yet?]<br />
* 2012-07-24, OpenVZ blog: [http://openvz.livejournal.com/42414.html CRtools 0.1 released!]<br />
* 2012-05-01, LWN: [http://lwn.net/Articles/495304/ TCP connection repair]<br />
* 2012-02-26, The International Symposium on Grids and Clouds (ISGC) [https://lisas.de/~adrian/ISGC-2012_031.pdf Pos (isgc 2012) 031 live process migration for load balancing and/or fault tolerance]<br />
* 2012-01-31, LWN: [http://lwn.net/Articles/478111/ Preparing for user-space checkpoint/restore]<br />
* 2011-07-19, LWN: [http://lwn.net/Articles/452184/ Checkpoint/restart (mostly) in user space]<br />
<br />
=== In Russian ===<br />
* 13.05.2016, Habrahabr: [https://habrahabr.ru/post/283504/ Особенности тестирования технологии C/R в Linux]<br />
* 09.03.2016, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=44015 Выпуск CRIU 2.0, системы для сохранения и восстановления состояния процессов в Linux]<br />
* 18.12.2015, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=43539 CRIU, путь от вызывающей непонимание разработки до интеграции в Red Hat Enterprise Linux] <br />
* 09.12.2015, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=43489 Выпуск CRIU 1.8, системы для сохранения и восстановления состояния процессов в Linux] <br />
* 09.09.2015, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=42939 Выпуск CRIU 1.7, системы для сохранения и восстановления состояния процессов в Linux]<br />
* 25.08.2015, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=42850 Проект OpenVZ анонсировал новый компонент для миграции Linux контейнеров - P.Haul]<br />
* 27.05.2015, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=42315 Статус интеграции проектов CRIU и Docker]<br />
* 25.11.2013, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=38519 Анонс выхода 1.0]<br />
* 28.04.2015, Типичный программист: [http://tproger.ru/interview/pavel-emelyanov/ Разработка ядра Linux — это общение в клубе по интересам]<br />
* 22.04.2013, Habrahabr: [http://habrahabr.ru/post/177499/ В преддверии очередного релиза CRIU]<br />
* 04.03.2013, IT-computer: [http://www.it-computer.com/osvaivaem-sistemu-zamorozki-processov-criu Осваиваем систему заморозки процессов CRIU]<br />
* 28.09.2012, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=34958 CRIU 0.2 release] <br />
* 05.11.2013, Xakep: [https://xakep.ru/2013/11/05/criu-manual/ Осваиваем систему заморозки процессов CRIU]<br />
* 15.08.2013, Habrahabr: [http://habrahabr.ru/company/parallels/blog/190066/ «Разработка ядра Linux — это общение в клубе по интересам»]<br />
* 01.10.2012, YaC 2012: [http://events.yandex.ru/events/yac/2012/talks/352/ больше, чем живая миграция для Linux контейнеров]<br />
* 24.07.2012, Habrahabr: [http://habrahabr.ru/post/148413/ CRIU — новый амбициозный проект для сохранения и восстановления состояния процессов]<br />
* 24.07.2012, Ru-OpenVZ blog: [http://ru-openvz.livejournal.com/5753.html Вышел первый релиз CRtools, версия 0.1]<br />
* 24.07.2012, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=34408 Первый релиз CRtools, утилиты для заморозки и восстановления состояния процессов в Linux]<br />
* 24.07.2012, LOR: [http://www.linux.org.ru/news/kernel/8021514 Вышел первый релиз CRtools, версия 0.1]<br />
* Копипаста о v0.1 "CRIU / CRtools 0.1 — создание контрольных точек Linux-приложений и восстановление с них": [http://rosinvest.com/novosti/949423 Rosinvest], [http://www.nixp.ru/news/11854.html NIXP] [http://pcnews.ru/top/news/day/criu-crtools-linux-openvz-checkpoint-restore-in-userspace-cpt-system-90-10-lxc-org-398305.html PCNews]<br />
</noinclude></div>Kirhttps://criu.org/index.php?title=BPF_Maps&diff=5116BPF Maps2020-11-14T03:37:51Z<p>Kir: formatting</p>
<hr />
<div>BPF maps are kernel objects which store data (used by BPF programs) in the form of key-value pairs. Applications access BPF maps using file descriptors. C/R of BPF maps involves serializing their ''meta-data'' and ''data'':<br />
<br />
: '''Meta-data''' - This includes information such as map type, key size, value size, etc. CRIU obtains this information from the proc filesystem and using the <code>bpf</code> system call with argument <code>BPF_OBJ_GET_INFO_BY_FD</code>.<br />
<br />
: '''Data''' - This is the map's contents, i.e. the actual key-value pairs. CRIU relies on batch operations to read (<code>BPF_MAP_LOOKUP_BATCH</code>) key-value pairs from maps during the checkpoint stage and to write (<code>BPF_MAP_UPDATE_BATCH</code>) them during the restore phase.<br />
<br />
== Support for BPF Maps ==<br />
<br />
CRIU currently supports C/R of the following BPF map types:<br />
<br />
* BPF_MAP_TYPE_HASH<br />
* BPF_MAP_TYPE_ARRAY<br />
<br />
== To-Do ==<br />
<br />
* C/R of BTF (BPF Type Format) information<br />
* C/R of other kinds of BPF maps<br />
<br />
== External Links ==<br />
* [https://www.kernel.org/doc/html/latest/bpf/index.html BPF Documentation]<br />
* [https://blogs.oracle.com/linux/notes-on-bpf-1 Notes on BPF]<br />
* [https://www.collabora.com/news-and-blog/blog/2019/04/05/an-ebpf-overview-part-1-introduction/ An eBPF Overview]<br />
<br />
[[Category: Under the hood]]</div>Kirhttps://criu.org/index.php?title=Download/criu/3.13&diff=5115Download/criu/3.132020-11-04T00:03:10Z<p>Kir: added willet image</p>
<hr />
<div>[[Image:Willet.png|200px|right]]<br />
<!--<br />
**** FOR STEPS NEEDED TO MAKE A RELEASE, SEE https://criu.org/Releasing<br />
Use {{Bug|123}} to link to a github issue<br />
--><br />
[[Image:Willet_texas_april2003_1_1280.png|400px|right]]<br />
{{Release|3.13}}<br />
<br />
=== New features ===<br />
* VDSO: arm32 support<br />
* Add TLS support for [[page server]] communications<br />
* "Ignore" mode for {{Opt|--manage-cgroups}}<br />
* Restore SO_BROADCAST option for inet [[sockets]]<br />
<br />
=== Bugfixes ===<br />
* Auxiliary events were left in inotify queues<br />
* Lazy-pages daemon didn't detect stack pages and surrounders properly and marked them as "lazy"<br />
* Memory and resource leakage fixes detected by coverity, cppcheck and clang<br />
<br />
=== Improvements ===<br />
* Use gettimeofday() directly from vdso for restore timings<br />
* Reformat all .py code into pep8 style</div>Kirhttps://criu.org/index.php?title=Download/criu/3.15&diff=5114Download/criu/3.152020-11-03T23:59:37Z<p>Kir: cgroup2 -> cgroups v2</p>
<hr />
<div><!--<br />
**** FOR STEPS NEEDED TO MAKE A RELEASE, SEE https://criu.org/Releasing<br />
Use {{Bug|123}} to link to a github issue<br />
--><br />
[[Image:3.15.jpg|400px|right]]<br />
{{Release|3.15}}<br />
<br />
=== New features ===<br />
* Introduced criu-image-streamer (also see https://github.com/checkpoint-restore/criu-image-streamer).<br />
* Added MIPS support.<br />
* Allow checkpointing out of existing PID namespace and restoring into existing PID namespace.<br />
* Added additional file validation mechanisms (buildid in addition to filesize).<br />
* Added support to checkpoint and restore BPF hash maps (BPF_MAP_TYPE_HASH) and array maps (BPF_MAP_TYPE_ARRAY).<br />
* Initial cgroups v2 support<br />
<br />
=== Bugfixes ===<br />
* Many fixes here and there<br />
<br />
=== Improvements ===<br />
* Additional libcriu interfaces (orphan_pts_master, version, FD handling)<br />
* Use the new mount API</div>Kirhttps://criu.org/index.php?title=Packages&diff=5068Packages2020-07-07T18:39:18Z<p>Kir: fix centos link</p>
<hr />
<div>This page summarizes our knowledge about CRIU packages in various Linux distributions.<br />
<br />
== AltLinux ==<br />
: http://packages.altlinux.org/crtools<br />
<br />
== Arch ==<br />
: https://aur.archlinux.org/packages/criu/<br />
<br />
As of '''2018-09-12''' the kernel package '''linux''' has CONFIG_CHECKPOINT_RESTORE enabled. The kernel package '''linux-lts''' has CONFIG_CHECKPOINT_RESTORE '''disabled'''.<br />
<br />
== CentOS ==<br />
: https://git.centos.org/rpms/criu/releases<br />
: https://copr.fedorainfracloud.org/coprs/adrian/criu-el7/<br />
<br />
== CoreOS ==<br />
: https://github.com/coreos/coreos-overlay/tree/master/sys-process/criu<br />
<br />
== Debian ==<br />
: https://tracker.debian.org/pkg/criu<br />
<br />
== Fedora ==<br />
: https://apps.fedoraproject.org/packages/criu<br />
<br />
== Gentoo ==<br />
: http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/sys-process/criu/<br />
<br />
== Kali ==<br />
: http://pkg.kali.org/pkg/criu<br />
<br />
== Mageia ==<br />
: http://madb.mageia.org/package/show/application/0/name/criu<br />
<br />
== OpenSUSE ==<br />
: https://build.opensuse.org/package/show/openSUSE:Factory/criu#<br />
<br />
== Ubuntu ==<br />
: https://launchpad.net/ubuntu/+source/criu<br />
: https://launchpad.net/~criu/+archive/ubuntu/ppa<br />
<br />
<br />
== See also ==<br />
<br />
* [http://pkgs.org/search/criu Search CRIU package in various Linux distributions]<br />
* [https://qa.debian.org/popcon.php?package=criu Popularity contest statistics for criu]</div>Kirhttps://criu.org/index.php?title=Template:Codename&diff=5055Template:Codename2020-04-21T03:01:51Z<p>Kir: added 3.14</p>
<hr />
<div><includeonly>{{#switch: v{{{1}}}<br />
| v2.1 = Steel Lapwing<br />
| v2.2 = Carbon Nightingale<br />
| v2.3 = Wooden Duck<br />
| v2.4 = Marble Lark<br />
| v2.5 = Concrete Oriole<br />
| v2.6 = Paper Crane<br />
| v2.7 = Rubber Owl<br />
| v2.8 = Bronze Siskin<br />
| v2.9 = Silk Tit<br />
| v2.10 = Brass Waxwing<br />
| v2.11 = Acrylic Bullfinch<br />
| v2.12 = Vulcanite Rook<br />
| v3.0 = Basalt Wagtail<br />
| v3.1 = Graphene Swift<br />
| v3.2 = Tin Hoopoe<br />
| v3.3 = Crystal Pelican<br />
| v3.4 = Cobalt Swan<br />
| v3.5 = Clay Jay<br />
| v3.6 = Alabaster Finch<br />
| v3.7 = Vinyl Magpie<br />
| v3.8 = Snow Bunting<br />
| v3.9 = Sand Martin<br />
| v3.10 = Granite Eagle<br />
| v3.11 = Glass Flamingo<br />
| v3.12 = Ice Penguin<br />
| v3.13 = Silicon Willet<br />
| v3.14 = Platinum Peacock<br />
| <!-- no codename --><br />
}}</includeonly><noinclude><br />
<br />
This template is used to get the codename of a specified release. If there is no codename, empty string is produced.<br />
<br />
== Usage ==<br />
<br />
<pre><nowiki>{{Codename|VERSION}}</nowiki></pre><br />
<br />
== Examples ==<br />
<br />
{| class="wikitable"<br />
! Markup<br />
! Result<br />
|-<br />
| <pre><nowiki>{{Codename|3.3}}</nowiki></pre><br />
| {{Codename|3.3}}<br />
|-<br />
| <pre><nowiki>{{Codename|2.1}}</nowiki></pre><br />
| {{Codename|2.1}}<br />
|-<br />
| <pre><nowiki>{{Codename|2.0}}</nowiki></pre><br />
| {{Codename|2.0}}<br />
|}<br />
<br />
== See also ==<br />
<br />
* [[Release schedule]] for future codenames<br />
* [[Template:Release date]]<br />
* [[Template:criu]]<br />
* [[Template:Release]]<br />
* [[Template:Latest release]]<br />
<br />
</noinclude></div>Kirhttps://criu.org/index.php?title=Template:Codename&diff=5054Template:Codename2020-04-21T03:01:09Z<p>Kir: rm 3.2.1 (patch releases does not have codenames)</p>
<hr />
<div><includeonly>{{#switch: v{{{1}}}<br />
| v2.1 = Steel Lapwing<br />
| v2.2 = Carbon Nightingale<br />
| v2.3 = Wooden Duck<br />
| v2.4 = Marble Lark<br />
| v2.5 = Concrete Oriole<br />
| v2.6 = Paper Crane<br />
| v2.7 = Rubber Owl<br />
| v2.8 = Bronze Siskin<br />
| v2.9 = Silk Tit<br />
| v2.10 = Brass Waxwing<br />
| v2.11 = Acrylic Bullfinch<br />
| v2.12 = Vulcanite Rook<br />
| v3.0 = Basalt Wagtail<br />
| v3.1 = Graphene Swift<br />
| v3.2 = Tin Hoopoe<br />
| v3.3 = Crystal Pelican<br />
| v3.4 = Cobalt Swan<br />
| v3.5 = Clay Jay<br />
| v3.6 = Alabaster Finch<br />
| v3.7 = Vinyl Magpie<br />
| v3.8 = Snow Bunting<br />
| v3.9 = Sand Martin<br />
| v3.10 = Granite Eagle<br />
| v3.11 = Glass Flamingo<br />
| v3.12 = Ice Penguin<br />
| v3.13 = Silicon Willet<br />
| <!-- no codename --><br />
}}</includeonly><noinclude><br />
<br />
This template is used to get the codename of a specified release. If there is no codename, empty string is produced.<br />
<br />
== Usage ==<br />
<br />
<pre><nowiki>{{Codename|VERSION}}</nowiki></pre><br />
<br />
== Examples ==<br />
<br />
{| class="wikitable"<br />
! Markup<br />
! Result<br />
|-<br />
| <pre><nowiki>{{Codename|3.3}}</nowiki></pre><br />
| {{Codename|3.3}}<br />
|-<br />
| <pre><nowiki>{{Codename|2.1}}</nowiki></pre><br />
| {{Codename|2.1}}<br />
|-<br />
| <pre><nowiki>{{Codename|2.0}}</nowiki></pre><br />
| {{Codename|2.0}}<br />
|}<br />
<br />
== See also ==<br />
<br />
* [[Release schedule]] for future codenames<br />
* [[Template:Release date]]<br />
* [[Template:criu]]<br />
* [[Template:Release]]<br />
* [[Template:Latest release]]<br />
<br />
</noinclude></div>Kirhttps://criu.org/index.php?title=Download/criu/3.14&diff=5053Download/criu/3.142020-04-21T02:59:01Z<p>Kir: more links</p>
<hr />
<div><!--<br />
**** FOR STEPS NEEDED TO MAKE A RELEASE, SEE https://criu.org/Releasing<br />
Use {{Bug|123}} to link to a github issue<br />
--><br />
{{Release|3.14}}<br />
<br />
=== New features ===<br />
* C/R of memfd memory mappings and file descriptors.<br />
* Add time namespace support.<br />
* Add the [[Optimizing_pre_dump_algorithm|read pre-dump mode which uses process_vm_readv]].<br />
* Add {{Opt|--cgroup-yard}} option<br />
* Add support of the cgroup v2 freezer.<br />
* Add support of opened O_PATH fds.<br />
<br />
=== Bugfixes ===<br />
* Fix C/R ia32 processes on AMD {{Bug|398}}<br />
* Fix cross-compilation<br />
* Many fixes here and there<br />
<br />
=== Improvements ===<br />
* Use clone3() with set_tid to restore processes<br />
* Clean up compel headers.<br />
* Use the new mount API</div>Kirhttps://criu.org/index.php?title=Podman&diff=5052Podman2020-04-20T23:09:40Z<p>Kir: /* Container Live Migration */ there was no 3.12.1 (officially)</p>
<hr />
<div>This article describes the status of CRIU integration with [https://podman.io/ Podman], and how to use it.<br />
<br />
== Container Checkpoint/Restore ==<br />
<br />
Podman supports checkpointing and restoring since version 0.10.1 (October 2018). This initial support only supports checkpointing and restoring containers on the same host:<br />
<br />
# podman run -d --name looper busybox /bin/sh -c \<br />
'i=0; while true; do echo $i; i=$(expr $i + 1); sleep 1; done'<br />
<br />
You can verify that the container is running by observing its logs:<br />
<br />
# podman logs -l<br />
<br />
Or by running <code>podman ps</code>.<br />
<br />
If you do this a few times you will notice that the integers are increasing. Now the container can be checkpointed:<br />
<br />
# podman container checkpoint -l<br />
<br />
Once the container is checkpointed it will be no longer visible in <code>podman ps</code>.<br />
<br />
The following command can be used to restore the container:<br />
<br />
# podman container restore -l<br />
<br />
Using <code>podman logs -l</code> or <code>podman ps</code> it can be verified that the container was restored and that it continued running from the point in time when it was checkpointed.<br />
<br />
This requires at least CRIU 3.11.<br />
<br />
There is one recording demonstrating Podman's checkpoint/restore support:<br />
<br />
* https://asciinema.org/a/205183<br />
<br />
== Container Live Migration ==<br />
<br />
To be actually able to migrate a container from one system to another at least Podman version 1.4.0 (June 2019) is required. With version 1.4.0 Podman is now able to export a complete checkpoint which can then be transferred:<br />
<br />
# podman run -d --name looper busybox /bin/sh -c \<br />
'i=0; while true; do echo $i; i=$(expr $i + 1); sleep 1; done'<br />
# podman container checkpoint -l --export=/tmp/chkpt.tar.gz<br />
# scp /tmp/chkpt.tar.gz <destination-host>:/tmp<br />
<br />
Once the checkpoint archive has been transferred to the destination system the container can there be restored from the checkpoint archive:<br />
<br />
# podman container restore --import=/tmp/chkpt.tar.gz<br />
<br />
Now the container continues to run from the same point where it was previously checkpointed on the source system.<br />
<br />
From a checkpoint archive it is also possible to restore multiple copies of a container with different names:<br />
<br />
# podman container restore --import=/tmp/chkpt.tar.gz -n looper1<br />
# podman container restore --import=/tmp/chkpt.tar.gz -n looper2<br />
# podman container restore --import=/tmp/chkpt.tar.gz -n looper3<br />
<br />
Each of these restored containers will be running from the point in time the container was checkpointed.<br />
<br />
One important limitation is that the container cannot modify the file-system. If a container modifies the file-system, these modified directories either have to be mounted into the container (<code>-v</code>) or these directories have to be marked as <code>--tmpfs</code>.<br />
<br />
This requires at least CRIU 3.12 (3.13 for full SELinux support).<br />
<br />
There are two recordings demonstrating Podman's container migration feature:<br />
<br />
* https://asciinema.org/a/249918<br />
* https://asciinema.org/a/249922</div>Kirhttps://criu.org/index.php?title=Download/criu/3.13&diff=5051Download/criu/3.132020-04-20T23:05:38Z<p>Kir: /* Bugfixes */</p>
<hr />
<div>[[Image:Willet.png|200px|right]]<br />
<!--<br />
**** FOR STEPS NEEDED TO MAKE A RELEASE, SEE https://criu.org/Releasing<br />
Use {{Bug|123}} to link to a github issue<br />
--><br />
{{Release|3.13}}<br />
<br />
=== New features ===<br />
* VDSO: arm32 support<br />
* Add TLS support for [[page server]] communications<br />
* "Ignore" mode for {{Opt|--manage-cgroups}}<br />
* Restore SO_BROADCAST option for inet [[sockets]]<br />
<br />
=== Bugfixes ===<br />
* Auxiliary events were left in inotify queues<br />
* Lazy-pages daemon didn't detect stack pages and surrounders properly and marked them as "lazy"<br />
* Memory and resource leakage fixes detected by coverity, cppcheck and clang<br />
<br />
=== Improvements ===<br />
* Use gettimeofday() directly from vdso for restore timings<br />
* Reformat all .py code into pep8 style</div>Kirhttps://criu.org/index.php?title=Download/criu&diff=5050Download/criu2020-04-20T23:04:28Z<p>Kir: there's no 3.12.1</p>
<hr />
<div>== Latest version ==<br />
<br />
{{:Download/criu/{{Last version}}}}<br />
<br />
== Old versions ==<br />
<br />
=== 3.x ===<br />
<br />
The following [[Download/criu/3.x|3.x]] releases were made:<br />
<br />
* {{fe|criu|{{nln}}* |3.12|3.11|3.10|3.9|3.8.1|3.8|3.7|3.6|3.5|3.4|3.3|3.2.1|3.2|3.1|3.0}}<br />
<br />
=== 2.x ===<br />
<br />
The following [[Download/criu/2.x|2.x]] releases were made:<br />
<br />
* {{fe|criu|{{nln}}* |2.12.1|2.12|2.11.1|2.11|2.10|2.9|2.8|2.7|2.6|2.5|2.4|2.3|2.2|2.1|2.0}}<br />
<br />
=== 1.x ===<br />
<br />
The following [[Download/criu/1.x|1.x]] releases were made:<br />
<br />
* {{fe|criu|{{nln}}* |1.8|1.7.2|1.7|1.6.1|1.6|1.5.2|1.5.1|1.5|1.4|1.3.1|1.3|1.3-rc2|1.3-rc1|1.2|1.1|1.1-rc2|1.1-rc1|1.0}}<br />
<br />
=== 0.x ===<br />
<br />
The following [[Download/criu/0.x|0.x]] releases were made:<br />
<br />
* {{fe|criu|{{nln}}* |0.8|0.7|0.6|0.5|0.4|0.3|0.2|0.1}}<br />
<br />
== See also ==<br />
<br />
* [[Changelogs]] to see all the changelogs on a single page.</div>Kirhttps://criu.org/index.php?title=Template:Net-next.git&diff=5046Template:Net-next.git2020-03-27T01:00:33Z<p>Kir: update URL, rm <code></p>
<hr />
<div>[https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id={{{1}}} net-next:&nbsp;{{{1}}}]</div>Kirhttps://criu.org/index.php?title=Template:Torvalds.git&diff=5045Template:Torvalds.git2020-03-27T00:58:25Z<p>Kir: update URL, rm <code></p>
<hr />
<div>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id={{{1}}} torvalds:&nbsp;{{{1}}}]</div>Kirhttps://criu.org/index.php?title=External_bind_mounts&diff=5044External bind mounts2020-03-25T19:55:40Z<p>Kir: don't make "Sharing" the subsection of "old days"; minor English fixes</p>
<hr />
<div>__TOC__<br />
<br />
One of typical external resources when dumping a container (especially LXC/Docker) is a mount point whose root sits outside of the container's root. This situation was intended to be resolved using [[plugins]] but turned out to be common enough to introduce a built-in way of handling it.<br />
<br />
== What is external bind mount ==<br />
<br />
The way to create such is simple as<br />
<br />
mkdir /root<br />
mount --bind /foo /root/bar<br />
chroot /root<br />
<br />
This is it. From now on, the /bar file is a mountpoint whose root (the source) is not accessible directly.<br />
<br />
If you look at the /proc/$pid/mountinfo file of a task seeing such you would see smth like<br />
<br />
11 23 8:3 /root / ... - ext4 /dev/sda1 ...<br />
23 34 8:3 /foo /bar ... - ext4 /dev/sda1 ...<br />
<br />
The columns 4 and 5 are root and mountpoint respectively. You can see, that the / is /root file from /dev/sda1 device and /bar file is a mountpoint with the root being /foo file from the same device.<br />
<br />
== How to teach CRIU to dump them ==<br />
<br />
By default CRIU doesn't dump such mountpoints, because there's no way CRIU will be able to restore it -- the root of these mounts is out of scope of what CRIU dumped. In the logs you would see a message like<br />
<br />
34:/bar doesn't have a proper root mount<br />
<br />
which means the mountpoint /bar has inaccessible root.<br />
<br />
To dump and restore them there's the <code>--external mnt[KEY]:VAL</code> option that sets up external mounts root mapping.<br />
<br />
On dump, KEY is a mountpoint inside container, and corresponding VAL is a string that will be written into the image as mountpoint's root value.<br />
<br />
On restore, KEY is the value from the image (VAL from dump), and the VAL is the path on host that will be bind-mounted into container (to the mountpoint path from image).<br />
<br />
For example, if we want to dump the task above we should call<br />
<br />
criu dump ... --external mnt[/bar]:barmount<br />
<br />
The word <code>barmount</code> is an arbitrary identifier, that will be put in the image file instead of the original root path<br />
<br />
criu show -f mountpoints.img -F mnt_id,root,mountpoint<br />
mnt_id: 0x22 root: barmount mountpoint: /bar<br />
<br />
On restore we should tell CRIU where to bind mount the <code>barmount</code> from like this<br />
<br />
criu restore ... --external mnt[barmount]:/foo<br />
<br />
With this CRIU will bind mount the /foo into proper mountpoint.<br />
<br />
== Auto detection ==<br />
<br />
In case one wants CRIU to autodetect and dump all the external bind mounts, and there is no need to change host mount points on restore, one can use a special syntax:<br />
<br />
criu dump ... --external mnt[]:''flags''<br />
<br />
Note here is nothing inside square brackets, and the optional <code>:''flags''</code> argument can contain the following characters:<br />
<br />
; <code>m</code><br />
: Also enable dumping of external master mounts (as in <code>mount --make-slave</code>)<br />
; <code>s</code><br />
: Also enable dumping of external shared mounts (as in <code>mount --make-shared</code>)<br />
<br />
By default, neither master nor shared external mounts are not dumped (if found, dump is aborted). Note if <code>''flags''</code> are not given, semicolon is optional.<br />
<br />
=== Examples ===<br />
<br />
criu dump ... --external 'mnt[]'<br />
<br />
Auto-detect and dump all external bind mounts.<br />
<br />
criu dump ... --external 'mnt[]:s'<br />
<br />
Auto-detect and dump all external bind mounts, including the shared ones.<br />
<br />
criu dump ... --external 'mnt[]:sm'<br />
<br />
Auto-detect and dump all external bind mounts, including the shared and the master ones.<br />
<br />
== Sharing ==<br />
<br />
External bindmounts can both have internal/external sharing. Please see the example:<br />
<br />
# Preparation<br />
unshare -m --propagation private<br />
mkdir /external_mount_sharing_test<br />
mount -t tmpfs tmpfs /external_mount_sharing_test/<br />
mount --make-private /external_mount_sharing_test/<br />
cd /external_mount_sharing_test<br />
# Source of external mount<br />
mkdir external_mount<br />
mount -t tmpfs tmpfs-external external_mount/<br />
mount --make-shared external_mount/<br />
cat /proc/$$/mountinfo | grep external<br />
# 811 755 0:60 / /external_mount_sharing_test rw,relatime - tmpfs tmpfs rw<br />
# 812 811 0:62 / /external_mount_sharing_test/external_mount rw,relatime shared:290 - tmpfs tmpfs-external rw<br />
<br />
# Switch to CT mntns<br />
unshare -m --propagation unchanged sh<br />
mkdir root<br />
mount -t tmpfs tmpfs-root root/<br />
mkdir root/external_sharing root/internal_sharing root/proc<br />
<br />
# Create external mount<br />
mount --bind external_mount/ root/external_sharing<br />
mount --bind external_mount/ root/internal_sharing<br />
mount --make-private root/internal_sharing<br />
mount --make-shared root/internal_sharing<br />
<br />
# More preparations<br />
mount --bind /proc root/proc<br />
cd root<br />
mkdir bin lib64<br />
SH=$(which sh)<br />
cp $SH bin<br />
cp $(ldd $SH | grep "/lib64" | sed 's/^.*\(\/lib64\S*\)\s.*$/\1/') lib64<br />
CAT=$(which cat)<br />
cp $CAT bin<br />
cp $(ldd $CAT | grep "/lib64" | sed 's/^.*\(\/lib64\S*\)\s.*$/\1/') lib64<br />
PATH=$PATH:/bin<br />
chroot . sh<br />
cat /proc/$$/mountinfo<br />
# 843 841 0:63 / / rw,relatime - tmpfs tmpfs-root rw<br />
# 861 843 0:62 / /external_sharing rw,relatime shared:290 - tmpfs tmpfs-external rw<br />
# 898 843 0:62 / /internal_sharing rw,relatime shared:349 - tmpfs tmpfs-external rw<br />
# 899 843 0:5 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw<br />
<br />
Mounts 812 (on the host) and 861 (in a container) have the same sharing (shared group) - external sharing and mount 898 has it's own local shared group - internal sharing.<br />
<br />
Before [https://github.com/checkpoint-restore/criu/pull/906 #906] we were detecting this external/internal sharing state for auto-detected external mounts only, but we need it for manual external mounts too. Moreover, this also applies to manual external slave mounts they can be external/internal slaves too.<br />
<br />
So we detect that the mount is from external sharing if in mount namespace of CRIU there are mounts of the same shared group and also we detect that the mount is from external slavery if there is no master mount for it in CT mount namespaces.<br />
<br />
== Old days ==<br />
<br />
For now the same behavior is configured with the <code>--ext-mount-map KEY:VAL</code> option. Soon this option will be [[deprecation|deprecated]].<br />
<br />
[[Category:HOWTO]]<br />
[[Category:External]]</div>Kirhttps://criu.org/index.php?title=News/events&diff=5034News/events2020-03-12T06:54:33Z<p>Kir: added br, removed vertical whitespace</p>
<hr />
<div><noinclude> __NOTOC__<br />
<!--<br />
This page is<br />
1. used directly (i.e. one can view it);<br />
2. included into some other pages;<br />
3. exported via RSS.<br />
Because of that, extreme care should be taken when modifying it.<br />
<br />
PLEASE MAKE SURE MOST RECENT EVENTS GO FIRST<br />
<br />
--kir<br />
--><br />
<br />
This page collects into about events criu takes part in.<br />
<br />
<startFeed/></noinclude><br />
== FOSDEM 2020 ==<br />
[[Image:Fosdem.png|left|100px|link=]]<br />
<br />
'''Feburary 1, 2020, Brussels, Belgium'''<br />
<br />
[https://fosdem.org/2020/schedule/event/containers_live_migration/ Container Live Migration]<br />
<br />
--[[User:Rppt]] 19:22, 28 February 2020 (UTC)<br />
<br clear="both"><br />
<br />
== Linux Plumbers Conference 2019 ==<br />
[[Image:Linuxplumbers.png|left|100px|link=]]<br />
<br />
'''September 9-11, Lisbon, Portugal'''<br />
<br />
[https://linuxplumbersconf.org/event/4/contributions/508/ Update on Task Migration at Google Using CRIU]<br />
<br />
[https://linuxplumbersconf.org/event/4/contributions/472/ CRIU and the PID dance]<br />
<br />
[https://linuxplumbersconf.org/event/4/contributions/513/ CRIU: Reworking vDSO proxification, syscall restart]<br />
<br />
[https://linuxplumbersconf.org/event/4/contributions/478/ Secure Image-less Container Migration]<br />
<br />
--[[User:Avagin]] 14:05, 23 Aug 2019 (UTC)<br />
<br clear="both"><br />
<br />
== Google Summer of Code 2019 ==<br />
[[Image:gsoc.png|left|100px|link=]]<br />
<br />
'''Mar-Sep 2019'''<br />
<br />
[https://summerofcode.withgoogle.com/organizations/6333591376625664/ Google Summer of Code]<br />
<br />
--[[User:Avagin]] 21:32, 26 Feb 2019 (PST) <br />
<br clear="both"><br />
<br />
<noinclude><endFeed/><br />
<br />
== See also ==<br />
* [[News/events/past|Past events]]<br />
<br />
</noinclude></div>Kirhttps://criu.org/index.php?title=News/events&diff=5033News/events2020-03-12T06:53:12Z<p>Kir: signed the entry (Rppt: it is required so that RSS is properly generated with dates etc)</p>
<hr />
<div><noinclude> __NOTOC__<br />
<!--<br />
This page is<br />
1. used directly (i.e. one can view it);<br />
2. included into some other pages;<br />
3. exported via RSS.<br />
Because of that, extreme care should be taken when modifying it.<br />
<br />
PLEASE MAKE SURE MOST RECENT EVENTS GO FIRST<br />
<br />
--kir<br />
--><br />
<br />
This page collects into about events criu takes part in.<br />
<br />
<startFeed/></noinclude><br />
== FOSDEM 2020 ==<br />
[[Image:Fosdem.png|left|100px|link=]]<br />
<br />
'''Feburary 1, 2020, Brussels, Belgium'''<br />
<br />
[https://fosdem.org/2020/schedule/event/containers_live_migration/ Container Live Migration]<br />
<br />
--[[User:Rppt]] 19:22, 28 February 2020 (UTC)<br />
<br />
== Linux Plumbers Conference 2019 ==<br />
[[Image:Linuxplumbers.png|left|100px|link=]]<br />
<br />
'''September 9-11, Lisbon, Portugal'''<br />
<br />
[https://linuxplumbersconf.org/event/4/contributions/508/ Update on Task Migration at Google Using CRIU]<br />
<br />
[https://linuxplumbersconf.org/event/4/contributions/472/ CRIU and the PID dance]<br />
<br />
[https://linuxplumbersconf.org/event/4/contributions/513/ CRIU: Reworking vDSO proxification, syscall restart]<br />
<br />
[https://linuxplumbersconf.org/event/4/contributions/478/ Secure Image-less Container Migration]<br />
<br />
--[[User:Avagin]] 14:05, 23 Aug 2019 (UTC)<br />
<br clear="both"><br />
<br />
== Google Summer of Code 2019 ==<br />
[[Image:gsoc.png|left|100px|link=]]<br />
<br />
'''Mar-Sep 2019'''<br />
<br />
[https://summerofcode.withgoogle.com/organizations/6333591376625664/ Google Summer of Code]<br />
<br />
--[[User:Avagin]] 21:32, 26 Feb 2019 (PST) <br />
<br />
<br clear="both"><br />
<br />
<br />
<br />
<noinclude><endFeed/><br />
<br />
== See also ==<br />
* [[News/events/past|Past events]]<br />
<br />
</noinclude></div>Kirhttps://criu.org/index.php?title=CLI/opt/--cgroup-yard&diff=5011CLI/opt/--cgroup-yard2020-02-05T22:53:42Z<p>Kir: redirect to a specific option description</p>
<hr />
<div>#REDIRECT:[[CGroups#External_CGroup_yard]]</div>Kirhttps://criu.org/index.php?title=CLI/opt/--ext-unix-sk&diff=5010CLI/opt/--ext-unix-sk2020-02-05T22:51:27Z<p>Kir: Kir moved page --ext-unix-sk to CLI/opt/--ext-unix-sk without leaving a redirect: this is where it belongs</p>
<hr />
<div>#REDIRECT:[[External UNIX socket]]</div>Kirhttps://criu.org/index.php?title=CGroups&diff=5009CGroups2020-02-05T22:48:32Z<p>Kir: formatting/wording nits</p>
<hr />
<div>This page describes how CRIU manages CGroups.<br />
<br />
== Overview ==<br />
<br />
When talking about C/R of CGroups info, we mean three things:<br />
<br />
# The groups tasks live in<br />
# The groups that exist and are visible by tasks<br />
# Mountpoints of "cgroup" file system<br />
<br />
CRIU started supporting this info since version 1.3-rc1. Here's how it works.<br />
<br />
== CGroups tasks live in ==<br />
<br />
CRIU defines a "set" of cgroups. A set is a per-controller list of paths where a task lives. If paths to groups for two tasks differ at least for one controller, they are considered to live in different sets.<br />
<br />
For every set CRIU generates an ID, which is then stored in the task's <code>core.tc.cg_set</code> image. The set in which CRIU lives during dump is also generated and is saved in the inventory image. The set in which the root task lives in is also special -- every other set (except CRIU's one) is checked to contain only sub-dirs of the respective root task's set. Otherwise dump fails.<br />
<br />
On restore each task is moved into the respective set. If task's set coincide with CRIU's one task isn't moved anywhere and remains in whatever cgroups CRIU restore was started.<br />
<br />
== CGroups that are visible by tasks ==<br />
<br />
Other than CGroups collected with tasks there can be other groups in which no tasks live. To pick up those CRIU gets the root set and saves all the CGroups tree starting from it. This information is stored in the <code>cgroup.controllers</code> image. In the same place CRIU saves the properties of CGroups (i.e. values read from CGroup configuration files). Note that since CRIU starts from root set and scans the directories tree, all the paths in this section are also subdirs of the root set's.<br />
<br />
In order to make CRIU handle this information on dump and restore one should specify the <code>--manage-cgroups</code> option.<br />
<br />
== Dumping more cgroups than are visible ==<br />
<br />
In some cases, it can be useful to dump a specific cgroup subtree, regardless of what cgroups the container's tasks are in. For example, systemd-based containers like Ubuntu 16.04 will put all of their tasks in one of <code>/init.scope</code>, <code>/system.slice/...</code>, or <code>/user.slice/...</code>. By default, then, CRIU's cgroup engine will not dump the root of the cgroup tree <code>/</code>. The problem is that systemd opens <code>/</code> as a directory FD and changes the permissions on it, resulting in errors like<br />
<br />
<code>(00.361723) 1: Error (criu/files-reg.c:1487): File sys/fs/cgroup/systemd has bad mode 040755 (expect 040775)</code><br />
<br />
The solution is for the container engine to tell CRIU the root of the tree to start dumping at, via <code>--cgroup-root</code> on dump, so that these permissions are preserved when checkpointing the cgroup tree.<br />
<br />
== Mountpoints of "cgroup" file system ==<br />
<br />
If found in the list of mounts, CRIU would dump one, but only the "root" mount will work. If you bind-mounted some subgroups into container, CRIU dump would fail.<br />
<br />
== Restoring into different CGroups ==<br />
<br />
The option syntax is <code>--cgroup-root [''controller'':]/''path''</code>. Without this option, CRIU restores tasks and groups that live in the subtrees starting from the root task's dirs. When this option is given, the respective <code>''controller''</code>s are restored under the given <code>''path''</code>s instead.<br />
<br />
== CGroups restoring strategy ==<br />
<br />
When restoring cgroups CRIU may meet already existing cgroup controllers and as result it relies on user choice how to behave in such case: should it overwrite existing properties with values from the image or should ignore them? Or maybe it is unacceptable to modify any existing cgroup?<br />
<br />
To break a tie CRIU supports that named restore modes, which should be specified as an addition to <code>--manage-cgroups=''mode''</code> option. The <code>''mode''</code> argument may be one of the following:<br />
<br />
* <code>none</code>. Do not restore cgroup properties but require cgroup to pre-exist at the moment of restore procedure.<br />
* <code>props</code>. Restore cgroup properties and require cgroup to pre-exist.<br />
* <code>soft</code>. Restore cgroup properties if only cgroup has been created by *criu*, otherwise do not restore properies.<br />
* <code>full</code>. Always restore all cgroups and their properties.<br />
* <code>strict</code>. Restore all cgroups and their properties from the scratch, requiring them to not present in the system.<br />
* <code>ignore</code>. Don't deal with cgroups and pretend that they don't exist.<br />
<br />
By default, <code>soft</code> is assigned if <code>--manage-cgroups</code> option passed without an argument (i.e. the same as <code>--manage-cgroups=soft</code>).<br />
<br />
== External CGroup yard ==<br />
The option syntax is <code>--cgroup-yard path</code>.<br />
<br />
Instead of trying to mount cgroups in CRIU, provide a path to a directory with already created cgroup yard. Useful if you don't want to grant <code>CAP_SYS_ADMIN</code> to CRIU. For every cgroup mount there should be exactly one directory. If there is only one controller in this mount, the dir's name should be just the name of the controller. If there are multiple controllers co-mounted, the directory name should be a comma-separated list of controllers.<br />
<br />
[[Category:Under the hood]]</div>Kirhttps://criu.org/index.php?title=News/events/past&diff=4994News/events/past2020-01-10T02:13:32Z<p>Kir: /* YAC 2012 */ fix the link</p>
<hr />
<div><!-- ACHTUNG: please always use FULL SIGNATURE, i.e. --~~~~ as its date is used in RSS --><br />
<br />
{{Note|this page lists events that has happened already, kept here just for historical reasons. For future events, see [[News/events]].}}<br />
__TOC__<br />
<br />
== Tübix 2019 ==<br />
[[Image:tuex.png|left|100px|link=]]<br />
<br />
'''Jul 06, 2019, Tübingen, Germany'''<br />
<br />
Adrian Reber [https://www.tuebix.org/2019/programm/adrian-reber-container-live-migration/ Container Live Migration]<br />
<br />
--[[User:Adrian]] 08:46, 4 Jul 2019 (CEST)<br />
<br clear="both"><br />
<br />
== Linux Plumbers Conference 2018 ==<br />
[[Image:Linuxplumbers.png|left|100px|link=]]<br />
<br />
'''Nov 13-15 , 2018, Vancouver, BC, Canada'''<br />
<br />
[https://linuxplumbersconf.org/event/2/contributions/202/ Time Namespaces]<br />
<br />
[https://linuxplumbersconf.org/event/2/contributions/207/ Another year with CRIU: News from the developers]<br />
<br />
[https://linuxplumbersconf.org/event/2/contributions/205/ News from academia: FatELF, RDMA and CRIU]<br />
<br />
[https://linuxplumbersconf.org/event/2/contributions/135/ Remote page faults over RDMA]<br />
<br />
[https://linuxplumbersconf.org/event/2/contributions/209/ Task Migration at Google Using CRIU]<br />
<br />
[https://linuxplumbersconf.org/event/2/contributions/210/ Securely Migrating Untrusted Workloads with CRIU]<br />
<br />
[https://linuxplumbersconf.org/event/2/contributions/69/ Task Migration at Scale Using CRIU]<br />
<br />
--[[User:Radostin]] 14:05, 18 Nov 2018 (UTC)<br />
<br clear="both"><br />
<br />
== Open Source Summit Europe 2018 ==<br />
[[Image:Osseu17.png|left|100px|link=]]<br />
<br />
'''Oct 24, 2018, Edinburgh, UK'''<br />
<br />
[https://osseu18.sched.com/event/FxYI/to-kill-or-to-checkpoint-that-is-the-question-mike-rapoport-ibm-adrian-reber-red-hat To Kill, or to Checkpoint - That is the Question]<br />
<br />
--[[User:Adrian]] 09:46, 29 September 2018 (UTC)<br />
<br clear="both"><br />
<br />
== Serverless meetup, Moscow ==<br />
[[Image:Meetup.svg|left|100px|link=]]<br />
<br />
'''Oct 18, 2018, Moscow'''<br />
<br />
[https://www.meetup.com/ru-RU/moscow-serverless/events/255386528/ Задержки при вызове serverless функций: как формируются, на что влияют и как ими управлять], Владимир Порохов, Swifty Cloud<br />
<br />
--[[User:Xemul]] 11:55, 17 October 2018 (UTC)<br />
<br clear="both"><br />
<br />
== FOSDEM 2018 ==<br />
[[Image:Fosdem.png|left|100px|link=]]<br />
<br />
'''Feburary 4, 2018, Brussels, Belgium'''<br />
<br />
[https://fosdem.org/2018/schedule/event/containers_containing_memory/ Containers devroom]<br />
* Containing container memory -- Mike Rapoport<br />
<br />
--[[User:Avagin|Andrey Vagin]] 22:48, 31 Jan 2018 (PST) <br />
<br />
== Open Source Summit EU 2017 ==<br />
<br />
[[Image:Osseu17.png|left|100px|link=]]<br />
<br />
'''Oct 23, 2017, Prague, Czech Republic'''<br />
<br />
Mike Rapoport and Adrian Reber will [http://sched.co/BxIG will talk about live migration]<br />
<br />
--[[User:Xemul]] 12:00, 23 Aug 2017 (MSK)<br />
<br clear="both"><br />
<br />
== SECR 2017 ==<br />
<br />
[[Image:Secr17logo.png|left|100px|link=]]<br />
<br />
'''Oct 20, 2017, St. Petersburg, Russia'''<br />
<br />
Pavel Begunkov will talk about [http://2017.secr.ru/lang/en/program/submitted-presentations/checkpointrestore-of-file-locks-from-userspace-in-linux file locks] checkpoint and restore.<br />
<br />
--[[User:Xemul]] 13:30, 12 Sep 2017 (MSK)<br />
<br clear="both"><br />
<br />
== Open Source Summit NA 2017 ==<br />
<br />
[[Image:OSS_na_white_0.png|left|100px|link=]]<br />
<br />
'''Sep 11, 2017, Los Angeles, USA'''<br />
<br />
Michael Holzheu [http://sched.co/BDpJ will talk] about CRIU on IBM mainframes.<br />
<br />
--[[User:Xemul]] 14:00, 29 Jun 2017 (MSK)<br />
<br clear="both"><br />
<br />
== Linux Plumbers Conference 2017 ==<br />
[[Image:Linuxplumbers.png|left|100px|link=]]<br />
<br />
'''Sep 13-15, 2017, Los Angeles, CA, USA'''<br />
<br />
[https://linuxplumbersconf.org/2017/ocw/events/LPC2017/tracks/637 Checkpoint-Restore microconf]<br />
<br />
--[[User:Xemul]] 18:20, 9 Aug 2017 (MSK)<br />
<br clear="both"><br />
<br />
== Systor 2017 ==<br />
<br />
[[Image:Systor_2017.png|left|100px|link=]]<br />
<br />
'''May 22-24, 2017, Haifa, Israel'''<br />
<br />
[https://systor17posters.hotcrp.com/paper/8?cap=08aenKqSiwS9bA Accepted paper] about post-copy live migration from Mike Rapoport and Joel Nider<br />
<br />
--[[User:Xemul]] 15:40, 21 Apr 2017 (MSK)<br />
<br clear="both"><br />
<br />
== SCALE 15x ==<br />
<br />
[[Image:scale 15x logo.png|left|100px|link=]]<br />
<br />
'''March 2-5, 2017, Pasadena, CA, USA'''<br />
<br />
Kir Kolyshkin talked about some uncommon ways to use CRIU. [https://www.youtube.com/watch?v=7PKMctKf2JQ&t=18058 Video recording].<br />
<br />
--[[User:Kir|Kir]] ([[User talk:Kir|talk]]) 20:57, 13 February 2017 (UTC)<br />
<br />
== DevConf.cz 2017 ==<br />
[[Image:Devconf17.svg|left|100px]]<br />
<br />
'''January 27-29, 2017, Brno, Czech Republic'''<br />
<br />
[https://devconf.cz/schedule.html Decreasing container downtime during migration] by Adrian Reber. (the devconf site is not URL-friendly these days, go to Day-3 tab and check 11AM talks)<br />
<br />
--[[User:Xemul]] 9:20, 12 Jan 2016 (MSG)<br />
<br clear="both"><br />
<br />
== 2d1o podcast (rus) ==<br />
'''Dec 22, 2016, On-Air'''<br />
<br />
[https://www.2d1o.ru/episodes/s01e03.html 2d1o podcast] invited Pavel Emelyanov to talk about Live migration (of Docker containers).<br />
<br />
--[[User:Xemul]] 11:00, 9 Jan 2017 (MSK)<br />
<br clear="both"><br />
<br />
== Middleware 2016 ==<br />
'''Dec 12-16, 2016, Trento, Italy'''<br />
<br />
Rodrigo Bruno gave a talk about Live Migrating JVM workloads using CRIU. Search for 'ALMA' on the [http://2016.middleware-conference.org/program/overall/ schedule page] :)<br />
<br />
--[[User:Xemul]] 15:00, 19 Dec 2016 (MSK)<br />
<br clear="both"><br />
<br />
== Linux Piter ==<br />
[[Image:Linuxpiter.png|left|100px|link=]]<br />
<br />
'''Nov 11-12, 2016, St. Petersburg, Russia'''<br />
<br />
Tycho Andersen will talk about [http://www.it-events.com/ru/events/6997#tabs-programm live migration in LXD]<br />
<br />
--[[User:Xemul]] 11:30, 12 Oct 2016 (MSK)<br />
<br clear="both"><br />
<br />
== Linux Plumbers Conference 2016 ==<br />
[[Image:Linuxplumbers.png|left|100px|link=]]<br />
<br />
'''Nov 2-4, 2016, Santa Fe, NM, USA'''<br />
<br />
[http://wiki.linuxplumbersconf.org/2016:checkpoint-restart Checkpoint-Restore micro-conference] within the [http://www.linuxplumbersconf.org/2016/ bigger event]<br />
<br />
--[[User:Xemul]] 21:50, 25 Apr 2016 (MSK)<br />
<br clear="both"><br />
<br />
== OpenStack summit 2016 ==<br />
[[Image:OpenStack_Summit.png|left|100px|link=]]<br />
<br />
'''Oct 25-28, 2016, Barcelona, Spain'''<br />
<br />
Phil Estes talks about [https://www.openstack.org/summit/barcelona-2016/summit-schedule/events/15091/live-container-migration-on-openstack live container migration in OpenStack]<br />
<br />
--[[User:Xemul]] 13:00, 25 Oct 2016 (MSK)<br />
<br clear="both"><br />
<br />
== Linux kernel meetup in Tel-Aviv ==<br />
<br />
'''July 12, 2016, Tel-Aviv Israel'''<br />
<br />
Mike Rapoport will deliver [http://www.meetup.com/Tel-Aviv-Yafo-Linux-Kernel-Meetup/events/232058698/?gj=te1&rv=te1 a talk about UserfaultFD and lazy migration].<br />
<br />
--[[User:Xemul]] 12:50, 24 Jun 2016 (MSK)<br />
<br clear="both"><br />
<br />
== OSC'16 ==<br />
[[Image:Oscfinal.png|left|100px|link=]]<br />
'''June 22, 2016, Nürnberg, Germany'''<br />
<br />
Takashi Iwai [https://media.ccc.de/v/896-exploring-criu Exploring CRIU]<br />
<br />
--[[User:Xemul]] 16:15, 27 Jun 2016 (MSK)<br />
<br clear="both"><br />
<br />
== USENIX ATC'16 ==<br />
[[Image:Usenix-logo.jpg|left|100px|link=]]<br />
<br />
'''June 22-24, 2016, Denver, CO, USA'''<br />
<br />
Sanidhya Kashyap will present [https://www.usenix.org/conference/atc16/technical-sessions/presentation/kashyap KuP] -- an instant OS updater using CRIU<br />
<br />
--[[User:Xemul]] 11:30, 25 Apr 2016 (MSK)<br />
<br clear="both"/><br />
<br />
== Black belt tech @ DockerCon 2016 ==<br />
<br />
[[Image:Dockercon16.png|left|100px|link=]]<br />
<br />
'''June 19-21, 2016, Seattle, WA, USA'''<br />
<br />
Ross Boucher will talk about [https://blog.docker.com/2016/04/black-belt-talks-dockercon-2016/ Cloning running services with Docker and CRIU]<br />
<br />
--[[User:Xemul]] 14:30, 13 Apr 2016 (MSK)<br />
<br clear="both"><br />
<br />
== Tuebingen 2016 ==<br />
'''Jun 11, 2016, Tübingen, Germany'''<br />
<br />
Adrian Reber [http://www.tuebix.org/2016/programm/adrian-reber-container-migration-using-criu-and-lxc/ will presend] the [[Userfaultfd]] and lazy migration.<br />
<br />
--[[User:Xemul]] 14:15, 7 Jun 2016 (MSK)<br />
<br clear="both"><br />
<br />
== Systor 2016 ==<br />
<br />
[[Image:Systor2016.jpg|left|100px|link=]]<br />
<br />
'''Jun 6-8, 2016, Haifa, Israel'''<br />
<br />
[http://www.systor.org/2016/accepted.html Accepted paper] about containers live migration from Mike Rapoport<br />
<br />
--[[User:Xemul]] 20:15, 6 May 2016 (MSK)<br />
<br clear="both"><br />
<br />
== DevConf.cz 2016 ==<br />
[[Image:Devconf.cz-logo.png|left|100px|link=]]<br />
<br />
'''February 5, 2016, Brno, Czech Republic'''<br />
<br />
[https://devconfcz2016.sched.org/event/5lzL/live-migrating-a-container-pros-cons-and-gotchas Live migrating a container: pros, cons and gotchas] by Pavel Emelyanov<br />
<br />
--[[User:Xemul]] 9:20, 12 Jan 2016 (MSG)<br />
<br clear="both"><br />
<br />
== FOSDEM 2016 ==<br />
[[Image:Fosdem.png|left|100px|link=]]<br />
<br />
'''January 30, 2016, Brussels, Belgium'''<br />
<br />
[https://www.fosdem.org/2016/schedule/track/containers_and_process_isolation/ Containers devroom]<br />
* Using p.haul to migrate containers -- Tycho Andersen<br />
* New horizons for the CRIU project -- Pavel Emelyanov<br />
<br />
--[[User:Xemul]] 00:45, 19 December 2015 (MSK)<br />
<br clear="both"><br />
<br />
== LinuxMeetup Nizhny Novgorod 2016 ==<br />
'''January 22, 2016, Nizhny Novgorod, Russia'''<br />
<br />
[https://mdday.timepad.ru/event/279578/ И овцы целы, и волки сыты: как перезапустить проблемное приложение и одновременно отладить его] -- Pavel Emelyanov<br />
<br />
--[[User:Xemul]] 13:00, 29 December 2015 (MSK)<br />
<br clear="both"><br />
<br />
== Linux Piter 2015 ==<br />
[[Image:Tux.png|left|100px|link=]]<br />
<br />
'''November 21, 2015, Saint Petersburg, Russia'''<br />
<br />
[http://www.it-sobytie.ru/events/4868 Живая миграция контейнеров: плюсы, минусы, подводные камни] -- Pavel Emelyanov<br />
<br />
--[[User:Sergey Bronnikov|SergeyB]] ([[User talk:Sergey Bronnikov|talk]]) 07:24, 26 August 2015 (EDT)<br />
<br clear="both"><br />
<br />
== DockerCon 2015 ==<br />
[[Image:DockerCon15.png|left|100px|link=]]<br />
<br />
'''November 16-17, 2015, Barcelona, Spain'''<br />
<br />
Talk about live migration of containers -- [http://europe-2015.dockercon.com/speakers Pavel Emelyanov]<br />
<br />
-- [[User:Xemul|Xemul]] 15:00, 1 October 2015 (MSK)<br />
<br clear="both"><br />
<br />
== ContainerDays NYC 2015 ==<br />
[[Image:2015-nyc-logo.png|left|100px|link=]]<br />
<br />
'''October 30, 2015, New York, U.S.A.'''<br />
<br />
[http://dynamicinfradays.org/events/2015-nyc/programme.html#criu CRIU: Time and Space Travel for Linux Containers] -- by Kirill Kolyshkin<br />
<br />
--[[User:Kir|Kir]] ([[User talk:Kir|talk]]) 00:43, 14 September 2015 (EDT)<br />
<br clear="both"><br />
<br />
== Двенадцатая конференция разработчиков свободных программ ==<br />
[[Image:Altlinux-logo.gif|left|100px|link=]]<br />
<br />
'''October 16-18, 2015, Kaluga, Russia'''<br />
<br />
[http://www.altlinux.ru/news/archive/2015/08/item/743/ Живая миграция контейнеров: плюсы, минусы, подводные камни] -- Pavel Emelyanov<br />
<br />
--[[User:Sergey Bronnikov|SergeyB]] ([[User talk:Sergey Bronnikov|talk]]) 08:17, 1 October 2015 (EDT)<br />
<br clear="both"><br />
<br />
== OpenVZ meetup ==<br />
[[Image:Yandex.png|left|100px|link=]]<br />
<br />
'''September 19, 2015, Moscow, Russia'''<br />
<br />
[https://events.yandex.ru/events/yagosti/19-september-2015-linux/ Встреча разработчиков Linux-контейнеров]<br />
<br />
* Живая миграция контейнеров: плюсы, минусы, подводные камни -- Павел Емельянов<br />
* CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев<br />
<br />
--[[User:Sergey Bronnikov|SergeyB]] ([[User talk:Sergey Bronnikov|talk]]) 06:19, 28 August 2015 (EDT)<br />
<br clear="both"><br />
<br />
== Linux Plumbers 2015 ==<br />
[[Image:Linuxplumbers.png|left|100px|link=]]<br />
<br />
'''August 19-21, 2015, Seattle, WA, USA'''<br />
<br />
[http://wiki.linuxplumbersconf.org/2015:ckptrestart C/R miniconf]<br />
<br />
--[[User:Xemul|Xemul]] ([[User talk:Xemul|talk]]) 16:30, 9 February 2015 (MSK)<br />
<br clear="both"><br />
<br />
== DevZen podcast ==<br />
[[Image:Devzen.jpg|left|100px|link=]]<br />
<br />
'''July 17, 2015, on air'''<br />
<br />
Pavel Emelyanov and Kirill Gorcunov will talk about CRIU.<br />
<br />
[http://devzen.ru/ DevZen podcast]<br />
<br />
--[[User:Sergey Bronnikov|SergeyB]] ([[User talk:Sergey Bronnikov|talk]]) 09:10, 3 July 2015 (EDT)<br />
<br clear="both"><br />
<br />
== LVEE 2015 ==<br />
[[File:Logo_lvee_2015.svg|left|100px|link=]]<br />
<br />
'''25-28 June 2015, Grodno, Belarus'''<br />
<br />
[http://lvee.org/ru/conference_registrations/LVEE%202015 О том как маленький open-source проект меняет жизнь большой компании]<br />
<br />
Pavel Emelyanov will talk about CRIU community (in Russian).<br />
<br />
--[[User:Sergey Bronnikov|SergeyB]] ([[User talk:Sergey Bronnikov|talk]]) 08:08, 1 July 2015 (EDT)<br />
<br clear="both"><br />
<br />
== OS Day 2015 ==<br />
[[File:Os-day-logo.png|left|100px|link=]]<br />
<br />
'''9-10 June 2015, Kazan, Russia'''<br />
<br />
[http://osday.org/emelyanov.html#speaker Консервирование процессов в домашних условиях]<br />
<br />
Pavel Emelyanov will talk about CRIU's recent achievements and use-cases (in Russian).<br />
<br />
--[[User:Xemul]] (19 May 2015 (MSK))<br />
<br clear="both"/><br />
<br />
== ContainerDays 2015 ==<br />
[[File:Logo-ContainerDays.png|left|100px|link=]]<br />
'''June 5-6 2015, Boston, MA, USA'''<br />
<br />
Kir Kolyshkin from OpenVZ project will give a talk [http://dynamicinfradays.org/events/2015-boston/programme.html#nproblems "N Problems of Linux Containers...and Some Solutions"] mentioning CRIU in it.<br />
<br />
--[[User:Xemul]] (4 Jun 2015)<br />
<br clear="both"><br />
<br />
== DevOps Дефлопе ==<br />
[[File:Deflope.png|left|100px|link=]]<br />
<br />
'''June 2015, On Air'''<br />
<br />
[http://devopsdeflope.ru/ DevOps Дефлопе - Русскоязычный подкаст о DevOps]<br />
<br />
Andrew Vagin talks about integration CRIU and Docker and how checkpointing of processes can help in DevOps (in Russian).<br />
<br />
--[[User:Sergey Bronnikov|SergeyB]] ([[User talk:Sergey Bronnikov|talk]]) 08:26, 14 May 2015 (EDT)<br />
<br clear="both"><br />
<br />
== FLOSS Weekly 2015 ==<br />
[[Image:Floss-weekly.jpg|left|100px|link=]]<br />
<br />
'''April 29, 2015, 8:30am PDT (15:30 GMT), live on air'''<br />
<br />
[http://twit.tv/show/floss-weekly/334 Episode about CRIU]<br />
<br />
--[[User:Sergey Bronnikov|SergeyB]] ([[User talk:Sergey Bronnikov|talk]]) 09:35, 8 April 2015 (EDT)<br />
<br clear="both"><br />
<br />
== FOSDEM 2015 ==<br />
[[Image:Fosdem.png|left|100px|link=]]<br />
<br />
'''February 1, 2015, Brussels, Belgium'''<br />
<br />
[https://fosdem.org/2015/schedule/event/livemigration/ Live migration for containers is around the corner] -- Andrew Vagin<br />
<br />
--[[User:Avagin|Andrey Vagin]] 10:20, 13 January 2015 (EST)<br />
<br clear="both"><br />
<br />
== Docker Meet-Up ==<br />
<br />
'''October 29, 2014, Moscow, Russia'''<br />
<br />
[http://www.meetup.com/DevOps-Moscow-in-Russian/events/214753582/ Talk about CRIU and Docker] -- Pavel Emelyanov<noinclude><br />
<br />
--[[User:Xemul|Pavel Emelyanov]] 19:30, 23 Oct 2014 (MSK)<br />
<br clear="both"><br />
<br />
== Linux Plumbers ==<br />
[[Image:Linuxplumbers.png|left|100px|link=]]<br />
'''October 15-17, 2014, Dusseldorf, Germany'''<br />
<br />
[http://www.linuxplumbersconf.org/2014/an-in-depth-look-containers-microconference/ CRIU discussion at Containers mini-conf ] -- Pavel Emelyanov<br />
<br />
--[[User:Xemul|Xemul]] ([[User talk:Xemul|talk]]) 11:35, 23 October 2014 (EDT)<br />
<br clear="both"><br />
<br />
== Docker Meetup ==<br />
<br />
'''September 17, 2014, Mountain View, CA, USA'''<br />
<br />
[http://www.meetup.com/Docker-Mountain-View/events/204603722/ Docker MV Meetup #3 at Google] -- Saied Kazemi [https://speakerdeck.com/saied/experimental-docker-checkpoint-and-restore-with-criu talked] about Docker + CRIU<br />
<br />
--[[User:Xemul|Xemul]] ([[User talk:Xemul|talk]]) 03:26, 19 September 2014 (EDT)<br />
<br clear="both"><br />
<br />
== Open WG Talk ==<br />
[[Image:Content_wg_talk.png|left|100px|link=]]<br />
<br />
'''Friday, July 18, 2014, Minsk, Belarus'''<br />
<br />
[https://www.eventbrite.com/e/open-wg-talk-2-linux-container-virtualization-tickets-12189971533?fb_action_ids=705517169505083&fb_action_types=og.likes&fb_source=feed_opengraph&action_object_map=%7B%22705517169505083%22%3A753726634669877%7D&action_type_map=%7B%22705517169505083%22%3A%22og.likes%22%7D&action_ref_map=%5B%5D Open WG Talk #2 (Linux container virtualization)] -- Andrey Vagin<br />
<br />
--[[User:Avagin|Avagin]] ([[User talk:Avagin|talk]]) 10:58, 7 July 2014 (EDT)<br />
<br clear="both"/><br />
<br />
== Texas Linux Fest 2014 ==<br />
<br />
[[Image:Txlf2014.png|left|100px|link=]]<br />
<br />
'''June 13-14, 2014, Austin, Texas, US'''<br />
<br />
[http://texaslinuxfest.org/content/criu-time-and-space-travel-service-linux-apps CRIU: time and space travel service for Linux apps] -- Kir Kolyshkin<br />
<br />
--[[User:Kir|Kir]] ([[User talk:Kir|talk]]) 11:52, 6 June 2014 (EDT)<br />
<br clear="both"/><br />
<br />
== Docker Meetup ==<br />
<br />
'''March 26, 2014, Tel Aviv, Israel'''<br />
<br />
[http://www.meetup.com/Docker-Tel-Aviv/ Linux Containers and the Future Cloud] -- Rami Rosen<br />
<br />
--[[User:Kir|Kir]] ([[User talk:Kir|talk]]) 12:50, 24 March 2014 (EDT)<br />
<br />
<br clear="both"><br />
<br />
== Haifux (LUG) ==<br />
[[Image:Haifux.png|left|100px|link=]]<br />
<br />
'''March 17, 2014, Haifa, Israel'''<br />
<br />
[http://haifux.org/lectures/320/ Linux Containers and the Future Cloud] -- Rami Rosen<br />
<br />
--[[User:Rami|Rami]] 03:23, 23 Feb 2014 (PST)<br />
<br clear="both"><br />
<br />
== SCALE 12x talk ==<br />
[[Image:Scale_12x_dodecahedron.png|left|100px]]<br />
<br />
'''Feb 23, 2014, Los Angeles'''<br />
<br />
[http://www.socallinuxexpo.org/scale12x/presentations/seven-problems-linux-containers Seven problems of Linux Containers] -- Kir Kolyshkin<br />
<br />
--[[User:Xemul|Xemul]] 13:00, 22 Feb 2014 (MSK)<br />
<br clear="both"><br />
<br />
== Moscow Virtualization Meetup ==<br />
<br />
'''15 Feb, 2014, Moscow, Russia'''<br />
<br />
[http://tech.yandex.ru/events/yagosti/msk-feb-2014/talks/1655/ CRIU 1.0 What is next?]<br />
<br />
--[[User:Avagin|Avagin]] ([[User talk:Avagin|talk]]) 05:55, 30 January 2014 (EST)<br />
<br clear="both"><br />
<br />
== Hangout-on-Air ==<br />
[[Image:Hoa.png|left|100px|link=]]<br />
<br />
'''18:00, 7 Feb, 2014, Online'''<br />
<br />
[https://plus.google.com/events/cfj8rg61m1uj6ns3pf6dd8f8me0 CRIU hopes and fears]<br />
<br />
--[[User:Xemul|Xemul]] 10:00, 30 Jan 2014 (MSK)<br />
<br clear="both"><br />
<br />
== Linux Kernel Summit ==<br />
[[Image:Logo_lks_black.png|left|100px|link=]]<br />
<br />
'''October 23-25, 2013, Edinburgh, UK'''<br />
<br />
A quick talk about CRIU project status. -- Pavel Emelyanov<br />
<br />
--[[User:Xemul|Xemul]] 10:00, 25 Oct 2013 (MSK)<br />
<br clear="both"><br />
<br />
== LinuxCon Europe ==<br />
[[Image:LinuxCon-logo.jpg|left|100px|link=]]<br />
<br />
'''October 21-23, 2013, Edinburgh, UK'''<br />
<br />
[http://linuxconcloudopeneu2013.sched.org/event/e0b06ed074144b5bcdb9a0b2791ff2cb?iframe=no&w=900&sidebar=yes&bg=no#.UhTeVGJFynw CRIU: Time and Space Travel Service for Linux Applications -- Pavel Emelyanov ]<br />
<br />
Slides [https://events.linuxfoundation.org/sites/events/files/slides/criu-3.11.pdf "CRIU:Time and Space Travel Service for Linux Applications"]<br />
<br />
--[[User:Xemul|Xemul]] 19:30, 21 Aug 2013 (MSK)<br />
<br clear="both"><br />
<br />
== LinuxCon North America ==<br />
[[Image:LinuxCon-logo.jpg|left|100px|link=]]<br />
<br />
'''September 16-18, 2013, New Orleans, LA, USA'''<br />
<br />
[http://linuxconcloudopenna2013.sched.org/event/91c1b43ac4c93aeafc27c91ccaed7bc5#.Ue0JsmJFwrQ CRIU: Time and Space Travel Service for Linux Applications -- Pavel Emelyanov ]<br />
<br />
Slides [https://events.linuxfoundation.org/sites/events/files/slides/criu-3.11.pdf "CRIU:Time and Space Travel Service for Linux Applications"]<br />
<br />
--[[User:Xemul|Xemul]] 14:30, 22 July 2013 (MSK)<br />
<br clear="both"><br />
<br />
== CRIU talk at LVEE ==<br />
[[Image:LVEE 2013.png|left|100px|link=http://lvee.org]]<br />
'''27-30 June, 2013. Grodno, Belarus'''<br />
<br />
Linux Userspace Checkpoint/Restore: From Dreams to Reality - Andrey Vagin<br />
<br />
--[[User:Avagin|Avagin]] ([[User talk:Avagin|talk]]) 06:05, 6 June 2013 (EDT)<br />
<br clear="both"><br />
<br />
== Fedora Virtualization Day Moscow 2013==<br />
[[Image:russian_fedora.png|left|100px|link=http://russianfedora.ru/]]<br />
'''1 June, 2013. Moscow, Russia'''<br />
<br />
[http://russianfedora.ru/content/%D0%98%D1%82%D0%BE%D0%B3%D0%B8-fedora-virtualization-day CRIU: Checkpoint and Restore (mostly) In Userspace - Andrey Vagin] [http://mirror.yandex.ru/fedora/russianfedora/video/FedoraVirtualizationDay/04-Wagin-Part2.webm video]<br />
<br />
--[[User:Avagin|Avagin]] ([[User talk:Avagin|talk]]) 14:03, 5 June 2013 (EDT)<br />
<br clear="both"><br />
<br />
== CRIU talk at SCALE11x ==<br />
[[Image:Scale-11x.png|100px|left|link=http://www.socallinuxexpo.org/scale11x]]<br />
'''22-24 February, 2013. Los Angeles, CA, USA'''<br />
<br />
[http://www.socallinuxexpo.org/scale11x/presentations/checkpoint-restore-live-migration-and-beyond Checkpoint, Restore, Live Migration and Beyond - Kir Kolyshkin]<br />
<br />
--[[User:Kir|Kir]] ([[User talk:Kir|talk]]) 12:10, 23 January 2013 (EST)<br />
<br clear="both"><br />
<br />
== CRIU talk at linux.conf.au ==<br />
[[Image:Linux-conf-au-2013.jpg|left|link=https://lca2013.linux.org.au/]]<br />
'''28 January to 2 February, 2013. Canberra, Australia'''<br />
<br />
[http://conf.linux.org.au/schedule/30116/view_talk?day=thursday Checkpoint and Restore: Are We There Yet? - Pavel Emelyanov]<br />
<br />
--[[User:Kir|Kir]] 12:51, 8 October 2012 (EDT)<br />
<br clear="both"><br />
<br />
== FOSDEM 2013 ==<br />
[[Image:Fosdem-2013.png|left|100px|link=https://fosdem.org/2013/]]<br />
'''2 and 3 February, 2013. Brussels, Belgium'''<br />
<br />
[https://fosdem.org/2013/schedule/event/criu_ckeckpoint_restore/ CRIU: Checkpoint and Restore (mostly) In Userspace - Andrey Vagin]<br />
<br />
--[[User:Kir|Kir]] ([[User talk:Kir|talk]]) 21:00, 22 January 2013 (EST)<br />
<br clear="both"><br />
<br />
== LinuxCon Europe 2012 ==<br />
[[Image:LinuxCon-logo.jpg|left|100px|link=]]<br />
<br />
'''November 5-9, 2012, Barcelona, Spain'''<br />
<br />
[http://linuxconeurope2012.sched.org/event/bd32207c146c75dd5cbf165006d47e7b Checkpoint and Restore: Are We There Yet? - Pavel Emelyanov]<br />
<br />
--[[User:Kir|Kir]] 12:51, 8 October 2012 (EDT)<br />
<br clear="both"><br />
<br />
== YAC 2012 ==<br />
[[Image:yac_logo.jpg|left|100px|link=]]<br />
<br />
'''1 Oct 2012, Moscow, Russia'''<br />
<br />
[https://events.yandex.ru/events/yac/2012?openTalkDescription=35-3 CRIU: more than a live migration (incl. slides and video)]<br />
<br />
--[[User:Kir|Kir]] 12:25, 8 October 2012 (EDT)</div>Kirhttps://criu.org/index.php?title=Download/criu/3.13&diff=4965Download/criu/3.132019-09-09T14:18:23Z<p>Kir: +link to --manage-cgroups doc</p>
<hr />
<div><!--<br />
**** FOR STEPS NEEDED TO MAKE A RELEASE, SEE https://criu.org/Releasing<br />
Use {{Bug|123}} to link to a github issue<br />
--><br />
[[Image:hummingbird.png|400px|right]]<br />
{{Release|3.13}}<br />
<br />
=== New features ===<br />
* vdso: arm32 support<br />
* Add TLS support<br />
* cgroup: Add "ignore" mode for {{Opt|--manage-cgroups}}<br />
* sk-inet: restore SO_BROADCAST option<br />
<br />
=== Bugfixes ===<br />
* inotify: cleanup auxiliary events from queue<br />
* Fix memory and resource leaks<br />
* lazy-pages: fix stack detection<br />
<br />
=== Improvements ===<br />
* vdso: Use gettimeofday() from vdso for timings<br />
* py: Reformat everything into pep8 style</div>Kirhttps://criu.org/index.php?title=Changelogs&diff=4964Changelogs2019-09-09T14:16:14Z<p>Kir: added 3.13</p>
<hr />
<div>This page contains all the changelogs for all the released CRIU versions. This is mostly useful for doing a search.<br />
<br />
<div class="noautonum">__TOC__</div><br />
<br />
{{fe|Changelog|{{nln}}|3.13|3.12|3.11|3.10|3.9|3.8.1|3.8|3.7|3.6|3.5|3.4|3.3|3.2.1|3.2|3.1|3.0|2.12.1|2.12|2.11.1|2.11|2.10|2.9|2.8|2.7|2.6|2.5|2.4|2.3|2.2|2.1|2.0|1.8|1.7.2|1.7|1.6.1|1.6|1.5.2|1.5.1|1.5|1.4|1.3.1|1.3|1.3-rc2|1.3-rc1|1.2|1.1|1.1-rc2|1.1-rc1|1.0|0.8|0.7|0.6|0.5|0.4|0.3|0.2|0.1}}</div>Kirhttps://criu.org/index.php?title=Download/criu&diff=4963Download/criu2019-09-09T14:12:03Z<p>Kir: /* Old versions */ add 3.12</p>
<hr />
<div>== Latest version ==<br />
<br />
{{:Download/criu/{{Last version}}}}<br />
<br />
== Old versions ==<br />
<br />
=== 3.x ===<br />
<br />
The following [[Download/criu/3.x|3.x]] releases were made:<br />
<br />
* {{fe|criu|{{nln}}* |3.12|3.11|3.10|3.9|3.8.1|3.8|3.7|3.6|3.5|3.4|3.3|3.2.1|3.2|3.1|3.0}}<br />
<br />
=== 2.x ===<br />
<br />
The following [[Download/criu/2.x|2.x]] releases were made:<br />
<br />
* {{fe|criu|{{nln}}* |2.12.1|2.12|2.11.1|2.11|2.10|2.9|2.8|2.7|2.6|2.5|2.4|2.3|2.2|2.1|2.0}}<br />
<br />
=== 1.x ===<br />
<br />
The following [[Download/criu/1.x|1.x]] releases were made:<br />
<br />
* {{fe|criu|{{nln}}* |1.8|1.7.2|1.7|1.6.1|1.6|1.5.2|1.5.1|1.5|1.4|1.3.1|1.3|1.3-rc2|1.3-rc1|1.2|1.1|1.1-rc2|1.1-rc1|1.0}}<br />
<br />
=== 0.x ===<br />
<br />
The following [[Download/criu/0.x|0.x]] releases were made:<br />
<br />
* {{fe|criu|{{nln}}* |0.8|0.7|0.6|0.5|0.4|0.3|0.2|0.1}}<br />
<br />
== See also ==<br />
<br />
* [[Changelogs]] to see all the changelogs on a single page.</div>Kirhttps://criu.org/index.php?title=Releasing&diff=4917Releasing2019-04-27T01:07:02Z<p>Kir: /* Wiki */ some improvements</p>
<hr />
<div>This is a reminder of steps needed to roll out a new release.<br />
<br />
== Code ==<br />
* Fix <code>Makefile.versions</code><br />
* Commit: <code>git commit -m "criu: Version $version"</code><br />
* Tag: <code>git tag -a v$version -m '$summary'</code><br />
* Push: <code>git push && git push --tags</code><br />
* Upload tarball: <code>make tar && scp $tarbal xemul@download.openvz.org:/var/www/html/criu/</code><br />
<br />
== Wiki ==<br />
<br />
* Make sure ''previous version'' is listed in [[Releases#Old versions]]<br />
* Add release metadata:<br />
** name to [[Template:Codename]]<br />
** date to [[Template:Release date]]<br />
* Create [[Download/criu/VERSION]]<br />
* Bump [[Template:Last version]]<br />
* Add new version to [[Changelogs]]<br />
* Fixup [[Release schedule]]<br />
** remove new version from [[Release schedule#Future releases]]<br />
** add previous version to [[Release schedule#Past releases]]<br />
<br />
== Announces ==<br />
<br />
* FIXME<br />
<br />
[[Category: development]]</div>Kirhttps://criu.org/index.php?title=Template:Changelog&diff=4916Template:Changelog2019-04-27T00:45:57Z<p>Kir: add br</p>
<hr />
<div>== v. {{{1}}} ==<br />
{{:Download/criu/{{{1}}}}}<br />
<br clear="both"/></div>Kirhttps://criu.org/index.php?title=Main_Page&diff=4915Main Page2019-04-27T00:43:30Z<p>Kir: some rewording</p>
<hr />
<div><div style="float: {{{1|right}}}"><br />
{{Download box|left}}<br />
[[Image:Ice penguin.jpg|right|178px]]<br />
</div><br />
__NOTOC__<br />
<big>Welcome to CRIU, a project to implement checkpoint/restore functionality for Linux.<br />
<br />
Checkpoint/Restore In Userspace, or CRIU (pronounced kree-oo, IPA: /krɪʊ/, Russian: криу), is a Linux software. It can freeze a running application (or part of it) and checkpoint its state to disk. The data saved can be used to restore the application and run it exactly as it was during the time of the freeze. Using this functionality, application or container live migration, snapshots, remote debugging, and [[usage scenarios|many other things]] are now possible.<br />
<br />
CRIU started as a project of Virtuozzo, and grew with the tremendous help from the [[community]]. It is currently used by (integrated into) OpenVZ, [[LXC]]/LXD, [[Docker]], Podman, and [[Integration|other software]], and [[packages|packaged for many Linux distributions]].<br />
</big><br />
{{Like}}<br />
<br clear="both"><br />
<br />
<div class="m_right"><br />
{{News block 2}}<br />
</div><br />
<br />
<div class="m_left"><br />
== Using ==<br />
<br />
<big><br />
;Getting [[packages]] for your distribution<br />
: Or try manual [[installation]] to have CRIU on your system<br />
</big><br />
<br />
;[[CLI]], [[RPC]] and [[C API]]<br />
: Three ways to start using the C/R functionality. [[:Category:API|More info]] about APIs.<br />
<br />
;[[Usage scenarios]]<br />
: Ideas how criu can be used (some are crazy indeed)<br />
<br />
;[[:Category:HOWTO]]<br />
: Collection of real world examples of how to use CRIU. Some are complex, some are not. HOW TO dump a [[simple loop]] might be the best one to start with. Also a set of [[asciinema]] records for real-life examples.<br />
<br />
;[[FAQ]] & [[When C/R fails]]<br />
: A sort of troubleshooting guide<br />
<br />
;[[What can change after C/R]]<br />
: CRIU cannot (yet) save and restore every single bit of tasks' state. This page describes what bits visible through standard kernel API are such.<br />
<br />
;[[What cannot be checkpointed]]<br />
: What an application could do to make CRIU refuse to dump it.<br />
<br />
;[[Contacts]]<br />
: Ways to communicate with CRIU community<br />
<br />
</div><br />
<br />
<div class="m_center"><br />
== Developing ==<br />
If you're interested in CRIU development, please subscribe to the criu mailing list: https://lists.openvz.org/mailman/listinfo/criu<br />
<br />
;[[Images]]<br />
: Description of image files format<br />
<br />
;[[Plugins]]<br />
: CRIU can call plugins provided by people<br />
<br />
;[[Upstream kernel commits]]<br />
: Mainline kernel commits tracker<br />
<br />
;[[Recent commits]]<br />
: CRIU tool repository commits<br />
<br />
;[[Manpages]]<br />
: Kernel's manpages commits tracker<br />
<br />
;[[ZDTM Test Suite]]<br />
: Zero downtime test suite<br />
<br />
;[[Todo|TODO]]<br />
: Current TODO list<br />
<br />
;[[User namespace]]<br />
: Implementing user namespace support<br />
<br />
;[[Postulates]]<br />
: What to keep in mind when writing new code<br />
<br />
;[https://coveralls.io/github/checkpoint-restore/criu Code coverage results]<br />
: Shows how zdtm run covers the criu code paths<br />
<br />
;[[How to submit patches]]<br />
:<br />
<br />
</div><br />
<br />
<br clear="both"><br />
<div class="m_left"><br />
== Under the hood ==<br />
* [[Checkpoint/Restore]]<br />
* [[:Category:Under the hood]]<br />
* [[:Category:Network]]<br />
* [[:Category:Files]]<br />
* [[:Category:Memory]]<br />
* [[Pending signals]]<br />
* [[Stages of restoring]]<br />
* [[Code blobs]]<br />
* [[Comparison to other CR projects]]<br />
</div><br />
<br />
<div class="m_center"><br />
== External links ==<br />
{{:Articles}}<br />
</div><br />
<br />
<div class="m_right"><br />
== Misc ==<br />
* [[Podcasts]] and other audio/video interviews<br />
* Project [[history]]<br />
* [[Logo]] description<br />
* [[Events]]<br />
* [[CRIU acronym fun]]<br />
</div></div>Kirhttps://criu.org/index.php?title=Download/criu/3.13&diff=4914Download/criu/3.132019-04-26T23:57:11Z<p>Kir: created</p>
<hr />
<div><!--<br />
**** FOR STEPS NEEDED TO MAKE A RELEASE, SEE https://criu.org/Releasing<br />
Use {{Bug|123}} to link to a github issue<br />
--><br />
<!-- rough template for this page REMOVE THIS LINE<br />
[[Image:heron.png|400px|right]]<br />
{{Release|3.13}}<br />
<br />
=== New features ===<br />
<br />
=== Bugfixes ===<br />
<br />
=== Improvements ===<br />
<br />
=== Deprecation ===<br />
* this one is optional<br />
<br />
REMOVE THIS LINE TOO --></div>Kir