-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchangelog.html
564 lines (542 loc) · 49.8 KB
/
changelog.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Changelog — zrepl documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/banner.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=5929fcd5"></script>
<script src="_static/doctools.js?v=888ff710"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Supporters" href="supporters.html" />
<link rel="prev" title="Talks & Presentations" href="pr.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
zrepl
<img src="_static/zrepl.svg" class="logo" alt="Logo"/>
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quick Start by Use Case</a></li>
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</a></li>
<li class="toctree-l1"><a class="reference internal" href="pr.html">Talks & Presentations</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Changelog</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#next-release">Next Release</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id2">0.6.1</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id3">0.6</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id4">0.5</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id5">0.4.0</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id6">0.3.1</a></li>
<li class="toctree-l2"><a class="reference internal" href="#release-0-3">0.3</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id8">0.2.1</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id9">0.2</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id10">0.1.1</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id11">0.1</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#notes-to-package-maintainers">Notes to Package Maintainers</a></li>
<li class="toctree-l3"><a class="reference internal" href="#changes">Changes</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#previous-releases">Previous Releases</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/zrepl/zrepl">GitHub Repository & Issue Tracker</a></li>
<li class="toctree-l1"><a class="reference external" href="https://matrix.to/#/#zrepl:matrix.org">Chat: Matrix</a></li>
<li class="toctree-l1"><a class="reference internal" href="supporters.html">Supporters</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">zrepl</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Changelog</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/zrepl/zrepl/blob/master/docs/changelog.rst" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="changelog">
<span id="id1"></span><h1>Changelog<a class="headerlink" href="#changelog" title="Link to this heading"></a></h1>
<p>The changelog summarizes bugfixes that are deemed relevant for users and package maintainers.
Developers should consult the git commit log or GitHub issue tracker.</p>
<section id="next-release">
<h2>Next Release<a class="headerlink" href="#next-release" title="Link to this heading"></a></h2>
<p>The plan for the next release is to revisit how zrepl does snapshot management.
High-level goals:</p>
<ul class="simple">
<li><p>Make it easy to decouple snapshot management (snapshotting, pruning) from replication.</p></li>
<li><p>Ability to include/exclude snapshots from replication.
This is useful for aforementioned decoupling, e.g., separate snapshot prefixes for local & remote replication.
Also, it makes explicit that by default, zrepl replicates all snapshots, and that
replication has no concept of “zrepl-created snapshots”, which is a common misconception.</p></li>
<li><p>Use of <code class="docutils literal notranslate"><span class="pre">zfs</span> <span class="pre">snapshot</span></code> comma syntax or channel programs to take snapshots of multiple
datasets atomically.</p></li>
<li><p>Provide an alternative to the <code class="docutils literal notranslate"><span class="pre">grid</span></code> pruning policy.
Most likely something based on hourly/daily/weekly/monthly “trains” plus a count.</p></li>
<li><p>Ability to prune at the granularity of the <strong>group</strong> of snapshots created at a given
time, as opposed to the individual snapshots within a dataset.
Maybe this will be addressed by the alternative to the <code class="docutils literal notranslate"><span class="pre">grid</span></code> pruning policy,
as it will likely be more predictable.</p></li>
</ul>
<p>Those changes will likely come with some breakage in the config.
However, I want to avoid breaking <strong>use cases</strong> that are satisfied by the current design.
There will be beta/RC releases to give users a chance to evaluate.</p>
</section>
<section id="id2">
<h2>0.6.1<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>[FEATURE] add metric to detect filesystems rules that don’t match any local dataset (thanks, <a class="reference external" href="https://github.com/gmekicaxcient">@gmekicaxcient</a>).</p></li>
<li><p>[BUG] <code class="docutils literal notranslate"><span class="pre">zrepl</span> <span class="pre">status</span></code>: hide progress bar once all filesystems reach terminal state (thanks, <a class="reference external" href="https://github.com/0x3333">@0x3333</a>).</p></li>
<li><p>[BUG] handling of tenative cursor presence if protection strategy doesn’t use it (<a class="reference external" href="https://github.com/zrepl/zrepl/issues/714">issue #714</a>).</p></li>
<li><p>[DOCS] address setup with two or more external disks (thanks, <a class="reference external" href="https://github.com/se-jaeger">@se-jaeger</a>).</p></li>
<li><p>[DOCS] document <code class="docutils literal notranslate"><span class="pre">replication</span></code> and <code class="docutils literal notranslate"><span class="pre">conflict_resolution</span></code> options (thanks, <a class="reference external" href="https://github.com/InsanePrawn">@InsanePrawn</a>).</p></li>
<li><p>[DOCS] docs: talks: add note on keep_bookmarks option (thanks, <a class="reference external" href="https://github.com/skirmess">@skirmess</a>).</p></li>
<li><p>[MAINT] dist: add openrc service file (thanks, <a class="reference external" href="https://github.com/gramosg">@gramosg</a>).</p></li>
<li><p>[MAINT] grafana: update dashboard to Grafana 9.3.6.</p></li>
<li><p>[MAINT] run platform tests as part of CI.</p></li>
<li><p>[MAINT] build: upgrade to Go 1.21 and update golangci-lint; minimum Go version for builds is now 1.20</p></li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<div class="line-block">
<div class="line">zrepl is a spare-time project primarily developed by <a class="reference external" href="https://cschwarz.com">Christian Schwarz</a>.</div>
<div class="line">You can support maintenance and feature development through one of the following services:</div>
<div class="line"><a class="reference external" href="https://www.patreon.com/zrepl"><img alt="Donate via Patreon" src="https://img.shields.io/badge/dynamic/json?color=yellow&label=Patreon&query=data.attributes.patron_count&url=https%3A%2F%2Fwww.patreon.com%2Fapi%2Fcampaigns%2F3095079" /></a> <a class="reference external" href="https://github.com/sponsors/problame"><img alt="Donate via GitHub Sponsors" src="https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&style=flat&color=yellow" /></a> <a class="reference external" href="https://liberapay.com/zrepl/donate"><img alt="Donate via Liberapay" src="https://img.shields.io/liberapay/patrons/zrepl.svg?logo=liberapay" /></a> <a class="reference external" href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=R5QSXJVYHGX96"><img alt="Donate via PayPal" src="https://img.shields.io/badge/donate-paypal-yellow.svg" /></a></div>
<div class="line">Note that PayPal processing fees are relatively high for small donations.</div>
<div class="line">For SEPA wire transfer and <strong>commercial support</strong>, please <a class="reference external" href="https://cschwarz.com">contact Christian directly</a>.</div>
</div>
</div>
</section>
<section id="id3">
<h2>0.6<a class="headerlink" href="#id3" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>[FEATURE] <a class="reference internal" href="configuration/snapshotting.html#job-snapshotting-cron"><span class="std std-ref">Schedule-based snapshotting</span></a> using <code class="docutils literal notranslate"><span class="pre">cron</span></code> syntax instead of an interval.</p></li>
<li><p>[FEATURE] Configurable initial replication policy.
When a filesystem is first replicated to a receiver, this control whether just the newest
snapshot will be replicated vs. all existing snapshots. Learn more <a class="reference internal" href="configuration/conflict_resolution.html#conflict-resolution-initial-replication"><span class="std std-ref">in the docs</span></a>.</p></li>
<li><p>[FEATURE] Configurable timestamp format for snapshot names via <a class="reference internal" href="configuration/snapshotting.html#job-snapshotting-timestamp-format"><span class="std std-ref">timestamp_format</span></a>
(Thanks, <a class="reference external" href="https://github.com/ydylla">@ydylla</a>).</p></li>
<li><p>[FEATURE] Add <code class="docutils literal notranslate"><span class="pre">ZREPL_DESTROY_MAX_BATCH_SIZE</span></code> env var (default 0=unlimited)
(Thanks, <a class="reference external" href="https://github.com/3nprob">@3nprob</a>).</p></li>
<li><p>[FEATURE] Add <code class="docutils literal notranslate"><span class="pre">zrepl</span> <span class="pre">configcheck</span> <span class="pre">--skip-cert-check</span></code> flag (Thanks, <a class="reference external" href="https://github.com/cole-h">@cole-h</a>).</p></li>
<li><p>[BUG] Fix resuming from interrupted replications that use <code class="docutils literal notranslate"><span class="pre">send.raw</span></code> on unencrypted datasets.</p>
<ul>
<li><p>The send options introduced in zrepl 0.4 allow users to specify additional zfs send flags for zrepl to use.
Before this fix, when setting <code class="docutils literal notranslate"><span class="pre">send.raw=true</span></code> on a job that replicates unencrypted datasets,
zrepl would not allow an interrupted replication to resume.
The reason were overly cautious checks to support the <code class="docutils literal notranslate"><span class="pre">send.encrypted</span></code> option.</p></li>
<li><p>This bugfix removes these checks from the replication planner.
This makes <code class="docutils literal notranslate"><span class="pre">send.encrypted</span></code> a sender-side-only concern, much like all other <code class="docutils literal notranslate"><span class="pre">send.*</span></code> flags.</p></li>
<li><p>However, this means that the <code class="docutils literal notranslate"><span class="pre">zrepl</span> <span class="pre">status</span></code> UI no longer indicates whether a replication step uses encrypted sends or not.
The setting is still effective though.</p></li>
</ul>
</li>
<li><p><strong>[BREAK]</strong> convert Prometheus metric <code class="docutils literal notranslate"><span class="pre">zrepl_version_daemon</span></code> to <code class="docutils literal notranslate"><span class="pre">zrepl_start_time</span></code> metric</p>
<ul>
<li><p>The metric still reports the zrepl version in a label.
But the metric <em>value</em> is now the Unix timestamp at the time the daemon was started.
The Grafana dashboard in <a class="reference external" href="https://github.com/zrepl/zrepl/blob/master/dist/grafana">dist/grafana</a> has been updated.</p></li>
</ul>
</li>
<li><p>[BUG] transient zrepl status error: <code class="docutils literal notranslate"><span class="pre">Post</span> <span class="pre">"http://unix/status":</span> <span class="pre">EOF</span></code></p></li>
<li><p>[BUG] don’t treat receive-side bookmarks as a replication conflict.
This facilitates chaining of replication jobs. See <a class="reference external" href="https://github.com/zrepl/zrepl/issues/490">issue #490</a>.</p></li>
<li><p>[BUG] workaround for Go/gRPC problem on Illumos where zrepl would
crash when using the <code class="docutils literal notranslate"><span class="pre">local</span></code> transport type (<a class="reference external" href="https://github.com/zrepl/zrepl/issues/598">issue #598</a>).</p></li>
<li><p>[BUG] fix active child tasks panic that cold occur during replication plannig (<a class="reference external" href="https://github.com/zrepl/zrepl/issues/193abbe">issue #193abbe</a>)</p></li>
<li><p>[BUG] <code class="docutils literal notranslate"><span class="pre">zrepl</span> <span class="pre">status</span></code> off-by-one error in display of completed step count (<a class="reference external" href="https://github.com/zrepl/zrepl/commit/ce6701f">commit ce6701f</a>)</p></li>
<li><p>[BUG] Allow using day & week units for <code class="docutils literal notranslate"><span class="pre">snapshotting.interval</span></code> (<a class="reference external" href="https://github.com/zrepl/zrepl/commit/ffb1d89">commit ffb1d89</a>)</p></li>
<li><p>[DOCS] <code class="docutils literal notranslate"><span class="pre">docs/overview</span></code> improvements (Thanks, <a class="reference external" href="https://github.com/jtagcat">@jtagcat</a>).</p></li>
<li><p>[MAINT] Update to Go 1.19.</p></li>
</ul>
</section>
<section id="id4">
<h2>0.5<a class="headerlink" href="#id4" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>[FEATURE] <a class="reference internal" href="configuration/sendrecvoptions.html#job-send-recv-options-bandwidth-limit"><span class="std std-ref">Bandwidth limiting</span></a> (Thanks, Prominic.NET, Inc.)</p></li>
<li><p>[FEATURE] zrepl status: use a <code class="docutils literal notranslate"><span class="pre">*</span></code> to indicate which filesystem is currently replicating</p></li>
<li><p>[FEATURE] include daemon environment variables in zrepl status (currently only in <code class="docutils literal notranslate"><span class="pre">--raw</span></code>)</p></li>
<li><p>[BUG] <strong>fix encrypt-on-receive + placeholders use case</strong> (<a class="reference external" href="https://github.com/zrepl/zrepl/issues/504">issue #504</a>)</p>
<ul>
<li><p>Before this fix, <strong>plain sends</strong> to a receiver with an encrypted <code class="docutils literal notranslate"><span class="pre">root_fs</span></code> <strong>could be received unencrypted</strong> if zrepl needed to create placeholders on the receiver.</p></li>
<li><p>Existing zrepl users should <a class="reference internal" href="configuration/sendrecvoptions.html#job-recv-options-placeholder"><span class="std std-ref">read the docs</span></a> and check <code class="docutils literal notranslate"><span class="pre">zfs</span> <span class="pre">get</span> <span class="pre">-r</span> <span class="pre">encryption,zrepl:placeholder</span> <span class="pre">PATH_TO_ROOTFS</span></code> on the receiver.</p></li>
<li><p>Thanks to <a class="reference external" href="https://github.com/mologie">@mologie</a> and <a class="reference external" href="https://github.com/razielgn">@razielgn</a> for reporting and testing!</p></li>
</ul>
</li>
<li><p>[BUG] Rename mis-spelled <a class="reference internal" href="configuration/sendrecvoptions.html#job-send-options"><span class="std std-ref">send option</span></a> <code class="docutils literal notranslate"><span class="pre">embbeded_data</span></code> to <code class="docutils literal notranslate"><span class="pre">embedded_data</span></code>.</p></li>
<li><p>[BUG] zrepl status: replication step numbers should start at 1</p></li>
<li><p>[BUG] incorrect bandwidth averaging in <code class="docutils literal notranslate"><span class="pre">zrepl</span> <span class="pre">status</span></code>.</p></li>
<li><p>[BUG] FreeBSD with OpenZFS 2.0: zrepl would wait indefinitely for zfs send to exit on timeouts.</p></li>
<li><p>[BUG] fix <code class="docutils literal notranslate"><span class="pre">strconv.ParseInt:</span> <span class="pre">value</span> <span class="pre">out</span> <span class="pre">of</span> <span class="pre">range</span></code> bug (and use the control RPCs).</p></li>
<li><p>[DOCS] improve description of multiple pruning rules.</p></li>
<li><p>[DOCS] document <a class="reference internal" href="usage.html#usage-platform-tests"><span class="std std-ref">platform tests</span></a>.</p></li>
<li><p>[DOCS] quickstart: make users aware that prune rules apply to all snapshots.</p></li>
<li><p>[MAINT] some platformtests were broken.</p></li>
<li><p>[MAINT] FreeBSD: release armv7 and arm64 binaries.</p></li>
<li><p>[MAINT] apt repo: update instructions due to <code class="docutils literal notranslate"><span class="pre">apt-key</span></code> deprecation.</p></li>
</ul>
<p>Note to all users: please read up on the following OpenZFS bugs, as you might be affected:</p>
<ul class="simple">
<li><p><a class="reference external" href="https://github.com/openzfs/zfs/issues/12762">ZFS send/recv with ashift 9->12 leads to data corruption</a>.</p></li>
<li><p>Various bugs with encrypted send/recv (<a class="reference external" href="https://openzfs.topicbox.com/groups/developer/T24bdaa2886c6cbf5-Mc039a11c3f1507ea0664817b/december-openzfs-leadership-meeting">Leadership meeting notes</a>)</p></li>
</ul>
<p>Finally, I’d like to point you to the <a class="reference external" href="https://github.com/zrepl/zrepl/discussions/547">GitHub discussion</a> about which bugfixes and features should be prioritized in zrepl 0.6 and beyond!</p>
</section>
<section id="id5">
<h2>0.4.0<a class="headerlink" href="#id5" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>[FEATURE] support setting zfs send / recv flags in the config (send: <code class="docutils literal notranslate"><span class="pre">-wLcepbS</span></code> , recv: <code class="docutils literal notranslate"><span class="pre">-ox</span></code> ).
Config docs <a class="reference internal" href="configuration/sendrecvoptions.html#job-send-options"><span class="std std-ref">here</span></a> and <a class="reference internal" href="configuration/sendrecvoptions.html#job-recv-options"><span class="std std-ref">here</span></a> .</p></li>
<li><p>[FEATURE] parallel replication is now configurable (disabled by default, <a class="reference internal" href="configuration/replication.html#replication-option-concurrency"><span class="std std-ref">config docs here</span></a> ).</p></li>
<li><p>[FEATURE] New <code class="docutils literal notranslate"><span class="pre">zrepl</span> <span class="pre">status</span></code> UI:</p>
<ul>
<li><p>Interactive job selection.</p></li>
<li><p>Interactively <code class="docutils literal notranslate"><span class="pre">zrepl</span> <span class="pre">signal</span></code> jobs.</p></li>
<li><p>Filter filesystems in the job view by name.</p></li>
<li><p>An approximation of the old UI is still included as <cite>–mode legacy</cite> but will be removed in a future release of zrepl.</p></li>
</ul>
</li>
<li><p>[BUG] Actually use concurrency when listing zrepl abstractions & doing size estimation.
These operations were accidentally made sequential in zrepl 0.3.</p></li>
<li><p>[BUG] Job hang-up during second replication attempt.</p></li>
<li><p>[BUG] Data races conditions in the dataconn rpc stack.</p></li>
<li><p>[MAINT] Update to protobuf v1.25 and grpc 1.35.</p></li>
</ul>
<p>For users who skipped the 0.3.1 update: please make sure your pruning grid config is correct.
The following bugfix in 0.3.1 <a class="reference external" href="https://github.com/zrepl/zrepl/issues/400">caused problems for some users</a>:</p>
<ul class="simple">
<li><p>[BUG] pruning: <code class="docutils literal notranslate"><span class="pre">grid</span></code>: add all snapshots that do not match the regex to the rule’s destroy list.</p></li>
</ul>
</section>
<section id="id6">
<h2>0.3.1<a class="headerlink" href="#id6" title="Link to this heading"></a></h2>
<p>Mostly a bugfix release for <a class="reference internal" href="#release-0-3"><span class="std std-ref">zrepl 0.3</span></a>.</p>
<ul class="simple">
<li><p>[FEATURE] pruning: add optional <code class="docutils literal notranslate"><span class="pre">regex</span></code> field to <code class="docutils literal notranslate"><span class="pre">last_n</span></code> rule</p></li>
<li><p>[DOCS] pruning: <code class="docutils literal notranslate"><span class="pre">grid</span></code> : improve documentation and add an example</p></li>
<li><p>[BUG] pruning: <code class="docutils literal notranslate"><span class="pre">grid</span></code>: add all snapshots that do not match the regex to the rule’s destroy list.
This brings the implementation in line with the docs.</p></li>
<li><p>[BUG] <code class="docutils literal notranslate"><span class="pre">easyrsa</span></code> script in docs</p></li>
<li><p>[BUG] platformtest: fix skipping encryption-only tests on systems that don’t support encryption</p></li>
<li><p>[BUG] replication: report AttemptDone if no filesystems are replicated</p></li>
<li><p>[FEATURE] status + replication: warning if replication succeeeded without any filesystem being replicated</p></li>
<li><p>[DOCS] update multi-job & multi-host setup section</p></li>
<li><p>RPM Packaging</p></li>
<li><p>CI infrastructure rework</p></li>
<li><p>Continuous deployment of that new <cite>stable</cite> branch to zrepl.github.io.</p></li>
</ul>
</section>
<section id="release-0-3">
<span id="id7"></span><h2>0.3<a class="headerlink" href="#release-0-3" title="Link to this heading"></a></h2>
<p>This is a big one! Headlining features:</p>
<ul class="simple">
<li><p><strong>Resumable Send & Recv Support</strong>
No knobs required, automatically used where supported.</p></li>
<li><p><strong>Encrypted Send & Recv Support</strong> for OpenZFS native encryption,
<a class="reference internal" href="configuration/sendrecvoptions.html#job-send-options"><span class="std std-ref">configurable</span></a> at the job level, i.e., for all filesystems a job is responsible for.</p></li>
<li><p><strong>Replication Guarantees</strong>
Automatic use of ZFS holds and bookmarks to protect a replicated filesystem from losing synchronization between sender and receiver.
By default, zrepl guarantees that incremental replication will always be possible and interrupted steps will always be resumable.</p></li>
</ul>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>We highly recommend studying the updated <a class="reference internal" href="configuration/overview.html#overview-how-replication-works"><span class="std std-ref">overview section of the configuration chapter</span></a> to understand how replication works.</p>
</div>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>Go 1.15 changed the default TLS validation policy to <strong>require Subject Alternative Names (SAN) in certificates</strong>.
The openssl commands we provided in the quick-start guides up to and including the zrepl 0.3 docs seem not to work properly.
If you encounter certificate validation errors regarding SAN and wish to continue to use your old certificates, start the zrepl daemon with env var <code class="docutils literal notranslate"><span class="pre">GODEBUG=x509ignoreCN=0</span></code>.
Alternatively, generate new certificates with SANs (see <a class="reference internal" href="configuration/transports.html#transport-tcp-tlsclientauth-certgen"><span class="std std-ref">both options int the TLS transport docs</span></a> ).</p>
</div>
<p>Quick-start guides:</p>
<ul class="simple">
<li><p>We have added <a class="reference internal" href="quickstart/backup_to_external_disk.html#quickstart-backup-to-external-disk"><span class="std std-ref">another quick-start guide for a typical workstation use case for zrepl</span></a>.
Check it out to learn how you can use zrepl to back up your workstation’s OpenZFS natively-encrypted root filesystem to an external disk.</p></li>
</ul>
<p>Additional changelog:</p>
<ul class="simple">
<li><p><strong>[BREAK]</strong> Go 1.15 TLS changes mentioned above.</p></li>
<li><p><strong>[BREAK]</strong> <strong>[CONFIG]</strong> <strong>more restrictive job names than in prior zrepl versions</strong>
Starting with this version, job names are going to be embedded into ZFS holds and bookmark names (see <a class="reference internal" href="configuration/overview.html#zrepl-zfs-abstractions"><span class="std std-ref">this section for details</span></a>).
Therefore you might need to adjust your job names.
<strong>Note that jobs</strong> cannot be renamed easily <strong>once you start using zrepl 0.3.</strong></p></li>
<li><p><strong>[BREAK]</strong> <strong>[MIGRATION]</strong> replication cursor representation changed</p>
<ul>
<li><p>zrepl now manages the <a class="reference internal" href="configuration/overview.html#zrepl-zfs-abstractions"><span class="std std-ref">replication cursor bookmark</span></a> per job-filesystem tuple instead of a single replication cursor per filesystem.
In the future, this will permit multiple sending jobs to send from the same filesystems.</p></li>
<li><p>ZFS does not allow bookmark renaming, thus we cannot migrate the old replication cursors.</p></li>
<li><p>zrepl 0.3 will automatically create cursors in the new format for new replications, and warn if it still finds ones in the old format.</p></li>
<li><p>Run <code class="docutils literal notranslate"><span class="pre">zrepl</span> <span class="pre">migrate</span> <span class="pre">replication-cursor:v1-v2</span></code> to safely destroy old-format cursors.
The migration will ensure that only those old-format cursors are destroyed that have been superseeded by new-format cursors.</p></li>
</ul>
</li>
<li><p>[FEATURE] New option <code class="docutils literal notranslate"><span class="pre">listen_freebind</span></code> (tcp, tls, prometheus listener)</p></li>
<li><p>[FEATURE] <a class="reference external" href="https://github.com/zrepl/zrepl/issues/341">issue #341</a> Prometheus metric for failing replications + corresponding Grafana panel</p></li>
<li><p>[FEATURE] <a class="reference external" href="https://github.com/zrepl/zrepl/issues/265">issue #265</a> transport/tcp: support for CIDR masks in client IP whitelist</p></li>
<li><p>[FEATURE] documented subcommand to generate <code class="docutils literal notranslate"><span class="pre">bash</span></code> and <code class="docutils literal notranslate"><span class="pre">zsh</span></code> completions</p></li>
<li><p>[FEATURE] <a class="reference external" href="https://github.com/zrepl/zrepl/issues/307">issue #307</a> <code class="docutils literal notranslate"><span class="pre">chrome://trace</span></code> -compatible activity tracing of zrepl daemon activity</p></li>
<li><p>[FEATURE] logging: trace IDs for better log entry correlation with concurrent replication jobs</p></li>
<li><p>[FEATURE] experimental environment variable for parallel replication (see <a class="reference external" href="https://github.com/zrepl/zrepl/issues/306">issue #306</a> )</p></li>
<li><p>[BUG] missing logger context vars in control connection handlers</p></li>
<li><p>[BUG] improved error messages on <code class="docutils literal notranslate"><span class="pre">zfs</span> <span class="pre">send</span></code> errors</p></li>
<li><p>[BUG] [DOCS] snapshotting: clarify sync-up behavior and warn about filesystems</p></li>
<li><p>[BUG] transport/ssh: do not leak zombie ssh process on connection failures
that will not be snapshotted until the sync-up phase is over</p></li>
<li><p>[DOCS] Installation: <a class="reference internal" href="installation/freebsd-jail-with-iocage.html#installation-freebsd-jail-with-iocage"><span class="std std-ref">FreeBSD jail with iocage</span></a></p></li>
<li><p>[DOCS] Document new replication features in the <a class="reference internal" href="configuration/overview.html#overview-how-replication-works"><span class="std std-ref">config overview</span></a> and <a class="reference external" href="https://github.com/zrepl/zrepl/blob/master/replication/design.md">replication/design.md</a>.</p></li>
<li><p><strong>[MAINTAINER NOTICE]</strong> New platform tests in this version, please make sure you run them for your distro!</p></li>
<li><p><strong>[MAINTAINER NOTICE]</strong> Please add the shell completions to the zrepl packages.</p></li>
</ul>
</section>
<section id="id8">
<h2>0.2.1<a class="headerlink" href="#id8" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>[FEATURE] Illumos (and Solaris) compatibility and binary builds (thanks, <a class="reference external" href="https://mnx.io">MNX.io</a> )</p></li>
<li><p>[FEATURE] 32bit binaries for Linux and FreeBSD (untested, though)</p></li>
<li><p>[BUG] better error messages in <code class="docutils literal notranslate"><span class="pre">ssh+stdinserver</span></code> transport</p></li>
<li><p>[BUG] systemd + <code class="docutils literal notranslate"><span class="pre">ssh+stdinserver</span></code>: automatically create <code class="docutils literal notranslate"><span class="pre">/var/run/zrepl/stdinserver</span></code></p></li>
<li><p>[BUG] crash if Prometheus listening socket cannot be opened</p></li>
<li><p>[MAINTAINER NOTICE] <code class="docutils literal notranslate"><span class="pre">Makefile</span></code> refactoring, see <a class="reference external" href="https://github.com/zrepl/zrepl/commit/080f2c0">commit 080f2c0</a></p></li>
</ul>
</section>
<section id="id9">
<h2>0.2<a class="headerlink" href="#id9" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>[FEATURE] <a class="reference internal" href="configuration/snapshotting.html#job-snapshotting-hooks"><span class="std std-ref">Pre- and Post-Snapshot Hooks</span></a>
with built-in support for MySQL and Postgres checkpointing
as well as custom scripts (thanks, <a class="reference external" href="https://github.com/overhacked">@overhacked</a>!)</p></li>
<li><p>[FEATURE] Use <code class="docutils literal notranslate"><span class="pre">zfs</span> <span class="pre">destroy</span> <span class="pre">pool/fs@snap1,snap2,...</span></code> CLI feature if available</p></li>
<li><p>[FEATURE] Linux ARM64 Docker build support & binary builds</p></li>
<li><p>[FEATURE] <code class="docutils literal notranslate"><span class="pre">zrepl</span> <span class="pre">status</span></code> now displays snapshotting reports</p></li>
<li><p>[FEATURE] <code class="docutils literal notranslate"><span class="pre">zrepl</span> <span class="pre">status</span> <span class="pre">--job</span> <span class="pre"><JOBNAME></span></code> filter flag</p></li>
<li><p>[BUG] i386 build</p></li>
<li><p>[BUG] early validation of host:port tuples in config</p></li>
<li><p>[BUG] <code class="docutils literal notranslate"><span class="pre">zrepl</span> <span class="pre">status</span></code> now supports <code class="docutils literal notranslate"><span class="pre">TERM=screen</span></code> (tmux on FreeBSD / FreeNAS)</p></li>
<li><p>[BUG] ignore <em>connection reset by peer</em> errors when shutting down connections</p></li>
<li><p>[BUG] correct error messages when receive-side pool or <code class="docutils literal notranslate"><span class="pre">root_fs</span></code> dataset is not imported</p></li>
<li><p>[BUG] fail fast for misconfigured local transport</p></li>
<li><p>[BUG] race condition in replication report generation would crash the daemon when running <code class="docutils literal notranslate"><span class="pre">zrepl</span> <span class="pre">status</span></code></p></li>
<li><p>[BUG] rpc goroutine leak in <code class="docutils literal notranslate"><span class="pre">push</span></code> mode if zfs recv fails on the <code class="docutils literal notranslate"><span class="pre">sink</span></code> side</p></li>
<li><p>[MAINTAINER NOTICE] Go modules for dependency management both inside and outside of GOPATH
(<code class="docutils literal notranslate"><span class="pre">lazy.sh</span></code> and <code class="docutils literal notranslate"><span class="pre">Makefile</span></code> force <code class="docutils literal notranslate"><span class="pre">GO111MODULE=on</span></code>)</p></li>
<li><p>[MAINTAINER NOTICE] <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">platformtest</span></code> target to check zrepl’s ZFS abstractions (screen scraping, etc.).
These tests only work on a system with ZFS installed, and must be run as root because they create a file-backed pool for each test case.
The pool name <code class="docutils literal notranslate"><span class="pre">zreplplatformtest</span></code> is reserved for this use case.
Only run <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">platformtest</span></code> on test systems, e.g. a FreeBSD VM image.</p></li>
</ul>
</section>
<section id="id10">
<h2>0.1.1<a class="headerlink" href="#id10" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>[BUG] <a class="reference external" href="https://github.com/zrepl/zrepl/issues/162">issue #162</a> <a class="reference external" href="https://github.com/zrepl/zrepl/commit/d6304f4">commit d6304f4</a> : fix I/O timeout errors on variable receive rate</p>
<ul>
<li><p>A significant reduction or sudden stall of the receive rate (e.g. recv pool has other I/O to do)
would cause a <code class="docutils literal notranslate"><span class="pre">writev</span> <span class="pre">I/O</span> <span class="pre">timeout</span></code> error after approximately ten seconds.</p></li>
</ul>
</li>
</ul>
</section>
<section id="id11">
<h2>0.1<a class="headerlink" href="#id11" title="Link to this heading"></a></h2>
<p>This release is a milestone for zrepl and required significant refactoring if not rewrites of substantial parts of the application.
It breaks both configuration and transport format, and thus requires manual intervention and updates on both sides of a replication setup.</p>
<div class="admonition danger">
<p class="admonition-title">Danger</p>
<p>The changes in the pruning system for this release require you to explicitly define <strong>keep rules</strong>:
for any snapshot that you want to keep, at least one rule must match.
This is different from previous releases where pruning only affected snapshots with the configured snapshotting prefix.
Make sure that snapshots to be kept or ignored by zrepl are covered, e.g. by using the <code class="docutils literal notranslate"><span class="pre">regex</span></code> keep rule.
<a class="reference internal" href="configuration/prune.html#prune"><span class="std std-ref">Learn more in the config docs…</span></a></p>
</div>
<section id="notes-to-package-maintainers">
<h3>Notes to Package Maintainers<a class="headerlink" href="#notes-to-package-maintainers" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Notify users about config changes and migrations (see changes attributed with <strong>[BREAK]</strong> and <strong>[MIGRATION]</strong> below)</p></li>
<li><p>If the daemon crashes, the stack trace produced by the Go runtime and possibly diagnostic output of zrepl will be written to stderr.
This behavior is independent from the <code class="docutils literal notranslate"><span class="pre">stdout</span></code> outlet type.
Please make sure the stderr output of the daemon is captured somewhere.
To conserve precious stack traces, make sure that multiple service restarts do not directly discard previous stderr output.</p></li>
<li><p>Make it obvious for users how to set the <code class="docutils literal notranslate"><span class="pre">GOTRACEBACK</span></code> environment variable to <code class="docutils literal notranslate"><span class="pre">GOTRACEBACK=crash</span></code>.
This functionality will cause SIGABRT on panics and can be used to capture a coredump of the panicking process.
To that extend, make sure that your package build system, your OS’s coredump collection and the Go delve debugger work together.
Use your build system to package the Go program in <a class="reference external" href="https://rakyll.org/coredumps/">this tutorial on Go coredumps and the delve debugger</a> , and make sure the symbol resolution etc. work on coredumps captured from the binary produced by your build system. (Special focus on symbol stripping, etc.)</p></li>
<li><p>Consider using the <code class="docutils literal notranslate"><span class="pre">zrepl</span> <span class="pre">configcheck</span></code> subcommand in startup scripts to abort a restart that would fail due to an invalid config.</p></li>
</ul>
</section>
<section id="changes">
<h3>Changes<a class="headerlink" href="#changes" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><strong>[BREAK]</strong> <strong>[MIGRATION]</strong> Placeholder property representation changed</p>
<ul>
<li><p>The <a class="reference internal" href="configuration/overview.html#replication-placeholder-property"><span class="std std-ref">placeholder property</span></a> now uses <code class="docutils literal notranslate"><span class="pre">on|off</span></code> as values
instead of hashes of the dataset path. This permits renames of the sink filesystem without
updating all placeholder properties.</p></li>
<li><p>Relevant for 0.0.X-0.1-rc* to 0.1 migrations</p></li>
<li><p>Make sure your config is valid with <code class="docutils literal notranslate"><span class="pre">zrepl</span> <span class="pre">configcheck</span></code></p></li>
<li><p>Run <code class="docutils literal notranslate"><span class="pre">zrepl</span> <span class="pre">migrate</span> <span class="pre">0.0.X:0.1:placeholder</span></code></p></li>
</ul>
</li>
<li><p>[FEATURE] <a class="reference external" href="https://github.com/zrepl/zrepl/issues/55">issue #55</a> : Push replication (see <a class="reference internal" href="configuration/jobs.html#job-push"><span class="std std-ref">push job</span></a> and <a class="reference internal" href="configuration/jobs.html#job-sink"><span class="std std-ref">sink job</span></a>)</p></li>
<li><p>[FEATURE] <a class="reference internal" href="configuration/transports.html#transport-tcp"><span class="std std-ref">TCP Transport</span></a></p></li>
<li><p>[FEATURE] <a class="reference internal" href="configuration/transports.html#transport-tcp-tlsclientauth"><span class="std std-ref">TCP + TLS client authentication transport</span></a></p></li>
<li><p>[FEATURE] <a class="reference external" href="https://github.com/zrepl/zrepl/issues/111">issue #111</a>: RPC protocol rewrite</p>
<ul>
<li><p><strong>[BREAK]</strong> Protocol breakage; Update and restart of all zrepl daemons is required.</p></li>
<li><p>Use <a class="reference external" href="https://grpc.io/">gRPC</a> for control RPCs and a custom protocol for bulk data transfer.</p></li>
<li><p>Automatic retries for network-temporary errors</p>
<ul>
<li><p>Limited to errors during replication for this release.
Addresses the common problem of ISP-forced reconnection at night, but will become
way more useful with resumable send & recv support.
Pruning errors are handled per FS, i.e., a prune RPC is attempted at least once per FS.</p></li>
</ul>
</li>
</ul>
</li>
<li><p>[FEATURE] Proper timeout handling for the <a class="reference internal" href="configuration/transports.html#transport-ssh-stdinserver"><span class="std std-ref">SSH transport</span></a></p>
<ul>
<li><p><strong>[BREAK]</strong> Requires Go 1.11 or later.</p></li>
</ul>
</li>
<li><p><strong>[BREAK]</strong> <strong>[CONFIG]</strong>: mappings are no longer supported</p>
<ul>
<li><p>Receiving sides (<code class="docutils literal notranslate"><span class="pre">pull</span></code> and <code class="docutils literal notranslate"><span class="pre">sink</span></code> job) specify a single <code class="docutils literal notranslate"><span class="pre">root_fs</span></code>.
Received filesystems are then stored <em>per client</em> in <code class="docutils literal notranslate"><span class="pre">${root_fs}/${client_identity}</span></code>.
See <a class="reference internal" href="configuration/overview.html#job-overview"><span class="std std-ref">Jobs & How They Work Together</span></a> for details.</p></li>
</ul>
</li>
<li><p>[FEATURE] <strong>[BREAK]</strong> <strong>[CONFIG]</strong> Manual snapshotting + triggering of replication</p>
<ul>
<li><p>[FEATURE] <a class="reference external" href="https://github.com/zrepl/zrepl/issues/69">issue #69</a>: include manually created snapshots in replication</p></li>
<li><p><strong>[CONFIG]</strong> <code class="docutils literal notranslate"><span class="pre">manual</span></code> and <code class="docutils literal notranslate"><span class="pre">periodic</span></code> <a class="reference internal" href="configuration/snapshotting.html#job-snapshotting-spec"><span class="std std-ref">snapshotting types</span></a></p></li>
<li><p>[FEATURE] <code class="docutils literal notranslate"><span class="pre">zrepl</span> <span class="pre">signal</span> <span class="pre">wakeup</span> <span class="pre">JOB</span></code> subcommand to trigger replication + pruning</p></li>
<li><p>[FEATURE] <code class="docutils literal notranslate"><span class="pre">zrepl</span> <span class="pre">signal</span> <span class="pre">reset</span> <span class="pre">JOB</span></code> subcommand to abort current replication + pruning</p></li>
</ul>
</li>
<li><p>[FEATURE] <strong>[BREAK]</strong> <strong>[CONFIG]</strong> New pruning system</p>
<ul>
<li><p>The active side of a replication (pull or push) decides what to prune for both sender and receiver.
The RPC protocol is used to execute the destroy operations on the remote side.</p></li>
<li><p>New pruning policies (see <a class="reference internal" href="configuration/prune.html#prune"><span class="std std-ref">configuration documentation</span></a> )</p>
<ul>
<li><p>The decision what snapshots shall be pruned is now made based on <em>keep rules</em></p></li>
<li><p>[FEATURE] <a class="reference external" href="https://github.com/zrepl/zrepl/issues/68">issue #68</a>: keep rule <code class="docutils literal notranslate"><span class="pre">not_replicated</span></code> prevents divergence of sender and receiver</p></li>
</ul>
</li>
<li><p>[FEATURE] <strong>[BREAK]</strong> Bookmark pruning is no longer necessary</p>
<ul>
<li><p>Per filesystem, zrepl creates a single bookmark (<code class="docutils literal notranslate"><span class="pre">#zrepl_replication_cursor</span></code>) and moves it forward with the most recent successfully replicated snapshot on the receiving side.</p></li>
<li><p>Old bookmarks created by prior versions of zrepl (named like their corresponding snapshot) must be deleted manually.</p></li>
<li><p><strong>[CONFIG]</strong> <code class="docutils literal notranslate"><span class="pre">keep_bookmarks</span></code> parameter of the <code class="docutils literal notranslate"><span class="pre">grid</span></code> keep rule has been removed</p></li>
</ul>
</li>
</ul>
</li>
<li><p>[FEATURE] <code class="docutils literal notranslate"><span class="pre">zrepl</span> <span class="pre">status</span></code> for live-updating replication progress (it’s really cool!)</p></li>
<li><p>[FEATURE] <a class="reference internal" href="configuration/jobs.html#job-snap"><span class="std std-ref">Snapshot- & pruning-only job type</span></a> (for local snapshot management)</p></li>
<li><p>[FEATURE] <a class="reference external" href="https://github.com/zrepl/zrepl/issues/67">issue #67</a>: Expose <a class="reference external" href="https://prometheus.io">Prometheus</a> metrics via HTTP (<a class="reference internal" href="configuration/monitoring.html#monitoring-prometheus"><span class="std std-ref">config docs</span></a>)</p>
<ul>
<li><p>Compatible Grafana dashboard shipping in <code class="docutils literal notranslate"><span class="pre">dist/grafana</span></code></p></li>
</ul>
</li>
<li><p><strong>[CONFIG]</strong> Logging outlet types must be specified using the <code class="docutils literal notranslate"><span class="pre">type</span></code> instead of <code class="docutils literal notranslate"><span class="pre">outlet</span></code> key</p></li>
<li><p><strong>[BREAK]</strong> <a class="reference external" href="https://github.com/zrepl/zrepl/issues/53">issue #53</a>: CLI: <code class="docutils literal notranslate"><span class="pre">zrepl</span> <span class="pre">control</span> <span class="pre">*</span></code> subcommands have been made direct subcommands of <code class="docutils literal notranslate"><span class="pre">zrepl</span> <span class="pre">*</span></code></p></li>
<li><p>[BUG] Goroutine leak on ssh transport connection timeouts</p></li>
<li><p>[BUG] <a class="reference external" href="https://github.com/zrepl/zrepl/issues/81">issue #81</a> <a class="reference external" href="https://github.com/zrepl/zrepl/issues/77">issue #77</a> : handle failed accepts correctly (<code class="docutils literal notranslate"><span class="pre">source</span></code> job)</p></li>
<li><p>[BUG] <a class="reference external" href="https://github.com/zrepl/zrepl/issues/100">issue #100</a>: fix incompatibility with ZoL 0.8</p></li>
<li><p>[FEATURE] <a class="reference external" href="https://github.com/zrepl/zrepl/issues/115">issue #115</a>: logging: configurable syslog facility</p></li>
<li><p>[FEATURE] Systemd unit file in <code class="docutils literal notranslate"><span class="pre">dist/systemd</span></code></p></li>
</ul>
</section>
</section>
<section id="previous-releases">
<h2>Previous Releases<a class="headerlink" href="#previous-releases" title="Link to this heading"></a></h2>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Due to limitations in our documentation system, we only show the changelog since the last release and the time this documentation is built.
For the changelog of previous releases, use the version selection in the hosted version of these docs at <a class="reference external" href="https://zrepl.github.io">zrepl.github.io</a>.</p>
</div>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="pr.html" class="btn btn-neutral float-left" title="Talks & Presentations" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="supporters.html" class="btn btn-neutral float-right" title="Supporters" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>© Copyright 2017-2023, Christian Schwarz.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" data-toggle="rst-versions" role="note" aria-label="versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span class="fa fa-book"> Other Versions</span>
v: stable
<span class="fa fa-caret-down"></span>
</span>
<div class="rst-other-versions">
<dl>
<dt>Tags</dt>
<dd><a href="v0.6.1/changelog.html">v0.6.1</a></dd>
<dd><a href="v0.5.0/changelog.html">v0.5.0</a></dd>
<dd><a href="v0.4.0/changelog.html">v0.4.0</a></dd>
<dd><a href="v0.3.1/changelog.html">v0.3.1</a></dd>
<dd><a href="v0.2.1/changelog.html">v0.2.1</a></dd>
<dd><a href="v0.1.1/changelog.html">v0.1.1</a></dd>
</dl>
<dl>
<dt>Branches</dt>
<dd><a href="changelog.html">stable</a></dd>
<dd><a href="master/changelog.html">master</a></dd>
</dl>
</div>
</div><script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>