Ceph is a distributed object, block, and file storage platform
Go to file
Sage Weil d3766916a7 Merge PR #26059 into master
* refs/pull/26059/head:
	mon/MonClient: fix keepalive with v2 auth
	msg/async/ProtocolV2: reject peer_addrs of -
	msg/async/ProtocolV2: clean up feature management
	mon/MonClient: set up rotating_secrets, etc before msgr ready
	msg/async: let client specify preferred order of modes
	msg/async/ProtocolV2: include entity_name, features in reconnect
	msg/async/ProtocolV2: fix write_lock usage around AckFrame
	qa/suites/rados/verify/validator/valgrind: debug refs = 5
	qa/standalone/ceph-helpers: fix health_ok test
	auth/AuthRegistry: only complain about disabling cephx if cephx was enabled
	auth/AuthRegistry: fix locking for get_supported_methods()
	auth: remove AUTH_UNKNOWN weirdness, hardcoded defaults.
	msg/async/ProtocolV2: remove unused get_auth_allowed_methods
	osd: set up messener auth_* before setting dispatcher (and going 'ready')
	mon/AuthMonitor: request max_global_id increase from peon in tick
	mon: prime MgrClient only after messengers are initialized
	qa/suites/rados/workloads/rados_api_tests.yaml: debug mgrc = 20 on mon
	auth: document Auth{Client,Server} interfaces
	auth: future-proof AUTH_MODE_* a bit in case we need to change the encoding byte
	mon/MonClient: request monmap on open instead of ping
	mgr/PyModuleRegistry: add details for MGR_MODULE_{DEPENDENCY,ERROR}
	crimson: fix build
	mon/MonClient: finsih authenticate() only after we get monmap; fix 'tell mgr'
	mon: add auth_lock to protect auth_meta manipulation
	ceph-mon: set up auth before binding
	mon: defer initial connection auth attempts until initial quorum is formed
	mon/MonClient: make MonClientPinger an AuthCleint
	ceph_test_msgr: use DummyAuth
	auth/DummyAuth: dummy auth server and client for test code
	mon/Monitor: fix leak of auth_handler if we error out
	doc/dev/cephx: re-wordwrap
	doc/dev/cephx: document nautilus change to cephx
	vstart.sh: fix --msgr2 option
	msg/async/ProtocolV2: use shared_ptr to manage auth_meta
	auth/Auth{Client,Server}: pass auth_meta in explicitly
	mon/MonClient: behave if authorizer can't be built (yet)
	osd: set_auth_server on client_messenger
	common/ceph_context: get_moduel_type() for seastar cct
	auth: make connection_secret a std::string
	auth,msg/async/ProtocolV2: negotiate connection modes
	auth/AuthRegistry: refactor handling of auth_*_requred options
	osd,mgr,mds: remove unused authorize registries
	switch monc, daemons to use new msgr2 auth frame exchange
	doc/dev/msgr2: update docs to match implementation for auth frames
	auth/AuthClientHandler: add build_initial_request hook
	msg/Messenger: attach auth_client and/or auth_server to each Messenger
	auth: introduce AuthClient and AuthServer handlers
	auth: codify AUTH_MODE_AUTHORIZER
	msg/Connection: track peer_id (id portion of entity_name_t) for msgr2
	auth/AuthAuthorizeHandler: add get_supported_methods()
	auth/AuthAuthorizeHandler: fix args for verify_authorizer()
	auth: constify bufferlist arg to AuthAuthorizer::add_challenge()
	auth/cephx: share all tickets and connection_secret in initial reply
	msg/async,auth: add AuthConnectionMeta to Protocol
	auth/AuthClientHandler: pass in session_key, connection_secret pointers
	auth/AuthServiceHandler: take session_key and connection_secret as args
	auth/cephx: pass more specific type into build_session_auth_info
	mon/Session: separate session creation, peer ident, and registration
	mon/AuthMonitor: bump max_global_id from on_active() and tick()
	mon/AuthMonitor: be more careful with max_global_id
	mon: only all ms_handle_authentication() if auth method says we're done
	mon/AuthMonitor: fix "finished with auth" condition check
	auth: clean up AuthServiceHandler::handle_request() args
	auth: clean up AuthServiceHandler::start_session()
	mon/AuthMonitor: drop unused op arg to assign_global_id()
	msg/async: separate TAG_AUTH_REQUEST_MORE and TAG_AUTH_REPLY_MORE
	msg/async: consolidate authorizer checks
	msg/async: move get_auth_allowed into ProtocolV2.cc
	mon/MonClient: trivial cleanup

