mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-09-19 01:44:56 +03:00
Compare commits
81 Commits
v6.6.0-rc1
...
v0.9.6-mai
Author | SHA1 | Date | |
---|---|---|---|
|
610112ba00 | ||
|
be7a5de9d0 | ||
|
86d330daa0 | ||
|
b5a34d96ff | ||
|
bebe5122b9 | ||
|
687c089380 | ||
|
f527b94607 | ||
|
96d4cd58f5 | ||
|
c84053c2ab | ||
|
a1ceef9b42 | ||
|
6cde2d3965 | ||
|
2f809dba2c | ||
|
b50badc5ee | ||
|
85fc04dd1b | ||
|
06e1daac70 | ||
|
fb68e28304 | ||
|
64b8925c37 | ||
|
fcc2893679 | ||
|
b598d0864d | ||
|
2bdc05d1a4 | ||
|
da8ab75e90 | ||
|
a822202d6c | ||
|
c12c765f83 | ||
|
aa041fcef0 | ||
|
0e4efa3d53 | ||
|
26ceca4b02 | ||
|
1a6bad7108 | ||
|
fcf32fc978 | ||
|
0bff012ddc | ||
|
d6f20a2dfa | ||
|
dac6e9a210 | ||
|
b4e9a21c3b | ||
|
8bd5c79224 | ||
|
b0200c81ec | ||
|
8213166b92 | ||
|
3f769afc45 | ||
|
766be49f17 | ||
|
3d8f56d129 | ||
|
f20331c810 | ||
|
0f1bc306d3 | ||
|
4f5f16eea9 | ||
|
24c17ed1ec | ||
|
abf4ab4827 | ||
|
25eeffcb17 | ||
|
96c3c2752e | ||
|
43b7292293 | ||
|
abb78d4ec2 | ||
|
49bc39be66 | ||
|
208d5836c8 | ||
|
5b5b1150cf | ||
|
3cbb1385e9 | ||
|
757316875c | ||
|
a261feba42 | ||
|
cd921a5572 | ||
|
505c99f62e | ||
|
77874a2791 | ||
|
7de869fc03 | ||
|
4e9e178e3c | ||
|
abb78a216c | ||
|
643ac7203a | ||
|
e11aa0262b | ||
|
4744461619 | ||
|
e95df90dbb | ||
|
56fb0c0695 | ||
|
5ede14ef8e | ||
|
f0ba1c096a | ||
|
42419b2891 | ||
|
762801607a | ||
|
d20a6240b3 | ||
|
bf887b8bb5 | ||
|
bf09c64ada | ||
|
dc738b8395 | ||
|
f2b5c5ff22 | ||
|
c6ead37ba1 | ||
|
472e49f558 | ||
|
2ce01ba20f | ||
|
bf540af8b3 | ||
|
fc9a66cfb1 | ||
|
776124e6f0 | ||
|
d20f5421a9 | ||
|
64eadd9a7b |
@@ -1,38 +0,0 @@
|
||||
-I@abs_top_builddir@
|
||||
-I@abs_top_srcdir@
|
||||
-I@abs_top_builddir@/include
|
||||
-I@abs_top_srcdir@/include
|
||||
-I@abs_top_builddir@/src
|
||||
-I@abs_top_srcdir@/src
|
||||
-I@abs_top_builddir@/src/access
|
||||
-I@abs_top_srcdir@/src/access
|
||||
-I@abs_top_builddir@/src/admin
|
||||
-I@abs_top_srcdir@/src/admin
|
||||
-I@abs_top_builddir@/src/bhyve
|
||||
-I@abs_top_srcdir@/src/bhyve
|
||||
-I@abs_top_builddir@/src/conf
|
||||
-I@abs_top_srcdir@/src/conf
|
||||
-I@abs_top_builddir@/src/libxl
|
||||
-I@abs_top_srcdir@/src/libxl
|
||||
-I@abs_top_builddir@/src/locking
|
||||
-I@abs_top_srcdir@/src/locking
|
||||
-I@abs_top_builddir@/src/logging
|
||||
-I@abs_top_srcdir@/src/logging
|
||||
-I@abs_top_builddir@/src/lxc
|
||||
-I@abs_top_srcdir@/src/lxc
|
||||
-I@abs_top_builddir@/src/qemu
|
||||
-I@abs_top_srcdir@/src/qemu
|
||||
-I@abs_top_builddir@/src/remote
|
||||
-I@abs_top_srcdir@/src/remote
|
||||
-I@abs_top_builddir@/src/rpc
|
||||
-I@abs_top_srcdir@/src/rpc
|
||||
-I@abs_top_builddir@/src/secret
|
||||
-I@abs_top_srcdir@/src/secret
|
||||
-I@abs_top_builddir@/src/security
|
||||
-I@abs_top_srcdir@/src/security
|
||||
-I@abs_top_builddir@/src/util
|
||||
-I@abs_top_srcdir@/src/util
|
||||
-I@abs_top_builddir@/src/vmx
|
||||
-I@abs_top_srcdir@/src/vmx
|
||||
-I@abs_top_builddir@/src/xenconfig
|
||||
-I@abs_top_srcdir@/src/xenconfig
|
6
.ctags
6
.ctags
@@ -1,6 +0,0 @@
|
||||
--recurse
|
||||
--exclude=*.orig
|
||||
--exclude=*.html
|
||||
--exclude=*.html.in
|
||||
--langmap=c:+.h.in
|
||||
--c-kinds=+p
|
@@ -1 +0,0 @@
|
||||
../.ctags
|
@@ -1,20 +0,0 @@
|
||||
(
|
||||
(c-mode . (
|
||||
(c-file-style . "K&R")
|
||||
(indent-tabs-mode . nil)
|
||||
(c-indent-level . 4)
|
||||
(c-basic-offset . 4)
|
||||
))
|
||||
(html-mode . (
|
||||
(indent-tabs-mode . nil)
|
||||
))
|
||||
(sh-mode . (
|
||||
(indent-tabs-mode . nil)
|
||||
))
|
||||
(nxml-mode . (
|
||||
(indent-tabs-mode . nil)
|
||||
))
|
||||
(perl-mode . (
|
||||
(indent-tabs-mode . nil)
|
||||
))
|
||||
)
|
@@ -1,21 +0,0 @@
|
||||
# EditorConfig is a file format and collection of text editor plugins
|
||||
# for maintaining consistent coding styles between different editors
|
||||
# and IDEs. Most popular editors support this either natively or via
|
||||
# plugin.
|
||||
#
|
||||
# Check https://editorconfig.org for details.
|
||||
|
||||
root = true
|
||||
|
||||
[*]
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
charset = utf-8
|
||||
|
||||
[*.c]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
[*.{rng,xml}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
38
.github/lockdown.yml
vendored
38
.github/lockdown.yml
vendored
@@ -1,38 +0,0 @@
|
||||
# Configuration for Repo Lockdown - https://github.com/dessant/repo-lockdown
|
||||
|
||||
skipCreatedBefore: 2020-01-01
|
||||
|
||||
# Close issues and pull requests
|
||||
close: true
|
||||
|
||||
# Lock issues and pull requests
|
||||
lock: true
|
||||
|
||||
# Optionally, specify configuration settings just for `issues` or `pulls`
|
||||
issues:
|
||||
comment: |
|
||||
Thank you for your interest in the libvirt project.
|
||||
|
||||
Since this repository is a read-only mirror of the project's master repostory hosted on GitLab, issues opened here are not processed.
|
||||
|
||||
We kindly request that new issues are reported to
|
||||
|
||||
https://gitlab.com/libvirt/libvirt/-/issues/new
|
||||
|
||||
Thank you for your time and understanding.
|
||||
|
||||
pulls:
|
||||
comment: |
|
||||
Thank you for your interest in the libvirt project.
|
||||
|
||||
Since this repository is a read-only mirror of the project's master repostory hosted on GitLab, merge requests opened here are not processed.
|
||||
|
||||
We kindly request that contributors fork the project at
|
||||
|
||||
https://gitlab.com/libvirt/libvirt/
|
||||
|
||||
push changes to the fork, and then open a new merge request at
|
||||
|
||||
https://gitlab.com/libvirt/libvirt/-/merge_requests/new
|
||||
|
||||
Thank you for your time and understanding.
|
113
.gitignore
vendored
113
.gitignore
vendored
@@ -1,40 +1,95 @@
|
||||
# vim related ignores
|
||||
*.swp
|
||||
.lvimrc
|
||||
|
||||
# emacs related ignores
|
||||
*#*#
|
||||
*.#*#
|
||||
.#*
|
||||
*.a
|
||||
*.exe
|
||||
*.gcda
|
||||
*.gcno
|
||||
*.gcov
|
||||
*.la
|
||||
*.lo
|
||||
*.o
|
||||
*.orig
|
||||
*.rej
|
||||
*~
|
||||
|
||||
# autotools related ignores
|
||||
!/m4/virt-*.m4
|
||||
*.cov
|
||||
/AUTHORS
|
||||
.git
|
||||
.git-module-status
|
||||
.lvimrc
|
||||
.sc-start-sc_*
|
||||
/ABOUT-NLS
|
||||
/COPYING
|
||||
/ChangeLog
|
||||
/GNUmakefile
|
||||
/INSTALL
|
||||
/NEWS
|
||||
/aclocal.m4
|
||||
/autom4te.cache
|
||||
/build-aux/compile
|
||||
/build-aux/config.guess
|
||||
/build-aux/config.sub
|
||||
/build-aux/depcomp
|
||||
/build-aux/install-sh
|
||||
/build-aux/ltmain.sh
|
||||
/build-aux/missing
|
||||
/build-aux/test-driver
|
||||
/build-aux
|
||||
/build-aux/
|
||||
/build/
|
||||
/config.cache
|
||||
/config.guess
|
||||
/config.h
|
||||
/config.h.in
|
||||
/config.log
|
||||
/config.rpath
|
||||
/config.status
|
||||
/config.sub
|
||||
/configure
|
||||
/configure.lineno
|
||||
/daemon/*_dispatch.h
|
||||
/docs/apibuild.py.stamp
|
||||
/docs/hvsupport.html.in
|
||||
/docs/libvirt-qemu-*.xml
|
||||
/gnulib/lib/*
|
||||
/gnulib/m4/*
|
||||
/gnulib/tests/*
|
||||
/libtool
|
||||
/libvirt-*.tar.gz
|
||||
/libvirt-[0-9]*
|
||||
/libvirt.pc
|
||||
/libvirt.spec
|
||||
/ltconfig
|
||||
/ltmain.sh
|
||||
/m4/*
|
||||
/maint.mk
|
||||
/mingw32-libvirt.spec
|
||||
/mkinstalldirs
|
||||
/po/*
|
||||
/proxy/
|
||||
/python/generator.py.stamp
|
||||
/python/libvirt-qemu-export.c
|
||||
/python/libvirt-qemu.[ch]
|
||||
/python/libvirt_qemu.py
|
||||
/sc_*
|
||||
/src/hyperv/*.generated.*
|
||||
/src/libvirt_iohelper
|
||||
/src/locking/qemu-sanlock.conf
|
||||
/src/remote/*_client_bodies.h
|
||||
/src/remote/*_protocol.[ch]
|
||||
/src/rpc/virnetprotocol.[ch]
|
||||
/src/util/virkeymaps.h
|
||||
/tests/*.log
|
||||
/tests/cputest
|
||||
/tests/hashtest
|
||||
/tests/jsontest
|
||||
/tests/networkxml2argvtest
|
||||
/tests/nwfilterxml2xmltest
|
||||
/tests/openvzutilstest
|
||||
/tests/shunloadtest
|
||||
/update.log
|
||||
Makefile
|
||||
Makefile.in
|
||||
|
||||
# git related ignores
|
||||
*.rej
|
||||
*.orig
|
||||
.git-module-status
|
||||
|
||||
# libvirt related ignores
|
||||
/build/
|
||||
/ci/scratch/
|
||||
tags
|
||||
TAGS
|
||||
coverage
|
||||
cscope.files
|
||||
cscope.out
|
||||
results.log
|
||||
stamp-h
|
||||
stamp-h.in
|
||||
stamp-h1
|
||||
!/gnulib/lib/Makefile.am
|
||||
!/gnulib/tests/Makefile.am
|
||||
!/m4/virt-*.m4
|
||||
!/po/*.po
|
||||
!/po/POTFILES.in
|
||||
!/po/libvirt.pot
|
||||
|
489
.gitlab-ci.yml
489
.gitlab-ci.yml
@@ -1,489 +0,0 @@
|
||||
variables:
|
||||
GIT_DEPTH: 100
|
||||
|
||||
stages:
|
||||
- sanity_checks
|
||||
- containers
|
||||
- builds
|
||||
|
||||
.script_variables: &script_variables |
|
||||
export MAKEFLAGS="-j$(getconf _NPROCESSORS_ONLN)"
|
||||
export CCACHE_BASEDIR="$(pwd)"
|
||||
export CCACHE_DIR="$CCACHE_BASEDIR/ccache"
|
||||
export CCACHE_MAXSIZE="500M"
|
||||
export PATH="$CCACHE_WRAPPERSDIR:$PATH"
|
||||
|
||||
# Common templates
|
||||
|
||||
.container_job_template: &container_job_definition
|
||||
image: docker:stable
|
||||
stage: containers
|
||||
services:
|
||||
- docker:dind
|
||||
before_script:
|
||||
- export TAG="$CI_REGISTRY_IMAGE/ci-$NAME:latest"
|
||||
- export COMMON_TAG="$CI_REGISTRY/libvirt/libvirt/ci-$NAME:latest"
|
||||
- docker info
|
||||
- docker login registry.gitlab.com -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD"
|
||||
script:
|
||||
- docker pull "$TAG" || docker pull "$COMMON_TAG" || true
|
||||
- docker build --cache-from "$TAG" --cache-from "$COMMON_TAG" --tag "$TAG" -f "ci/containers/libvirt-$NAME.Dockerfile" ci/containers
|
||||
- docker push "$TAG"
|
||||
after_script:
|
||||
- docker logout
|
||||
|
||||
# We build many containers which can be useful to debug problems but are not
|
||||
# needed for the pipeline itself to complete: those sometimes fail, and when
|
||||
# that happens it's mostly because of temporary issues with Debian sid. We
|
||||
# don't want those failures to affect the overall pipeline status
|
||||
.container_optional_job_template: &container_optional_job_definition
|
||||
<<: *container_job_definition
|
||||
allow_failure: true
|
||||
|
||||
.native_build_job_template: &native_build_job_definition
|
||||
stage: builds
|
||||
image: $CI_REGISTRY_IMAGE/ci-$NAME:latest
|
||||
cache:
|
||||
paths:
|
||||
- ccache/
|
||||
key: "$CI_JOB_NAME"
|
||||
before_script:
|
||||
- *script_variables
|
||||
script:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- ../autogen.sh || (cat config.log && exit 1)
|
||||
- $MAKE distcheck
|
||||
|
||||
# Jobs that we delegate to Cirrus CI because they require an operating
|
||||
# system other than Linux. These jobs will only run if the required
|
||||
# setup has been performed on the GitLab account (see ci/README.rst).
|
||||
#
|
||||
# The Cirrus CI configuration is generated by replacing target-specific
|
||||
# variables in a generic template: some of these variables are provided
|
||||
# when the GitLab CI job is defined, others are taken from a shell
|
||||
# snippet generated using lcitool.
|
||||
#
|
||||
# Note that the $PATH environment variable has to be treated with
|
||||
# special care, because we can't just override it at the GitLab CI job
|
||||
# definition level or we risk breaking it completely.
|
||||
.cirrus_build_job_template: &cirrus_build_job_definition
|
||||
stage: builds
|
||||
image: registry.gitlab.com/libvirt/libvirt-ci/cirrus-run:master
|
||||
script:
|
||||
- source ci/cirrus/libvirt-$NAME.vars
|
||||
- sed -e "s|[@]CI_REPOSITORY_URL@|$CI_REPOSITORY_URL|g"
|
||||
-e "s|[@]CI_COMMIT_REF_NAME@|$CI_COMMIT_REF_NAME|g"
|
||||
-e "s|[@]CI_COMMIT_SHA@|$CI_COMMIT_SHA|g"
|
||||
-e "s|[@]CIRRUS_VM_INSTANCE_TYPE@|$CIRRUS_VM_INSTANCE_TYPE|g"
|
||||
-e "s|[@]CIRRUS_VM_IMAGE_SELECTOR@|$CIRRUS_VM_IMAGE_SELECTOR|g"
|
||||
-e "s|[@]CIRRUS_VM_IMAGE_NAME@|$CIRRUS_VM_IMAGE_NAME|g"
|
||||
-e "s|[@]INSTALL_COMMAND@|$INSTALL_COMMAND|g"
|
||||
-e "s|[@]PATH@|$PATH_EXTRA${PATH_EXTRA:+:}\$PATH|g"
|
||||
-e "s|[@]PKG_CONFIG_PATH@|$PKG_CONFIG_PATH|g"
|
||||
-e "s|[@]PKGS@|$PKGS|g"
|
||||
-e "s|[@]MAKE@|$MAKE|g"
|
||||
-e "s|[@]PYTHON@|$PYTHON|g"
|
||||
<ci/cirrus/build.yml >ci/cirrus/$NAME.yml
|
||||
- cat ci/cirrus/$NAME.yml
|
||||
- cirrus-run ci/cirrus/$NAME.yml
|
||||
only:
|
||||
variables:
|
||||
- $CIRRUS_GITHUB_REPO
|
||||
- $CIRRUS_API_TOKEN
|
||||
|
||||
.cross_build_default_job_template: &cross_build_job_definition
|
||||
stage: builds
|
||||
image: $CI_REGISTRY_IMAGE/ci-$NAME-cross-$CROSS:latest
|
||||
cache:
|
||||
paths:
|
||||
- ccache/
|
||||
key: "$CI_JOB_NAME"
|
||||
before_script:
|
||||
- *script_variables
|
||||
script:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- ../autogen.sh $CONFIGURE_OPTS || (cat config.log && exit 1)
|
||||
- $MAKE
|
||||
|
||||
|
||||
# Native container build jobs
|
||||
|
||||
x64-centos-7-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: centos-7
|
||||
|
||||
x64-centos-8-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: centos-8
|
||||
|
||||
x64-centos-stream-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: centos-stream
|
||||
|
||||
x64-debian-10-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: debian-10
|
||||
|
||||
x64-debian-sid-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: debian-sid
|
||||
|
||||
x64-fedora-31-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: fedora-31
|
||||
|
||||
x64-fedora-32-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: fedora-32
|
||||
|
||||
x64-fedora-rawhide-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: fedora-rawhide
|
||||
|
||||
x64-opensuse-151-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: opensuse-151
|
||||
|
||||
x64-ubuntu-1804-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: ubuntu-1804
|
||||
|
||||
x64-ubuntu-2004-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: ubuntu-2004
|
||||
|
||||
|
||||
# Cross-build containers build jobs
|
||||
|
||||
aarch64-debian-10-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: debian-10-cross-aarch64
|
||||
|
||||
armv6l-debian-10-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: debian-10-cross-armv6l
|
||||
|
||||
armv7-ldebian-10-container:
|
||||
<<: *container_optional_job_definition
|
||||
variables:
|
||||
NAME: debian-10-cross-armv7l
|
||||
|
||||
i686-debian-10-container:
|
||||
<<: *container_optional_job_definition
|
||||
variables:
|
||||
NAME: debian-10-cross-i686
|
||||
|
||||
mips-debian-10-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: debian-10-cross-mips
|
||||
|
||||
mips64el-debian-10-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: debian-10-cross-mips64el
|
||||
|
||||
mipsel-debian-10-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: debian-10-cross-mipsel
|
||||
|
||||
ppc64le-debian-10-container:
|
||||
<<: *container_optional_job_definition
|
||||
variables:
|
||||
NAME: debian-10-cross-ppc64le
|
||||
|
||||
s390x-debian-10-container:
|
||||
<<: *container_optional_job_definition
|
||||
variables:
|
||||
NAME: debian-10-cross-s390x
|
||||
|
||||
aarch64-debian-sid-container:
|
||||
<<: *container_optional_job_definition
|
||||
variables:
|
||||
NAME: debian-sid-cross-aarch64
|
||||
|
||||
armv6l-debian-sid-container:
|
||||
<<: *container_optional_job_definition
|
||||
variables:
|
||||
NAME: debian-sid-cross-armv6l
|
||||
|
||||
armv7-ldebian-sid-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: debian-sid-cross-armv7l
|
||||
|
||||
i686-debian-sid-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: debian-sid-cross-i686
|
||||
|
||||
mips64el-debian-sid-container:
|
||||
<<: *container_optional_job_definition
|
||||
variables:
|
||||
NAME: debian-sid-cross-mips64el
|
||||
|
||||
mipsel-debian-sid-container:
|
||||
<<: *container_optional_job_definition
|
||||
variables:
|
||||
NAME: debian-sid-cross-mipsel
|
||||
|
||||
ppc64le-debian-sid-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: debian-sid-cross-ppc64le
|
||||
|
||||
s390x-debian-sid-container:
|
||||
<<: *container_optional_job_definition
|
||||
variables:
|
||||
NAME: debian-sid-cross-s390x
|
||||
|
||||
mingw32-fedora-rawhide-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: fedora-rawhide-cross-mingw32
|
||||
|
||||
mingw64-fedora-rawhide-container:
|
||||
<<: *container_job_definition
|
||||
variables:
|
||||
NAME: fedora-rawhide-cross-mingw64
|
||||
|
||||
|
||||
# Native architecture build + test jobs
|
||||
|
||||
x64-debian-10:
|
||||
<<: *native_build_job_definition
|
||||
variables:
|
||||
NAME: debian-10
|
||||
|
||||
x64-debian-sid:
|
||||
<<: *native_build_job_definition
|
||||
variables:
|
||||
NAME: debian-sid
|
||||
|
||||
x64-centos-7:
|
||||
<<: *native_build_job_definition
|
||||
variables:
|
||||
NAME: centos-7
|
||||
|
||||
x64-centos-8:
|
||||
<<: *native_build_job_definition
|
||||
variables:
|
||||
NAME: centos-8
|
||||
|
||||
x64-centos-stream:
|
||||
<<: *native_build_job_definition
|
||||
variables:
|
||||
NAME: centos-stream
|
||||
|
||||
x64-fedora-31:
|
||||
<<: *native_build_job_definition
|
||||
variables:
|
||||
NAME: fedora-31
|
||||
|
||||
x64-fedora-32:
|
||||
<<: *native_build_job_definition
|
||||
variables:
|
||||
NAME: fedora-32
|
||||
|
||||
x64-fedora-rawhide:
|
||||
<<: *native_build_job_definition
|
||||
variables:
|
||||
NAME: fedora-rawhide
|
||||
|
||||
x64-opensuse-151:
|
||||
<<: *native_build_job_definition
|
||||
variables:
|
||||
NAME: opensuse-151
|
||||
|
||||
x64-ubuntu-1804:
|
||||
<<: *native_build_job_definition
|
||||
variables:
|
||||
NAME: ubuntu-1804
|
||||
|
||||
x64-ubuntu-2004:
|
||||
<<: *native_build_job_definition
|
||||
variables:
|
||||
NAME: ubuntu-2004
|
||||
|
||||
x64-freebsd-12-build:
|
||||
<<: *cirrus_build_job_definition
|
||||
variables:
|
||||
NAME: freebsd-12
|
||||
CIRRUS_VM_INSTANCE_TYPE: freebsd_instance
|
||||
CIRRUS_VM_IMAGE_SELECTOR: image_family
|
||||
CIRRUS_VM_IMAGE_NAME: freebsd-12-1
|
||||
INSTALL_COMMAND: pkg install -y
|
||||
|
||||
x64-macos-1015-build:
|
||||
<<: *cirrus_build_job_definition
|
||||
variables:
|
||||
NAME: macos-1015
|
||||
CIRRUS_VM_INSTANCE_TYPE: osx_instance
|
||||
CIRRUS_VM_IMAGE_SELECTOR: image
|
||||
CIRRUS_VM_IMAGE_NAME: catalina-base
|
||||
INSTALL_COMMAND: brew install
|
||||
PATH_EXTRA: /usr/local/opt/ccache/libexec:/usr/local/opt/gettext/bin:/usr/local/opt/libpcap/bin:/usr/local/opt/libxslt/bin:/usr/local/opt/rpcgen/bin
|
||||
PKG_CONFIG_PATH: /usr/local/opt/curl/lib/pkgconfig:/usr/local/opt/libpcap/lib/pkgconfig:/usr/local/opt/libxml2/lib/pkgconfig:/usr/local/opt/ncurses/lib/pkgconfig:/usr/local/opt/readline/lib/pkgconfig
|
||||
|
||||
|
||||
# Cross compiled build jobs
|
||||
|
||||
armv6l-debian-10:
|
||||
<<: *cross_build_job_definition
|
||||
variables:
|
||||
NAME: debian-10
|
||||
CROSS: armv6l
|
||||
|
||||
mips64el-debian-10:
|
||||
<<: *cross_build_job_definition
|
||||
variables:
|
||||
NAME: debian-10
|
||||
CROSS: mips64el
|
||||
|
||||
mips-debian-10:
|
||||
<<: *cross_build_job_definition
|
||||
variables:
|
||||
NAME: debian-10
|
||||
CROSS: mips
|
||||
|
||||
aarch64-debian-10:
|
||||
<<: *cross_build_job_definition
|
||||
variables:
|
||||
NAME: debian-10
|
||||
CROSS: aarch64
|
||||
|
||||
mipsel-debian-10:
|
||||
<<: *cross_build_job_definition
|
||||
variables:
|
||||
NAME: debian-10
|
||||
CROSS: mipsel
|
||||
|
||||
s390x-debian-sid:
|
||||
<<: *cross_build_job_definition
|
||||
variables:
|
||||
NAME: debian-sid
|
||||
CROSS: s390x
|
||||
|
||||
armv7l-debian-sid:
|
||||
<<: *cross_build_job_definition
|
||||
variables:
|
||||
NAME: debian-sid
|
||||
CROSS: armv7l
|
||||
|
||||
i686-debian-sid:
|
||||
<<: *cross_build_job_definition
|
||||
variables:
|
||||
NAME: debian-sid
|
||||
CROSS: i686
|
||||
|
||||
ppc64le-debian-sid:
|
||||
<<: *cross_build_job_definition
|
||||
variables:
|
||||
NAME: debian-sid
|
||||
CROSS: ppc64le
|
||||
|
||||
mingw32-fedora-rawhide:
|
||||
<<: *cross_build_job_definition
|
||||
variables:
|
||||
NAME: fedora-rawhide
|
||||
CROSS: mingw32
|
||||
|
||||
mingw64-fedora-rawhide:
|
||||
<<: *cross_build_job_definition
|
||||
variables:
|
||||
NAME: fedora-rawhide
|
||||
CROSS: mingw64
|
||||
|
||||
|
||||
# This artifact published by this job is downloaded by libvirt.org to
|
||||
# be deployed to the web root:
|
||||
# https://gitlab.com/libvirt/libvirt/-/jobs/artifacts/master/download?job=website
|
||||
website:
|
||||
stage: builds
|
||||
image: $CI_REGISTRY_IMAGE/ci-centos-8:latest
|
||||
before_script:
|
||||
- *script_variables
|
||||
script:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- ../autogen.sh --prefix=$(pwd)/../vroot || (cat config.log && exit 1)
|
||||
- $MAKE -C docs
|
||||
- $MAKE -C docs install
|
||||
- cd ..
|
||||
- mv vroot/share/doc/libvirt/html/ website
|
||||
artifacts:
|
||||
expose_as: 'Website'
|
||||
name: 'website'
|
||||
when: on_success
|
||||
expire_in: 30 days
|
||||
paths:
|
||||
- website
|
||||
|
||||
|
||||
codestyle:
|
||||
stage: builds
|
||||
image: $CI_REGISTRY_IMAGE/ci-opensuse-151:latest
|
||||
before_script:
|
||||
- *script_variables
|
||||
script:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- ../autogen.sh || (cat config.log && exit 1)
|
||||
- $MAKE syntax-check
|
||||
|
||||
|
||||
# This artifact published by this job is downloaded to push to Weblate
|
||||
# for translation usage:
|
||||
# https://gitlab.com/libvirt/libvirt/-/jobs/artifacts/master/download?job=potfile
|
||||
potfile:
|
||||
stage: builds
|
||||
image: $CI_REGISTRY_IMAGE/ci-centos-8:latest
|
||||
only:
|
||||
- master
|
||||
before_script:
|
||||
- *script_variables
|
||||
script:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- ../autogen.sh || (cat config.log && exit 1)
|
||||
- $MAKE -C src generated-sources
|
||||
- $MAKE -C po libvirt.pot
|
||||
- cd ..
|
||||
- cp po/libvirt.pot libvirt.pot
|
||||
artifacts:
|
||||
expose_as: 'Potfile'
|
||||
name: 'potfile'
|
||||
when: on_success
|
||||
expire_in: 30 days
|
||||
paths:
|
||||
- libvirt.pot
|
||||
|
||||
|
||||
# Check that all commits are signed-off for the DCO.
|
||||
# Skip on "libvirt" namespace, since we only need to run
|
||||
# this test on developer's personal forks from which
|
||||
# merge requests are submitted
|
||||
check-dco:
|
||||
stage: sanity_checks
|
||||
image: registry.gitlab.com/libvirt/libvirt-ci/check-dco:master
|
||||
script:
|
||||
- /check-dco
|
||||
except:
|
||||
variables:
|
||||
- $CI_PROJECT_NAMESPACE == 'libvirt'
|
6
.gitmodules
vendored
6
.gitmodules
vendored
@@ -1,3 +1,3 @@
|
||||
[submodule "keycodemapdb"]
|
||||
path = src/keycodemapdb
|
||||
url = https://gitlab.com/keycodemap/keycodemapdb.git
|
||||
[submodule "gnulib"]
|
||||
path = .gnulib
|
||||
url = git://git.sv.gnu.org/gnulib.git
|
||||
|
@@ -1,4 +0,0 @@
|
||||
[gitpublishprofile "default"]
|
||||
base = master
|
||||
to = libvir-list@redhat.com
|
||||
prefix = libvirt PATCH
|
79
.mailmap
79
.mailmap
@@ -1,79 +0,0 @@
|
||||
# 'git shortlog --help' and look for mailmap for the format of each line
|
||||
|
||||
# Email consolidation:
|
||||
# <Preferred address in AUTHORS> <other alias used by same author>
|
||||
|
||||
<bozzolan@gmail.com> <redshift@gmx.com>
|
||||
<charles_duffy@messageone.com> <charles@dyfis.net>
|
||||
<claudio.bley@gmail.com> <cbley@av-test.de>
|
||||
<dfj@redhat.com> <dfj@dfj.bne.redhat.com>
|
||||
<dpkshetty@gmail.com> <deepakcs@linux.vnet.ibm.com>
|
||||
<dpkshetty@gmail.com> <deepakcs@redhat.com>
|
||||
<eblake@redhat.com> <ebb9@byu.net>
|
||||
<gdolley@arpnetworks.com> <gdolley@ucla.edu>
|
||||
<gerhard.stenzel@de.ibm.com> <gstenzel@linux.vnet.ibm.com>
|
||||
<jamie@canonical.com> <jamie@ubuntu.com>
|
||||
<laine@redhat.com> <laine@laine.org>
|
||||
<meyering@redhat.com> <jim@meyering.net>
|
||||
<socketpair@gmail.com> <socketpair gmail com>
|
||||
<soren@linux2go.dk> <soren@ubuntu.com>
|
||||
<jfehlig@suse.com> <jfehlig@novell.com>
|
||||
<jfehlig@suse.com> <jfehlig@linux-ypgk.site>
|
||||
<jclift@redhat.com> <justin@salasaga.org>
|
||||
<soren@linux2go.dk> <soren@canonical.com>
|
||||
<cfergeau@redhat.com> <teuf@gnome.org>
|
||||
<wency@cn.fujitsu.com> <wency cn fujitsu com>
|
||||
<cardoe@cardoe.com> <cardoe@gentoo.org>
|
||||
<fsimonce@redhat.com> <federico.simoncelli@gmail.com>
|
||||
<marcandre.lureau@redhat.com> <marcandre.lureau@gmail.com>
|
||||
<supriyak@linux.vnet.ibm.com> <supriyak@in.ibm.com>
|
||||
<neil@aldur.co.uk> <neil@brightbox.co.uk>
|
||||
<stefanb@us.ibm.com> <stefanb@linux.vnet.ibm.com>
|
||||
<stefanb@us.ibm.com> <stefannb@linux.vnet.ibm.com>
|
||||
<josh.durgin@inktank.com> <joshd@hq.newdream.net>
|
||||
<josh.durgin@inktank.com> <josh.durgin@dreamhost.com>
|
||||
<gerd@egidy.de> <lists@egidy.de>
|
||||
<gerd@egidy.de> <gerd.von.egidy@intra2net.com>
|
||||
<benoar@dolka.fr> <benjamin.cama@telecom-bretagne.eu>
|
||||
<zhlcindy@linux.vnet.ibm.com> <zhlcindy@gmail.com>
|
||||
<serge.hallyn@canonical.com> <serue@us.ibm.com>
|
||||
<pritesh.kothari@sun.com> <Pritesh.Kothari@Sun.COM>
|
||||
<cbosdonnat@suse.com> <cedric.bosdonnat@free.fr>
|
||||
<mnestratov@virtuozzo.com> <mnestratov@parallels.com>
|
||||
<nshirokovskiy@virtuozzo.com> <nshirokovskiy@parallels.com>
|
||||
<jyang@redhat.com> <osier@yunify.com>
|
||||
<kkoukiou@redhat.com> <k.koukiou@googlemail.com>
|
||||
<intrigeri@boum.org> <intrigeri+libvirt@boum.org>
|
||||
<fidencio@redhat.com> <fabiano@fidencio.org>
|
||||
<shi_lei@massclouds.com> <shilei.massclouds@gmx.com>
|
||||
<adrian.brzezinski@eo.pl> <redhat@adrb.pl>
|
||||
|
||||
# Name consolidation:
|
||||
# Preferred author spelling <preferred email>
|
||||
Alex Jia <ajia@redhat.com>
|
||||
Royce Lv <lvroyce@linux.vnet.ibm.com>
|
||||
Daniel J Walsh <dwalsh@redhat.com>
|
||||
Ján Tomko <jtomko@redhat.com>
|
||||
Gerd von Egidy <gerd@egidy.de>
|
||||
MATSUDA Daiki <matsudadik@intellilink.co.jp>
|
||||
Tang Chen <tangchen@cn.fujitsu.com>
|
||||
Peng Zhou <ailvpeng25@gmail.com>
|
||||
Dirk Herrendoerfer <d.herrendoerfer@herrendoerfer.name>
|
||||
Thibault VINCENT <thibault.vincent@smartjog.com>
|
||||
Aurelien Rougemont <beorn@binaries.fr>
|
||||
Serge E. Hallyn <serge.hallyn@canonical.com>
|
||||
Henrik Persson E <henrik.e.persson@ericsson.com>
|
||||
Philipp Hahn <hahn@univention.de>
|
||||
Pritesh Kothari <pritesh.kothari@sun.com>
|
||||
Wang Yufei (James) <james.wangyufei@huawei.com>
|
||||
Deepak C Shetty <dpkshetty@gmail.com>
|
||||
Dave Allan <dallan@redhat.com>
|
||||
Richard W.M. Jones <rjones@redhat.com>
|
||||
|
||||
# Non-trivial consolidation:
|
||||
# see git documentation for information about the format
|
||||
Daniel P. Berrangé <berrange@redhat.com>
|
||||
Daniel P. Berrangé <berrange@redhat.com> <dan@berrange.com>
|
||||
Michal Prívozník <mprivozn@redhat.com>
|
||||
Michal Prívozník <mprivozn@redhat.com> <miso.privoznik@gmail.com>
|
||||
Marco Bozzolan <bozzolan@gmail.com> <redshift@gmx.com>
|
@@ -1,43 +0,0 @@
|
||||
flags = [
|
||||
'-I@abs_top_builddir@',
|
||||
'-I@abs_top_srcdir@',
|
||||
'-I@abs_top_builddir@/include',
|
||||
'-I@abs_top_srcdir@/include',
|
||||
'-I@abs_top_builddir@/src',
|
||||
'-I@abs_top_srcdir@/src',
|
||||
'-I@abs_top_builddir@/src/access',
|
||||
'-I@abs_top_srcdir@/src/access',
|
||||
'-I@abs_top_builddir@/src/admin',
|
||||
'-I@abs_top_srcdir@/src/admin',
|
||||
'-I@abs_top_builddir@/src/bhyve',
|
||||
'-I@abs_top_srcdir@/src/bhyve',
|
||||
'-I@abs_top_builddir@/src/conf',
|
||||
'-I@abs_top_srcdir@/src/conf',
|
||||
'-I@abs_top_builddir@/src/libxl',
|
||||
'-I@abs_top_srcdir@/src/libxl',
|
||||
'-I@abs_top_builddir@/src/locking',
|
||||
'-I@abs_top_srcdir@/src/locking',
|
||||
'-I@abs_top_builddir@/src/logging',
|
||||
'-I@abs_top_srcdir@/src/logging',
|
||||
'-I@abs_top_builddir@/src/lxc',
|
||||
'-I@abs_top_srcdir@/src/lxc',
|
||||
'-I@abs_top_builddir@/src/qemu',
|
||||
'-I@abs_top_srcdir@/src/qemu',
|
||||
'-I@abs_top_builddir@/src/remote',
|
||||
'-I@abs_top_srcdir@/src/remote',
|
||||
'-I@abs_top_builddir@/src/rpc',
|
||||
'-I@abs_top_srcdir@/src/rpc',
|
||||
'-I@abs_top_builddir@/src/secret',
|
||||
'-I@abs_top_srcdir@/src/secret',
|
||||
'-I@abs_top_builddir@/src/security',
|
||||
'-I@abs_top_srcdir@/src/security',
|
||||
'-I@abs_top_builddir@/src/util',
|
||||
'-I@abs_top_srcdir@/src/util',
|
||||
'-I@abs_top_builddir@/src/vmx',
|
||||
'-I@abs_top_srcdir@/src/vmx',
|
||||
'-I@abs_top_builddir@/src/xenconfig',
|
||||
'-I@abs_top_srcdir@/src/xenconfig',
|
||||
]
|
||||
|
||||
def FlagsForFile(filename, **kwargs):
|
||||
return { 'flags': flags, 'do_cache': True }
|
103
AUTHORS.in
103
AUTHORS.in
@@ -1,103 +0,0 @@
|
||||
libvirt Authors
|
||||
===============
|
||||
|
||||
The libvirt project was initiated by:
|
||||
|
||||
Daniel Veillard <veillard@redhat.com> or <daniel@veillard.com>
|
||||
|
||||
The primary maintainers and people with commit access rights:
|
||||
|
||||
Andrea Bolognani <abologna@redhat.com>
|
||||
Cédric Bosdonnat <cbosdonnat@suse.com>
|
||||
Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Christophe Fergeau <cfergeau@redhat.com>
|
||||
Cole Robinson <crobinso@redhat.com>
|
||||
Daniel P. Berrangé <berrange@redhat.com>
|
||||
Daniel Veillard <veillard@redhat.com>
|
||||
Eric Blake <eblake@redhat.com>
|
||||
Erik Skultety <eskultet@redhat.com>
|
||||
Fabiano Fidêncio <fidencio@redhat.com>
|
||||
Guido Günther <agx@sigxcpu.org>
|
||||
Ján Tomko <jtomko@redhat.com>
|
||||
Jim Fehlig <jfehlig@suse.com>
|
||||
Jiří Denemark <jdenemar@redhat.com>
|
||||
Laine Stump <laine@redhat.com>
|
||||
Martin Kletzander <mkletzan@redhat.com>
|
||||
Michal Prívozník <mprivozn@redhat.com>
|
||||
Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
|
||||
Pavel Hrdina <phrdina@redhat.com>
|
||||
Peter Krempa <pkrempa@redhat.com>
|
||||
Pino Toscano <ptoscano@redhat.com>
|
||||
Richard W.M. Jones <rjones@redhat.com>
|
||||
Roman Bogorodskiy <bogorodskiy@gmail.com>
|
||||
|
||||
Previous maintainers:
|
||||
|
||||
Alex Jia <ajia@redhat.com>
|
||||
Anthony Liguori <aliguori@us.ibm.com>
|
||||
Atsushi SAKAI <sakaia@jp.fujitsu.com>
|
||||
Chris Lalancette <clalance@redhat.com>
|
||||
Claudio Bley <claudio.bley@gmail.com>
|
||||
Dan Smith <danms@us.ibm.com>
|
||||
Dave Allan <dallan@redhat.com>
|
||||
Dave Leskovec <dlesko@linux.vnet.ibm.com>
|
||||
Dmitry Guryanov <dguryanov@parallels.com>
|
||||
Doug Goldstein <cardoe@gentoo.org>
|
||||
Gao Feng <gaofeng@cn.fujitsu.com>
|
||||
Guannan Ren <gren@redhat.com>
|
||||
Jim Meyering <meyering@redhat.com>
|
||||
John Ferlan <jferlan@redhat.com>
|
||||
John Levon <john.levon@sun.com>
|
||||
Justin Clift <jclift@redhat.com>
|
||||
Karel Zak <kzak@redhat.com>
|
||||
Katerina Koukiou <kkoukiou@redhat.com>
|
||||
Mark McLoughlin <markmc@redhat.com>
|
||||
Matthias Bolte <matthias.bolte@googlemail.com>
|
||||
Maxim Nestratov <mnestratov@virtuozzo.com>
|
||||
Osier Yang <jyang@redhat.com>
|
||||
Stefan Berger <stefanb@us.ibm.com>
|
||||
Wen Congyang <wency@cn.fujitsu.com>
|
||||
|
||||
Patches have also been contributed by:
|
||||
|
||||
Abel Míguez Rodríguez <amiguezr@pdi.ucm.es>
|
||||
Amit Shah <amit.shah@redhat.com>
|
||||
Andrew Puch <apuch@redhat.com>
|
||||
Anton Protopopov <aspsk2@gmail.com>
|
||||
Ben Guthro <ben.guthro@gmail.com>
|
||||
Daniel Hokka Zakrisson <daniel@hozac.com>
|
||||
Dan Wendlandt <dan@nicira.com>
|
||||
David Lively <dlively@virtualiron.com>
|
||||
David Lutterkort <dlutter@redhat.com>
|
||||
Evgeniy Sokolov <evg@openvz.org>
|
||||
Hugh Brock <hbrock@redhat.com>
|
||||
Itamar Heim <iheim@redhat.com>
|
||||
James Morris <jmorris@namei.org>
|
||||
Javier Fontan <jfontan@gmail.com>
|
||||
Jeremy Katz <katzj@redhat.com>
|
||||
Kaitlin Rupert <kaitlin@linux.vnet.ibm.com>
|
||||
Kazuki Mizushima <mizushima.kazuk@jp.fujitsu.com>
|
||||
Mads Chr. Olesen <shiyee@shiyee.dk>
|
||||
Mark Johnson <johnson.nh@gmail.com>
|
||||
Markus Armbruster <armbru@redhat.com>
|
||||
Masayuki Sunou <fj1826dm@aa.jp.fujitsu.com>
|
||||
Matthias Witte <witte@netzquadrat.de>
|
||||
Michel Ponceau <michel.ponceau@bull.net>
|
||||
Nobuhiro Itou <fj0873gn@aa.jp.fujitsu.com>
|
||||
Pete Vetere <pvetere@redhat.com>
|
||||
Philippe Berthault <philippe.berthault@Bull.net>
|
||||
Saori Fukuta <fukuta.saori@jp.fujitsu.com>
|
||||
Shigeki Sakamoto <fj0588di@aa.jp.fujitsu.com>
|
||||
Shuveb Hussain <shuveb@binarykarma.com>
|
||||
Stefan de Konink <dekonink@kinkrsoftware.nl>
|
||||
Takahashi Tomohiro <takatom@jp.fujitsu.com>
|
||||
Tatsuro Enokura <fj7716hz@aa.jp.fujitsu.com>
|
||||
|
||||
#contributorslist#
|
||||
|
||||
The libvirt logo was designed by Diana Fong
|
||||
|
||||
-- End
|
||||
;; Local Variables:
|
||||
;; coding: utf-8
|
||||
;; End:
|
@@ -1,46 +0,0 @@
|
||||
=======================
|
||||
Contributing to libvirt
|
||||
=======================
|
||||
|
||||
Full, up to date information on how to contribute to libvirt can be
|
||||
found on the libvirt website:
|
||||
|
||||
https://libvirt.org/contribute.html
|
||||
|
||||
To build the same document locally, from the top level directory of
|
||||
your git clone run:
|
||||
|
||||
::
|
||||
|
||||
$ mkdir build && cd build
|
||||
$ ../autogen.sh
|
||||
$ make
|
||||
|
||||
You'll find the freshly-built document in ``docs/contribute.html``.
|
||||
|
||||
If ``configure`` fails because of missing dependencies, you can set
|
||||
up your system by calling
|
||||
|
||||
::
|
||||
|
||||
$ sudo dnf builddep libvirt
|
||||
|
||||
if you're on a RHEL-based distribution or
|
||||
|
||||
::
|
||||
|
||||
$ sudo apt-get build-dep libvirt
|
||||
|
||||
if you're on a Debian-based one.
|
||||
|
||||
Note that, for the RHEL-based case, if you're on a machine where you
|
||||
haven't done any C development before, you will probably also need
|
||||
to run
|
||||
|
||||
::
|
||||
|
||||
$ sudo dnf install gcc make libtool autoconf automake rpm-build
|
||||
|
||||
You might still be missing some dependencies if your distribution is
|
||||
shipping an old libvirt version, but that will get you much closer to
|
||||
where you need to be to build successfully from source.
|
339
COPYING
339
COPYING
@@ -1,339 +0,0 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
502
COPYING.LESSER
502
COPYING.LESSER
@@ -1,502 +0,0 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 2.1, February 1999
|
||||
|
||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
[This is the first released version of the Lesser GPL. It also counts
|
||||
as the successor of the GNU Library Public License, version 2, hence
|
||||
the version number 2.1.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
Licenses are intended to guarantee your freedom to share and change
|
||||
free software--to make sure the software is free for all its users.
|
||||
|
||||
This license, the Lesser General Public License, applies to some
|
||||
specially designated software packages--typically libraries--of the
|
||||
Free Software Foundation and other authors who decide to use it. You
|
||||
can use it too, but we suggest you first think carefully about whether
|
||||
this license or the ordinary General Public License is the better
|
||||
strategy to use in any particular case, based on the explanations below.
|
||||
|
||||
When we speak of free software, we are referring to freedom of use,
|
||||
not price. Our General Public Licenses are designed to make sure that
|
||||
you have the freedom to distribute copies of free software (and charge
|
||||
for this service if you wish); that you receive source code or can get
|
||||
it if you want it; that you can change the software and use pieces of
|
||||
it in new free programs; and that you are informed that you can do
|
||||
these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
distributors to deny you these rights or to ask you to surrender these
|
||||
rights. These restrictions translate to certain responsibilities for
|
||||
you if you distribute copies of the library or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis
|
||||
or for a fee, you must give the recipients all the rights that we gave
|
||||
you. You must make sure that they, too, receive or can get the source
|
||||
code. If you link other code with the library, you must provide
|
||||
complete object files to the recipients, so that they can relink them
|
||||
with the library after making changes to the library and recompiling
|
||||
it. And you must show them these terms so they know their rights.
|
||||
|
||||
We protect your rights with a two-step method: (1) we copyright the
|
||||
library, and (2) we offer you this license, which gives you legal
|
||||
permission to copy, distribute and/or modify the library.
|
||||
|
||||
To protect each distributor, we want to make it very clear that
|
||||
there is no warranty for the free library. Also, if the library is
|
||||
modified by someone else and passed on, the recipients should know
|
||||
that what they have is not the original version, so that the original
|
||||
author's reputation will not be affected by problems that might be
|
||||
introduced by others.
|
||||
|
||||
Finally, software patents pose a constant threat to the existence of
|
||||
any free program. We wish to make sure that a company cannot
|
||||
effectively restrict the users of a free program by obtaining a
|
||||
restrictive license from a patent holder. Therefore, we insist that
|
||||
any patent license obtained for a version of the library must be
|
||||
consistent with the full freedom of use specified in this license.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the
|
||||
ordinary GNU General Public License. This license, the GNU Lesser
|
||||
General Public License, applies to certain designated libraries, and
|
||||
is quite different from the ordinary General Public License. We use
|
||||
this license for certain libraries in order to permit linking those
|
||||
libraries into non-free programs.
|
||||
|
||||
When a program is linked with a library, whether statically or using
|
||||
a shared library, the combination of the two is legally speaking a
|
||||
combined work, a derivative of the original library. The ordinary
|
||||
General Public License therefore permits such linking only if the
|
||||
entire combination fits its criteria of freedom. The Lesser General
|
||||
Public License permits more lax criteria for linking other code with
|
||||
the library.
|
||||
|
||||
We call this license the "Lesser" General Public License because it
|
||||
does Less to protect the user's freedom than the ordinary General
|
||||
Public License. It also provides other free software developers Less
|
||||
of an advantage over competing non-free programs. These disadvantages
|
||||
are the reason we use the ordinary General Public License for many
|
||||
libraries. However, the Lesser license provides advantages in certain
|
||||
special circumstances.
|
||||
|
||||
For example, on rare occasions, there may be a special need to
|
||||
encourage the widest possible use of a certain library, so that it becomes
|
||||
a de-facto standard. To achieve this, non-free programs must be
|
||||
allowed to use the library. A more frequent case is that a free
|
||||
library does the same job as widely used non-free libraries. In this
|
||||
case, there is little to gain by limiting the free library to free
|
||||
software only, so we use the Lesser General Public License.
|
||||
|
||||
In other cases, permission to use a particular library in non-free
|
||||
programs enables a greater number of people to use a large body of
|
||||
free software. For example, permission to use the GNU C Library in
|
||||
non-free programs enables many more people to use the whole GNU
|
||||
operating system, as well as its variant, the GNU/Linux operating
|
||||
system.
|
||||
|
||||
Although the Lesser General Public License is Less protective of the
|
||||
users' freedom, it does ensure that the user of a program that is
|
||||
linked with the Library has the freedom and the wherewithal to run
|
||||
that program using a modified version of the Library.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow. Pay close attention to the difference between a
|
||||
"work based on the library" and a "work that uses the library". The
|
||||
former contains code derived from the library, whereas the latter must
|
||||
be combined with the library in order to run.
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library or other
|
||||
program which contains a notice placed by the copyright holder or
|
||||
other authorized party saying it may be distributed under the terms of
|
||||
this Lesser General Public License (also called "this License").
|
||||
Each licensee is addressed as "you".
|
||||
|
||||
A "library" means a collection of software functions and/or data
|
||||
prepared so as to be conveniently linked with application programs
|
||||
(which use some of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work
|
||||
which has been distributed under these terms. A "work based on the
|
||||
Library" means either the Library or any derivative work under
|
||||
copyright law: that is to say, a work containing the Library or a
|
||||
portion of it, either verbatim or with modifications and/or translated
|
||||
straightforwardly into another language. (Hereinafter, translation is
|
||||
included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for
|
||||
making modifications to it. For a library, complete source code means
|
||||
all the source code for all modules it contains, plus any associated
|
||||
interface definition files, plus the scripts used to control compilation
|
||||
and installation of the library.
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running a program using the Library is not restricted, and output from
|
||||
such a program is covered only if its contents constitute a work based
|
||||
on the Library (independent of the use of the Library in a tool for
|
||||
writing it). Whether that is true depends on what the Library does
|
||||
and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's
|
||||
complete source code as you receive it, in any medium, provided that
|
||||
you conspicuously and appropriately publish on each copy an
|
||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||
all the notices that refer to this License and to the absence of any
|
||||
warranty; and distribute a copy of this License along with the
|
||||
Library.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy,
|
||||
and you may at your option offer warranty protection in exchange for a
|
||||
fee.
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion
|
||||
of it, thus forming a work based on the Library, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no
|
||||
charge to all third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a
|
||||
table of data to be supplied by an application program that uses
|
||||
the facility, other than as an argument passed when the facility
|
||||
is invoked, then you must make a good faith effort to ensure that,
|
||||
in the event an application does not supply such function or
|
||||
table, the facility still operates, and performs whatever part of
|
||||
its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has
|
||||
a purpose that is entirely well-defined independent of the
|
||||
application. Therefore, Subsection 2d requires that any
|
||||
application-supplied function or table used by this function must
|
||||
be optional: if the application does not supply it, the square
|
||||
root function must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Library,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Library, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library
|
||||
with the Library (or with a work based on the Library) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||
License instead of this License to a given copy of the Library. To do
|
||||
this, you must alter all the notices that refer to this License, so
|
||||
that they refer to the ordinary GNU General Public License, version 2,
|
||||
instead of to this License. (If a newer version than version 2 of the
|
||||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in
|
||||
these notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for
|
||||
that copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of
|
||||
the Library into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or
|
||||
derivative of it, under Section 2) in object code or executable form
|
||||
under the terms of Sections 1 and 2 above provided that you accompany
|
||||
it with the complete corresponding machine-readable source code, which
|
||||
must be distributed under the terms of Sections 1 and 2 above on a
|
||||
medium customarily used for software interchange.
|
||||
|
||||
If distribution of object code is made by offering access to copy
|
||||
from a designated place, then offering equivalent access to copy the
|
||||
source code from the same place satisfies the requirement to
|
||||
distribute the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the
|
||||
Library, but is designed to work with the Library by being compiled or
|
||||
linked with it, is called a "work that uses the Library". Such a
|
||||
work, in isolation, is not a derivative work of the Library, and
|
||||
therefore falls outside the scope of this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library
|
||||
creates an executable that is a derivative of the Library (because it
|
||||
contains portions of the Library), rather than a "work that uses the
|
||||
library". The executable is therefore covered by this License.
|
||||
Section 6 states terms for distribution of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file
|
||||
that is part of the Library, the object code for the work may be a
|
||||
derivative work of the Library even though the source code is not.
|
||||
Whether this is true is especially significant if the work can be
|
||||
linked without the Library, or if the work is itself a library. The
|
||||
threshold for this to be true is not precisely defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data
|
||||
structure layouts and accessors, and small macros and small inline
|
||||
functions (ten lines or less in length), then the use of the object
|
||||
file is unrestricted, regardless of whether it is legally a derivative
|
||||
work. (Executables containing this object code plus portions of the
|
||||
Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may
|
||||
distribute the object code for the work under the terms of Section 6.
|
||||
Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also combine or
|
||||
link a "work that uses the Library" with the Library to produce a
|
||||
work containing portions of the Library, and distribute that work
|
||||
under terms of your choice, provided that the terms permit
|
||||
modification of the work for the customer's own use and reverse
|
||||
engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the
|
||||
Library is used in it and that the Library and its use are covered by
|
||||
this License. You must supply a copy of this License. If the work
|
||||
during execution displays copyright notices, you must include the
|
||||
copyright notice for the Library among them, as well as a reference
|
||||
directing the user to the copy of this License. Also, you must do one
|
||||
of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding
|
||||
machine-readable source code for the Library including whatever
|
||||
changes were used in the work (which must be distributed under
|
||||
Sections 1 and 2 above); and, if the work is an executable linked
|
||||
with the Library, with the complete machine-readable "work that
|
||||
uses the Library", as object code and/or source code, so that the
|
||||
user can modify the Library and then relink to produce a modified
|
||||
executable containing the modified Library. (It is understood
|
||||
that the user who changes the contents of definitions files in the
|
||||
Library will not necessarily be able to recompile the application
|
||||
to use the modified definitions.)
|
||||
|
||||
b) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (1) uses at run time a
|
||||
copy of the library already present on the user's computer system,
|
||||
rather than copying library functions into the executable, and (2)
|
||||
will operate properly with a modified version of the library, if
|
||||
the user installs one, as long as the modified version is
|
||||
interface-compatible with the version that the work was made with.
|
||||
|
||||
c) Accompany the work with a written offer, valid for at
|
||||
least three years, to give the same user the materials
|
||||
specified in Subsection 6a, above, for a charge no more
|
||||
than the cost of performing this distribution.
|
||||
|
||||
d) If distribution of the work is made by offering access to copy
|
||||
from a designated place, offer equivalent access to copy the above
|
||||
specified materials from the same place.
|
||||
|
||||
e) Verify that the user has already received a copy of these
|
||||
materials or that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the
|
||||
Library" must include any data and utility programs needed for
|
||||
reproducing the executable from it. However, as a special exception,
|
||||
the materials to be distributed need not include anything that is
|
||||
normally distributed (in either source or binary form) with the major
|
||||
components (compiler, kernel, and so on) of the operating system on
|
||||
which the executable runs, unless that component itself accompanies
|
||||
the executable.
|
||||
|
||||
It may happen that this requirement contradicts the license
|
||||
restrictions of other proprietary libraries that do not normally
|
||||
accompany the operating system. Such a contradiction means you cannot
|
||||
use both them and the Library together in an executable that you
|
||||
distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the
|
||||
Library side-by-side in a single library together with other library
|
||||
facilities not covered by this License, and distribute such a combined
|
||||
library, provided that the separate distribution of the work based on
|
||||
the Library and of the other library facilities is otherwise
|
||||
permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work
|
||||
based on the Library, uncombined with any other library
|
||||
facilities. This must be distributed under the terms of the
|
||||
Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact
|
||||
that part of it is a work based on the Library, and explaining
|
||||
where to find the accompanying uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute
|
||||
the Library except as expressly provided under this License. Any
|
||||
attempt otherwise to copy, modify, sublicense, link with, or
|
||||
distribute the Library is void, and will automatically terminate your
|
||||
rights under this License. However, parties who have received copies,
|
||||
or rights, from you under this License will not have their licenses
|
||||
terminated so long as such parties remain in full compliance.
|
||||
|
||||
9. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Library or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Library (or any work based on the
|
||||
Library), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the
|
||||
Library), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute, link with or modify the Library
|
||||
subject to these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties with
|
||||
this License.
|
||||
|
||||
11. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Library at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Library by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Library.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply,
|
||||
and the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Library under this License may add
|
||||
an explicit geographical distribution limitation excluding those countries,
|
||||
so that distribution is permitted only in or among countries not thus
|
||||
excluded. In such case, this License incorporates the limitation as if
|
||||
written in the body of this License.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new
|
||||
versions of the Lesser General Public License from time to time.
|
||||
Such new versions will be similar in spirit to the present version,
|
||||
but may differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Library
|
||||
specifies a version number of this License which applies to it and
|
||||
"any later version", you have the option of following the terms and
|
||||
conditions either of that version or of any later version published by
|
||||
the Free Software Foundation. If the Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
the Free Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
write to the author to ask for permission. For software which is
|
||||
copyrighted by the Free Software Foundation, write to the Free
|
||||
Software Foundation; we sometimes make exceptions for this. Our
|
||||
decision will be guided by the two goals of preserving the free status
|
||||
of all derivatives of our free software and of promoting the sharing
|
||||
and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest
|
||||
possible use to the public, we recommend making it free software that
|
||||
everyone can redistribute and change. You can do so by permitting
|
||||
redistribution under these terms (or, alternatively, under the terms of the
|
||||
ordinary General Public License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. It is
|
||||
safest to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least the
|
||||
"copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the library's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1990
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
15
ChangeLog
15
ChangeLog
@@ -1,15 +0,0 @@
|
||||
libvirt ChangeLog
|
||||
=================
|
||||
|
||||
The libvirt project doesn't include a detailed ChangeLog in its release
|
||||
archives.
|
||||
|
||||
If you're interested in the full list of changes made to libvirt since
|
||||
the project was started, you can clone the git repository from
|
||||
|
||||
https://gitlab.com/libvirt/libvirt/
|
||||
|
||||
and browse them locally using your favorite git history viewer or,
|
||||
alternatively, browse them online at
|
||||
|
||||
https://gitlab.com/libvirt/libvirt/-/commits/master
|
74
GNUmakefile
74
GNUmakefile
@@ -1,74 +0,0 @@
|
||||
# Having a separate GNUmakefile lets me 'include' the dynamically
|
||||
# generated rules created via cfg.mk (package-local configuration)
|
||||
# as well as maint.mk (generic maintainer rules).
|
||||
# This makefile is used only if you run GNU Make.
|
||||
# It is necessary if you want to build targets usually of interest
|
||||
# only to the maintainer.
|
||||
|
||||
# Copyright (C) 2001, 2003, 2006-2019 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
_build-aux ?= build-aux
|
||||
_autoreconf ?= autoreconf -v
|
||||
|
||||
# If the user runs GNU make but has not yet run ./configure,
|
||||
# give them a diagnostic.
|
||||
_gl-Makefile := $(wildcard [M]akefile)
|
||||
ifneq ($(_gl-Makefile),)
|
||||
|
||||
# Make tar archive easier to reproduce.
|
||||
export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner
|
||||
|
||||
# Allow the user to add to this in the Makefile.
|
||||
ALL_RECURSIVE_TARGETS =
|
||||
|
||||
include Makefile
|
||||
include $(srcdir)/$(_build-aux)/syntax-check.mk
|
||||
|
||||
else
|
||||
|
||||
.DEFAULT_GOAL := abort-due-to-no-makefile
|
||||
srcdir = .
|
||||
|
||||
# The package can override .DEFAULT_GOAL to run actions like autoreconf.
|
||||
include $(srcdir)/$(_build-aux)/syntax-check.mk
|
||||
|
||||
ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile)
|
||||
$(MAKECMDGOALS): abort-due-to-no-makefile
|
||||
endif
|
||||
|
||||
abort-due-to-no-makefile:
|
||||
@echo There seems to be no Makefile in this directory. 1>&2
|
||||
@echo "You must run ./configure before running 'make'." 1>&2
|
||||
@exit 1
|
||||
|
||||
endif
|
||||
|
||||
# Tell version 3.79 and up of GNU make to not build goals in this
|
||||
# directory in parallel, in case someone tries to build multiple
|
||||
# targets, and one of them can cause a recursive target to be invoked.
|
||||
|
||||
# Only set this if Automake doesn't provide it.
|
||||
AM_RECURSIVE_TARGETS ?= $(RECURSIVE_TARGETS:-recursive=) \
|
||||
$(RECURSIVE_CLEAN_TARGETS:-recursive=) \
|
||||
dist distcheck tags ctags
|
||||
|
||||
ALL_RECURSIVE_TARGETS += $(AM_RECURSIVE_TARGETS)
|
||||
|
||||
ifneq ($(word 2, $(MAKECMDGOALS)), )
|
||||
ifneq ($(filter $(ALL_RECURSIVE_TARGETS), $(MAKECMDGOALS)), )
|
||||
.NOTPARALLEL:
|
||||
endif
|
||||
endif
|
180
Makefile.am
180
Makefile.am
@@ -1,180 +0,0 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
## Copyright (C) 2005-2013 Red Hat, Inc.
|
||||
##
|
||||
## This library is free software; you can redistribute it and/or
|
||||
## modify it under the terms of the GNU Lesser General Public
|
||||
## License as published by the Free Software Foundation; either
|
||||
## version 2.1 of the License, or (at your option) any later version.
|
||||
##
|
||||
## This library is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
## Lesser General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU Lesser General Public
|
||||
## License along with this library. If not, see
|
||||
## <http://www.gnu.org/licenses/>.
|
||||
|
||||
LCOV = lcov
|
||||
GENHTML = genhtml
|
||||
|
||||
# when building from tarball -Werror isn't auto enabled
|
||||
# so force it explicitly
|
||||
DISTCHECK_CONFIGURE_FLAGS = --enable-werror
|
||||
|
||||
SUBDIRS = . include/libvirt src tools docs \
|
||||
tests po examples
|
||||
|
||||
XZ_OPT ?= -v -T0
|
||||
export XZ_OPT
|
||||
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
|
||||
EXTRA_DIST = \
|
||||
config-post.h \
|
||||
libvirt.spec libvirt.spec.in \
|
||||
mingw-libvirt.spec.in \
|
||||
libvirt.pc.in \
|
||||
libvirt-qemu.pc.in \
|
||||
libvirt-lxc.pc.in \
|
||||
libvirt-admin.pc.in \
|
||||
Makefile.nonreentrant \
|
||||
autogen.sh \
|
||||
GNUmakefile \
|
||||
run.in \
|
||||
README.rst \
|
||||
AUTHORS.in \
|
||||
CONTRIBUTING.rst \
|
||||
NEWS.rst \
|
||||
scripts/apibuild.py \
|
||||
scripts/augeas-gentest.py \
|
||||
build-aux/check-spacing.pl \
|
||||
scripts/check-aclperms.py \
|
||||
scripts/check-aclrules.py \
|
||||
scripts/check-drivername.py \
|
||||
scripts/check-driverimpls.py \
|
||||
scripts/check-file-access.py \
|
||||
scripts/check-remote-protocol.py \
|
||||
scripts/check-symfile.py \
|
||||
scripts/check-symsorting.py \
|
||||
scripts/dtrace2systemtap.py \
|
||||
scripts/esx_vi_generator.py \
|
||||
scripts/genaclperms.py \
|
||||
scripts/genpolkit.py \
|
||||
scripts/gensystemtap.py \
|
||||
scripts/group-qemu-caps.py \
|
||||
scripts/header-ifdef.py \
|
||||
scripts/hvsupport.py \
|
||||
scripts/hyperv_wmi_generator.py \
|
||||
scripts/mock-noinline.py \
|
||||
scripts/prohibit-duplicate-header.py \
|
||||
scripts/test-wrap-argv.py \
|
||||
build-aux/syntax-check.mk \
|
||||
build-aux/useless-if-before-free \
|
||||
build-aux/vc-list-files \
|
||||
ci/Makefile \
|
||||
ci/build.sh \
|
||||
ci/list-images.sh \
|
||||
ci/prepare.sh \
|
||||
$(NULL)
|
||||
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = libvirt.pc libvirt-qemu.pc libvirt-lxc.pc libvirt-admin.pc
|
||||
|
||||
rpm: clean
|
||||
@(unset CDPATH ; $(MAKE) dist && rpmbuild -ta $(distdir).tar.xz)
|
||||
|
||||
srpm: clean
|
||||
@(unset CDPATH ; $(MAKE) dist && rpmbuild -ts $(distdir).tar.xz)
|
||||
|
||||
check-local: all tests
|
||||
|
||||
check-access: all
|
||||
@($(MAKE) $(AM_MAKEFLAGS) -C tests check-access)
|
||||
|
||||
cov: clean-cov
|
||||
$(MKDIR_P) $(top_builddir)/coverage
|
||||
$(LCOV) -c -o $(top_builddir)/coverage/libvirt.info.tmp \
|
||||
-d $(top_builddir)/src \
|
||||
-d $(top_builddir)/tests
|
||||
$(LCOV) -r $(top_builddir)/coverage/libvirt.info.tmp \
|
||||
-o $(top_builddir)/coverage/libvirt.info
|
||||
rm $(top_builddir)/coverage/libvirt.info.tmp
|
||||
$(GENHTML) --show-details -t "libvirt" -o $(top_builddir)/coverage \
|
||||
--legend $(top_builddir)/coverage/libvirt.info
|
||||
|
||||
clean-cov:
|
||||
rm -rf $(top_builddir)/coverage
|
||||
|
||||
MAINTAINERCLEANFILES = .git-module-status
|
||||
|
||||
BUILT_SOURCES = configmake.h
|
||||
CLEANFILES = configmake.h
|
||||
|
||||
distclean-local: clean-GNUmakefile
|
||||
clean-GNUmakefile:
|
||||
test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile
|
||||
|
||||
dist-hook: gen-AUTHORS
|
||||
|
||||
.PHONY: gen-AUTHORS
|
||||
gen-AUTHORS:
|
||||
$(AM_V_GEN)\
|
||||
if test -d $(srcdir)/.git; then \
|
||||
( \
|
||||
cd $(srcdir) && \
|
||||
git log --pretty=format:'%aN <%aE>' | sort -u \
|
||||
) > all.list && \
|
||||
sort -u $(srcdir)/AUTHORS.in > maint.list && \
|
||||
comm -23 all.list maint.list > contrib.list && \
|
||||
contrib="`cat contrib.list`" && \
|
||||
perl -p -e "s/#contributorslist#// and print '$$contrib'" \
|
||||
< $(srcdir)/AUTHORS.in > $(distdir)/AUTHORS-tmp && \
|
||||
mv -f $(distdir)/AUTHORS-tmp $(distdir)/AUTHORS && \
|
||||
rm -f all.list maint.list contrib.list; \
|
||||
fi
|
||||
|
||||
ci-%:
|
||||
$(MAKE) -C $(srcdir)/ci/ $@
|
||||
|
||||
# Listed in the same order as the GNU makefile conventions, and
|
||||
# provided by autoconf 2.59c+ or 2.70.
|
||||
# The Automake-defined pkg* macros are appended, in the order
|
||||
# listed in the Automake 1.10a+ documentation.
|
||||
configmake.h: Makefile
|
||||
$(AM_V_GEN)rm -f $@-t && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||
echo '#if WIN32'; \
|
||||
echo '# include <winsock2.h> /* avoid mingw pollution on DATADIR */'; \
|
||||
echo '#endif'; \
|
||||
echo '#define PREFIX "$(prefix)"'; \
|
||||
echo '#define EXEC_PREFIX "$(exec_prefix)"'; \
|
||||
echo '#define BINDIR "$(bindir)"'; \
|
||||
echo '#define SBINDIR "$(sbindir)"'; \
|
||||
echo '#define LIBEXECDIR "$(libexecdir)"'; \
|
||||
echo '#define DATAROOTDIR "$(datarootdir)"'; \
|
||||
echo '#define DATADIR "$(datadir)"'; \
|
||||
echo '#define SYSCONFDIR "$(sysconfdir)"'; \
|
||||
echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \
|
||||
echo '#define LOCALSTATEDIR "$(localstatedir)"'; \
|
||||
echo '#define RUNSTATEDIR "$(runstatedir)"'; \
|
||||
echo '#define INCLUDEDIR "$(includedir)"'; \
|
||||
echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \
|
||||
echo '#define DOCDIR "$(docdir)"'; \
|
||||
echo '#define INFODIR "$(infodir)"'; \
|
||||
echo '#define HTMLDIR "$(htmldir)"'; \
|
||||
echo '#define DVIDIR "$(dvidir)"'; \
|
||||
echo '#define PDFDIR "$(pdfdir)"'; \
|
||||
echo '#define PSDIR "$(psdir)"'; \
|
||||
echo '#define LIBDIR "$(libdir)"'; \
|
||||
echo '#define LISPDIR "$(lispdir)"'; \
|
||||
echo '#define LOCALEDIR "$(localedir)"'; \
|
||||
echo '#define MANDIR "$(mandir)"'; \
|
||||
echo '#define MANEXT "$(manext)"'; \
|
||||
echo '#define PKGDATADIR "$(pkgdatadir)"'; \
|
||||
echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \
|
||||
echo '#define PKGLIBDIR "$(pkglibdir)"'; \
|
||||
echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \
|
||||
} | sed '/""/d' > $@-t && \
|
||||
mv -f $@-t $@
|
@@ -1,127 +0,0 @@
|
||||
## Copyright (C) 2009-2010, 2013 Red Hat, Inc.
|
||||
##
|
||||
## This library is free software; you can redistribute it and/or
|
||||
## modify it under the terms of the GNU Lesser General Public
|
||||
## License as published by the Free Software Foundation; either
|
||||
## version 2.1 of the License, or (at your option) any later version.
|
||||
##
|
||||
## This library is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
## Lesser General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU Lesser General Public
|
||||
## License along with this library. If not, see
|
||||
## <http://www.gnu.org/licenses/>.
|
||||
|
||||
#
|
||||
# Generated by running the following on Fedora 26:
|
||||
#
|
||||
# nm -D --defined-only /lib64/libc.so.6 \
|
||||
# | grep '_r$' \
|
||||
# | awk '{print $3}' \
|
||||
# | grep -v __ \
|
||||
# | grep -v qsort \ # Red herring since we don't need to pass extra args to qsort comparator
|
||||
# | grep -v readdir \ # This is safe as long as each DIR * instance is only used by one thread
|
||||
# | sort \
|
||||
# | uniq \
|
||||
# | sed -e 's/_r//'
|
||||
#
|
||||
# Also manually add in all inet_* functions some of which
|
||||
# are not threadsafe and do not have _r variants. They are
|
||||
# all deprecated in favour of getnameinfo/getaddrinfo
|
||||
#
|
||||
|
||||
NON_REENTRANT =
|
||||
NON_REENTRANT += asctime
|
||||
NON_REENTRANT += ctime
|
||||
NON_REENTRANT += drand48
|
||||
NON_REENTRANT += ecvt
|
||||
NON_REENTRANT += erand48
|
||||
NON_REENTRANT += ether_aton
|
||||
NON_REENTRANT += ether_ntoa
|
||||
NON_REENTRANT += fcvt
|
||||
NON_REENTRANT += fgetgrent
|
||||
NON_REENTRANT += fgetpwent
|
||||
NON_REENTRANT += fgetsgent
|
||||
NON_REENTRANT += fgetspent
|
||||
NON_REENTRANT += getaliasbyname
|
||||
NON_REENTRANT += getaliasent
|
||||
NON_REENTRANT += getdate
|
||||
NON_REENTRANT += getgrent
|
||||
NON_REENTRANT += getgrgid
|
||||
NON_REENTRANT += getgrnam
|
||||
NON_REENTRANT += gethostbyaddr
|
||||
NON_REENTRANT += gethostbyname2
|
||||
NON_REENTRANT += gethostbyname
|
||||
NON_REENTRANT += gethostent
|
||||
NON_REENTRANT += getlogin
|
||||
NON_REENTRANT += getmntent
|
||||
NON_REENTRANT += getnetbyaddr
|
||||
NON_REENTRANT += getnetbyname
|
||||
NON_REENTRANT += getnetent
|
||||
NON_REENTRANT += getnetgrent
|
||||
NON_REENTRANT += getprotobyname
|
||||
NON_REENTRANT += getprotobynumber
|
||||
NON_REENTRANT += getprotoent
|
||||
NON_REENTRANT += getpwent
|
||||
NON_REENTRANT += getpwnam
|
||||
NON_REENTRANT += getpwuid
|
||||
NON_REENTRANT += getrpcbyname
|
||||
NON_REENTRANT += getrpcbynumber
|
||||
NON_REENTRANT += getrpcent
|
||||
NON_REENTRANT += getservbyname
|
||||
NON_REENTRANT += getservbyport
|
||||
NON_REENTRANT += getservent
|
||||
NON_REENTRANT += getsgent
|
||||
NON_REENTRANT += getsgnam
|
||||
NON_REENTRANT += getspent
|
||||
NON_REENTRANT += getspnam
|
||||
NON_REENTRANT += getutent
|
||||
NON_REENTRANT += getutid
|
||||
NON_REENTRANT += getutline
|
||||
NON_REENTRANT += gmtime
|
||||
NON_REENTRANT += hcreate
|
||||
NON_REENTRANT += hdestroy
|
||||
NON_REENTRANT += hsearch
|
||||
NON_REENTRANT += initstate
|
||||
NON_REENTRANT += jrand48
|
||||
NON_REENTRANT += lcong48
|
||||
NON_REENTRANT += localtime
|
||||
NON_REENTRANT += lrand48
|
||||
NON_REENTRANT += mrand48
|
||||
NON_REENTRANT += nrand48
|
||||
NON_REENTRANT += ptsname
|
||||
NON_REENTRANT += qecvt
|
||||
NON_REENTRANT += qfcvt
|
||||
NON_REENTRANT += random
|
||||
NON_REENTRANT += rand
|
||||
NON_REENTRANT += seed48
|
||||
NON_REENTRANT += setstate
|
||||
NON_REENTRANT += sgetsgent
|
||||
NON_REENTRANT += sgetspent
|
||||
NON_REENTRANT += srand48
|
||||
NON_REENTRANT += srandom
|
||||
NON_REENTRANT += strerror
|
||||
NON_REENTRANT += strtok
|
||||
NON_REENTRANT += tmpnam
|
||||
NON_REENTRANT += ttyname
|
||||
NON_REENTRANT += inet_addr
|
||||
NON_REENTRANT += inet_aton
|
||||
NON_REENTRANT += inet_lnaof
|
||||
NON_REENTRANT += inet_makeaddr
|
||||
NON_REENTRANT += inet_netof
|
||||
NON_REENTRANT += inet_network
|
||||
NON_REENTRANT += inet_nsap_addr
|
||||
NON_REENTRANT += inet_nsap_ntoa
|
||||
NON_REENTRANT += inet_ntoa
|
||||
NON_REENTRANT += inet_ntop
|
||||
NON_REENTRANT += inet_pton
|
||||
|
||||
# Separate two nothings by space to get one space in a variable
|
||||
space =
|
||||
space +=
|
||||
# The space needs to be in a variable otherwise it would be ignored.
|
||||
# And there must be no spaces around the commas because they would
|
||||
# not be ignored, logically.
|
||||
NON_REENTRANT_RE=$(subst $(space),|,$(NON_REENTRANT))
|
75
README.rst
75
README.rst
@@ -1,75 +0,0 @@
|
||||
.. image:: https://gitlab.com/libvirt/libvirt/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt/pipelines
|
||||
:alt: GitLab CI Build Status
|
||||
.. image:: https://travis-ci.org/libvirt/libvirt.svg
|
||||
:target: https://travis-ci.org/libvirt/libvirt
|
||||
:alt: Travis CI Build Status
|
||||
.. image:: https://bestpractices.coreinfrastructure.org/projects/355/badge
|
||||
:target: https://bestpractices.coreinfrastructure.org/projects/355
|
||||
:alt: CII Best Practices
|
||||
.. image:: https://translate.fedoraproject.org/widgets/libvirt/-/libvirt/svg-badge.svg
|
||||
:target: https://translate.fedoraproject.org/engage/libvirt/
|
||||
:alt: Translation status
|
||||
|
||||
==============================
|
||||
Libvirt API for virtualization
|
||||
==============================
|
||||
|
||||
Libvirt provides a portable, long term stable C API for managing the
|
||||
virtualization technologies provided by many operating systems. It
|
||||
includes support for QEMU, KVM, Xen, LXC, bhyve, Virtuozzo, VMware
|
||||
vCenter and ESX, VMware Desktop, Hyper-V, VirtualBox and the POWER
|
||||
Hypervisor.
|
||||
|
||||
For some of these hypervisors, it provides a stateful management
|
||||
daemon which runs on the virtualization host allowing access to the
|
||||
API both by non-privileged local users and remote users.
|
||||
|
||||
Layered packages provide bindings of the libvirt C API into other
|
||||
languages including Python, Perl, PHP, Go, Java, OCaml, as well as
|
||||
mappings into object systems such as GObject, CIM and SNMP.
|
||||
|
||||
Further information about the libvirt project can be found on the
|
||||
website:
|
||||
|
||||
https://libvirt.org
|
||||
|
||||
|
||||
License
|
||||
=======
|
||||
|
||||
The libvirt C API is distributed under the terms of GNU Lesser General
|
||||
Public License, version 2.1 (or later). Some parts of the code that are
|
||||
not part of the C library may have the more restrictive GNU General
|
||||
Public License, version 2.0 (or later). See the files ``COPYING.LESSER``
|
||||
and ``COPYING`` for full license terms & conditions.
|
||||
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
Instructions on building and installing libvirt can be found on the website:
|
||||
|
||||
https://libvirt.org/compiling.html
|
||||
|
||||
Contributing
|
||||
============
|
||||
|
||||
The libvirt project welcomes contributions in many ways. For most components
|
||||
the best way to contribute is to send patches to the primary development
|
||||
mailing list. Further guidance on this can be found on the website:
|
||||
|
||||
https://libvirt.org/contribute.html
|
||||
|
||||
|
||||
Contact
|
||||
=======
|
||||
|
||||
The libvirt project has two primary mailing lists:
|
||||
|
||||
* libvirt-users@redhat.com (**for user discussions**)
|
||||
* libvir-list@redhat.com (**for development only**)
|
||||
|
||||
Further details on contacting the project are available on the website:
|
||||
|
||||
https://libvirt.org/contact.html
|
53
autogen.sh
53
autogen.sh
@@ -1,53 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Run this to generate all the initial makefiles, etc.
|
||||
#
|
||||
# THe following options must come first. All other or subsequent
|
||||
# arguments are passed to configure:
|
||||
# --no-git skip `git submodule update --init`
|
||||
|
||||
test -n "$srcdir" || srcdir=$(dirname "$0")
|
||||
test -n "$srcdir" || srcdir=.
|
||||
|
||||
olddir=$(pwd)
|
||||
|
||||
cd "$srcdir"
|
||||
|
||||
(test -f src/libvirt.c) || {
|
||||
echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
|
||||
echo " top-level libvirt directory"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ "x$1" = x--no-git ]; then
|
||||
shift
|
||||
else
|
||||
git submodule update --init || exit 1
|
||||
fi
|
||||
|
||||
autoreconf --verbose --force --install || exit 1
|
||||
|
||||
if test "x$1" = "x--system"; then
|
||||
shift
|
||||
prefix=/usr
|
||||
libdir=$prefix/lib
|
||||
sysconfdir=/etc
|
||||
localstatedir=/var
|
||||
if [ -d /usr/lib64 ]; then
|
||||
libdir=$prefix/lib64
|
||||
fi
|
||||
EXTRA_ARGS="--prefix=$prefix --sysconfdir=$sysconfdir --localstatedir=$localstatedir --libdir=$libdir"
|
||||
fi
|
||||
|
||||
cd "$olddir"
|
||||
|
||||
if [ "$NOCONFIGURE" = "" ]; then
|
||||
$srcdir/configure $EXTRA_ARGS "$@" || exit 1
|
||||
|
||||
if [ "$1" = "--help" ]; then
|
||||
exit 0
|
||||
else
|
||||
echo "Now type 'make' to compile libvirt" || exit 1
|
||||
fi
|
||||
else
|
||||
echo "Skipping configure process."
|
||||
fi
|
@@ -1,198 +0,0 @@
|
||||
#!/usr/bin/env perl
|
||||
#
|
||||
# check-spacing.pl: Report any usage of 'function (..args..)'
|
||||
# Also check for other syntax issues, such as correct use of ';'
|
||||
#
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
# License as published by the Free Software Foundation; either
|
||||
# version 2.1 of the License, or (at your option) any later version.
|
||||
#
|
||||
# This library is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this library. If not, see
|
||||
# <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
my $ret = 0;
|
||||
my $incomment = 0;
|
||||
|
||||
foreach my $file (@ARGV) {
|
||||
# Per-file variables for multiline Curly Bracket (cb_) check
|
||||
my $cb_linenum = 0;
|
||||
my $cb_code = "";
|
||||
my $cb_scolon = 0;
|
||||
|
||||
open FILE, $file;
|
||||
|
||||
while (defined (my $line = <FILE>)) {
|
||||
my $data = $line;
|
||||
# For temporary modifications
|
||||
my $tmpdata;
|
||||
|
||||
# Kill any quoted , ; = or "
|
||||
$data =~ s/'[";,=]'/'X'/g;
|
||||
|
||||
# Kill any quoted strings
|
||||
$data =~ s,"(?:[^\\\"]|\\.)*","XXX",g;
|
||||
|
||||
next if $data =~ /^#/;
|
||||
|
||||
# Kill contents of multi-line comments
|
||||
# and detect end of multi-line comments
|
||||
if ($incomment) {
|
||||
if ($data =~ m,\*/,) {
|
||||
$incomment = 0;
|
||||
$data =~ s,^.*\*/,*/,;
|
||||
} else {
|
||||
$data = "";
|
||||
}
|
||||
}
|
||||
|
||||
# Kill single line comments, and detect
|
||||
# start of multi-line comments
|
||||
if ($data =~ m,/\*.*\*/,) {
|
||||
$data =~ s,/\*.*\*/,/* */,;
|
||||
} elsif ($data =~ m,/\*,) {
|
||||
$incomment = 1;
|
||||
$data =~ s,/\*.*,/*,;
|
||||
}
|
||||
|
||||
# We need to match things like
|
||||
#
|
||||
# int foo (int bar, bool wizz);
|
||||
# foo (bar, wizz);
|
||||
#
|
||||
# but not match things like:
|
||||
#
|
||||
# typedef int (*foo)(bar wizz)
|
||||
#
|
||||
# we can't do this (efficiently) without
|
||||
# missing things like
|
||||
#
|
||||
# foo (*bar, wizz);
|
||||
#
|
||||
# We also don't want to spoil the $data so it can be used
|
||||
# later on.
|
||||
$tmpdata = $data;
|
||||
while ($tmpdata =~ /(\w+)\s\((?!\*)/) {
|
||||
my $kw = $1;
|
||||
|
||||
# Allow space after keywords only
|
||||
if ($kw =~ /^(?:if|for|while|switch|return)$/) {
|
||||
$tmpdata =~ s/(?:$kw\s\()/XXX(/;
|
||||
} else {
|
||||
print "Whitespace after non-keyword:\n";
|
||||
print "$file:$.: $line";
|
||||
$ret = 1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
# Require whitespace immediately after keywords
|
||||
if ($data =~ /\b(?:if|for|while|switch|return)\(/) {
|
||||
print "No whitespace after keyword:\n";
|
||||
print "$file:$.: $line";
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
# Forbid whitespace between )( of a function typedef
|
||||
if ($data =~ /\(\*\w+\)\s+\(/) {
|
||||
print "Whitespace between ')' and '(':\n";
|
||||
print "$file:$.: $line";
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
# Forbid whitespace following ( or prior to )
|
||||
# but allow whitespace before ) on a single line
|
||||
# (optionally followed by a semicolon)
|
||||
if (($data =~ /\s\)/ && not $data =~ /^\s+\);?$/) ||
|
||||
$data =~ /\((?!$)\s/) {
|
||||
print "Whitespace after '(' or before ')':\n";
|
||||
print "$file:$.: $line";
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
# Forbid whitespace before ";" or ",". Things like below are allowed:
|
||||
#
|
||||
# 1) The expression is empty for "for" loop. E.g.
|
||||
# for (i = 0; ; i++)
|
||||
#
|
||||
# 2) An empty statement. E.g.
|
||||
# while (write(statuswrite, &status, 1) == -1 &&
|
||||
# errno == EINTR)
|
||||
# ;
|
||||
#
|
||||
if ($data =~ /\s[;,]/) {
|
||||
unless ($data =~ /\S; ; / ||
|
||||
$data =~ /^\s+;/) {
|
||||
print "Whitespace before semicolon or comma:\n";
|
||||
print "$file:$.: $line";
|
||||
$ret = 1;
|
||||
}
|
||||
}
|
||||
|
||||
# Require EOL, macro line continuation, or whitespace after ";".
|
||||
# Allow "for (;;)" as an exception.
|
||||
if ($data =~ /;[^ \\\n;)]/) {
|
||||
print "Invalid character after semicolon:\n";
|
||||
print "$file:$.: $line";
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
# Require EOL, space, or enum/struct end after comma.
|
||||
if ($data =~ /,[^ \\\n)}]/) {
|
||||
print "Invalid character after comma:\n";
|
||||
print "$file:$.: $line";
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
# Require spaces around assignment '=', compounds and '=='
|
||||
if ($data =~ /[^ ]\b[!<>&|\-+*\/%\^=]?=/ ||
|
||||
$data =~ /=[^= \\\n]/) {
|
||||
print "Spacing around '=' or '==':\n";
|
||||
print "$file:$.: $line";
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
# One line conditional statements with one line bodies should
|
||||
# not use curly brackets.
|
||||
if ($data =~ /^\s*(if|while|for)\b.*\{$/) {
|
||||
$cb_linenum = $.;
|
||||
$cb_code = $line;
|
||||
$cb_scolon = 0;
|
||||
}
|
||||
|
||||
# We need to check for exactly one semicolon inside the body,
|
||||
# because empty statements (e.g. with comment only) are
|
||||
# allowed
|
||||
if ($cb_linenum == $. - 1 && $data =~ /^[^;]*;[^;]*$/) {
|
||||
$cb_code .= $line;
|
||||
$cb_scolon = 1;
|
||||
}
|
||||
|
||||
if ($data =~ /^\s*}\s*$/ &&
|
||||
$cb_linenum == $. - 2 &&
|
||||
$cb_scolon) {
|
||||
|
||||
print "Curly brackets around single-line body:\n";
|
||||
print "$file:$cb_linenum-$.:\n$cb_code$line";
|
||||
$ret = 1;
|
||||
|
||||
# There _should_ be no need to reset the values; but to
|
||||
# keep my inner peace...
|
||||
$cb_linenum = 0;
|
||||
$cb_scolon = 0;
|
||||
$cb_code = "";
|
||||
}
|
||||
}
|
||||
close FILE;
|
||||
}
|
||||
|
||||
exit $ret;
|
File diff suppressed because it is too large
Load Diff
@@ -1,226 +0,0 @@
|
||||
#!/bin/sh
|
||||
#! -*-perl-*-
|
||||
|
||||
# Detect instances of "if (p) free (p);".
|
||||
# Likewise "if (p != 0)", "if (0 != p)", or with NULL; and with braces.
|
||||
|
||||
# Copyright (C) 2008-2019 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Written by Jim Meyering
|
||||
|
||||
# This is a prologue that allows to run a perl script as an executable
|
||||
# on systems that are compliant to a POSIX version before POSIX:2017.
|
||||
# On such systems, the usual invocation of an executable through execlp()
|
||||
# or execvp() fails with ENOEXEC if it is a script that does not start
|
||||
# with a #! line. The script interpreter mentioned in the #! line has
|
||||
# to be /bin/sh, because on GuixSD systems that is the only program that
|
||||
# has a fixed file name. The second line is essential for perl and is
|
||||
# also useful for editing this file in Emacs. The next two lines below
|
||||
# are valid code in both sh and perl. When executed by sh, they re-execute
|
||||
# the script through the perl program found in $PATH. The '-x' option
|
||||
# is essential as well; without it, perl would re-execute the script
|
||||
# through /bin/sh. When executed by perl, the next two lines are a no-op.
|
||||
eval 'exec perl -wSx "$0" "$@"'
|
||||
if 0;
|
||||
|
||||
my $VERSION = '2018-03-07 03:47'; # UTC
|
||||
# The definition above must lie within the first 8 lines in order
|
||||
# for the Emacs time-stamp write hook (at end) to update it.
|
||||
# If you change this file with Emacs, please let the write hook
|
||||
# do its job. Otherwise, update this string manually.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Getopt::Long;
|
||||
|
||||
(my $ME = $0) =~ s|.*/||;
|
||||
|
||||
# use File::Coda; # https://meyering.net/code/Coda/
|
||||
END {
|
||||
defined fileno STDOUT or return;
|
||||
close STDOUT and return;
|
||||
warn "$ME: failed to close standard output: $!\n";
|
||||
$? ||= 1;
|
||||
}
|
||||
|
||||
sub usage ($)
|
||||
{
|
||||
my ($exit_code) = @_;
|
||||
my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
|
||||
if ($exit_code != 0)
|
||||
{
|
||||
print $STREAM "Try '$ME --help' for more information.\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
print $STREAM <<EOF;
|
||||
Usage: $ME [OPTIONS] FILE...
|
||||
|
||||
Detect any instance in FILE of a useless "if" test before a free call, e.g.,
|
||||
"if (p) free (p);". Any such test may be safely removed without affecting
|
||||
the semantics of the C code in FILE. Use --name=FOO --name=BAR to also
|
||||
detect free-like functions named FOO and BAR.
|
||||
|
||||
OPTIONS:
|
||||
|
||||
--list print only the name of each matching FILE (\\0-terminated)
|
||||
--name=N add name N to the list of \'free\'-like functions to detect;
|
||||
may be repeated
|
||||
|
||||
--help display this help and exit
|
||||
--version output version information and exit
|
||||
|
||||
Exit status:
|
||||
|
||||
0 one or more matches
|
||||
1 no match
|
||||
2 an error
|
||||
|
||||
EXAMPLE:
|
||||
|
||||
For example, this command prints all removable "if" tests before "free"
|
||||
and "kfree" calls in the linux kernel sources:
|
||||
|
||||
git ls-files -z |xargs -0 $ME --name=kfree
|
||||
|
||||
EOF
|
||||
}
|
||||
exit $exit_code;
|
||||
}
|
||||
|
||||
sub is_NULL ($)
|
||||
{
|
||||
my ($expr) = @_;
|
||||
return ($expr eq 'NULL' || $expr eq '0');
|
||||
}
|
||||
|
||||
{
|
||||
sub EXIT_MATCH {0}
|
||||
sub EXIT_NO_MATCH {1}
|
||||
sub EXIT_ERROR {2}
|
||||
my $err = EXIT_NO_MATCH;
|
||||
|
||||
my $list;
|
||||
my @name = qw(free);
|
||||
GetOptions
|
||||
(
|
||||
help => sub { usage 0 },
|
||||
version => sub { print "$ME version $VERSION\n"; exit },
|
||||
list => \$list,
|
||||
'name=s@' => \@name,
|
||||
) or usage 1;
|
||||
|
||||
# Make sure we have the right number of non-option arguments.
|
||||
# Always tell the user why we fail.
|
||||
@ARGV < 1
|
||||
and (warn "$ME: missing FILE argument\n"), usage EXIT_ERROR;
|
||||
|
||||
my $or = join '|', @name;
|
||||
my $regexp = qr/(?:$or)/;
|
||||
|
||||
# Set the input record separator.
|
||||
# Note: this makes it impractical to print line numbers.
|
||||
$/ = '"';
|
||||
|
||||
my $found_match = 0;
|
||||
FILE:
|
||||
foreach my $file (@ARGV)
|
||||
{
|
||||
open FH, '<', $file
|
||||
or (warn "$ME: can't open '$file' for reading: $!\n"),
|
||||
$err = EXIT_ERROR, next;
|
||||
while (defined (my $line = <FH>))
|
||||
{
|
||||
# Skip non-matching lines early to save time
|
||||
$line =~ /\bif\b/
|
||||
or next;
|
||||
while ($line =~
|
||||
/\b(if\s*\(\s*([^)]+?)(?:\s*!=\s*([^)]+?))?\s*\)
|
||||
# 1 2 3
|
||||
(?: \s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;|
|
||||
\s*\{\s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;\s*\}))/sxg)
|
||||
{
|
||||
my $all = $1;
|
||||
my ($lhs, $rhs) = ($2, $3);
|
||||
my ($free_opnd, $braced_free_opnd) = ($4, $5);
|
||||
my $non_NULL;
|
||||
if (!defined $rhs) { $non_NULL = $lhs }
|
||||
elsif (is_NULL $rhs) { $non_NULL = $lhs }
|
||||
elsif (is_NULL $lhs) { $non_NULL = $rhs }
|
||||
else { next }
|
||||
|
||||
# Compare the non-NULL part of the "if" expression and the
|
||||
# free'd expression, without regard to white space.
|
||||
$non_NULL =~ tr/ \t//d;
|
||||
my $e2 = defined $free_opnd ? $free_opnd : $braced_free_opnd;
|
||||
$e2 =~ tr/ \t//d;
|
||||
if ($non_NULL eq $e2)
|
||||
{
|
||||
$found_match = 1;
|
||||
$list
|
||||
and (print "$file\0"), next FILE;
|
||||
print "$file: $all\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
continue
|
||||
{
|
||||
close FH;
|
||||
}
|
||||
|
||||
$found_match && $err == EXIT_NO_MATCH
|
||||
and $err = EXIT_MATCH;
|
||||
|
||||
exit $err;
|
||||
}
|
||||
|
||||
my $foo = <<'EOF';
|
||||
# The above is to *find* them.
|
||||
# This adjusts them, removing the unnecessary "if (p)" part.
|
||||
|
||||
# FIXME: do something like this as an option (doesn't do braces):
|
||||
free=xfree
|
||||
git grep -l -z "$free *(" \
|
||||
| xargs -0 useless-if-before-free -l --name="$free" \
|
||||
| xargs -0 perl -0x3b -pi -e \
|
||||
's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s+('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\)\s*;)/$2/s'
|
||||
|
||||
# Use the following to remove redundant uses of kfree inside braces.
|
||||
# Note that -0777 puts perl in slurp-whole-file mode;
|
||||
# but we have plenty of memory, these days...
|
||||
free=kfree
|
||||
git grep -l -z "$free *(" \
|
||||
| xargs -0 useless-if-before-free -l --name="$free" \
|
||||
| xargs -0 perl -0777 -pi -e \
|
||||
's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s*\{\s*('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\);)\s*\}[^\n]*$/$2/gms'
|
||||
|
||||
Be careful that the result of the above transformation is valid.
|
||||
If the matched string is followed by "else", then obviously, it won't be.
|
||||
|
||||
When modifying files, refuse to process anything other than a regular file.
|
||||
EOF
|
||||
|
||||
## Local Variables:
|
||||
## mode: perl
|
||||
## indent-tabs-mode: nil
|
||||
## eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
## time-stamp-line-limit: 50
|
||||
## time-stamp-start: "my $VERSION = '"
|
||||
## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
|
||||
## time-stamp-time-zone: "UTC0"
|
||||
## time-stamp-end: "'; # UTC"
|
||||
## End:
|
@@ -1,113 +0,0 @@
|
||||
#!/bin/sh
|
||||
# List version-controlled file names.
|
||||
|
||||
# Print a version string.
|
||||
scriptversion=2018-03-07.03; # UTC
|
||||
|
||||
# Copyright (C) 2006-2019 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
# List the specified version-controlled files.
|
||||
# With no argument, list them all. With a single DIRECTORY argument,
|
||||
# list the version-controlled files in that directory.
|
||||
|
||||
# If there's an argument, it must be a single, "."-relative directory name.
|
||||
# cvsu is part of the cvsutils package: http://www.red-bean.com/cvsutils/
|
||||
|
||||
postprocess=
|
||||
case $1 in
|
||||
--help) cat <<EOF
|
||||
Usage: $0 [-C SRCDIR] [DIR...]
|
||||
|
||||
Output a list of version-controlled files in DIR (default .), relative to
|
||||
SRCDIR (default .). SRCDIR must be the top directory of a checkout.
|
||||
|
||||
Options:
|
||||
--help print this help, then exit
|
||||
--version print version number, then exit
|
||||
-C SRCDIR change directory to SRCDIR before generating list
|
||||
|
||||
Report bugs and patches to <bug-gnulib@gnu.org>.
|
||||
EOF
|
||||
exit ;;
|
||||
|
||||
--version)
|
||||
year=`echo "$scriptversion" | sed 's/[^0-9].*//'`
|
||||
cat <<EOF
|
||||
vc-list-files $scriptversion
|
||||
Copyright (C) $year Free Software Foundation, Inc,
|
||||
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
|
||||
This is free software: you are free to change and redistribute it.
|
||||
There is NO WARRANTY, to the extent permitted by law.
|
||||
EOF
|
||||
exit ;;
|
||||
|
||||
-C)
|
||||
test "$2" = . || postprocess="| sed 's|^|$2/|'"
|
||||
cd "$2" || exit 1
|
||||
shift; shift ;;
|
||||
esac
|
||||
|
||||
test $# = 0 && set .
|
||||
|
||||
for dir
|
||||
do
|
||||
if test -d .git || test -f .git; then
|
||||
test "x$dir" = x. \
|
||||
&& dir= sed_esc= \
|
||||
|| { dir="$dir/"; sed_esc=`echo "$dir"|env sed 's,\([\\/]\),\\\\\1,g'`; }
|
||||
# Ignore git symlinks - either they point into the tree, in which case
|
||||
# we don't need to visit the target twice, or they point somewhere
|
||||
# else (often into a submodule), in which case the content does not
|
||||
# belong to this package.
|
||||
eval exec git ls-tree -r 'HEAD:"$dir"' \
|
||||
\| sed -n '"s/^100[^ ]*./$sed_esc/p"' $postprocess
|
||||
elif test -d .hg; then
|
||||
eval exec hg locate '"$dir/*"' $postprocess
|
||||
elif test -d .bzr; then
|
||||
test "$postprocess" = '' && postprocess="| sed 's|^\./||'"
|
||||
eval exec bzr ls -R --versioned '"$dir"' $postprocess
|
||||
elif test -d CVS; then
|
||||
test "$postprocess" = '' && postprocess="| sed 's|^\./||'"
|
||||
if test -x build-aux/cvsu; then
|
||||
eval build-aux/cvsu --find --types=AFGM '"$dir"' $postprocess
|
||||
elif (cvsu --help) >/dev/null 2>&1; then
|
||||
eval cvsu --find --types=AFGM '"$dir"' $postprocess
|
||||
else
|
||||
eval awk -F/ \''{ \
|
||||
if (!$1 && $3 !~ /^-/) { \
|
||||
f=FILENAME; \
|
||||
if (f ~ /CVS\/Entries$/) \
|
||||
f = substr(f, 1, length(f)-11); \
|
||||
print f $2; \
|
||||
}}'\'' \
|
||||
`find "$dir" -name Entries -print` /dev/null' $postprocess
|
||||
fi
|
||||
elif test -d .svn; then
|
||||
eval exec svn list -R '"$dir"' $postprocess
|
||||
else
|
||||
echo "$0: Failed to determine type of version control used in `pwd`" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
271
ci/Makefile
271
ci/Makefile
@@ -1,271 +0,0 @@
|
||||
# -*- makefile -*-
|
||||
# vim: filetype=make
|
||||
|
||||
# The root directory of the libvirt.git checkout
|
||||
CI_GIT_ROOT = $(shell git rev-parse --show-toplevel)
|
||||
|
||||
# The root directory for all CI-related contents
|
||||
CI_ROOTDIR = $(CI_GIT_ROOT)/ci
|
||||
|
||||
# The directory holding content on the host that we will
|
||||
# expose to the container.
|
||||
CI_SCRATCHDIR = $(CI_ROOTDIR)/scratch
|
||||
|
||||
# The directory holding the clone of the git repo that
|
||||
# we will expose to the container
|
||||
CI_HOST_SRCDIR = $(CI_SCRATCHDIR)/src
|
||||
|
||||
# The directory holding the source inside the
|
||||
# container, i.e. where we want to expose
|
||||
# the $(CI_HOST_SRCDIR) directory from the host
|
||||
CI_CONT_SRCDIR = $(CI_USER_HOME)/libvirt
|
||||
|
||||
# Relative directory to perform the build in. This
|
||||
# defaults to using a separate build dir, but can be
|
||||
# set to empty string for an in-source tree build.
|
||||
CI_VPATH = build
|
||||
|
||||
# The directory holding the build output inside the
|
||||
# container.
|
||||
CI_CONT_BUILDDIR = $(CI_CONT_SRCDIR)/$(CI_VPATH)
|
||||
|
||||
# Can be overridden with mingw{32,64}-configure if desired
|
||||
CI_CONFIGURE = $(CI_CONT_SRCDIR)/configure
|
||||
|
||||
# Default to using all possible CPUs
|
||||
CI_SMP = $(shell getconf _NPROCESSORS_ONLN)
|
||||
|
||||
# Any extra arguments to pass to make
|
||||
CI_MAKE_ARGS =
|
||||
|
||||
# Any extra arguments to pass to configure
|
||||
CI_CONFIGURE_ARGS =
|
||||
|
||||
# Script containing environment preparation steps
|
||||
CI_PREPARE_SCRIPT = $(CI_ROOTDIR)/prepare.sh
|
||||
|
||||
# Script containing build instructions
|
||||
CI_BUILD_SCRIPT = $(CI_ROOTDIR)/build.sh
|
||||
|
||||
# Location of the container images we're going to pull
|
||||
# Can be useful to override to use a locally built
|
||||
# image instead
|
||||
CI_IMAGE_PREFIX = registry.gitlab.com/libvirt/libvirt/ci-
|
||||
|
||||
# The default tag is ':latest' but if the container
|
||||
# repo above uses different conventions this can override it
|
||||
CI_IMAGE_TAG = :latest
|
||||
|
||||
# We delete the virtual root after completion, set
|
||||
# to 0 if you need to keep it around for debugging
|
||||
CI_CLEAN = 1
|
||||
|
||||
# We'll always freshly clone the virtual root each
|
||||
# time in case it was not cleaned up before. Set
|
||||
# to 1 if you want to try restarting a previously
|
||||
# preserved env
|
||||
CI_REUSE = 0
|
||||
|
||||
# We need the container process to run with current host IDs
|
||||
# so that it can access the passed in build directory
|
||||
CI_UID = $(shell id -u)
|
||||
CI_GID = $(shell id -g)
|
||||
|
||||
# We also need the user's login and home directory to prepare the
|
||||
# environment the way some programs expect it
|
||||
CI_USER_LOGIN = $(shell echo "$$USER")
|
||||
CI_USER_HOME = $(shell echo "$$HOME")
|
||||
|
||||
CI_ENGINE = auto
|
||||
# Container engine we are going to use, can be overridden per make
|
||||
# invocation, if it is not we try podman and then default to docker.
|
||||
ifeq ($(CI_ENGINE),auto)
|
||||
override CI_ENGINE = $(shell podman version >/dev/null 2>&1 && echo podman || echo docker)
|
||||
endif
|
||||
|
||||
# IDs you run as do not need to exist in
|
||||
# the container's /etc/passwd & /etc/group files, but
|
||||
# if they do not, then libvirt's 'make check' will fail
|
||||
# many tests.
|
||||
|
||||
# We do not directly mount /etc/{passwd,group} as Docker
|
||||
# is liable to mess with SELinux labelling which will
|
||||
# then prevent the host accessing them. And podman cannot
|
||||
# relabel the files due to it running rootless. So
|
||||
# copying them first is safer and less error-prone.
|
||||
CI_PWDB_MOUNTS = \
|
||||
--volume $(CI_SCRATCHDIR)/group:/etc/group:ro,z \
|
||||
--volume $(CI_SCRATCHDIR)/passwd:/etc/passwd:ro,z \
|
||||
$(NULL)
|
||||
|
||||
CI_HOME_MOUNTS = \
|
||||
--volume $(CI_SCRATCHDIR)/home:$(CI_USER_HOME):z \
|
||||
$(NULL)
|
||||
|
||||
CI_SCRIPT_MOUNTS = \
|
||||
--volume $(CI_SCRATCHDIR)/prepare:$(CI_USER_HOME)/prepare:z \
|
||||
--volume $(CI_SCRATCHDIR)/build:$(CI_USER_HOME)/build:z \
|
||||
$(NULL)
|
||||
|
||||
# Docker containers can have very large ulimits
|
||||
# for nofiles - as much as 1048576. This makes
|
||||
# libvirt very slow at exec'ing programs.
|
||||
CI_ULIMIT_FILES = 1024
|
||||
|
||||
ifeq ($(CI_ENGINE),podman)
|
||||
# Podman cannot reuse host namespace when running non-root
|
||||
# containers. Until support for --keep-uid is added we can
|
||||
# just create another mapping that will do that for us.
|
||||
# Beware, that in {uid,git}map=container_id:host_id:range, the
|
||||
# host_id does actually refer to the uid in the first mapping
|
||||
# where 0 (root) is mapped to the current user and rest is
|
||||
# offset.
|
||||
#
|
||||
# In order to set up this mapping, we need to keep all the
|
||||
# user IDs to prevent possible errors as some images might
|
||||
# expect UIDs up to 90000 (looking at you fedora), so we don't
|
||||
# want the overflowuid to be used for them. For mapping all
|
||||
# the other users properly, some math needs to be done.
|
||||
# Don't worry, it's just addition and subtraction.
|
||||
#
|
||||
# 65536 ought to be enough (tm), but for really rare cases the
|
||||
# maximums might need to be higher, but that only happens when
|
||||
# your /etc/sub{u,g}id allow users to have more IDs. Unless
|
||||
# --keep-uid is supported, let's do this in a way that should
|
||||
# work for everyone.
|
||||
CI_MAX_UID = $(shell sed -n "s/^$(CI_USER_LOGIN):[^:]\+://p" /etc/subuid)
|
||||
CI_MAX_GID = $(shell sed -n "s/^$(CI_USER_LOGIN):[^:]\+://p" /etc/subgid)
|
||||
ifeq ($(CI_MAX_UID),)
|
||||
CI_MAX_UID = 65536
|
||||
endif
|
||||
ifeq ($(CI_MAX_GID),)
|
||||
CI_MAX_GID = 65536
|
||||
endif
|
||||
CI_UID_OTHER = $(shell echo $$(($(CI_UID)+1)))
|
||||
CI_GID_OTHER = $(shell echo $$(($(CI_GID)+1)))
|
||||
CI_UID_OTHER_RANGE = $(shell echo $$(($(CI_MAX_UID)-$(CI_UID))))
|
||||
CI_GID_OTHER_RANGE = $(shell echo $$(($(CI_MAX_GID)-$(CI_GID))))
|
||||
|
||||
CI_PODMAN_ARGS = \
|
||||
--uidmap 0:1:$(CI_UID) \
|
||||
--uidmap $(CI_UID):0:1 \
|
||||
--uidmap $(CI_UID_OTHER):$(CI_UID_OTHER):$(CI_UID_OTHER_RANGE) \
|
||||
--gidmap 0:1:$(CI_GID) \
|
||||
--gidmap $(CI_GID):0:1 \
|
||||
--gidmap $(CI_GID_OTHER):$(CI_GID_OTHER):$(CI_GID_OTHER_RANGE) \
|
||||
$(NULL)
|
||||
endif
|
||||
|
||||
# Args to use when cloning a git repo.
|
||||
# -c stop it complaining about checking out a random hash
|
||||
# -q stop it displaying progress info for local clone
|
||||
# --local ensure we don't actually copy files
|
||||
CI_GIT_ARGS = \
|
||||
-c advice.detachedHead=false \
|
||||
-q \
|
||||
--local \
|
||||
$(NULL)
|
||||
|
||||
# Args to use when running the container
|
||||
# --rm stop inactive containers getting left behind
|
||||
# --user we execute as the same user & group account
|
||||
# as dev so that file ownership matches host
|
||||
# instead of root:root
|
||||
# --volume to pass in the cloned git repo & config
|
||||
# --ulimit lower files limit for performance reasons
|
||||
# --interactive
|
||||
# --tty Ensure we have ability to Ctrl-C the build
|
||||
CI_ENGINE_ARGS = \
|
||||
--rm \
|
||||
--interactive \
|
||||
--tty \
|
||||
$(CI_PODMAN_ARGS) \
|
||||
$(CI_PWDB_MOUNTS) \
|
||||
$(CI_HOME_MOUNTS) \
|
||||
$(CI_SCRIPT_MOUNTS) \
|
||||
--volume $(CI_HOST_SRCDIR):$(CI_CONT_SRCDIR):z \
|
||||
--ulimit nofile=$(CI_ULIMIT_FILES):$(CI_ULIMIT_FILES) \
|
||||
--cap-add=SYS_PTRACE \
|
||||
$(NULL)
|
||||
|
||||
ci-check-engine:
|
||||
@echo -n "Checking if $(CI_ENGINE) is available..." && \
|
||||
$(CI_ENGINE) version 1>/dev/null && echo "yes"
|
||||
|
||||
ci-prepare-tree: ci-check-engine
|
||||
@test "$(CI_REUSE)" != "1" && rm -rf $(CI_SCRATCHDIR) || :
|
||||
@if ! test -d $(CI_SCRATCHDIR) ; then \
|
||||
mkdir -p $(CI_SCRATCHDIR); \
|
||||
cp /etc/passwd $(CI_SCRATCHDIR); \
|
||||
cp /etc/group $(CI_SCRATCHDIR); \
|
||||
mkdir -p $(CI_SCRATCHDIR)/home; \
|
||||
cp "$(CI_PREPARE_SCRIPT)" $(CI_SCRATCHDIR)/prepare; \
|
||||
cp "$(CI_BUILD_SCRIPT)" $(CI_SCRATCHDIR)/build; \
|
||||
chmod +x "$(CI_SCRATCHDIR)/prepare" "$(CI_SCRATCHDIR)/build"; \
|
||||
echo "Cloning $(CI_GIT_ROOT) to $(CI_HOST_SRCDIR)"; \
|
||||
git clone $(CI_GIT_ARGS) $(CI_GIT_ROOT) $(CI_HOST_SRCDIR) || exit 1; \
|
||||
for mod in $$(git submodule | awk '{ print $$2 }' | sed -E 's,^../,,g') ; \
|
||||
do \
|
||||
test -f $(CI_GIT_ROOT)/$$mod/.git || continue ; \
|
||||
echo "Cloning $(CI_GIT_ROOT)/$$mod to $(CI_HOST_SRCDIR)/$$mod"; \
|
||||
git clone $(CI_GIT_ARGS) $(CI_GIT_ROOT)/$$mod $(CI_HOST_SRCDIR)/$$mod || exit 1; \
|
||||
done ; \
|
||||
fi
|
||||
|
||||
ci-run-command@%: ci-prepare-tree
|
||||
$(CI_ENGINE) run $(CI_ENGINE_ARGS) $(CI_IMAGE_PREFIX)$*$(CI_IMAGE_TAG) \
|
||||
/bin/bash -c ' \
|
||||
$(CI_USER_HOME)/prepare || exit 1; \
|
||||
sudo \
|
||||
--login \
|
||||
--user="#$(CI_UID)" \
|
||||
--group="#$(CI_GID)" \
|
||||
CONFIGURE_OPTS="$$CONFIGURE_OPTS" \
|
||||
CI_CONT_SRCDIR="$(CI_CONT_SRCDIR)" \
|
||||
CI_CONT_BUILDDIR="$(CI_CONT_BUILDDIR)" \
|
||||
CI_SMP="$(CI_SMP)" \
|
||||
CI_CONFIGURE="$(CI_CONFIGURE)" \
|
||||
CI_CONFIGURE_ARGS="$(CI_CONFIGURE_ARGS)" \
|
||||
CI_MAKE_ARGS="$(CI_MAKE_ARGS)" \
|
||||
$(CI_COMMAND) || exit 1'
|
||||
@test "$(CI_CLEAN)" = "1" && rm -rf $(CI_SCRATCHDIR) || :
|
||||
|
||||
ci-shell@%:
|
||||
$(MAKE) -C $(CI_ROOTDIR) ci-run-command@$* CI_COMMAND="/bin/bash"
|
||||
|
||||
ci-build@%:
|
||||
$(MAKE) -C $(CI_ROOTDIR) ci-run-command@$* CI_COMMAND="$(CI_USER_HOME)/build"
|
||||
|
||||
ci-check@%:
|
||||
$(MAKE) -C $(CI_ROOTDIR) ci-build@$* CI_MAKE_ARGS="check"
|
||||
|
||||
ci-list-images:
|
||||
@echo
|
||||
@echo "Available x86 container images:"
|
||||
@echo
|
||||
@sh list-images.sh "$(CI_IMAGE_PREFIX)" | grep -v cross
|
||||
@echo
|
||||
@echo "Available cross-compiler container images:"
|
||||
@echo
|
||||
@sh list-images.sh "$(CI_IMAGE_PREFIX)" | grep cross
|
||||
@echo
|
||||
|
||||
ci-help:
|
||||
@echo "Build libvirt inside containers used for CI"
|
||||
@echo
|
||||
@echo "Available targets:"
|
||||
@echo
|
||||
@echo " ci-build@\$$IMAGE - run a default 'make'"
|
||||
@echo " ci-check@\$$IMAGE - run a 'make check'"
|
||||
@echo " ci-shell@\$$IMAGE - run an interactive shell"
|
||||
@echo " ci-list-images - list available images"
|
||||
@echo " ci-help - show this help message"
|
||||
@echo
|
||||
@echo "Available make variables:"
|
||||
@echo
|
||||
@echo " CI_CLEAN=0 - do not delete '$(CI_SCRATCHDIR)' after completion"
|
||||
@echo " CI_REUSE=1 - re-use existing '$(CI_SCRATCHDIR)' content"
|
||||
@echo " CI_ENGINE=auto - container engine to use (podman, docker)"
|
||||
@echo " CI_CONFIGURE_ARGS= - extra arguments passed to configure"
|
||||
@echo " CI_MAKE_ARGS= - extra arguments passed to make, e.g. space delimited list of targets"
|
||||
@echo
|
@@ -1,59 +0,0 @@
|
||||
==============
|
||||
CI for libvirt
|
||||
==============
|
||||
|
||||
This document provides some information related to the CI capabilities for the
|
||||
libvirt project.
|
||||
|
||||
|
||||
Cirrus CI integration
|
||||
=====================
|
||||
|
||||
libvirt currently supports three non-Linux operating systems: Windows, FreeBSD
|
||||
and macOS. Windows cross-builds can be prepared on Linux by using `MinGW`_, but
|
||||
for both FreeBSD and macOS we need to use the actual operating system, and
|
||||
unfortunately GitLab shared runners are currently not available for either.
|
||||
|
||||
To work around this limitation, we take advantage of `Cirrus CI`_'s free
|
||||
offering: more specifically, we use the `cirrus-run`_ script to trigger Cirrus
|
||||
CI jobs from GitLab CI jobs so that the workaround is almost entirely
|
||||
transparent to users and there's no need to constantly check two separate CI
|
||||
dashboards.
|
||||
|
||||
There is, however, some one-time setup required. If you want FreeBSD and macOS
|
||||
builds to happen when you push to your GitLab repository, you need to
|
||||
|
||||
* set up a GitHub repository for the project, eg. ``yourusername/libvirt``.
|
||||
This repository needs to exist for cirrus-run to work, but it doesn't need to
|
||||
be kept up to date, so you can create it and then forget about it;
|
||||
|
||||
* enable the `Cirrus CI GitHub app`_ for your GitHub account;
|
||||
|
||||
* sign up for Cirrus CI. It's enough to log into the website using your GitHub
|
||||
account;
|
||||
|
||||
* grab an API token from the `Cirrus CI settings`_ page;
|
||||
|
||||
* in the *CI/CD / Variables* section of the settings page for your GitLab
|
||||
repository, create two new variables:
|
||||
|
||||
* ``CIRRUS_GITHUB_REPO``, containing the name of the GitHub repository
|
||||
created earlier, eg. ``yourusername/libvirt``;
|
||||
|
||||
* ``CIRRUS_API_TOKEN``, containing the Cirrus CI API token generated earlier.
|
||||
This variable **must** be marked as *Masked*, because anyone with knowledge
|
||||
of it can impersonate you as far as Cirrus CI is concerned.
|
||||
|
||||
Neither of these variables should be marked as *Protected*, because in
|
||||
general you'll want to be able to trigger Cirrus CI builds from non-protected
|
||||
branches.
|
||||
|
||||
Once this one-time setup is complete, you can just keep pushing to your GitLab
|
||||
repository as usual and you'll automatically get the additional CI coverage.
|
||||
|
||||
|
||||
.. _Cirrus CI GitHub app: https://github.com/marketplace/cirrus-ci
|
||||
.. _Cirrus CI settings: https://cirrus-ci.com/settings/profile/
|
||||
.. _Cirrus CI: https://cirrus-ci.com/
|
||||
.. _MinGW: http://mingw.org/
|
||||
.. _cirrus-run: https://github.com/sio/cirrus-run/
|
38
ci/build.sh
38
ci/build.sh
@@ -1,38 +0,0 @@
|
||||
# This script is used to build libvirt inside the container.
|
||||
#
|
||||
# You can customize it to your liking, or alternatively use a
|
||||
# completely different script by passing
|
||||
#
|
||||
# CI_BUILD_SCRIPT=/path/to/your/build/script
|
||||
#
|
||||
# to make.
|
||||
|
||||
mkdir -p "$CI_CONT_BUILDDIR" || exit 1
|
||||
cd "$CI_CONT_BUILDDIR"
|
||||
|
||||
export VIR_TEST_DEBUG=1
|
||||
NOCONFIGURE=1 "$CI_CONT_SRCDIR/autogen.sh" || exit 1
|
||||
|
||||
# $CONFIGURE_OPTS is a env that can optionally be set in the container,
|
||||
# populated at build time from the Dockerfile. A typical use case would
|
||||
# be to pass --host/--target args to trigger cross-compilation
|
||||
#
|
||||
# This can be augmented by make local args in $CI_CONFIGURE_ARGS
|
||||
"$CI_CONFIGURE" $CONFIGURE_OPTS $CI_CONFIGURE_ARGS
|
||||
if test $? != 0; then
|
||||
test -f config.log && cat config.log
|
||||
exit 1
|
||||
fi
|
||||
find -name test-suite.log -delete
|
||||
|
||||
make -j"$CI_SMP" $CI_MAKE_ARGS
|
||||
|
||||
if test $? != 0; then \
|
||||
LOGS=$(find -name test-suite.log)
|
||||
if test "$LOGS"; then
|
||||
echo "=== LOG FILE(S) START ==="
|
||||
cat $LOGS
|
||||
echo "=== LOG FILE(S) END ==="
|
||||
fi
|
||||
exit 1
|
||||
fi
|
@@ -1,25 +0,0 @@
|
||||
@CIRRUS_VM_INSTANCE_TYPE@:
|
||||
@CIRRUS_VM_IMAGE_SELECTOR@: @CIRRUS_VM_IMAGE_NAME@
|
||||
|
||||
env:
|
||||
CI_REPOSITORY_URL: "@CI_REPOSITORY_URL@"
|
||||
CI_COMMIT_REF_NAME: "@CI_COMMIT_REF_NAME@"
|
||||
CI_COMMIT_SHA: "@CI_COMMIT_SHA@"
|
||||
PATH: "@PATH@"
|
||||
PKG_CONFIG_PATH: "@PKG_CONFIG_PATH@"
|
||||
PYTHON: "@PYTHON@"
|
||||
MAKE: "@MAKE@"
|
||||
|
||||
build_task:
|
||||
install_script:
|
||||
- @INSTALL_COMMAND@ @PKGS@
|
||||
clone_script:
|
||||
- git clone --depth 100 "$CI_REPOSITORY_URL" .
|
||||
- git fetch origin "$CI_COMMIT_REF_NAME"
|
||||
- git reset --hard "$CI_COMMIT_SHA"
|
||||
build_script:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- ../autogen.sh --prefix=$(pwd)/install-root
|
||||
- if test "$(uname)" = "FreeBSD"; then $MAKE -j3 distcheck; fi
|
||||
- if test "$(uname)" = "Darwin"; then $MAKE -j3 && $MAKE -j3 install && $MAKE -j3 dist; fi
|
@@ -1,7 +0,0 @@
|
||||
PACKAGING_COMMAND='pkg'
|
||||
CC='/usr/bin/clang'
|
||||
CCACHE='/usr/local/bin/ccache'
|
||||
MAKE='/usr/local/bin/gmake'
|
||||
NINJA='/usr/local/bin/ninja'
|
||||
PYTHON='/usr/local/bin/python3'
|
||||
PKGS='augeas autoconf automake avahi bash bash-completion ca_root_nss ccache chrony cppi curl cyrus-sasl dbus diskscrub dnsmasq fusefs-libs gdb gettext gettext-tools git glib gmake gnutls hal libpcap libpciaccess libssh libssh2 libtool libxml2 libxslt lsof meson ncurses ninja p5-App-cpanminus patch perl5 pkgconf polkit py37-docutils py37-flake8 py37-pip py37-setuptools py37-wheel python3 qemu-utils radvd readline screen sudo vim yajl'
|
@@ -1,7 +0,0 @@
|
||||
PACKAGING_COMMAND='brew'
|
||||
CC='/usr/bin/clang'
|
||||
CCACHE='/usr/local/bin/ccache'
|
||||
MAKE='/usr/local/bin/gmake'
|
||||
NINJA='/usr/local/bin/ninja'
|
||||
PYTHON='/usr/local/bin/python3'
|
||||
PKGS='augeas autoconf automake bash bash-completion ccache cpanminus cppi curl dbus dnsmasq docutils flake8 gdb gettext git glib gnutls gpatch libiscsi libpcap libssh libssh2 libtool libxml2 libxslt lsof make meson ncurses ninja perl pkg-config python3 qemu readline rpcgen screen scrub vim xz yajl'
|
@@ -1,22 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
if test -z "$1"
|
||||
then
|
||||
echo "syntax: $0 PATH-TO-LCITOOL"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
LCITOOL=$1
|
||||
|
||||
if ! test -x "$LCITOOL"
|
||||
then
|
||||
echo "$LCITOOL is not executable"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
HOSTS=$($LCITOOL hosts | grep -E 'freebsd-12|macos')
|
||||
|
||||
for host in $HOSTS
|
||||
do
|
||||
$LCITOOL variables "$host" libvirt >"$host.vars"
|
||||
done
|
@@ -1,14 +0,0 @@
|
||||
CI job assets
|
||||
=============
|
||||
|
||||
This directory contains assets used in the automated CI jobs, most
|
||||
notably the Dockerfiles used to build container images in which the
|
||||
CI jobs then run.
|
||||
|
||||
The ``refresh`` script is used to re-create the Dockerfiles using the
|
||||
``lcitool`` command that is provided by repo
|
||||
https://gitlab.com/libvirt/libvirt-ci
|
||||
|
||||
The containers are built during the CI process and cached in the GitLab
|
||||
container registry of the project doing the build. The cached containers
|
||||
can be deleted at any time and will be correctly rebuilt.
|
@@ -1,139 +0,0 @@
|
||||
FROM centos:7
|
||||
|
||||
RUN echo -e '[openvz]\n\
|
||||
name=OpenVZ addons\n\
|
||||
baseurl=https://download.openvz.org/virtuozzo/releases/openvz-7.0.11-235/x86_64/os/\n\
|
||||
enabled=1\n\
|
||||
gpgcheck=1\n\
|
||||
skip_if_unavailable=0\n\
|
||||
metadata_expire=6h\n\
|
||||
priority=90\n\
|
||||
includepkgs=libprl*' > /etc/yum.repos.d/openvz.repo && \
|
||||
echo -e '-----BEGIN PGP PUBLIC KEY BLOCK-----\n\
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)\n\
|
||||
\n\
|
||||
mI0EVl80nQEEAKrEeyeTCwrzS9kYedZ/sAc/GUqlb81C7pA9SaR3fyck5mVw1Ogk\n\
|
||||
YdmNBPM2kY7QDxR9F0EpSpnxSCAXZXugsQ8KzZ0DRLVeBDQyGs9IGK5hI0zzxIil\n\
|
||||
BzfvIexLiQQhLy7YlIi8Jt/uUqKkW0pIMNMGcduY97VATtczpncpkmSzABEBAAG0\n\
|
||||
SFZpcnR1b3p6byBUZWFtIChHUEcga2V5IHNpZ25hdHVyZSBmb3IgcGFja2FnZXMp\n\
|
||||
IDxzZWN1cml0eUB2aXJ0dW96em8uY29tPoi5BBMBAgAjBQJWXzSdAhsDBwsJCAcD\n\
|
||||
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQygt9GUTNrSruIgP/er70Eyo73A1gfrjv\n\
|
||||
oPUkyo4rslVRZu3qqCwoMFtJc/Z/UxWgEka1buorlcGLa6eO/EZ49c0n+KGa4Kvt\n\
|
||||
EUboIq0yEu5i0FyAj92ifm+hNhoAbGfm0cZ4/fD0oGr3l8OsQo4+iHX4xAPwFe7Y\n\
|
||||
zABuB8I1ZDZ4OIp5tDfTTuF2LT24jQRWXzSdAQQAog2Aqb+Ptl68O7cQhWLjVGkj\n\
|
||||
yyigZrdeReLx3HloKJPBeQ/kA6uvMJc/IYS3uppMWXv9v+QenS6uhP1TUJ2k9FvM\n\
|
||||
t94MQZfALN7Vpf8AF+UeWu4Ru+y4BNzcFhrPhIFNFChOR2QqW6FkgE57D9I177NC\n\
|
||||
oJMyrlNe8wcGa178An8AEQEAAYifBBgBAgAJBQJWXzSdAhsMAAoJEMoLfRlEza0q\n\
|
||||
bKwD/3+OFVIEXnIv5XgdGRNX5fHggsUN1bb8gva7HANRlKdd4LD8foDM3F/yv/3V\n\
|
||||
igG14D5EjKz56SaBDNgiI4++hOzb2M8jhAsR86jxkXFrrP1U3ZNRKg6av9DPFAPS\n\
|
||||
WEiJKtQrZDJloqtyi/mmRa1VsV7RYR0VPJjhK/R8EQ7Ysshy\n\
|
||||
=fRMg\n\
|
||||
-----END PGP PUBLIC KEY BLOCK-----' > /etc/pki/rpm-gpg/RPM-GPG-KEY-OpenVZ && \
|
||||
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-OpenVZ && \
|
||||
yum install -y epel-release && \
|
||||
yum update -y && \
|
||||
yum install -y \
|
||||
audit-libs-devel \
|
||||
augeas \
|
||||
autoconf \
|
||||
automake \
|
||||
avahi-devel \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cyrus-sasl-devel \
|
||||
dbus-devel \
|
||||
device-mapper-devel \
|
||||
dnsmasq \
|
||||
dwarves \
|
||||
ebtables \
|
||||
fuse-devel \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
gettext-devel \
|
||||
git \
|
||||
glib2-devel \
|
||||
glibc-common \
|
||||
glibc-devel \
|
||||
glusterfs-api-devel \
|
||||
gnutls-devel \
|
||||
iproute \
|
||||
iscsi-initiator-utils \
|
||||
kmod \
|
||||
libacl-devel \
|
||||
libattr-devel \
|
||||
libblkid-devel \
|
||||
libcap-ng-devel \
|
||||
libcurl-devel \
|
||||
libiscsi-devel \
|
||||
libnl3-devel \
|
||||
libpcap-devel \
|
||||
libpciaccess-devel \
|
||||
libprlsdk-devel \
|
||||
librbd1-devel \
|
||||
libselinux-devel \
|
||||
libssh-devel \
|
||||
libssh2-devel \
|
||||
libtirpc-devel \
|
||||
libtool \
|
||||
libudev-devel \
|
||||
libwsman-devel \
|
||||
libxml2 \
|
||||
libxml2-devel \
|
||||
libxslt \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
ncurses-devel \
|
||||
net-tools \
|
||||
netcf-devel \
|
||||
nfs-utils \
|
||||
ninja-build \
|
||||
numactl-devel \
|
||||
numad \
|
||||
parted \
|
||||
parted-devel \
|
||||
patch \
|
||||
perl \
|
||||
perl-App-cpanminus \
|
||||
pkgconfig \
|
||||
polkit \
|
||||
python3 \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
python36-docutils \
|
||||
qemu-img \
|
||||
radvd \
|
||||
readline-devel \
|
||||
rpm-build \
|
||||
sanlock-devel \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
systemtap-sdt-devel \
|
||||
vim \
|
||||
wireshark-devel \
|
||||
xfsprogs-devel \
|
||||
xz \
|
||||
yajl-devel && \
|
||||
yum autoremove -y && \
|
||||
yum clean all -y && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/$(basename /usr/bin/gcc)
|
||||
|
||||
RUN pip3 install \
|
||||
meson==0.49.0
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja-build"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
@@ -1,111 +0,0 @@
|
||||
FROM centos:8
|
||||
|
||||
RUN dnf install 'dnf-command(config-manager)' -y && \
|
||||
dnf config-manager --set-enabled -y PowerTools && \
|
||||
dnf install -y epel-release && \
|
||||
dnf update -y && \
|
||||
dnf install -y \
|
||||
audit-libs-devel \
|
||||
augeas \
|
||||
autoconf \
|
||||
automake \
|
||||
avahi-devel \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cyrus-sasl-devel \
|
||||
dbus-devel \
|
||||
device-mapper-devel \
|
||||
dnsmasq \
|
||||
dwarves \
|
||||
ebtables \
|
||||
fuse-devel \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
gettext-devel \
|
||||
git \
|
||||
glib2-devel \
|
||||
glibc-devel \
|
||||
glibc-langpack-en \
|
||||
glusterfs-api-devel \
|
||||
gnutls-devel \
|
||||
iproute \
|
||||
iproute-tc \
|
||||
iscsi-initiator-utils \
|
||||
kmod \
|
||||
libacl-devel \
|
||||
libattr-devel \
|
||||
libblkid-devel \
|
||||
libcap-ng-devel \
|
||||
libcurl-devel \
|
||||
libiscsi-devel \
|
||||
libnl3-devel \
|
||||
libpcap-devel \
|
||||
libpciaccess-devel \
|
||||
librbd-devel \
|
||||
libselinux-devel \
|
||||
libssh-devel \
|
||||
libssh2-devel \
|
||||
libtirpc-devel \
|
||||
libtool \
|
||||
libudev-devel \
|
||||
libwsman-devel \
|
||||
libxml2 \
|
||||
libxml2-devel \
|
||||
libxslt \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
ncurses-devel \
|
||||
net-tools \
|
||||
netcf-devel \
|
||||
nfs-utils \
|
||||
ninja-build \
|
||||
numactl-devel \
|
||||
numad \
|
||||
parted \
|
||||
parted-devel \
|
||||
patch \
|
||||
perl \
|
||||
perl-App-cpanminus \
|
||||
pkgconfig \
|
||||
polkit \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-flake8 \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-img \
|
||||
radvd \
|
||||
readline-devel \
|
||||
rpcgen \
|
||||
rpm-build \
|
||||
sanlock-devel \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
systemtap-sdt-devel \
|
||||
vim \
|
||||
wireshark-devel \
|
||||
xfsprogs-devel \
|
||||
xz \
|
||||
yajl-devel && \
|
||||
dnf autoremove -y && \
|
||||
dnf clean all -y && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/$(basename /usr/bin/gcc)
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
@@ -1,112 +0,0 @@
|
||||
FROM centos:8
|
||||
|
||||
RUN dnf install -y centos-release-stream && \
|
||||
dnf install 'dnf-command(config-manager)' -y && \
|
||||
dnf config-manager --set-enabled -y Stream-PowerTools && \
|
||||
dnf install -y epel-release && \
|
||||
dnf update -y && \
|
||||
dnf install -y \
|
||||
audit-libs-devel \
|
||||
augeas \
|
||||
autoconf \
|
||||
automake \
|
||||
avahi-devel \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cyrus-sasl-devel \
|
||||
dbus-devel \
|
||||
device-mapper-devel \
|
||||
dnsmasq \
|
||||
dwarves \
|
||||
ebtables \
|
||||
fuse-devel \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
gettext-devel \
|
||||
git \
|
||||
glib2-devel \
|
||||
glibc-devel \
|
||||
glibc-langpack-en \
|
||||
glusterfs-api-devel \
|
||||
gnutls-devel \
|
||||
iproute \
|
||||
iproute-tc \
|
||||
iscsi-initiator-utils \
|
||||
kmod \
|
||||
libacl-devel \
|
||||
libattr-devel \
|
||||
libblkid-devel \
|
||||
libcap-ng-devel \
|
||||
libcurl-devel \
|
||||
libiscsi-devel \
|
||||
libnl3-devel \
|
||||
libpcap-devel \
|
||||
libpciaccess-devel \
|
||||
librbd-devel \
|
||||
libselinux-devel \
|
||||
libssh-devel \
|
||||
libssh2-devel \
|
||||
libtirpc-devel \
|
||||
libtool \
|
||||
libudev-devel \
|
||||
libwsman-devel \
|
||||
libxml2 \
|
||||
libxml2-devel \
|
||||
libxslt \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
ncurses-devel \
|
||||
net-tools \
|
||||
netcf-devel \
|
||||
nfs-utils \
|
||||
ninja-build \
|
||||
numactl-devel \
|
||||
numad \
|
||||
parted \
|
||||
parted-devel \
|
||||
patch \
|
||||
perl \
|
||||
perl-App-cpanminus \
|
||||
pkgconfig \
|
||||
polkit \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-flake8 \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-img \
|
||||
radvd \
|
||||
readline-devel \
|
||||
rpcgen \
|
||||
rpm-build \
|
||||
sanlock-devel \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
systemtap-sdt-devel \
|
||||
vim \
|
||||
wireshark-devel \
|
||||
xfsprogs-devel \
|
||||
xz \
|
||||
yajl-devel && \
|
||||
dnf autoremove -y && \
|
||||
dnf clean all -y && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/$(basename /usr/bin/gcc)
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
@@ -1,125 +0,0 @@
|
||||
FROM debian:10
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libc-dev-bin \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libxml2-utils \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
vim \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/aarch64-linux-gnu-cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/aarch64-linux-gnu-$(basename /usr/bin/gcc)
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
dpkg --add-architecture arm64 && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y dpkg-dev && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
gcc-aarch64-linux-gnu \
|
||||
libacl1-dev:arm64 \
|
||||
libapparmor-dev:arm64 \
|
||||
libattr1-dev:arm64 \
|
||||
libaudit-dev:arm64 \
|
||||
libavahi-client-dev:arm64 \
|
||||
libblkid-dev:arm64 \
|
||||
libc6-dev:arm64 \
|
||||
libcap-ng-dev:arm64 \
|
||||
libcurl4-gnutls-dev:arm64 \
|
||||
libdbus-1-dev:arm64 \
|
||||
libdevmapper-dev:arm64 \
|
||||
libfuse-dev:arm64 \
|
||||
libglib2.0-dev:arm64 \
|
||||
libglusterfs-dev:arm64 \
|
||||
libgnutls28-dev:arm64 \
|
||||
libiscsi-dev:arm64 \
|
||||
libncurses-dev:arm64 \
|
||||
libnl-3-dev:arm64 \
|
||||
libnl-route-3-dev:arm64 \
|
||||
libnuma-dev:arm64 \
|
||||
libparted-dev:arm64 \
|
||||
libpcap0.8-dev:arm64 \
|
||||
libpciaccess-dev:arm64 \
|
||||
librbd-dev:arm64 \
|
||||
libreadline-dev:arm64 \
|
||||
libsanlock-dev:arm64 \
|
||||
libsasl2-dev:arm64 \
|
||||
libselinux1-dev:arm64 \
|
||||
libssh-gcrypt-dev:arm64 \
|
||||
libssh2-1-dev:arm64 \
|
||||
libtirpc-dev:arm64 \
|
||||
libudev-dev:arm64 \
|
||||
libxen-dev:arm64 \
|
||||
libxml2-dev:arm64 \
|
||||
libyajl-dev:arm64 \
|
||||
xfslibs-dev:arm64 && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
||||
|
||||
ENV ABI "aarch64-linux-gnu"
|
||||
ENV CONFIGURE_OPTS "--host=aarch64-linux-gnu"
|
@@ -1,123 +0,0 @@
|
||||
FROM debian:10
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libc-dev-bin \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libxml2-utils \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
vim \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/arm-linux-gnueabi-cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/arm-linux-gnueabi-$(basename /usr/bin/gcc)
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
dpkg --add-architecture armel && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y dpkg-dev && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
gcc-arm-linux-gnueabi \
|
||||
libacl1-dev:armel \
|
||||
libapparmor-dev:armel \
|
||||
libattr1-dev:armel \
|
||||
libaudit-dev:armel \
|
||||
libavahi-client-dev:armel \
|
||||
libblkid-dev:armel \
|
||||
libc6-dev:armel \
|
||||
libcap-ng-dev:armel \
|
||||
libcurl4-gnutls-dev:armel \
|
||||
libdbus-1-dev:armel \
|
||||
libdevmapper-dev:armel \
|
||||
libfuse-dev:armel \
|
||||
libglib2.0-dev:armel \
|
||||
libglusterfs-dev:armel \
|
||||
libgnutls28-dev:armel \
|
||||
libiscsi-dev:armel \
|
||||
libncurses-dev:armel \
|
||||
libnl-3-dev:armel \
|
||||
libnl-route-3-dev:armel \
|
||||
libparted-dev:armel \
|
||||
libpcap0.8-dev:armel \
|
||||
libpciaccess-dev:armel \
|
||||
librbd-dev:armel \
|
||||
libreadline-dev:armel \
|
||||
libsanlock-dev:armel \
|
||||
libsasl2-dev:armel \
|
||||
libselinux1-dev:armel \
|
||||
libssh-gcrypt-dev:armel \
|
||||
libssh2-1-dev:armel \
|
||||
libtirpc-dev:armel \
|
||||
libudev-dev:armel \
|
||||
libxml2-dev:armel \
|
||||
libyajl-dev:armel \
|
||||
xfslibs-dev:armel && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
||||
|
||||
ENV ABI "arm-linux-gnueabi"
|
||||
ENV CONFIGURE_OPTS "--host=arm-linux-gnueabi"
|
@@ -1,124 +0,0 @@
|
||||
FROM debian:10
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libc-dev-bin \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libxml2-utils \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
vim \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/arm-linux-gnueabihf-cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/arm-linux-gnueabihf-$(basename /usr/bin/gcc)
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
dpkg --add-architecture armhf && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y dpkg-dev && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
gcc-arm-linux-gnueabihf \
|
||||
libacl1-dev:armhf \
|
||||
libapparmor-dev:armhf \
|
||||
libattr1-dev:armhf \
|
||||
libaudit-dev:armhf \
|
||||
libavahi-client-dev:armhf \
|
||||
libblkid-dev:armhf \
|
||||
libc6-dev:armhf \
|
||||
libcap-ng-dev:armhf \
|
||||
libcurl4-gnutls-dev:armhf \
|
||||
libdbus-1-dev:armhf \
|
||||
libdevmapper-dev:armhf \
|
||||
libfuse-dev:armhf \
|
||||
libglib2.0-dev:armhf \
|
||||
libglusterfs-dev:armhf \
|
||||
libgnutls28-dev:armhf \
|
||||
libiscsi-dev:armhf \
|
||||
libncurses-dev:armhf \
|
||||
libnl-3-dev:armhf \
|
||||
libnl-route-3-dev:armhf \
|
||||
libparted-dev:armhf \
|
||||
libpcap0.8-dev:armhf \
|
||||
libpciaccess-dev:armhf \
|
||||
librbd-dev:armhf \
|
||||
libreadline-dev:armhf \
|
||||
libsanlock-dev:armhf \
|
||||
libsasl2-dev:armhf \
|
||||
libselinux1-dev:armhf \
|
||||
libssh-gcrypt-dev:armhf \
|
||||
libssh2-1-dev:armhf \
|
||||
libtirpc-dev:armhf \
|
||||
libudev-dev:armhf \
|
||||
libxen-dev:armhf \
|
||||
libxml2-dev:armhf \
|
||||
libyajl-dev:armhf \
|
||||
xfslibs-dev:armhf && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
||||
|
||||
ENV ABI "arm-linux-gnueabihf"
|
||||
ENV CONFIGURE_OPTS "--host=arm-linux-gnueabihf"
|
@@ -1,124 +0,0 @@
|
||||
FROM debian:10
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libc-dev-bin \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libxml2-utils \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
vim \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/i686-linux-gnu-cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/i686-linux-gnu-$(basename /usr/bin/gcc)
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
dpkg --add-architecture i386 && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y dpkg-dev && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
gcc-i686-linux-gnu \
|
||||
libacl1-dev:i386 \
|
||||
libapparmor-dev:i386 \
|
||||
libattr1-dev:i386 \
|
||||
libaudit-dev:i386 \
|
||||
libavahi-client-dev:i386 \
|
||||
libblkid-dev:i386 \
|
||||
libc6-dev:i386 \
|
||||
libcap-ng-dev:i386 \
|
||||
libcurl4-gnutls-dev:i386 \
|
||||
libdbus-1-dev:i386 \
|
||||
libdevmapper-dev:i386 \
|
||||
libfuse-dev:i386 \
|
||||
libglib2.0-dev:i386 \
|
||||
libglusterfs-dev:i386 \
|
||||
libgnutls28-dev:i386 \
|
||||
libiscsi-dev:i386 \
|
||||
libncurses-dev:i386 \
|
||||
libnl-3-dev:i386 \
|
||||
libnl-route-3-dev:i386 \
|
||||
libnuma-dev:i386 \
|
||||
libparted-dev:i386 \
|
||||
libpcap0.8-dev:i386 \
|
||||
libpciaccess-dev:i386 \
|
||||
librbd-dev:i386 \
|
||||
libreadline-dev:i386 \
|
||||
libsanlock-dev:i386 \
|
||||
libsasl2-dev:i386 \
|
||||
libselinux1-dev:i386 \
|
||||
libssh-gcrypt-dev:i386 \
|
||||
libssh2-1-dev:i386 \
|
||||
libtirpc-dev:i386 \
|
||||
libudev-dev:i386 \
|
||||
libxml2-dev:i386 \
|
||||
libyajl-dev:i386 \
|
||||
xfslibs-dev:i386 && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
||||
|
||||
ENV ABI "i686-linux-gnu"
|
||||
ENV CONFIGURE_OPTS "--host=i686-linux-gnu"
|
@@ -1,124 +0,0 @@
|
||||
FROM debian:10
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libc-dev-bin \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libxml2-utils \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
vim \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/mips-linux-gnu-cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/mips-linux-gnu-$(basename /usr/bin/gcc)
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
dpkg --add-architecture mips && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y dpkg-dev && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
gcc-mips-linux-gnu \
|
||||
libacl1-dev:mips \
|
||||
libapparmor-dev:mips \
|
||||
libattr1-dev:mips \
|
||||
libaudit-dev:mips \
|
||||
libavahi-client-dev:mips \
|
||||
libblkid-dev:mips \
|
||||
libc6-dev:mips \
|
||||
libcap-ng-dev:mips \
|
||||
libcurl4-gnutls-dev:mips \
|
||||
libdbus-1-dev:mips \
|
||||
libdevmapper-dev:mips \
|
||||
libfuse-dev:mips \
|
||||
libglib2.0-dev:mips \
|
||||
libglusterfs-dev:mips \
|
||||
libgnutls28-dev:mips \
|
||||
libiscsi-dev:mips \
|
||||
libncurses-dev:mips \
|
||||
libnl-3-dev:mips \
|
||||
libnl-route-3-dev:mips \
|
||||
libnuma-dev:mips \
|
||||
libparted-dev:mips \
|
||||
libpcap0.8-dev:mips \
|
||||
libpciaccess-dev:mips \
|
||||
librbd-dev:mips \
|
||||
libreadline-dev:mips \
|
||||
libsanlock-dev:mips \
|
||||
libsasl2-dev:mips \
|
||||
libselinux1-dev:mips \
|
||||
libssh-gcrypt-dev:mips \
|
||||
libssh2-1-dev:mips \
|
||||
libtirpc-dev:mips \
|
||||
libudev-dev:mips \
|
||||
libxml2-dev:mips \
|
||||
libyajl-dev:mips \
|
||||
xfslibs-dev:mips && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
||||
|
||||
ENV ABI "mips-linux-gnu"
|
||||
ENV CONFIGURE_OPTS "--host=mips-linux-gnu"
|
@@ -1,124 +0,0 @@
|
||||
FROM debian:10
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libc-dev-bin \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libxml2-utils \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
vim \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/mips64el-linux-gnuabi64-cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/mips64el-linux-gnuabi64-$(basename /usr/bin/gcc)
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
dpkg --add-architecture mips64el && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y dpkg-dev && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
gcc-mips64el-linux-gnuabi64 \
|
||||
libacl1-dev:mips64el \
|
||||
libapparmor-dev:mips64el \
|
||||
libattr1-dev:mips64el \
|
||||
libaudit-dev:mips64el \
|
||||
libavahi-client-dev:mips64el \
|
||||
libblkid-dev:mips64el \
|
||||
libc6-dev:mips64el \
|
||||
libcap-ng-dev:mips64el \
|
||||
libcurl4-gnutls-dev:mips64el \
|
||||
libdbus-1-dev:mips64el \
|
||||
libdevmapper-dev:mips64el \
|
||||
libfuse-dev:mips64el \
|
||||
libglib2.0-dev:mips64el \
|
||||
libglusterfs-dev:mips64el \
|
||||
libgnutls28-dev:mips64el \
|
||||
libiscsi-dev:mips64el \
|
||||
libncurses-dev:mips64el \
|
||||
libnl-3-dev:mips64el \
|
||||
libnl-route-3-dev:mips64el \
|
||||
libnuma-dev:mips64el \
|
||||
libparted-dev:mips64el \
|
||||
libpcap0.8-dev:mips64el \
|
||||
libpciaccess-dev:mips64el \
|
||||
librbd-dev:mips64el \
|
||||
libreadline-dev:mips64el \
|
||||
libsanlock-dev:mips64el \
|
||||
libsasl2-dev:mips64el \
|
||||
libselinux1-dev:mips64el \
|
||||
libssh-gcrypt-dev:mips64el \
|
||||
libssh2-1-dev:mips64el \
|
||||
libtirpc-dev:mips64el \
|
||||
libudev-dev:mips64el \
|
||||
libxml2-dev:mips64el \
|
||||
libyajl-dev:mips64el \
|
||||
xfslibs-dev:mips64el && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
||||
|
||||
ENV ABI "mips64el-linux-gnuabi64"
|
||||
ENV CONFIGURE_OPTS "--host=mips64el-linux-gnuabi64"
|
@@ -1,124 +0,0 @@
|
||||
FROM debian:10
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libc-dev-bin \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libxml2-utils \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
vim \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/mipsel-linux-gnu-cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/mipsel-linux-gnu-$(basename /usr/bin/gcc)
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
dpkg --add-architecture mipsel && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y dpkg-dev && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
gcc-mipsel-linux-gnu \
|
||||
libacl1-dev:mipsel \
|
||||
libapparmor-dev:mipsel \
|
||||
libattr1-dev:mipsel \
|
||||
libaudit-dev:mipsel \
|
||||
libavahi-client-dev:mipsel \
|
||||
libblkid-dev:mipsel \
|
||||
libc6-dev:mipsel \
|
||||
libcap-ng-dev:mipsel \
|
||||
libcurl4-gnutls-dev:mipsel \
|
||||
libdbus-1-dev:mipsel \
|
||||
libdevmapper-dev:mipsel \
|
||||
libfuse-dev:mipsel \
|
||||
libglib2.0-dev:mipsel \
|
||||
libglusterfs-dev:mipsel \
|
||||
libgnutls28-dev:mipsel \
|
||||
libiscsi-dev:mipsel \
|
||||
libncurses-dev:mipsel \
|
||||
libnl-3-dev:mipsel \
|
||||
libnl-route-3-dev:mipsel \
|
||||
libnuma-dev:mipsel \
|
||||
libparted-dev:mipsel \
|
||||
libpcap0.8-dev:mipsel \
|
||||
libpciaccess-dev:mipsel \
|
||||
librbd-dev:mipsel \
|
||||
libreadline-dev:mipsel \
|
||||
libsanlock-dev:mipsel \
|
||||
libsasl2-dev:mipsel \
|
||||
libselinux1-dev:mipsel \
|
||||
libssh-gcrypt-dev:mipsel \
|
||||
libssh2-1-dev:mipsel \
|
||||
libtirpc-dev:mipsel \
|
||||
libudev-dev:mipsel \
|
||||
libxml2-dev:mipsel \
|
||||
libyajl-dev:mipsel \
|
||||
xfslibs-dev:mipsel && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
||||
|
||||
ENV ABI "mipsel-linux-gnu"
|
||||
ENV CONFIGURE_OPTS "--host=mipsel-linux-gnu"
|
@@ -1,124 +0,0 @@
|
||||
FROM debian:10
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libc-dev-bin \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libxml2-utils \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
vim \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/powerpc64le-linux-gnu-cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/powerpc64le-linux-gnu-$(basename /usr/bin/gcc)
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
dpkg --add-architecture ppc64el && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y dpkg-dev && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
gcc-powerpc64le-linux-gnu \
|
||||
libacl1-dev:ppc64el \
|
||||
libapparmor-dev:ppc64el \
|
||||
libattr1-dev:ppc64el \
|
||||
libaudit-dev:ppc64el \
|
||||
libavahi-client-dev:ppc64el \
|
||||
libblkid-dev:ppc64el \
|
||||
libc6-dev:ppc64el \
|
||||
libcap-ng-dev:ppc64el \
|
||||
libcurl4-gnutls-dev:ppc64el \
|
||||
libdbus-1-dev:ppc64el \
|
||||
libdevmapper-dev:ppc64el \
|
||||
libfuse-dev:ppc64el \
|
||||
libglib2.0-dev:ppc64el \
|
||||
libglusterfs-dev:ppc64el \
|
||||
libgnutls28-dev:ppc64el \
|
||||
libiscsi-dev:ppc64el \
|
||||
libncurses-dev:ppc64el \
|
||||
libnl-3-dev:ppc64el \
|
||||
libnl-route-3-dev:ppc64el \
|
||||
libnuma-dev:ppc64el \
|
||||
libparted-dev:ppc64el \
|
||||
libpcap0.8-dev:ppc64el \
|
||||
libpciaccess-dev:ppc64el \
|
||||
librbd-dev:ppc64el \
|
||||
libreadline-dev:ppc64el \
|
||||
libsanlock-dev:ppc64el \
|
||||
libsasl2-dev:ppc64el \
|
||||
libselinux1-dev:ppc64el \
|
||||
libssh-gcrypt-dev:ppc64el \
|
||||
libssh2-1-dev:ppc64el \
|
||||
libtirpc-dev:ppc64el \
|
||||
libudev-dev:ppc64el \
|
||||
libxml2-dev:ppc64el \
|
||||
libyajl-dev:ppc64el \
|
||||
xfslibs-dev:ppc64el && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
||||
|
||||
ENV ABI "powerpc64le-linux-gnu"
|
||||
ENV CONFIGURE_OPTS "--host=powerpc64le-linux-gnu"
|
@@ -1,124 +0,0 @@
|
||||
FROM debian:10
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libc-dev-bin \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libxml2-utils \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
vim \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/s390x-linux-gnu-cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/s390x-linux-gnu-$(basename /usr/bin/gcc)
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
dpkg --add-architecture s390x && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y dpkg-dev && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
gcc-s390x-linux-gnu \
|
||||
libacl1-dev:s390x \
|
||||
libapparmor-dev:s390x \
|
||||
libattr1-dev:s390x \
|
||||
libaudit-dev:s390x \
|
||||
libavahi-client-dev:s390x \
|
||||
libblkid-dev:s390x \
|
||||
libc6-dev:s390x \
|
||||
libcap-ng-dev:s390x \
|
||||
libcurl4-gnutls-dev:s390x \
|
||||
libdbus-1-dev:s390x \
|
||||
libdevmapper-dev:s390x \
|
||||
libfuse-dev:s390x \
|
||||
libglib2.0-dev:s390x \
|
||||
libglusterfs-dev:s390x \
|
||||
libgnutls28-dev:s390x \
|
||||
libiscsi-dev:s390x \
|
||||
libncurses-dev:s390x \
|
||||
libnl-3-dev:s390x \
|
||||
libnl-route-3-dev:s390x \
|
||||
libnuma-dev:s390x \
|
||||
libparted-dev:s390x \
|
||||
libpcap0.8-dev:s390x \
|
||||
libpciaccess-dev:s390x \
|
||||
librbd-dev:s390x \
|
||||
libreadline-dev:s390x \
|
||||
libsanlock-dev:s390x \
|
||||
libsasl2-dev:s390x \
|
||||
libselinux1-dev:s390x \
|
||||
libssh-gcrypt-dev:s390x \
|
||||
libssh2-1-dev:s390x \
|
||||
libtirpc-dev:s390x \
|
||||
libudev-dev:s390x \
|
||||
libxml2-dev:s390x \
|
||||
libyajl-dev:s390x \
|
||||
xfslibs-dev:s390x && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
||||
|
||||
ENV ABI "s390x-linux-gnu"
|
||||
ENV CONFIGURE_OPTS "--host=s390x-linux-gnu"
|
@@ -1,115 +0,0 @@
|
||||
FROM debian:10
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libacl1-dev \
|
||||
libapparmor-dev \
|
||||
libattr1-dev \
|
||||
libaudit-dev \
|
||||
libavahi-client-dev \
|
||||
libblkid-dev \
|
||||
libc-dev-bin \
|
||||
libc6-dev \
|
||||
libcap-ng-dev \
|
||||
libcurl4-gnutls-dev \
|
||||
libdbus-1-dev \
|
||||
libdevmapper-dev \
|
||||
libfuse-dev \
|
||||
libglib2.0-dev \
|
||||
libglusterfs-dev \
|
||||
libgnutls28-dev \
|
||||
libiscsi-dev \
|
||||
libncurses-dev \
|
||||
libnetcf-dev \
|
||||
libnl-3-dev \
|
||||
libnl-route-3-dev \
|
||||
libnuma-dev \
|
||||
libparted-dev \
|
||||
libpcap0.8-dev \
|
||||
libpciaccess-dev \
|
||||
librbd-dev \
|
||||
libreadline-dev \
|
||||
libsanlock-dev \
|
||||
libsasl2-dev \
|
||||
libselinux1-dev \
|
||||
libssh-gcrypt-dev \
|
||||
libssh2-1-dev \
|
||||
libtirpc-dev \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libudev-dev \
|
||||
libxen-dev \
|
||||
libxml2-dev \
|
||||
libxml2-utils \
|
||||
libyajl-dev \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
systemtap-sdt-dev \
|
||||
vim \
|
||||
wireshark-dev \
|
||||
xfslibs-dev \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/$(basename /usr/bin/gcc)
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
@@ -1,125 +0,0 @@
|
||||
FROM debian:sid
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libc-dev-bin \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libxml2-utils \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
vim \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/aarch64-linux-gnu-cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/aarch64-linux-gnu-$(basename /usr/bin/gcc)
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
dpkg --add-architecture arm64 && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y dpkg-dev && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
gcc-aarch64-linux-gnu \
|
||||
libacl1-dev:arm64 \
|
||||
libapparmor-dev:arm64 \
|
||||
libattr1-dev:arm64 \
|
||||
libaudit-dev:arm64 \
|
||||
libavahi-client-dev:arm64 \
|
||||
libblkid-dev:arm64 \
|
||||
libc6-dev:arm64 \
|
||||
libcap-ng-dev:arm64 \
|
||||
libcurl4-gnutls-dev:arm64 \
|
||||
libdbus-1-dev:arm64 \
|
||||
libdevmapper-dev:arm64 \
|
||||
libfuse-dev:arm64 \
|
||||
libglib2.0-dev:arm64 \
|
||||
libglusterfs-dev:arm64 \
|
||||
libgnutls28-dev:arm64 \
|
||||
libiscsi-dev:arm64 \
|
||||
libncurses-dev:arm64 \
|
||||
libnl-3-dev:arm64 \
|
||||
libnl-route-3-dev:arm64 \
|
||||
libnuma-dev:arm64 \
|
||||
libparted-dev:arm64 \
|
||||
libpcap0.8-dev:arm64 \
|
||||
libpciaccess-dev:arm64 \
|
||||
librbd-dev:arm64 \
|
||||
libreadline-dev:arm64 \
|
||||
libsanlock-dev:arm64 \
|
||||
libsasl2-dev:arm64 \
|
||||
libselinux1-dev:arm64 \
|
||||
libssh-gcrypt-dev:arm64 \
|
||||
libssh2-1-dev:arm64 \
|
||||
libtirpc-dev:arm64 \
|
||||
libudev-dev:arm64 \
|
||||
libxen-dev:arm64 \
|
||||
libxml2-dev:arm64 \
|
||||
libyajl-dev:arm64 \
|
||||
xfslibs-dev:arm64 && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
||||
|
||||
ENV ABI "aarch64-linux-gnu"
|
||||
ENV CONFIGURE_OPTS "--host=aarch64-linux-gnu"
|
@@ -1,123 +0,0 @@
|
||||
FROM debian:sid
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libc-dev-bin \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libxml2-utils \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
vim \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/arm-linux-gnueabi-cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/arm-linux-gnueabi-$(basename /usr/bin/gcc)
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
dpkg --add-architecture armel && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y dpkg-dev && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
gcc-arm-linux-gnueabi \
|
||||
libacl1-dev:armel \
|
||||
libapparmor-dev:armel \
|
||||
libattr1-dev:armel \
|
||||
libaudit-dev:armel \
|
||||
libavahi-client-dev:armel \
|
||||
libblkid-dev:armel \
|
||||
libc6-dev:armel \
|
||||
libcap-ng-dev:armel \
|
||||
libcurl4-gnutls-dev:armel \
|
||||
libdbus-1-dev:armel \
|
||||
libdevmapper-dev:armel \
|
||||
libfuse-dev:armel \
|
||||
libglib2.0-dev:armel \
|
||||
libglusterfs-dev:armel \
|
||||
libgnutls28-dev:armel \
|
||||
libiscsi-dev:armel \
|
||||
libncurses-dev:armel \
|
||||
libnl-3-dev:armel \
|
||||
libnl-route-3-dev:armel \
|
||||
libparted-dev:armel \
|
||||
libpcap0.8-dev:armel \
|
||||
libpciaccess-dev:armel \
|
||||
librbd-dev:armel \
|
||||
libreadline-dev:armel \
|
||||
libsanlock-dev:armel \
|
||||
libsasl2-dev:armel \
|
||||
libselinux1-dev:armel \
|
||||
libssh-gcrypt-dev:armel \
|
||||
libssh2-1-dev:armel \
|
||||
libtirpc-dev:armel \
|
||||
libudev-dev:armel \
|
||||
libxml2-dev:armel \
|
||||
libyajl-dev:armel \
|
||||
xfslibs-dev:armel && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
||||
|
||||
ENV ABI "arm-linux-gnueabi"
|
||||
ENV CONFIGURE_OPTS "--host=arm-linux-gnueabi"
|
@@ -1,124 +0,0 @@
|
||||
FROM debian:sid
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libc-dev-bin \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libxml2-utils \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
vim \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/arm-linux-gnueabihf-cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/arm-linux-gnueabihf-$(basename /usr/bin/gcc)
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
dpkg --add-architecture armhf && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y dpkg-dev && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
gcc-arm-linux-gnueabihf \
|
||||
libacl1-dev:armhf \
|
||||
libapparmor-dev:armhf \
|
||||
libattr1-dev:armhf \
|
||||
libaudit-dev:armhf \
|
||||
libavahi-client-dev:armhf \
|
||||
libblkid-dev:armhf \
|
||||
libc6-dev:armhf \
|
||||
libcap-ng-dev:armhf \
|
||||
libcurl4-gnutls-dev:armhf \
|
||||
libdbus-1-dev:armhf \
|
||||
libdevmapper-dev:armhf \
|
||||
libfuse-dev:armhf \
|
||||
libglib2.0-dev:armhf \
|
||||
libglusterfs-dev:armhf \
|
||||
libgnutls28-dev:armhf \
|
||||
libiscsi-dev:armhf \
|
||||
libncurses-dev:armhf \
|
||||
libnl-3-dev:armhf \
|
||||
libnl-route-3-dev:armhf \
|
||||
libparted-dev:armhf \
|
||||
libpcap0.8-dev:armhf \
|
||||
libpciaccess-dev:armhf \
|
||||
librbd-dev:armhf \
|
||||
libreadline-dev:armhf \
|
||||
libsanlock-dev:armhf \
|
||||
libsasl2-dev:armhf \
|
||||
libselinux1-dev:armhf \
|
||||
libssh-gcrypt-dev:armhf \
|
||||
libssh2-1-dev:armhf \
|
||||
libtirpc-dev:armhf \
|
||||
libudev-dev:armhf \
|
||||
libxen-dev:armhf \
|
||||
libxml2-dev:armhf \
|
||||
libyajl-dev:armhf \
|
||||
xfslibs-dev:armhf && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
||||
|
||||
ENV ABI "arm-linux-gnueabihf"
|
||||
ENV CONFIGURE_OPTS "--host=arm-linux-gnueabihf"
|
@@ -1,124 +0,0 @@
|
||||
FROM debian:sid
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libc-dev-bin \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libxml2-utils \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
vim \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/i686-linux-gnu-cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/i686-linux-gnu-$(basename /usr/bin/gcc)
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
dpkg --add-architecture i386 && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y dpkg-dev && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
gcc-i686-linux-gnu \
|
||||
libacl1-dev:i386 \
|
||||
libapparmor-dev:i386 \
|
||||
libattr1-dev:i386 \
|
||||
libaudit-dev:i386 \
|
||||
libavahi-client-dev:i386 \
|
||||
libblkid-dev:i386 \
|
||||
libc6-dev:i386 \
|
||||
libcap-ng-dev:i386 \
|
||||
libcurl4-gnutls-dev:i386 \
|
||||
libdbus-1-dev:i386 \
|
||||
libdevmapper-dev:i386 \
|
||||
libfuse-dev:i386 \
|
||||
libglib2.0-dev:i386 \
|
||||
libglusterfs-dev:i386 \
|
||||
libgnutls28-dev:i386 \
|
||||
libiscsi-dev:i386 \
|
||||
libncurses-dev:i386 \
|
||||
libnl-3-dev:i386 \
|
||||
libnl-route-3-dev:i386 \
|
||||
libnuma-dev:i386 \
|
||||
libparted-dev:i386 \
|
||||
libpcap0.8-dev:i386 \
|
||||
libpciaccess-dev:i386 \
|
||||
librbd-dev:i386 \
|
||||
libreadline-dev:i386 \
|
||||
libsanlock-dev:i386 \
|
||||
libsasl2-dev:i386 \
|
||||
libselinux1-dev:i386 \
|
||||
libssh-gcrypt-dev:i386 \
|
||||
libssh2-1-dev:i386 \
|
||||
libtirpc-dev:i386 \
|
||||
libudev-dev:i386 \
|
||||
libxml2-dev:i386 \
|
||||
libyajl-dev:i386 \
|
||||
xfslibs-dev:i386 && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
||||
|
||||
ENV ABI "i686-linux-gnu"
|
||||
ENV CONFIGURE_OPTS "--host=i686-linux-gnu"
|
@@ -1,124 +0,0 @@
|
||||
FROM debian:sid
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libc-dev-bin \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libxml2-utils \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
vim \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/mips64el-linux-gnuabi64-cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/mips64el-linux-gnuabi64-$(basename /usr/bin/gcc)
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
dpkg --add-architecture mips64el && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y dpkg-dev && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
gcc-mips64el-linux-gnuabi64 \
|
||||
libacl1-dev:mips64el \
|
||||
libapparmor-dev:mips64el \
|
||||
libattr1-dev:mips64el \
|
||||
libaudit-dev:mips64el \
|
||||
libavahi-client-dev:mips64el \
|
||||
libblkid-dev:mips64el \
|
||||
libc6-dev:mips64el \
|
||||
libcap-ng-dev:mips64el \
|
||||
libcurl4-gnutls-dev:mips64el \
|
||||
libdbus-1-dev:mips64el \
|
||||
libdevmapper-dev:mips64el \
|
||||
libfuse-dev:mips64el \
|
||||
libglib2.0-dev:mips64el \
|
||||
libglusterfs-dev:mips64el \
|
||||
libgnutls28-dev:mips64el \
|
||||
libiscsi-dev:mips64el \
|
||||
libncurses-dev:mips64el \
|
||||
libnl-3-dev:mips64el \
|
||||
libnl-route-3-dev:mips64el \
|
||||
libnuma-dev:mips64el \
|
||||
libparted-dev:mips64el \
|
||||
libpcap0.8-dev:mips64el \
|
||||
libpciaccess-dev:mips64el \
|
||||
librbd-dev:mips64el \
|
||||
libreadline-dev:mips64el \
|
||||
libsanlock-dev:mips64el \
|
||||
libsasl2-dev:mips64el \
|
||||
libselinux1-dev:mips64el \
|
||||
libssh-gcrypt-dev:mips64el \
|
||||
libssh2-1-dev:mips64el \
|
||||
libtirpc-dev:mips64el \
|
||||
libudev-dev:mips64el \
|
||||
libxml2-dev:mips64el \
|
||||
libyajl-dev:mips64el \
|
||||
xfslibs-dev:mips64el && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
||||
|
||||
ENV ABI "mips64el-linux-gnuabi64"
|
||||
ENV CONFIGURE_OPTS "--host=mips64el-linux-gnuabi64"
|
@@ -1,123 +0,0 @@
|
||||
FROM debian:sid
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libc-dev-bin \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libxml2-utils \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
vim \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/mipsel-linux-gnu-cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/mipsel-linux-gnu-$(basename /usr/bin/gcc)
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
dpkg --add-architecture mipsel && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y dpkg-dev && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
gcc-mipsel-linux-gnu \
|
||||
libacl1-dev:mipsel \
|
||||
libapparmor-dev:mipsel \
|
||||
libattr1-dev:mipsel \
|
||||
libaudit-dev:mipsel \
|
||||
libavahi-client-dev:mipsel \
|
||||
libblkid-dev:mipsel \
|
||||
libc6-dev:mipsel \
|
||||
libcap-ng-dev:mipsel \
|
||||
libcurl4-gnutls-dev:mipsel \
|
||||
libdbus-1-dev:mipsel \
|
||||
libdevmapper-dev:mipsel \
|
||||
libfuse-dev:mipsel \
|
||||
libglib2.0-dev:mipsel \
|
||||
libglusterfs-dev:mipsel \
|
||||
libgnutls28-dev:mipsel \
|
||||
libiscsi-dev:mipsel \
|
||||
libncurses-dev:mipsel \
|
||||
libnl-3-dev:mipsel \
|
||||
libnl-route-3-dev:mipsel \
|
||||
libnuma-dev:mipsel \
|
||||
libparted-dev:mipsel \
|
||||
libpcap0.8-dev:mipsel \
|
||||
libpciaccess-dev:mipsel \
|
||||
libreadline-dev:mipsel \
|
||||
libsanlock-dev:mipsel \
|
||||
libsasl2-dev:mipsel \
|
||||
libselinux1-dev:mipsel \
|
||||
libssh-gcrypt-dev:mipsel \
|
||||
libssh2-1-dev:mipsel \
|
||||
libtirpc-dev:mipsel \
|
||||
libudev-dev:mipsel \
|
||||
libxml2-dev:mipsel \
|
||||
libyajl-dev:mipsel \
|
||||
xfslibs-dev:mipsel && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
||||
|
||||
ENV ABI "mipsel-linux-gnu"
|
||||
ENV CONFIGURE_OPTS "--host=mipsel-linux-gnu"
|
@@ -1,124 +0,0 @@
|
||||
FROM debian:sid
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libc-dev-bin \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libxml2-utils \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
vim \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/powerpc64le-linux-gnu-cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/powerpc64le-linux-gnu-$(basename /usr/bin/gcc)
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
dpkg --add-architecture ppc64el && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y dpkg-dev && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
gcc-powerpc64le-linux-gnu \
|
||||
libacl1-dev:ppc64el \
|
||||
libapparmor-dev:ppc64el \
|
||||
libattr1-dev:ppc64el \
|
||||
libaudit-dev:ppc64el \
|
||||
libavahi-client-dev:ppc64el \
|
||||
libblkid-dev:ppc64el \
|
||||
libc6-dev:ppc64el \
|
||||
libcap-ng-dev:ppc64el \
|
||||
libcurl4-gnutls-dev:ppc64el \
|
||||
libdbus-1-dev:ppc64el \
|
||||
libdevmapper-dev:ppc64el \
|
||||
libfuse-dev:ppc64el \
|
||||
libglib2.0-dev:ppc64el \
|
||||
libglusterfs-dev:ppc64el \
|
||||
libgnutls28-dev:ppc64el \
|
||||
libiscsi-dev:ppc64el \
|
||||
libncurses-dev:ppc64el \
|
||||
libnl-3-dev:ppc64el \
|
||||
libnl-route-3-dev:ppc64el \
|
||||
libnuma-dev:ppc64el \
|
||||
libparted-dev:ppc64el \
|
||||
libpcap0.8-dev:ppc64el \
|
||||
libpciaccess-dev:ppc64el \
|
||||
librbd-dev:ppc64el \
|
||||
libreadline-dev:ppc64el \
|
||||
libsanlock-dev:ppc64el \
|
||||
libsasl2-dev:ppc64el \
|
||||
libselinux1-dev:ppc64el \
|
||||
libssh-gcrypt-dev:ppc64el \
|
||||
libssh2-1-dev:ppc64el \
|
||||
libtirpc-dev:ppc64el \
|
||||
libudev-dev:ppc64el \
|
||||
libxml2-dev:ppc64el \
|
||||
libyajl-dev:ppc64el \
|
||||
xfslibs-dev:ppc64el && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
||||
|
||||
ENV ABI "powerpc64le-linux-gnu"
|
||||
ENV CONFIGURE_OPTS "--host=powerpc64le-linux-gnu"
|
@@ -1,124 +0,0 @@
|
||||
FROM debian:sid
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libc-dev-bin \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libxml2-utils \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
vim \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/s390x-linux-gnu-cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/s390x-linux-gnu-$(basename /usr/bin/gcc)
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
dpkg --add-architecture s390x && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y dpkg-dev && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
gcc-s390x-linux-gnu \
|
||||
libacl1-dev:s390x \
|
||||
libapparmor-dev:s390x \
|
||||
libattr1-dev:s390x \
|
||||
libaudit-dev:s390x \
|
||||
libavahi-client-dev:s390x \
|
||||
libblkid-dev:s390x \
|
||||
libc6-dev:s390x \
|
||||
libcap-ng-dev:s390x \
|
||||
libcurl4-gnutls-dev:s390x \
|
||||
libdbus-1-dev:s390x \
|
||||
libdevmapper-dev:s390x \
|
||||
libfuse-dev:s390x \
|
||||
libglib2.0-dev:s390x \
|
||||
libglusterfs-dev:s390x \
|
||||
libgnutls28-dev:s390x \
|
||||
libiscsi-dev:s390x \
|
||||
libncurses-dev:s390x \
|
||||
libnl-3-dev:s390x \
|
||||
libnl-route-3-dev:s390x \
|
||||
libnuma-dev:s390x \
|
||||
libparted-dev:s390x \
|
||||
libpcap0.8-dev:s390x \
|
||||
libpciaccess-dev:s390x \
|
||||
librbd-dev:s390x \
|
||||
libreadline-dev:s390x \
|
||||
libsanlock-dev:s390x \
|
||||
libsasl2-dev:s390x \
|
||||
libselinux1-dev:s390x \
|
||||
libssh-gcrypt-dev:s390x \
|
||||
libssh2-1-dev:s390x \
|
||||
libtirpc-dev:s390x \
|
||||
libudev-dev:s390x \
|
||||
libxml2-dev:s390x \
|
||||
libyajl-dev:s390x \
|
||||
xfslibs-dev:s390x && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
||||
|
||||
ENV ABI "s390x-linux-gnu"
|
||||
ENV CONFIGURE_OPTS "--host=s390x-linux-gnu"
|
@@ -1,115 +0,0 @@
|
||||
FROM debian:sid
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libacl1-dev \
|
||||
libapparmor-dev \
|
||||
libattr1-dev \
|
||||
libaudit-dev \
|
||||
libavahi-client-dev \
|
||||
libblkid-dev \
|
||||
libc-dev-bin \
|
||||
libc6-dev \
|
||||
libcap-ng-dev \
|
||||
libcurl4-gnutls-dev \
|
||||
libdbus-1-dev \
|
||||
libdevmapper-dev \
|
||||
libfuse-dev \
|
||||
libglib2.0-dev \
|
||||
libglusterfs-dev \
|
||||
libgnutls28-dev \
|
||||
libiscsi-dev \
|
||||
libncurses-dev \
|
||||
libnetcf-dev \
|
||||
libnl-3-dev \
|
||||
libnl-route-3-dev \
|
||||
libnuma-dev \
|
||||
libparted-dev \
|
||||
libpcap0.8-dev \
|
||||
libpciaccess-dev \
|
||||
librbd-dev \
|
||||
libreadline-dev \
|
||||
libsanlock-dev \
|
||||
libsasl2-dev \
|
||||
libselinux1-dev \
|
||||
libssh-gcrypt-dev \
|
||||
libssh2-1-dev \
|
||||
libtirpc-dev \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libudev-dev \
|
||||
libxen-dev \
|
||||
libxml2-dev \
|
||||
libxml2-utils \
|
||||
libyajl-dev \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
systemtap-sdt-dev \
|
||||
vim \
|
||||
wireshark-dev \
|
||||
xfslibs-dev \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/$(basename /usr/bin/gcc)
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
@@ -1,112 +0,0 @@
|
||||
FROM fedora:31
|
||||
|
||||
RUN dnf update -y && \
|
||||
dnf install -y \
|
||||
audit-libs-devel \
|
||||
augeas \
|
||||
autoconf \
|
||||
automake \
|
||||
avahi-devel \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cppi \
|
||||
cyrus-sasl-devel \
|
||||
dbus-devel \
|
||||
device-mapper-devel \
|
||||
dnsmasq \
|
||||
dwarves \
|
||||
ebtables \
|
||||
fuse-devel \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
gettext-devel \
|
||||
git \
|
||||
glib2-devel \
|
||||
glibc-devel \
|
||||
glibc-langpack-en \
|
||||
glusterfs-api-devel \
|
||||
gnutls-devel \
|
||||
iproute \
|
||||
iproute-tc \
|
||||
iscsi-initiator-utils \
|
||||
kmod \
|
||||
libacl-devel \
|
||||
libattr-devel \
|
||||
libblkid-devel \
|
||||
libcap-ng-devel \
|
||||
libcurl-devel \
|
||||
libiscsi-devel \
|
||||
libnl3-devel \
|
||||
libpcap-devel \
|
||||
libpciaccess-devel \
|
||||
librbd-devel \
|
||||
libselinux-devel \
|
||||
libssh-devel \
|
||||
libssh2-devel \
|
||||
libtirpc-devel \
|
||||
libtool \
|
||||
libudev-devel \
|
||||
libwsman-devel \
|
||||
libxml2 \
|
||||
libxml2-devel \
|
||||
libxslt \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
ncurses-devel \
|
||||
net-tools \
|
||||
netcf-devel \
|
||||
nfs-utils \
|
||||
ninja-build \
|
||||
numactl-devel \
|
||||
numad \
|
||||
parted \
|
||||
parted-devel \
|
||||
patch \
|
||||
perl \
|
||||
perl-App-cpanminus \
|
||||
pkgconfig \
|
||||
polkit \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-flake8 \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-img \
|
||||
radvd \
|
||||
readline-devel \
|
||||
rpcgen \
|
||||
rpm-build \
|
||||
sanlock-devel \
|
||||
screen \
|
||||
scrub \
|
||||
sheepdog \
|
||||
strace \
|
||||
sudo \
|
||||
systemtap-sdt-devel \
|
||||
vim \
|
||||
wireshark-devel \
|
||||
xen-devel \
|
||||
xfsprogs-devel \
|
||||
xz \
|
||||
yajl-devel \
|
||||
zfs-fuse && \
|
||||
dnf autoremove -y && \
|
||||
dnf clean all -y && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/$(basename /usr/bin/gcc)
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
@@ -1,112 +0,0 @@
|
||||
FROM fedora:32
|
||||
|
||||
RUN dnf update -y && \
|
||||
dnf install -y \
|
||||
audit-libs-devel \
|
||||
augeas \
|
||||
autoconf \
|
||||
automake \
|
||||
avahi-devel \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cppi \
|
||||
cyrus-sasl-devel \
|
||||
dbus-devel \
|
||||
device-mapper-devel \
|
||||
dnsmasq \
|
||||
dwarves \
|
||||
ebtables \
|
||||
fuse-devel \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
gettext-devel \
|
||||
git \
|
||||
glib2-devel \
|
||||
glibc-devel \
|
||||
glibc-langpack-en \
|
||||
glusterfs-api-devel \
|
||||
gnutls-devel \
|
||||
iproute \
|
||||
iproute-tc \
|
||||
iscsi-initiator-utils \
|
||||
kmod \
|
||||
libacl-devel \
|
||||
libattr-devel \
|
||||
libblkid-devel \
|
||||
libcap-ng-devel \
|
||||
libcurl-devel \
|
||||
libiscsi-devel \
|
||||
libnl3-devel \
|
||||
libpcap-devel \
|
||||
libpciaccess-devel \
|
||||
librbd-devel \
|
||||
libselinux-devel \
|
||||
libssh-devel \
|
||||
libssh2-devel \
|
||||
libtirpc-devel \
|
||||
libtool \
|
||||
libudev-devel \
|
||||
libwsman-devel \
|
||||
libxml2 \
|
||||
libxml2-devel \
|
||||
libxslt \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
ncurses-devel \
|
||||
net-tools \
|
||||
netcf-devel \
|
||||
nfs-utils \
|
||||
ninja-build \
|
||||
numactl-devel \
|
||||
numad \
|
||||
parted \
|
||||
parted-devel \
|
||||
patch \
|
||||
perl \
|
||||
perl-App-cpanminus \
|
||||
pkgconfig \
|
||||
polkit \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-flake8 \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-img \
|
||||
radvd \
|
||||
readline-devel \
|
||||
rpcgen \
|
||||
rpm-build \
|
||||
sanlock-devel \
|
||||
screen \
|
||||
scrub \
|
||||
sheepdog \
|
||||
strace \
|
||||
sudo \
|
||||
systemtap-sdt-devel \
|
||||
vim \
|
||||
wireshark-devel \
|
||||
xen-devel \
|
||||
xfsprogs-devel \
|
||||
xz \
|
||||
yajl-devel \
|
||||
zfs-fuse && \
|
||||
dnf autoremove -y && \
|
||||
dnf clean all -y && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/$(basename /usr/bin/gcc)
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
@@ -1,94 +0,0 @@
|
||||
FROM fedora:rawhide
|
||||
|
||||
RUN dnf update -y --nogpgcheck fedora-gpg-keys && \
|
||||
dnf update -y && \
|
||||
dnf install -y \
|
||||
augeas \
|
||||
autoconf \
|
||||
automake \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cppi \
|
||||
dnsmasq \
|
||||
dwarves \
|
||||
ebtables \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext-devel \
|
||||
git \
|
||||
glibc-langpack-en \
|
||||
iproute \
|
||||
iproute-tc \
|
||||
iscsi-initiator-utils \
|
||||
kmod \
|
||||
libtool \
|
||||
libwsman-devel \
|
||||
libxml2 \
|
||||
libxslt \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-utils \
|
||||
ninja-build \
|
||||
numad \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
perl-App-cpanminus \
|
||||
polkit \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-flake8 \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-img \
|
||||
radvd \
|
||||
rpcgen \
|
||||
rpm-build \
|
||||
screen \
|
||||
scrub \
|
||||
sheepdog \
|
||||
strace \
|
||||
sudo \
|
||||
vim \
|
||||
xz \
|
||||
zfs-fuse && \
|
||||
dnf autoremove -y && \
|
||||
dnf clean all -y && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/i686-w64-mingw32-cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/i686-w64-mingw32-$(basename /usr/bin/gcc)
|
||||
|
||||
RUN dnf install -y \
|
||||
mingw32-curl \
|
||||
mingw32-dbus \
|
||||
mingw32-dlfcn \
|
||||
mingw32-gcc \
|
||||
mingw32-gettext \
|
||||
mingw32-glib2 \
|
||||
mingw32-gnutls \
|
||||
mingw32-headers \
|
||||
mingw32-libssh2 \
|
||||
mingw32-libxml2 \
|
||||
mingw32-pkg-config \
|
||||
mingw32-portablexdr \
|
||||
mingw32-readline && \
|
||||
dnf clean all -y
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
||||
|
||||
ENV ABI "i686-w64-mingw32"
|
||||
ENV CONFIGURE_OPTS "--host=i686-w64-mingw32"
|
||||
ENV MESON_OPTS "--cross-file=/usr/share/mingw/toolchain-mingw32.meson"
|
@@ -1,94 +0,0 @@
|
||||
FROM fedora:rawhide
|
||||
|
||||
RUN dnf update -y --nogpgcheck fedora-gpg-keys && \
|
||||
dnf update -y && \
|
||||
dnf install -y \
|
||||
augeas \
|
||||
autoconf \
|
||||
automake \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cppi \
|
||||
dnsmasq \
|
||||
dwarves \
|
||||
ebtables \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext-devel \
|
||||
git \
|
||||
glibc-langpack-en \
|
||||
iproute \
|
||||
iproute-tc \
|
||||
iscsi-initiator-utils \
|
||||
kmod \
|
||||
libtool \
|
||||
libwsman-devel \
|
||||
libxml2 \
|
||||
libxslt \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-utils \
|
||||
ninja-build \
|
||||
numad \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
perl-App-cpanminus \
|
||||
polkit \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-flake8 \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-img \
|
||||
radvd \
|
||||
rpcgen \
|
||||
rpm-build \
|
||||
screen \
|
||||
scrub \
|
||||
sheepdog \
|
||||
strace \
|
||||
sudo \
|
||||
vim \
|
||||
xz \
|
||||
zfs-fuse && \
|
||||
dnf autoremove -y && \
|
||||
dnf clean all -y && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/x86_64-w64-mingw32-cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/x86_64-w64-mingw32-$(basename /usr/bin/gcc)
|
||||
|
||||
RUN dnf install -y \
|
||||
mingw64-curl \
|
||||
mingw64-dbus \
|
||||
mingw64-dlfcn \
|
||||
mingw64-gcc \
|
||||
mingw64-gettext \
|
||||
mingw64-glib2 \
|
||||
mingw64-gnutls \
|
||||
mingw64-headers \
|
||||
mingw64-libssh2 \
|
||||
mingw64-libxml2 \
|
||||
mingw64-pkg-config \
|
||||
mingw64-portablexdr \
|
||||
mingw64-readline && \
|
||||
dnf clean all -y
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
||||
|
||||
ENV ABI "x86_64-w64-mingw32"
|
||||
ENV CONFIGURE_OPTS "--host=x86_64-w64-mingw32"
|
||||
ENV MESON_OPTS "--cross-file=/usr/share/mingw/toolchain-mingw64.meson"
|
@@ -1,113 +0,0 @@
|
||||
FROM fedora:rawhide
|
||||
|
||||
RUN dnf update -y --nogpgcheck fedora-gpg-keys && \
|
||||
dnf update -y && \
|
||||
dnf install -y \
|
||||
audit-libs-devel \
|
||||
augeas \
|
||||
autoconf \
|
||||
automake \
|
||||
avahi-devel \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cppi \
|
||||
cyrus-sasl-devel \
|
||||
dbus-devel \
|
||||
device-mapper-devel \
|
||||
dnsmasq \
|
||||
dwarves \
|
||||
ebtables \
|
||||
fuse-devel \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
gettext-devel \
|
||||
git \
|
||||
glib2-devel \
|
||||
glibc-devel \
|
||||
glibc-langpack-en \
|
||||
glusterfs-api-devel \
|
||||
gnutls-devel \
|
||||
iproute \
|
||||
iproute-tc \
|
||||
iscsi-initiator-utils \
|
||||
kmod \
|
||||
libacl-devel \
|
||||
libattr-devel \
|
||||
libblkid-devel \
|
||||
libcap-ng-devel \
|
||||
libcurl-devel \
|
||||
libiscsi-devel \
|
||||
libnl3-devel \
|
||||
libpcap-devel \
|
||||
libpciaccess-devel \
|
||||
librbd-devel \
|
||||
libselinux-devel \
|
||||
libssh-devel \
|
||||
libssh2-devel \
|
||||
libtirpc-devel \
|
||||
libtool \
|
||||
libudev-devel \
|
||||
libwsman-devel \
|
||||
libxml2 \
|
||||
libxml2-devel \
|
||||
libxslt \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
ncurses-devel \
|
||||
net-tools \
|
||||
netcf-devel \
|
||||
nfs-utils \
|
||||
ninja-build \
|
||||
numactl-devel \
|
||||
numad \
|
||||
parted \
|
||||
parted-devel \
|
||||
patch \
|
||||
perl \
|
||||
perl-App-cpanminus \
|
||||
pkgconfig \
|
||||
polkit \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-flake8 \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-img \
|
||||
radvd \
|
||||
readline-devel \
|
||||
rpcgen \
|
||||
rpm-build \
|
||||
sanlock-devel \
|
||||
screen \
|
||||
scrub \
|
||||
sheepdog \
|
||||
strace \
|
||||
sudo \
|
||||
systemtap-sdt-devel \
|
||||
vim \
|
||||
wireshark-devel \
|
||||
xen-devel \
|
||||
xfsprogs-devel \
|
||||
xz \
|
||||
yajl-devel \
|
||||
zfs-fuse && \
|
||||
dnf autoremove -y && \
|
||||
dnf clean all -y && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/$(basename /usr/bin/gcc)
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
@@ -1,111 +0,0 @@
|
||||
FROM opensuse/leap:15.1
|
||||
|
||||
RUN zypper update -y && \
|
||||
zypper install -y \
|
||||
audit-devel \
|
||||
augeas \
|
||||
augeas-lenses \
|
||||
autoconf \
|
||||
automake \
|
||||
avahi-devel \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cppi \
|
||||
cyrus-sasl-devel \
|
||||
dbus-1-devel \
|
||||
device-mapper-devel \
|
||||
dnsmasq \
|
||||
dwarves \
|
||||
ebtables \
|
||||
fuse-devel \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
gettext-devel \
|
||||
git \
|
||||
glib2-devel \
|
||||
glibc-devel \
|
||||
glibc-locale \
|
||||
glusterfs-devel \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libacl-devel \
|
||||
libapparmor-devel \
|
||||
libattr-devel \
|
||||
libblkid-devel \
|
||||
libcap-ng-devel \
|
||||
libcurl-devel \
|
||||
libgnutls-devel \
|
||||
libiscsi-devel \
|
||||
libnl3-devel \
|
||||
libnuma-devel \
|
||||
libpcap-devel \
|
||||
libpciaccess-devel \
|
||||
librbd-devel \
|
||||
libselinux-devel \
|
||||
libssh-devel \
|
||||
libssh2-devel \
|
||||
libtirpc-devel \
|
||||
libtool \
|
||||
libudev-devel \
|
||||
libwsman-devel \
|
||||
libxml2 \
|
||||
libxml2-devel \
|
||||
libxslt \
|
||||
libyajl-devel \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
ncurses-devel \
|
||||
net-tools \
|
||||
nfs-utils \
|
||||
ninja \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
parted-devel \
|
||||
patch \
|
||||
perl \
|
||||
perl-App-cpanminus \
|
||||
pkgconfig \
|
||||
polkit \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-flake8 \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-tools \
|
||||
radvd \
|
||||
readline-devel \
|
||||
rpcgen \
|
||||
rpm-build \
|
||||
sanlock-devel \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
systemtap-sdt-devel \
|
||||
vim \
|
||||
wireshark-devel \
|
||||
xen-devel \
|
||||
xfsprogs-devel \
|
||||
xz && \
|
||||
zypper clean --all && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/$(basename /usr/bin/gcc)
|
||||
|
||||
RUN pip3 install \
|
||||
meson==0.49.0
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
@@ -1,119 +0,0 @@
|
||||
FROM ubuntu:18.04
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
glusterfs-common \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libacl1-dev \
|
||||
libapparmor-dev \
|
||||
libattr1-dev \
|
||||
libaudit-dev \
|
||||
libavahi-client-dev \
|
||||
libblkid-dev \
|
||||
libc-dev-bin \
|
||||
libc6-dev \
|
||||
libcap-ng-dev \
|
||||
libcurl4-gnutls-dev \
|
||||
libdbus-1-dev \
|
||||
libdevmapper-dev \
|
||||
libfuse-dev \
|
||||
libglib2.0-dev \
|
||||
libgnutls28-dev \
|
||||
libiscsi-dev \
|
||||
libncurses5-dev \
|
||||
libnetcf-dev \
|
||||
libnl-3-dev \
|
||||
libnl-route-3-dev \
|
||||
libnuma-dev \
|
||||
libopenwsman-dev \
|
||||
libparted-dev \
|
||||
libpcap0.8-dev \
|
||||
libpciaccess-dev \
|
||||
librbd-dev \
|
||||
libreadline-dev \
|
||||
libsanlock-dev \
|
||||
libsasl2-dev \
|
||||
libselinux1-dev \
|
||||
libssh-dev \
|
||||
libssh2-1-dev \
|
||||
libtirpc-dev \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libudev-dev \
|
||||
libxen-dev \
|
||||
libxml2-dev \
|
||||
libxml2-utils \
|
||||
libyajl-dev \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
sheepdog \
|
||||
strace \
|
||||
sudo \
|
||||
systemtap-sdt-dev \
|
||||
vim \
|
||||
wireshark-dev \
|
||||
xfslibs-dev \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/$(basename /usr/bin/gcc)
|
||||
|
||||
RUN pip3 install \
|
||||
meson==0.49.0
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
@@ -1,116 +0,0 @@
|
||||
FROM ubuntu:20.04
|
||||
|
||||
RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get dist-upgrade -y && \
|
||||
apt-get install --no-install-recommends -y \
|
||||
augeas-lenses \
|
||||
augeas-tools \
|
||||
autoconf \
|
||||
automake \
|
||||
autopoint \
|
||||
bash \
|
||||
bash-completion \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
chrony \
|
||||
cpanminus \
|
||||
dnsmasq-base \
|
||||
dwarves \
|
||||
ebtables \
|
||||
flake8 \
|
||||
gcc \
|
||||
gdb \
|
||||
gettext \
|
||||
git \
|
||||
iproute2 \
|
||||
kmod \
|
||||
libacl1-dev \
|
||||
libapparmor-dev \
|
||||
libattr1-dev \
|
||||
libaudit-dev \
|
||||
libavahi-client-dev \
|
||||
libblkid-dev \
|
||||
libc-dev-bin \
|
||||
libc6-dev \
|
||||
libcap-ng-dev \
|
||||
libcurl4-gnutls-dev \
|
||||
libdbus-1-dev \
|
||||
libdevmapper-dev \
|
||||
libfuse-dev \
|
||||
libglib2.0-dev \
|
||||
libglusterfs-dev \
|
||||
libgnutls28-dev \
|
||||
libiscsi-dev \
|
||||
libncurses-dev \
|
||||
libnetcf-dev \
|
||||
libnl-3-dev \
|
||||
libnl-route-3-dev \
|
||||
libnuma-dev \
|
||||
libopenwsman-dev \
|
||||
libparted-dev \
|
||||
libpcap0.8-dev \
|
||||
libpciaccess-dev \
|
||||
librbd-dev \
|
||||
libreadline-dev \
|
||||
libsanlock-dev \
|
||||
libsasl2-dev \
|
||||
libselinux1-dev \
|
||||
libssh-dev \
|
||||
libssh2-1-dev \
|
||||
libtirpc-dev \
|
||||
libtool \
|
||||
libtool-bin \
|
||||
libudev-dev \
|
||||
libxen-dev \
|
||||
libxml2-dev \
|
||||
libxml2-utils \
|
||||
libyajl-dev \
|
||||
locales \
|
||||
lsof \
|
||||
lvm2 \
|
||||
make \
|
||||
meson \
|
||||
net-tools \
|
||||
nfs-common \
|
||||
ninja-build \
|
||||
numad \
|
||||
open-iscsi \
|
||||
parted \
|
||||
patch \
|
||||
perl \
|
||||
pkgconf \
|
||||
policykit-1 \
|
||||
python3 \
|
||||
python3-docutils \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
qemu-utils \
|
||||
radvd \
|
||||
screen \
|
||||
scrub \
|
||||
strace \
|
||||
sudo \
|
||||
systemtap-sdt-dev \
|
||||
vim \
|
||||
wireshark-dev \
|
||||
xfslibs-dev \
|
||||
xsltproc \
|
||||
xz-utils \
|
||||
zfs-fuse && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get autoclean -y && \
|
||||
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
|
||||
dpkg-reconfigure locales && \
|
||||
mkdir -p /usr/libexec/ccache-wrappers && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/cc && \
|
||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/$(basename /usr/bin/gcc)
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
|
||||
ENV MAKE "/usr/bin/make"
|
||||
ENV NINJA "/usr/bin/ninja"
|
||||
ENV PYTHON "/usr/bin/python3"
|
||||
|
||||
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
|
@@ -1,42 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
if test -z "$1"
|
||||
then
|
||||
echo "syntax: $0 PATH-TO-LCITOOL"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
LCITOOL=$1
|
||||
|
||||
if ! test -x "$LCITOOL"
|
||||
then
|
||||
echo "$LCITOOL is not executable"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
HOSTS=$($LCITOOL hosts | grep -Ev 'freebsd|macos')
|
||||
|
||||
for host in $HOSTS
|
||||
do
|
||||
case "$host" in
|
||||
libvirt-fedora-rawhide)
|
||||
for cross in mingw32 mingw64
|
||||
do
|
||||
$LCITOOL dockerfile $host libvirt --cross $cross >$host-cross-$cross.Dockerfile
|
||||
done
|
||||
;;
|
||||
libvirt-debian-*)
|
||||
for cross in aarch64 armv6l armv7l i686 mips mips64el mipsel ppc64le s390x
|
||||
do
|
||||
if test "$host-cross-$cross" = "libvirt-debian-9-cross-i686" ||
|
||||
test "$host-cross-$cross" = "libvirt-debian-sid-cross-mips"
|
||||
then
|
||||
continue
|
||||
fi
|
||||
$LCITOOL dockerfile $host libvirt --cross $cross >$host-cross-$cross.Dockerfile
|
||||
done
|
||||
;;
|
||||
esac
|
||||
|
||||
$LCITOOL dockerfile $host libvirt >$host.Dockerfile
|
||||
done
|
@@ -1,14 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
prefix="${1##registry.gitlab.com/}"
|
||||
|
||||
PROJECT_ID=192693
|
||||
|
||||
all_repos() {
|
||||
curl -s "https://gitlab.com/api/v4/projects/$PROJECT_ID/registry/repositories?per_page=100" \
|
||||
| tr , '\n' | grep '"path":' | sed 's,"path":",,g;s,"$,,g'
|
||||
}
|
||||
|
||||
all_repos | grep "^$prefix" | sed "s,^$prefix,,g" | while read repo; do
|
||||
echo " $repo"
|
||||
done | sort -u
|
@@ -1,13 +0,0 @@
|
||||
# This script is used to prepare the environment that will be used
|
||||
# to build libvirt inside the container.
|
||||
#
|
||||
# You can customize it to your liking, or alternatively use a
|
||||
# completely different script by passing
|
||||
#
|
||||
# CI_PREPARE_SCRIPT=/path/to/your/prepare/script
|
||||
#
|
||||
# to make.
|
||||
#
|
||||
# Note that this script will have root privileges inside the
|
||||
# container, so it can be used for things like installing additional
|
||||
# packages.
|
@@ -1,58 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Red Hat, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see
|
||||
* <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __GNUC__
|
||||
# error "Libvirt requires GCC >= 4.8, or CLang"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Define __GNUC_PREREQ to a sane default if it isn't yet defined.
|
||||
* This is done here so that it's included as early as possible;
|
||||
*/
|
||||
#ifndef __GNUC_PREREQ
|
||||
# define __GNUC_PREREQ(maj, min) \
|
||||
((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
|
||||
#endif
|
||||
|
||||
#if defined(__clang_major__) && defined(__clang_minor__)
|
||||
# ifdef __apple_build_version__
|
||||
# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
|
||||
# error You need at least XCode Clang v5.1 to compile QEMU
|
||||
# endif
|
||||
# else
|
||||
# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
|
||||
# error You need at least Clang v3.4 to compile QEMU
|
||||
# endif
|
||||
# endif
|
||||
#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
|
||||
# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
|
||||
# error You need at least GCC v4.8 to compile QEMU
|
||||
# endif
|
||||
#else
|
||||
# error You either need at least GCC 4.8 or Clang 3.4 or XCode Clang 5.1 to compile libvirt
|
||||
#endif
|
||||
|
||||
/* Ask for warnings for anything that was marked deprecated in
|
||||
* the defined version, or before. It is a candidate for rewrite.
|
||||
*/
|
||||
#define GLIB_VERSION_MIN_REQUIRED GLIB_VERSION_2_48
|
||||
|
||||
/* Ask for warnings if code tries to use function that did not
|
||||
* exist in the defined version. These risk breaking builds
|
||||
*/
|
||||
#define GLIB_VERSION_MAX_ALLOWED GLIB_VERSION_2_48
|
1063
configure.ac
1063
configure.ac
File diff suppressed because it is too large
Load Diff
@@ -1,19 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<body>
|
||||
<h1>404 page not found</h1>
|
||||
|
||||
<p>
|
||||
Someone appears to have eaten the <del>penguin</del>
|
||||
page you were looking for. You might want to try
|
||||
</p>
|
||||
<ul>
|
||||
<li>going back to the <a href="https://libvirt.org/">home page</a> to find
|
||||
a collection of links to interesting pages on this site</li>
|
||||
<li>using the search box at the top right corner of the screen to
|
||||
locate the content on this site or mailing list archives</li>
|
||||
</ul>
|
||||
|
||||
</body>
|
||||
</html>
|
522
docs/Makefile.am
522
docs/Makefile.am
@@ -1,522 +0,0 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
## Copyright (C) 2005-2016 Red Hat, Inc.
|
||||
##
|
||||
## This library is free software; you can redistribute it and/or
|
||||
## modify it under the terms of the GNU Lesser General Public
|
||||
## License as published by the Free Software Foundation; either
|
||||
## version 2.1 of the License, or (at your option) any later version.
|
||||
##
|
||||
## This library is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
## Lesser General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU Lesser General Public
|
||||
## License along with this library. If not, see
|
||||
## <http://www.gnu.org/licenses/>.
|
||||
|
||||
HTML_DIR = $(docdir)/html
|
||||
|
||||
modules = \
|
||||
libvirt-common \
|
||||
libvirt-domain \
|
||||
libvirt-domain-checkpoint \
|
||||
libvirt-domain-snapshot \
|
||||
libvirt-event \
|
||||
libvirt-host \
|
||||
libvirt-interface \
|
||||
libvirt-network \
|
||||
libvirt-nodedev \
|
||||
libvirt-nwfilter \
|
||||
libvirt-secret \
|
||||
libvirt-storage \
|
||||
libvirt-stream \
|
||||
virterror \
|
||||
$(NULL)
|
||||
|
||||
modules_admin = libvirt-admin
|
||||
modules_qemu = libvirt-qemu
|
||||
modules_lxc = libvirt-lxc
|
||||
|
||||
all: vpathhack
|
||||
|
||||
# This hack enables us to view the web pages
|
||||
# from within the uninstalled build tree
|
||||
vpathhack:
|
||||
@for dir in fonts js logos; \
|
||||
do \
|
||||
test -e $$dir || ln -s $(srcdir)/$$dir $$dir ; \
|
||||
done
|
||||
@for file in $(assets); \
|
||||
do \
|
||||
test -e $$file || ln -s $(srcdir)/$$file $$file ; \
|
||||
done
|
||||
|
||||
clean-local:
|
||||
for dir in fonts js logos; \
|
||||
do \
|
||||
rm -f $$dir ; \
|
||||
done
|
||||
for file in $(assets); \
|
||||
do \
|
||||
rm -f $$file ; \
|
||||
done
|
||||
|
||||
apihtml = \
|
||||
html/index.html \
|
||||
$(apihtml_generated)
|
||||
|
||||
apihtml_generated = \
|
||||
$(addprefix html/libvirt-,$(addsuffix .html,$(modules))) \
|
||||
$(NULL)
|
||||
|
||||
apiadminhtml = \
|
||||
html/index-admin.html \
|
||||
$(apiadminhtml_generated)
|
||||
|
||||
apiadminhtml_generated = \
|
||||
$(addprefix html/libvirt-,$(addsuffix .html,$(modules_admin))) \
|
||||
$(NULL)
|
||||
|
||||
apiqemuhtml = \
|
||||
html/index-qemu.html \
|
||||
$(apiqemuhtml_generated)
|
||||
|
||||
apiqemuhtml_generated = \
|
||||
$(addprefix html/libvirt-,$(addsuffix .html,$(modules_qemu))) \
|
||||
$(NULL)
|
||||
|
||||
apilxchtml = \
|
||||
html/index-lxc.html \
|
||||
$(apilxchtml_generated)
|
||||
|
||||
apilxchtml_generated = \
|
||||
$(addprefix html/libvirt-,$(addsuffix .html,$(modules_lxc))) \
|
||||
$(NULL)
|
||||
|
||||
apipng = \
|
||||
html/left.png \
|
||||
html/up.png \
|
||||
html/home.png \
|
||||
html/right.png
|
||||
|
||||
apirefdir = $(HTML_DIR)/html
|
||||
apiref_DATA = $(apihtml) $(apiadminhtml) $(apiqemuhtml) $(apilxchtml) $(apipng)
|
||||
|
||||
javascript = \
|
||||
js/main.js \
|
||||
$(NULL)
|
||||
|
||||
javascriptdir = $(HTML_DIR)/js
|
||||
javascript_DATA = $(javascript)
|
||||
|
||||
fonts = \
|
||||
fonts/LICENSE.rst \
|
||||
fonts/stylesheet.css \
|
||||
fonts/overpass-bold-italic.woff \
|
||||
fonts/overpass-bold.woff \
|
||||
fonts/overpass-italic.woff \
|
||||
fonts/overpass-light-italic.woff \
|
||||
fonts/overpass-light.woff \
|
||||
fonts/overpass-mono-bold.woff \
|
||||
fonts/overpass-mono-light.woff \
|
||||
fonts/overpass-mono-regular.woff \
|
||||
fonts/overpass-mono-semibold.woff \
|
||||
fonts/overpass-regular.woff
|
||||
|
||||
fontsdir = $(HTML_DIR)/fonts
|
||||
fonts_DATA = $(fonts)
|
||||
|
||||
logofiles = \
|
||||
logos/logo-base.svg \
|
||||
logos/logo-square.svg \
|
||||
logos/logo-square-powered.svg \
|
||||
logos/logo-banner-dark.svg \
|
||||
logos/logo-banner-light.svg \
|
||||
logos/logo-square-96.png \
|
||||
logos/logo-square-128.png \
|
||||
logos/logo-square-192.png \
|
||||
logos/logo-square-256.png \
|
||||
logos/logo-square-powered-96.png \
|
||||
logos/logo-square-powered-128.png \
|
||||
logos/logo-square-powered-192.png \
|
||||
logos/logo-square-powered-256.png \
|
||||
logos/logo-banner-dark-256.png \
|
||||
logos/logo-banner-dark-800.png \
|
||||
logos/logo-banner-light-256.png \
|
||||
logos/logo-banner-light-800.png
|
||||
|
||||
logofilesdir = $(HTML_DIR)/logos
|
||||
logofiles_DATA = $(logofiles)
|
||||
|
||||
assets = \
|
||||
android-chrome-192x192.png \
|
||||
android-chrome-256x256.png \
|
||||
apple-touch-icon.png \
|
||||
architecture.gif \
|
||||
browserconfig.xml \
|
||||
favicon.ico \
|
||||
favicon-16x16.png \
|
||||
favicon-32x32.png \
|
||||
generic.css \
|
||||
libvirt.css \
|
||||
libvirt-daemon-arch.png \
|
||||
libvirt-driver-arch.png \
|
||||
libvirt-object-model.png \
|
||||
libvirt-virConnect-example.png \
|
||||
main.css \
|
||||
manifest.json \
|
||||
migration-managed-direct.png \
|
||||
migration-managed-p2p.png \
|
||||
migration-native.png \
|
||||
migration-tunnel.png \
|
||||
migration-unmanaged-direct.png \
|
||||
mobile.css \
|
||||
mstile-150x150.png \
|
||||
node.gif \
|
||||
$(NULL)
|
||||
|
||||
internals_html_in = \
|
||||
$(patsubst $(srcdir)/%,%,$(wildcard $(srcdir)/internals/*.html.in))
|
||||
internals_rst = \
|
||||
$(patsubst $(srcdir)/%,%,$(wildcard $(srcdir)/internals/*.rst))
|
||||
internals_rst_html_in = \
|
||||
$(internals_rst:%.rst=%.html.in)
|
||||
internals_html = \
|
||||
$(internals_html_in:%.html.in=%.html) \
|
||||
$(internals_rst_html_in:%.html.in=%.html)
|
||||
|
||||
internalsdir = $(HTML_DIR)/internals
|
||||
internals_DATA = $(internals_html)
|
||||
|
||||
kbase_html_in = \
|
||||
$(patsubst $(srcdir)/%,%,$(wildcard $(srcdir)/kbase/*.html.in))
|
||||
kbase_rst = \
|
||||
$(patsubst $(srcdir)/%,%,$(wildcard $(srcdir)/kbase/*.rst))
|
||||
kbase_rst_html_in = \
|
||||
$(kbase_rst:%.rst=%.html.in)
|
||||
kbase_html = \
|
||||
$(kbase_html_in:%.html.in=%.html) \
|
||||
$(kbase_rst_html_in:%.html.in=%.html)
|
||||
|
||||
kbasedir = $(HTML_DIR)/kbase
|
||||
kbase_DATA = $(kbase_html)
|
||||
|
||||
# Sync with src/util/
|
||||
KEYCODES = linux osx atset1 atset2 atset3 xtkbd usb win32 qnum
|
||||
KEYNAMES = linux osx win32
|
||||
|
||||
manpages_rst = \
|
||||
manpages/index.rst \
|
||||
$(NULL)
|
||||
manpages1_rst = \
|
||||
manpages/virt-pki-validate.rst \
|
||||
manpages/virt-xml-validate.rst \
|
||||
manpages/virt-admin.rst \
|
||||
manpages/virsh.rst \
|
||||
$(NULL)
|
||||
manpages7_rst = \
|
||||
$(KEYCODES:%=manpages/virkeycode-%.rst) \
|
||||
$(KEYNAMES:%=manpages/virkeyname-%.rst) \
|
||||
$(NULL)
|
||||
manpages8_rst = $(NULL)
|
||||
manpages_rst += \
|
||||
$(manpages1_rst) \
|
||||
$(manpages7_rst) \
|
||||
$(manpages8_rst) \
|
||||
$(NULL)
|
||||
if WITH_LIBVIRTD
|
||||
manpages8_rst += \
|
||||
manpages/libvirtd.rst \
|
||||
manpages/virtlockd.rst \
|
||||
manpages/virtlogd.rst \
|
||||
$(NULL)
|
||||
else ! WITH_LIBVIRTD
|
||||
manpages_rst += \
|
||||
manpages/libvirtd.rst \
|
||||
manpages/virtlockd.rst \
|
||||
manpages/virtlogd.rst \
|
||||
$(NULL)
|
||||
endif ! WITH_LIBVIRTD
|
||||
if WITH_HOST_VALIDATE
|
||||
manpages1_rst += manpages/virt-host-validate.rst
|
||||
else ! WITH_HOST_VALIDATE
|
||||
manpages_rst += manpages/virt-host-validate.rst
|
||||
endif ! WITH_HOST_VALIDATE
|
||||
if WITH_LOGIN_SHELL
|
||||
manpages1_rst += manpages/virt-login-shell.rst
|
||||
else ! WITH_LOGIN_SHELL
|
||||
manpages_rst += manpages/virt-login-shell.rst
|
||||
endif ! WITH_LOGIN_SHELL
|
||||
if WITH_SANLOCK
|
||||
manpages8_rst += manpages/virt-sanlock-cleanup.rst
|
||||
else ! WITH_SANLOCK
|
||||
manpages_rst += manpages/virt-sanlock-cleanup.rst
|
||||
endif ! WITH_SANLOCK
|
||||
if WITH_QEMU
|
||||
manpages1_rst += manpages/virt-qemu-run.rst
|
||||
else ! WITH_QEMU
|
||||
manpages_rst += manpages/virt-qemu-run.rst
|
||||
endif ! WITH_QEMU
|
||||
manpages_rst_html_in = \
|
||||
$(manpages_rst:%.rst=%.html.in)
|
||||
manpages_html = \
|
||||
$(manpages_rst_html_in:%.html.in=%.html)
|
||||
|
||||
man1_MANS = $(manpages1_rst:%.rst=%.1)
|
||||
man7_MANS = $(manpages7_rst:%.rst=%.7)
|
||||
man8_MANS = $(manpages8_rst:%.rst=%.8)
|
||||
|
||||
%.1: %.rst
|
||||
$(AM_V_GEN)$(MKDIR_P) `dirname $@` && \
|
||||
grep -v '^\.\. contents::' < $< | \
|
||||
sed -e 's|SYSCONFDIR|$(sysconfdir)|g' \
|
||||
-e 's|RUNSTATEDIR|$(runstatedir)|g' | \
|
||||
$(RST2MAN) --strict > $@ || { rm $@ && exit 1; }
|
||||
|
||||
%.7: %.rst
|
||||
$(AM_V_GEN)$(MKDIR_P) `dirname $@` && \
|
||||
grep -v '^\.\. contents::' < $< | \
|
||||
sed -e 's|SYSCONFDIR|$(sysconfdir)|g' \
|
||||
-e 's|RUNSTATEDIR|$(runstatedir)|g' | \
|
||||
$(RST2MAN) --strict > $@ || { rm $@ && exit 1; }
|
||||
|
||||
%.8: %.rst
|
||||
$(AM_V_GEN)$(MKDIR_P) `dirname $@` && \
|
||||
grep -v '^\.\. contents::' < $< | \
|
||||
sed -e 's|SYSCONFDIR|$(sysconfdir)|g' \
|
||||
-e 's|RUNSTATEDIR|$(runstatedir)|g' | \
|
||||
$(RST2MAN) --strict > $@ || { rm $@ && exit 1; }
|
||||
|
||||
manpages/virkeycode-%.rst: $(top_srcdir)/src/keycodemapdb/data/keymaps.csv \
|
||||
$(top_srcdir)/src/keycodemapdb/tools/keymap-gen Makefile.am
|
||||
$(AM_V_GEN)export NAME=`echo $@ | \
|
||||
sed -e 's,manpages/virkeycode-,,' -e 's,\.rst,,'` && \
|
||||
$(MKDIR_P) manpages/ && \
|
||||
$(RUNUTF8) $(PYTHON) $(top_srcdir)/src/keycodemapdb/tools/keymap-gen \
|
||||
code-docs \
|
||||
--lang rst \
|
||||
--title "virkeycode-$$NAME" \
|
||||
--subtitle "Key code values for $$NAME" \
|
||||
$(top_srcdir)/src/keycodemapdb/data/keymaps.csv $$NAME > $@
|
||||
|
||||
manpages/virkeyname-%.rst: $(top_srcdir)/src/keycodemapdb/data/keymaps.csv \
|
||||
$(top_srcdir)/src/keycodemapdb/tools/keymap-gen Makefile.am
|
||||
$(AM_V_GEN)export NAME=`echo $@ | \
|
||||
sed -e 's,manpages/virkeyname-,,' -e 's,\.rst,,'` && \
|
||||
$(MKDIR_P) manpages/ && \
|
||||
$(RUNUTF8) $(PYTHON) $(top_srcdir)/src/keycodemapdb/tools/keymap-gen \
|
||||
name-docs \
|
||||
--lang rst \
|
||||
--title "virkeyname-$$NAME" \
|
||||
--subtitle "Key name values for $$NAME" \
|
||||
$(top_srcdir)/src/keycodemapdb/data/keymaps.csv $$NAME > $@
|
||||
|
||||
manpagesdir = $(HTML_DIR)/manpages
|
||||
manpages_DATA = $(manpages_html)
|
||||
|
||||
# Generate hvsupport.html first, since it takes one extra step.
|
||||
dot_html_generated_in = \
|
||||
hvsupport.html.in \
|
||||
$(NULL)
|
||||
dot_html_in = \
|
||||
$(notdir $(wildcard $(srcdir)/*.html.in))
|
||||
dot_rst = \
|
||||
$(notdir $(wildcard $(srcdir)/*.rst))
|
||||
dot_rst_html_in = \
|
||||
$(dot_rst:%.rst=%.html.in) \
|
||||
news.html.in \
|
||||
$(NULL)
|
||||
dot_html = \
|
||||
$(dot_html_generated_in:%.html.in=%.html) \
|
||||
$(dot_html_in:%.html.in=%.html) \
|
||||
$(dot_rst_html_in:%.html.in=%.html)
|
||||
|
||||
htmldir = $(HTML_DIR)
|
||||
html_DATA = $(assets) $(dot_html)
|
||||
|
||||
apidir = $(pkgdatadir)/api
|
||||
api_DATA = \
|
||||
libvirt-api.xml \
|
||||
libvirt-qemu-api.xml \
|
||||
libvirt-lxc-api.xml \
|
||||
libvirt-admin-api.xml
|
||||
|
||||
svg = \
|
||||
libvirt-daemon-arch.svg \
|
||||
libvirt-driver-arch.svg \
|
||||
libvirt-object-model.svg \
|
||||
migration-managed-direct.svg \
|
||||
migration-managed-p2p.svg \
|
||||
migration-native.svg \
|
||||
migration-tunnel.svg \
|
||||
migration-unmanaged-direct.svg
|
||||
|
||||
schemadir = $(pkgdatadir)/schemas
|
||||
schema_DATA = $(wildcard $(srcdir)/schemas/*.rng)
|
||||
|
||||
EXTRA_DIST= \
|
||||
site.xsl subsite.xsl newapi.xsl page.xsl \
|
||||
$(dot_html_in) $(dot_rst) $(apipng) \
|
||||
$(svg) $(assets) \
|
||||
$(javascript) $(logofiles) \
|
||||
$(internals_html_in) $(internals_rst) $(fonts) \
|
||||
$(kbase_html_in) $(kbase_rst) \
|
||||
$(manpages_rst) \
|
||||
aclperms.htmlinc \
|
||||
$(schema_DATA)
|
||||
|
||||
acl_generated = aclperms.htmlinc
|
||||
|
||||
aclperms.htmlinc: $(top_srcdir)/src/access/viraccessperm.h \
|
||||
$(top_srcdir)/scripts/genaclperms.py Makefile.am
|
||||
$(AM_V_GEN)$(RUNUTF8) $(PYTHON) $(top_srcdir)/scripts/genaclperms.py $< > $@
|
||||
|
||||
CLEANFILES = \
|
||||
$(dot_html) \
|
||||
$(apihtml) \
|
||||
$(apiadminhtml) \
|
||||
$(apiqemuhtml) \
|
||||
$(apilxchtml) \
|
||||
$(internals_html) \
|
||||
$(kbase_html) \
|
||||
$(manpages_html) \
|
||||
$(man1_MANS) \
|
||||
$(man7_MANS) \
|
||||
$(manpages7_rst) \
|
||||
$(man8_MANS) \
|
||||
$(api_DATA) \
|
||||
$(dot_html_generated_in) \
|
||||
aclperms.htmlinc
|
||||
|
||||
timestamp="$(shell if test -n "$$SOURCE_DATE_EPOCH"; \
|
||||
then \
|
||||
date -u --date="@$$SOURCE_DATE_EPOCH"; \
|
||||
else \
|
||||
date -u; \
|
||||
fi)"
|
||||
|
||||
hvsupport.html: hvsupport.html.in
|
||||
|
||||
hvsupport.html.in: $(top_srcdir)/scripts/hvsupport.py $(api_DATA) \
|
||||
$(top_srcdir)/src/libvirt_public.syms \
|
||||
$(top_srcdir)/src/libvirt_qemu.syms $(top_srcdir)/src/libvirt_lxc.syms \
|
||||
$(top_srcdir)/src/driver.h
|
||||
$(AM_V_GEN)$(RUNUTF8) $(PYTHON) $(top_srcdir)/scripts/hvsupport.py \
|
||||
$(top_srcdir) $(top_builddir) > $@ || { rm $@ && exit 1; }
|
||||
|
||||
manpages/%.html.in: manpages/%.rst
|
||||
$(AM_V_GEN)$(MKDIR_P) `dirname $@` && \
|
||||
grep -v '^:Manual ' < $< | \
|
||||
sed -e 's|SYSCONFDIR|$(sysconfdir)|g' \
|
||||
-e 's|RUNSTATEDIR|$(runstatedir)|g' | \
|
||||
$(RST2HTML) --strict > $@ || { rm $@ && exit 1; }
|
||||
|
||||
news.html.in: $(top_srcdir)/NEWS.rst
|
||||
$(AM_V_GEN)$(MKDIR_P) `dirname $@` && \
|
||||
$(RST2HTML) --strict $< > $@ || { rm $@ && exit 1; }
|
||||
|
||||
CLEANFILES += news.html.in
|
||||
|
||||
%.html.in: %.rst
|
||||
$(AM_V_GEN)$(MKDIR_P) `dirname $@` && \
|
||||
$(RST2HTML) --strict $< > $@ || { rm $@ && exit 1; }
|
||||
|
||||
%.html.tmp: %.html.in site.xsl subsite.xsl page.xsl \
|
||||
$(acl_generated)
|
||||
$(AM_V_GEN)name=`echo $@ | sed -e 's/.tmp//'`; \
|
||||
genhtmlin=`echo $@ | sed -e 's/.tmp/.in/'`; \
|
||||
rst=`echo $@ | sed -e 's/.html.tmp/.rst/'`; \
|
||||
src="$$genhtmlin"; \
|
||||
test -f "$$genhtmlin" && src="$$rst"; \
|
||||
dir=`dirname $@` ; \
|
||||
if test "$$dir" = "."; \
|
||||
then \
|
||||
style=site.xsl; \
|
||||
else \
|
||||
$(MKDIR_P) $$dir; \
|
||||
style=subsite.xsl; \
|
||||
fi; \
|
||||
$(XSLTPROC) --stringparam pagename $$name \
|
||||
--stringparam pagesrc $$src \
|
||||
--stringparam builddir '$(abs_top_builddir)' \
|
||||
--stringparam timestamp $(timestamp) --nonet \
|
||||
$(top_srcdir)/docs/$$style $< > $@ \
|
||||
|| { rm $@ && exit 1; }
|
||||
|
||||
%.html: %.html.tmp
|
||||
$(AM_V_GEN)$(XMLLINT) --nonet --format $< > $@ \
|
||||
|| { rm $@ && exit 1; }
|
||||
|
||||
$(apihtml_generated): html/index.html
|
||||
$(apiadminhtml_generated): html/index-admin.html
|
||||
$(apiqemuhtml_generated): html/index-qemu.html
|
||||
$(apilxchtml_generated): html/index-lxc.html
|
||||
|
||||
html/index.html: libvirt-api.xml newapi.xsl page.xsl $(APIBUILD_STAMP)
|
||||
$(AM_V_GEN)$(XSLTPROC) --nonet -o ./ \
|
||||
--stringparam builddir '$(abs_top_builddir)' \
|
||||
--stringparam timestamp $(timestamp) \
|
||||
$(srcdir)/newapi.xsl libvirt-api.xml
|
||||
|
||||
html/index-%.html: libvirt-%-api.xml newapi.xsl page.xsl $(APIBUILD_STAMP)
|
||||
$(AM_V_GEN)$(XSLTPROC) --nonet -o ./ \
|
||||
--stringparam builddir '$(abs_top_builddir)' \
|
||||
--stringparam timestamp $(timestamp) \
|
||||
--stringparam indexfile $(@:html/%=%) \
|
||||
$(srcdir)/newapi.xsl $<
|
||||
|
||||
check-html:
|
||||
$(XMLLINT) --nonet --noout html/*.html
|
||||
|
||||
check-local: check-html
|
||||
|
||||
python_generated_files = $(api_DATA)
|
||||
|
||||
APIBUILD=$(top_srcdir)/scripts/apibuild.py
|
||||
APIBUILD_STAMP=apibuild.py.stamp
|
||||
CLEANFILES += $(APIBUILD_STAMP)
|
||||
|
||||
$(python_generated_files): $(APIBUILD_STAMP)
|
||||
|
||||
$(APIBUILD_STAMP): $(top_srcdir)/scripts/apibuild.py \
|
||||
$(top_srcdir)/include/libvirt/libvirt.h \
|
||||
$(top_srcdir)/include/libvirt/libvirt-common.h.in \
|
||||
$(top_srcdir)/include/libvirt/libvirt-domain-checkpoint.h \
|
||||
$(top_srcdir)/include/libvirt/libvirt-domain-snapshot.h \
|
||||
$(top_srcdir)/include/libvirt/libvirt-domain.h \
|
||||
$(top_srcdir)/include/libvirt/libvirt-event.h \
|
||||
$(top_srcdir)/include/libvirt/libvirt-host.h \
|
||||
$(top_srcdir)/include/libvirt/libvirt-interface.h \
|
||||
$(top_srcdir)/include/libvirt/libvirt-network.h \
|
||||
$(top_srcdir)/include/libvirt/libvirt-nodedev.h \
|
||||
$(top_srcdir)/include/libvirt/libvirt-nwfilter.h \
|
||||
$(top_srcdir)/include/libvirt/libvirt-secret.h \
|
||||
$(top_srcdir)/include/libvirt/libvirt-storage.h \
|
||||
$(top_srcdir)/include/libvirt/libvirt-stream.h \
|
||||
$(top_srcdir)/include/libvirt/libvirt-lxc.h \
|
||||
$(top_srcdir)/include/libvirt/libvirt-qemu.h \
|
||||
$(top_srcdir)/include/libvirt/libvirt-admin.h \
|
||||
$(top_srcdir)/include/libvirt/virterror.h \
|
||||
$(top_srcdir)/src/libvirt.c \
|
||||
$(top_srcdir)/src/libvirt-domain-checkpoint.c \
|
||||
$(top_srcdir)/src/libvirt-domain-snapshot.c \
|
||||
$(top_srcdir)/src/libvirt-domain.c \
|
||||
$(top_srcdir)/src/libvirt-host.c \
|
||||
$(top_srcdir)/src/libvirt-interface.c \
|
||||
$(top_srcdir)/src/libvirt-network.c \
|
||||
$(top_srcdir)/src/libvirt-nodedev.c \
|
||||
$(top_srcdir)/src/libvirt-nwfilter.c \
|
||||
$(top_srcdir)/src/libvirt-secret.c \
|
||||
$(top_srcdir)/src/libvirt-storage.c \
|
||||
$(top_srcdir)/src/libvirt-stream.c \
|
||||
$(top_srcdir)/src/libvirt-lxc.c \
|
||||
$(top_srcdir)/src/libvirt-qemu.c \
|
||||
$(top_srcdir)/src/admin/libvirt-admin.c \
|
||||
$(top_srcdir)/src/util/virerror.c \
|
||||
$(top_srcdir)/src/util/virevent.c \
|
||||
$(top_srcdir)/src/util/virtypedparam-public.c
|
||||
$(AM_V_GEN)srcdir=$(srcdir) builddir=$(builddir) \
|
||||
$(RUNUTF8) $(PYTHON) $(APIBUILD)
|
||||
touch $@
|
100
docs/acl.html.in
100
docs/acl.html.in
@@ -1,100 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<body>
|
||||
<h1>Client access control</h1>
|
||||
<p>
|
||||
Libvirt's client access control framework allows administrators
|
||||
to setup fine grained permission rules across client users,
|
||||
managed objects and API operations. This allows client connections
|
||||
to be locked down to a minimal set of privileges.
|
||||
</p>
|
||||
|
||||
<ul id="toc"></ul>
|
||||
|
||||
<h2><a id="intro">Access control introduction</a></h2>
|
||||
|
||||
<p>
|
||||
In a default configuration, the libvirtd daemon has three levels
|
||||
of access control. All connections start off in an unauthenticated
|
||||
state, where the only API operations allowed are those required
|
||||
to complete authentication. After successful authentication, a
|
||||
connection either has full, unrestricted access to all libvirt
|
||||
API calls, or is locked down to only "read only" operations,
|
||||
according to what socket a client connection originated on.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The access control framework allows authenticated connections to
|
||||
have fine grained permission rules to be defined by the administrator.
|
||||
Every API call in libvirt has a set of permissions that will
|
||||
be validated against the object being used. For example, the
|
||||
<code>virDomainSetSchedulerParametersFlags</code> method will
|
||||
check whether the client user has the <code>write</code>
|
||||
permission on the <code>domain</code> object instance passed
|
||||
in as a parameter. Further permissions will also be checked
|
||||
if certain flags are set in the API call. In addition to
|
||||
checks on the object passed in to an API call, some methods
|
||||
will filter their results. For example the <code>virConnectListAllDomains</code>
|
||||
method will check the <code>search_domains</code> on the <code>connect</code>
|
||||
object, but will also filter the returned <code>domain</code>
|
||||
objects to only those on which the client user has the
|
||||
<code>getattr</code> permission.
|
||||
</p>
|
||||
|
||||
<h2><a id="drivers">Access control drivers</a></h2>
|
||||
|
||||
<p>
|
||||
The access control framework is designed as a pluggable
|
||||
system to enable future integration with arbitrary access
|
||||
control technologies. By default, the <code>none</code>
|
||||
driver is used, which does no access control checks at
|
||||
all. At this time, libvirt ships with support for using
|
||||
<a href="http://www.freedesktop.org/wiki/Software/polkit/">polkit</a> as a real access
|
||||
control driver. To learn how to use the polkit access
|
||||
driver consult <a href="aclpolkit.html">the configuration
|
||||
docs</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The access driver is configured in the <code>libvirtd.conf</code>
|
||||
configuration file, using the <code>access_drivers</code>
|
||||
parameter. This parameter accepts an array of access control
|
||||
driver names. If more than one access driver is requested,
|
||||
then all must succeed in order for access to be granted.
|
||||
To enable 'polkit' as the driver:
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
# augtool -s set '/files/etc/libvirt/libvirtd.conf/access_drivers[1]' polkit
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
And to reset back to the default (no-op) driver
|
||||
</p>
|
||||
|
||||
|
||||
<pre>
|
||||
# augtool -s rm /files/etc/libvirt/libvirtd.conf/access_drivers
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
<strong>Note:</strong> changes to libvirtd.conf require that
|
||||
the libvirtd daemon be restarted.
|
||||
</p>
|
||||
|
||||
<h2><a id="perms">Objects and permissions</a></h2>
|
||||
|
||||
<p>
|
||||
Libvirt applies access control to all the main object
|
||||
types in its API. Each object type, in turn, has a set
|
||||
of permissions defined. To determine what permissions
|
||||
are checked for specific API call, consult the
|
||||
<a href="html/index.html">API reference manual</a>
|
||||
documentation for the API in question.
|
||||
</p>
|
||||
|
||||
<div id="include" filename="aclperms.htmlinc"/>
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -1,523 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<body>
|
||||
<h1>Polkit access control</h1>
|
||||
|
||||
<p>
|
||||
Libvirt's client <a href="acl.html">access control framework</a> allows
|
||||
administrators to setup fine grained permission rules across client users,
|
||||
managed objects and API operations. This allows client connections
|
||||
to be locked down to a minimal set of privileges. The polkit driver
|
||||
provides a simple implementation of the access control framework.
|
||||
</p>
|
||||
|
||||
<ul id="toc"></ul>
|
||||
|
||||
<h2><a id="intro">Introduction</a></h2>
|
||||
|
||||
<p>
|
||||
A default install of libvirt will typically use
|
||||
<a href="http://www.freedesktop.org/wiki/Software/polkit/">polkit</a>
|
||||
to authenticate the initial user connection to libvirtd. This is a
|
||||
very coarse grained check though, either allowing full read-write
|
||||
access to all APIs, or just read-only access. The polkit access
|
||||
control driver in libvirt builds on this capability to allow for
|
||||
fine grained control over the operations a user may perform on an
|
||||
object.
|
||||
</p>
|
||||
|
||||
<h2><a id="perms">Permission names</a></h2>
|
||||
|
||||
<p>
|
||||
The libvirt <a href="acl.html#perms">object names and permission names</a>
|
||||
are mapped onto polkit action names using the simple pattern:
|
||||
</p>
|
||||
|
||||
<pre>org.libvirt.api.$object.$permission
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
The only caveat is that any underscore characters in the
|
||||
object or permission names are converted to hyphens. So,
|
||||
for example, the <code>search_storage_vols</code> permission
|
||||
on the <code>storage_pool</code> object maps to the polkit
|
||||
action:
|
||||
</p>
|
||||
<pre>org.libvirt.api.storage-pool.search-storage-vols
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
The default policy for any permission which corresponds to
|
||||
a "read only" operation, is to allow access. All other
|
||||
permissions default to deny access.
|
||||
</p>
|
||||
|
||||
<h2><a id="attrs">Object identity attributes</a></h2>
|
||||
|
||||
<p>
|
||||
To allow polkit authorization rules to be written to match
|
||||
against individual object instances, libvirt provides a number
|
||||
of authorization detail attributes when performing a permission
|
||||
check. The set of attributes varies according to the type
|
||||
of object being checked
|
||||
</p>
|
||||
|
||||
<h3><a id="object_connect">virConnectPtr</a></h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>connect_driver</td>
|
||||
<td>Name of the libvirt connection driver</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3><a id="object_domain">virDomainPtr</a></h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>connect_driver</td>
|
||||
<td>Name of the libvirt connection driver</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>domain_name</td>
|
||||
<td>Name of the domain, unique to the local host</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>domain_uuid</td>
|
||||
<td>UUID of the domain, globally unique</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3><a id="object_interface">virInterfacePtr</a></h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>connect_driver</td>
|
||||
<td>Name of the libvirt connection driver</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>interface_name</td>
|
||||
<td>Name of the network interface, unique to the local host</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>interface_macaddr</td>
|
||||
<td>MAC address of the network interface, not unique</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3><a id="object_network">virNetworkPtr</a></h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>connect_driver</td>
|
||||
<td>Name of the libvirt connection driver</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>network_name</td>
|
||||
<td>Name of the network, unique to the local host</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>network_uuid</td>
|
||||
<td>UUID of the network, globally unique</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3><a id="object_node_device">virNodeDevicePtr</a></h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>connect_driver</td>
|
||||
<td>Name of the libvirt connection driver</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>node_device_name</td>
|
||||
<td>Name of the node device, unique to the local host</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3><a id="object_nwfilter">virNWFilterPtr</a></h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>connect_driver</td>
|
||||
<td>Name of the libvirt connection driver</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>nwfilter_name</td>
|
||||
<td>Name of the network filter, unique to the local host</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>nwfilter_uuid</td>
|
||||
<td>UUID of the network filter, globally unique</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3><a id="object_secret">virSecretPtr</a></h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>connect_driver</td>
|
||||
<td>Name of the libvirt connection driver</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>secret_uuid</td>
|
||||
<td>UUID of the secret, globally unique</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>secret_usage_volume</td>
|
||||
<td>Name of the associated volume, if any</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>secret_usage_ceph</td>
|
||||
<td>Name of the associated Ceph server, if any</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>secret_usage_target</td>
|
||||
<td>Name of the associated iSCSI target, if any</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>secret_usage_name</td>
|
||||
<td>Name of the associated TLS secret, if any</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3><a id="object_storage_pool">virStoragePoolPtr</a></h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>connect_driver</td>
|
||||
<td>Name of the libvirt connection driver</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>pool_name</td>
|
||||
<td>Name of the storage pool, unique to the local host</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>pool_uuid</td>
|
||||
<td>UUID of the storage pool, globally unique</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3><a id="object_storage_vol">virStorageVolPtr</a></h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>connect_driver</td>
|
||||
<td>Name of the libvirt connection driver</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>pool_name</td>
|
||||
<td>Name of the storage pool, unique to the local host</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>pool_uuid</td>
|
||||
<td>UUID of the storage pool, globally unique</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>vol_name</td>
|
||||
<td>Name of the storage volume, unique to the pool</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>vol_key</td>
|
||||
<td>Key of the storage volume, globally unique</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2><a id="connect_driver">Hypervisor Driver connect_driver</a></h2>
|
||||
<p>
|
||||
The <code>connect_driver</code> parameter describes the
|
||||
client's <a href="remote.html">remote Connection Driver</a>
|
||||
name based on the <a href="uri.html">URI</a> used for the
|
||||
connection.
|
||||
</p>
|
||||
<p>
|
||||
<span class="since">Since 4.1.0</span>, when calling an API
|
||||
outside the scope of the primary connection driver, the
|
||||
primary driver will attempt to open a secondary connection
|
||||
to the specific API driver in order to process the API. For
|
||||
example, when hypervisor domain processing needs to make an
|
||||
API call within the storage driver or the network filter driver
|
||||
an attempt to open a connection to the "storage" or "nwfilter"
|
||||
driver will be made. Similarly, a "storage" primary connection
|
||||
may need to create a connection to the "secret" driver in order
|
||||
to process secrets for the API. If successful, then calls to
|
||||
those API's will occur in the <code>connect_driver</code> context
|
||||
of the secondary connection driver rather than in the context of
|
||||
the primary driver. This affects the <code>connect_driver</code>
|
||||
returned from rule generation from the <code>action.loookup</code>
|
||||
function. The following table provides a list of the various
|
||||
connection drivers and the <code>connect_driver</code> name
|
||||
used by each regardless of primary or secondary connection.
|
||||
The access denied error message from libvirt will list the
|
||||
connection driver by name that denied the access.
|
||||
</p>
|
||||
|
||||
<h3><a id="object_connect_driver">Connection Driver Name</a></h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Connection Driver</th>
|
||||
<th><code>connect_driver</code> name</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>bhyve</td>
|
||||
<td>bhyve</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>esx</td>
|
||||
<td>ESX</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>hyperv</td>
|
||||
<td>Hyper-V</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>interface</td>
|
||||
<td>interface</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>xen</td>
|
||||
<td>Xen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>lxc</td>
|
||||
<td>LXC</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>network</td>
|
||||
<td>network</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>nodedev</td>
|
||||
<td>nodedev</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>nwfilter</td>
|
||||
<td>NWFilter</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>openvz</td>
|
||||
<td>OPENVZ</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>qemu</td>
|
||||
<td>QEMU</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>secret</td>
|
||||
<td>secret</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>storage</td>
|
||||
<td>storage</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>vbox</td>
|
||||
<td>VBOX</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>vmware</td>
|
||||
<td>VMWARE</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>vz</td>
|
||||
<td>vz</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<h2><a id="user">User identity attributes</a></h2>
|
||||
|
||||
<p>
|
||||
At this point in time, the only attribute provided by
|
||||
libvirt to identify the user invoking the operation
|
||||
is the PID of the client program. This means that the
|
||||
polkit access control driver is only useful if connections
|
||||
to libvirt are restricted to its UNIX domain socket. If
|
||||
connections are being made to a TCP socket, no identifying
|
||||
information is available and access will be denied.
|
||||
Also note that if the client is connecting via an SSH
|
||||
tunnel, it is the local SSH user that will be identified.
|
||||
In future versions, it is expected that more information
|
||||
about the client user will be provided, including the
|
||||
SASL / Kerberos username and/or x509 distinguished
|
||||
name obtained from the authentication provider in use.
|
||||
</p>
|
||||
|
||||
|
||||
<h2><a id="checks">Writing access control policies</a></h2>
|
||||
|
||||
<p>
|
||||
If using versions of polkit prior to 0.106 then it is only
|
||||
possible to validate (user, permission) pairs via the <code>.pkla</code>
|
||||
files. Fully validation of the (user, permission, object) triple
|
||||
requires the new JavaScript <code>.rules</code> support that
|
||||
was introduced in version 0.106. The latter is what will be
|
||||
described here.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Libvirt does not ship any rules files by default. It merely
|
||||
provides a definition of the default behaviour for each
|
||||
action (permission). As noted earlier, permissions which
|
||||
correspond to read-only operations in libvirt will be allowed
|
||||
to all users by default; everything else is denied by default.
|
||||
Defining custom rules requires creation of a file in the
|
||||
<code>/etc/polkit-1/rules.d</code> directory with a name
|
||||
chosen by the administrator (<code>100-libvirt-acl.rules</code>
|
||||
would be a reasonable choice). See the <code>polkit(8)</code>
|
||||
manual page for a description of how to write these files
|
||||
in general. The key idea is to create a file containing
|
||||
something like
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
polkit.addRule(function(action, subject) {
|
||||
....logic to check 'action' and 'subject'...
|
||||
});
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
In this code snippet above, the <code>action</code> object
|
||||
instance will represent the libvirt permission being checked
|
||||
along with identifying attributes for the object it is being
|
||||
applied to. The <code>subject</code> meanwhile will identify
|
||||
the libvirt client app (with the caveat above about it only
|
||||
dealing with local clients connected via the UNIX socket).
|
||||
On the <code>action</code> object, the permission name is
|
||||
accessible via the <code>id</code> attribute, while the
|
||||
object identifying attributes are exposed via the
|
||||
<code>lookup</code> method.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
See
|
||||
<a href="https://gitlab.com/libvirt/libvirt/-/tree/master/examples/polkit">source code</a>
|
||||
for a more complex example.
|
||||
</p>
|
||||
|
||||
<h3><a id="exconnect">Example: restricting ability to connect to drivers</a></h3>
|
||||
|
||||
<p>
|
||||
Consider a local user <code>berrange</code>
|
||||
who has been granted permission to connect to libvirt in
|
||||
full read-write mode. The goal is to only allow them to
|
||||
use the <code>QEMU</code> driver and not the Xen or LXC
|
||||
drivers which are also available in libvirtd.
|
||||
To achieve this we need to write a rule which checks
|
||||
whether the <code>connect_driver</code> attribute
|
||||
is <code>QEMU</code>, and match on an action
|
||||
name of <code>org.libvirt.api.connect.getattr</code>. Using
|
||||
the javascript rules format, this ends up written as
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
polkit.addRule(function(action, subject) {
|
||||
if (action.id == "org.libvirt.api.connect.getattr" &&
|
||||
subject.user == "berrange") {
|
||||
if (action.lookup("connect_driver") == 'QEMU') {
|
||||
return polkit.Result.YES;
|
||||
} else {
|
||||
return polkit.Result.NO;
|
||||
}
|
||||
}
|
||||
});
|
||||
</pre>
|
||||
|
||||
<h3><a id="exdomain">Example: restricting access to a single domain</a></h3>
|
||||
|
||||
<p>
|
||||
Consider a local user <code>berrange</code>
|
||||
who has been granted permission to connect to libvirt in
|
||||
full read-write mode. The goal is to only allow them to
|
||||
see the domain called <code>demo</code> on the LXC driver.
|
||||
To achieve this we need to write a rule which checks
|
||||
whether the <code>connect_driver</code> attribute
|
||||
is <code>LXC</code> and the <code>domain_name</code>
|
||||
attribute is <code>demo</code>, and match on an action
|
||||
name of <code>org.libvirt.api.domain.getattr</code>. Using
|
||||
the javascript rules format, this ends up written as
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
polkit.addRule(function(action, subject) {
|
||||
if (action.id == "org.libvirt.api.domain.getattr" &&
|
||||
subject.user == "berrange") {
|
||||
if (action.lookup("connect_driver") == 'LXC' &&
|
||||
action.lookup("domain_name") == 'demo') {
|
||||
return polkit.Result.YES;
|
||||
} else {
|
||||
return polkit.Result.NO;
|
||||
}
|
||||
}
|
||||
});
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
@@ -1,178 +0,0 @@
|
||||
=========================
|
||||
Advanced test suite usage
|
||||
=========================
|
||||
|
||||
The basic requirement before submitting changes to libvirt is that
|
||||
|
||||
::
|
||||
|
||||
$ make check
|
||||
$ make syntax-check
|
||||
|
||||
succeed after each commit.
|
||||
|
||||
The libvirt test suite, however, support additional features: for
|
||||
example, it's possible to look for memory leaks and similar issues
|
||||
by running
|
||||
|
||||
::
|
||||
|
||||
$ make -C tests valgrind
|
||||
|
||||
`Valgrind <http://valgrind.org/>`__ is a test that checks for
|
||||
memory management issues, such as leaks or use of uninitialized
|
||||
variables.
|
||||
|
||||
Some tests are skipped by default in a development environment,
|
||||
based on the time they take in comparison to the likelihood
|
||||
that those tests will turn up problems during incremental
|
||||
builds. These tests default to being run when building from a
|
||||
tarball or with the configure option --enable-expensive-tests;
|
||||
you can also force a one-time toggle of these tests by setting
|
||||
VIR_TEST_EXPENSIVE to 0 or 1 at make time, as in:
|
||||
|
||||
::
|
||||
|
||||
$ make check VIR_TEST_EXPENSIVE=1
|
||||
|
||||
If you encounter any failing tests, the VIR_TEST_DEBUG
|
||||
environment variable may provide extra information to debug the
|
||||
failures. Larger values of VIR_TEST_DEBUG may provide larger
|
||||
amounts of information:
|
||||
|
||||
::
|
||||
|
||||
$ VIR_TEST_DEBUG=1 make check (or)
|
||||
$ VIR_TEST_DEBUG=2 make check
|
||||
|
||||
When debugging failures during development, it is possible to
|
||||
focus in on just the failing subtests by using VIR_TEST_RANGE.
|
||||
I.e. to run all tests from 3 to 20 with the exception of tests
|
||||
6 and 16, use:
|
||||
|
||||
::
|
||||
|
||||
$ VIR_TEST_DEBUG=1 VIR_TEST_RANGE=3-5,7-20,^16 ./run tests/qemuxml2argvtest
|
||||
|
||||
Also, individual tests can be run from inside the ``tests/``
|
||||
directory, like:
|
||||
|
||||
::
|
||||
|
||||
$ ./qemuxml2xmltest
|
||||
|
||||
If you are adding new test cases, or making changes that alter
|
||||
existing test output, you can use the environment variable
|
||||
VIR_TEST_REGENERATE_OUTPUT to quickly update the saved test
|
||||
data. Of course you still need to review the changes VERY
|
||||
CAREFULLY to ensure they are correct.
|
||||
|
||||
::
|
||||
|
||||
$ VIR_TEST_REGENERATE_OUTPUT=1 ./qemuxml2argvtest
|
||||
|
||||
There is also a ``./run`` script at the top level, to make it
|
||||
easier to run programs that have not yet been installed, as
|
||||
well as to wrap invocations of various tests under gdb or
|
||||
Valgrind.
|
||||
|
||||
When running our test suite it may happen that the test result
|
||||
is nondeterministic because of the test suite relying on a
|
||||
particular file in the system being accessible or having some
|
||||
specific value. To catch this kind of errors, the test suite
|
||||
has a module for that prints any path touched that fulfils
|
||||
constraints described above into a file. To enable it just set
|
||||
``VIR_TEST_FILE_ACCESS`` environment variable. Then
|
||||
``VIR_TEST_FILE_ACCESS_OUTPUT`` environment variable can alter
|
||||
location where the file is stored.
|
||||
|
||||
::
|
||||
|
||||
$ VIR_TEST_FILE_ACCESS=1 VIR_TEST_FILE_ACCESS_OUTPUT="/tmp/file_access.txt" ./qemuxml2argvtest
|
||||
|
||||
#. The Valgrind test should produce similar output to
|
||||
``make check``. If the output has traces within libvirt API's,
|
||||
then investigation is required in order to determine the cause
|
||||
of the issue. Output such as the following indicates some sort
|
||||
of leak:
|
||||
|
||||
::
|
||||
|
||||
==5414== 4 bytes in 1 blocks are definitely lost in loss record 3 of 89
|
||||
==5414== at 0x4A0881C: malloc (vg_replace_malloc.c:270)
|
||||
==5414== by 0x34DE0AAB85: xmlStrndup (in /usr/lib64/libxml2.so.2.7.8)
|
||||
==5414== by 0x4CC97A6: virDomainVideoDefParseXML (domain_conf.c:7410)
|
||||
==5414== by 0x4CD581D: virDomainDefParseXML (domain_conf.c:10188)
|
||||
==5414== by 0x4CD8C73: virDomainDefParseNode (domain_conf.c:10640)
|
||||
==5414== by 0x4CD8DDB: virDomainDefParse (domain_conf.c:10590)
|
||||
==5414== by 0x41CB1D: testCompareXMLToArgvHelper (qemuxml2argvtest.c:100)
|
||||
==5414== by 0x41E20F: virtTestRun (testutils.c:161)
|
||||
==5414== by 0x41C7CB: mymain (qemuxml2argvtest.c:866)
|
||||
==5414== by 0x41E84A: virtTestMain (testutils.c:723)
|
||||
==5414== by 0x34D9021734: (below main) (in /usr/lib64/libc-2.15.so)
|
||||
|
||||
In this example, the ``virDomainDefParseXML()`` had an error
|
||||
path where the ``virDomainVideoDefPtr video`` pointer was not
|
||||
properly disposed. By simply adding a
|
||||
``virDomainVideoDefFree(video);`` in the error path, the issue
|
||||
was resolved.
|
||||
|
||||
Another common mistake is calling a printing function, such as
|
||||
``VIR_DEBUG()`` without initializing a variable to be printed.
|
||||
The following example involved a call which could return an
|
||||
error, but not set variables passed by reference to the call.
|
||||
The solution was to initialize the variables prior to the call.
|
||||
|
||||
::
|
||||
|
||||
==4749== Use of uninitialised value of size 8
|
||||
==4749== at 0x34D904650B: _itoa_word (in /usr/lib64/libc-2.15.so)
|
||||
==4749== by 0x34D9049118: vfprintf (in /usr/lib64/libc-2.15.so)
|
||||
==4749== by 0x34D9108F60: __vasprintf_chk (in /usr/lib64/libc-2.15.so)
|
||||
==4749== by 0x4CAEEF7: virVasprintf (stdio2.h:199)
|
||||
==4749== by 0x4C8A55E: virLogVMessage (virlog.c:814)
|
||||
==4749== by 0x4C8AA96: virLogMessage (virlog.c:751)
|
||||
==4749== by 0x4DA0056: virNetTLSContextCheckCertKeyUsage (virnettlscontext.c:225)
|
||||
==4749== by 0x4DA06DB: virNetTLSContextCheckCert (virnettlscontext.c:439)
|
||||
==4749== by 0x4DA1620: virNetTLSContextNew (virnettlscontext.c:562)
|
||||
==4749== by 0x4DA26FC: virNetTLSContextNewServer (virnettlscontext.c:927)
|
||||
==4749== by 0x409C39: testTLSContextInit (virnettlscontexttest.c:467)
|
||||
==4749== by 0x40AB8F: virtTestRun (testutils.c:161)
|
||||
|
||||
Valgrind will also find some false positives or code paths
|
||||
which cannot be resolved by making changes to the libvirt code.
|
||||
For these paths, it is possible to add a filter to avoid the
|
||||
errors. For example:
|
||||
|
||||
::
|
||||
|
||||
==4643== 7 bytes in 1 blocks are possibly lost in loss record 4 of 20
|
||||
==4643== at 0x4A0881C: malloc (vg_replace_malloc.c:270)
|
||||
==4643== by 0x34D90853F1: strdup (in /usr/lib64/libc-2.15.so)
|
||||
==4643== by 0x34EEC2C08A: ??? (in /usr/lib64/libnl.so.1.1)
|
||||
==4643== by 0x34EEC15B81: ??? (in /usr/lib64/libnl.so.1.1)
|
||||
==4643== by 0x34D8C0EE15: call_init.part.0 (in /usr/lib64/ld-2.15.so)
|
||||
==4643== by 0x34D8C0EECF: _dl_init (in /usr/lib64/ld-2.15.so)
|
||||
==4643== by 0x34D8C01569: ??? (in /usr/lib64/ld-2.15.so)
|
||||
|
||||
In this instance, it is acceptable to modify the
|
||||
``tests/.valgrind.supp`` file in order to add a suppression
|
||||
filter. The filter should be unique enough to not suppress real
|
||||
leaks, but it should be generic enough to cover multiple code
|
||||
paths. The format of the entry can be found in the
|
||||
documentation found at the `Valgrind home
|
||||
page <http://valgrind.org/>`__. The following trace was added
|
||||
to ``tests/.valgrind.supp`` in order to suppress the warning:
|
||||
|
||||
::
|
||||
|
||||
{
|
||||
dlInitMemoryLeak1
|
||||
Memcheck:Leak
|
||||
fun:?alloc
|
||||
...
|
||||
fun:call_init.part.0
|
||||
fun:_dl_init
|
||||
...
|
||||
obj:*/lib*/ld-2.*so*
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 13 KiB |
Binary file not shown.
Before Width: | Height: | Size: 16 KiB |
380
docs/api.html.in
380
docs/api.html.in
@@ -1,380 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<body>
|
||||
<h1>The libvirt API concepts</h1>
|
||||
|
||||
<p> This page describes the main principles and architecture choices
|
||||
behind the definition of the libvirt API:</p>
|
||||
|
||||
<ul id="toc"></ul>
|
||||
|
||||
<h2><a id="Objects">Objects Exposed</a></h2>
|
||||
<p> As defined in the <a href="goals.html">goals section</a>, the libvirt
|
||||
API is designed to expose all the resources needed to manage the
|
||||
virtualization support of recent operating systems. The first object
|
||||
manipulated through the API is the <code>virConnectPtr</code>, which
|
||||
represents the connection to a hypervisor. Any application using libvirt
|
||||
is likely to start using the
|
||||
API by calling one of <a href="html/libvirt-libvirt-host.html#virConnectOpen"
|
||||
>the virConnectOpen functions</a>. You will note that those functions take
|
||||
a name argument which is actually a <a href="uri.html">connection URI</a>
|
||||
to select the right hypervisor to open.
|
||||
A URI is needed to allow remote connections and also select between
|
||||
different possible hypervisors. For example, on a Linux system it may be
|
||||
possible to use both KVM and LinuxContainers on the same node. A NULL
|
||||
name will default to a preselected hypervisor, but it's probably not a
|
||||
wise thing to do in most cases. See the <a href="uri.html">connection
|
||||
URI</a> page for a full descriptions of the values allowed.</p>
|
||||
<p> OnDevice the application obtains a
|
||||
<a href="/html/libvirt-libvirt-host.html#virConnectPtr">
|
||||
<code>virConnectPtr</code>
|
||||
</a>
|
||||
connection to the hypervisor it can then use it to manage the hypervisor's
|
||||
available domains and related virtualization
|
||||
resources, such as storage and networking. All those are
|
||||
exposed as first class objects and connected to the hypervisor connection
|
||||
(and the node or cluster where it is available).</p>
|
||||
<p class="image">
|
||||
<img alt="first class objects exposed by the API"
|
||||
src="libvirt-object-model.png"/>
|
||||
</p>
|
||||
<p> The figure above shows the five main objects exported by the API:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-host.html#virConnectPtr">
|
||||
<code>virConnectPtr</code>
|
||||
</a>
|
||||
<p>Represents the connection to a hypervisor. Use one of the
|
||||
<a href="html/libvirt-libvirt-host.html#virConnectOpen">virConnectOpen</a>
|
||||
functions to obtain connection to the hypervisor which is then used
|
||||
as a parameter to other connection API's.</p></li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-domain.html#virDomainPtr">
|
||||
<code>virDomainPtr</code>
|
||||
</a>
|
||||
<p>Represents one domain either active or defined (i.e. existing as
|
||||
permanent config file and storage but not currently running on that
|
||||
node). The function
|
||||
<a href="html/libvirt-libvirt-domain.html#virConnectListAllDomains">
|
||||
<code>virConnectListAllDomains</code>
|
||||
</a>
|
||||
lists all the domains for the hypervisor.</p></li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-network.html#virNetworkPtr">
|
||||
<code>virNetworkPtr</code>
|
||||
</a>
|
||||
<p>Represents one network either active or defined (i.e. existing
|
||||
as permanent config file and storage but not currently activated).
|
||||
The function
|
||||
<a href="html/libvirt-libvirt-network.html#virConnectListAllNetworks">
|
||||
<code>virConnectListAllNetworks</code>
|
||||
</a>
|
||||
lists all the virtualization networks for the hypervisor.</p></li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-storage.html#virStorageVolPtr">
|
||||
<code>virStorageVolPtr</code>
|
||||
</a>
|
||||
<p>Represents one storage volume generally used
|
||||
as a block device available to one of the domains. The function
|
||||
<a href="html/libvirt-libvirt-storage.html#virStorageVolLookupByPath">
|
||||
<code>virStorageVolLookupByPath</code>
|
||||
</a>
|
||||
finds the storage volume object based on its path on the node.</p></li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-storage.html#virStoragePoolPtr">
|
||||
<code>virStoragePoolPtr</code>
|
||||
</a>
|
||||
<p>Represents a storage pool, which is a logical area
|
||||
used to allocate and store storage volumes. The function
|
||||
<a href="html/libvirt-libvirt-storage.html#virConnectListAllStoragePools">
|
||||
<code>virConnectListAllStoragePools</code>
|
||||
</a>
|
||||
lists all of the virtualization storage pools on the hypervisor.
|
||||
The function
|
||||
<a href="html/libvirt-libvirt-storage.html#virStoragePoolLookupByVolume">
|
||||
<code>virStoragePoolLookupByVolume</code>
|
||||
</a>
|
||||
finds the storage pool containing a given storage volume.</p></li>
|
||||
</ul>
|
||||
<p> Most objects manipulated by the library can also be represented using
|
||||
XML descriptions. This is used primarily to create those object, but is
|
||||
also helpful to modify or save their description back.</p>
|
||||
<p> Domains, networks, and storage pools can be either <code>active</code>
|
||||
i.e. either running or available for immediate use, or
|
||||
<code>defined</code> in which case they are inactive but there is
|
||||
a permanent definition available in the system for them. Based on this
|
||||
they can be activated dynamically in order to be used.</p>
|
||||
<p> Most objects can also be named in various ways:</p>
|
||||
<ul>
|
||||
<li><code>name</code>
|
||||
<p>A user friendly identifier but whose uniqueness
|
||||
cannot be guaranteed between two nodes.</p></li>
|
||||
<li><code>ID</code>
|
||||
<p>A runtime unique identifier
|
||||
provided by the hypervisor for one given activation of the object;
|
||||
however, it becomes invalid once the resource is deactivated.</p></li >
|
||||
<li><code>UUID</code>
|
||||
<p> A 16 byte unique identifier
|
||||
as defined in <a href="http://www.ietf.org/rfc/rfc4122.txt">RFC 4122</a>,
|
||||
which is guaranteed to be unique for long term usage and across a
|
||||
set of nodes.</p></li>
|
||||
</ul>
|
||||
|
||||
<h2><a id="Functions">Functions and Naming Conventions</a></h2>
|
||||
<p> The naming of the functions present in the library is usually
|
||||
composed by a prefix describing the object associated to the function
|
||||
and a verb describing the action on that object.</p>
|
||||
<p> For each first class object you will find APIs
|
||||
for the following actions:</p>
|
||||
<ul>
|
||||
<li><b>Lookup</b> [...LookupBy...]
|
||||
<p>Used to perform lookups on objects by some type of identifier,
|
||||
such as:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-domain.html#virDomainLookupByID">
|
||||
<code>virDomainLookupByID</code>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-domain.html#virDomainLookupByName">
|
||||
<code>virDomainLookupByName</code>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-domain.html#virDomainLookupByUUID">
|
||||
<code>virDomainLookupByUUID</code>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-domain.html#virDomainLookupByUUIDString">
|
||||
<code>virDomainLookupByUUIDString</code>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>Enumeration</b> [virConnectList..., virConnectNumOf...]
|
||||
<p>Used to enumerate a set of object available to a given
|
||||
hypervisor connection such as:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-domain.html#virConnectListDomains">
|
||||
<code>virConnectListDomains</code>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-domain.html#virConnectNumOfDomains">
|
||||
<code>virConnectNumOfDomains</code>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-network.html#virConnectListNetworks">
|
||||
<code>virConnectListNetworks</code>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-storage.html#virConnectListStoragePools">
|
||||
<code>virConnectListStoragePools</code>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>Description</b> [...GetInfo]
|
||||
<p>Generic accessor providing a set of generic information about an
|
||||
object, such as: </p>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-host.html#virNodeGetInfo">
|
||||
<code>virNodeGetInfo</code>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-domain.html#virDomainGetInfo">
|
||||
<code>virDomainGetInfo</code>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-storage.html#virStoragePoolGetInfo">
|
||||
<code>virStoragePoolGetInfo</code>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-storage.html#virStorageVolGetInfo">
|
||||
<code>virStorageVolGetInfo</code>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>Accessors</b> [...Get..., ...Set...]
|
||||
<p>Specific accessors used to query or modify data for the given object,
|
||||
such as: </p>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-host.html#virConnectGetType">
|
||||
<code>virConnectGetType</code>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-domain.html#virDomainGetMaxMemory">
|
||||
<code>virDomainGetMaxMemory</code>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-domain.html#virDomainSetMemory">
|
||||
<code>virDomainSetMemory</code>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-domain.html#virDomainGetVcpus">
|
||||
<code>virDomainGetVcpus</code>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-storage.html#virStoragePoolSetAutostart">
|
||||
<code>virStoragePoolSetAutostart</code>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-network.html#virNetworkGetBridgeName">
|
||||
<code>virNetworkGetBridgeName</code>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>Creation</b> [...Create, ...CreateXML]
|
||||
<p>Used to create and start objects. The ...CreateXML APIs will create
|
||||
the object based on an XML description, while the ...Create APIs will
|
||||
create the object based on existing object pointer, such as: </p>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-domain.html#virDomainCreate">
|
||||
<code>virDomainCreate</code>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-domain.html#virDomainCreateXML">
|
||||
<code>virDomainCreateXML</code>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-network.html#virNetworkCreate">
|
||||
<code>virNetworkCreate</code>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-network.html#virNetworkCreateXML">
|
||||
<code>virNetworkCreateXML</code>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>Destruction</b> [...Destroy]
|
||||
<p>Used to shutdown or deactivate and destroy objects, such as: </p>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-domain.html#virDomainDestroy">
|
||||
<code>virDomainDestroy</code>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-network.html#virNetworkDestroy">
|
||||
<code>virNetworkDestroy</code>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="html/libvirt-libvirt-storage.html#virStoragePoolDestroy">
|
||||
<code>virStoragePoolDestroy</code>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Note: functions returning vir*Ptr (like the virDomainLookup functions)
|
||||
allocate memory which needs to be freed by the caller by the corresponding
|
||||
vir*Free function (e.g. virDomainFree for a virDomainPtr object).
|
||||
</p>
|
||||
<p> For more in-depth details of the storage related APIs see
|
||||
<a href="storage.html">the storage management page</a>.
|
||||
</p>
|
||||
<h2><a id="Drivers">The libvirt Drivers</a></h2>
|
||||
<p>Drivers are the basic building block for libvirt functionality
|
||||
to support the capability to handle specific hypervisor driver calls.
|
||||
Drivers are discovered and registered during connection processing as
|
||||
part of the
|
||||
<a href="html/libvirt-libvirt-host.html#virInitialize">
|
||||
<code>virInitialize</code>
|
||||
</a>
|
||||
API. Each driver
|
||||
has a registration API which loads up the driver specific function
|
||||
references for the libvirt APIs to call. The following is a simplistic
|
||||
view of the hypervisor driver mechanism. Consider the stacked list of
|
||||
drivers as a series of modules that can be plugged into the architecture
|
||||
depending on how libvirt is configured to be built.</p>
|
||||
<p class="image">
|
||||
<img alt="The libvirt driver architecture"
|
||||
src="libvirt-driver-arch.png"/>
|
||||
</p>
|
||||
<p>The driver architecture is also used to support other virtualization
|
||||
components such as storage, storage pools, host device, networking,
|
||||
network interfaces, and network filters.</p>
|
||||
<p>See the <a href="drivers.html">libvirt drivers</a> page for more
|
||||
information on hypervisor and storage specific drivers.</p>
|
||||
<p>Not all drivers support every virtualization function possible.
|
||||
The <a href="hvsupport.html">libvirt API support matrix</a> lists
|
||||
the various functions and support found in each driver by the version
|
||||
support was added into libvirt.
|
||||
</p>
|
||||
<h2><a id="Remote">Daemon and Remote Access</a></h2>
|
||||
<p>Access to libvirt drivers is primarily handled by the libvirtd
|
||||
daemon through the <a href="remote.html">remote</a> driver via an
|
||||
<a href="internals/rpc.html">RPC</a>. Some hypervisors do support
|
||||
client-side connections and responses, such as Test, OpenVZ, VMware,
|
||||
VirtualBox (vbox), ESX, Hyper-V, Xen, and Virtuozzo.
|
||||
The libvirtd daemon service is started on the host at system boot
|
||||
time and can also be restarted at any time by a properly privileged
|
||||
user, such as root. The libvirtd daemon uses the same libvirt API
|
||||
<a href="html/libvirt-libvirt-host.html#virInitialize">
|
||||
<code>virInitialize</code>
|
||||
</a>
|
||||
sequence as applications
|
||||
for client-side driver registrations, but then extends the registered
|
||||
driver list to encompass all known drivers supported for all driver
|
||||
types supported on the host. </p>
|
||||
<p>The libvirt client <a href="apps.html">applications</a> use a
|
||||
<a href="uri.html">URI</a> to obtain the <code>virConnectPtr</code>.
|
||||
The <code>virConnectPtr</code> keeps track of the driver connection
|
||||
plus a variety of other connections (network, interface, storage, etc.).
|
||||
The <code>virConnectPtr</code> is then used as a parameter to other
|
||||
virtualization <a href="#Functions">functions</a>. Depending upon the
|
||||
driver being used, calls will be routed through the remote driver to
|
||||
the libvirtd daemon. The daemon will reference the connection specific
|
||||
driver in order to retrieve the requested information and then pass
|
||||
back status and/or data through the connection back to the application.
|
||||
The application can then decide what to do with that data, such as
|
||||
display, write log data, etc. <a href="migration.html">Migration</a>
|
||||
is an example of many facets of the architecture in use.</p>
|
||||
|
||||
<p class="image">
|
||||
<img alt="The libvirt daemon and remote architecture"
|
||||
src="libvirt-daemon-arch.png"/>
|
||||
</p>
|
||||
<p>
|
||||
The key takeaway from the above diagram is that there is a remote driver
|
||||
which handles transactions for a majority of the drivers. The libvirtd
|
||||
daemon running on the host will receive transaction requests from the
|
||||
remote driver and will then query the hypervisor driver as specified in
|
||||
the <code>virConnectPtr</code> in order to fetch the data. The data will
|
||||
then be returned through the remote driver to the client application
|
||||
for processing.
|
||||
</p>
|
||||
<p>If you are interested in contributing to libvirt, read the
|
||||
<a href="http://wiki.libvirt.org/page/FAQ">FAQ</a> and
|
||||
<a href="hacking.html">hacking</a> guidelines to gain an understanding
|
||||
of basic rules and guidelines. In order to add new API functionality
|
||||
follow the instructions regarding
|
||||
<a href="api_extension.html">implementing a new API in libvirt</a>.
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -1,371 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<body>
|
||||
<h1>Implementing a new API in Libvirt</h1>
|
||||
|
||||
<ul id="toc"></ul>
|
||||
|
||||
<p>
|
||||
This document walks you through the process of implementing a new
|
||||
API in libvirt. Remember that new API consists of any new public
|
||||
functions, as well as the addition of flags or extensions of XML used by
|
||||
existing functions.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Before you begin coding, it is critical that you propose your
|
||||
changes on the libvirt mailing list and get feedback on your ideas to
|
||||
make sure what you're proposing fits with the general direction of the
|
||||
project. Even before doing a proof of concept implementation, send an
|
||||
email giving an overview of the functionality you think should be
|
||||
added to libvirt. Someone may already be working on the feature you
|
||||
want. Also, recognize that everything you write is likely to undergo
|
||||
significant rework as you discuss it with the other developers, so
|
||||
don't wait too long before getting feedback.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Adding a new API to libvirt is not difficult, but there are quite a
|
||||
few steps. This document assumes that you are familiar with C
|
||||
programming and have checked out the libvirt code from the source code
|
||||
repository and successfully built the existing tree. Instructions on
|
||||
how to check out and build the code can be found at:
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="https://libvirt.org/downloads.html">https://libvirt.org/downloads.html</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Once you have a working development environment, the steps to create a
|
||||
new API are:
|
||||
</p>
|
||||
<ol>
|
||||
<li>define the public API</li>
|
||||
<li>define the internal driver API</li>
|
||||
<li>implement the public API</li>
|
||||
<li>implement the remote protocol:
|
||||
<ol>
|
||||
<li>define the wire protocol format</li>
|
||||
<li>implement the RPC client</li>
|
||||
<li>implement the server side dispatcher</li>
|
||||
</ol>
|
||||
</li>
|
||||
<li>use new API where appropriate in drivers</li>
|
||||
<li>add virsh support</li>
|
||||
<li>add common handling for new API</li>
|
||||
<li>for each driver that can support the new API:
|
||||
<ol>
|
||||
<li>add prerequisite support</li>
|
||||
<li>fully implement new API</li>
|
||||
</ol>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<p>
|
||||
It is, of course, possible to implement the pieces in any order, but
|
||||
if the development tasks are completed in the order listed, the code
|
||||
will compile after each step. Given the number of changes required,
|
||||
verification after each step is highly recommended.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Submit new code in the form of one patch per step. That's not to say
|
||||
submit patches before you have working functionality--get the whole thing
|
||||
working and make sure you're happy with it. Then use git to break the
|
||||
changes into pieces so you don't drop a big blob of code on the
|
||||
mailing list in one go. Also, you should follow the upstream tree, and
|
||||
rebase your series to adapt your patches to work with any other changes
|
||||
that were accepted upstream during your development.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Don't mix anything else into the patches you submit. The patches
|
||||
should be the minimal changes required to implement the functionality
|
||||
you're adding. If you notice a bug in unrelated code (i.e., code you
|
||||
don't have to touch to implement your API change) during development,
|
||||
create a patch that just addresses that bug and submit it
|
||||
separately.
|
||||
</p>
|
||||
|
||||
<h2><a id='publicapi'>Defining the public API</a></h2>
|
||||
|
||||
<p>The first task is to define the public API. If the new API
|
||||
involves an XML extension, you have to enhance the RelaxNG
|
||||
schema and document the new elements or attributes:</p>
|
||||
|
||||
<p><code>
|
||||
docs/schemas/domaincommon.rng<br/>
|
||||
docs/formatdomain.html.in
|
||||
</code></p>
|
||||
|
||||
<p>If the API extension involves a new function, you have to add a
|
||||
declaration in the public header, and arrange to export the
|
||||
function name (symbol) so other programs can link against the
|
||||
libvirt library and call the new function:</p>
|
||||
|
||||
<p><code>
|
||||
include/libvirt/libvirt-$MODULE.h.in
|
||||
src/libvirt_public.syms
|
||||
</code></p>
|
||||
|
||||
<p>
|
||||
This task is in many ways the most important to get right, since once
|
||||
the API has been committed to the repository, it's libvirt's policy
|
||||
never to change it. Mistakes in the implementation are bugs that you
|
||||
can fix. Make a mistake in the API definition and you're stuck with
|
||||
it, so think carefully about the interface and don't be afraid to
|
||||
rework it as you go through the process of implementing it.
|
||||
</p>
|
||||
|
||||
<h2><a id='internalapi'>Defining the internal API</a></h2>
|
||||
|
||||
<p>
|
||||
Each public API call is associated with a driver, such as a host
|
||||
virtualization driver, a network virtualization driver, a storage
|
||||
virtualization driver, a state driver, or a device monitor. Adding
|
||||
the internal API is ordinarily a matter of adding a new member to the
|
||||
struct representing one of these drivers.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Of course, it's possible that the new API will involve the creation of
|
||||
an entirely new driver type, in which case the changes will include the
|
||||
creation of a new struct type to represent the new driver type.
|
||||
</p>
|
||||
|
||||
<p>The driver structs are defined in:</p>
|
||||
|
||||
<p><code>src/driver-$MODULE.h</code></p>
|
||||
|
||||
<p>
|
||||
To define the internal API, first typedef the driver function
|
||||
prototype and then add a new field for it to the relevant driver
|
||||
struct. Then, update all existing instances of the driver to
|
||||
provide a <code>NULL</code> stub for the new function.
|
||||
</p>
|
||||
|
||||
<h2><a id='implpublic'>Implementing the public API</a></h2>
|
||||
|
||||
<p>
|
||||
Implementing the public API is largely a formality in which we wire up
|
||||
public API to the internal driver API. The public API implementation
|
||||
takes care of some basic validity checks before passing control to the
|
||||
driver implementation. In RFC 2119 vocabulary, this function:
|
||||
</p>
|
||||
|
||||
<ol class="ordinarylist">
|
||||
<li>SHOULD log a message with VIR_DEBUG() indicating that it is
|
||||
being called and its parameters;</li>
|
||||
<li>MUST call virResetLastError();</li>
|
||||
<li>SHOULD confirm that the connection is valid with
|
||||
virCheckConnectReturn() or virCheckConnectGoto();</li>
|
||||
<li><strong>SECURITY: If the API requires a connection with write
|
||||
privileges, MUST confirm that the connection flags do not
|
||||
indicate that the connection is read-only with
|
||||
virCheckReadOnlyGoto();</strong></li>
|
||||
<li>SHOULD do basic validation of the parameters that are being
|
||||
passed in, using helpers like virCheckNonNullArgGoto();</li>
|
||||
<li>MUST confirm that the driver for this connection exists and that
|
||||
it implements this function;</li>
|
||||
<li>MUST call the internal API;</li>
|
||||
<li>SHOULD log a message with VIR_DEBUG() indicating that it is
|
||||
returning, its return value, and status.</li>
|
||||
<li>MUST return status to the caller.</li>
|
||||
</ol>
|
||||
|
||||
<p>The public API calls are implemented in:</p>
|
||||
|
||||
<p><code>src/libvirt-$MODULE.c</code></p>
|
||||
|
||||
<h2><a id='remoteproto'>Implementing the remote protocol</a></h2>
|
||||
|
||||
<p>
|
||||
Implementing the remote protocol is essentially a
|
||||
straightforward exercise which is probably most easily
|
||||
understood by referring to the existing code.
|
||||
</p>
|
||||
|
||||
<h3><a id='wireproto'>Defining the wire protocol format</a></h3>
|
||||
|
||||
<p>
|
||||
Defining the wire protocol involves making additions to:
|
||||
</p>
|
||||
|
||||
<p><code>src/remote/remote_protocol.x</code></p>
|
||||
|
||||
<p>
|
||||
First, create two new structs for each new function that you're adding
|
||||
to the API. One struct describes the parameters to be passed to the
|
||||
remote function, and a second struct describes the value returned by
|
||||
the remote function. The one exception to this rule is that functions
|
||||
that return only 0 or -1 for status do not require a struct for returned
|
||||
data.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Second, add values to the remote_procedure enum for each new function
|
||||
added to the API.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Once these changes are in place, it's necessary to run 'make rpcgen'
|
||||
in the src directory to create the .c and .h files required by the
|
||||
remote protocol code. This must be done on a Linux host using the
|
||||
GLibC rpcgen program. Other rpcgen versions may generate code which
|
||||
results in bogus compile time warnings. This regenerates the
|
||||
following files:
|
||||
</p>
|
||||
|
||||
<p><code>
|
||||
src/remote/remote_daemon_dispatch_stubs.h
|
||||
src/remote/remote_daemon_dispatch.h
|
||||
src/remote/remote_daemon_dispatch.c
|
||||
src/remote/remote_protocol.c
|
||||
src/remote/remote_protocol.h
|
||||
</code></p>
|
||||
|
||||
<h3><a id='rpcclient'>Implement the RPC client</a></h3>
|
||||
|
||||
<p>
|
||||
Implementing the RPC client uses the rpcgen generated .h files.
|
||||
The remote method calls go in:
|
||||
</p>
|
||||
|
||||
<p><code>src/remote/remote_driver.c</code></p>
|
||||
|
||||
<p>Each remote method invocation does the following:</p>
|
||||
|
||||
<ol class="ordinarylist">
|
||||
<li>locks the remote driver;</li>
|
||||
<li>sets up the method arguments;</li>
|
||||
<li>invokes the remote function;</li>
|
||||
<li>checks the return value, if necessary;</li>
|
||||
<li>extracts any returned data;</li>
|
||||
<li>frees any returned data;</li>
|
||||
<li>unlocks the remote driver.</li>
|
||||
</ol>
|
||||
|
||||
<h3><a id="serverdispatch">Implement the server side dispatcher</a></h3>
|
||||
|
||||
<p>
|
||||
Implementing the server side of the remote function call is simply a
|
||||
matter of deserializing the parameters passed in from the remote
|
||||
caller and passing them to the corresponding internal API function.
|
||||
The server side dispatchers are implemented in:
|
||||
</p>
|
||||
|
||||
<p><code>src/remote/remote_daemon_dispatch.c</code></p>
|
||||
|
||||
<p>Again, this step uses the .h files generated by make rpcgen.</p>
|
||||
|
||||
<p>
|
||||
After all three pieces of the remote protocol are complete, and
|
||||
the generated files have been updated, it will be necessary to
|
||||
update the file:</p>
|
||||
|
||||
<p><code>src/remote_protocol-structs</code></p>
|
||||
|
||||
<p>
|
||||
This file should only have new lines added; modifications to
|
||||
existing lines probably imply a backwards-incompatible API change.
|
||||
</p>
|
||||
|
||||
<h2><a id="internaluseapi">Use the new API internally</a></h2>
|
||||
|
||||
<p>
|
||||
Sometimes, a new API serves as a superset of existing API, by
|
||||
adding more granularity in what can be managed. When this is
|
||||
the case, it makes sense to share a common implementation by
|
||||
making the older API become a trivial wrapper around the new
|
||||
API, rather than duplicating the common code. This step should
|
||||
not introduce any semantic differences for the old API, and is
|
||||
not necessary if the new API has no relation to existing API.
|
||||
</p>
|
||||
|
||||
<h2><a id="virshuseapi">Expose the new API in virsh</a></h2>
|
||||
|
||||
<p>
|
||||
All new API should be manageable from the virsh command line
|
||||
shell. This proves that the API is sufficient for the intended
|
||||
purpose, and helps to identify whether the proposed API needs
|
||||
slight changes for easier usage. However, remember that virsh
|
||||
is used to connect to hosts running older versions of libvirtd,
|
||||
so new commands should have fallbacks to an older API if
|
||||
possible; implementing the virsh hooks at this point makes it
|
||||
very easy to test these fallbacks. Also remember to document
|
||||
virsh additions.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
A virsh command is composed of a few pieces of code. You need to
|
||||
define an array of vshCmdInfo structs for each new command that
|
||||
contain the help text and the command description text. You also need
|
||||
an array of vshCmdOptDef structs to describe the command options.
|
||||
Once you have those pieces in place you can write the function
|
||||
implementing the virsh command. Finally, you need to add the new
|
||||
command to the commands[] array. The following files need changes:
|
||||
</p>
|
||||
|
||||
<p><code>
|
||||
tools/virsh-$MODULE.c<br/>
|
||||
tools/virsh.pod
|
||||
</code></p>
|
||||
|
||||
<h2><a id="driverimpl">Implement the driver methods</a></h2>
|
||||
|
||||
<p>
|
||||
So, after all that, we get to the fun part. All functionality in
|
||||
libvirt is implemented inside a driver. Thus, here is where you
|
||||
implement whatever functionality you're adding to libvirt. You'll
|
||||
either need to add additional files to the src directory or extend
|
||||
files that are already there, depending on what functionality you're
|
||||
adding.
|
||||
</p>
|
||||
|
||||
<h3><a id="commonimpl">Implement common handling</a></h3>
|
||||
|
||||
<p>
|
||||
If the new API is applicable to more than one driver, it may
|
||||
make sense to provide some utility routines, or to factor some
|
||||
of the work into the dispatcher, to avoid reimplementing the
|
||||
same code in every driver. In the example code, this involved
|
||||
adding a member to the virDomainDefPtr struct for mapping
|
||||
between the XML API addition and the in-memory representation of
|
||||
a domain, along with updating all clients to use the new member.
|
||||
Up to this point, there have been no changes to existing
|
||||
semantics, and the new APIs will fail unless they are used in
|
||||
the same way as the older API wrappers.
|
||||
</p>
|
||||
|
||||
<h3><a id="drivercode">Implement driver handling</a></h3>
|
||||
|
||||
<p>
|
||||
The remaining patches should only touch one driver at a time.
|
||||
It is possible to implement all changes for a driver in one
|
||||
patch, but for review purposes it may still make sense to break
|
||||
things into simpler steps. Here is where the new APIs finally
|
||||
start working.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
It is always a good idea to patch the test driver in addition to the
|
||||
target driver, to prove that the API can be used for more than one
|
||||
driver.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Any cleanups resulting from the changes should be added as separate
|
||||
patches at the end of the series.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Once you have working functionality, run make check and make
|
||||
syntax-check on each patch of the series before submitting
|
||||
patches. It may also be worth writing tests for the libvirt-TCK
|
||||
testsuite to exercise your new API, although those patches are
|
||||
not kept in the libvirt repository.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
Binary file not shown.
Before Width: | Height: | Size: 10 KiB |
@@ -1,481 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<body>
|
||||
<h1>Applications using libvirt</h1>
|
||||
|
||||
<p>
|
||||
This page provides an illustration of the wide variety of
|
||||
applications using the libvirt management API.
|
||||
</p>
|
||||
|
||||
<ul id="toc"></ul>
|
||||
|
||||
<h2><a id="add">Add an application</a></h2>
|
||||
|
||||
<p>
|
||||
To add an application not listed on this page, send a message
|
||||
to the <a href="contact.html">mailing list</a>, requesting it
|
||||
be added here, or simply send a patch against the documentation
|
||||
in the libvirt.git docs subdirectory.
|
||||
If your application uses libvirt as its API,
|
||||
the following graphics are available for your website to advertise
|
||||
support for libvirt:
|
||||
</p>
|
||||
|
||||
<p class="image">
|
||||
<img src="logos/logo-square-powered-96.png" alt="libvirt powered"/>
|
||||
<img src="logos/logo-square-powered-128.png" alt="libvirt powered"/>
|
||||
<img src="logos/logo-square-powered-192.png" alt="libvirt powered"/>
|
||||
<img src="logos/logo-square-powered-256.png" alt="libvirt powered"/>
|
||||
</p>
|
||||
|
||||
<h2><a id="command">Command line tools</a></h2>
|
||||
|
||||
<dl>
|
||||
<dt><a href="http://libguestfs.org">guestfish</a></dt>
|
||||
<dd>
|
||||
Guestfish is an interactive shell and command-line tool for examining
|
||||
and modifying virtual machine filesystems. It uses libvirt to find
|
||||
guests and their associated disks.
|
||||
</dd>
|
||||
<dt>virsh</dt>
|
||||
<dd>
|
||||
An interactive shell, and batch scriptable tool for performing
|
||||
management tasks on all libvirt managed domains, networks and
|
||||
storage. This is part of the libvirt core distribution.
|
||||
</dd>
|
||||
<dt><a href="https://virt-manager.org/">virt-clone</a></dt>
|
||||
<dd>
|
||||
Allows the disk image(s) and configuration for an existing
|
||||
virtual machine to be cloned to form a new virtual machine.
|
||||
It automates copying of data across to new disk images, and
|
||||
updates the UUID, MAC address, and name in the configuration.
|
||||
</dd>
|
||||
<dt><a href="https://people.redhat.com/rjones/virt-df/">virt-df</a></dt>
|
||||
<dd>
|
||||
Examine the utilization of each filesystem in a virtual machine
|
||||
from the comfort of the host machine. This tool peeks into the
|
||||
guest disks and determines how much space is used. It can cope
|
||||
with common Linux filesystems and LVM volumes.
|
||||
</dd>
|
||||
<dt><a href="https://virt-manager.org/">virt-image</a></dt>
|
||||
<dd>
|
||||
Provides a way to deploy virtual appliances. It defines a
|
||||
simplified portable XML format describing the pre-requisites
|
||||
of a virtual machine. At time of deployment this is translated
|
||||
into the domain XML format for execution under any libvirt
|
||||
hypervisor meeting the pre-requisites.
|
||||
</dd>
|
||||
<dt><a href="https://virt-manager.org/">virt-install</a></dt>
|
||||
<dd>
|
||||
Provides a way to provision new virtual machines from a
|
||||
OS distribution install tree. It supports provisioning from
|
||||
local CD images, and the network over NFS, HTTP and FTP.
|
||||
</dd>
|
||||
<dt><a href="https://people.redhat.com/rjones/virt-top/">virt-top</a></dt>
|
||||
<dd>
|
||||
Watch the CPU, memory, network and disk utilization of all
|
||||
virtual machines running on a host.
|
||||
</dd>
|
||||
<dt>
|
||||
<a href="https://people.redhat.com/~rjones/virt-what/">virt-what</a>
|
||||
</dt>
|
||||
<dd>
|
||||
virt-what is a shell script for detecting if the program is running
|
||||
in a virtual machine. It prints out a list of facts about the
|
||||
virtual machine, derived from heuristics.
|
||||
</dd>
|
||||
<dt><a href="https://sourceware.org/systemtap/">stap</a></dt>
|
||||
<dd>
|
||||
SystemTap is a tool used to gather rich information about a running
|
||||
system through the use of scripts. Starting from v2.4, the front-end
|
||||
application stap can use libvirt to gather data within virtual
|
||||
machines.
|
||||
</dd>
|
||||
<dt><a href="https://github.com/pradels/vagrant-libvirt/">vagrant-libvirt</a></dt>
|
||||
<dd>
|
||||
Vagrant-Libvirt is a Vagrant plugin that uses libvirt to manage virtual
|
||||
machines. It is a command line tool for developers that makes it very
|
||||
fast and easy to deploy and re-deploy an environment of vm's.
|
||||
</dd>
|
||||
<dt><a href="https://github.com/virt-lightning/virt-lightning">virt-lightning</a></dt>
|
||||
<dd>
|
||||
Virt-Lightning uses libvirt, cloud-init and libguestfs to allow anyone
|
||||
to quickly start a new VM. Very much like a container CLI, but with a
|
||||
virtual machine.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a id="configmgmt">Configuration Management</a></h2>
|
||||
|
||||
<dl>
|
||||
<dt><a href="https://wiki.lcfg.org/bin/view/LCFG/LcfgLibvirt">LCFG</a></dt>
|
||||
<dd>
|
||||
LCFG is a system for automatically installing and managing the
|
||||
configuration of large numbers of Unix systems. It is particularly
|
||||
suitable for sites with very diverse and rapidly changing
|
||||
configurations.
|
||||
</dd>
|
||||
<dd>
|
||||
The lcfg-libvirt package adds support for virtualized systems to
|
||||
LCFG, with both Xen and KVM known to work. Cloning guests is
|
||||
supported, as are the bridged, routed, and isolated modes for
|
||||
Virtual Networking.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a id="continuousintegration">Continuous Integration</a></h2>
|
||||
|
||||
<dl>
|
||||
<dt><a href="http://docs.buildbot.net/latest/manual/configuration/workers-libvirt.html">BuildBot</a></dt>
|
||||
<dd>
|
||||
BuildBot is a system to automate the compile/test cycle required
|
||||
by most software projects. CVS commits trigger new builds, run on
|
||||
a variety of client machines. Build status (pass/fail/etc) are
|
||||
displayed on a web page or through other protocols.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<dl>
|
||||
<dt><a href="https://plugins.jenkins.io/libvirt-slave/">Jenkins</a></dt>
|
||||
<dd>
|
||||
This plugin for Jenkins adds a way to control guest domains hosted
|
||||
on Xen or QEMU/KVM. You configure a Jenkins Agent,
|
||||
selecting the guest domain and hypervisor. When you need to build a
|
||||
job on a specific Agent, its guest domain is started, then the job is
|
||||
run. When the build process is finished, the guest domain is shut
|
||||
down, ready to be used again as required.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a id="conversion">Conversion</a></h2>
|
||||
|
||||
<dl>
|
||||
<dt><a href="http://libguestfs.org/virt-p2v.1.html">virt-p2v</a></dt>
|
||||
<dd>
|
||||
Convert a physical machine to run on KVM. It is a LiveCD
|
||||
which is booted on the machine to be converted. It collects a
|
||||
little information from the user, then copies the disks over
|
||||
to a remote machine and defines the XML for a domain to run
|
||||
the guest. (Note this tool is included with libguestfs)
|
||||
</dd>
|
||||
<dt><a href="http://libguestfs.org/virt-v2v.1.html">virt-v2v</a></dt>
|
||||
<dd>
|
||||
virt-v2v converts guests from a foreign hypervisor to run on
|
||||
KVM, managed by libvirt. It can convert guests from VMware or
|
||||
Xen to run on OpenStack, oVirt (RHEV-M), or local libvirt. It
|
||||
will enable VirtIO drivers in the converted guest if possible.
|
||||
(Note this tool is included with libguestfs)
|
||||
</dd>
|
||||
<dd>
|
||||
For RHEL customers of Red Hat, conversion of Windows guests is also
|
||||
possible. This conversion requires some Microsoft signed pieces,
|
||||
that Red Hat can provide.
|
||||
</dd>
|
||||
<dt><a href="https://launchpad.net/virt-goodies">vmware2libvirt</a></dt>
|
||||
<dd>
|
||||
Part of the <i>virt-goodies</i> package, vmware2libvirt is a python
|
||||
script for migrating a vmware image to libvirt.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a id="desktop">Desktop applications</a></h2>
|
||||
|
||||
<dl>
|
||||
<dt><a href="https://virt-manager.org/">virt-manager</a></dt>
|
||||
<dd>
|
||||
A general purpose desktop management tool, able to manage
|
||||
virtual machines across both local and remotely accessed
|
||||
hypervisors. It is targeted at home and small office usage
|
||||
up to managing 10-20 hosts and their VMs.
|
||||
</dd>
|
||||
<dt><a href="https://virt-manager.org/">virt-viewer</a></dt>
|
||||
<dd>
|
||||
A lightweight tool for accessing the graphical console
|
||||
associated with a virtual machine. It can securely connect
|
||||
to remote consoles supporting the VNC protocol. Also provides
|
||||
an optional mozilla browser plugin.
|
||||
</dd>
|
||||
<dt><a href="https://f1ash.github.io/qt-virt-manager">qt-virt-manager</a></dt>
|
||||
<dd>
|
||||
The Qt GUI for create and control VMs and another virtual entities
|
||||
(aka networks, storages, interfaces, secrets, network filters).
|
||||
Contains integrated LXC/SPICE/VNC viewer for accessing the graphical or
|
||||
text console associated with a virtual machine or container.
|
||||
</dd>
|
||||
<dt><a href="https://f1ash.github.io/qt-virt-manager/#virtual-machines-viewer">qt-remote-viewer</a></dt>
|
||||
<dd>
|
||||
The Qt VNC/SPICE viewer for access to remote desktops or VMs.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a id="iaas">Infrastructure as a Service (IaaS)</a></h2>
|
||||
|
||||
<dl>
|
||||
<dt><a href="http://cc1.ifj.edu.pl">Cracow Cloud One</a></dt>
|
||||
<dd>The CC1 system provides a complete solution for Private
|
||||
Cloud Computing. An intuitive web access interface with an
|
||||
administration module and simple installation procedure make
|
||||
it easy to benefit from private Cloud Computing technology.
|
||||
</dd>
|
||||
|
||||
<dt><a href="https://github.com/eucalyptus/eucalyptus">Eucalyptus</a></dt>
|
||||
<dd>
|
||||
Eucalyptus is an on-premise Infrastructure as a Service cloud
|
||||
software platform that is open source and
|
||||
AWS-compatible. Eucalyptus uses libvirt virtualization API to
|
||||
directly interact with Xen and KVM hypervisors.
|
||||
</dd>
|
||||
|
||||
<dt><a href="http://www.nimbusproject.org">Nimbus</a></dt>
|
||||
<dd>
|
||||
Nimbus is an open-source toolkit focused on providing
|
||||
Infrastructure-as-a-Service (IaaS) capabilities to the scientific
|
||||
community. It uses libvirt for communication with all KVM and Xen
|
||||
virtual machines.
|
||||
</dd>
|
||||
|
||||
<dt><a href="http://snooze.inria.fr">Snooze</a></dt>
|
||||
<dd>
|
||||
Snooze is an open-source scalable, autonomic, and energy-efficient
|
||||
virtual machine (VM) management framework for private clouds. It
|
||||
integrates libvirt for VM monitoring, live migration, and life-cycle
|
||||
management.
|
||||
</dd>
|
||||
|
||||
<dt><a href="https://www.openstack.org">OpenStack</a></dt>
|
||||
<dd>
|
||||
OpenStack is a "cloud operating system" usable for both public
|
||||
and private clouds. Its various parts take care of compute,
|
||||
storage and networking resources and interface with the user
|
||||
using a dashboard. Compute part uses libvirt to manage VM
|
||||
life-cycle, monitoring and so on.
|
||||
</dd>
|
||||
|
||||
<dt><a href="https://github.com/gustavfranssonnyvell/cherrypop">Cherrypop</a></dt>
|
||||
<dd>
|
||||
A cloud software with no masters or central points. Nodes
|
||||
autodetect other nodes and autodistribute virtual
|
||||
machines and autodivide up the workload. Also there is no
|
||||
minimum limit for hosts, well, one might be nice. It's
|
||||
perfect for setting up low-end servers in a cloud or a
|
||||
cloud where you want the most bang for the bucks.
|
||||
</dd>
|
||||
|
||||
<dt><a href="http://en.zstack.io/">ZStack</a></dt>
|
||||
<dd>
|
||||
ZStack is an open source IaaS software that aims to automate the
|
||||
management of all resources (compute, storage, networking, etc.) in a
|
||||
datacenter by using APIs, thus conforming to the principles of a
|
||||
software-defined datacenter. The key strengths of ZStack in terms of
|
||||
management are scalability, performance, and a fast, user-friendly
|
||||
deployment.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a id="libraries">Libraries</a></h2>
|
||||
|
||||
<dl>
|
||||
<dt><a href="http://libguestfs.org">libguestfs</a></dt>
|
||||
<dd>
|
||||
A library and set of tools for accessing and modifying virtual
|
||||
machine disk images. It can be linked with C and C++ management
|
||||
programs, and has bindings for Perl, Python, Ruby, Java, OCaml,
|
||||
PHP, Haskell, and C#.
|
||||
</dd>
|
||||
<dd>
|
||||
Using its FUSE module, you can also mount guest filesystems on the
|
||||
host, and there is a subproject to allow merging changes into the
|
||||
Windows Registry in Windows guests.
|
||||
</dd>
|
||||
|
||||
<dt><a href="https://sandbox.libvirt.org">libvirt-sandbox</a></dt>
|
||||
<dd>
|
||||
A library and command line tools for simplifying the creation of
|
||||
application sandboxes using virtualization technology. It currently
|
||||
supports either KVM, QEMU or LXC as backends. Integration with
|
||||
systemd facilitates sandboxing of system services like apache.
|
||||
</dd>
|
||||
<dt><a href="https://github.com/ohadlevy/virt#readme">Ruby
|
||||
Libvirt Object bindings</a></dt>
|
||||
<dd>
|
||||
Allows using simple ruby objects to manipulate
|
||||
hypervisors, guests, storage, network etc. It is
|
||||
based on top of
|
||||
the <a href="https://libvirt.org/ruby">native ruby bindings</a>.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a id="livecd">LiveCD / Appliances</a></h2>
|
||||
|
||||
<dl>
|
||||
<dt><a href="http://libguestfs.org/virt-v2v/">virt-p2v</a></dt>
|
||||
<dd>
|
||||
An older tool for converting a physical machine into a virtual
|
||||
machine. It is a LiveCD which is booted on the machine to be
|
||||
converted. It collects a little information from the user, then
|
||||
copies the disks over to a remote machine and defines the XML for a
|
||||
domain to run the guest.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a id="monitoring">Monitoring</a></h2>
|
||||
<dl>
|
||||
<dt><a href="https://collectd.org/plugins/libvirt.shtml">collectd</a></dt>
|
||||
<dd>
|
||||
The libvirt-plugin is part of <a href="http://collectd.org/">collectd</a>
|
||||
and gathers statistics about virtualized guests on a system. This
|
||||
way, you can collect CPU, network interface and block device usage
|
||||
for each guest without installing collectd on the guest systems.
|
||||
For a full description, please refer to the libvirt section in the
|
||||
collectd.conf(5) manual page.
|
||||
</dd>
|
||||
<dt><a href="http://www.sflow.net/">Host sFlow</a></dt>
|
||||
<dd>
|
||||
Host sFlow is a lightweight agent running on KVM hypervisors that
|
||||
links to libvirt library and exports standardized cpu, memory, network
|
||||
and disk metrics for all virtual machines.
|
||||
</dd>
|
||||
<dt><a href="https://honk.sigxcpu.org/projects/libvirt/#munin">Munin</a></dt>
|
||||
<dd>
|
||||
The plugins provided by Guido Günther allow to monitor various things
|
||||
like network and block I/O with
|
||||
<a href="http://munin.projects.linpro.no/">Munin</a>.
|
||||
</dd>
|
||||
<dt><a href="http://people.redhat.com/rjones/nagios-virt/">Nagios-virt</a></dt>
|
||||
<dd>
|
||||
Nagios-virt is a configuration tool to add monitoring of your
|
||||
virtualised domains to <a href="http://www.nagios.org/">Nagios</a>.
|
||||
You can use this tool to either set up a new Nagios installation for
|
||||
your Xen or QEMU/KVM guests, or to integrate with your existing Nagios
|
||||
installation.
|
||||
</dd>
|
||||
<dt><a href="http://www.pcp.io/man/man1/pmdalibvirt.1.html">PCP</a></dt>
|
||||
<dd>
|
||||
The PCP libvirt PMDA (plugin) is part of the
|
||||
<a href="http://pcp.io/">PCP</a> toolkit and provides
|
||||
hypervisor and guest information and complete set of guest performance
|
||||
metrics. It supports pCPU, vCPU, memory, block device, network interface,
|
||||
and performance event metrics for each virtual guest.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a id="provisioning">Provisioning</a></h2>
|
||||
|
||||
<dl>
|
||||
<dt><a href="https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Tivoli+Provisioning+Manager">Tivoli Provisioning Manager</a></dt>
|
||||
<dd>
|
||||
Part of the IBM Tivoli family, Tivoli Provisioning Manager (TPM) is
|
||||
an IT lifecycle automation product. It
|
||||
<a href="http://publib.boulder.ibm.com/infocenter/tivihelp/v38r1/index.jsp?topic=/com.ibm.tivoli.tpm.apk.doc/libvirt_package.html">uses libvirt</a>
|
||||
for communication with virtualization hosts and guest domains.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<dl>
|
||||
<dt><a href="https://theforeman.org">Foreman</a></dt>
|
||||
<dd>
|
||||
Foreman is an open source web based application aimed to be a
|
||||
Single Address For All Machines Life Cycle Management. Foreman:
|
||||
|
||||
<ul>
|
||||
<li>Creates everything you need when adding a new machine to
|
||||
your network, its goal being automatically managing
|
||||
everything you would normally manage manually (DNS, DHCP,
|
||||
TFTP, Virtual Machines,CA, CMDB...)</li>
|
||||
<li>Integrates with Puppet (and acts as web front end to it).</li>
|
||||
<li>Takes care of provisioning until the point puppet is
|
||||
running, allowing Puppet to do what it does best.</li>
|
||||
<li>Shows you Systems Inventory (based on Facter) and
|
||||
provides real time information about hosts status based on
|
||||
Puppet reports.</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
<h2><a id="web">Web applications</a></h2>
|
||||
|
||||
<dl>
|
||||
<dt><a href="http://www.abiquo.com/">AbiCloud</a></dt>
|
||||
<dd>
|
||||
AbiCloud is an open source cloud platform manager which allows to
|
||||
easily deploy a private cloud in your datacenter. One of the key
|
||||
differences of AbiCloud is the web rich interface for managing the
|
||||
infrastructure. You can deploy a new service just dragging and
|
||||
dropping a VM.
|
||||
</dd>
|
||||
<dt><a href="https://kimchi-project.github.io/kimchi/">Kimchi</a></dt>
|
||||
<dd>
|
||||
Kimchi is an HTML5 based management tool for KVM. It is designed to
|
||||
make it as easy as possible to get started with KVM and create your first guest.
|
||||
|
||||
Kimchi manages KVM guests through libvirt. The management interface is accessed
|
||||
over the web using a browser that supports HTML5.
|
||||
</dd>
|
||||
<dt><a href="https://ovirt.org/">oVirt</a></dt>
|
||||
<dd>
|
||||
oVirt provides the ability to manage large numbers of virtual
|
||||
machines across an entire data center of hosts. It integrates
|
||||
with FreeIPA for Kerberos authentication, and in the future,
|
||||
certificate management.
|
||||
</dd>
|
||||
<dt><a href="https://ispsystem.com/en/software/vmmanager">VMmanager</a></dt>
|
||||
<dd>
|
||||
VMmanager is a software solution for virtualization management
|
||||
that can be used both for hosting virtual machines and
|
||||
building a cloud. VMmanager can manage not only one server,
|
||||
but a large cluster of hypervisors. It delivers a number of
|
||||
functions, such as live migration that allows for load
|
||||
balancing between cluster nodes, monitoring CPU, memory.
|
||||
</dd>
|
||||
<dt><a href="https://mist.io/">mist.io</a></dt>
|
||||
<dd>
|
||||
Mist.io is an open source project and a service that can assist you in
|
||||
managing your virtual machines on a unified way, providing a simple
|
||||
interface for all of your infrastructure (multiple public cloud
|
||||
providers, OpenStack based public/private clouds, Docker servers, bare
|
||||
metal servers and now KVM hypervisors).
|
||||
</dd>
|
||||
<dt><a href="https://ravada.upc.edu/">Ravada</a></dt>
|
||||
<dd>
|
||||
Ravada is an open source tool for managing Virtual Desktop
|
||||
Infrastructure (VDI). It is very easy to install and use. Following
|
||||
the documentation, you'll be ready to deploy virtual machines in
|
||||
minutes. The only requirements for the users are a Web browser and
|
||||
a lightweight remote viewer.
|
||||
</dd>
|
||||
<dt><a href="https://github.com/cutelyst/Virtlyst">Virtlyst</a></dt>
|
||||
<dd>
|
||||
Virtlyst is an open source web application built with C++11, Cutelyst and Qt.
|
||||
It features:
|
||||
<ul>
|
||||
<li>Low memory usage (around 5 MiB of RAM)</li>
|
||||
<li>Look and feel easily customized with HTML templates that use the Django syntax</li>
|
||||
<li>VNC/Spice console directly in the browser using websockets on the same HTTP port</li>
|
||||
<li>Host and Domain statistics graphs (CPU, Memory, IO, Network)</li>
|
||||
<li>Connect to multiple libvirtd instances (over local Unix domain socket, SSH, TCP and TLS)</li>
|
||||
<li>Manage Storage Pools, Storage Volumes, Networks, Interfaces, and Secrets</li>
|
||||
<li>Create and launch VMs</li>
|
||||
<li>Configure VMs with easy panels or go pro and edit the VM's XML</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a id="other">Other</a></h2>
|
||||
|
||||
<dl>
|
||||
<dt><a href="https://cuckoosandbox.org/">Cuckoo Sandbox</a></dt>
|
||||
<dd>
|
||||
Cuckoo Sandbox is a malware analysis system. You can throw
|
||||
any suspicious file at it and in a matter of seconds Cuckoo
|
||||
will provide you back some detailed results outlining what
|
||||
such file did when executed inside an isolated environment.
|
||||
And libvirt is one of the backends that can be used for the
|
||||
isolated environment.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
</body>
|
||||
</html>
|
Binary file not shown.
Before Width: | Height: | Size: 5.4 KiB |
@@ -1,82 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<body>
|
||||
<h1 >libvirt architecture</h1>
|
||||
|
||||
<p>
|
||||
Currently libvirt supports 2 kind of virtualization, and its
|
||||
internal structure is based on a driver model which simplifies
|
||||
adding new
|
||||
engines:
|
||||
</p>
|
||||
|
||||
<ul id="toc"></ul>
|
||||
|
||||
<h2><a id="Xen">Xen support</a></h2>
|
||||
|
||||
<p>When running in a Xen environment, programs using libvirt have to execute
|
||||
in "Domain 0", which is the primary Linux OS loaded on the machine. That OS
|
||||
kernel provides most if not all of the actual drivers used by the set of
|
||||
domains. It also runs the Xen Store, a database of information shared by the
|
||||
hypervisor, the backend drivers, any running domains, and libxl (aka libxenlight).
|
||||
libxl provides a set of APIs for creating and managing domains, which can be used
|
||||
by applications such as the xl tool provided by Xen or libvirt. The hypervisor,
|
||||
drivers, kernels and daemons communicate though a shared system bus
|
||||
implemented in the hypervisor. The figure below tries to provide a view of
|
||||
this environment:</p>
|
||||
<img src="architecture.gif" alt="The Xen architecture" />
|
||||
<p>The library will interact with libxl for all management operations
|
||||
on a Xen system.</p>
|
||||
<p>Note that the libvirt libxl driver only supports root access.</p>
|
||||
|
||||
<h2><a id="QEMU">QEMU and KVM support</a></h2>
|
||||
|
||||
<p>The model for QEMU and KVM is completely similar, basically KVM is based
|
||||
on QEMU for the process controlling a new domain, only small details differs
|
||||
between the two. In both case the libvirt API is provided by a controlling
|
||||
process forked by libvirt in the background and which launch and control the
|
||||
QEMU or KVM process. That program called libvirt_qemud talks though a specific
|
||||
protocol to the library, and connects to the console of the QEMU process in
|
||||
order to control and report on its status. Libvirt tries to expose all the
|
||||
emulations models of QEMU, the selection is done when creating the new
|
||||
domain, by specifying the architecture and machine type targeted.</p>
|
||||
<p>The code controlling the QEMU process is available in the
|
||||
<code>qemud/</code> directory.</p>
|
||||
|
||||
<h2><a id="drivers">Driver based architecture</a></h2>
|
||||
|
||||
<p>As the previous section explains, libvirt can communicate using different
|
||||
channels with the current hypervisor, and should also be able to use
|
||||
different kind of hypervisor. To simplify the internal design, code, ease
|
||||
maintenance and simplify the support of other virtualization engine the
|
||||
internals have been structured as one core component, the libvirt.c module
|
||||
acting as a front-end for the library API and a set of hypervisor drivers
|
||||
defining a common set of routines. That way the Xen Daemon access, the Xen
|
||||
Store one, the Hypervisor hypercall are all isolated in separate C modules
|
||||
implementing at least a subset of the common operations defined by the
|
||||
drivers present in driver.h:</p>
|
||||
<ul>
|
||||
<li>xend_internal: implements the driver functions though the Xen
|
||||
Daemon</li>
|
||||
<li>xs_internal: implements the subset of the driver available though the
|
||||
Xen Store</li>
|
||||
<li>xen_internal: provide the implementation of the functions possible via
|
||||
direct hypervisor access</li>
|
||||
<li>proxy_internal: provide read-only Xen access via a proxy, the proxy code
|
||||
is in the <code>proxy/</code> directory.</li>
|
||||
<li>xm_internal: provide support for Xen defined but not running
|
||||
domains.</li>
|
||||
<li>qemu_internal: implement the driver functions for QEMU and
|
||||
KVM virtualization engines. It also uses a qemud/ specific daemon
|
||||
which interacts with the QEMU process to implement libvirt API.</li>
|
||||
<li>test: this is a test driver useful for regression tests of the
|
||||
front-end part of libvirt.</li>
|
||||
</ul>
|
||||
<p>Note that a given driver may only implement a subset of those functions,
|
||||
(for example saving a Xen domain state to disk and restoring it is only
|
||||
possible though the Xen Daemon), in that case the driver entry points for
|
||||
unsupported functions are initialized to NULL.</p>
|
||||
<p></p>
|
||||
</body>
|
||||
</html>
|
@@ -1,239 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Creator: fig2dev Version 3.2.7b-dev -->
|
||||
<!-- CreationDate: 2020-07-10 10:23:50 -->
|
||||
<!-- Magnification: 1 -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
width="519pt" height="362pt"
|
||||
viewBox="888 3963 8649 6024">
|
||||
<g fill="none">
|
||||
<!-- Line -->
|
||||
<rect x="1050" y="7500" width="8325" height="1200"
|
||||
stroke="#000000" stroke-width="8px"/>
|
||||
<!-- Line -->
|
||||
<rect x="1050" y="4125" width="2475" height="3150" rx="105"
|
||||
stroke="#000000" stroke-width="8px"/>
|
||||
<!-- Line -->
|
||||
<polyline points=" 1050,6540 3540,6525"
|
||||
stroke="#000000" stroke-width="15px" stroke-dasharray="60 60"/>
|
||||
<!-- Line -->
|
||||
<rect x="1140" y="6645" width="450" height="255" rx="105"
|
||||
stroke="#000000" stroke-width="8px"/>
|
||||
<!-- Line -->
|
||||
<rect x="1140" y="6930" width="450" height="255" rx="105"
|
||||
stroke="#000000" stroke-width="8px"/>
|
||||
<!-- Line -->
|
||||
<defs>
|
||||
<clipPath id="cp0">
|
||||
<path clip-rule="evenodd" d="M 888,3963 H 9537 V 9987 H 888 z
|
||||
M 8353,7665 8353,7785 8651,7751 8651,7700z
|
||||
M 2147,7785 2147,7665 1850,7700 1850,7751z"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<polyline points=" 1875,7725 8625,7725" clip-path="url(#cp0)"
|
||||
stroke="#000000" stroke-width="45px"/>
|
||||
<!-- Forward arrow to point 8625,7725 -->
|
||||
<polygon points=" 8353,7785 8593,7725 8353,7665 8353,7785"
|
||||
stroke="#000000" stroke-width="15px" stroke-miterlimit="8" fill="#000000"/>
|
||||
<!-- Backward arrow to point 1875,7725 -->
|
||||
<polygon points=" 2147,7665 1907,7725 2147,7785 2147,7665"
|
||||
stroke="#000000" stroke-width="15px" stroke-miterlimit="8" fill="#000000"/>
|
||||
<!-- Line -->
|
||||
<rect x="1650" y="5625" width="1350" height="750"
|
||||
stroke="#000000" stroke-width="8px"/>
|
||||
<!-- Line -->
|
||||
<defs>
|
||||
<clipPath id="cp1">
|
||||
<path clip-rule="evenodd" d="M 888,3963 H 9537 V 9987 H 888 z
|
||||
M 2790,6647 2910,6647 2876,6350 2825,6350z
|
||||
M 2147,7785 2147,7665 1850,7700 1850,7751z"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<polyline points=" 2850,7725 2850,6375" clip-path="url(#cp1)"
|
||||
stroke="#000000" stroke-width="45px"/>
|
||||
<!-- Forward arrow to point 2850,6375 -->
|
||||
<polygon points=" 2910,6647 2850,6407 2790,6647 2910,6647"
|
||||
stroke="#000000" stroke-width="15px" stroke-miterlimit="8" fill="#000000"/>
|
||||
<!-- Line -->
|
||||
<rect x="3975" y="4125" width="2475" height="3150" rx="105"
|
||||
stroke="#000000" stroke-width="8px"/>
|
||||
<!-- Line -->
|
||||
<rect x="6825" y="4125" width="2475" height="3150" rx="105"
|
||||
stroke="#000000" stroke-width="8px"/>
|
||||
<!-- Line -->
|
||||
<polyline points=" 3975,6540 6465,6525"
|
||||
stroke="#000000" stroke-width="15px" stroke-dasharray="60 60"/>
|
||||
<!-- Line -->
|
||||
<polyline points=" 6825,6540 9315,6525"
|
||||
stroke="#000000" stroke-width="15px" stroke-dasharray="60 60"/>
|
||||
<!-- Line -->
|
||||
<defs>
|
||||
<clipPath id="cp2">
|
||||
<path clip-rule="evenodd" d="M 888,3963 H 9537 V 9987 H 888 z
|
||||
M 5340,7322 5460,7322 5426,7025 5375,7025z
|
||||
M 2147,7785 2147,7665 1850,7700 1850,7751z"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<polyline points=" 5400,7725 5400,7050" clip-path="url(#cp2)"
|
||||
stroke="#000000" stroke-width="45px"/>
|
||||
<!-- Forward arrow to point 5400,7050 -->
|
||||
<polygon points=" 5460,7322 5400,7082 5340,7322 5460,7322"
|
||||
stroke="#000000" stroke-width="15px" stroke-miterlimit="8" fill="#000000"/>
|
||||
<!-- Line -->
|
||||
<defs>
|
||||
<clipPath id="cp3">
|
||||
<path clip-rule="evenodd" d="M 888,3963 H 9537 V 9987 H 888 z
|
||||
M 7965,7322 8085,7322 8051,7025 8000,7025z
|
||||
M 2147,7785 2147,7665 1850,7700 1850,7751z"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<polyline points=" 8025,7725 8025,7050" clip-path="url(#cp3)"
|
||||
stroke="#000000" stroke-width="45px"/>
|
||||
<!-- Forward arrow to point 8025,7050 -->
|
||||
<polygon points=" 8085,7322 8025,7082 7965,7322 8085,7322"
|
||||
stroke="#000000" stroke-width="15px" stroke-miterlimit="8" fill="#000000"/>
|
||||
<!-- Line -->
|
||||
<rect x="1050" y="8925" width="8325" height="975"
|
||||
stroke="#000000" stroke-width="8px"/>
|
||||
<!-- Line -->
|
||||
<rect x="2100" y="4575" width="1350" height="750"
|
||||
stroke="#000000" stroke-width="8px"/>
|
||||
<!-- Line -->
|
||||
<defs>
|
||||
<clipPath id="cp4">
|
||||
<path clip-rule="evenodd" d="M 888,3963 H 9537 V 9987 H 888 z
|
||||
M 3285,8053 3165,8053 3207,8343 3243,8343z
|
||||
M 2147,7785 2147,7665 1850,7700 1850,7751z"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<polyline points=" 3225,5325 3225,8325" clip-path="url(#cp4)"
|
||||
stroke="#000000" stroke-width="30px" stroke-dasharray="20 20"/>
|
||||
<!-- Forward arrow to point 3225,8325 -->
|
||||
<polygon points=" 3165,8053 3225,8293 3285,8053 3165,8053"
|
||||
stroke="#000000" stroke-width="15px" stroke-miterlimit="8" fill="#000000"/>
|
||||
<!-- Line -->
|
||||
<defs>
|
||||
<clipPath id="cp5">
|
||||
<path clip-rule="evenodd" d="M 888,3963 H 9537 V 9987 H 888 z
|
||||
M 6285,7978 6165,7978 6207,8268 6243,8268z
|
||||
M 2147,7785 2147,7665 1850,7700 1850,7751z"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<polyline points=" 6225,6900 6225,8250" clip-path="url(#cp5)"
|
||||
stroke="#000000" stroke-width="30px" stroke-dasharray="20 20"/>
|
||||
<!-- Forward arrow to point 6225,8250 -->
|
||||
<polygon points=" 6165,7978 6225,8218 6285,7978 6165,7978"
|
||||
stroke="#000000" stroke-width="15px" stroke-miterlimit="8" fill="#000000"/>
|
||||
<!-- Line -->
|
||||
<defs>
|
||||
<clipPath id="cp6">
|
||||
<path clip-rule="evenodd" d="M 888,3963 H 9537 V 9987 H 888 z
|
||||
M 8985,7978 8865,7978 8907,8268 8943,8268z
|
||||
M 2147,7785 2147,7665 1850,7700 1850,7751z"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<polyline points=" 8925,6900 8925,8250" clip-path="url(#cp6)"
|
||||
stroke="#000000" stroke-width="30px" stroke-dasharray="20 20"/>
|
||||
<!-- Forward arrow to point 8925,8250 -->
|
||||
<polygon points=" 8865,7978 8925,8218 8985,7978 8865,7978"
|
||||
stroke="#000000" stroke-width="15px" stroke-miterlimit="8" fill="#000000"/>
|
||||
<!-- Line -->
|
||||
<defs>
|
||||
<clipPath id="cp7">
|
||||
<path clip-rule="evenodd" d="M 888,3963 H 9537 V 9987 H 888 z
|
||||
M 1785,8053 1665,8053 1707,8343 1743,8343z
|
||||
M 2147,7785 2147,7665 1850,7700 1850,7751z"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<polyline points=" 1725,7125 1725,8325" clip-path="url(#cp7)"
|
||||
stroke="#000000" stroke-width="30px" stroke-dasharray="20 20"/>
|
||||
<!-- Forward arrow to point 1725,8325 -->
|
||||
<polygon points=" 1665,8053 1725,8293 1785,8053 1665,8053"
|
||||
stroke="#000000" stroke-width="15px" stroke-miterlimit="8" fill="#000000"/>
|
||||
<!-- Line -->
|
||||
<defs>
|
||||
<clipPath id="cp8">
|
||||
<path clip-rule="evenodd" d="M 888,3963 H 9537 V 9987 H 888 z
|
||||
M 2790,5297 2910,5297 2876,5000 2825,5000z
|
||||
M 2910,5578 2790,5578 2825,5876 2876,5876z"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<polyline points=" 2850,5850 2850,5025" clip-path="url(#cp8)"
|
||||
stroke="#000000" stroke-width="45px"/>
|
||||
<!-- Forward arrow to point 2850,5025 -->
|
||||
<polygon points=" 2910,5297 2850,5057 2790,5297 2910,5297"
|
||||
stroke="#000000" stroke-width="15px" stroke-miterlimit="8" fill="#000000"/>
|
||||
<!-- Backward arrow to point 2850,5850 -->
|
||||
<polygon points=" 2790,5578 2850,5818 2910,5578 2790,5578"
|
||||
stroke="#000000" stroke-width="15px" stroke-miterlimit="8" fill="#000000"/>
|
||||
<!-- Line -->
|
||||
<defs>
|
||||
<clipPath id="cp9">
|
||||
<path clip-rule="evenodd" d="M 888,3963 H 9537 V 9987 H 888 z
|
||||
M 5235,9103 5115,9103 5157,9393 5193,9393z
|
||||
M 2910,5578 2790,5578 2825,5876 2876,5876z"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<polyline points=" 5175,8475 5175,9375" clip-path="url(#cp9)"
|
||||
stroke="#000000" stroke-width="30px" stroke-dasharray="20 20"/>
|
||||
<!-- Forward arrow to point 5175,9375 -->
|
||||
<polygon points=" 5115,9103 5175,9343 5235,9103 5115,9103"
|
||||
stroke="#000000" stroke-width="15px" stroke-miterlimit="8" fill="#000000"/>
|
||||
<!-- Line -->
|
||||
<defs>
|
||||
<clipPath id="cp10">
|
||||
<path clip-rule="evenodd" d="M 888,3963 H 9537 V 9987 H 888 z
|
||||
M 1410,9178 1290,9178 1332,9468 1368,9468z
|
||||
M 2910,5578 2790,5578 2825,5876 2876,5876z"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<polyline points=" 1350,7125 1350,9450" clip-path="url(#cp10)"
|
||||
stroke="#000000" stroke-width="30px" stroke-dasharray="20 20"/>
|
||||
<!-- Forward arrow to point 1350,9450 -->
|
||||
<polygon points=" 1290,9178 1350,9418 1410,9178 1290,9178"
|
||||
stroke="#000000" stroke-width="15px" stroke-miterlimit="8" fill="#000000"/>
|
||||
<!-- Line -->
|
||||
<defs>
|
||||
<clipPath id="cp11">
|
||||
<path clip-rule="evenodd" d="M 888,3963 H 9537 V 9987 H 888 z
|
||||
M 2265,7472 2385,7472 2351,7175 2300,7175z
|
||||
M 2910,5578 2790,5578 2825,5876 2876,5876z"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<polyline points=" 2325,7725 2325,7200" clip-path="url(#cp11)"
|
||||
stroke="#000000" stroke-width="45px"/>
|
||||
<!-- Forward arrow to point 2325,7200 -->
|
||||
<polygon points=" 2385,7472 2325,7232 2265,7472 2385,7472"
|
||||
stroke="#000000" stroke-width="15px" stroke-miterlimit="8" fill="#000000"/>
|
||||
<!-- Line -->
|
||||
<polyline points=" 900,3975"
|
||||
stroke="#000000" stroke-width="8px" stroke-dasharray="40 40"/>
|
||||
<!-- Line -->
|
||||
<polyline points=" 9525,9975"
|
||||
stroke="#000000" stroke-width="8px" stroke-dasharray="40 40"/>
|
||||
<!-- Text -->
|
||||
<text xml:space="preserve" x="4350" y="7980" fill="#000000" font-family="Times" font-style="normal" font-weight="normal" font-size="216" text-anchor="start">XenBus</text>
|
||||
<!-- Text -->
|
||||
<text xml:space="preserve" x="1680" y="6870" fill="#000000" font-family="Times" font-style="normal" font-weight="normal" font-size="216" text-anchor="start">drivers</text>
|
||||
<!-- Text -->
|
||||
<text xml:space="preserve" x="1800" y="6075" fill="#000000" font-family="Times" font-style="normal" font-weight="normal" font-size="216" text-anchor="start">XenStore</text>
|
||||
<!-- Text -->
|
||||
<text xml:space="preserve" x="1875" y="7125" fill="#000000" font-family="Times" font-style="normal" font-weight="normal" font-size="216" text-anchor="start">Kernel0</text>
|
||||
<!-- Text -->
|
||||
<text xml:space="preserve" x="4875" y="6975" fill="#000000" font-family="Times" font-style="normal" font-weight="normal" font-size="216" text-anchor="start">KernelU</text>
|
||||
<!-- Text -->
|
||||
<text xml:space="preserve" x="7650" y="6975" fill="#000000" font-family="Times" font-style="normal" font-weight="normal" font-size="216" text-anchor="start">KernelU</text>
|
||||
<!-- Text -->
|
||||
<text xml:space="preserve" x="4050" y="8400" fill="#000000" font-family="Times" font-style="normal" font-weight="normal" font-size="216" text-anchor="start">Xen Hypervisor</text>
|
||||
<!-- Text -->
|
||||
<text xml:space="preserve" x="2325" y="4950" fill="#000000" font-family="Times" font-style="normal" font-weight="normal" font-size="216" text-anchor="start">Xend</text>
|
||||
<!-- Text -->
|
||||
<text xml:space="preserve" x="1200" y="4725" fill="#000000" font-family="Times" font-style="normal" font-weight="normal" font-size="216" text-anchor="start">Dom0</text>
|
||||
<!-- Text -->
|
||||
<text xml:space="preserve" x="4875" y="5325" fill="#000000" font-family="Times" font-style="normal" font-weight="normal" font-size="216" text-anchor="start">DomU</text>
|
||||
<!-- Text -->
|
||||
<text xml:space="preserve" x="7650" y="5325" fill="#000000" font-family="Times" font-style="normal" font-weight="normal" font-size="216" text-anchor="start">DomU</text>
|
||||
<!-- Text -->
|
||||
<text xml:space="preserve" x="3750" y="9450" fill="#000000" font-family="Times" font-style="normal" font-weight="normal" font-size="216" text-anchor="start">Hardware</text>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 10 KiB |
@@ -1,375 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<body>
|
||||
<h1>Audit log</h1>
|
||||
|
||||
<ul id="toc"></ul>
|
||||
|
||||
<h2><a id="intro">Introduction</a></h2>
|
||||
|
||||
<p>
|
||||
A number of the libvirt virtualization drivers (QEMU/KVM and LXC) include
|
||||
support for logging details of important operations to the host's audit
|
||||
subsystem. This provides administrators / auditors with a canonical historical
|
||||
record of changes to virtual machines' / containers' lifecycle states and
|
||||
their configuration. On hosts which are running the Linux audit daemon,
|
||||
the logs will usually end up in <code>/var/log/audit/audit.log</code>
|
||||
</p>
|
||||
|
||||
<h2><a id="config">Configuration</a></h2>
|
||||
|
||||
<p>
|
||||
The libvirt audit integration is enabled by default on any host which has
|
||||
the Linux audit subsystem active, and disabled otherwise. It is possible
|
||||
to alter this behaviour in the <code>/etc/libvirt/libvirtd.conf</code>
|
||||
configuration file, via the <code>audit_level</code> parameter
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li><code>audit_level=0</code> - libvirt auditing is disabled regardless
|
||||
of host audit subsystem enablement.</li>
|
||||
<li><code>audit_level=1</code> - libvirt auditing is enabled if the host
|
||||
audit subsystem is enabled, otherwise it is disabled. This is the
|
||||
default behaviour.</li>
|
||||
<li><code>audit_level=2</code> - libvirt auditing is enabled regardless
|
||||
of host audit subsystem enablement. If the host audit subsystem is
|
||||
disabled, then libvirtd will refuse to complete startup and exit with
|
||||
an error.</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
In addition to have formal messages sent to the audit subsystem it is
|
||||
possible to tell libvirt to inject messages into its own logging
|
||||
layer. This will result in messages ending up in the systemd journal
|
||||
or <code>/var/log/libvirt/libvirtd.log</code> on non-systemd hosts.
|
||||
This is disabled by default, but can be requested by setting the
|
||||
<code>audit_logging=1</code> configuration parameter in the same file
|
||||
mentioned above.
|
||||
</p>
|
||||
|
||||
<h2><a id="types">Message types</a></h2>
|
||||
|
||||
<p>
|
||||
Libvirt defines three core audit message types each of which will
|
||||
be described below. There are a number of common fields that will
|
||||
be reported for all message types.
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>pid</code></dt>
|
||||
<dd>Process ID of the libvirtd daemon generating the audit record.</dd>
|
||||
<dt><code>uid</code></dt>
|
||||
<dd>User ID of the libvirtd daemon process generating the audit record.</dd>
|
||||
<dt><code>subj</code></dt>
|
||||
<dd>Security context of the libvirtd daemon process generating the audit record.</dd>
|
||||
<dt><code>msg</code></dt>
|
||||
<dd>String containing a list of key=value pairs specific to the type of audit record being reported.</dd>
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
Some fields in the <code>msg</code> string are common to audit records
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>virt</code></dt>
|
||||
<dd>Type of virtualization driver used. One of <code>qemu</code> or <code>lxc</code></dd>
|
||||
<dt><code>vm</code></dt>
|
||||
<dd>Host driver unique name of the guest</dd>
|
||||
<dt><code>uuid</code></dt>
|
||||
<dd>Globally unique identifier for the guest</dd>
|
||||
<dt><code>exe</code></dt>
|
||||
<dd>Path of the libvirtd daemon</dd>
|
||||
<dt><code>hostname</code></dt>
|
||||
<dd>Currently unused</dd>
|
||||
<dt><code>addr</code></dt>
|
||||
<dd>Currently unused</dd>
|
||||
<dt><code>terminal</code></dt>
|
||||
<dd>Currently unused</dd>
|
||||
<dt><code>res</code></dt>
|
||||
<dd>Result of the action, either <code>success</code> or <code>failed</code></dd>
|
||||
</dl>
|
||||
|
||||
<h3><a id="typecontrol">VIRT_CONTROL</a></h3>
|
||||
|
||||
<p>
|
||||
Reports change in the lifecycle state of a virtual machine. The <code>msg</code>
|
||||
field will include the following sub-fields
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>op</code></dt>
|
||||
<dd>Type of operation performed. One of <code>start</code>, <code>stop</code> or <code>init</code></dd>
|
||||
<dt><code>reason</code></dt>
|
||||
<dd>The reason which caused the operation to happen</dd>
|
||||
<dt><code>vm-pid</code></dt>
|
||||
<dd>ID of the primary/leading process associated with the guest</dd>
|
||||
<dt><code>init-pid</code></dt>
|
||||
<dd>ID of the <code>init</code> process in a container. Only if <code>op=init</code> and <code>virt=lxc</code></dd>
|
||||
<dt><code>pid-ns</code></dt>
|
||||
<dd>Namespace ID of the <code>init</code> process in a container. Only if <code>op=init</code> and <code>virt=lxc</code></dd>
|
||||
</dl>
|
||||
|
||||
<h3><a id="typemachine">VIRT_MACHINE_ID</a></h3>
|
||||
|
||||
<p>
|
||||
Reports the association of a security context with a guest. The <code>msg</code>
|
||||
field will include the following sub-fields
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>model</code></dt>
|
||||
<dd>The security driver type. One of <code>selinux</code> or <code>apparmor</code></dd>
|
||||
<dt><code>vm-ctx</code></dt>
|
||||
<dd>Security context for the guest process</dd>
|
||||
<dt><code>img-ctx</code></dt>
|
||||
<dd>Security context for the guest disk images and other assigned host resources</dd>
|
||||
</dl>
|
||||
|
||||
<h3><a id="typeresource">VIRT_RESOURCE</a></h3>
|
||||
|
||||
<p>
|
||||
Reports the usage of a host resource by a guest. The fields include will
|
||||
vary according to the type of device being reported. When the guest is
|
||||
initially booted records will be generated for all assigned resources.
|
||||
If any changes are made to the running guest configuration, for example
|
||||
hotplug devices, or adjust resources allocation, further records will
|
||||
be generated.
|
||||
</p>
|
||||
|
||||
<h4><a id="typeresourcevcpu">Virtual CPU</a></h4>
|
||||
|
||||
<p>
|
||||
The <code>msg</code> field will include the following sub-fields
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>reason</code></dt>
|
||||
<dd>The reason which caused the resource to be assigned to happen</dd>
|
||||
<dt><code>resrc</code></dt>
|
||||
<dd>The type of resource assigned. Set to <code>vcpu</code></dd>
|
||||
<dt><code>old-vcpu</code></dt>
|
||||
<dd>Original vCPU count, or 0</dd>
|
||||
<dt><code>new-vcpu</code></dt>
|
||||
<dd>Updated vCPU count</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
<h4><a id="typeresourcemem">Memory</a></h4>
|
||||
|
||||
<p>
|
||||
The <code>msg</code> field will include the following sub-fields
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>reason</code></dt>
|
||||
<dd>The reason which caused the resource to be assigned to happen</dd>
|
||||
<dt><code>resrc</code></dt>
|
||||
<dd>The type of resource assigned. Set to <code>mem</code></dd>
|
||||
<dt><code>old-mem</code></dt>
|
||||
<dd>Original memory size in bytes, or 0</dd>
|
||||
<dt><code>new-mem</code></dt>
|
||||
<dd>Updated memory size in bytes</dd>
|
||||
</dl>
|
||||
|
||||
<h4><a id="typeresourcedisk">Disk</a></h4>
|
||||
<p>
|
||||
The <code>msg</code> field will include the following sub-fields
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>reason</code></dt>
|
||||
<dd>The reason which caused the resource to be assigned to happen</dd>
|
||||
<dt><code>resrc</code></dt>
|
||||
<dd>The type of resource assigned. Set to <code>disk</code></dd>
|
||||
<dt><code>old-disk</code></dt>
|
||||
<dd>Original host file or device path acting as the disk backing file</dd>
|
||||
<dt><code>new-disk</code></dt>
|
||||
<dd>Updated host file or device path acting as the disk backing file</dd>
|
||||
</dl>
|
||||
|
||||
<h4><a id="typeresourcenic">Network interface</a></h4>
|
||||
|
||||
<p>
|
||||
The <code>msg</code> field will include the following sub-fields
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>reason</code></dt>
|
||||
<dd>The reason which caused the resource to be assigned to happen</dd>
|
||||
<dt><code>resrc</code></dt>
|
||||
<dd>The type of resource assigned. Set to <code>net</code></dd>
|
||||
<dt><code>old-net</code></dt>
|
||||
<dd>Original MAC address of the guest network interface</dd>
|
||||
<dt><code>new-net</code></dt>
|
||||
<dd>Updated MAC address of the guest network interface</dd>
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
If there is a host network interface associated with the guest NIC then
|
||||
further records may be generated
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>reason</code></dt>
|
||||
<dd>The reason which caused the resource to be assigned to happen</dd>
|
||||
<dt><code>resrc</code></dt>
|
||||
<dd>The type of resource assigned. Set to <code>net</code></dd>
|
||||
<dt><code>net</code></dt>
|
||||
<dd>MAC address of the host network interface</dd>
|
||||
<dt><code>rdev</code></dt>
|
||||
<dd>Name of the host network interface</dd>
|
||||
</dl>
|
||||
|
||||
<h4><a id="typeresourcefs">Filesystem</a></h4>
|
||||
<p>
|
||||
The <code>msg</code> field will include the following sub-fields
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>reason</code></dt>
|
||||
<dd>The reason which caused the resource to be assigned to happen</dd>
|
||||
<dt><code>resrc</code></dt>
|
||||
<dd>The type of resource assigned. Set to <code>fs</code></dd>
|
||||
<dt><code>old-fs</code></dt>
|
||||
<dd>Original host directory, file or device path backing the filesystem </dd>
|
||||
<dt><code>new-fs</code></dt>
|
||||
<dd>Updated host directory, file or device path backing the filesystem</dd>
|
||||
</dl>
|
||||
|
||||
<h4><a id="typeresourcehost">Host device</a></h4>
|
||||
<p>
|
||||
The <code>msg</code> field will include the following sub-fields
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>reason</code></dt>
|
||||
<dd>The reason which caused the resource to be assigned to happen</dd>
|
||||
<dt><code>resrc</code></dt>
|
||||
<dd>The type of resource assigned. Set to <code>hostdev</code> or <code>dev</code></dd>
|
||||
<dt><code>dev</code></dt>
|
||||
<dd>The unique bus identifier of the USB, PCI or SCSI device, if <code>resrc=dev</code></dd>
|
||||
<dt><code>disk</code></dt>
|
||||
<dd>The path of the block device assigned to the guest, if <code>resrc=hostdev</code></dd>
|
||||
<dt><code>chardev</code></dt>
|
||||
<dd>The path of the character device assigned to the guest, if <code>resrc=hostdev</code></dd>
|
||||
</dl>
|
||||
|
||||
<h4><a id="typeresourcetpm">TPM</a></h4>
|
||||
<p>
|
||||
The <code>msg</code> field will include the following sub-fields
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>reason</code></dt>
|
||||
<dd>The reason which caused the resource to be assigned to happen</dd>
|
||||
<dt><code>resrc</code></dt>
|
||||
<dd>The type of resource assigned. Set to <code>tpm</code> or <code>tpm-emulator</code></dd>
|
||||
<dt><code>device</code></dt>
|
||||
<dd>The path of the host TPM device assigned to the guest</dd>
|
||||
</dl>
|
||||
|
||||
<h4><a id="typeresourcerng">RNG</a></h4>
|
||||
<p>
|
||||
The <code>msg</code> field will include the following sub-fields
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>reason</code></dt>
|
||||
<dd>The reason which caused the resource to be assigned to happen</dd>
|
||||
<dt><code>resrc</code></dt>
|
||||
<dd>The type of resource assigned. Set to <code>rng</code></dd>
|
||||
<dt><code>old-rng</code></dt>
|
||||
<dd>Original path of the host entropy source for the RNG</dd>
|
||||
<dt><code>new-rng</code></dt>
|
||||
<dd>Updated path of the host entropy source for the RNG</dd>
|
||||
</dl>
|
||||
|
||||
<h4><a id="typeresourcechardev">console/serial/parallel/channel</a></h4>
|
||||
<p>
|
||||
The <code>msg</code> field will include the following sub-fields
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>reason</code></dt>
|
||||
<dd>The reason which caused the resource to be assigned to happen</dd>
|
||||
<dt><code>resrc</code></dt>
|
||||
<dd>The type of resource assigned. Set to <code>chardev</code></dd>
|
||||
<dt><code>old-chardev</code></dt>
|
||||
<dd>Original path of the backing character device for given emulated device</dd>
|
||||
<dt><code>new-chardev</code></dt>
|
||||
<dd>Updated path of the backing character device for given emulated device</dd>
|
||||
</dl>
|
||||
|
||||
<h4><a id="typeresourcesmartcard">smartcard</a></h4>
|
||||
<p>
|
||||
The <code>msg</code> field will include the following sub-fields
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>reason</code></dt>
|
||||
<dd>The reason which caused the resource to be assigned to happen</dd>
|
||||
<dt><code>resrc</code></dt>
|
||||
<dd>The type of resource assigned. Set to <code>smartcard</code></dd>
|
||||
<dt><code>old-smartcard</code></dt>
|
||||
<dd>Original path of the backing character device, certificate store or
|
||||
"nss-smartcard-device" for host smartcard passthrough.
|
||||
</dd>
|
||||
<dt><code>new-smartcard</code></dt>
|
||||
<dd>Updated path of the backing character device, certificate store or
|
||||
"nss-smartcard-device" for host smartcard passthrough.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h4><a id="typeresourceredir">Redirected device</a></h4>
|
||||
<p>
|
||||
The <code>msg</code> field will include the following sub-fields
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>reason</code></dt>
|
||||
<dd>The reason which caused the resource to be assigned to happen</dd>
|
||||
<dt><code>resrc</code></dt>
|
||||
<dd>The type of resource assigned. Set to <code>redir</code></dd>
|
||||
<dt><code>bus</code></dt>
|
||||
<dd>The bus type, only <code>usb</code> allowed</dd>
|
||||
<dt><code>device</code></dt>
|
||||
<dd>The device type, only <code>USB redir</code> allowed</dd>
|
||||
</dl>
|
||||
|
||||
<h4><a id="typeresourcecgroup">Control group</a></h4>
|
||||
|
||||
<p>
|
||||
The <code>msg</code> field will include the following sub-fields
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>reason</code></dt>
|
||||
<dd>The reason which caused the resource to be assigned to happen</dd>
|
||||
<dt><code>resrc</code></dt>
|
||||
<dd>The type of resource assigned. Set to <code>cgroup</code></dd>
|
||||
<dt><code>cgroup</code></dt>
|
||||
<dd>The name of the cgroup controller</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
<h4><a id="typeresourceshmem">Shared memory</a></h4>
|
||||
<p>
|
||||
The <code>msg</code> field will include the following sub-fields
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>resrc</code></dt>
|
||||
<dd>The type of resource assigned. Set to <code>shmem</code></dd>
|
||||
<dt><code>reason</code></dt>
|
||||
<dd>The reason which caused the resource to be assigned to happen</dd>
|
||||
<dt><code>size</code></dt>
|
||||
<dd>The size of the shared memory region</dd>
|
||||
<dt><code>shmem</code></dt>
|
||||
<dd>Name of the shared memory region</dd>
|
||||
<dt><code>source</code></dt>
|
||||
<dd>Path of the backing character device for given emulated device</dd>
|
||||
</dl>
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -1,366 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<body>
|
||||
<h1>Connection authentication</h1>
|
||||
<p>
|
||||
When connecting to libvirt, some connections may require client
|
||||
authentication before allowing use of the APIs. The set of possible
|
||||
authentication mechanisms is administrator controlled, independent
|
||||
of applications using libvirt. Once authenticated, libvirt can apply
|
||||
fine grained <a href="acl.html">access control</a> to the operations
|
||||
performed by a client.
|
||||
</p>
|
||||
|
||||
<ul id="toc"></ul>
|
||||
|
||||
<h2><a id="Auth_client_config">Client configuration</a></h2>
|
||||
|
||||
<p>
|
||||
When connecting to a remote hypervisor which requires authentication,
|
||||
most libvirt applications will prompt the user for the credentials. It is
|
||||
also possible to provide a client configuration file containing all the
|
||||
authentication credentials, avoiding any interaction. Libvirt will look
|
||||
for the authentication file using the following sequence:
|
||||
</p>
|
||||
<ol>
|
||||
<li>The file path specified by the $LIBVIRT_AUTH_FILE environment
|
||||
variable.</li>
|
||||
<li>The file path specified by the "authfile=/some/file" URI
|
||||
query parameter</li>
|
||||
<li>The file $XDG_CONFIG_HOME/libvirt/auth.conf</li>
|
||||
<li>The file /etc/libvirt/auth.conf</li>
|
||||
</ol>
|
||||
|
||||
<p>
|
||||
The auth configuration file uses the traditional <code>".ini"</code>
|
||||
style syntax. There are two types of groups that can be present in
|
||||
the config. First there are one or more <strong>credential</strong>
|
||||
sets, which provide the actual authentication credentials. The keys
|
||||
within the group may be:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li><code>username</code>: the user login name to act as. This
|
||||
is relevant for ESX, Xen, HyperV and SSH, but probably not
|
||||
the one you want to libvirtd with SASL.</li>
|
||||
<li><code>authname</code>: the name to authorize as. This is
|
||||
what is commonly required for libvirtd with SASL.</li>
|
||||
<li><code>password</code>: the secret password</li>
|
||||
<li><code>realm</code>: the domain realm for SASL, mostly
|
||||
unused</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
Each set of credentials has a name, which is part of the group
|
||||
entry name. Overall the syntax is
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
[credentials-$NAME]
|
||||
credname1=value1
|
||||
credname2=value2</pre>
|
||||
|
||||
<p>
|
||||
For example, to define two sets of credentials used for production
|
||||
and test machines, using libvirtd, and a further ESX server for dev:
|
||||
</p>
|
||||
<pre>
|
||||
[credentials-test]
|
||||
authname=fred
|
||||
password=123456
|
||||
|
||||
[credentials-prod]
|
||||
authname=bar
|
||||
password=letmein
|
||||
|
||||
[credentials-dev]
|
||||
username=joe
|
||||
password=hello
|
||||
|
||||
[credentials-defgrp]
|
||||
username=defuser
|
||||
password=defpw</pre>
|
||||
|
||||
<p>
|
||||
The second set of groups provide mappings of credentials to
|
||||
specific machine services. The config file group names compromise
|
||||
the service type and host:
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
[auth-$SERVICE-$HOSTNAME]
|
||||
credentials=$CREDENTIALS</pre>
|
||||
|
||||
<p>
|
||||
For example, following the previous example, here is how to
|
||||
map some machines. For convenience libvirt supports a default
|
||||
mapping of credentials to machines:
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
[auth-libvirt-test1.example.com]
|
||||
credentials=test
|
||||
|
||||
[auth-libvirt-test2.example.com]
|
||||
credentials=test
|
||||
|
||||
[auth-libvirt-demo3.example.com]
|
||||
credentials=test
|
||||
|
||||
[auth-libvirt-prod1.example.com]
|
||||
credentials=prod
|
||||
|
||||
[auth-libvirt-default]
|
||||
credentials=defgrp
|
||||
|
||||
[auth-esx-dev1.example.com]
|
||||
credentials=dev
|
||||
|
||||
[auth-esx-default]
|
||||
credentials=defgrp</pre>
|
||||
|
||||
|
||||
<p>
|
||||
The following service types are known to libvirt
|
||||
</p>
|
||||
|
||||
<ol>
|
||||
<li><code>libvirt</code> - used for connections to a libvirtd
|
||||
server, which is configured with SASL auth</li>
|
||||
<li><code>ssh</code> - used for connections to a Phyp server
|
||||
over SSH, but the Phyp driver has been removed</li>
|
||||
<li><code>esx</code> - used for connections to an ESX or
|
||||
VirtualCenter server</li>
|
||||
</ol>
|
||||
|
||||
<p>
|
||||
Applications using libvirt are free to use this same configuration
|
||||
file for storing other credentials. For example, it can be used
|
||||
to storage VNC or SPICE login credentials
|
||||
</p>
|
||||
|
||||
<h2><a id="ACL_server_config">Server configuration</a></h2>
|
||||
<p>
|
||||
The libvirt daemon allows the administrator to choose the authentication
|
||||
mechanisms used for client connections on each network socket independently.
|
||||
This is primarily controlled via the libvirt daemon master config file in
|
||||
<code>/etc/libvirt/libvirtd.conf</code>. Each of the libvirt sockets can
|
||||
have its authentication mechanism configured independently. There is
|
||||
currently a choice of <code>none</code>, <code>polkit</code>, and <code>sasl</code>.
|
||||
The SASL scheme can be further configured to choose between a large
|
||||
number of different mechanisms.
|
||||
</p>
|
||||
<h2><a id="ACL_server_unix_perms">UNIX socket permissions/group</a></h2>
|
||||
<p>
|
||||
If libvirt does not contain support for PolicyKit, then access control for
|
||||
the UNIX domain socket is done using traditional file user/group ownership
|
||||
and permissions. There are 2 sockets, one for full read-write access, the
|
||||
other for read-only access. The RW socket will be restricted (mode 0700) to
|
||||
only allow the <code>root</code> user to connect. The read-only socket will
|
||||
be open access (mode 0777) to allow any user to connect.
|
||||
</p>
|
||||
<p>
|
||||
To allow non-root users greater access, the <code>libvirtd.conf</code> file
|
||||
can be edited to change the permissions via the <code>unix_sock_rw_perms</code>,
|
||||
config parameter and to set a user group via the <code>unix_sock_group</code>
|
||||
parameter. For example, setting the former to mode <code>0770</code> and the
|
||||
latter <code>wheel</code> would let any user in the wheel group connect to
|
||||
the libvirt daemon.
|
||||
</p>
|
||||
<h2><a id="ACL_server_polkit">UNIX socket PolicyKit auth</a></h2>
|
||||
<p>
|
||||
If libvirt contains support for PolicyKit, then access control options are
|
||||
more advanced. The <code>auth_unix_rw</code> parameter will default to
|
||||
<code>polkit</code>, and the file permissions will default to <code>0777</code>
|
||||
even on the RW socket. Upon connecting to the socket, the client application
|
||||
will be required to identify itself with PolicyKit. The default policy for the
|
||||
RW daemon socket will require any application running in the current desktop
|
||||
session to authenticate using the user's password. This is akin to <code>sudo</code>
|
||||
auth, but does not require that the client application ultimately run as root.
|
||||
Default policy will still allow any application to connect to the RO socket.
|
||||
</p>
|
||||
<p>
|
||||
The default policy can be overridden by creating a new policy file in the
|
||||
<code>/etc/polkit-1/rules.d</code> directory. Information on the options
|
||||
available can be found by reading the <code>polkit(8)</code> man page. The
|
||||
two libvirt actions are named <code>org.libvirt.unix.manage</code> for full
|
||||
management access, and <code>org.libvirt.unix.monitor</code> for read-only
|
||||
access.
|
||||
</p>
|
||||
<p>
|
||||
As an example, creating <code>/etc/polkit-1/rules.d/80-libvirt-manage.rules</code>
|
||||
with the following gives the user <code>fred</code> full management access
|
||||
when accessing from an active local session:
|
||||
</p>
|
||||
<pre>polkit.addRule(function(action, subject) {
|
||||
if (action.id == "org.libvirt.unix.manage" &&
|
||||
subject.local && subject.active && subject.user == "fred") {
|
||||
return polkit.Result.YES;
|
||||
}
|
||||
});</pre>
|
||||
<p>
|
||||
Older versions of PolicyKit used policy files ending with .pkla in the
|
||||
local override directory <code>/etc/polkit-1/localauthority/50-local.d/</code>.
|
||||
Compatibility with this older format is provided by <a
|
||||
href="https://pagure.io/polkit-pkla-compat">polkit-pkla-compat</a>. As an
|
||||
example, this gives the user <code>fred</code> full management access:
|
||||
</p>
|
||||
<pre>[Allow fred libvirt management permissions]
|
||||
Identity=unix-user:fred
|
||||
Action=org.libvirt.unix.manage
|
||||
ResultAny=yes
|
||||
ResultInactive=yes
|
||||
ResultActive=yes</pre>
|
||||
<h2><a id="ACL_server_sasl">SASL pluggable authentication</a></h2>
|
||||
|
||||
<p>
|
||||
Libvirt integrates with the cyrus-sasl library to provide a pluggable authentication
|
||||
system using the SASL protocol. SASL can be used in combination with libvirtd's TLS
|
||||
or TCP socket listeners. When used with the TCP listener, the SASL mechanism is
|
||||
rqeuired to provide session encryption in addition to authentication. Only a very
|
||||
few SASL mechanisms are able to do this, and of those that can do it, only the
|
||||
GSSAPI plugin is considered acceptably secure by modern standards:
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt>GSSAPI</dt>
|
||||
<dd><strong>This is the current default mechanism to use with libvirtd</strong>.
|
||||
It uses the Kerberos v5 authentication protocol underneath, and assuming
|
||||
the Kerberos client/server are configured with modern ciphers (AES),
|
||||
it provides strong session encryption capabilities.</dd>
|
||||
|
||||
<dt>DIGEST-MD5</dt>
|
||||
<dd>This was previously set as the default mechanism to use with libvirtd.
|
||||
It provides a simple username/password based authentication mechanism
|
||||
that includes session encryption.
|
||||
<a href="https://tools.ietf.org/html/rfc6331">RFC 6331</a>, however,
|
||||
documents a number of serious security flaws with DIGEST-MD5 and as a
|
||||
result marks it as <code>OBSOLETE</code>. Specific concerns are that
|
||||
it is vulnerable to MITM attacks and the MD5 hash can be brute-forced
|
||||
to reveal the password. A replacement is provided via the SCRAM mechanism,
|
||||
however, note that this does not provide encryption, so the SCRAM
|
||||
mechanism can only be used on the libvirtd TLS listener.
|
||||
</dd>
|
||||
|
||||
<dt>PASSDSS-3DES-1</dt>
|
||||
<dd>This provides a simple username/password based authentication
|
||||
mechanism that includes session encryption. The current cyrus-sasl
|
||||
implementation does not provide a way to validate the server's
|
||||
public key identity, thus it is susceptible to a MITM attacker
|
||||
impersonating the server. It is also not enabled in many OS
|
||||
distros when building SASL libraries.</dd>
|
||||
|
||||
<dt>KERBEROS_V4</dt>
|
||||
<dd>This uses the obsolete Kerberos v4 protocol to provide both authentication
|
||||
and session encryption. Kerberos v4 protocol has been obsolete since the
|
||||
early 1990's and has known security vulnerabilities so this will never be
|
||||
used in practice.</dd>
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
Other SASL mechanisms, not listed above, can only be used when the libvirtd
|
||||
TLS or UNIX socket listeners.
|
||||
</p>
|
||||
|
||||
<h3><a id="ACL_server_username">Username/password auth</a></h3>
|
||||
<p>
|
||||
As noted above, the DIGEST-MD5 mechanism is considered obsolete and should
|
||||
not be used anymore. To provide a simple username/password auth scheme on
|
||||
the libvirt UNIX socket or TLS listeners, however, it is possible to use
|
||||
the SCRAM mechanism. The <code>auth_unix_ro</code>, <code>auth_unix_rw</code>,
|
||||
<code>auth_tls</code> config params in <code>libvirt.conf</code> can be used
|
||||
to turn on SASL auth in these listeners.
|
||||
</p>
|
||||
<p>
|
||||
Since the libvirt SASL config file defaults to using GSSAPI (Kerberos), a
|
||||
config change is required to enable plain password auth. This is done by
|
||||
editting <code>/etc/sasl2/libvirt.conf</code> to set the <code>mech_list</code>
|
||||
parameter to <code>scram-sha-1</code>.
|
||||
</p>
|
||||
<p>
|
||||
Out of the box, no user accounts are defined, so no clients will be able to authenticate
|
||||
on the TCP socket. Adding users and setting their passwords is done with the <code>saslpasswd2</code>
|
||||
command. When running this command it is important to tell it that the appname is <code>libvirt</code>.
|
||||
As an example, to add a user <code>fred</code>, run
|
||||
</p>
|
||||
<pre>
|
||||
# saslpasswd2 -a libvirt fred
|
||||
Password: xxxxxx
|
||||
Again (for verification): xxxxxx
|
||||
</pre>
|
||||
<p>
|
||||
To see a list of all accounts the <code>sasldblistusers2</code> command can be used.
|
||||
This command expects to be given the path to the libvirt user database, which is kept
|
||||
in <code>/etc/libvirt/passwd.db</code>
|
||||
</p>
|
||||
<pre>
|
||||
# sasldblistusers2 -f /etc/libvirt/passwd.db
|
||||
fred@t60wlan.home.berrange.com: userPassword
|
||||
</pre>
|
||||
<p>
|
||||
Finally, to disable a user's access, the <code>saslpasswd2</code> command can be used
|
||||
again:
|
||||
</p>
|
||||
<pre>
|
||||
# saslpasswd2 -a libvirt -d fred
|
||||
</pre>
|
||||
<h3><a id="ACL_server_kerberos">GSSAPI/Kerberos auth</a></h3>
|
||||
<p>
|
||||
The plain TCP listener of the libvirt daemon defaults to using SASL for authentication.
|
||||
The libvirt SASL config also defaults to GSSAPI, so there is no need to edit the
|
||||
SASL config when using GSSAPI. If the libvirtd TLS or UNIX listeners are used,
|
||||
then the Kerberos session encryption will be disabled since it is not required
|
||||
in these scenarios - only the plain TCP listener needs encryption
|
||||
</p>
|
||||
<p>
|
||||
Some operating systems do not install the SASL kerberos plugin by default. It
|
||||
may be necessary to install a sub-package such as <code>cyrus-sasl-gssapi</code>.
|
||||
To check whether the Kerberos plugin is installed run the <code>pluginviewer</code>
|
||||
program and verify that <code>gssapi</code> is listed, e.g.:
|
||||
</p>
|
||||
<pre>
|
||||
# pluginviewer
|
||||
...snip...
|
||||
Plugin "gssapiv2" [loaded], API version: 4
|
||||
SASL mechanism: GSSAPI, best SSF: 56
|
||||
security flags: NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH
|
||||
features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION|NEED_SERVER_FQDN
|
||||
</pre>
|
||||
<p>
|
||||
Next it is necessary for the administrator of the Kerberos realm to
|
||||
issue a principal for the libvirt server. There needs to be one
|
||||
principal per host running the libvirt daemon. The principal should be
|
||||
named <code>libvirt/full.hostname@KERBEROS.REALM</code>. This is
|
||||
typically done by running the <code>kadmin.local</code> command on the
|
||||
Kerberos server, though some Kerberos servers have alternate ways of
|
||||
setting up service principals. Once created, the principal should be
|
||||
exported to a keytab, copied to the host running the libvirt daemon
|
||||
and placed in <code>/etc/libvirt/krb5.tab</code>
|
||||
</p>
|
||||
<pre>
|
||||
# kadmin.local
|
||||
kadmin.local: add_principal libvirt/foo.example.com
|
||||
Enter password for principal "libvirt/foo.example.com@EXAMPLE.COM":
|
||||
Re-enter password for principal "libvirt/foo.example.com@EXAMPLE.COM":
|
||||
Principal "libvirt/foo.example.com@EXAMPLE.COM" created.
|
||||
|
||||
kadmin.local: ktadd -k /root/libvirt-foo-example.tab libvirt/foo.example.com@EXAMPLE.COM
|
||||
Entry for principal libvirt/foo.example.com@EXAMPLE.COM with kvno 4, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/root/libvirt-foo-example.tab.
|
||||
Entry for principal libvirt/foo.example.com@EXAMPLE.COM with kvno 4, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/root/libvirt-foo-example.tab.
|
||||
Entry for principal libvirt/foo.example.com@EXAMPLE.COM with kvno 4, encryption type DES with HMAC/sha1 added to keytab WRFILE:/root/libvirt-foo-example.tab.
|
||||
Entry for principal libvirt/foo.example.com@EXAMPLE.COM with kvno 4, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/root/libvirt-foo-example.tab.
|
||||
|
||||
kadmin.local: quit
|
||||
|
||||
# scp /root/libvirt-foo-example.tab root@foo.example.com:/etc/libvirt/krb5.tab
|
||||
# rm /root/libvirt-foo-example.tab
|
||||
</pre>
|
||||
<p>
|
||||
Any client application wishing to connect to a Kerberos enabled libvirt server
|
||||
merely needs to run <code>kinit</code> to gain a user principal. This may well
|
||||
be done automatically when a user logs into a desktop session, if PAM is set up
|
||||
to authenticate against Kerberos.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
@@ -1,38 +0,0 @@
|
||||
==============
|
||||
Best practices
|
||||
==============
|
||||
|
||||
These are a few guidelines to keep in mind when submitting patches
|
||||
to libvirt: following them will maximise the chance of your patches
|
||||
being reviewed in a timely manner and being accepted into libvirt
|
||||
with minimal back-and-forth.
|
||||
|
||||
- Discuss any large changes on the mailing list first. Post
|
||||
patches early and listen to feedback.
|
||||
|
||||
- In your commit message, make the summary line reasonably short
|
||||
(60 characters is typical), followed by a blank line, followed
|
||||
by any longer description of why your patch makes sense. If the
|
||||
patch fixes a regression, and you know what commit introduced
|
||||
the problem, mentioning that is useful. If the patch resolves a
|
||||
upstream bug reported in GitLab, put "Fixes: #NNN" in the commit
|
||||
message. For a downstream bug, mention the URL of the bug instead.
|
||||
In both cases also summarize the issue rather than making all
|
||||
readers follow the link. You can use 'git shortlog -30' to get
|
||||
an idea of typical summary lines.
|
||||
|
||||
- Split large changes into a series of smaller patches,
|
||||
self-contained if possible, with an explanation of each patch
|
||||
and an explanation of how the sequence of patches fits
|
||||
together. Moreover, please keep in mind that it's required to
|
||||
be able to compile cleanly (**including**
|
||||
``make check`` and ``make syntax-check``) after each
|
||||
patch. A feature does not have to work until the end of a
|
||||
series, but intermediate patches must compile and not cause
|
||||
test-suite failures (this is to preserve the usefulness of
|
||||
``git bisect``, among other things).
|
||||
|
||||
There is more on this subject, including lots of links to
|
||||
background reading on the subject, on `Richard Jones' guide to
|
||||
working with open source
|
||||
projects <http://people.redhat.com/rjones/how-to-supply-code-to-open-source-projects/>`__.
|
@@ -1,101 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<body>
|
||||
<h1 >Bindings for other languages and integration API modules</h1>
|
||||
|
||||
<p>
|
||||
Libvirt supports C and C++ directly, and has bindings available
|
||||
for other languages:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<strong>C#</strong>: Arnaud Champion develops
|
||||
<a href="csharp.html">C# bindings</a>.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Go</strong>: Daniel Berrange develops
|
||||
<a href="https://pkg.go.dev/libvirt.org/libvirt-go">Go bindings</a>.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Java</strong>: Daniel Veillard develops
|
||||
<a href="java.html">Java bindings</a>.
|
||||
</li>
|
||||
<li>
|
||||
<strong>OCaml</strong>: Richard Jones develops
|
||||
<a href="https://libvirt.org/ocaml/">OCaml bindings</a>.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Perl</strong>: Daniel Berrange develops
|
||||
<a href="http://search.cpan.org/dist/Sys-Virt/">Perl bindings</a>.
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<strong>PHP</strong>: Radek Hladik started developing
|
||||
<a href="https://libvirt.org/php">PHP bindings</a> in 2010.
|
||||
</p>
|
||||
<p>
|
||||
In February 2011 the binding development has been moved to the libvirt.org website as
|
||||
libvirt-php project.
|
||||
</p>
|
||||
<p>
|
||||
The project is now maintained by Michal Novotny and it's heavily based
|
||||
on Radek's version. For more information, including
|
||||
information on posting patches to libvirt-php, please refer
|
||||
to the <a href="https://libvirt.org/php">PHP bindings</a> site.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<strong>Python</strong>: Libvirt's python bindings are split to a
|
||||
separate <a href="https://gitlab.com/libvirt/libvirt-python">package</a>
|
||||
since version 1.2.0, older versions came with direct support for the
|
||||
Python language.
|
||||
</p>
|
||||
<p>
|
||||
If your libvirt is installed as packages, rather than compiled
|
||||
by you from source code, ensure you have the appropriate
|
||||
package installed.
|
||||
</p>
|
||||
<p>
|
||||
This is named <b>libvirt-python</b> on RHEL/Fedora,
|
||||
<a href="http://packages.ubuntu.com/search?keywords=python-libvirt"><b>python-libvirt</b></a>
|
||||
on Ubuntu, and may be named differently on others.
|
||||
</p>
|
||||
<p>
|
||||
For usage information, see the
|
||||
<a href="python.html">Python API bindings</a> page.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<strong>Ruby</strong>: Chris Lalancette develops
|
||||
<a href="https://libvirt.org/ruby/">Ruby bindings</a>.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
Integration API modules:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<strong>D-Bus</strong>: Pavel Hrdina develops
|
||||
<a href="dbus.html">D-Bus API</a>.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
For information on using libvirt on <strong>Windows</strong>
|
||||
<a href="windows.html">please see the Windows support page</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Support, requests or help for libvirt bindings are welcome on the
|
||||
<a href="https://www.redhat.com/mailman/listinfo/libvir-list/">mailing list</a>,
|
||||
as usual try to provide enough background information and make sure
|
||||
you use recent version, see the <a href="bugs.html">help page</a>.
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square150x150logo src="/mstile-150x150.png"/>
|
||||
<TileColor>#b91d47</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
@@ -1,161 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<body>
|
||||
|
||||
<h1>Bug reporting</h1>
|
||||
|
||||
<ul id="toc"></ul>
|
||||
|
||||
<h2><a id="security">Security Issues</a></h2>
|
||||
|
||||
<p>
|
||||
If you think that an issue with libvirt may have security
|
||||
implications, <strong>please do not</strong> publicly
|
||||
report it in the bug tracker, mailing lists, or irc. Libvirt
|
||||
has <a href="securityprocess.html">a dedicated process for handling (potential) security issues</a>
|
||||
that should be used instead. So if your issue has security
|
||||
implications, ignore the rest of this page and follow the
|
||||
<a href="securityprocess.html">security process</a> instead.
|
||||
</p>
|
||||
|
||||
<h2><a id="bugtracking">Bug Tracking</a></h2>
|
||||
|
||||
<p>
|
||||
If you are using libvirt binaries from a Linux distribution
|
||||
check below for distribution specific bug reporting policies
|
||||
first.
|
||||
</p>
|
||||
|
||||
<h2><a id="general">General libvirt bug reports</a></h2>
|
||||
|
||||
<p>
|
||||
Bugs in upstream libvirt code should be reported as issues in the
|
||||
appropriate <a href="https://gitlab.com/libvirt">project on GitLab.</a>
|
||||
Before submitting a ticket, check the existing tickets to see if
|
||||
the bug/feature is already tracked.
|
||||
</p>
|
||||
<p>
|
||||
It's always a good idea to file bug reports, as the process of
|
||||
filing the report always makes it easier to describe the
|
||||
problem, and the bug number provides a quick way of referring to
|
||||
the problem. However, not everybody in the community pays frequent
|
||||
attention to issues, so after you file a bug, asking questions
|
||||
and submitting patches on <a href="contact.html">the libvirt
|
||||
mailing lists</a> will increase your bug's visibility and
|
||||
encourage people to think about your problem. Don't hesitate to
|
||||
ask questions on the list, as others may know of existing
|
||||
solutions or be interested in collaborating with you on finding
|
||||
a solution. Patches are always appreciated, and it's likely
|
||||
that someone else has the same problem you do!
|
||||
</p>
|
||||
<p>
|
||||
If you decide to write code, though, before you begin please
|
||||
read the <a href="hacking.html">contributor guidelines</a>,
|
||||
especially the first point: "Discuss any large changes on the
|
||||
mailing list first. Post patches early and listen to feedback."
|
||||
Few development experiences are more discouraging than spending
|
||||
a bunch of time writing a patch only to have someone point out a
|
||||
better approach on list.
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://gitlab.com/libvirt/libvirt/-/issues">View libvirt.git tickets</a></li>
|
||||
<li><a href="https://gitlab.com/libvirt/libvirt/-/issues/new">New libvirt.git ticket</a></li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
Note bugs in language bindings and other sub-projects should be
|
||||
reported to their corresponding git repository rather than the
|
||||
main libvirt.git linked above.
|
||||
</p>
|
||||
|
||||
<h2><a id="distribution">Linux Distribution specific bug reports</a></h2>
|
||||
<ul>
|
||||
<li>
|
||||
If you are using binaries from <strong>Fedora</strong>, enter
|
||||
tickets against the <code>Fedora</code> product and
|
||||
the <code>libvirt</code> component.
|
||||
<ul>
|
||||
<li><a href="http://bugzilla.redhat.com/buglist.cgi?component=libvirt&product=Fedora">View Fedora libvirt tickets</a></li>
|
||||
<li><a href="http://bugzilla.redhat.com/bugzilla/enter_bug.cgi?product=Fedora&component=libvirt">New Fedora libvirt ticket</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
If you are using binaries from <strong>Red Hat Enterprise
|
||||
Linux</strong>, enter tickets against the Red Hat Enterprise
|
||||
Linux product that you're using (e.g., Red Hat Enterprise
|
||||
Linux 6) and the <code>libvirt</code> component. Red Hat
|
||||
bugzilla has <a href="http://bugzilla.redhat.com">additional guidance</a> about getting support if
|
||||
you are a Red Hat customer.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
If you are using binaries from another Linux distribution
|
||||
first follow their own bug reporting guidelines.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Finally, if you are a contributor to another Linux
|
||||
distribution and would like to have your procedure for
|
||||
filing bugs mentioned here, please mail the libvirt
|
||||
development list.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h2><a id="quality">How to file high quality bug reports</a></h2>
|
||||
|
||||
<p>
|
||||
To increase the likelihood of your bug report being addressed it is
|
||||
important to provide as much information as possible. When filing
|
||||
libvirt bugs use this checklist to see if you are providing enough
|
||||
information:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>The version number of the libvirt build, or SHA1 of the GIT
|
||||
commit</li>
|
||||
<li>The hardware architecture being used</li>
|
||||
<li>The name of the hypervisor (Xen, QEMU, KVM)</li>
|
||||
<li>The XML config of the guest domain if relevant</li>
|
||||
<li>For Xen hypervisor, the domain logfiles from /var/log/xen and
|
||||
/var/log/libvirt/libxl</li>
|
||||
<li>For QEMU/KVM, the domain logfile from /var/log/libvirt/qemu</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
If the bug leads to a tool linked to libvirt crash, then the best
|
||||
is to provide a backtrace along with the scenario used to get the
|
||||
crash, the simplest is to run the program under gdb, reproduce the
|
||||
steps leading to the crash and then issue a gdb "bt -a" command to
|
||||
get the stack trace, attach it to the bug. Note that for the
|
||||
data to be really useful libvirt debug information must be present
|
||||
for example by installing libvirt debuginfo package on Fedora or
|
||||
Red Hat Enterprise Linux (with debuginfo-install libvirt) prior
|
||||
to running gdb.</p>
|
||||
<p>
|
||||
It may also happen that the libvirt daemon itself crashes or gets stuck,
|
||||
in the first case run it (as root) under gdb, and reproduce the sequence
|
||||
leading to the crash, similarly to a normal program provide the
|
||||
"bt" backtrace information to where gdb will have stopped.<br/>
|
||||
But if libvirtd gets stuck, for example seems to stop processing
|
||||
commands, try to attach to the faulty daemon and issue a gdb command
|
||||
"thread apply all bt" to show all the threads backtraces, as in:</p>
|
||||
<pre> # ps -o etime,pid `pgrep libvirt`
|
||||
... note the process id from the output
|
||||
# gdb /usr/sbin/libvirtd
|
||||
.... some information about gdb and loading debug data
|
||||
(gdb) attach $the_daemon_process_id
|
||||
....
|
||||
(gdb) thread apply all bt
|
||||
.... information to attach to the bug
|
||||
(gdb)
|
||||
</pre>
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -1,413 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<body>
|
||||
<h1>Control Groups Resource Management</h1>
|
||||
|
||||
<ul id="toc"></ul>
|
||||
|
||||
<p>
|
||||
The QEMU and LXC drivers make use of the Linux "Control Groups" facility
|
||||
for applying resource management to their virtual machines and containers.
|
||||
</p>
|
||||
|
||||
<h2><a id="requiredControllers">Required controllers</a></h2>
|
||||
|
||||
<p>
|
||||
The control groups filesystem supports multiple "controllers". By default
|
||||
the init system (such as systemd) should mount all controllers compiled
|
||||
into the kernel at <code>/sys/fs/cgroup/$CONTROLLER-NAME</code>. Libvirt
|
||||
will never attempt to mount any controllers itself, merely detect where
|
||||
they are mounted.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The QEMU driver is capable of using the <code>cpuset</code>,
|
||||
<code>cpu</code>, <code>cpuacct</code>, <code>memory</code>,
|
||||
<code>blkio</code> and <code>devices</code> controllers.
|
||||
None of them are compulsory. If any controller is not mounted,
|
||||
the resource management APIs which use it will cease to operate.
|
||||
It is possible to explicitly turn off use of a controller,
|
||||
even when mounted, via the <code>/etc/libvirt/qemu.conf</code>
|
||||
configuration file.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The LXC driver is capable of using the <code>cpuset</code>,
|
||||
<code>cpu</code>, <code>cpuacct</code>, <code>freezer</code>,
|
||||
<code>memory</code>, <code>blkio</code> and <code>devices</code>
|
||||
controllers. The <code>cpuacct</code>, <code>devices</code>
|
||||
and <code>memory</code> controllers are compulsory. Without
|
||||
them mounted, no containers can be started. If any of the
|
||||
other controllers are not mounted, the resource management APIs
|
||||
which use them will cease to operate.
|
||||
</p>
|
||||
|
||||
<h2><a id="currentLayout">Current cgroups layout</a></h2>
|
||||
|
||||
<p>
|
||||
As of libvirt 1.0.5 or later, the cgroups layout created by libvirt has been
|
||||
simplified, in order to facilitate the setup of resource control policies by
|
||||
administrators / management applications. The new layout is based on the concepts
|
||||
of "partitions" and "consumers". A "consumer" is a cgroup which holds the
|
||||
processes for a single virtual machine or container. A "partition" is a cgroup
|
||||
which does not contain any processes, but can have resource controls applied.
|
||||
A "partition" will have zero or more child directories which may be either
|
||||
"consumer" or "partition".
|
||||
</p>
|
||||
|
||||
<p>
|
||||
As of libvirt 1.1.1 or later, the cgroups layout will have some slight
|
||||
differences when running on a host with systemd 205 or later. The overall
|
||||
tree structure is the same, but there are some differences in the naming
|
||||
conventions for the cgroup directories. Thus the following docs split
|
||||
in two, one describing systemd hosts and the other non-systemd hosts.
|
||||
</p>
|
||||
|
||||
<h3><a id="currentLayoutSystemd">Systemd cgroups integration</a></h3>
|
||||
|
||||
<p>
|
||||
On hosts which use systemd, each consumer maps to a systemd scope unit,
|
||||
while partitions map to a system slice unit.
|
||||
</p>
|
||||
|
||||
<h4><a id="systemdScope">Systemd scope naming</a></h4>
|
||||
|
||||
<p>
|
||||
The systemd convention is for the scope name of virtual machines / containers
|
||||
to be of the general format <code>machine-$NAME.scope</code>. Libvirt forms the
|
||||
<code>$NAME</code> part of this by concatenating the driver type with the id
|
||||
and truncated name of the guest, and then escaping any systemd reserved
|
||||
characters.
|
||||
So for a guest <code>demo</code> running under the <code>lxc</code> driver,
|
||||
we get a <code>$NAME</code> of <code>lxc-12345-demo</code> which when escaped
|
||||
is <code>lxc\x2d12345\x2ddemo</code>. So the complete scope name is
|
||||
<code>machine-lxc\x2d12345\x2ddemo.scope</code>.
|
||||
The scope names map directly to the cgroup directory names.
|
||||
</p>
|
||||
|
||||
<h4><a id="systemdSlice">Systemd slice naming</a></h4>
|
||||
|
||||
<p>
|
||||
The systemd convention for slice naming is that a slice should include the
|
||||
name of all of its parents prepended on its own name. So for a libvirt
|
||||
partition <code>/machine/engineering/testing</code>, the slice name will
|
||||
be <code>machine-engineering-testing.slice</code>. Again the slice names
|
||||
map directly to the cgroup directory names. Systemd creates three top level
|
||||
slices by default, <code>system.slice</code> <code>user.slice</code> and
|
||||
<code>machine.slice</code>. All virtual machines or containers created
|
||||
by libvirt will be associated with <code>machine.slice</code> by default.
|
||||
</p>
|
||||
|
||||
<h4><a id="systemdLayout">Systemd cgroup layout</a></h4>
|
||||
|
||||
<p>
|
||||
Given this, a possible systemd cgroups layout involving 3 qemu guests,
|
||||
3 lxc containers and 3 custom child slices, would be:
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
$ROOT
|
||||
|
|
||||
+- system.slice
|
||||
| |
|
||||
| +- libvirtd.service
|
||||
|
|
||||
+- machine.slice
|
||||
|
|
||||
+- machine-qemu\x2d1\x2dvm1.scope
|
||||
| |
|
||||
| +- emulator
|
||||
| +- vcpu0
|
||||
| +- vcpu1
|
||||
|
|
||||
+- machine-qemu\x2d2\x2dvm2.scope
|
||||
| |
|
||||
| +- emulator
|
||||
| +- vcpu0
|
||||
| +- vcpu1
|
||||
|
|
||||
+- machine-qemu\x2d3\x2dvm3.scope
|
||||
| |
|
||||
| +- emulator
|
||||
| +- vcpu0
|
||||
| +- vcpu1
|
||||
|
|
||||
+- machine-engineering.slice
|
||||
| |
|
||||
| +- machine-engineering-testing.slice
|
||||
| | |
|
||||
| | +- machine-lxc\x2d11111\x2dcontainer1.scope
|
||||
| |
|
||||
| +- machine-engineering-production.slice
|
||||
| |
|
||||
| +- machine-lxc\x2d22222\x2dcontainer2.scope
|
||||
|
|
||||
+- machine-marketing.slice
|
||||
|
|
||||
+- machine-lxc\x2d33333\x2dcontainer3.scope
|
||||
</pre>
|
||||
|
||||
<h3><a id="currentLayoutGeneric">Non-systemd cgroups layout</a></h3>
|
||||
|
||||
<p>
|
||||
On hosts which do not use systemd, each consumer has a corresponding cgroup
|
||||
named <code>$VMNAME.libvirt-{qemu,lxc}</code>. Each consumer is associated
|
||||
with exactly one partition, which also have a corresponding cgroup usually
|
||||
named <code>$PARTNAME.partition</code>. The exceptions to this naming rule
|
||||
is the top level default partition for virtual machines and containers
|
||||
<code>/machine</code>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Given this, a possible non-systemd cgroups layout involving 3 qemu guests,
|
||||
3 lxc containers and 2 custom child slices, would be:
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
$ROOT
|
||||
|
|
||||
+- machine
|
||||
|
|
||||
+- qemu-1-vm1.libvirt-qemu
|
||||
| |
|
||||
| +- emulator
|
||||
| +- vcpu0
|
||||
| +- vcpu1
|
||||
|
|
||||
+- qeme-2-vm2.libvirt-qemu
|
||||
| |
|
||||
| +- emulator
|
||||
| +- vcpu0
|
||||
| +- vcpu1
|
||||
|
|
||||
+- qemu-3-vm3.libvirt-qemu
|
||||
| |
|
||||
| +- emulator
|
||||
| +- vcpu0
|
||||
| +- vcpu1
|
||||
|
|
||||
+- engineering.partition
|
||||
| |
|
||||
| +- testing.partition
|
||||
| | |
|
||||
| | +- lxc-11111-container1.libvirt-lxc
|
||||
| |
|
||||
| +- production.partition
|
||||
| |
|
||||
| +- lxc-22222-container2.libvirt-lxc
|
||||
|
|
||||
+- marketing.partition
|
||||
|
|
||||
+- lxc-33333-container3.libvirt-lxc
|
||||
</pre>
|
||||
|
||||
<h2><a id="customPartiton">Using custom partitions</a></h2>
|
||||
|
||||
<p>
|
||||
If there is a need to apply resource constraints to groups of
|
||||
virtual machines or containers, then the single default
|
||||
partition <code>/machine</code> may not be sufficiently
|
||||
flexible. The administrator may wish to sub-divide the
|
||||
default partition, for example into "testing" and "production"
|
||||
partitions, and then assign each guest to a specific
|
||||
sub-partition. This is achieved via a small element addition
|
||||
to the guest domain XML config, just below the main <code>domain</code>
|
||||
element
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
...
|
||||
<resource>
|
||||
<partition>/machine/production</partition>
|
||||
</resource>
|
||||
...
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
Note that the partition names in the guest XML are using a
|
||||
generic naming format, not the low level naming convention
|
||||
required by the underlying host OS. That is, you should not include
|
||||
any of the <code>.partition</code> or <code>.slice</code>
|
||||
suffixes in the XML config. Given a partition name
|
||||
<code>/machine/production</code>, libvirt will automatically
|
||||
apply the platform specific translation required to get
|
||||
<code>/machine/production.partition</code> (non-systemd)
|
||||
or <code>/machine.slice/machine-production.slice</code>
|
||||
(systemd) as the underlying cgroup name
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Libvirt will not auto-create the cgroups directory to back
|
||||
this partition. In the future, libvirt / virsh will provide
|
||||
APIs / commands to create custom partitions, but currently
|
||||
this is left as an exercise for the administrator.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>Note:</strong> the ability to place guests in custom
|
||||
partitions is only available with libvirt >= 1.0.5, using
|
||||
the new cgroup layout. The legacy cgroups layout described
|
||||
later in this document did not support customization per guest.
|
||||
</p>
|
||||
|
||||
<h3><a id="createSystemd">Creating custom partitions (systemd)</a></h3>
|
||||
|
||||
<p>
|
||||
Given the XML config above, the admin on a systemd based host would
|
||||
need to create a unit file <code>/etc/systemd/system/machine-production.slice</code>
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
# cat > /etc/systemd/system/machine-testing.slice <<EOF
|
||||
[Unit]
|
||||
Description=VM testing slice
|
||||
Before=slices.target
|
||||
Wants=machine.slice
|
||||
EOF
|
||||
# systemctl start machine-testing.slice
|
||||
</pre>
|
||||
|
||||
<h3><a id="createNonSystemd">Creating custom partitions (non-systemd)</a></h3>
|
||||
|
||||
<p>
|
||||
Given the XML config above, the admin on a non-systemd based host
|
||||
would need to create a cgroup named '/machine/production.partition'
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
# cd /sys/fs/cgroup
|
||||
# for i in blkio cpu,cpuacct cpuset devices freezer memory net_cls perf_event
|
||||
do
|
||||
mkdir $i/machine/production.partition
|
||||
done
|
||||
# for i in cpuset.cpus cpuset.mems
|
||||
do
|
||||
cat cpuset/machine/$i > cpuset/machine/production.partition/$i
|
||||
done
|
||||
</pre>
|
||||
|
||||
<h2><a id="resourceAPIs">Resource management APIs/commands</a></h2>
|
||||
|
||||
<p>
|
||||
Since libvirt aims to provide an API which is portable across
|
||||
hypervisors, the concept of cgroups is not exposed directly
|
||||
in the API or XML configuration. It is considered to be an
|
||||
internal implementation detail. Instead libvirt provides a
|
||||
set of APIs for applying resource controls, which are then
|
||||
mapped to corresponding cgroup tunables
|
||||
</p>
|
||||
|
||||
<h3>Scheduler tuning</h3>
|
||||
|
||||
<p>
|
||||
Parameters from the "cpu" controller are exposed via the
|
||||
<code>schedinfo</code> command in virsh.
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
# virsh schedinfo demo
|
||||
Scheduler : posix
|
||||
cpu_shares : 1024
|
||||
vcpu_period : 100000
|
||||
vcpu_quota : -1
|
||||
emulator_period: 100000
|
||||
emulator_quota : -1</pre>
|
||||
|
||||
|
||||
<h3>Block I/O tuning</h3>
|
||||
|
||||
<p>
|
||||
Parameters from the "blkio" controller are exposed via the
|
||||
<code>bkliotune</code> command in virsh.
|
||||
</p>
|
||||
|
||||
|
||||
<pre>
|
||||
# virsh blkiotune demo
|
||||
weight : 500
|
||||
device_weight : </pre>
|
||||
|
||||
<h3>Memory tuning</h3>
|
||||
|
||||
<p>
|
||||
Parameters from the "memory" controller are exposed via the
|
||||
<code>memtune</code> command in virsh.
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
# virsh memtune demo
|
||||
hard_limit : 580192
|
||||
soft_limit : unlimited
|
||||
swap_hard_limit: unlimited
|
||||
</pre>
|
||||
|
||||
<h3>Network tuning</h3>
|
||||
|
||||
<p>
|
||||
The <code>net_cls</code> is not currently used. Instead traffic
|
||||
filter policies are set directly against individual virtual
|
||||
network interfaces.
|
||||
</p>
|
||||
|
||||
<h2><a id="legacyLayout">Legacy cgroups layout</a></h2>
|
||||
|
||||
<p>
|
||||
Prior to libvirt 1.0.5, the cgroups layout created by libvirt was different
|
||||
from that described above, and did not allow for administrator customization.
|
||||
Libvirt used a fixed, 3-level hierarchy <code>libvirt/{qemu,lxc}/$VMNAME</code>
|
||||
which was rooted at the point in the hierarchy where libvirtd itself was
|
||||
located. So if libvirtd was placed at <code>/system/libvirtd.service</code>
|
||||
by systemd, the groups for each virtual machine / container would be located
|
||||
at <code>/system/libvirtd.service/libvirt/{qemu,lxc}/$VMNAME</code>. In addition
|
||||
to this, the QEMU drivers further child groups for each vCPU thread and the
|
||||
emulator thread(s). This leads to a hierarchy that looked like
|
||||
</p>
|
||||
|
||||
|
||||
<pre>
|
||||
$ROOT
|
||||
|
|
||||
+- system
|
||||
|
|
||||
+- libvirtd.service
|
||||
|
|
||||
+- libvirt
|
||||
|
|
||||
+- qemu
|
||||
| |
|
||||
| +- vm1
|
||||
| | |
|
||||
| | +- emulator
|
||||
| | +- vcpu0
|
||||
| | +- vcpu1
|
||||
| |
|
||||
| +- vm2
|
||||
| | |
|
||||
| | +- emulator
|
||||
| | +- vcpu0
|
||||
| | +- vcpu1
|
||||
| |
|
||||
| +- vm3
|
||||
| |
|
||||
| +- emulator
|
||||
| +- vcpu0
|
||||
| +- vcpu1
|
||||
|
|
||||
+- lxc
|
||||
|
|
||||
+- container1
|
||||
|
|
||||
+- container2
|
||||
|
|
||||
+- container3
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
Although current releases are much improved, historically the use of deep
|
||||
hierarchies has had a significant negative impact on the kernel scalability.
|
||||
The legacy libvirt cgroups layout highlighted these problems, to the detriment
|
||||
of the performance of virtual machines and containers.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
229
docs/ci.rst
229
docs/ci.rst
@@ -1,229 +0,0 @@
|
||||
==============================
|
||||
Libvirt Continuous Integration
|
||||
==============================
|
||||
|
||||
.. contents::
|
||||
|
||||
The libvirt project uses GitLab CI for automated testing.
|
||||
|
||||
Linux builds and cross-compiled Windows builds happen on GitLab CI's shared
|
||||
runners, while FreeBSD and macOS coverage is achieved by triggering `Cirrus CI
|
||||
<https://cirrus-ci.com/>`_ jobs behind the scenes.
|
||||
|
||||
Most of the tooling used to build CI pipelines is maintained as part of the
|
||||
`libvirt-ci <https://gitlab.com/libvirt/libvirt-ci>`_ subproject.
|
||||
|
||||
GitLab CI Dashboard
|
||||
===================
|
||||
|
||||
The dashboard below shows the current status of the GitLab CI jobs for each
|
||||
repository:
|
||||
|
||||
Core project
|
||||
------------
|
||||
|
||||
.. list-table::
|
||||
:widths: 80 20
|
||||
:header-rows: 1
|
||||
|
||||
* - Project
|
||||
- Pipeline
|
||||
|
||||
* - libvirt
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt/pipelines
|
||||
:alt: libvirt pipeline status
|
||||
|
||||
|
||||
Language bindings
|
||||
-----------------
|
||||
|
||||
.. list-table::
|
||||
:widths: 80 20
|
||||
:header-rows: 1
|
||||
|
||||
* - Project
|
||||
- Pipeline
|
||||
|
||||
* - libvirt-csharp
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-csharp/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-csharp/pipelines
|
||||
:alt: libvirt-csharp pipeline status
|
||||
|
||||
* - libvirt-go
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-go/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-go/pipelines
|
||||
:alt: libvirt-go pipeline status
|
||||
|
||||
* - libvirt-java
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-java/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-java/pipelines
|
||||
:alt: libvirt-java pipeline status
|
||||
|
||||
* - libvirt-ocaml
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-ocaml/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-ocaml/pipelines
|
||||
:alt: libvirt-ocaml pipeline status
|
||||
|
||||
* - libvirt-perl
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-perl/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-perl/pipelines
|
||||
:alt: libvirt-perl pipeline status
|
||||
|
||||
* - libvirt-php
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-php/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-php/pipelines
|
||||
:alt: libvirt-php pipeline status
|
||||
|
||||
* - libvirt-python
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-python/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-python/pipelines
|
||||
:alt: libvirt-python pipeline status
|
||||
|
||||
* - libvirt-ruby
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-ruby/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-ruby/pipelines
|
||||
:alt: libvirt-ruby pipeline status
|
||||
|
||||
* - libvirt-rust
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-rust/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-rust/pipelines
|
||||
:alt: libvirt-rust pipeline status
|
||||
|
||||
|
||||
Object mappings
|
||||
---------------
|
||||
|
||||
.. list-table::
|
||||
:widths: 80 20
|
||||
:header-rows: 1
|
||||
|
||||
* - Project
|
||||
- Pipeline
|
||||
|
||||
* - libvirt-cim
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-cim/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-cim/pipelines
|
||||
:alt: libvirt-cim pipeline status
|
||||
|
||||
* - libvirt-dbus
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-dbus/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-dbus/pipelines
|
||||
:alt: libvirt-dbus pipeline status
|
||||
|
||||
* - libvirt-glib
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-glib/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-glib/pipelines
|
||||
:alt: libvirt-glib pipeline status
|
||||
|
||||
* - libvirt-go-xml
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-go-xml/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-go-xml/pipelines
|
||||
:alt: libvirt-go-xml pipeline status
|
||||
|
||||
* - libvirt-snmp
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-snmp/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-snmp/pipelines
|
||||
:alt: libvirt-snmp pipeline status
|
||||
|
||||
|
||||
Testing
|
||||
-------
|
||||
|
||||
.. list-table::
|
||||
:widths: 80 20
|
||||
:header-rows: 1
|
||||
|
||||
* - Project
|
||||
- Pipeline
|
||||
|
||||
* - libvirt-ci
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-ci/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-ci/pipelines
|
||||
:alt: libvirt-ci pipeline status
|
||||
|
||||
* - libvirt-test-API
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-test-API/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-test-API/pipelines
|
||||
:alt: libvirt-test-API pipeline status
|
||||
|
||||
* - libvirt-tck
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-tck/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-tck/pipelines
|
||||
:alt: libvirt-tck pipeline status
|
||||
|
||||
|
||||
Documentation / websites
|
||||
------------------------
|
||||
|
||||
.. list-table::
|
||||
:widths: 80 20
|
||||
:header-rows: 1
|
||||
|
||||
* - Project
|
||||
- Pipeline
|
||||
* - libvirt-publican
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-publican/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-publican/pipelines
|
||||
:alt: libvirt-publican pipeline status
|
||||
|
||||
* - libvirt-appdev-guide-python
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-appdev-guide-python/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-appdev-guide-python/pipelines
|
||||
:alt: libvirt-appdev-guide-python pipeline status
|
||||
|
||||
* - libvirt-wiki
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-wiki/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-wiki/pipelines
|
||||
:alt: libvirt-wiki pipeline status
|
||||
|
||||
* - virttools-planet
|
||||
- .. image:: https://gitlab.com/libvirt/virttools-planet/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/virttools-planet/pipelines
|
||||
:alt: virttools-planet pipeline status
|
||||
|
||||
* - virttools-web
|
||||
- .. image:: https://gitlab.com/libvirt/virttools-web/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/virttools-web/pipelines
|
||||
:alt: virttools-web pipeline status
|
||||
|
||||
|
||||
Miscellaneous
|
||||
-------------
|
||||
|
||||
.. list-table::
|
||||
:widths: 80 20
|
||||
:header-rows: 1
|
||||
|
||||
* - Project
|
||||
- Pipeline
|
||||
|
||||
* - libvirt-console-proxy
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-console-proxy/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-console-proxy/pipelines
|
||||
:alt: libvirt-console-proxy pipeline status
|
||||
|
||||
* - libvirt-designer
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-designer/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-designer/pipelines
|
||||
:alt: libvirt-designer pipeline status
|
||||
|
||||
* - libvirt-devaddr
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-devaddr/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-devaddr/pipelines
|
||||
:alt: libvirt-devaddr pipeline status
|
||||
|
||||
* - libvirt-sandbox
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-sandbox/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-sandbox/pipelines
|
||||
:alt: libvirt-sandbox pipeline status
|
||||
|
||||
* - libvirt-sandbox-image
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-sandbox-image/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-sandbox-image/pipelines
|
||||
:alt: libvirt-sandbox-image pipeline status
|
||||
|
||||
* - libvirt-security-notice
|
||||
- .. image:: https://gitlab.com/libvirt/libvirt-security-notice/badges/master/pipeline.svg
|
||||
:target: https://gitlab.com/libvirt/libvirt-security-notice/pipelines
|
||||
:alt: libvirt-security-notice pipeline status
|
@@ -1,962 +0,0 @@
|
||||
============
|
||||
Coding style
|
||||
============
|
||||
|
||||
.. contents::
|
||||
|
||||
Naming conventions
|
||||
==================
|
||||
|
||||
When reading libvirt code, a number of different naming
|
||||
conventions will be evident due to various changes in thinking
|
||||
over the course of the project's lifetime. The conventions
|
||||
documented below should be followed when creating any entirely new
|
||||
files in libvirt. When working on existing files, while it is
|
||||
desirable to apply these conventions, keeping a consistent style
|
||||
with existing code in that particular file is generally more
|
||||
important. The overall guiding principal is that every file, enum,
|
||||
struct, function, macro and typedef name must have a 'vir' or
|
||||
'VIR' prefix. All local scope variable names are exempt, and
|
||||
global variables are exempt, unless exported in a header file.
|
||||
|
||||
File names
|
||||
File naming varies depending on the subdirectory. The preferred
|
||||
style is to have a 'vir' prefix, followed by a name which
|
||||
matches the name of the functions / objects inside the file.
|
||||
For example, a file containing an object 'virHashtable' is
|
||||
stored in files 'virhashtable.c' and 'virhashtable.h'.
|
||||
Sometimes, methods which would otherwise be declared 'static'
|
||||
need to be exported for use by a test suite. For this purpose a
|
||||
second header file should be added with a suffix of 'priv',
|
||||
e.g. 'virhashtablepriv.h'. Use of underscores in file names is
|
||||
discouraged when using the 'vir' prefix style. The 'vir' prefix
|
||||
naming applies to src/util, src/rpc and tests/ directories.
|
||||
Most other directories do not follow this convention.
|
||||
|
||||
Enum type & field names
|
||||
All enums should have a 'vir' prefix in their typedef name, and
|
||||
each following word should have its first letter in uppercase.
|
||||
The enum name should match the typedef name with a leading
|
||||
underscore. The enum member names should be in all uppercase,
|
||||
and use an underscore to separate each word. The enum member
|
||||
name prefix should match the enum typedef name.
|
||||
|
||||
::
|
||||
|
||||
typedef enum _virSocketType virSocketType;
|
||||
enum _virSocketType {
|
||||
VIR_SOCKET_TYPE_IPV4,
|
||||
VIR_SOCKET_TYPE_IPV6,
|
||||
};
|
||||
|
||||
Struct type names
|
||||
All structs should have a 'vir' prefix in their typedef name,
|
||||
and each following word should have its first letter in
|
||||
uppercase. The struct name should be the same as the typedef
|
||||
name with a leading underscore. A second typedef should be
|
||||
given for a pointer to the struct with a 'Ptr' suffix.
|
||||
|
||||
::
|
||||
|
||||
typedef struct _virHashTable virHashTable;
|
||||
typedef virHashTable *virHashTablePtr;
|
||||
struct _virHashTable {
|
||||
...
|
||||
};
|
||||
|
||||
Function names
|
||||
All functions should have a 'vir' prefix in their name,
|
||||
followed by one or more words with first letter of each word
|
||||
capitalized. Underscores should not be used in function names.
|
||||
If the function is operating on an object, then the function
|
||||
name prefix should match the object typedef name, otherwise it
|
||||
should match the filename. Following this comes the verb /
|
||||
action name, and finally an optional subject name. For example,
|
||||
given an object 'virHashTable', all functions should have a
|
||||
name 'virHashTable$VERB' or 'virHashTable$VERB$SUBJECT", e.g.
|
||||
'virHashTableLookup' or 'virHashTableGetValue'.
|
||||
|
||||
Macro names
|
||||
All macros should have a "VIR" prefix in their name, followed
|
||||
by one or more uppercase words separated by underscores. The
|
||||
macro argument names should be in lowercase. Aside from having
|
||||
a "VIR" prefix there are no common practices for the rest of
|
||||
the macro name.
|
||||
|
||||
Code indentation
|
||||
================
|
||||
|
||||
Libvirt's C source code generally adheres to some basic
|
||||
code-formatting conventions. The existing code base is not totally
|
||||
consistent on this front, but we do prefer that contributed code
|
||||
be formatted similarly. In short, use spaces-not-TABs for
|
||||
indentation, use 4 spaces for each indentation level, and other
|
||||
than that, follow the K&R style.
|
||||
|
||||
If you use Emacs, the project includes a file .dir-locals.el that
|
||||
sets up the preferred indentation. If you use vim, append the
|
||||
following to your ~/.vimrc file:
|
||||
|
||||
::
|
||||
|
||||
set nocompatible
|
||||
filetype on
|
||||
set autoindent
|
||||
set smartindent
|
||||
set cindent
|
||||
set tabstop=8
|
||||
set shiftwidth=4
|
||||
set expandtab
|
||||
set cinoptions=(0,:0,l1,t0,L3
|
||||
filetype plugin indent on
|
||||
au FileType make setlocal noexpandtab
|
||||
au BufRead,BufNewFile *.am setlocal noexpandtab
|
||||
match ErrorMsg /\s\+$\| \+\ze\t/
|
||||
|
||||
Or if you don't want to mess your ~/.vimrc up, you can save the
|
||||
above into a file called .lvimrc (not .vimrc) located at the root
|
||||
of libvirt source, then install a vim script from
|
||||
http://www.vim.org/scripts/script.php?script_id=1408, which will
|
||||
load the .lvimrc only when you edit libvirt code.
|
||||
|
||||
Code formatting (especially for new code)
|
||||
=========================================
|
||||
|
||||
With new code, we can be even more strict. Please apply the
|
||||
following function (using GNU indent) to any new code. Note that
|
||||
this also gives you an idea of the type of spacing we prefer
|
||||
around operators and keywords:
|
||||
|
||||
::
|
||||
|
||||
indent-libvirt()
|
||||
{
|
||||
indent -bad -bap -bbb -bli4 -br -ce -brs -cs -i4 -l75 -lc75 \
|
||||
-sbi4 -psl -saf -sai -saw -sbi4 -ss -sc -cdw -cli4 -npcs -nbc \
|
||||
--no-tabs "$@"
|
||||
}
|
||||
|
||||
Note that sometimes you'll have to post-process that output
|
||||
further, by piping it through ``expand -i``, since some leading
|
||||
TABs can get through. Usually they're in macro definitions or
|
||||
strings, and should be converted anyhow.
|
||||
|
||||
Libvirt requires a C99 compiler for various reasons. However, most
|
||||
of the code base prefers to stick to C89 syntax unless there is a
|
||||
compelling reason otherwise. For example, it is preferable to use
|
||||
``/* */`` comments rather than ``//``. Also, when declaring local
|
||||
variables, the prevailing style has been to declare them at the
|
||||
beginning of a scope, rather than immediately before use.
|
||||
|
||||
Bracket spacing
|
||||
---------------
|
||||
|
||||
The keywords ``if``, ``for``, ``while``, and ``switch`` must have
|
||||
a single space following them before the opening bracket. E.g.
|
||||
|
||||
::
|
||||
|
||||
if(foo) // Bad
|
||||
if (foo) // Good
|
||||
|
||||
Function implementations must **not** have any whitespace between
|
||||
the function name and the opening bracket. E.g.
|
||||
|
||||
::
|
||||
|
||||
int foo (int wizz) // Bad
|
||||
int foo(int wizz) // Good
|
||||
|
||||
Function calls must **not** have any whitespace between the
|
||||
function name and the opening bracket. E.g.
|
||||
|
||||
::
|
||||
|
||||
bar = foo (wizz); // Bad
|
||||
bar = foo(wizz); // Good
|
||||
|
||||
Function typedefs must **not** have any whitespace between the
|
||||
closing bracket of the function name and opening bracket of the
|
||||
arg list. E.g.
|
||||
|
||||
::
|
||||
|
||||
typedef int (*foo) (int wizz); // Bad
|
||||
typedef int (*foo)(int wizz); // Good
|
||||
|
||||
There must not be any whitespace immediately following any opening
|
||||
bracket, or immediately prior to any closing bracket. E.g.
|
||||
|
||||
::
|
||||
|
||||
int foo( int wizz ); // Bad
|
||||
int foo(int wizz); // Good
|
||||
|
||||
Commas
|
||||
------
|
||||
|
||||
Commas should always be followed by a space or end of line, and
|
||||
never have leading space; this is enforced during 'make
|
||||
syntax-check'.
|
||||
|
||||
::
|
||||
|
||||
call(a,b ,c);// Bad
|
||||
call(a, b, c); // Good
|
||||
|
||||
When declaring an enum or using a struct initializer that occupies
|
||||
more than one line, use a trailing comma. That way, future edits
|
||||
to extend the list only have to add a line, rather than modify an
|
||||
existing line to add the intermediate comma. Any sentinel
|
||||
enumerator value with a name ending in \_LAST is exempt, since you
|
||||
would extend such an enum before the \_LAST element. Another
|
||||
reason to favor trailing commas is that it requires less effort to
|
||||
produce via code generators. Note that the syntax checker is
|
||||
unable to enforce a style of trailing commas, so there are
|
||||
counterexamples in existing code which do not use it; also, while
|
||||
C99 allows trailing commas, remember that JSON and XDR do not.
|
||||
|
||||
::
|
||||
|
||||
enum {
|
||||
VALUE_ONE,
|
||||
VALUE_TWO // Bad
|
||||
};
|
||||
enum {
|
||||
VALUE_THREE,
|
||||
VALUE_FOUR, // Good
|
||||
};
|
||||
|
||||
Semicolons
|
||||
----------
|
||||
|
||||
Semicolons should never have a space beforehand. Inside the
|
||||
condition of a ``for`` loop, there should always be a space or
|
||||
line break after each semicolon, except for the special case of an
|
||||
infinite loop (although more infinite loops use ``while``). While
|
||||
not enforced, loop counters generally use post-increment.
|
||||
|
||||
::
|
||||
|
||||
for (i = 0 ;i < limit ; ++i) { // Bad
|
||||
for (i = 0; i < limit; i++) { // Good
|
||||
for (;;) { // ok
|
||||
while (1) { // Better
|
||||
|
||||
Empty loop bodies are better represented with curly braces and a
|
||||
comment, although use of a semicolon is not currently rejected.
|
||||
|
||||
::
|
||||
|
||||
while ((rc = waitpid(pid, &st, 0) == -1) &&
|
||||
errno == EINTR); // ok
|
||||
while ((rc = waitpid(pid, &st, 0) == -1) &&
|
||||
errno == EINTR) { // Better
|
||||
/* nothing */
|
||||
}
|
||||
|
||||
Curly braces
|
||||
------------
|
||||
|
||||
Omit the curly braces around an ``if``, ``while``, ``for`` etc.
|
||||
body only when both that body and the condition itself occupy a
|
||||
single line. In every other case we require the braces. This
|
||||
ensures that it is trivially easy to identify a
|
||||
single-\ *statement* loop: each has only one *line* in its body.
|
||||
|
||||
::
|
||||
|
||||
while (expr) // single line body; {} is forbidden
|
||||
single_line_stmt();
|
||||
|
||||
::
|
||||
|
||||
while (expr(arg1,
|
||||
arg2)) // indentation makes it obvious it is single line,
|
||||
single_line_stmt(); // {} is optional (not enforced either way)
|
||||
|
||||
::
|
||||
|
||||
while (expr1 &&
|
||||
expr2) { // multi-line, at same indentation, {} required
|
||||
single_line_stmt();
|
||||
}
|
||||
|
||||
However, the moment your loop/if/else body extends on to a second
|
||||
line, for whatever reason (even if it's just an added comment),
|
||||
then you should add braces. Otherwise, it would be too easy to
|
||||
insert a statement just before that comment (without adding
|
||||
braces), thinking it is already a multi-statement loop:
|
||||
|
||||
::
|
||||
|
||||
while (true) // BAD! multi-line body with no braces
|
||||
/* comment... */
|
||||
single_line_stmt();
|
||||
|
||||
Do this instead:
|
||||
|
||||
::
|
||||
|
||||
while (true) { // Always put braces around a multi-line body.
|
||||
/* comment... */
|
||||
single_line_stmt();
|
||||
}
|
||||
|
||||
There is one exception: when the second body line is not at the
|
||||
same indentation level as the first body line:
|
||||
|
||||
::
|
||||
|
||||
if (expr)
|
||||
die("a diagnostic that would make this line"
|
||||
" extend past the 80-column limit"));
|
||||
|
||||
It is safe to omit the braces in the code above, since the
|
||||
further-indented second body line makes it obvious that this is
|
||||
still a single-statement body.
|
||||
|
||||
To reiterate, don't do this:
|
||||
|
||||
::
|
||||
|
||||
if (expr) // BAD: no braces around...
|
||||
while (expr_2) { // ... a multi-line body
|
||||
...
|
||||
}
|
||||
|
||||
Do this, instead:
|
||||
|
||||
::
|
||||
|
||||
if (expr) {
|
||||
while (expr_2) {
|
||||
...
|
||||
}
|
||||
}
|
||||
|
||||
However, there is one exception in the other direction, when even
|
||||
a one-line block should have braces. That occurs when that
|
||||
one-line, brace-less block is an ``if`` or ``else`` block, and the
|
||||
counterpart block **does** use braces. In that case, put braces
|
||||
around both blocks. Also, if the ``else`` block is much shorter
|
||||
than the ``if`` block, consider negating the ``if``-condition and
|
||||
swapping the bodies, putting the short block first and making the
|
||||
longer, multi-line block be the ``else`` block.
|
||||
|
||||
::
|
||||
|
||||
if (expr) {
|
||||
...
|
||||
...
|
||||
}
|
||||
else
|
||||
x = y; // BAD: braceless "else" with braced "then",
|
||||
// and short block last
|
||||
|
||||
if (expr)
|
||||
x = y; // BAD: braceless "if" with braced "else"
|
||||
else {
|
||||
...
|
||||
...
|
||||
}
|
||||
|
||||
Keeping braces consistent and putting the short block first is
|
||||
preferred, especially when the multi-line body is more than a few
|
||||
lines long, because it is easier to read and grasp the semantics
|
||||
of an if-then-else block when the simpler block occurs first,
|
||||
rather than after the more involved block:
|
||||
|
||||
::
|
||||
|
||||
if (!expr) {
|
||||
x = y; // putting the smaller block first is more readable
|
||||
} else {
|
||||
...
|
||||
...
|
||||
}
|
||||
|
||||
But if negating a complex condition is too ugly, then at least add
|
||||
braces:
|
||||
|
||||
::
|
||||
|
||||
if (complex expr not worth negating) {
|
||||
...
|
||||
...
|
||||
} else {
|
||||
x = y;
|
||||
}
|
||||
|
||||
Use hanging braces for compound statements: the opening brace of a
|
||||
compound statement should be on the same line as the condition
|
||||
being tested. Only top-level function bodies, nested scopes, and
|
||||
compound structure declarations should ever have { on a line by
|
||||
itself.
|
||||
|
||||
::
|
||||
|
||||
void
|
||||
foo(int a, int b)
|
||||
{ // correct - function body
|
||||
int 2d[][] = {
|
||||
{ // correct - complex initialization
|
||||
1, 2,
|
||||
},
|
||||
};
|
||||
if (a)
|
||||
{ // BAD: compound brace on its own line
|
||||
do_stuff();
|
||||
}
|
||||
{ // correct - nested scope
|
||||
int tmp;
|
||||
if (a < b) { // correct - hanging brace
|
||||
tmp = b;
|
||||
b = a;
|
||||
a = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Conditional expressions
|
||||
-----------------------
|
||||
|
||||
For readability reasons new code should avoid shortening
|
||||
comparisons to 0 for numeric types. Boolean and pointer
|
||||
comparisions may be shortened. All long forms are okay:
|
||||
|
||||
::
|
||||
|
||||
virFooPtr foos = NULL;
|
||||
size nfoos = 0;
|
||||
bool hasFoos = false;
|
||||
|
||||
GOOD:
|
||||
if (!foos)
|
||||
if (!hasFoos)
|
||||
if (nfoos == 0)
|
||||
if (foos == NULL)
|
||||
if (hasFoos == true)
|
||||
|
||||
BAD:
|
||||
if (!nfoos)
|
||||
if (nfoos)
|
||||
|
||||
New code should avoid the ternary operator as much as possible.
|
||||
Specifically it must never span more than one line or nest:
|
||||
|
||||
::
|
||||
|
||||
BAD:
|
||||
char *foo = baz ?
|
||||
virDoSomethingReallyComplex(driver, vm, something, baz->foo) :
|
||||
NULL;
|
||||
|
||||
char *foo = bar ? bar->baz ? bar->baz->foo : "nobaz" : "nobar";
|
||||
|
||||
Preprocessor
|
||||
------------
|
||||
|
||||
Macros defined with an ALL_CAPS name should generally be assumed
|
||||
to be unsafe with regards to arguments with side-effects (that is,
|
||||
MAX(a++, b--) might increment a or decrement b too many or too few
|
||||
times). Exceptions to this rule are explicitly documented for
|
||||
macros in viralloc.h and virstring.h.
|
||||
|
||||
For variadic macros, stick with C99 syntax:
|
||||
|
||||
::
|
||||
|
||||
#define vshPrint(_ctl, ...) fprintf(stdout, __VA_ARGS__)
|
||||
|
||||
Use parenthesis when checking if a macro is defined, and use
|
||||
indentation to track nesting:
|
||||
|
||||
::
|
||||
|
||||
#if defined(HAVE_POSIX_FALLOCATE) && !defined(HAVE_FALLOCATE)
|
||||
# define fallocate(a, ignored, b, c) posix_fallocate(a, b, c)
|
||||
#endif
|
||||
|
||||
C types
|
||||
-------
|
||||
|
||||
Use the right type.
|
||||
|
||||
Scalars
|
||||
~~~~~~~
|
||||
|
||||
- If you're using ``int`` or ``long``, odds are good that there's
|
||||
a better type.
|
||||
- If a variable is counting something, be sure to declare it with
|
||||
an unsigned type.
|
||||
- If it's memory-size-related, use ``size_t`` (use ``ssize_t``
|
||||
only if required).
|
||||
- If it's file-size related, use uintmax_t, or maybe ``off_t``.
|
||||
- If it's file-offset related (i.e., signed), use ``off_t``.
|
||||
- If it's just counting small numbers use ``unsigned int``; (on
|
||||
all but oddball embedded systems, you can assume that that type
|
||||
is at least four bytes wide).
|
||||
- If a variable has boolean semantics, give it the ``bool`` type
|
||||
and use the corresponding ``true`` and ``false`` macros.
|
||||
- In the unusual event that you require a specific width, use a
|
||||
standard type like ``int32_t``, ``uint32_t``, ``uint64_t``,
|
||||
etc.
|
||||
- While using ``bool`` is good for readability, it comes with
|
||||
minor caveats:
|
||||
|
||||
- Don't use ``bool`` in places where the type size must be
|
||||
constant across all systems, like public interfaces and
|
||||
on-the-wire protocols. Note that it would be possible
|
||||
(albeit wasteful) to use ``bool`` in libvirt's logical wire
|
||||
protocol, since XDR maps that to its lower-level ``bool_t``
|
||||
type, which **is** fixed-size.
|
||||
- Don't compare a bool variable against the literal, ``true``,
|
||||
since a value with a logical non-false value need not be
|
||||
``1``. I.e., don't write ``if (seen == true) ...``. Rather,
|
||||
write ``if (seen)...``.
|
||||
|
||||
Of course, take all of the above with a grain of salt. If you're
|
||||
about to use some system interface that requires a type like
|
||||
``size_t``, ``pid_t`` or ``off_t``, use matching types for any
|
||||
corresponding variables.
|
||||
|
||||
Also, if you try to use e.g., ``unsigned int`` as a type, and that
|
||||
conflicts with the signedness of a related variable, sometimes
|
||||
it's best just to use the **wrong** type, if *pulling the thread*
|
||||
and fixing all related variables would be too invasive.
|
||||
|
||||
Finally, while using descriptive types is important, be careful
|
||||
not to go overboard. If whatever you're doing causes warnings, or
|
||||
requires casts, then reconsider or ask for help.
|
||||
|
||||
Pointers
|
||||
~~~~~~~~
|
||||
|
||||
Ensure that all of your pointers are *const-correct*. Unless a
|
||||
pointer is used to modify the pointed-to storage, give it the
|
||||
``const`` attribute. That way, the reader knows up-front that this
|
||||
is a read-only pointer. Perhaps more importantly, if we're
|
||||
diligent about this, when you see a non-const pointer, you're
|
||||
guaranteed that it is used to modify the storage it points to, or
|
||||
it is aliased to another pointer that is.
|
||||
|
||||
Defining Local Variables
|
||||
------------------------
|
||||
|
||||
Always define local variables at the top of the block in which they
|
||||
are used (before any pure code). Although modern C compilers allow
|
||||
defining a local variable in the middle of a block of code, this
|
||||
practice can lead to bugs, and must be avoided in all libvirt
|
||||
code. As indicated in these examples, it is okay to initialize
|
||||
variables where they are defined, even if the initialization involves
|
||||
calling another function.
|
||||
|
||||
::
|
||||
|
||||
GOOD:
|
||||
int
|
||||
bob(char *loblaw)
|
||||
{
|
||||
int x;
|
||||
int y = lawBlog();
|
||||
char *z = NULL;
|
||||
|
||||
x = y + 20;
|
||||
...
|
||||
}
|
||||
|
||||
BAD:
|
||||
int
|
||||
bob(char *loblaw)
|
||||
{
|
||||
int x;
|
||||
int y = lawBlog();
|
||||
|
||||
x = y + 20;
|
||||
|
||||
char *z = NULL; // <===
|
||||
...
|
||||
}
|
||||
|
||||
Attribute annotations
|
||||
---------------------
|
||||
|
||||
Use the following annotations to help the compiler and/or static
|
||||
analysis tools understand the code better:
|
||||
|
||||
``ATTRIBUTE_NONNULL``
|
||||
passing NULL for this parameter is not allowed
|
||||
|
||||
``ATTRIBUTE_PACKED``
|
||||
force a structure to be packed
|
||||
|
||||
``G_GNUC_FALLTHROUGH``
|
||||
allow code reuse by multiple switch cases
|
||||
|
||||
``G_GNUC_NO_INLINE``
|
||||
the function is mocked in the test suite
|
||||
|
||||
``G_GNUC_NORETURN``
|
||||
the function never returns
|
||||
|
||||
``G_GNUC_NULL_TERMINATED``
|
||||
last parameter must be NULL
|
||||
|
||||
``G_GNUC_PRINTF``
|
||||
validate that the formatting string matches parameters
|
||||
|
||||
``G_GNUC_UNUSED``
|
||||
parameter is unused in this implementation of the function
|
||||
|
||||
``G_GNUC_WARN_UNUSED_RESULT``
|
||||
the return value must be checked
|
||||
|
||||
File handling
|
||||
-------------
|
||||
|
||||
Usage of the ``fdopen()``, ``close()``, ``fclose()`` APIs is
|
||||
deprecated in libvirt code base to help avoiding double-closing of
|
||||
files or file descriptors, which is particularly dangerous in a
|
||||
multi-threaded application. Instead of these APIs, use the macros
|
||||
from virfile.h
|
||||
|
||||
- Open a file from a file descriptor:
|
||||
|
||||
::
|
||||
|
||||
if ((file = VIR_FDOPEN(fd, "r")) == NULL) {
|
||||
virReportSystemError(errno, "%s",
|
||||
_("failed to open file from file descriptor"));
|
||||
return -1;
|
||||
}
|
||||
/* fd is now invalid; only access the file using file variable */
|
||||
|
||||
- Close a file descriptor:
|
||||
|
||||
::
|
||||
|
||||
if (VIR_CLOSE(fd) < 0) {
|
||||
virReportSystemError(errno, "%s", _("failed to close file"));
|
||||
}
|
||||
|
||||
- Close a file:
|
||||
|
||||
::
|
||||
|
||||
if (VIR_FCLOSE(file) < 0) {
|
||||
virReportSystemError(errno, "%s", _("failed to close file"));
|
||||
}
|
||||
|
||||
- Close a file or file descriptor in an error path, without
|
||||
losing the previous ``errno`` value:
|
||||
|
||||
::
|
||||
|
||||
VIR_FORCE_CLOSE(fd);
|
||||
VIR_FORCE_FCLOSE(file);
|
||||
|
||||
String comparisons
|
||||
------------------
|
||||
|
||||
Do not use the strcmp, strncmp, etc functions directly. Instead
|
||||
use one of the following semantically named macros
|
||||
|
||||
- For strict equality:
|
||||
|
||||
::
|
||||
|
||||
STREQ(a,b)
|
||||
STRNEQ(a,b)
|
||||
|
||||
- For case insensitive equality:
|
||||
|
||||
::
|
||||
|
||||
STRCASEEQ(a,b)
|
||||
STRCASENEQ(a,b)
|
||||
|
||||
- For strict equality of a substring:
|
||||
|
||||
::
|
||||
|
||||
STREQLEN(a,b,n)
|
||||
STRNEQLEN(a,b,n)
|
||||
|
||||
- For case insensitive equality of a substring:
|
||||
|
||||
::
|
||||
|
||||
STRCASEEQLEN(a,b,n)
|
||||
STRCASENEQLEN(a,b,n)
|
||||
|
||||
- For strict equality of a prefix:
|
||||
|
||||
::
|
||||
|
||||
STRPREFIX(a,b)
|
||||
|
||||
- To avoid having to check if a or b are NULL:
|
||||
|
||||
::
|
||||
|
||||
STREQ_NULLABLE(a, b)
|
||||
STRNEQ_NULLABLE(a, b)
|
||||
|
||||
String copying
|
||||
--------------
|
||||
|
||||
Do not use the strncpy function. According to the man page, it
|
||||
does **not** guarantee a NULL-terminated buffer, which makes it
|
||||
extremely dangerous to use. Instead, use one of the replacement
|
||||
functions provided by libvirt:
|
||||
|
||||
::
|
||||
|
||||
virStrncpy(char *dest, const char *src, size_t n, size_t destbytes)
|
||||
|
||||
The first two arguments have the same meaning as for strncpy,
|
||||
namely the destination and source of the copy operation. Unlike
|
||||
strncpy, the function will always copy exactly the number of bytes
|
||||
requested and make sure the destination is NULL-terminated, as the
|
||||
source is required to be; sanity checks are performed to ensure
|
||||
the size of the destination, as specified by the last argument, is
|
||||
sufficient for the operation to succeed. On success, 0 is
|
||||
returned; on failure, a value <0 is returned instead.
|
||||
|
||||
::
|
||||
|
||||
virStrcpy(char *dest, const char *src, size_t destbytes)
|
||||
|
||||
Use this variant if you know you want to copy the entire src
|
||||
string into dest.
|
||||
|
||||
::
|
||||
|
||||
virStrcpyStatic(char *dest, const char *src)
|
||||
|
||||
Use this variant if you know you want to copy the entire src
|
||||
string into dest **and** you know that your destination string is
|
||||
a static string (i.e. that sizeof(dest) returns something
|
||||
meaningful). Note that this is a macro, so arguments could be
|
||||
evaluated more than once.
|
||||
|
||||
::
|
||||
|
||||
dst = g_strdup(src);
|
||||
dst = g_strndup(src, n);
|
||||
|
||||
You should avoid using strdup or strndup directly as they do not
|
||||
handle out-of-memory errors, and do not allow a NULL source. Use
|
||||
``g_strdup`` and ``g_strndup`` from GLib which abort on OOM and
|
||||
handle NULL source by returning NULL.
|
||||
|
||||
Variable length string buffer
|
||||
-----------------------------
|
||||
|
||||
If there is a need for complex string concatenations, avoid using
|
||||
the usual sequence of malloc/strcpy/strcat/snprintf functions and
|
||||
make use of either the
|
||||
`GString <https://developer.gnome.org/glib/stable/glib-Strings.html>`__
|
||||
type from GLib or the virBuffer API. If formatting XML or QEMU
|
||||
command line is needed, use the virBuffer API described in
|
||||
virbuffer.h, since it has helper functions for those.
|
||||
|
||||
Typical usage is as follows:
|
||||
|
||||
::
|
||||
|
||||
char *
|
||||
somefunction(...)
|
||||
{
|
||||
g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
...
|
||||
|
||||
virBufferAddLit(&buf, "<domain>\n");
|
||||
|
||||
...
|
||||
|
||||
if (some_error)
|
||||
return NULL; /* g_auto will free the memory used so far */
|
||||
|
||||
...
|
||||
|
||||
virBufferAddLit(&buf, "</domain>\n");
|
||||
|
||||
...
|
||||
|
||||
if (virBufferCheckError(&buf) < 0)
|
||||
return NULL;
|
||||
|
||||
return virBufferContentAndReset(&buf);
|
||||
}
|
||||
|
||||
Include files
|
||||
-------------
|
||||
|
||||
There are now quite a large number of include files, both libvirt
|
||||
internal and external, and system includes. To manage all this
|
||||
complexity it's best to stick to the following general plan for
|
||||
all \*.c source files:
|
||||
|
||||
::
|
||||
|
||||
/*
|
||||
* Copyright notice
|
||||
* ....
|
||||
* ....
|
||||
* ....
|
||||
*
|
||||
*/
|
||||
|
||||
#include <config.h> Must come first in every file.
|
||||
|
||||
#include <stdio.h> Any system includes you need.
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
|
||||
#if WITH_NUMACTL Some system includes aren't supported
|
||||
# include <numa.h> everywhere so need these #if guards.
|
||||
#endif
|
||||
|
||||
#include "internal.h" Include this first, after system includes.
|
||||
|
||||
#include "util.h" Any libvirt internal header files.
|
||||
#include "buf.h"
|
||||
|
||||
static int
|
||||
myInternalFunc() The actual code.
|
||||
{
|
||||
...
|
||||
|
||||
Of particular note: **Do not** include libvirt/libvirt.h,
|
||||
libvirt/virterror.h, libvirt/libvirt-qemu.h, or
|
||||
libvirt/libvirt-lxc.h. They are included by "internal.h" already
|
||||
and there are some special reasons why you cannot include these
|
||||
files explicitly. One of the special cases, "libvirt/libvirt.h" is
|
||||
included prior to "internal.h" in "remote_protocol.x", to avoid
|
||||
exposing \*_LAST enum elements.
|
||||
|
||||
Printf-style functions
|
||||
----------------------
|
||||
|
||||
Whenever you add a new printf-style function, i.e., one with a
|
||||
format string argument and following "..." in its prototype, be
|
||||
sure to use gcc's printf attribute directive in the prototype. For
|
||||
example, here's the one for virCommandAddEnvFormat in
|
||||
vircommand.h:
|
||||
|
||||
::
|
||||
|
||||
void virCommandAddEnvFormat(virCommandPtr cmd, const char *format, ...)
|
||||
G_GNUC_PRINTF(2, 3);
|
||||
|
||||
This makes it so gcc's -Wformat and -Wformat-security options can
|
||||
do their jobs and cross-check format strings with the number and
|
||||
types of arguments.
|
||||
|
||||
When printing to a string, consider using GString or virBuffer for
|
||||
incremental allocations, g_strdup_printf for a one-shot
|
||||
allocation, and g_snprintf for fixed-width buffers. Only use
|
||||
g_sprintf, if you can prove the buffer won't overflow.
|
||||
|
||||
Error message format
|
||||
--------------------
|
||||
|
||||
Error messages visible to the user should be short and
|
||||
descriptive. All error messages are translated using gettext and
|
||||
thus must be wrapped in ``_()`` macro. To simplify the translation
|
||||
work, the error message must not be concatenated from various
|
||||
parts. To simplify searching for the error message in the code the
|
||||
strings should not be broken even if they result into a line
|
||||
longer than 80 columns and any formatting modifier should be
|
||||
enclosed by quotes or other obvious separator. If a string used
|
||||
with ``%s`` can be NULL the NULLSTR macro must be used.
|
||||
|
||||
::
|
||||
|
||||
GOOD: virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Failed to connect to remote host '%s'"), hostname)
|
||||
|
||||
BAD: virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Failed to %s to remote host '%s'"),
|
||||
"connect", hostname);
|
||||
|
||||
BAD: virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Failed to connect "
|
||||
"to remote host '%s'),
|
||||
hostname);
|
||||
|
||||
Use of goto
|
||||
-----------
|
||||
|
||||
The use of goto is not forbidden, and goto is widely used
|
||||
throughout libvirt. While the uncontrolled use of goto will
|
||||
quickly lead to unmaintainable code, there is a place for it in
|
||||
well structured code where its use increases readability and
|
||||
maintainability. In general, if goto is used for error recovery,
|
||||
it's likely to be ok, otherwise, be cautious or avoid it all
|
||||
together.
|
||||
|
||||
The typical use of goto is to jump to cleanup code in the case of
|
||||
a long list of actions, any of which may fail and cause the entire
|
||||
operation to fail. In this case, a function will have a single
|
||||
label at the end of the function. It's almost always ok to use
|
||||
this style. In particular, if the cleanup code only involves
|
||||
free'ing memory, then having multiple labels is overkill. g_free()
|
||||
and most of the functions named XXXFree() in libvirt is required
|
||||
to handle NULL as its arg. This does not apply to libvirt's public
|
||||
APIs. Thus you can safely call free on all the variables even if
|
||||
they were not yet allocated (yes they have to have been
|
||||
initialized to NULL). This is much simpler and clearer than having
|
||||
multiple labels. Note that most of libvirt's type declarations can
|
||||
be marked with either ``g_autofree`` or ``g_autoptr`` which uses
|
||||
the compiler's ``__attribute__((cleanup))`` that calls the
|
||||
appropriate free function when the variable goes out of scope.
|
||||
|
||||
There are a couple of signs that a particular use of goto is not
|
||||
ok:
|
||||
|
||||
- You're using multiple labels. If you find yourself using
|
||||
multiple labels, you're strongly encouraged to rework your code
|
||||
to eliminate all but one of them.
|
||||
- The goto jumps back up to a point above the current line of
|
||||
code being executed. Please use some combination of looping
|
||||
constructs to re-execute code instead; it's almost certainly
|
||||
going to be more understandable by others. One well-known
|
||||
exception to this rule is restarting an i/o operation following
|
||||
EINTR.
|
||||
- The goto jumps down to an arbitrary place in the middle of a
|
||||
function followed by further potentially failing calls. You
|
||||
should almost certainly be using a conditional and a block
|
||||
instead of a goto. Perhaps some of your function's logic would
|
||||
be better pulled out into a helper function.
|
||||
|
||||
Although libvirt does not encourage the Linux kernel wind/unwind
|
||||
style of multiple labels, there's a good general discussion of the
|
||||
issue archived at
|
||||
`KernelTrap <http://kerneltrap.org/node/553/2131>`__
|
||||
|
||||
When using goto, please use one of these standard labels if it
|
||||
makes sense:
|
||||
|
||||
::
|
||||
|
||||
error: A path only taken upon return with an error code
|
||||
cleanup: A path taken upon return with success code + optional error
|
||||
no_memory: A path only taken upon return with an OOM error code
|
||||
retry: If needing to jump upwards (e.g., retry on EINTR)
|
||||
|
||||
Top-level labels should be indented by one space (putting them on
|
||||
the beginning of the line confuses function context detection in
|
||||
git):
|
||||
|
||||
::
|
||||
|
||||
int foo()
|
||||
{
|
||||
/* ... do stuff ... */
|
||||
cleanup:
|
||||
/* ... do other stuff ... */
|
||||
}
|
@@ -1,33 +0,0 @@
|
||||
====================
|
||||
Committer guidelines
|
||||
====================
|
||||
|
||||
The AUTHORS files indicates the list of people with commit access
|
||||
right who can actually merge the patches.
|
||||
|
||||
The general rule for committing a patch is to make sure it has
|
||||
been reviewed properly in the mailing-list first, usually if a
|
||||
couple of people gave an ACK or +1 to a patch and nobody raised an
|
||||
objection on the list it should be good to go. If the patch
|
||||
touches a part of the code where you're not the main maintainer,
|
||||
or where you do not have a very clear idea of how things work,
|
||||
it's better to wait for a more authoritative feedback though.
|
||||
Before committing, please also rebuild locally, run 'make check
|
||||
syntax-check', and make sure you don't raise errors.
|
||||
|
||||
An exception to 'review and approval on the list first' is fixing
|
||||
failures to build:
|
||||
|
||||
- if a recently committed patch breaks compilation on a platform
|
||||
or for a given driver, then it's fine to commit a minimal fix
|
||||
directly without getting the review feedback first
|
||||
- if make check or make syntax-check breaks, if there is an
|
||||
obvious fix, it's fine to commit immediately. The patch should
|
||||
still be sent to the list (or tell what the fix was if
|
||||
trivial), and 'make check syntax-check' should pass too, before
|
||||
committing anything
|
||||
- fixes for documentation and code comments can be managed in the
|
||||
same way, but still make sure they get reviewed if non-trivial.
|
||||
- (ir)regular pulls from other repositories or automated updates,
|
||||
such as the keycodemap submodule updates, pulling in new
|
||||
translations or updating the container images for the CI system
|
@@ -1,119 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<body>
|
||||
<h1><a id="installation">libvirt Installation</a></h1>
|
||||
|
||||
<ul id="toc"></ul>
|
||||
|
||||
<h2><a id="compiling">Compiling a release tarball</a></h2>
|
||||
|
||||
<p>
|
||||
libvirt uses the standard configure/make/install steps and mandates
|
||||
that the build directory is different that the source directory:
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
$ xz -c libvirt-x.x.x.tar.xz | tar xvf -
|
||||
$ cd libvirt-x.x.x
|
||||
$ mkdir build && cd build
|
||||
$ ../configure</pre>
|
||||
|
||||
<p>
|
||||
The <i>configure</i> script can be given options to change its default
|
||||
behaviour.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
To get the complete list of the options it can take, pass it the
|
||||
<i>--help</i> option like this:
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
$ ../configure <i>--help</i></pre>
|
||||
|
||||
<p>
|
||||
When you have determined which options you want to use (if any),
|
||||
continue the process.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Note the use of <b>sudo</b> with the <i>make install</i> command
|
||||
below. Using sudo is only required when installing to a location your
|
||||
user does not have write access to. Installing to a system location
|
||||
is a good example of this.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you are installing to a location that your user <i>does</i> have write
|
||||
access to, then you can instead run the <i>make install</i> command
|
||||
without putting <b>sudo</b> before it.
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
$ ../configure <i>[possible options]</i>
|
||||
$ make
|
||||
$ <b>sudo</b> <i>make install</i></pre>
|
||||
|
||||
<p>
|
||||
At this point you <b>may</b> have to run ldconfig or a similar utility
|
||||
to update your list of installed shared libs.
|
||||
</p>
|
||||
|
||||
<h2><a id="building">Building from a GIT checkout</a></h2>
|
||||
|
||||
<p>
|
||||
The libvirt build process uses GNU autotools, so after obtaining a
|
||||
checkout it is necessary to generate the configure script and Makefile.in
|
||||
templates using the <code>autogen.sh</code> command. By default when
|
||||
the <code>configure</code> script is run from within a GIT checkout, it
|
||||
will turn on -Werror for builds. This can be disabled with
|
||||
--disable-werror, but this is not recommended.
|
||||
</p>
|
||||
|
||||
<p>To build & install libvirt to your home
|
||||
directory the following commands can be run:
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
$ mkdir build && cd build
|
||||
$ ../autogen.sh --prefix=$HOME/usr
|
||||
$ make
|
||||
$ <b>sudo</b> make install</pre>
|
||||
|
||||
<p>
|
||||
Be aware though, that binaries built with a custom prefix will not
|
||||
interoperate with OS vendor provided binaries, since the UNIX socket
|
||||
paths will all be different. To produce a build that is compatible
|
||||
with normal OS vendor prefixes, use
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
$ mkdir build && cd build
|
||||
$ ../autogen.sh --system
|
||||
$ make
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
When doing this for day-to-day development purposes, it is recommended
|
||||
not to install over the OS vendor provided binaries. Instead simply
|
||||
run libvirt directly from the source tree. For example to run
|
||||
a privileged libvirtd instance
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
$ su -
|
||||
# service libvirtd stop (or systemctl stop libvirtd.service)
|
||||
# /home/to/your/checkout/src/libvirtd
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
It is also possible to run virsh directly from the source tree
|
||||
using the ./run script (which sets some environment variables):
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
$ ./run ./tools/virsh ....
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
@@ -1,116 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<body>
|
||||
<h1>Contacting the project contributors</h1>
|
||||
|
||||
<ul id="toc"></ul>
|
||||
|
||||
<h2><a id="security">Security Issues</a></h2>
|
||||
|
||||
<p>
|
||||
If you think that an issue with libvirt may have security
|
||||
implications, <strong>please do not</strong> publicly
|
||||
report it in the bug tracker, mailing lists, or irc. Libvirt
|
||||
has <a href="securityprocess.html">a dedicated process for handling (potential) security issues</a>
|
||||
that should be used instead. So if your issue has security
|
||||
implications, ignore the rest of this page and follow the
|
||||
<a href="securityprocess.html">security process</a> instead.
|
||||
</p>
|
||||
|
||||
<h2><a id="email">Mailing lists</a></h2>
|
||||
|
||||
<p>
|
||||
There are three mailing-lists:
|
||||
</p>
|
||||
|
||||
<dl class="mail">
|
||||
<dt><a href="https://www.redhat.com/mailman/listinfo/libvir-list">libvir-list@redhat.com</a> (for development)</dt>
|
||||
<dd>
|
||||
Archives at <a href="https://www.redhat.com/archives/libvir-list">https://www.redhat.com/archives/libvir-list</a>
|
||||
</dd>
|
||||
<dd>
|
||||
This is a high volume mailing list. It is a place for discussions
|
||||
about the <strong>development</strong> of libvirt.
|
||||
</dd>
|
||||
<dd>
|
||||
Topics for discussion include:
|
||||
<ul>
|
||||
<li>New features for libvirt</li>
|
||||
<li>Bug fixing of libvirt</li>
|
||||
<li>New hypervisor drivers</li>
|
||||
<li>Development of language bindings for libvirt API</li>
|
||||
<li>Testing and documentation of libvirt</li>
|
||||
</ul>
|
||||
</dd>
|
||||
|
||||
<dt><a href="https://www.redhat.com/mailman/listinfo/libvirt-users">libvirt-users@redhat.com</a> (for users)</dt>
|
||||
<dd>
|
||||
Archives at <a href="https://www.redhat.com/archives/libvirt-users">https://www.redhat.com/archives/libvirt-users</a>
|
||||
</dd>
|
||||
<dd>
|
||||
This is a moderate volume mailing list. It is a place for discussions
|
||||
involving libvirt <strong>users</strong>.
|
||||
</dd>
|
||||
<dd>
|
||||
Topics for discussion include:
|
||||
<ul>
|
||||
<li>Usage of libvirt / virsh</li>
|
||||
<li>Administration of libvirt</li>
|
||||
<li>Deployment of libvirt with hypervisors</li>
|
||||
<li>Development of applications on top of / using the libvirt API(s)</li>
|
||||
<li>Any other topics along these lines</li>
|
||||
</ul>
|
||||
</dd>
|
||||
|
||||
<dt><a href="https://www.redhat.com/mailman/listinfo/libvirt-announce">libvirt-announce@redhat.com</a> (for release notices)</dt>
|
||||
<dd>
|
||||
Archives at <a href="https://www.redhat.com/archives/libvirt-announce">https://www.redhat.com/archives/libvirt-announce</a>
|
||||
</dd>
|
||||
<dd>
|
||||
This is a low volume mailing list, with restricted posting, for
|
||||
announcements of new libvirt releases.
|
||||
</dd>
|
||||
<dd>
|
||||
Subscribe to just this if you want to be notified of new releases,
|
||||
without subscribing to either of the other mailing lists.
|
||||
</dd>
|
||||
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
It is recommended but not required that you subscribe before posting
|
||||
to the user and development lists. Posts from non-subscribers will be
|
||||
subject to manual moderation delays. You can subscribe at the linked
|
||||
web pages above.
|
||||
</p>
|
||||
<p>
|
||||
Patches with explanations and provided as attachments are really
|
||||
appreciated, and should be directed to the development mailing list
|
||||
for review and discussion.
|
||||
Wherever possible, please generate the patches by using
|
||||
<code>git format-patch</code> in a git repository clone. Further
|
||||
useful information regarding developing libvirt and/or contributing is
|
||||
available on our <a href="hacking.html">Contributor Guidelines</a>
|
||||
page.
|
||||
</p>
|
||||
|
||||
<h2><a id="irc">IRC discussion</a></h2>
|
||||
|
||||
<p>
|
||||
Some of the libvirt developers may be found on IRC on the <a href="http://oftc.net">OFTC IRC</a>
|
||||
network. Use the settings:
|
||||
</p>
|
||||
<ul>
|
||||
<li>server: irc.oftc.net</li>
|
||||
<li>port: 6667 (the usual IRC port)</li>
|
||||
<li>channel: #virt</li>
|
||||
</ul>
|
||||
<p>
|
||||
NB There is no guarantee that someone will be watching or able to reply
|
||||
promptly, so use the mailing-list if you don't get an answer on the IRC
|
||||
channel.
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -1,142 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<body>
|
||||
<h1>Contributing to libvirt</h1>
|
||||
|
||||
<p>
|
||||
This page provides guidance on how to contribute to the
|
||||
libvirt project
|
||||
</p>
|
||||
|
||||
<ul id="toc"></ul>
|
||||
|
||||
<h2><a id="skills">Contributions required</a></h2>
|
||||
|
||||
<p>
|
||||
The libvirt project is always looking for new contributors to
|
||||
participate in ongoing activities. While code development is a
|
||||
major part of the project, assistance is needed in many other
|
||||
areas including documentation writing, bug triage, testing,
|
||||
application integration, website / wiki content management,
|
||||
translation, branding, social media and more. The only
|
||||
requirement is an interest in virtualization and desire to
|
||||
help.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The following is a non-exhaustive list of areas in which
|
||||
people can contribute to libvirt. If you have ideas for
|
||||
other contributions feel free to follow them.
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li><strong>Software development</strong>. The core library / daemon (and
|
||||
thus the bulk of coding) is written in C, but there are
|
||||
language bindings written in Python, Perl, Java, Ruby,
|
||||
Php, OCaml and Go. There are also higher level wrappers
|
||||
mapping libvirt into other object frameworks, such GLib,
|
||||
CIM and SNMP. For those interested in working on the core parts of
|
||||
libvirt, the <a href="hacking.html">contributor guidelines</a> are
|
||||
mandatory reading</li>
|
||||
<li><strong>Translation</strong>. All the libvirt modules aim to support
|
||||
translations where appropriate. All translation is
|
||||
handling outside of the normal libvirt review process,
|
||||
using the <a href="https://translate.fedoraproject.org/projects/libvirt/libvirt">Fedora
|
||||
instance</a> of the Weblate tool. Thus people wishing
|
||||
to contribute to translation should join the Fedora
|
||||
translation team</li>
|
||||
<li><strong>Documentation</strong>. There are docbook guides on various
|
||||
aspects of libvirt, particularly application development
|
||||
guides for the C library and Python, and a virsh command
|
||||
reference. There is thus scope for work by people who are
|
||||
familiar with using or developing against libvirt, to
|
||||
write further content for these guides. There is also a
|
||||
need for people to review existing content for copy editing
|
||||
and identifying gaps in the docs</li>
|
||||
<li><strong>Website / wiki curation</strong>. The bulk of the website is
|
||||
maintained in the primary GIT repository, while the wiki
|
||||
site uses mediawiki. In both cases there is a need for
|
||||
people to both write new content and curate existing
|
||||
content to identify outdated information, improve its
|
||||
organization and target gaps.</li>
|
||||
<li><strong>Testing</strong>. There are a number of tests suites that can run
|
||||
automated tests against libvirt. The coverage of the tests
|
||||
is never complete, so there is a need for people to create
|
||||
new test suites and / or provide environments to actually
|
||||
run the tests in a variety of deployment scenarios.</li>
|
||||
<li><strong>Code analysis</strong>. The libvirt project has access to the coverity
|
||||
tool to run static analysis against the codebase, however,
|
||||
there are other types of code analysis that can be useful.
|
||||
In particular fuzzing of the inputs can be very effective
|
||||
at identifying problematic edge cases.</li>
|
||||
<li><strong>Security handling</strong>. Downstream (operating system) vendors
|
||||
who distribute libvirt may wish to propose a person to
|
||||
be part of the security handling team, to get early access
|
||||
to information about forthcoming vulnerability fixes.</li>
|
||||
<li><strong>Evangalism</strong>. Work done by the project is of no benefit
|
||||
unless the (potential) user community knows that it
|
||||
exists. Thus it is critically important to the health
|
||||
and future growth of the project, that there are a people
|
||||
who evangalise the work created by the project. This can
|
||||
take many forms, writing blog posts (about usage of features,
|
||||
personal user experiences, areas for future work, and more),
|
||||
syndicating docs and blogs via social media, giving user
|
||||
group and/or conference talks about libvirt.</li>
|
||||
<li><strong>User assistance</strong>. Since documentation
|
||||
is never perfect, there are inevitably cases where users
|
||||
will struggle to attain a deployment goal they have, or
|
||||
run into trouble with managing an existing deployment.
|
||||
While some users may be able to contact a software vendor
|
||||
to obtain support, it is common to rely on community help
|
||||
forums such as <a href="contact.html#email">libvirt users
|
||||
mailing list</a>, or sites such as
|
||||
<a href="http://stackoverflow.com/questions/tagged/libvirt">stackoverflow.</a>
|
||||
People who are familiar with libvirt and have ability &
|
||||
desire to help other users are encouraged to participate in
|
||||
these help forums.</li>
|
||||
</ul>
|
||||
|
||||
<h2><a id="comms">Communication</a></h2>
|
||||
|
||||
<p>
|
||||
For full details on contacting other project contributors
|
||||
read the <a href="contact.html">contact</a> page. There
|
||||
are two main channels that libvirt uses for communication
|
||||
between contributors:
|
||||
</p>
|
||||
|
||||
<h3><a id="email">Mailing lists</a></h3>
|
||||
|
||||
<p>
|
||||
The project has a number of
|
||||
<a href="contact.html#email">mailing lists</a> for
|
||||
general communication between contributors.
|
||||
In general any design discussions and review
|
||||
of contributions will take place on the mailing
|
||||
lists, so it is important for all contributors
|
||||
to follow the traffic.
|
||||
</p>
|
||||
|
||||
<h3><a id="irc">Instant messaging / chat</a></h3>
|
||||
|
||||
<p>
|
||||
Contributors to libvirt are encouraged to join the
|
||||
<a href="contact.html#irc">IRC channel</a> used by
|
||||
the project, where they can have live conversations
|
||||
with others members.
|
||||
</p>
|
||||
|
||||
<h2><a id="outreach">Student / outreach coding programs</a></h2>
|
||||
|
||||
<p>
|
||||
Since 2016, the libvirt project directly participates as an
|
||||
organization in the <a href="http://wiki.libvirt.org/page/Google_Summer_of_Code_Ideas">Google Summer of Code program</a>. Prior to
|
||||
this the project had a number of students in the program
|
||||
via a joint application with the QEMU project. People are
|
||||
encouraged to look at both the libvirt and QEMU programs
|
||||
to identify potentially interesting projects to work on.
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user