| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
These changes aim to avoid the requirement for root privileges when
setting the password of root user on root file system.
The "-R, --root" flag of chpasswd is using chroot to apply changes in
root file system and this requires root privileges. [1]
Instead compute hash of the root password using passlib [2] and insert
the value in the /etc/shadow file in the rootfs.
[1] https://en.wikipedia.org/wiki/Chroot#Limitations
[2] http://passlib.readthedocs.io/en/stable/lib/passlib.hosts.html
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Handle differences between version 1 and 2 of the Manifest file for
Docker registry.
Layers' blob sums in v1 are stored in a list "fsLayers" and the digest
is stored in following filed with name "blobSum". [1]
In v2 the layer list is stored in field with name "layers" and
ordered starting from the base image (opposite order of v1). The digest
is stored under a following field with name "digest". The size in bytes
is included in a field with name "size". [2]
[1] https://docs.docker.com/registry/spec/manifest-v2-1/#manifest-field-descriptions
[2] https://docs.docker.com/registry/spec/manifest-v2-2/#image-manifest-field-descriptions
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Encoded Unicode in Python 3 is represented as binary data. The
difference with Python2 is that any attempt to mix text and data in
Python 3.0 raises TypeError, whereas if you were to mix Unicode and
8-bit strings in Python 2.x, it would work if the 8-bit string happened
to contain only 7-bit (ASCII) bytes, but you would get
UnicodeDecodeError if it contained non-ASCII values.
Reference:
https://docs.python.org/release/3.0.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit
Example:
Python 2:
>>> b'foo.bar'.split('.')
['foo', 'bar']
Python 3:
>>> b'foo.bar'.split('.')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: a bytes-like object is required, not 'str'
>>> b'foo.bar'.split(b'.')
[b'foo', b'bar']
|
|
|
|
|
| |
Perform additional check of the input to avoid unexpected behaviour
when string is passed instead of list or a list with short length.
|
|
|
|
|
|
|
|
|
| |
This change aims to convert URI:
docker:///repository/my_image/
to:
docker://repository/my_image
|
|
|
|
| |
This change makes it easier to test the code.
|
|
|
|
| |
This change makes it easier to test the code.
|
| |
|
|
|
|
|
| |
Remove traling space which occurs when the number is
smaller than kibibyte.
|
|
|
|
|
|
|
|
|
|
|
|
| |
When converting 0 KB with string input the result will be string
with zeroes.
>>> print(size_to_bytes('0', 'KB'))
000000...
Instead convert the string input to integer and then perform the conversion.
Rename the variable from "string" to "number" to avoid confusion.
|
|
|
|
|
| |
Avoid parsing short lines when detecting download progress
from skopeo's output.
|
|
|
|
| |
rename the function to match its counterpart size_to_bytes().
|
|
|
|
|
|
| |
Add new module to collect utility functions used in virt-bootstrap.
Move the function definitions from "sources" and "virt_bootstrap" to
the new module.
|
|
|
|
|
| |
Pass the "not_secure", "username" and "password" values to
"skopeo inspect" when manifest is retrieved.
|
|
|
|
|
|
|
|
|
|
| |
Parse skopeo's output messages to detect and log the donwload
progress for each layer and update the progress of virt-bootstrap.
Example:
virt-bootstrap docker://ubuntu /tmp/foo --status-only
Status: Downloading layer (2/5), Progress: 25.30%
|
|
|
|
|
| |
When this flag is passed only the current state of virt-bootstrap
will be shown along with the total bootstrap progress.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This module is used to store the progress of the bootstrap process and
could be used by other applications to get status of virt-bootstrap as
well as percentage of completion.
Convert some info messages to use this new system for a clean reporting
in client applications.
Example usage:
import virtBootstrap
def show_progress(data):
print("Status: %s, Progress: %.2f"
% (data['status'], data['value']))
virtBootstrap.bootstrap(uri='docker://ubuntu', dest="/tmp/test1",
progress_cb=show_progress)
|
| |
|
|
|
|
|
|
|
|
| |
The checksum verification of downloaded layers is already done in the
method validate_image_layers() or "skopeo copy" [1] [2].
[1] https://github.com/containers/image/blob/master/copy/copy.go#L352
[2] https://github.com/containers/image/blob/master/copy/copy.go#L358
|
|
|
|
|
|
|
|
| |
Do not call "skopeo copy" if layers were downloaded and have valid
hash sum.
Although, "skopeo copy" already does such check for us this change
allow us to control the output and avoids spawning a binary.
|
| |
|
|
|
|
|
|
|
|
|
| |
Improve maintainability by putting layers' digest, sum_type, size and
file_path in a list which is then passed to extract methods. This
change replaces the function get_layer_info().
Reduce the amount of duplicated code by taking out the logging calls
in a method.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Get manifest of Docker image before the calling "skopeo copy" command.
The aim of this change is to:
- Make available method get_image_details() which could be used to
get information about Docker image or detect whether Docker URI is
valid and accessible.
- Get information about the layers before the download process (skopeo
copy) is called.
|
|
|
|
|
| |
Make the method for getting image directory reusable and use instance
variable to store the path where image layers will be stored.
|
|
|
|
|
|
|
|
|
|
|
| |
Decrease the number of instance attributes of class DockerSource.
Since variables "image" and "registry" are only used to create valid
Docker URI they could be used as local variables instead of instance
attributes to improve encapsulation.
Add comments to improve readability.
Fix problem with invalid docker URLs
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Specify explicitly the arguments of bootstrap method.
This change allows to easily bootstrap a container from
another python application when the module virtBootstrap
is imported.
Example:
import virtBootstrap
virtBootstrap.bootstrap(uri="docker://fedora", dest="/tmp/foo")
|
|
|
|
|
|
|
|
|
| |
This allows other python applications to import the virtBootstrap
module and call the bootstrap() method.
Example:
>>> import virtBootstrap
>>> virtBootstrap.bootstrap()
|
| |
|
|
|
|
|
|
| |
This patch aims to set logger name for the virtBootstrap module.
Set logging format to: %(levelname)s: %(message)s
and use an elegant way of setting log level.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Skopeo does not accept "docker:///" as valid URI format. [1]
However, driver URIs within the Libvirt project and virtualization
tools such as libvirt-sandbox use three slashes after URI scheme. [2]
Make virt-bootstrap auto-correct the source URI for consistency with
other tools.
Following the syntax specifications in RFC 1808, "urlparse" recognizes
a netloc only if it is properly introduced by ‘//’. [3] Otherwise the
input is presumed to be a relative URL and thus to start with a path
component. [4]
- "self.image" is the path component
- "self.registry" is the netloc component
[1] https://github.com/projectatomic/skopeo/blob/master/docs/skopeo.1.md#skopeo-copy-1
[2] http://libvirt.org/uri.html
[3] https://docs.python.org/2/library/urlparse.html
[4] https://hg.python.org/cpython/file/2.7/Lib/urlparse.py#l187
|
| |
|
|
|
|
|
|
|
| |
Update logged messages to provide information about the current
state of virt-bootstrap.
E.g "Downloading container image" or "Extracting layer (1/5)"
|
| |
|
| |
|
|
|
|
|
|
| |
Improve readability of logged messages by separating the prefix
from the message with new line and raise CalledProcessError if
the exit code is non-zero.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
These flags aim to control the logging level [1] of virt-bootstrap.
Default = INFO (Confirmation that things are working as expected)
--debug = DEBUG (Detailed information,
typically of interest only when diagnosing problems)
--quiet = WARNING (An indication that something unexpected happened,
or indicative of some problem in the near future)
[1] https://docs.python.org/3/howto/logging.html
|
|
|
|
|
| |
Log executed commands as well as their stdout/stderr
for easier debugging.
|
|
|
|
|
|
|
|
| |
To run the code style checks, run `python setup.py pylint`
Only errors could be reported using the option --errors-only.
Could be useful to run in interactive git rebase
Fix the reported pylint errors as well
|
| |
|
|
|
|
|
| |
Using the header as mentioned in the GPLv3 text avoids rpmlint
to complain about bad FSF address.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Rename "virt-bootstrap.py" to "virt_bootstrap.py" to avoid installation
issues. Reference: https://stackoverflow.com/a/30284007
Install:
$ sudo ./setup.py install
Clean:
$ sudo ./setup.py clean --all
Uninstall:
$ sudo pip uninstall virt-bootstrap
Or:
$ sudo ./setup.py install --record installed_files.txt
$ cat installed_files.txt | xargs sudo rm -rf
|
|
|
|
|
|
|
|
| |
When python is not /usr/bin/python but something else that is still
found by your system, /usr/bin/env still finds it.
:x
Reference:
https://mail.python.org/pipermail/python-list/2012-September/631967.html
|
|
Preparatory commit before setup.py introduction.
|