Reviewed-by: Greg Farnum <gfarnum@redhat.com>
2019-02-07 16:51:39 -06:00
.github
admin
alpine
bin
ceph-erasure-code-corpus@2d7d78b9cc
ceph-menv
ceph-object-corpus@e32bf8ca3d
cmake/modules
debian build: disable kerberos for nautilus 2019-02-03 14:27:49 -06:00
doc Merge PR #26059 into master 2019-02-07 16:51:39 -06:00
etc
examples
fusetrace
keys
man
mirroring
monitoring/grafana
qa Merge PR #26059 into master 2019-02-07 16:51:39 -06:00
selinux
share
src Merge PR #26059 into master 2019-02-07 16:51:39 -06:00
sudoers.d
systemd
udev
.gitattributes
.githubmap Merge PR #26112 into master 2019-02-01 12:40:56 -06:00
.gitignore git: Ignore tags anywhere 2019-01-26 19:48:48 -08:00
.gitmodule_mirrors
.gitmodules
.mailmap
.organizationmap
.peoplemap
AUTHORS
ceph.spec.in Merge pull request #26258 from liewegas/wip-disable-krb 2019-02-06 19:00:01 +08:00
CMakeLists.txt build: disable kerberos for nautilus 2019-02-03 14:27:49 -06:00
CodingStyle
CONTRIBUTING.rst
COPYING
COPYING-GPL2
COPYING-LGPL2.1
do_cmake.sh
do_freebsd.sh
doc_deps.deb.txt
Doxyfile
install-deps.sh install-deps.sh: use latest setuptools 2019-01-27 01:33:10 +08:00
make-apk.sh
make-debs.sh
make-dist
make-srpm.sh
PendingReleaseNotes mds: simplify recall warnings 2019-01-31 12:07:54 -08:00
pom.xml
README.aix
README.alpine.md
README.FreeBSD
README.md
README.solaris
README.xio
run-make-check.sh
SubmittingPatches.rst

Ceph - a scalable distributed storage system

Please see http://ceph.com/ for current info.

Contributing Code

Most of Ceph is licensed under the LGPL version 2.1. Some miscellaneous code is under BSD-style license or is public domain. The documentation is licensed under Creative Commons Attribution Share Alike 3.0 (CC-BY-SA-3.0). There are a handful of headers included here that are licensed under the GPL. Please see the file COPYING for a full inventory of licenses by file.

Code contributions must include a valid "Signed-off-by" acknowledging the license for the modified or contributed file. Please see the file SubmittingPatches.rst for details on what that means and on how to generate and submit patches.

We do not require assignment of copyright to contribute code; code is contributed under the terms of the applicable license.

Checking out the source

You can clone from github with

git clone git@github.com:ceph/ceph

or, if you are not a github user,

git clone git://github.com/ceph/ceph

Ceph contains many git submodules that need to be checked out with

git submodule update --init --recursive

Build Prerequisites

The list of Debian or RPM packages dependencies can be installed with:

./install-deps.sh

Building Ceph

Note that these instructions are meant for developers who are compiling the code for development and testing. To build binaries suitable for installation we recommend you build deb or rpm packages, or refer to the ceph.spec.in or debian/rules to see which configuration options are specified for production builds.

