mirror of
https://github.com/restic/restic.git
synced 2026-02-22 16:56:24 +00:00
Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1a5efcf680 | ||
|
|
d33fe6dd3c | ||
|
|
c8dd95f104 | ||
|
|
7d980b469d | ||
|
|
d863234e3e | ||
|
|
4be45de1c2 | ||
|
|
8c1125fe13 | ||
|
|
0b6ccea461 | ||
|
|
de6135351e | ||
|
|
d47581b25e | ||
|
|
69dec02a14 | ||
|
|
826d880614 | ||
|
|
dbf7ef72b9 | ||
|
|
27ec320eae |
18
.readthedocs.yaml
Normal file
18
.readthedocs.yaml
Normal file
@@ -0,0 +1,18 @@
|
||||
# Read the Docs configuration file
|
||||
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
||||
|
||||
version: 2
|
||||
|
||||
build:
|
||||
os: ubuntu-22.04
|
||||
tools:
|
||||
python: "3.11"
|
||||
|
||||
# Build documentation in the docs/ directory with Sphinx
|
||||
sphinx:
|
||||
configuration: doc/conf.py
|
||||
|
||||
# https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
|
||||
python:
|
||||
install:
|
||||
- requirements: doc/requirements.txt
|
||||
35
CHANGELOG.md
35
CHANGELOG.md
@@ -1,3 +1,36 @@
|
||||
Changelog for restic 0.16.2 (2023-10-29)
|
||||
=======================================
|
||||
|
||||
The following sections list the changes in restic 0.16.2 relevant to
|
||||
restic users. The changes are ordered by importance.
|
||||
|
||||
Summary
|
||||
-------
|
||||
|
||||
* Fix #4540: Restore ARMv5 support for ARM binaries
|
||||
* Fix #4545: Repair documentation build on Read the Docs
|
||||
|
||||
Details
|
||||
-------
|
||||
|
||||
* Bugfix #4540: Restore ARMv5 support for ARM binaries
|
||||
|
||||
The official release binaries for restic 0.16.1 were accidentally built to require ARMv7. The
|
||||
build process is now updated to restore support for ARMv5.
|
||||
|
||||
Please note that restic 0.17.0 will drop support for ARMv5 and require at least ARMv6.
|
||||
|
||||
https://github.com/restic/restic/issues/4540
|
||||
|
||||
* Bugfix #4545: Repair documentation build on Read the Docs
|
||||
|
||||
For restic 0.16.1, no documentation was available at https://restic.readthedocs.io/ .
|
||||
|
||||
The documentation build process is now updated to work again.
|
||||
|
||||
https://github.com/restic/restic/pull/4545
|
||||
|
||||
|
||||
Changelog for restic 0.16.1 (2023-10-24)
|
||||
=======================================
|
||||
|
||||
@@ -1492,7 +1525,7 @@ Details
|
||||
|
||||
Restic did not support limiting the IO concurrency / number of connections for accessing
|
||||
repositories stored using the local or SFTP backends. The number of connections is now limited
|
||||
as for other backends, and can be configured via the the `-o local.connections=2` and `-o
|
||||
as for other backends, and can be configured via the `-o local.connections=2` and `-o
|
||||
sftp.connections=5` options. This ensures that restic does not overwhelm the backend with
|
||||
concurrent IO operations.
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ Enhancement: Allow limiting IO concurrency for local and SFTP backend
|
||||
Restic did not support limiting the IO concurrency / number of connections for
|
||||
accessing repositories stored using the local or SFTP backends. The number of
|
||||
connections is now limited as for other backends, and can be configured via the
|
||||
the `-o local.connections=2` and `-o sftp.connections=5` options. This ensures
|
||||
that restic does not overwhelm the backend with concurrent IO operations.
|
||||
`-o local.connections=2` and `-o sftp.connections=5` options. This ensures that
|
||||
restic does not overwhelm the backend with concurrent IO operations.
|
||||
|
||||
https://github.com/restic/restic/pull/3475
|
||||
|
||||
9
changelog/0.16.2_2023-10-29/issue-4540
Normal file
9
changelog/0.16.2_2023-10-29/issue-4540
Normal file
@@ -0,0 +1,9 @@
|
||||
Bugfix: Restore ARMv5 support for ARM binaries
|
||||
|
||||
The official release binaries for restic 0.16.1 were accidentally built to
|
||||
require ARMv7. The build process is now updated to restore support for ARMv5.
|
||||
|
||||
Please note that restic 0.17.0 will drop support for ARMv5 and require at least
|
||||
ARMv6.
|
||||
|
||||
https://github.com/restic/restic/issues/4540
|
||||
8
changelog/0.16.2_2023-10-29/pull-4545
Normal file
8
changelog/0.16.2_2023-10-29/pull-4545
Normal file
@@ -0,0 +1,8 @@
|
||||
Bugfix: Repair documentation build on Read the Docs
|
||||
|
||||
For restic 0.16.1, no documentation was available at
|
||||
https://restic.readthedocs.io/ .
|
||||
|
||||
The documentation build process is now updated to work again.
|
||||
|
||||
https://github.com/restic/restic/pull/4545
|
||||
@@ -43,7 +43,7 @@ import (
|
||||
"golang.org/x/term"
|
||||
)
|
||||
|
||||
var version = "0.16.1"
|
||||
var version = "0.16.2"
|
||||
|
||||
// TimeFormat is the format used for all timestamps printed by restic.
|
||||
const TimeFormat = "2006-01-02 15:04:05"
|
||||
|
||||
@@ -331,7 +331,7 @@ Wasabi
|
||||
************
|
||||
|
||||
`Wasabi <https://wasabi.com>`__ is a low cost Amazon S3 conformant object storage provider.
|
||||
Due to it's S3 conformance, Wasabi can be used as a storage provider for a restic repository.
|
||||
Due to its S3 conformance, Wasabi can be used as a storage provider for a restic repository.
|
||||
|
||||
- Create a Wasabi bucket using the `Wasabi Console <https://console.wasabisys.com>`__.
|
||||
- Determine the correct Wasabi service URL for your bucket `here <https://wasabi-support.zendesk.com/hc/en-us/articles/360015106031-What-are-the-service-URLs-for-Wasabi-s-different-regions->`__.
|
||||
@@ -822,7 +822,7 @@ To make this work we can employ the help of the ``setgid`` permission bit
|
||||
available on Linux and most other Unix systems. This permission bit makes
|
||||
newly created directories inherit both the group owner (gid) and setgid bit
|
||||
from the parent directory. Setting this bit requires root but since it
|
||||
propagates down to any new directories we only have to do this priviledged
|
||||
propagates down to any new directories we only have to do this privileged
|
||||
setup once:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
@@ -146,7 +146,7 @@ change detection rule based on file metadata to determine whether a file is
|
||||
likely unchanged since a previous backup. If it is, the file is not scanned
|
||||
again.
|
||||
|
||||
The previous backup snapshot, called "parent" snaphot in restic terminology,
|
||||
The previous backup snapshot, called "parent" snapshot in restic terminology,
|
||||
is determined as follows. By default restic groups snapshots by hostname and
|
||||
backup paths, and then selects the latest snapshot in the group that matches
|
||||
the current backup. You can change the selection criteria using the
|
||||
|
||||
@@ -337,7 +337,7 @@ over 5 separate invocations:
|
||||
$ restic -r /srv/restic-repo check --read-data-subset=4/5
|
||||
$ restic -r /srv/restic-repo check --read-data-subset=5/5
|
||||
|
||||
Use ``--read-data-subset=x%`` to check a randomly choosen subset of the
|
||||
Use ``--read-data-subset=x%`` to check a randomly chosen subset of the
|
||||
repository pack files. It takes one parameter, ``x``, the percentage of
|
||||
pack files to check as an integer or floating point number. This will not
|
||||
guarantee to cover all available pack files after sufficient runs, but it is
|
||||
|
||||
@@ -106,7 +106,7 @@ Restic supports storage and preservation of hard links. However, since
|
||||
hard links exist in the scope of a filesystem by definition, restoring
|
||||
hard links from a fuse mount should be done by a program that preserves
|
||||
hard links. A program that does so is ``rsync``, used with the option
|
||||
--hard-links.
|
||||
``--hard-links``.
|
||||
|
||||
.. note:: ``restic mount`` is mostly useful if you want to restore just a few
|
||||
files out of a snapshot, or to check which files are contained in a snapshot.
|
||||
|
||||
30
doc/conf.py
30
doc/conf.py
@@ -12,14 +12,16 @@
|
||||
#
|
||||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
import os
|
||||
|
||||
# -- General configuration ------------------------------------------------
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||
# ones.
|
||||
extensions = ['sphinx.ext.extlinks']
|
||||
extensions = [
|
||||
'sphinx.ext.extlinks',
|
||||
'sphinx_rtd_theme',
|
||||
]
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
@@ -35,7 +37,7 @@ master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = 'restic'
|
||||
copyright = '2018, restic authors'
|
||||
copyright = '2023, restic authors'
|
||||
author = 'fd0'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
@@ -54,7 +56,7 @@ release = version
|
||||
#
|
||||
# This is also used if you do content translation via gettext catalogs.
|
||||
# Usually you set "language" from the command line for these cases.
|
||||
language = None
|
||||
language = "en"
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
@@ -72,21 +74,11 @@ todo_include_todos = False
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
#
|
||||
if os.environ.get('READTHEDOCS') == 'True':
|
||||
html_context = {
|
||||
'css_files': [
|
||||
'https://media.readthedocs.org/css/sphinx_rtd_theme.css',
|
||||
'https://media.readthedocs.org/css/readthedocs-doc-embed.css',
|
||||
'_static/css/restic.css',
|
||||
]
|
||||
}
|
||||
else:
|
||||
# we're not built by rtd => add rtd-theme
|
||||
import sphinx_rtd_theme
|
||||
html_theme = 'sphinx_rtd_theme'
|
||||
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
|
||||
html_style = 'css/restic.css'
|
||||
html_theme = 'sphinx_rtd_theme'
|
||||
|
||||
html_css_files = [
|
||||
'css/restic.css',
|
||||
]
|
||||
|
||||
html_logo = 'logo/logo.png'
|
||||
|
||||
|
||||
@@ -125,6 +125,9 @@ func build(sourceDir, outputDir, goos, goarch string) (filename string) {
|
||||
"GOOS="+goos,
|
||||
"GOARCH="+goarch,
|
||||
)
|
||||
if goarch == "arm" {
|
||||
c.Env = append(c.Env, "GOARM=5")
|
||||
}
|
||||
verbose("run %v %v in %v", "go", c.Args, c.Dir)
|
||||
|
||||
err := c.Run()
|
||||
|
||||
@@ -12,6 +12,10 @@ go_version="$2"
|
||||
|
||||
# invalid if zero
|
||||
is_valid=1
|
||||
set_invalid() {
|
||||
echo $1
|
||||
is_valid=0
|
||||
}
|
||||
|
||||
tmpdir="$(mktemp -d -p .)"
|
||||
cd "${tmpdir}"
|
||||
@@ -41,7 +45,7 @@ for i in $(cat SHA256SUMS | cut -d " " -f 3 ) ; do
|
||||
echo "Downloading $i"
|
||||
curl -OLSs https://github.com/restic/restic/releases/download/v${restic_version}/"$i"
|
||||
done
|
||||
shasum -a256 -c SHA256SUMS || echo "WARNING: RELEASE BINARIES DO NOT MATCH SHA256SUMS!" && is_valid=0
|
||||
shasum -a256 -c SHA256SUMS || set_invalid "WARNING: RELEASE BINARIES DO NOT MATCH SHA256SUMS!"
|
||||
gpg --verify restic-${restic_version}.tar.gz.asc restic-${restic_version}.tar.gz
|
||||
# TODO verify that the release does not contain any unexpected files
|
||||
|
||||
@@ -74,9 +78,9 @@ cp "restic-${restic_version}.tar.gz" output
|
||||
cp SHA256SUMS output
|
||||
|
||||
# check that all release binaries have been reproduced successfully
|
||||
(cd output && shasum -a256 -c SHA256SUMS) || echo "WARNING: REPRODUCED BINARIES DO NOT MATCH RELEASE BINARIES!" && is_valid=0
|
||||
(cd output && shasum -a256 -c SHA256SUMS) || set_invalid "WARNING: REPRODUCED BINARIES DO NOT MATCH RELEASE BINARIES!"
|
||||
# and that the SHA256SUMS files does not miss binaries
|
||||
for i in output/restic* ; do grep "$(basename "$i")" SHA256SUMS > /dev/null || echo "WARNING: $i MISSING FROM RELEASE SHA256SUMS FILE!" && is_valid=0 ; done
|
||||
for i in output/restic* ; do grep "$(basename "$i")" SHA256SUMS > /dev/null || set_invalid "WARNING: $i MISSING FROM RELEASE SHA256SUMS FILE!" ; done
|
||||
|
||||
|
||||
extract_docker() {
|
||||
@@ -95,8 +99,7 @@ extract_docker() {
|
||||
tar -xvf "$i" -C img usr/bin/restic 2> /dev/null 1>&2 || true
|
||||
if [[ -f img/usr/bin/restic ]]; then
|
||||
if [[ -f restic-docker ]]; then
|
||||
echo "WARNING: CONTAINER CONTAINS MULTIPLE RESTIC BINARIES"
|
||||
is_valid=0
|
||||
set_invalid "WARNING: CONTAINER CONTAINS MULTIPLE RESTIC BINARIES"
|
||||
fi
|
||||
mv img/usr/bin/restic restic-docker
|
||||
fi
|
||||
@@ -118,7 +121,7 @@ for img in restic/restic ghcr.io/restic/restic; do
|
||||
extract_docker "$img" 386 386
|
||||
extract_docker "$img" amd64 amd64
|
||||
|
||||
(cd docker && shasum -a256 -c SHA256SUMS) || echo "WARNING: DOCKER CONTAINER DOES NOT CONTAIN RELEASE BINARIES!" && is_valid=0
|
||||
(cd docker && shasum -a256 -c SHA256SUMS) || set_invalid "WARNING: DOCKER CONTAINER DOES NOT CONTAIN RELEASE BINARIES!"
|
||||
|
||||
mv docker docker-$(( ctr++ ))
|
||||
done
|
||||
|
||||
@@ -143,7 +143,7 @@ func (f *openFile) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse.R
|
||||
// the methods being called are responsible for appropriate synchronization.
|
||||
//
|
||||
// However, no lock needed here as getBlobAt can be called conurrently
|
||||
// (blobCache has it's own locking)
|
||||
// (blobCache has its own locking)
|
||||
for i := startContent; remainingBytes > 0 && i < len(f.cumsize)-1; i++ {
|
||||
blob, err := f.getBlobAt(ctx, i)
|
||||
if err != nil {
|
||||
|
||||
@@ -829,7 +829,7 @@ func (r *Repository) List(ctx context.Context, t restic.FileType, fn func(restic
|
||||
}
|
||||
|
||||
// ListPack returns the list of blobs saved in the pack id and the length of
|
||||
// the the pack header.
|
||||
// the pack header.
|
||||
func (r *Repository) ListPack(ctx context.Context, id restic.ID, size int64) ([]restic.Blob, uint32, error) {
|
||||
h := restic.Handle{Type: restic.PackFile, Name: id.String()}
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ type Repository interface {
|
||||
List(ctx context.Context, t FileType, fn func(ID, int64) error) error
|
||||
|
||||
// ListPack returns the list of blobs saved in the pack id and the length of
|
||||
// the the pack header.
|
||||
// the pack header.
|
||||
ListPack(context.Context, ID, int64) ([]Blob, uint32, error)
|
||||
|
||||
LoadBlob(context.Context, BlobType, ID, []byte) ([]byte, error)
|
||||
|
||||
Reference in New Issue
Block a user