Prerequisite: CMake 3.5.1

Build instructions:

./do_cmake.sh
cd build
make

(Note: do_cmake.sh now defaults to creating a debug build of ceph that can be up to 5x slower with some workloads. Please pass "-DCMAKE_BUILD_TYPE=RelWithDebInfo" to do_cmake.sh to create a non-debug release.)

This assumes you make your build dir a subdirectory of the ceph.git checkout. If you put it elsewhere, just replace .. in do_cmake.sh with a correct path to the checkout. Any additional CMake args can be specified setting ARGS before invoking do_cmake. See cmake options for more details. Eg.

ARGS="-DCMAKE_C_COMPILER=gcc-7" ./do_cmake.sh

To build only certain targets use:

make [target name]

To install:

make install

CMake Options

If you run the cmake command by hand, there are many options you can set with "-D". For example the option to build the RADOS Gateway is defaulted to ON. To build without the RADOS Gateway:

cmake -DWITH_RADOSGW=OFF [path to top level ceph directory]

Another example below is building with debugging and alternate locations for a couple of external dependencies:

cmake -DLEVELDB_PREFIX="/opt/hyperleveldb" -DOFED_PREFIX="/opt/ofed" \
-DCMAKE_INSTALL_PREFIX=/opt/accelio -DCMAKE_C_FLAGS="-O0 -g3 -gdwarf-4" \
..

To view an exhaustive list of -D options, you can invoke cmake with:

cmake -LH

If you often pipe make to less and would like to maintain the diagnostic colors for errors and warnings (and if your compiler supports it), you can invoke cmake with:

cmake -DDIAGNOSTICS_COLOR=always ..

Then you'll get the diagnostic colors when you execute:

make | less -R

Other available values for 'DIAGNOSTICS_COLOR' are 'auto' (default) and 'never'.

Building a source tarball

To build a complete source tarball with everything needed to build from source and/or build a (deb or rpm) package, run

./make-dist

This will create a tarball like ceph-$version.tar.bz2 from git. (Ensure that any changes you want to include in your working directory are committed to git.)

Running a test cluster

To run a functional test cluster,

cd build
make vstart        # builds just enough to run vstart
../src/vstart.sh --debug --new -x --localhost --bluestore
./bin/ceph -s

Almost all of the usual commands are available in the bin/ directory. For example,

./bin/rados -p rbd bench 30 write
./bin/rbd create foo --size 1000

To shut down the test cluster,

../src/stop.sh

To start or stop individual daemons, the sysvinit script can be used:

./bin/init-ceph restart osd.0
./bin/init-ceph stop

Running unit tests

To build and run all tests (in parallel using all processors), use ctest:

cd build
make
ctest -j$(nproc)

(Note: Many targets built from src/test are not run using ctest. Targets starting with "unittest" are run in make check and thus can be run with ctest. Targets starting with "ceph_test" can not, and should be run by hand.)

When failures occur, look in build/Testing/Temporary for logs.

To build and run all tests and their dependencies without other unnecessary targets in Ceph:

cd build
make check -j$(nproc)

To run an individual test manually, run ctest with -R (regex matching):

ctest -R [regex matching test name(s)]

(Note: ctest does not build the test it's running or the dependencies needed to run it)

To run an individual test manually and see all the tests output, run ctest with the -V (verbose) flag:

ctest -V -R [regex matching test name(s)]

To run an tests manually and run the jobs in parallel, run ctest with the -j flag:

ctest -j [number of jobs]

There are many other flags you can give ctest for better control over manual test execution. To view these options run:

man ctest

Building the Documentation

Prerequisites

The list of package dependencies for building the documentation can be found in doc_deps.deb.txt:

sudo apt-get install `cat doc_deps.deb.txt`

Building the Documentation

To build the documentation, ensure that you are in the top-level /ceph directory, and execute the build script. For example:

admin/build-doc